18cRAC dataguard主库克隆pdb从库报错误

环境:

主库: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比较多,文件路径也比较长,修改的时候全部整理成一行,不要换行。

原文地址:https://www.cnblogs.com/hxlasky/p/14818603.html