对于19c在pdb情况下三种常见故障进行了模拟测试:
模拟19c数据库redo异常恢复
模拟19c数据库pdb undo异常恢复
模拟19c数据库root pdb undo异常恢复
模拟oracle 19c数据库redo丢失的恢复操作,模拟数据库有事务,在没有提交的情况下redo丢失故障
[oracle@localhost oradata]$ ss
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Nov 16 16:11:16 2020
Version 19.5.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.5.0.0.0
SQL> conn xff/oracle@127.0.0.1/pdb
Connected.
SQL> create table t_xifenfei as select * from dba_objects;
Table created.
SQL> insert into t_xifenfei select * from t_xifenfei;
insert into t_xifenfei select * from t_xifenfei;
insert into t_xifenfei select * from t_xifenfei;
insert into t_xifenfei select * from t_xifenfei;
insert into t_xifenfei select * from t_xifenfei;
72351 rows created.
SQL>
144702 rows created.
SQL>
289404 rows created.
SQL>
578808 rows created.
SQL>
1157616 rows created.
另外一个会话kill数据库并且删除redo
[root@localhost ~]# ps -ef|grep pmon
oracle 38500 1 0 16:08 ? 00:00:00 ora_pmon_ora19c
root 39030 39009 0 16:11 pts/2 00:00:00 grep --color=auto pmon
[root@localhost ~]# kill -9 38500
[root@localhost ~]# ps -ef|grep pmon
root 39042 39009 0 16:11 pts/2 00:00:00 grep --color=auto pmon
[root@localhost ~]# ls -l /u01/app/oracle/oradata/ORA19C/redo*.log
ls: cannot access /u01/app/oracle/oradata/ORA19C/redo*.log: No such file or directory
启动数据库报错ORA-00313 ORA-00312 ORA-27037
SQL> startup
ORACLE instance started.
Total System Global Area 4999609088 bytes
Fixed Size 9145088 bytes
Variable Size 905969664 bytes
Database Buffers 4076863488 bytes
Redo Buffers 7630848 bytes
Database mounted.
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/ORA19C/redo03.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
因为redo全部丢失只能尝试强制拉库
SQL> startup mount pfile='/tmp/pfile'
ORACLE instance started.
Total System Global Area 4999609088 bytes
Fixed Size 9145088 bytes
Variable Size 905969664 bytes
Database Buffers 4076863488 bytes
Redo Buffers 7630848 bytes
Database mounted.
SQL> recover database until cancel;
ORA-00279: change 2335666 generated at 11/16/2020 16:08:42 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/product/19.2/db_1/dbs/arch1_12_1056620100.dbf
ORA-00280: change 2335666 for thread 1 is in sequence #12
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u01/app/oracle/oradata/ORA19C/system01.dbf'
ORA-01112: media recovery not started
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-00603: ORACLE server session terminated by fatal error
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00600: internal error code, arguments: [kcbzib_kcrsds_1], [], [], [], [],
[], [], [], [], [], [], []
Process ID: 39588
Session ID: 9 Serial number: 32012
数据库报ORA-600 kcbzib_kcrsds_1错误是由于在强制拉库过程中文件异常导致,通过对异常文件进行处理数据库open成功
SQL> recover database;
Media recovery complete.
SQL> alter database open;
Database altered.
SQL>
SQL> alter session set container=pdb;
Session altered.
SQL> alter database open;
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB READ WRITE NO
这个是模拟redo丢失或者损坏故障,在实际的生产故障中可能要比这个复杂很多.