环境介绍
主库:
主机名 | rac01 | rac02 |
实体IP | 10.206.132.232 | 10.206.132.233 |
私有IP | 192.168.56.12 | 192.168.56.13 |
虚拟IP | 10.206.132.237 | 10.206.132.238 |
SCAN IP | 10.206.132.239 | |
实例名 | racdb1 | racdb2 |
数据库名 | racdb | |
数据文件目录 | DGDATA01,DGDATA02(ASM磁盘) |
备库:
主机名 | dr-rac |
实体IP | 10.206.132.245 |
虚拟IP | 10.206.132.246 |
实例名 | racdb |
数据库名 | racdb |
数据文件目录 | /oradata01/racdb/,/oradata02/racdb |
数据文件目录备库和主库的ASM目录数量和大小要一致,后面会讲原因
1.安装oracle软体(和rac数据库的软体版本一致,本实验使用的是11GR2)
2.主库开启归档并打开force logging
打开force logging
SQL> alter database force logging; Database altered. SQL> select force_logging from v$database; FOR --- YES
打开归档
关闭数据库(两个节点执行)
$ sqlplus / as sysdba
SQL> shutdown immediate;
将数据库打开至mount状态(两个节点执行)
SQL> startup mount;
修改数据库的归档模式(任一节点即可)
SQL> alter database archivelog;
修改归档路径(两个节点执行)
SQL> alter system set log_archive_dest_1='location=/archlog/racdb';
打开数据库(两个节点)
SQL> alter database open;
3.主库全备(任一节点执行)
$ rman target / run{ allocate channel c1 device type disk format '/oggdata/backup/full_%d_%T_%s_%p.bak'; allocate channel c2 device type disk format '/oggdata/backup/full_%d_%T_%s_%p.bak'; allocate channel c3 device type disk format '/oggdata/backup/full_%d_%T_%s_%p.bak'; sql 'alter system archive log current'; backup as compressed backupset database plus archivelog; backup current controlfile; backup spfile; }
4.将全备文件传送至备库
$ scp * 10.206.132.245:/data/backup
6.将主库的参数文件传送至备库
SQL> create pfile='/tmp/initracdb.ora' from spfile; $ scp /tmp/initracdb.ora 10.206.132.245:/oracle/11204/dbs
根据实际的情况,RAC的参数文件和单实例的参数文件有一定的差别,所以我一般会从一个单实例数据库创建一个pfile传送过来并修改
7.修改参数文件并创建参数文件所需目录
其中以双下划线开头的是oracle自动内存管理生成的,可以直接删除,如
testdb.__db_cache_size=1862270976 testdb.__java_pool_size=16777216 testdb.__large_pool_size=33554432 testdb.__oracle_base='/oracle'#ORACLE_BASE set from environment testdb.__pga_aggregate_target=838860800 testdb.__sga_target=2483027968 testdb.__shared_io_pool_size=0 testdb.__shared_pool_size=503316480 testdb.__streams_pool_size=33554432
其中以单下划线开头的是隐含参数,根据实际情况修改
修改SGA,PGA
修改控制文件位置
*.control_files='/oradata01/racdb/control01.ctl','/oradata01/racdb/control02.ctl'
创建目录
*.audit_file_dest='/oracle/admin/racdb/adump'
*.db_recovery_file_dest='/oracle/fast_recovery_area'
其他参数根据实际情况修改,删除或者添加
8.创建spfile并打开实例
SQL> create spfile from pfile; SQL> startup nomount;
9.还原standby controlfile
进入主库查看controlfile的备份片
[oracle@rac01 ~]$ rman target / RMAN> list backup of controlfile; ------------------------------------------------------------------------------------ BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ --------------- 26 Full 17.67M DISK 00:00:01 15-APR-20 BP Key: 26 Status: AVAILABLE Compressed: NO Tag: TAG20200415T150050 Piece Name: /oggdata/backup/full_RACDB_20200415_26_1.bak Control File Included: Ckp SCN: 558979 Ckp time: 15-APR-20 ------------------------------------------------------------------------------------
备库进入rman进行还原
[oracle@dr-rac dbs]$ rman target / RMAN> restore standby controlfile from '/data/backup/full_RACDB_20200415_26_1.bak';
10.将数据库启动至mount状态并进行数据库还原(备库)
mount数据库
[oracle@dr-rac dbs]$ sqlplus / as sysdba SQL> alter database mount;
此时遇到了一个问题,在RAC数据库中数据文件(包括临时表空间,在线联机日志)是在ASM磁盘内的,例如+DGDATA01等,在单实例上面是系统目录,如何对应
查看当前数据文件的状态
SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- +DGDATA01/racdb/datafile/system.260.1037709075 +DGDATA01/racdb/datafile/sysaux.261.1037709079 +DGDATA01/racdb/datafile/undotbs1.262.1037709081 +DGDATA01/racdb/datafile/undotbs2.264.1037709089 +DGDATA01/racdb/datafile/users.265.1037709091 +DGDATA02/racdb/datafile/mytbs01.dbf SQL> select name from v$tempfile; NAME -------------------------------------------------------------------------------- +DGDATA01/racdb/tempfile/temp.263.1037709085 SQL> select member from v$logfile; MEMBER -------------------------------------------------------------------------------- +DGDATA01/racdb/redo01.log +DGDATA01/racdb/redo02.log +DGDATA01/racdb/redo03.log +DGDATA01/racdb/redo04.log
因此我们需要在RMAN中将恢复的目录对应起来(下面的脚本根据自己实际情况进行修改)
DECLARE dir VARCHAR2 (100); CURSOR dbfs IS SELECT FILE_NAME FROM DBA_DATA_FILES; BEGIN FOR dbf IN dbfs LOOP SELECT SUBSTR (dbf.FILE_NAME, 2, INSTR (dbf.FILE_NAME, '/', 1) - 2) INTO DIR FROM DUAL; IF (DIR = 'DGDATA01') THEN DBMS_OUTPUT.PUT_LINE('SET NEWNAME FOR DATAFILE '''||dbf.FILE_NAME||''' TO ''/oradata01'||substr(dbf.file_name,instr(dbf.file_name,'/',1),length(dbf.file_name))||''';'); ELSIF (DIR = 'DGDATA02') THEN DBMS_OUTPUT.PUT_LINE('SET NEWNAME FOR DATAFILE '''||dbf.FILE_NAME||''' TO ''/oradata02'||substr(dbf.file_name,instr(dbf.file_name,'/',1),length(dbf.file_name))||''';'); END IF; END LOOP; END; ---------------------------------------------------------------------------------------------------------------------- SET NEWNAME FOR DATAFILE '+DGDATA01/racdb/datafile/system.260.1037709075' TO '/oradata01/racdb/datafile/system.260.1037709075'; SET NEWNAME FOR DATAFILE '+DGDATA01/racdb/datafile/sysaux.261.1037709079' TO '/oradata01/racdb/datafile/sysaux.261.1037709079'; SET NEWNAME FOR DATAFILE '+DGDATA01/racdb/datafile/undotbs1.262.1037709081' TO '/oradata01/racdb/datafile/undotbs1.262.1037709081'; SET NEWNAME FOR DATAFILE '+DGDATA01/racdb/datafile/undotbs2.264.1037709089' TO '/oradata01/racdb/datafile/undotbs2.264.1037709089'; SET NEWNAME FOR DATAFILE '+DGDATA01/racdb/datafile/users.265.1037709091' TO '/oradata01/racdb/datafile/users.265.1037709091'; SET NEWNAME FOR DATAFILE '+DGDATA02/racdb/datafile/mytbs01.dbf' TO '/oradata02/racdb/datafile/mytbs01.dbf'; ----------------------------------------------------------------------------------------------------------------------
使用RMAN进行数据库的还原(备库),恢复之前要在对应的目录下建立子文件夹(如racdb/datafile)
[oracle@dr-rac dbs]$ rman target / RMAN> catalog start with '/data/backup'; run { SET NEWNAME FOR DATAFILE '+DGDATA01/racdb/datafile/system.260.1037709075' TO '/oradata01/racdb/datafile/system.260.1037709075'; SET NEWNAME FOR DATAFILE '+DGDATA01/racdb/datafile/sysaux.261.1037709079' TO '/oradata01/racdb/datafile/sysaux.261.1037709079'; SET NEWNAME FOR DATAFILE '+DGDATA01/racdb/datafile/undotbs1.262.1037709081' TO '/oradata01/racdb/datafile/undotbs1.262.1037709081'; SET NEWNAME FOR DATAFILE '+DGDATA01/racdb/datafile/undotbs2.264.1037709089' TO '/oradata01/racdb/datafile/undotbs2.264.1037709089'; SET NEWNAME FOR DATAFILE '+DGDATA01/racdb/datafile/users.265.1037709091' TO '/oradata01/racdb/datafile/users.265.1037709091'; SET NEWNAME FOR DATAFILE '+DGDATA02/racdb/datafile/mytbs01.dbf' TO '/oradata02/racdb/datafile/mytbs01.dbf'; allocate channel c1 device type disk; allocate channel c2 device type disk; allocate channel c3 device type disk; restore database; release channel c1; release channel c2; release channel c3; }
11.修改controlfile中redo和tempfile的位置,以便打开后自动创建(前提还是要创建好对应的目录,否则一会儿数据库打不开)
SQL> alter database rename file '+DGDATA01/racdb/tempfile/temp.263.1037709085' to '/oradata01/racdb/tempfile/temp.263.1037709085';
DECLARE dir VARCHAR2 (100); CURSOR LFS IS SELECT MEMBER FROM v$logfile; BEGIN FOR LF IN LFS LOOP SELECT SUBSTR (LF.MEMBER, 2, INSTR (LF.MEMBER, '/', 1) - 2) INTO DIR FROM DUAL; IF (DIR = 'DGDATA01') THEN DBMS_OUTPUT.PUT_LINE('ALTER DATABASE RENAME FILE '''||LF.MEMBER||''' TO ''/oradata01'||substr(LF.MEMBER,instr(LF.MEMBER,'/',1),length(LF.MEMBER))||''';'); ELSIF (DIR = 'DGDATA02') THEN DBMS_OUTPUT.PUT_LINE('ALTER DATABASE RENAME FILE '''||LF.MEMBER||''' TO ''/oradata02'||substr(LF.MEMBER,instr(LF.MEMBER,'/',1),length(LF.MEMBER))||''';'); END IF; END LOOP; END; ------------------------------------------------------------------------------- ALTER DATABASE RENAME FILE '+DGDATA01/racdb/redo01.log' TO '/oradata01/racdb/redo01.log'; ALTER DATABASE RENAME FILE '+DGDATA01/racdb/redo02.log' TO '/oradata01/racdb/redo02.log'; ALTER DATABASE RENAME FILE '+DGDATA01/racdb/redo03.log' TO '/oradata01/racdb/redo03.log'; ALTER DATABASE RENAME FILE '+DGDATA01/racdb/redo04.log' TO '/oradata01/racdb/redo04.log'; -------------------------------------------------------------------------------
12.打开数据库
这时候报错
SQL> alter database open; alter database open * ERROR at line 1: ORA-10458: standby database requires recovery ORA-01157: cannot identify/lock data file 1 - see DBWR trace file ORA-01110: data file 1: '+DGDATA01/racdb/datafile/system.260.1037709075'
这是因为控制文件中的datafile的路径没有改变,两种办法解决
第一种,修改控制文件中数据文件的路径
DECLARE dir VARCHAR2 (100); CURSOR dbfs IS SELECT FILE_NAME FROM DBA_DATA_FILES; BEGIN FOR dbf IN dbfs LOOP SELECT SUBSTR (dbf.FILE_NAME, 2, INSTR (dbf.FILE_NAME, '/', 1) - 2) INTO DIR FROM DUAL; IF (DIR = 'DGDATA01') THEN DBMS_OUTPUT.PUT_LINE('ALTER DATABASE RENAME FILE '''||dbf.FILE_NAME||''' TO ''/oradata01'||substr(dbf.file_name,instr(dbf.file_name,'/',1),length(dbf.file_name))||''';'); ELSIF (DIR = 'DGDATA02') THEN DBMS_OUTPUT.PUT_LINE('ALTER DATABASE RENAME FILE '''||dbf.FILE_NAME||''' TO ''/oradata02'||substr(dbf.file_name,instr(dbf.file_name,'/',1),length(dbf.file_name))||''';'); END IF; END LOOP; END; ----------------------------------------------------------------------------- ALTER DATABASE RENAME FILE '+DGDATA01/racdb/datafile/system.260.1037709075' TO '/oradata01/racdb/datafile/system.260.1037709075'; ALTER DATABASE RENAME FILE '+DGDATA01/racdb/datafile/sysaux.261.1037709079' TO '/oradata01/racdb/datafile/sysaux.261.1037709079'; ALTER DATABASE RENAME FILE '+DGDATA01/racdb/datafile/undotbs1.262.1037709081' TO '/oradata01/racdb/datafile/undotbs1.262.1037709081'; ALTER DATABASE RENAME FILE '+DGDATA01/racdb/datafile/undotbs2.264.1037709089' TO '/oradata01/racdb/datafile/undotbs2.264.1037709089'; ALTER DATABASE RENAME FILE '+DGDATA01/racdb/datafile/users.265.1037709091' TO '/oradata01/racdb/datafile/users.265.1037709091'; ALTER DATABASE RENAME FILE '+DGDATA02/racdb/datafile/mytbs01.dbf' TO '/oradata02/racdb/datafile/mytbs01.dbf'; -----------------------------------------------------------------------------
第二种,在还原控制文件之前,我们在参数文件中加入如下两个参数
alter system set log_file_name_convert='+DGDATA01/racdb/','/oradata01/racdb/','+DGDATA02/racdb/','/oradata02/racdb/' scope=spfile; alter system set db_file_name_convert='+DGDATA01/racdb/datafile/','/oradata01/racdb/datafile/','+DGDATA02/racdb/datafile/','/oradata02/racdb/datafile/' scope=spfile;
第二种还原的控制文件中datafile和logfile自动会定位到正确的目录,同时在第十步中也不需要前面NET NEWNAME,直接还原即可,因此强烈建议这两个参数在还原控制文件之前加入。
参数一定要注意,前面最后加/,后面也要加/,否则替换的时候会出错,例如'+DGDATA01/racdb/','/oradata01/racdb',会把+DGDATA01/racdb/redo01.log对应成/oradata01/racdbredo01.log
再次打开数据时,又报错了
SQL> alter database open; alter database open * ERROR at line 1: ORA-10458: standby database requires recovery ORA-01152: file 1 was not restored from a sufficiently old backup ORA-01110: data file 1: '/oradata01/racdb/datafile/system.260.1037709075'
这是因为我们没有恢复数据库,使用rman恢复数据库,有两种方法
第一种,恢复数据库(这里面的SCN也可以从RMAN的list backup of archivelog all里面看到归档的最高SCN)
恢复之前要加上这两个参数的原因可以看后面的试验
SQL> alter system set db_file_name_convert='+DGDATA01/racdb/datafile','/oradata01/racdb/datafile','+DGDATA02/racdb/datafile','/oradata02/racdb/datafile' scope=spfile;
SQL> alter system set standby_file_management=auto;
查看主库当前的SCN SQL> select current_scn from v$database; 主库归档当前的REDO SQL> alter system archive log current; 将主库的归档传送至备库 $ scp /archlog/readb/* 10.206.132.245:/oradata02/archlog 备库恢复 RMAN> catalog start with '/oradata02/archlog'; RMAN> recover database until scn 565400; 打开数据库 SQL> alter database open;
第二种,不用管,继续配置DG库,之后会自动将归档传过来并应用
13.配置备库的监听
从其他库copy过来一个修改即可
$ cd /oracle/11204/network/admin/ $ scp listener.ora 10.206.132.245:`pwd`
$ vi listener.ora
$ lsnrctl star
14.将主库(任一节点)的口令文件传过来
$ cd $ORACLE_HOME/dbs $ scp orapwracdb1 10.206.132.245:/oracle/11204/dbs/orapwracdb
15.修改主库的TNS(加入自己和备库的TNS)并传送到另一个节点和备库
$ vi tnsnames.ora ------------------------------------------------------------------------------- RACDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.206.132.239)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = racdb) ) ) STANDBY_RACDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.206.132.245)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = racdb) ) ) ------------------------------------------------------------------------------- $ scp tnsnames.ora 10.206.132.233:/oracle/home/network/admin/ $ scp tnsnames.ora 10.206.132.245:/oracle/11204/network/admin
16.修改备库的参数
alter system set db_unique_name='standby_racdb' scope=spfile; alter system set db_file_name_convert='+DGDATA01/racdb/datafile','/oradata01/racdb/datafile','+DGDATA02/racdb/datafile','/oradata02/racdb/datafile' scope=spfile; alter system set log_file_name_convert='+DGDATA01/racdb/','/oradata01/racdb','+DGDATA02/racdb','/oradata02/racdb' scope=spfile; 重啟數據庫 alter system set log_archive_config='dg_config=(racdb,standby_racdb)'; alter system set log_archive_dest_1='LOCATION=/oradata02/archlog valid_for=(all_logfiles,all_roles) db_unique_name=standby_racdb'; alter system set log_archive_dest_2='service=racdb async valid_for=(online_logfiles, primary_role) db_unique_name=racdb'; alter system set log_archive_dest_state_1=enable; alter system set log_archive_dest_state_2=enable; alter system set fal_server=racdb; alter system set fal_client=standby_racdb; alter system set standby_file_management=auto; alter system set log_archive_max_processes=30;
18.修改主库参数(我的参数文件时共享的,因此修改一个节点即可)
alter system set db_file_name_convert='/oradata01/racdb/datafile','+DGDATA01/racdb/datafile','/oradata02/racdb/datafile','+DGDATA02/racdb/datafile' scope=spfile; alter system set log_file_name_convert='/oradata01/racdb','+DGDATA01/racdb/','/oradata02/racdb','+DGDATA02/racdb' scope=spfile; 重啟數據庫(根据实际业务,可以先修改,等无业务期间重启实例) alter system set log_archive_config='dg_config=(racdb,standby_racdb)'; alter system set log_archive_dest_1='LOCATION=/archlog/racdb valid_for=(all_logfiles,all_roles) db_unique_name=racdb'; alter system set log_archive_dest_2='service=standby_racdb async valid_for=(online_logfiles, primary_role) db_unique_name=standby_racdb'; alter system set log_archive_dest_state_1=enable; alter system set log_archive_dest_state_2=enable; alter system set fal_server=standby_racdb; alter system set fal_client=racdb; alter system set standby_file_management=auto; alter system set log_archive_max_processes=30;
19.打开备库的日志应用
SQL> alter database recover managed standby database disconnect;
20.新建表并插入数据测试
create table testdg(id number); insert into testdg values (1); commit; #因为没有添加standby_logfile因此无法实时应用,需要切换归档 alter system archive log current;
同时发现REDO产生了,应该是修改主库参数文件后传送过来或备库应用日志的时候产生的。
tempfile是在备库打开(open)的时候产生的。
实验
主备目录不相同的情况下,如果全备之后,增加了数据文件或者修改了数据文件的大小,在恢复备库的时候,会发生什么
试验一:主库全备后,增加数据文件的大小
alter database datafile '+DGDATA02/racdb/datafile/mytbs01.dbf' resize 2g; alter system archive log current; select current_scn from v$database; 614673 alter system archive log current; $ scp 2_17_1037709071.dbf 2_18_1037709071.dbf 1_30_1037709071.dbf 1_31_1037709071.dbf 10.206.132.245:/oradata02/archlog RMAN> catalog start with '/oradata02/archlog'; SQL> shutdown immediate; SQL> startup mount; RMAN> recover database until scn 614673; # cd /oradata02/racdb/datafile # du -sh mytbs01.dbf ---------------------------------------- 2.1G mytbs01.dbf ----------------------------------------
通过上述实验,发现只要数据文件已经被还原,那么增加数据文件的大小会自动应用到对应的目录上面(感觉应该是根据的数据文件号)
实验二:主库全备后,增加数据文件
alter tablespace mytbs add datafile '+DGDATA02/racdb/datafile/mytbs02.dbf' size 1g; alter system archive log current; select current_scn from v$database; 615468 alter system archive log current; $ scp 2_19_1037709071.dbf 2_20_1037709071.dbf 1_32_1037709071.dbf 1_33_1037709071.dbf 10.206.132.245:/oradata02/archlog RMAN> catalog start with '/oradata02/archlog'; SQL> shutdown immediate; SQL> startup mount; RMAN> recover database until scn 615468; creating datafile file number=7 name=+DGDATA02/racdb/datafile/mytbs02.dbf RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 04/16/2020 08:24:27 RMAN-20505: create datafile during recovery ORA-01119: error in creating database file '+DGDATA02/racdb/datafile/mytbs02.dbf' ORA-17502: ksfdcre:3 Failed to create file +DGDATA02/racdb/datafile/mytbs02.dbf ORA-15001: diskgroup "DGDATA02" does not exist or is not mounted ORA-15077: could not locate ASM instance serving a required diskgroup ORA-29701: unable to connect to Cluster Synchronization Service RMAN-11003: failure during parse/execution of SQL statement: alter database recover logfile '/oradata02/archlog/2_19_1037709071.dbf' ORA-00283: recovery session canceled due to errors ORA-01274: cannot add datafile '+DGDATA02/racdb/datafile/mytbs02.dbf' - file could not be created 此時,我們加入參數 SQL> alter system set db_file_name_convert='+DGDATA01/racdb/datafile','/oradata01/racdb/datafile','+DGDATA02/racdb/datafile','/oradata02/racdb/datafile' scope=spfile; SQL> shutdown immediate; SQL> startup mount; RMAN> recover database until scn 615468; Starting recover at 16-APR-20 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=67 device type=DISK RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 04/16/2020 08:29:08 RMAN-06094: datafile 7 must be restored RMAN> restore datafile 7; Starting restore at 16-APR-20 using channel ORA_DISK_1 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of restore command at 04/16/2020 08:29:44 RMAN-06085: must use SET NEWNAME command to restore datafile /oracle/11204/dbs/UNNAMED00007 run{ SET NEWNAME FOR DATAFILE '/oracle/11204/dbs/UNNAMED00007' TO '/oradata02/racdb/datafile/mytbs02.dbf'; restore datafile 7; } datafile 7 is already restored to file /oradata02/racdb/datafile/mytbs02.dbf restore not done; all files read only, offline, or already restored Finished restore at 16-APR-20 進入系統,發現/oradata02/racdb/datafile/mytbs02.dbf已經存在,此時,我們只需要修改數據文件即可 SQL> alter database rename file '/oracle/11204/dbs/UNNAMED00007' to '/oradata02/racdb/datafile/mytbs02.dbf'; 此時再次測試 alter tablespace mytbs add datafile '+DGDATA02/racdb/datafile/mytbs03.dbf' size 1g; alter system archive log current; select current_scn from v$database; 616851 alter system archive log current; $ scp 2_21_1037709071.dbf 2_22_1037709071.dbf 1_34_1037709071.dbf 1_35_1037709071.dbf 10.206.132.245:/oradata02/archlog RMAN> catalog start with '/oradata02/archlog'; RMAN> recover database until scn 616851; RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 04/16/2020 08:55:11 RMAN-20505: create datafile during recovery ORA-01119: error in creating database file '+DGDATA02/racdb/datafile/mytbs03.dbf' ORA-17502: ksfdcre:3 Failed to create file +DGDATA02/racdb/datafile/mytbs03.dbf ORA-15001: diskgroup "DGDATA02" does not exist or is not mounted ORA-15077: could not locate ASM instance serving a required diskgroup ORA-29701: unable to connect to Cluster Synchronization Service RMAN-11003: failure during parse/execution of SQL statement: alter database recover logfile '/oradata02/archlog/1_34_1037709071.dbf' ORA-00283: recovery session canceled due to errors ORA-01274: cannot add datafile '+DGDATA02/racdb/datafile/mytbs03.dbf' - file could not be created run{ SET NEWNAME FOR DATAFILE '/oracle/11204/dbs/UNNAMED00008' TO '/oradata02/racdb/datafile/mytbs03.dbf'; restore datafile 8; } SQL> alter database rename file '/oracle/11204/dbs/UNNAMED00008' to '/oradata02/racdb/datafile/mytbs03.dbf'; RMAN> recover database until scn 616851;
通过实验发现,在主库全备后增加数据文件在恢复的时候由于目录不对应,会报错
此时决定加入另外一个参数alter system set standby_file_management=auto,看恢复的时候是否可以自动创建对应的文件
SQL> alter system set db_file_name_convert='+DGDATA01/racdb/datafile','/oradata01/racdb/datafile','+DGDATA02/racdb/datafile','/oradata02/racdb/datafile' scope=spfile; SQL> alter system set standby_file_management=auto; SQL> shutdown immediate; SQL> startup mount; RMAN> catalog start with '/oradata02/archlog'; RMAN> recover database until scn 616851;
全备是在经过试验之前的,也就是没有mytbs02.dbf,mytbs03.dbf,mytbs04.dbf,增加两个db_file_name_convert,standby_file_management参数后,恢复过程没有报错,因此这两个参数应该在恢复之前加上。