Oracle 12.2.0.1.0 PDB丢失数据文件对CDB的影响
在Oracle 12.1.0.1.0版本时:
当某一个PDB数据库丢失数据文件后,可能会导致所有整个CDB数据库宕机;
主要是_datafile_write_errors_crash_instance参数导致的,默认为true;
其中:
12.1版本多租户可以包含252个PDB;
12.2版本多租户可以包含4096个PDB;
如果因为其中一个PDB异常导致整个CDB都宕机,显然是不合理的;
因此在12.2.0.1版本,修复了这个问题;
实验如下:
OS:
[root@chenjch ~]# cat etc/issue
Red Hat Enterprise Linux Server release 6.3 (Santiago)
Kernel \r on an \m
DB:Oracle 12.2.0.1.0
12.2.0.1.0版本_datafile_write_errors_crash_instance参数默认值也是TRUE;
SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
FROM SYS.x$ksppi x, SYS.x$ksppcv y
WHERE x.inst_id = USERENV('Instance')
AND y.inst_id = USERENV('Instance')
AND x.indx = y.indx
AND x.ksppinm LIKE '%_datafile_write_errors_crash_instance%';
数据库启用归档模式;
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 3
Next log sequence to archive 5
Current log sequence 5
实验之前先用RMAN对PDB做全库备份
[oracle12@chenjch ~]$ rman target
RMAN> backup pluggable database orclpdb;
RMAN 12C 备份
备份全部的数据库(包括CDB)
RMAN> BACKUP DATABASE;
只备份CDB
RMAN> BACKUP DATABASE ROOT;
只备份PDB(一个或多个)
rman target=sys/oracle@pdb1
RMAN> BACKUP DATABASE;
---或者
rman target /
RMAN> BACKUP PLUGGABLE DATABASE orclpdb;
多个数据库备份
RMAN> BACKUP PLUGGABLE DATABASE pdb1,pdb2;
删除或重命名orclpdb下的system01.dbf数据文件
[oracle12@chenjch orclpdb]$ pwd
/u01/app/oracle12/oradata/orcl/orclpdb
[oracle12@chenjch orclpdb]$ mv system01.dbf system01.dbf_bak
手动生成检查点
SQL> conn /as sysdba
SQL> alter system checkpoint;
查看警告日志
[root@chenjch trace]# pwd
/u01/app/oracle12/diag/rdbms/orcl/orcl/trace
[root@chenjch trace]# tail -f alert_orcl.log
2017-04-16T15:22:21.522848+08:00
Errors in file /u01/app/oracle12/diag/rdbms/orcl/orcl/trace/orcl_ckpt_9896.trc:
ORA-01243: system tablespace file suffered media failure
ORA-01116: error in opening database file 9
ORA-01110: data file 9: '/u01/app/oracle12/oradata/orcl/orclpdb/system01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
2017-04-16T15:22:21.523233+08:00
Internal PDB shutdown abort of ORCLPDB (container=3)
ORCLPDB(3):JIT: pid 9866 requesting stop
2017-04-16T15:22:21.707754+08:00
Errors in file /u01/app/oracle12/diag/rdbms/orcl/orcl/trace/orcl_m000_10474.trc:
ORA-01110: data file 9: '/u01/app/oracle12/oradata/orcl/orclpdb/system01.dbf'
ORA-01565: error in identifying file '/u01/app/oracle12/oradata/orcl/orclpdb/system01.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
2017-04-16T15:22:22.222205+08:00
Errors in file /u01/app/oracle12/diag/rdbms/orcl/orcl/trace/orcl_m000_10474.trc:
ORA-01110: data file 10: '/u01/app/oracle12/oradata/orcl/orclpdb/sysaux01.dbf'
ORA-01208: data file is an old version - not accessing current version
2017-04-16T15:22:22.474543+08:00
Errors in file /u01/app/oracle12/diag/rdbms/orcl/orcl/trace/orcl_m000_10474.trc:
ORA-01110: data file 11: '/u01/app/oracle12/oradata/orcl/orclpdb/undotbs01.dbf'
ORA-01208: data file is an old version - not accessing current version
2017-04-16T15:22:22.694146+08:00
Errors in file /u01/app/oracle12/diag/rdbms/orcl/orcl/trace/orcl_m000_10474.trc:
ORA-01110: data file 12: '/u01/app/oracle12/oradata/orcl/orclpdb/users01.dbf'
ORA-01208: data file is an old version - not accessing current version
此时CDB仍是OPEN状态,并没有自动关闭实例;
SQL> select status from v$instance;
STATUS
------------
OPEN
PDB数据库处于mount状态,并且无法open
SQL> alter session set container=orclpdb;
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
3 ORCLPDB MOUNTED
SQL> startup
ORA-01113: file 12 needs media recovery
ORA-01110: data file 12: '/u01/app/oracle12/oradata/orcl/orclpdb/users01.dbf'
SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 9: '/u01/app/oracle12/oradata/orcl/orclpdb/system01.dbf'
ORA-01157: cannot identify/lock data file 9 - see DBWR trace file
ORA-01110: data file 9: '/u01/app/oracle12/oradata/orcl/orclpdb/system01.dbf'
SQL> recover datafile 9;
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 9: '/u01/app/oracle12/oradata/orcl/orclpdb/system01.dbf'
ORA-01157: cannot identify/lock data file 9 - see DBWR trace file
ORA-01110: data file 9: '/u01/app/oracle12/oradata/orcl/orclpdb/system01.dbf'
恢复system01.dbf数据文件
(1) 离线损失数据文件
SQL> alter database datafile 9 offline;
(2)rman执行恢复操作
[oracle12@chenjch ~]$ rman target /
RMAN> restore datafile 9;
RMAN> recover datafile 9;
(3)online受损文件,启动pdb;
SQL> alter session set container=orclpdb;
SQL> startup
ORA-01147: SYSTEM tablespace file 9 is offline
SQL> alter database datafile 9 online;
SQL> startup
ORA-01113: file 12 needs media recovery
ORA-01110: data file 12: '/u01/app/oracle12/oradata/orcl/orclpdb/users01.dbf'
SQL> recover database;
Media recovery complete.
SQL> startup
Pluggable Database opened.