环境:
主库:2节点rac
从库:单节点
数据库版本:18C
1. Rac主库上通过克隆的方法创建
SQL> create pluggable database pdb6 from pdb1;
Pluggable database created.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
4 PDB2 READ WRITE NO
5 PDB3 READ WRITE NO
6 PDB4 READ WRITE NO
7 PDB5 READ WRITE NO
8 PDB6 MOUNTED
SQL> alter pluggable database pdb6 open;
Pluggable database altered.
2.从库报错误
Errors in file /u01/app/oracle/diag/rdbms/ora18c/ora18c/trace/ora18c_mz00_28293.trc:
ORA-01110: data file 37: '/u01/app/oracle/product/18.0.0.0/db_1/dbs/UNNAMED00037'
ORA-01565: error in identifying file '/u01/app/oracle/product/18.0.0.0/db_1/dbs/UNNAMED00037'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
2021-05-27T03:38:30.886374-04:00
Errors in file /u01/app/oracle/diag/rdbms/ora18c/ora18c/trace/ora18c_mz00_28293.trc:
ORA-01110: data file 38: '/u01/app/oracle/product/18.0.0.0/db_1/dbs/UNNAMED00038'
ORA-01565: error in identifying file '/u01/app/oracle/product/18.0.0.0/db_1/dbs/UNNAMED00038'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
Checker run found 4 new persistent data failures
这种情况就是因为dataguard的db_file_name_convert参数没有设置映射关系导致的
3. 从库查看pdb并尝试打开
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ ONLY NO
4 PDB2 READ ONLY NO
5 PDB3 READ ONLY NO
6 PDB4 READ ONLY NO
7 PDB5 READ ONLY NO
8 PDB6 MOUNTED
SQL> alter pluggable database pdb6 open;
alter pluggable database pdb6 open
*
ERROR at line 1:
ORA-01111: name for data file 37 is unknown - rename to correct file
4. 从库查看新增pdb6的文件
SQL> set linesize 1000;
SQL> column con_id format 99;
SQL> column guid format a32;
SQL> column pdb_name format a8;
SQL> column file_id format 99;
SQL> column file_name format a100;
SQL> select a.CON_ID, a.guid, a.name as pdb_name, b.FILE# as file_id, b.NAME as file_name
2 from v$pdbs a, v$datafile b
3 where a.CON_ID = b.CON_ID
4 and a.name='PDB6';
CON_ID GUID PDB_NAME FILE_ID FILE_NAME
------ -------------------------------- -------- ------- ----------------------------------------------------------------------------------------------------
8 C34BB0AC8E731C25E0536F38A8C0162E PDB6 37 /u01/app/oracle/product/18.0.0.0/db_1/dbs/UNNAMED00037
8 C34BB0AC8E731C25E0536F38A8C0162E PDB6 38 /u01/app/oracle/product/18.0.0.0/db_1/dbs/UNNAMED00038
8 C34BB0AC8E731C25E0536F38A8C0162E PDB6 39 /u01/app/oracle/product/18.0.0.0/db_1/dbs/UNNAMED00039
8 C34BB0AC8E731C25E0536F38A8C0162E PDB6 40 /u01/app/oracle/product/18.0.0.0/db_1/dbs/UNNAMED00040
8 C34BB0AC8E731C25E0536F38A8C0162E PDB6 41 /u01/app/oracle/product/18.0.0.0/db_1/dbs/UNNAMED00041
8 C34BB0AC8E731C25E0536F38A8C0162E PDB6 42 /u01/app/oracle/product/18.0.0.0/db_1/dbs/UNNAMED00042
8 C34BB0AC8E731C25E0536F38A8C0162E PDB6 43 /u01/app/oracle/product/18.0.0.0/db_1/dbs/UNNAMED00043
7 rows selected.
5. 恢复pdb6
SQL>alter session set container=cdb$root;
SQL>alter system set standby_file_management=auto;
SQL>alter database recover managed standby database cancel;
SQL>alter session set container=pdb6;
SQL>alter pluggable database disable recovery;
RMAN> run{
set newname for pluggable database pdb6 to new;
restore pluggable database pdb6 from service tnsslnngk1 ;
switch datafile all;
}
这里的tnsslnngk1是指向rac节点1的tns名
tnsslnngk1=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.111)(PORT = 1521))
(LOAD_BALANCE = no)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = slnngk)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 05/27/2021 03:57:00
RMAN-06553: DB_CREATE_FILE_DEST must be set for SET NEWNAME ... TO NEW
解决办法:
[oracle@18c_single bak]$ mkdir -p /u01/app/oracle/oradata/ora18c/pdb6
SQL> connect / as sysdba
SQL> alter system set db_create_file_dest='/u01/app/oracle/oradata/ora18c/pdb6' scope=both;
修改完成后再次执行:
RMAN> run{
set newname for pluggable database pdb6 to new;
restore pluggable database pdb6 from service tnsslnngk1 ;
switch datafile all;
}
设置db_create_file_dest后恢复的数据文件如下:
SQL> set linesize 1000;
SQL> column con_id format 99;
SQL> column guid format a32;
SQL> column pdb_name format a8;
SQL> column file_id format 99;
SQL> column file_name format a128;
SQL> select a.CON_ID, a.guid, a.name as pdb_name, b.FILE# as file_id, b.NAME as file_name
2 from v$pdbs a, v$datafile b
3 where a.CON_ID = b.CON_ID
4 and a.name='PDB6';
CON_ID GUID PDB_NAME FILE_ID FILE_NAME
------ -------------------------------- -------- ------- --------------------------------------------------------------------------------------------------------------------------------
8 C34BB0AC8E731C25E0536F38A8C0162E PDB6 37 /u01/app/oracle/oradata/ora18c/pdb6/ORA18C/C34BB0AC8E731C25E0536F38A8C0162E/datafile/o1_mf_system_jbynns42_.dbf
8 C34BB0AC8E731C25E0536F38A8C0162E PDB6 38 /u01/app/oracle/oradata/ora18c/pdb6/ORA18C/C34BB0AC8E731C25E0536F38A8C0162E/datafile/o1_mf_sysaux_jbynnwh6_.dbf
8 C34BB0AC8E731C25E0536F38A8C0162E PDB6 39 /u01/app/oracle/oradata/ora18c/pdb6/ORA18C/C34BB0AC8E731C25E0536F38A8C0162E/datafile/o1_mf_undotbs1_jbynnzxj_.dbf
8 C34BB0AC8E731C25E0536F38A8C0162E PDB6 40 /u01/app/oracle/oradata/ora18c/pdb6/ORA18C/C34BB0AC8E731C25E0536F38A8C0162E/datafile/o1_mf_undo_2_jbyno16w_.dbf
8 C34BB0AC8E731C25E0536F38A8C0162E PDB6 41 /u01/app/oracle/oradata/ora18c/pdb6/ORA18C/C34BB0AC8E731C25E0536F38A8C0162E/datafile/o1_mf_users_jbyno2mx_.dbf
8 C34BB0AC8E731C25E0536F38A8C0162E PDB6 42 /u01/app/oracle/oradata/ora18c/pdb6/ORA18C/C34BB0AC8E731C25E0536F38A8C0162E/datafile/o1_mf_tps_hxl_jbyno3xx_.dbf
8 C34BB0AC8E731C25E0536F38A8C0162E PDB6 43 /u01/app/oracle/oradata/ora18c/pdb6/ORA18C/C34BB0AC8E731C25E0536F38A8C0162E/datafile/o1_mf_tps_hxl_jbyno59m_.dbf
7 rows selected.
说明:
若是不采用配置db_create_file_dest可以采用如下方法恢复,指定对应的文件
mkdir -p /u01/app/oracle/oradata/ora18c/pdb6
RMAN> run{
set newname for datafile 44 to '/u01/app/oracle/oradata/ora18c/pdb6/system.453.1073623545';
set newname for datafile 45 to '/u01/app/oracle/oradata/ora18c/pdb6/sysaux.454.1073623545';
set newname for datafile 46 to '/u01/app/oracle/oradata/ora18c/pdb6/undotbs1.450.1073623545';
set newname for datafile 47 to '/u01/app/oracle/oradata/ora18c/pdb6/undo_2.451.1073623545';
set newname for datafile 48 to '/u01/app/oracle/oradata/ora18c/pdb6/users.448.1073623545';
set newname for datafile 49 to '/u01/app/oracle/oradata/ora18c/pdb6/tps_hxl.449.1073623545';
set newname for datafile 50 to '/u01/app/oracle/oradata/ora18c/pdb7/tps_hxl.452.1073623545';
restore pluggable database pdb7 from service tnsslnngk1;
switch datafile all;
}
6. 从库应用日志
SQL> alter session set container=cdb$root;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter session set container=pdb6;
SQL> alter pluggable database enable recovery;
SQL> alter session set container=cdb$root;
SQL> alter database recover managed standby database disconnect from session;
8. 从库打开数据库
SQL> alter database recover managed standby database cancel;
SQL> alter database open;
SQL> alter database recover managed standby database disconnect from session;
SQL> alter pluggable database all open;
9. 还原db_create_file_dest参数
SQL> alter system set db_create_file_dest='' scope=both;
10. 从库配置db_file_name_convert
上面的配置完成了当前的主库和备份的映射文件的关系,若是以后主库上的某个pdb新增了数据文件,没有配置映射关系的话还是会报错,这个时候就需要配置好如下参数
SQL> show parameters db_file_name_convert;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string +DATA/slnngk/datafile/, /u01/a
pp/oracle/oradata/ora18c/, +DA
TA/slnngk/tempfile/, /u01/app/
oracle/oradata/ora18c/, +data/
slnngk/C21CCC2F26B343B4E0536F3
8A8C01387/datafile/, /u01/app/
oracle/oradata/ora18c/pdb1/, +
data/slnngk/C21CD091742C46B3E0
536F38A8C09100/datafile/, /u01
/app/oracle/oradata/ora18c/pdb
2/, +data/slnngk/64A52F53A7693
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
286E053CDA9E80AED76/datafile/,
/u01/app/oracle/oradata/ora18
c/pdbseed/, +DATA/SLNNGK/C346A
9F364EC42C8E0536F38A8C026FA/DA
TAFILE/, /u01/app/oracle/orada
ta/ora18c/pdb4/, +DATA/SLNNGK/
C34A5522517E2082E0536F38A8C01C
FA/DATAFILE/, /u01/app/oracle/
oradata/ora18c/pdb5/
pdb_file_name_convert string
把新增的pdb映射关系加上,我这里pdb比较多,文件路径也比较长,修改的时候全部整理成一行,不要换行。