环境介绍

主库:

主机名 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参数后,恢复过程没有报错,因此这两个参数应该在恢复之前加上。

最新文章

  1. UIView 的autoresizingMask属性
  2. 贪心 Gym 100502E Opening Ceremony
  3. 如何面试程序员 zhuan zai
  4. Thrift源码解析--transport
  5. BBS论坛(二十二)
  6. Oauth2.0安全问题浅谈
  7. package.json和npm install、cnpm install 的問題
  8. ajax的4个字母分别是什么意思
  9. CF285E Positions in Permutations(dp+容斥)
  10. 【BZOJ1492】【NOI2007】货币兑换
  11. Python面向对象之内置方法
  12. 探讨 .NET 4 新增的 SortedSet 类
  13. configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/
  14. Mac休眠之后唤醒时无法使用鼠标
  15. JDK 8 - java.util.HashSet 实现机制分析
  16. linux 下svn同步更新钩子
  17. Go Doc文档
  18. python基础实践(二)
  19. tflearn 保存模型重新训练
  20. [转]MapReduce浅析

热门文章

  1. day109:MoFang:好友列表显示&添加好友页面初始化&添加好友后端接口
  2. Tomcat9没有service.bat
  3. Web服务器-服务器开发-返回浏览器需要的页面 (3.3.2)
  4. YZMCMS V5.3后台 SSRF
  5. 又到期末了,为什么学完C语言觉得好像没学一般?复习资料来一份
  6. List<bean> 转换成List<Map>
  7. Intellij IDEA设置
  8. Thread通信与唤醒笔记1
  9. WEBSERVICE之CXF框架开发webservice
  10. SSM框架整合模板