使用RMAN备份在一台机器上恢复已有DB NAME数据库
案例背景,开发人员需要从生产库同步数据到UAT数据库,由于数据量较大,恢复需要的时间较长,而这期间测试人员还要在UAT环境进行测试,不能耽误测试人员的工作,这样就需要在恢复数据库的同时,UAT数据库还要正常对外提供服务,这样,UAT服务器上就需要面临两套DBID和DBNAME同样的数据库,数据库版本11.2.0.4.0。
如果同一台主机上存在两个DBNAME相同的数据库,那么在后启动的数据库在MOUNT的时候会遇到ORA-01102错误。
SQL> alter database mount; alter database mount * ERROR at line 1: ORA-01102: cannot mount database in EXCLUSIVE mode
告警日志报错信息如下;
ALTER DATABASE MOUNT sculkget: failed to lock /opt/oracle/product/11g/dbs/lkIVLDB exclusive sculkget: lock held by PID: 9257 ORA-09968: unable to lock file Linux-x86_64 Error: 11: Resource temporarily unavailable Additional information: 9257 ORA-1102 signalled during: ALTER DATABASE MOUNT...
这个问题是因为在$ORACLE_HOME/dbs目录下面的lk+DBNAME文件的锁竞争导致的,如果删除这个文件,那么后启动的数据库可以正常启动,之前启动的数据库将不能正常访问。因此,在使用RMAN恢复数据库之前,需要将之前的数据库的DBNAME改掉,如下为使用nid工具修改DBNAME案例:
首先将数据库启动到MOUNT状态。
[oracle@SL010A-ISITDB3 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon Jun 15 10:30:17 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 4275781632 bytes Fixed Size 2260088 bytes Variable Size 956302216 bytes Database Buffers 3305111552 bytes Redo Buffers 12107776 bytes Database mounted.
使用nid修改数据库的DBNAME。
[oracle@SL010A-ISITDB3 ~]$ nid target=/as sysdba dbname=IVLUAT DBNEWID: Release 11.2.0.4.0 - Production on Mon Jun 15 10:31:05 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Password: Connected to database XXXX (DBID=1353335250) Connected to server version 11.2.0 Control Files in database: /data/u01/XXXX/control01.ctl /opt/oracle/fast_recovery_area/XXXX/control02.ctl Change database ID and database name XXXX to IVLUAT? (Y/[N]) => y Proceeding with operation Changing database ID from 1353335250 to 2742253550 Changing database name from IVLDB to IVLUAT Control File /data/u01/IVLDB/control01.ctl - modified Control File /opt/oracle/fast_recovery_area/IVLDB/control02.ctl - modified Datafile /data/u01/IVLDB/system01.db - dbid changed, wrote new name Datafile /data/u01/IVLDB/sysaux01.db - dbid changed, wrote new name Datafile /data/u01/IVLDB/undotbs01.db - dbid changed, wrote new name Datafile /data/u01/IVLDB/users01.db - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TB_TS_MC01.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TB_TS_IV01.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TB_TS_IV02.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TB_TS_IV03.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TB_TS_IV04.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TB_TS_IV05.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TB_TS_IV06.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TB_TS_IV07.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TB_TS_IV08.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TB_TS_IV09.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TB_TS_IV10.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TB_TS_WLIF01.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TB_TS_WLIF02.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TB_TS_TS_TK01.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/IDX_TS_IN01.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/IDX_TS_IN02.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TS_MIG01.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TS_MIG02.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TS_MIG03.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TS_MIG04.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TS_MIG05.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TS_MIG06.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TS_MIG07.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TS_MIG08.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TS_MIG09.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/datafile/TS_MIG10.DB - dbid changed, wrote new name Datafile /data/u01/IVLDB/system02.db - dbid changed, wrote new name Datafile /data/u01/IVLDB/system03.db - dbid changed, wrote new name Datafile /data/u01/IVLDB/temp01.db - dbid changed, wrote new name Control File /data/u01/IVLDB/control01.ctl - dbid changed, wrote new name Control File /opt/oracle/fast_recovery_area/IVLDB/control02.ctl - dbid changed, wrote new name Instance shut down Database name changed to IVLUAT. Modify parameter file and generate a new password file before restarting. Database ID for database IVLUAT changed to 2742253550. All previous backups and archived redo logs for this database are unusable. Database is not aware of previous backups and archived logs in Recovery Area. Database has been shutdown, open database with RESETLOGS option. Succesfully changed database name and ID. DBNEWID - Completed succesfully.
修改参数文件和密码文件。
[oracle@SL010A-IVO03 ~]$ cd $ORACLE_HOME/dbs [oracle@SL010A-IVO03 dbs]$ mv orapwIVLDB orapwIVLUAT SQL> alter system set db_name='IVLUAT' SCOPE=SPFILE; System altered.
启动数据库。
SQL> alter system set db_name='IVLUAT' SCOPE=SPFILE; System altered. SQL> STARTUP FORCE ORACLE instance started. Total System Global Area 4275781632 bytes Fixed Size 2260088 bytes Variable Size 956302216 bytes Database Buffers 3305111552 bytes Redo Buffers 12107776 bytes Database mounted. ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
必须以resetlogs的方式打开数据库。
SQL> alter database open resetlogs; Database altered.
修改数据库的service_names参数,重新注册监听。
SQL> alter system set service_names=IVLDB; System altered. SQL> alter system register; System altered.
此时,应用程序已经可以访问UAT数据库,可以使用RMAN恢复另一套数据库了。
登录UAT数据库,查看数据文件存放目录,新的数据库数据文件不要和原有数据库的数据文件存放到一起。
SQL> select name from v$datafile; NAME --------------------------------------------- /data/u01/IVLDB/system01.dbf /data/u01/IVLDB/sysaux01.dbf /data/u01/IVLDB/undotbs01.dbf /data/u01/IVLDB/users01.dbf /data/u01/IVLDB/datafile/TB_TS_MC01.DBF /data/u01/IVLDB/datafile/TB_TS_IV01.DBF /data/u01/IVLDB/datafile/TB_TS_IV02.DBF /data/u01/IVLDB/datafile/TB_TS_IV03.DBF /data/u01/IVLDB/datafile/TB_TS_IV04.DBF /data/u01/IVLDB/datafile/TB_TS_IV05.DBF /data/u01/IVLDB/datafile/TB_TS_IV06.DBF
创建参数文件,修改后作为新数据库的参数文件。
SQL> create pfile from spfile; File created.
修改参数文件,主要修改以下内容。
[oracle@SL010A-ISITDB3 dbs]$ vi initIVLDB.ora *.memory_target=4294967296 --内存足够可以不用修改 *.control_files='/data/u01/uatdb/control01.ctl','/data/u01/uatdb/control02.ctl'
修改参数文件名字为inituatdb.ora,uatdb是新要恢复的数据库的SID。
[oracle@SL010A-ISITDB3 dbs]$ mv initIVLDB.ora inituatdb.ora
设置ORACLE_SID环境变量为uatdb,连接数据库,将数据库启动到nomount状态。
[oracle@SL010A-ISITDB3 dbs]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Sat Jun 13 09:44:54 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SQL> create spfile from pfile; File created. SQL> startup nomount ORACLE instance started. Total System Global Area 4275781632 bytes Fixed Size 2260088 bytes Variable Size 956302216 bytes Database Buffers 3305111552 bytes Redo Buffers 12107776 bytes SQL> show parameter spfile NAME TYPE VALUE -------------- ----------- ------------------------------ spfile string /opt/oracle/product/11g/dbs/spfileuatdb.ora SQL> show parameter control NAME TYPE VALUE ------------------ ----------- ------------------------------ control_files string /data/u01/uatdb/control01.ctl,/data/u01/uatdb/control02.ctl
创建数据文件存放目录,这里统一存放在/data/u01/uatdb目录下面。
[oracle@SL010A-ISITDB3 ivldb]$ cd /data/u01/ [oracle@SL010A-ISITDB3 u01]$ mkdir uatdb
将生产库的备份上传到UAT服务器,由于生产库做的是增量备份,所以需要将周日(6月7日的全备)及6月13日的备份拷贝到UAT服务器。传输过程略。
恢复控制文件。
[oracle@SL010A-ISITDB3 u01]$ rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Sat Jun 13 09:48:08 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: IVLDB (not mounted) RMAN> restore controlfile from '/data/ivldb/con.bak'; Starting restore at 2015-06-13 09:51:26 using channel ORA_DISK_1 channel ORA_DISK_1: restoring control file channel ORA_DISK_1: restore complete, elapsed time: 00:00:01 output file name=/data/u01/uatdb/control01.ctl output file name=/data/u01/uatdb/control02.ctl Finished restore at 2015-06-13 09:51:27
此时,数据库已经MOUNT状态,此时的数据库service_names参数和原有的UAT数据库的service_names参数冲突,修改为uatdb。
SQL> show parameter name NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------------ cell_offloadgroup_name string db_file_name_convert string db_name string IVLDB db_unique_name string IVLDB global_names boolean FALSE instance_name string uatdb lock_name_space string log_file_name_convert string processor_group_name string service_names string IVLDB SQL> alter system set service_names='uatdb'; System altered.
查询uatdb数据文件存放位置。
SQL> select name from v$datafile; NAME ------------------------------------------ +DATA/ivldb/datafile/system.dbf +DATA/ivldb/datafile/sysaux.dbf +DATA/ivldb/datafile/ts_inx_ful03.dbf +DATA/ivldb/datafile/ts_inx_ful04.dbf +DATA/ivldb/datafile/user01.dbf +DATA/ivldb/ivldb1_undo.dbf +DATA/ivldb/ivldb2_undo.dbf +DATA/ivldb/datafile/ts_bsc01.dbf +DATA/ivldb/datafile/ts_inx_bsc01.dbf +DATA/ivldb/datafile/ts_ord01.dbf +DATA/ivldb/datafile/ts_inx_ord01.dbf +DATA/ivldb/datafile/ts_ful01.dbf +DATA/ivldb/datafile/ts_inx_ful01.dbf +DATA/ivldb/datafile/ts_ful_if01.dbf +DATA/ivldb/datafile/ts_inx_ful_if01.dbf +DATA/ivldb/datafile/ts_tmp01.dbf +DATA/ivldb/datafile/ts_task01.dbf +DATA/ivldb/datafile/ts_mc01.dbf +DATA/ivldb/datafile/ts_inx_mc01.dbf +DATA/ivldb/datafile/ts_mig01.dbf +DATA/ivldb/datafile/ts_bsc02.dbf +DATA/ivldb/datafile/ts_inx_bsc02.dbf +DATA/ivldb/datafile/ts_ful02.dbf +DATA/ivldb/datafile/ts_ful03.dbf +DATA/ivldb/datafile/ts_inx_ful02.dbf +DATA/ivldb/datafile/ts_ord02.dbf +DATA/ivldb/datafile/ts_inx_ord02.dbf +DATA/ivldb/datafile/ts_ful04.dbf +DATA/ivldb/datafile/ts_ful05.dbf +DATA/ivldb/datafile/ts_ful06.dbf +DATA/ivldb/datafile/ts_bsc03.dbf +DATA/ivldb/datafile/ts_inx_ful05.dbf +DATA/ivldb/datafile/ts_inx_ful06.dbf +DATA/ivldb/datafile/ts_inx_ful07.dbf 34 rows selected.
由于生产库的数据文件存放在ASM里面,恢复数据库时需要转换数据文件存放位置。
run { allocate channel d1 type disk; allocate channel d2 type disk; allocate channel d3 type disk; allocate channel d4 type disk; set newname for datafile '+DATA/ivldb/datafile/system.dbf' to '/data/u01/uatdb/system.dbf'; set newname for datafile '+DATA/ivldb/datafile/sysaux.dbf' to '/data/u01/uatdb/sysaux.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_inx_ful03.dbf' to '/data/u01/uatdb/ts_inx_ful03.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_inx_ful04.dbf' to '/data/u01/uatdb/ts_inx_ful04.dbf'; set newname for datafile '+DATA/ivldb/datafile/user01.dbf' to '/data/u01/uatdb/user01.dbf'; set newname for datafile '+DATA/ivldb/ivldb1_undo.dbf' to '/data/u01/uatdb/ivldb1_undo.dbf'; set newname for datafile '+DATA/ivldb/ivldb2_undo.dbf' to '/data/u01/uatdb/ivldb2_undo.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_bsc01.dbf' to '/data/u01/uatdb/ts_bsc01.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_inx_bsc01.dbf' to '/data/u01/uatdb/ts_inx_bsc01.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_ord01.dbf' to '/data/u01/uatdb/ts_ord01.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_inx_ord01.dbf' to '/data/u01/uatdb/ts_inx_ord01.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_ful01.dbf' to '/data/u01/uatdb/ts_ful01.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_inx_ful01.dbf' to '/data/u01/uatdb/ts_inx_ful01.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_ful_if01.dbf' to '/data/u01/uatdb/ts_ful_if01.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_inx_ful_if01.dbf' to '/data/u01/uatdb/ts_inx_ful_if01.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_tmp01.dbf' to '/data/u01/uatdb/ts_tmp01.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_task01.dbf' to '/data/u01/uatdb/ts_task01.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_mc01.dbf' to '/data/u01/uatdb/ts_mc01.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_inx_mc01.dbf' to '/data/u01/uatdb/ts_inx_mc01.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_mig01.dbf' to '/data/u01/uatdb/ts_mig01.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_bsc02.dbf' to '/data/u01/uatdb/ts_bsc02.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_inx_bsc02.dbf' to '/data/u01/uatdb/ts_inx_bsc02.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_ful02.dbf' to '/data/u01/uatdb/ts_ful02.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_ful03.dbf' to '/data/u01/uatdb/ts_ful03.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_inx_ful02.dbf' to '/data/u01/uatdb/ts_inx_ful02.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_ord02.dbf' to '/data/u01/uatdb/ts_ord02.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_inx_ord02.dbf' to '/data/u01/uatdb/ts_inx_ord02.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_ful04.dbf' to '/data/u01/uatdb/ts_ful04.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_ful05.dbf' to '/data/u01/uatdb/ts_ful05.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_ful06.dbf' to '/data/u01/uatdb/ts_ful06.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_bsc03.dbf' to '/data/u01/uatdb/ts_bsc03.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_inx_ful05.dbf' to '/data/u01/uatdb/ts_inx_ful05.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_inx_ful06.dbf' to '/data/u01/uatdb/ts_inx_ful06.dbf'; set newname for datafile '+DATA/ivldb/datafile/ts_inx_ful07.dbf' to '/data/u01/uatdb/ts_inx_ful07.dbf'; restore database force; switch datafile all; release channel d1; release channel d2; release channel d3; release channel d4; }
查看redo日志的存放路径。
SQL> select member from v$logfile; MEMBER -------------------------------- +REDOLOG1/ivldb/redo01.log +REDOLOG2/ivldb/redo02.log +REDOLOG1/ivldb/redo03.log +REDOLOG2/ivldb/redo04.log +REDOLOG1/ivldb/redo05.log +REDOLOG2/ivldb/redo06.log +REDOLOG1/ivldb/redo19.log +REDOLOG2/ivldb/redo20.log +REDOLOG1/ivldb/redo07.log +REDOLOG2/ivldb/redo08.log +REDOLOG1/ivldb/redo09.log +REDOLOG2/ivldb/redo010.log +REDOLOG1/ivldb/redo011.log +REDOLOG2/ivldb/redo012.log +REDOLOG1/ivldb/redo013.log +REDOLOG2/ivldb/redo014.log +REDOLOG1/ivldb/redo015.log +REDOLOG2/ivldb/redo016.log +REDOLOG1/ivldb/redo017.log +REDOLOG2/ivldb/redo018.log +REDOLOG1/ivldb/st_redo01.log +REDOLOG1/ivldb/st_redo02.log +REDOLOG1/ivldb/st_redo03.log +REDOLOG2/ivldb/st_redo04.log +REDOLOG2/ivldb/st_redo05.log +REDOLOG2/ivldb/st_redo06.log 26 rows selected.
修改redo日志的存放路径。
SQL> alter database rename file '+REDOLOG1/ivldb/redo01.log' to '/data/u01/uatdb/redo01.log'; Database altered. SQL> alter database rename file '+REDOLOG2/ivldb/redo02.log' to '/data/u01/uatdb/redo02.log'; Database altered. SQL> alter database rename file '+REDOLOG1/ivldb/redo03.log' to '/data/u01/uatdb/redo03.log'; Database altered. SQL> alter database rename file '+REDOLOG2/ivldb/redo04.log' to '/data/u01/uatdb/redo04.log'; Database altered. SQL> alter database rename file '+REDOLOG1/ivldb/redo05.log' to '/data/u01/uatdb/redo05.log'; Database altered. SQL> alter database rename file '+REDOLOG2/ivldb/redo06.log' to '/data/u01/uatdb/redo06.log'; Database altered. SQL> alter database rename file '+REDOLOG1/ivldb/redo19.log' to '/data/u01/uatdb/redo19.log'; Database altered. SQL> alter database rename file '+REDOLOG2/ivldb/redo20.log' to '/data/u01/uatdb/redo20.log'; Database altered. SQL> alter database rename file '+REDOLOG1/ivldb/redo07.log' to '/data/u01/uatdb/redo07.log'; Database altered. SQL> alter database rename file '+REDOLOG2/ivldb/redo08.log' to '/data/u01/uatdb/redo08.log'; Database altered. SQL> alter database rename file '+REDOLOG1/ivldb/redo09.log' to '/data/u01/uatdb/redo09.log'; Database altered. SQL> alter database rename file '+REDOLOG2/ivldb/redo010.log' to '/data/u01/uatdb/redo10.log'; Database altered. SQL> alter database rename file '+REDOLOG1/ivldb/redo011.log' to '/data/u01/uatdb/redo11.log'; Database altered. SQL> alter database rename file '+REDOLOG2/ivldb/redo012.log' to '/data/u01/uatdb/redo12.log'; Database altered. SQL> alter database rename file '+REDOLOG1/ivldb/redo013.log' to '/data/u01/uatdb/redo13.log'; Database altered. SQL> alter database rename file '+REDOLOG2/ivldb/redo014.log' to '/data/u01/uatdb/redo14.log'; Database altered. SQL> alter database rename file '+REDOLOG1/ivldb/redo015.log' to '/data/u01/uatdb/redo15.log'; Database altered. SQL> alter database rename file '+REDOLOG2/ivldb/redo016.log' to '/data/u01/uatdb/redo16.log'; Database altered. SQL> alter database rename file '+REDOLOG1/ivldb/redo017.log' to '/data/u01/uatdb/redo17.log'; Database altered. SQL> alter database rename file '+REDOLOG2/ivldb/redo018.log' to '/data/u01/uatdb/redo18.log'; Database altered. SQL> alter database rename file '+REDOLOG1/ivldb/st_redo01.log' to '/data/u01/uatdb/st_redo01.log'; Database altered. SQL> alter database rename file '+REDOLOG1/ivldb/st_redo02.log' to '/data/u01/uatdb/st_redo02.log'; Database altered. SQL> alter database rename file '+REDOLOG1/ivldb/st_redo03.log' to '/data/u01/uatdb/st_redo03.log'; Database altered. SQL> alter database rename file '+REDOLOG2/ivldb/st_redo04.log' to '/data/u01/uatdb/st_redo04.log'; Database altered. SQL> alter database rename file '+REDOLOG2/ivldb/st_redo05.log' to '/data/u01/uatdb/st_redo05.log'; Database altered. SQL> alter database rename file '+REDOLOG2/ivldb/st_redo06.log' to '/data/u01/uatdb/st_redo06.log'; Database altered.
安装开发人员需求,尝试基于时间点的不完全恢复。
RMAN> run{ 2> allocate channel t1 device type disk; 3> allocate channel t2 device type disk; 4> allocate channel t3 device type disk; 5> allocate channel t4 device type disk; 6> set until time "to_date('2015-06-12 00:00:00','yyyy-mm-dd hh24:mi:ss')"; 7> recover database; 8> release channel t1; 9> release channel t2; 10> release channel t3; 11> release channel t4; 12> }
此时,告警日志会抛出一堆的错误,但是不要紧,恢复已经进行,RMAN并不会中断。
Sat Jun 13 11:35:19 2015 Errors in file /opt/oracle/diag/rdbms/ivldb/uatdb/trace/uatdb_ora_12684.trc: ORA-19625: error identifying file +DATA/ivldb/datafile/system.dbf ORA-17503: ksfdopn:2 Failed to open file +DATA/ivldb/datafile/system.dbf ORA-15001: diskgroup "DATA" 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 Switch of datafile 1 complete to datafile copy checkpoint is 109650939467 Errors in file /opt/oracle/diag/rdbms/ivldb/uatdb/trace/uatdb_ora_12684.trc: ORA-19625: error identifying file +DATA/ivldb/datafile/sysaux.dbf ORA-17503: ksfdopn:2 Failed to open file +DATA/ivldb/datafile/sysaux.dbf ORA-15001: diskgroup "DATA" 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 Switch of datafile 2 complete to datafile copy checkpoint is 109650939408 … … Sat Jun 13 11:35:28 2015 Signalling error 1152 for datafile 16! Signalling error 1152 for datafile 17! Signalling error 1152 for datafile 18! Signalling error 1152 for datafile 19! Signalling error 1152 for datafile 20! Signalling error 1152 for datafile 22! Signalling error 1152 for datafile 23! Signalling error 1152 for datafile 26! Signalling error 1152 for datafile 30! Signalling error 1152 for datafile 31! Checker run found 19 new persistent data failures
这个错误是由于恢复的时候没有 和restore放到一起导致的,因为restore的时候,制定了set newname转换了数据文件,这个错误不用理会,因为马上就会在告警日志看到以下可爱的信息。
Sat Jun 13 12:09:09 2015 Incremental restore complete of datafile 10 /data/u01/uatdb/ts_ord01.dbf checkpoint is 109751515007 last deallocation scn is 109640847186 Incremental restore complete of datafile 15 /data/u01/uatdb/ts_inx_ful_if01.dbf checkpoint is 109751515007 last deallocation scn is 3 Sat Jun 13 12:27:57 2015 Incremental restore complete of datafile 3 /data/u01/uatdb/ts_inx_ful03.dbf checkpoint is 109751515007 last deallocation scn is 3 Incremental restore complete of datafile 4 /data/u01/uatdb/ts_inx_ful04.dbf checkpoint is 109751515007 last deallocation scn is 3 Incremental restore complete of datafile 12 /data/u01/uatdb/ts_ful01.dbf checkpoint is 109751515007 last deallocation scn is 109644356022 Incremental restore complete of datafile 28 /data/u01/uatdb/ts_ful04.dbf checkpoint is 109751515007 last deallocation scn is 109644356017
恢复完成后,打开数据库遇到ORA-03113错误,这个错误通常是数据文件损坏或不存在导致。
SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-03113: end-of-file on communication channel Process ID: 25534 Session ID: 421 Serial number: 59
登录数据库查看下resetlog是否成功。
[oracle@SL010A-ISITDB3 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon Jun 15 10:37:41 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SQL> startup mount ORACLE instance started. Total System Global Area 4275781632 bytes Fixed Size 2260088 bytes Variable Size 956302216 bytes Database Buffers 3305111552 bytes Redo Buffers 12107776 bytes Database mounted. SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 1 Next log sequence to archive 1 Current log sequence 1
UAT数据库不需要打开归档,关闭归档。
SQL> alter database noarchivelog; Database altered.
再次尝试打开数据库,遇到ORA-30012错误。
SQL> alter database open; alter database open * ERROR at line 1: ORA-01092: ORACLE instance terminated. Disconnection forced ORA-30012: undo tablespace 'UNDOTBS1' does not exist or of wrong type Process ID: 28079 Session ID: 421 Serial number: 3
这个报错信息就很明显了,因为生产库是RAC环境,UAT是单实例环境,而打开这个UAT数据库的参数文件是从单实例的数据库拷贝过来的,当时修改参数的时候并没有更改undo_tablespace参数。
SQL> alter system set undo_tablespace='IVLDB1_UNDO' scope=spfile; System altered. SQL> alter database open; Database altered.
修改undo_tablespace参数后,数据库可以启动,此时,恢复工作并没有完成,还需要增加临时文件。
SQL> select NAME, FILE#,TS#,STATUS from v$tempfile; NAME FILE# TS# STATUS -------------------------------------------------- ---------- ---------- -------------- +DATA/ivldb/tempfile/temp01.dbf 1 3 ONLINE +DATA/ivldb/ivalue_temp1.dbf 2 9 ONLINE +DATA/ivldb/ivalue_temp2.dbf 3 10 ONLINE +DATA/ivldb/ivalue_temp3.dbf 4 11 ONLINE SQL> select ts#,name from v$tablespace where ts# in(3,9,10,11); TS# NAME ---------- -------------------------------------------------- 3 TEMP 9 IVALUE_TEMP1 10 IVALUE_TEMP2 11 IVALUE_TEMP3 SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/data/u01/uatdb/temp01.dbf' SIZE 1g AUTOEXTEND ON; Tablespace altered. SQL> ALTER TABLESPACE IVALUE_TEMP1 ADD TEMPFILE '/data/u01/uatdb/ivalue_temp1.dbf' SIZE 1g AUTOEXTEND ON; Tablespace altered. SQL> ALTER TABLESPACE IVALUE_TEMP2 ADD TEMPFILE '/data/u01/uatdb/ivalue_temp2.dbf' SIZE 1g AUTOEXTEND ON; Tablespace altered. SQL> ALTER TABLESPACE IVALUE_TEMP3 ADD TEMPFILE '/data/u01/uatdb/ivalue_temp3.dbf' SIZE 1g AUTOEXTEND ON; Tablespace altered. SQL> ALTER TABLESPACE TEMP DROP TEMPFILE '+DATA/ivldb/tempfile/temp01.dbf'; Tablespace altered. SQL> ALTER TABLESPACE IVALUE_TEMP1 DROP TEMPFILE '+DATA/ivldb/ivalue_temp1.dbf'; Tablespace altered. SQL> ALTER TABLESPACE IVALUE_TEMP2 DROP TEMPFILE '+DATA/ivldb/ivalue_temp2.dbf'; Tablespace altered. SQL> ALTER TABLESPACE IVALUE_TEMP3 DROP TEMPFILE '+DATA/ivldb/ivalue_temp3.dbf'; Tablespace altered. SQL> SELECT NAME FROM V$TEMPFILE; NAME -------------------------------------------------- /data/u01/uatdb/temp01.dbf /data/u01/uatdb/ivalue_temp1.dbf /data/u01/uatdb/ivalue_temp2.dbf /data/u01/uatdb/ivalue_temp3.dbf
至此,恢复完成,UAT数据库可正常提供服务。
总结:如果要在一台服务器上恢复一套DB NAME相同的数据库,而且这两个数据库需要同时对外提供访问,那么需要将一套数据库的DB NAME改掉。