17.Oracle10g服务器管理恢复--RMAN复制数据库(练习30)
- 格式:pdf
- 大小:893.04 KB
- 文档页数:21
通过RMAN备份Oracle数据库恢复到其他服务器(案例)通过RMAN备份Oracle数据库恢复到其他服务器(案例)本节演示如何通过RMAN创建的备份集,将数据库恢复到其他服务器。
本小节执行的操作较多,一定要有一个清醒的大脑,因此赶紧把脑袋里那堆乱七八糟的东西清除清除,要不你一定会看晕的。
设定环境如下:源库192.168.100.100,SID:orcdb。
目录库192.168.100.101,已安装与源库相同版本的数据库软件(一定要相同版本哟)。
准备工作如下:记录下源数据库的DBID,DBID的获取方式上节已讲过。
创建完整备份集(含控制文件、数据文件、归档文件),源库为非归档模式也可以,只要确保创建的备份是一致备份,然后将备份集复制到目标服务器的相同路径下。
为简单起见,源端与目标端目录结构保持一致。
如果你在测试或正式操作时由于实际原因无法保持源端与目标端结构一致,在恢复过程中注意修改相关路径。
操作步骤如下:注意,下列操作如非特别注明,均是在目标端服务器上进行的。
1.在源库端创建数据库的完整备份Backup database;备份集创建成功之后,将其复制到目录端的相同路径下,强调一点,必须是相同路径。
复制方式灵活多样,Windows环境可以直接通过共享复制,Linux/UNIX下可以通过FTP。
2.在目标服务器上创建OracleService如果是Linux/UNIX环境,不需要执行本步骤,只要在连接数据库时指定ORACLE_SID环境变量即可。
如果是Windows服务器,需要通过ORADIM命令创建一个OracleService,创建的SID要与源库相同,操作如下:1. C:\Documents and Settings\Administrator>ORADIM -NEW -SID orcdb2. Instance created.上述命令创建了一个名为orcdb的OracleService。
使用RMAN恢复Oracle 10g RAC库至异机主RAC库:2个节点rac1(192.168.218.168),rac2(192.168.218.168) 采用ASM+RAW备机standby(192.168.218.188) 文件系统一。
在rac库备份:rac1-> crs_stat -tName Type Target State Host------------------------------------------------------------ora....SM1.asm application ONLINE ONLINE rac1ora....C1.lsnr application ONLINE ONLINE rac1ora.rac1.gsd application ONLINE ONLINE rac1ora.rac1.ons application ONLINE ONLINE rac1ora.rac1.vip application ONLINE ONLINE rac1ora....SM2.asm application ONLINE ONLINE rac2ora....C2.lsnr application ONLINE ONLINE rac2ora.rac2.gsd application ONLINE ONLINE rac2ora.rac2.ons application ONLINE ONLINE rac2ora.rac2.vip application ONLINE ONLINE rac2ora.racdb.db application ONLINE ONLINE rac1ora....b1.inst application ONLINE ONLINE rac1ora....b2.inst application ONLINE ONLINE rac2rac1->rac1-> export ORACLE_SID=racdb1rac1-> rman target / nocatalogRMAN> run{2> allocate CHANNEL ch00 type DISK CONNECT 'sys/oracle@racdb1';3> allocate CHANNEL ch01 type DISK CONNECT 'sys/oracle@racdb2';4> backup database format '/rmanset/racdb_full_%d%t%s%p' tag 'fullbackup';5> BACKUP FORMAT '/rmanset/%d_arch_%s_%p_%h' ARCHIVELOG ALL;6> backup format '/rmanset/cf_%d_%s_%p'7> (current controlfile);8> RELEASE CHANNEL ch00;9> RELEASE CHANNEL ch01;10> }allocated channel: ch00channel ch00: sid=148 instance=racdb1 devtype=DISKallocated channel: ch01channel ch01: sid=148 instance=racdb2 devtype=DISKStarting backup at 02-NOV-08channel ch00: starting full datafile backupsetchannel ch00: specifying datafile(s) in backupsetinput datafile fno=00001 name=+RACDATA/racdb/datafile/system.259.669487425input datafile fno=00005 name=+RACDATA/racdb/datafile/users.264.669487561input datafile fno=00004 name=+RACDATA/racdb/datafile/undotbs2.263.669487539 channel ch00: starting piece 1 at 02-NOV-08channel ch01: starting full datafile backupsetchannel ch01: specifying datafile(s) in backupsetinput datafile fno=00003 name=+RACDATA/racdb/datafile/sysaux.261.669487497input datafile fno=00002 name=+RACDATA/racdb/datafile/undotbs1.260.669487479 channel ch01: starting piece 1 at 02-NOV-08channel ch00: finished piece 1 at 02-NOV-08piece handle=/rmanset/racdb_full_RACDB669769770931 tag=FULLBACKUP comment=NONE channel ch00: backup set complete, elapsed time: 00:02:19channel ch00: starting full datafile backupsetchannel ch00: specifying datafile(s) in backupsetincluding current control file in backupsetchannel ch00: starting piece 1 at 02-NOV-08channel ch01: finished piece 1 at 02-NOV-08piece handle=/rmanset/racdb_full_RACDB669769784941 tag=FULLBACKUP comment=NONE channel ch01: backup set complete, elapsed time: 00:02:28channel ch01: starting full datafile backupsetchannel ch01: specifying datafile(s) in backupsetincluding current SPFILE in backupsetchannel ch01: starting piece 1 at 02-NOV-08channel ch00: finished piece 1 at 02-NOV-08piece handle=/rmanset/racdb_full_RACDB669769914951 tag=FULLBACKUP comment=NONE channel ch00: backup set complete, elapsed time: 00:00:11channel ch01: finished piece 1 at 02-NOV-08piece handle=/rmanset/racdb_full_RACDB669769933961 tag=FULLBACKUP comment=NONE channel ch01: backup set complete, elapsed time: 00:00:05Finished backup at 02-NOV-08Starting backup at 02-NOV-08current log archivedchannel ch00: starting archive log backupsetchannel ch00: specifying archive log(s) in backup setinput archive log thread=1 sequence=42 recid=141 stamp=669603048input archive log thread=1 sequence=44 recid=149 stamp=669640424input archive log thread=1 sequence=45 recid=151 stamp=669675778input archive log thread=1 sequence=46 recid=152 stamp=669679426input archive log thread=1 sequence=47 recid=156 stamp=669690456channel ch00: starting piece 1 at 02-NOV-08channel ch01: starting archive log backupsetchannel ch01: specifying archive log(s) in backup setinput archive log thread=1 sequence=53 recid=170 stamp=669767346input archive log thread=1 sequence=54 recid=172 stamp=669769357input archive log thread=2 sequence=44 recid=165 stamp=669764276input archive log thread=2 sequence=45 recid=167 stamp=669765472input archive log thread=2 sequence=46 recid=168 stamp=669765474input archive log thread=2 sequence=47 recid=169 stamp=669767345input archive log thread=2 sequence=48 recid=171 stamp=669769352input archive log thread=2 sequence=49 recid=175 stamp=669769944channel ch01: starting piece 1 at 02-NOV-08channel ch01: finished piece 1 at 02-NOV-08piece handle=/rmanset/RACDB_arch_98_1_2 tag=TAG20081102T231211 comment=NONE channel ch01: backup set complete, elapsed time: 00:00:04channel ch00: finished piece 1 at 02-NOV-08piece handle=/rmanset/RACDB_arch_97_1_1 tag=TAG20081102T231211 comment=NONE channel ch00: backup set complete, elapsed time: 00:00:11channel ch00: starting archive log backupsetchannel ch00: specifying archive log(s) in backup setinput archive log thread=1 sequence=48 recid=158 stamp=669690550input archive log thread=1 sequence=49 recid=160 stamp=669691146input archive log thread=1 sequence=50 recid=162 stamp=669755973input archive log thread=1 sequence=51 recid=163 stamp=669757116input archive log thread=1 sequence=52 recid=166 stamp=669764278input archive log thread=1 sequence=55 recid=173 stamp=669769375input archive log thread=1 sequence=56 recid=174 stamp=669769928channel ch00: starting piece 1 at 02-NOV-08channel ch00: finished piece 1 at 02-NOV-08piece handle=/rmanset/RACDB_arch_99_1_1 tag=TAG20081102T231211 comment=NONE channel ch00: backup set complete, elapsed time: 00:00:08Finished backup at 02-NOV-08Starting backup at 02-NOV-08channel ch00: starting full datafile backupsetchannel ch00: specifying datafile(s) in backupsetincluding current control file in backupsetchannel ch00: starting piece 1 at 02-NOV-08channel ch00: finished piece 1 at 02-NOV-08piece handle=/rmanset/cf_RACDB_100_1 tag=TAG20081102T231235 comment=NONE channel ch00: backup set complete, elapsed time: 00:00:07Finished backup at 02-NOV-08released channel: ch00released channel: ch012. 在rac库上创建pfileSQL> create pfile='/rmanset/initracdb.ora' from spfile;将rac1,rac2上的备份出来的rman文件和pfile ftp 至standby 主机二:standby 主机做恢复的过程:0.修改ftp过来的pfile,主要是rac中一些参数去掉:#*.cluster_database_instances=2*.cluster_database=false#racdb2.instance_number=2#racdb1.instance_number=1#racdb2.thread=2#racdb1.thread=1#racdb2.undo_tablespace='UNDOTBS2'#*.db_file_name_convert='+RACDATA/racdb/datafile/','/oradata/racdb/'#*.fal_client='RACDB'#*.fal_server='STANDBY'#*.log_archive_config='DG_CONFIG=(racdb,standby)'#racdb2.log_archive_dest_1='LOCATION=/racdb2_arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=racdb' #*.log_archive_dest_2='SERVICE=standby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=standby'#*.log_archive_dest_state_2='ENABLE'#*.log_file_name_convert='+RACDATA/racdb/onlinelog/','/oradata/racdb/'#*.remote_listener='LISTENERS_RACDB'#*.standby_file_management='AUTO'1.数据库启动到nomount2.restore controlfile3.restore archivelog4.recover database5.改变logfile 的位置,重新建redo6.drop 一个undo tablespace.7.add a temp tablespace8. 配tnsnames.ora 和listener.ora下为操作的过程:standby-> rman target /Recovery Manager: Release 10.2.0.1.0 - Production on Sun Nov 2 14:22:39 2008 Copyright (c) 1982, 2005, Oracle. All rights reserved.connected to target database: racdb (not mounted)--恢复controlfileRMAN> restore controlfile from '/rmanset/cf_RACDB_100_1';Starting restore at 02-NOV-08using channel ORA_DISK_1channel ORA_DISK_1: restoring control filechannel ORA_DISK_1: restore complete, elapsed time: 00:00:05output filename=/oradata/racdb/control01.ctlFinished restore at 02-NOV-08---restore datafile and archive logRMAN> sql 'alter database mount';sql statement: alter database mountreleased channel: ORA_DISK_1RMAN> run{2> set until sequence 57 thread 1;3> set newname for datafile 1 to '/oradata/racdb/system01.dbf';4> set newname for datafile 2 to '/oradata/racdb/undotbs01.dbf';5> set newname for datafile 3 to '/oradata/racdb/sysaux01.dbf';6> set newname for datafile 4 to '/oradata/racdb/users01.dbf';7> set newname for datafile 5 to '/oradata/racdb/undotbs02.dbf';8> restore database;9> switch datafile all;10> }executing command: SET until clauseexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEStarting restore at 02-NOV-08allocated channel: ORA_DISK_1channel ORA_DISK_1: sid=155 devtype=DISKchannel ORA_DISK_1: starting datafile backupset restorechannel ORA_DISK_1: specifying datafile(s) to restore from backup set restoring datafile 00001 to /oradata/racdb/system01.dbfrestoring datafile 00004 to /oradata/racdb/users01.dbfrestoring datafile 00005 to /oradata/racdb/undotbs02.dbfchannel ORA_DISK_1: reading from backup piece /rmanset/racdb_full_RACDB669769770931 channel ORA_DISK_1: restored backup piece 1piece handle=/rmanset/racdb_full_RACDB669769770931 tag=FULLBACKUPchannel ORA_DISK_1: restore complete, elapsed time: 00:00:36channel ORA_DISK_1: starting datafile backupset restorechannel ORA_DISK_1: specifying datafile(s) to restore from backup setrestoring datafile 00002 to /oradata/racdb/undotbs01.dbfrestoring datafile 00003 to /oradata/racdb/sysaux01.dbfchannel ORA_DISK_1: reading from backup piece /rmanset/racdb_full_RACDB669769784941 channel ORA_DISK_1: restored backup piece 1piece handle=/rmanset/racdb_full_RACDB669769784941 tag=FULLBACKUPchannel ORA_DISK_1: restore complete, elapsed time: 00:00:35Finished restore at 02-NOV-08datafile 1 switched to datafile copyinput datafile copy recid=10 stamp=669738296 filename=/oradata/racdb/system01.dbf datafile 2 switched to datafile copyinput datafile copy recid=11 stamp=669738296 filename=/oradata/racdb/undotbs01.dbf datafile 3 switched to datafile copyinput datafile copy recid=12 stamp=669738296 filename=/oradata/racdb/sysaux01.dbf datafile 4 switched to datafile copyinput datafile copy recid=13 stamp=669738297 filename=/oradata/racdb/users01.dbf datafile 5 switched to datafile copyinput datafile copy recid=14 stamp=669738297 filename=/oradata/racdb/undotbs02.dbf RMAN>--列出备份的archivelog:RMAN> list backup of archivelog all;using target database control file instead of recovery catalogList of Backup Sets===================BS Key Size Device Type Elapsed Time Completion Time------- ---------- ----------- ------------ ---------------89 2.44M DISK 00:00:03 02-NOV-08BP Key: 89 Status: AVAILABLE Compressed: NO Tag: TAG20081102T231211 Piece Name: /rmanset/RACDB_arch_98_1_2List of Archived Logs in backup set 89Thrd Seq Low SCN Low Time Next SCN Next Time---- ------- ---------- --------- ---------- ---------1 53 356353 02-NOV-08 396535 02-NOV-081 54 396535 02-NOV-08 398232 02-NOV-082 44 350717 02-NOV-08 356350 02-NOV-082 45 356350 02-NOV-08 376487 02-NOV-082 46 376487 02-NOV-08 396536 02-NOV-082 47 396536 02-NOV-08 397820 02-NOV-082 48 397820 02-NOV-08 398228 02-NOV-082 49 398228 02-NOV-08 398963 02-NOV-08BS Key Size Device Type Elapsed Time Completion Time------- ---------- ----------- ------------ ---------------90 17.42M DISK 00:00:07 02-NOV-08BP Key: 90 Status: AVAILABLE Compressed: NO Tag: TAG20081102T231211 Piece Name: /rmanset/RACDB_arch_97_1_1List of Archived Logs in backup set 90Thrd Seq Low SCN Low Time Next SCN Next Time---- ------- ---------- --------- ---------- ---------1 42 285767 01-NOV-08 285925 01-NOV-081 44 286441 01-NOV-08 286516 01-NOV-081 45 286516 01-NOV-08 308174 01-NOV-081 46 308174 01-NOV-08 312441 01-NOV-081 47 312441 01-NOV-08 324657 02-NOV-08BS Key Size Device Type Elapsed Time Completion Time------- ---------- ----------- ------------ ---------------91 9.69M DISK 00:00:04 02-NOV-08BP Key: 91 Status: AVAILABLE Compressed: NO Tag: TAG20081102T231211 Piece Name: /rmanset/RACDB_arch_99_1_1List of Archived Logs in backup set 91Thrd Seq Low SCN Low Time Next SCN Next Time---- ------- ---------- --------- ---------- ---------1 48 324657 02-NOV-08 324727 02-NOV-081 49 324727 02-NOV-08 325613 02-NOV-081 50 325613 02-NOV-08 349040 02-NOV-081 51 349040 02-NOV-08 350714 02-NOV-081 52 350714 02-NOV-08 356353 02-NOV-081 55 398232 02-NOV-08 398433 02-NOV-081 56 398433 02-NOV-08 398960 02-NOV-08--restore archivelog and recover database.RMAN>RMAN> run{2> set archivelog destination to '/racdb_arch';3> restore archivelog from sequence 49 thread 2;}4>executing command: SET ARCHIVELOG DESTINATIONStarting restore at 02-NOV-08using channel ORA_DISK_1channel ORA_DISK_1: starting archive log restore to user-specified destination archive log destination=/racdb_archchannel ORA_DISK_1: restoring archive logarchive log thread=2 sequence=49channel ORA_DISK_1: reading from backup piece /rmanset/RACDB_arch_98_1_2 channel ORA_DISK_1: restored backup piece 1piece handle=/rmanset/RACDB_arch_98_1_2 tag=TAG20081102T231211 channel ORA_DISK_1: restore complete, elapsed time: 00:00:02Finished restore at 02-NOV-08RMAN>RMAN>RMAN> run{2> set archivelog destination to '/racdb_arch';3> restore archivelog from sequence 44 thread 2;4> }Starting restore at 02-NOV-08using channel ORA_DISK_1archive log thread 2 sequence 49 is already on disk as file /racdb_arch/2_49_669487401.dbf channel ORA_DISK_1: starting archive log restore to user-specified destinationarchive log destination=/racdb_archchannel ORA_DISK_1: restoring archive logarchive log thread=2 sequence=44channel ORA_DISK_1: restoring archive logarchive log thread=2 sequence=45channel ORA_DISK_1: restoring archive logarchive log thread=2 sequence=46channel ORA_DISK_1: restoring archive logarchive log thread=2 sequence=47channel ORA_DISK_1: restoring archive logarchive log thread=2 sequence=48channel ORA_DISK_1: reading from backup piece /rmanset/RACDB_arch_98_1_2channel ORA_DISK_1: restored backup piece 1piece handle=/rmanset/RACDB_arch_98_1_2 tag=TAG20081102T231211channel ORA_DISK_1: restore complete, elapsed time: 00:00:02Finished restore at 02-NOV-08RMAN> run{2> set until sequence 57 thread 1;3> recover database;4> }executing command: SET until clauseStarting recover at 02-NOV-08using channel ORA_DISK_1starting media recoveryarchive log thread 2 sequence 49 is already on disk as file /racdb_arch/2_49_669487401.dbfchannel ORA_DISK_1: starting archive log restore to default destinationchannel ORA_DISK_1: restoring archive logarchive log thread=1 sequence=56channel ORA_DISK_1: reading from backup piece /rmanset/RACDB_arch_99_1_1channel ORA_DISK_1: restored backup piece 1piece handle=/rmanset/RACDB_arch_99_1_1 tag=TAG20081102T231211channel ORA_DISK_1: restore complete, elapsed time: 00:00:02archive log filename=/racdb_arch/1_56_669487401.dbf thread=1 sequence=56archive log filename=/racdb_arch/2_49_669487401.dbf thread=2 sequence=49media recovery complete, elapsed time: 00:00:01Finished recover at 02-NOV-08--对redo 作修改:alter database rename file '+RACDATA/racdb/onlinelog/group_1.257.669487411' to '/oradata/racdb/redo1'; alter database rename file '+RACDATA/racdb/onlinelog/group_2.258.669487419' to '/oradata/racdb/redo2'; alter database rename file '+RACDATA/racdb/onlinelog/group_3.265.669489319' to '/oradata/racdb/redo3'; alter database rename file '+RACDATA/racdb/onlinelog/group_4.266.669489327' to '/oradata/racdb/redo4';SQL> select member from v$logfile;--------------------------------------------------------------------------------+RACDATA/racdb/onlinelog/group_1.257.669487411+RACDATA/racdb/onlinelog/group_2.258.669487419+RACDATA/racdb/onlinelog/group_3.265.669489319+RACDATA/racdb/onlinelog/group_4.266.669489327SQL> alter database rename file '+RACDATA/racdb/onlinelog/group_1.257.669487411' to '/oradata/racdb/redo1'; Database altered.SQL> alter database rename file '+RACDATA/racdb/onlinelog/group_2.258.669487419' to '/oradata/racdb/redo2'; alter database rename file '+RACDATA/racdb/onlinelog/group_3.265.669489319' to '/oradata/racdb/redo3';alter database rename file '+RACDATA/racdb/onlinelog/group_4.266.669489327' to '/oradata/racdb/redo4'; Database altered.SQL>Database altered.SQL>Database altered.SQL> alter database open resetlogs;Database altered.SQL>SQL>SQL> select THREAD#, STATUS, ENABLED from v$thread;THREAD# STATUS ENABLED---------- ------ --------1 OPEN PUBLIC2 CLOSED PUBLICSQL>SQL> select group# from v$log where THREAD#=2;GROUP#----------34SQL> alter database disable thread 2;Database altered.SQL> alter database drop logfile group 4;alter database drop logfile group 4*ERROR at line 1:ORA-00350: log 4 of instance racdb2 (thread 2) needs to be archived ORA-00312: online log 4 thread 2: '/oradata/racdb/redo4'SQL> alter database clear unarchived logfile group 3;Database altered.SQL> alter database drop logfile group 3;Database altered.SQL> alter database drop logfile group 4;alter database drop logfile group 4*ERROR at line 1:ORA-00350: log 4 of instance racdb2 (thread 2) needs to be archived ORA-00312: online log 4 thread 2: '/oradata/racdb/redo4'SQL> alter database clear unarchived logfile group 4;Database altered.SQL> alter database drop logfile group 4;Database altered.SQL> select group#,member from v$logfile;GROUP#--------------------------------------------------------------------------------1/oradata/racdb/redo12/oradata/racdb/redo2SQL> select THREAD#, STATUS, ENABLED from v$thread;THREAD# STATUS ENABLED---------- ------ --------1 OPEN PUBLIC对undo 的处理:SQL> show parameter undoNAME TYPE VALUE------------------------------------ ----------- ------------------------------undo_management string AUTOundo_retention integer 900undo_tablespace string UNDOTBS1SQL> select tablespace_name from dba_tablespaces where contents='UNDO';TABLESPACE_NAME------------------------------UNDOTBS1UNDOTBS2SQL> drop tablespace UNDOTBS2 including contents and datafiles;Tablespace dropped.SQL> select tablespace_name from dba_tablespaces where contents='UNDO';TABLESPACE_NAME------------------------------UNDOTBS1SQL>对temp的处理:create temporary tablespace TEMP1 tempfile '/oradata/racdb/temp01.dbf' size 50M autoextend off;SQL> select name from v$tempfile;NAME--------------------------------------------------------------------------------------------------------------------------------------------- /oradata/racdb/RACDB/datafile/o1_mf_temp_4jtl9yfl_.tmpSQL>SQL>SQL> select tablespace_name from dba_tablespaces where contents='TEMPORARY';TABLESPACE_NAME------------------------------TEMPSQL> create temporary tablespace TEMP12 tempfile '/oradata/racdb/temp01.dbf'3 size 50M autoextend off;Tablespace created.SQL> alter database default temporary tablespace TEMP1; Database altered.SQL> drop tablespace TEMP including contents and datafiles; Tablespace dropped.SQL>再配上tnsnames.ora 及listener.ora#####参考metalink Note:415579.1。
☐RMAN概述RMAN是Oracle提供的使用程序Recovery Manager,即恢复管理器,使用RMAN可以轻松实现数据库的所有备份任务。
☐RMAN在数据库服务器的帮助下实现数据库文件,控制文件,数据库文件和控制文件的映像副本,以及归档日志文件,数据库服务器参数文件的备份。
☐RMAN也允许使用脚本文件实现数据的备份与恢复,而且这些脚本保存在数据库内,而不需要编写基于OS的脚本文件。
☐RMAN备份的文件自动保存在一个系统指定的目录下,文件的名称也由RMAN 自己维护,当实现数据恢复操作时,恢复指令简洁。
☐RMAN自动寻找需要的文件实现数据恢复。
减少了在传统的导出导出程序中人为错误的发生。
☐RMAN特点☐使用RMAN的优点如下所示。
✓支持增量备份:在传统的备份工具中如EXP或EXPDP,只能实现一个完整备份而不能增量备份,RMAN采用被备份级别实现增量备份,在一个完整备份的基础上,采用增量备份,和传统地备份方式相比,这样可以减少备份的数据量。
✓自动管理备份文件:RMAN备份的数据是RMAN自动管理的,包括文件名字,备份文件存储目录,以及识别最近的备份文件,搜索恢复时需要的表空间、模式或数据文件等备份文件。
✓自动化备份与恢复:在备份和恢复操作时,使用简单的指令就可以实现备份与恢复,且执行过程完全由RMAN自己维护。
✓不产生重做信息:与用户管理的联机备份不同,使用RMAN的联机备份不产生重做信息。
☐RMAN的系统结构组成☐介绍RMAN的系统结构组成。
☐RMAN可执行程序:它是一个客户端工具,用来启动与数据库服务器的连接,从而实现备份与恢复的各种操作。
☐RMAN客户端:一旦建立了与数据库服务器的会话连接,RMAN可执行程序就创建一个客户端,通过客户端完成与数据库服务器之间的通信,完成各种备份与恢复操作的指令。
RMAN客户端可以连接通过Oracle Net连接到可访问的任何主机上。
☐服务器进程:在RMAN建立了与数据库服务器的会话连接后,在数据库服务器端启动一个后台进程,它执行RMAN客户端发出的各种数据恢复与备份指令,并完成实际的磁盘或磁带设备的读写任务。
oracle数据库rman备份计划及恢复1.rman完全恢复的前提条件:历史的datafile,controlfile和spfile备份,加上完整的archivelog和完好的redolog。
2.rman备份脚本: a.RMAN 0级备份命令:run{allocate channel c1 type disk;allocate channel c2 type disk;allocate channel c3 type disk;backup incremental level 0 tag 'level0' format "E:\recovery_area\rfdb\rfdb\AUTOBACKUP\rman_dir\RFDB_level_0_%u_%s_%p" as compressed backupset database;sql "alter system archive log current";backup filesperset 3 format "E:\recovery_area\rfdb\rfdb\AUTOBACKUP\rman_dir\arch_%u_%s_%p_%c"archivelog all delete input; #备份归档可选,可以单独定期备份release channel c1;release channel c2;release channel c3;} b.RMAN 1级备份命令:run{allocate channel c1 type disk;allocate channel c2 type disk;allocate channel c3 type disk;backup incremental level 1 tag 'level1' format 'E:\recovery_area\rfdb\rfdb\AUTOBACKUP\rman_dir\RFDB_level_1_%u_%s_%p' as compressed backupset database;sql 'alter system archive log current';backup filesperset 3 format 'E:\recovery_area\rfdb\rfdb\AUTOBACKUP\rman_dir\arch_%u_%s_%p'archivelog all delete input; #备份归档可选,可以单独定期备份release channel c1;release channel c2;release channel c3;} c.rman删除备份命令(在保留最近⼀天备份的情况下,删除其他备份):DELETE NOPROMPT OBSOLETE RECOVERY WINDOW OF 1 DAYS; d.操作系统层⾯运⾏rman备份或删除命令(windows/linux):rman target sys/rf4rfvbgt56yhn@rfdb nocatalog CMDFILE 'D:\app\rman\rman_file\level_0.txt' log=E:\recovery_area\rfdb\rfdb\AUTOBACKUP\rman_dir\log\rman_level_0.log export ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=/u01/app/oracle/product/11.2.0/db1export ORACLE_SID=atestexport PATH=$ORACLE_HOME/bin:$PATHrman target sys/123456@atest nocatalog CMDFILE '/u01/rman/rman.sh' log=/u01/rman/rman.log00 02 * * 1 bash /u01/rman_file/run_rman_0.sh00 02 * * 3 bash /u01/rman_file/run_rman_0.sh00 02 * * 5 bash /u01/rman_file/run_rman_0.sh00 04 * * * bash /u01/rman_file/run_delete.sh34 11 * * * bash /u01/rman_file/run_rman_0.sh e.rman参数设置:RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;RMAN> CONFIGURE DEFAULT DEVICE TYPE TO DISK;RMAN> CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE disk TO 2;RMAN> CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE disk TO 2;3.rman恢复a.拷贝datafile,controlfile和spfile的rman备份,以及完整的archivelog和完好的redolog⽂件到新的数据库。
使用RMAN实现克隆复制ORACLE数据库周芃;刘道践【摘要】Objective: To clarify cloning of ORACLE database with RMAN to promote the maintenance of HIS. Methods: The purpose and content of cloning of ORACLE database were explored. Meanwhile, the technique of database cloning was introduced. The steps of creating a supplementary database to realize the database cloning and some examples were described in detail. Results: Based on discussion on common problems in cloning and features of the database, we put forward corresponding solutions. Conclusion: RMAN is a safe and reliable tool for cloning of ORACLE database. It safely, conveniently and effectively provides a platform for HIS.%目的:阐述RMAN克隆ORACLE数据库的概念,运用RMAN 克隆ORACLE数据库技术,完善医院信息系统数据库平台的维护工作。
方法:探讨使用克隆ORACLE数据库的目的与内容,介绍克隆数据库技术,并详细介绍创建辅助库实现数据库克隆的步骤以及列出部分实例内容。
结果:利用RMAN克隆ORACLE技术,快速成功的生成了副本数据库,并围绕克隆过程中常遇到的问题和主要特点等展开讨论,提出相应的解决方案。
Oracle数据库备份和恢复利器——RMAN一、引言数据是各类计算机应用系统的基础,不论是普通的企业级应用系统,还是学校、银行等各类网上服务系统,以及政府部门的电子政务系统等,数据永远是应用系统中价值最高、最为核心的内容,因此保证数据的高安全性成为各应用系统持续、不间断运行的基础。
然而,各种突发事件诸如网络威胁、硬件故障、火灾等,都使系统数据的安全性面临着巨大挑战。
为了应对突发事件引起的系统数据破坏,保证数据的安全性和完整性,需要对数据进行定期备份,从而在紧急情况下恢复备份数据使服务快速恢复。
数据备份通常分为逻辑备份和物理备份两种方式。
逻辑备份和物理备份两种方式的原理不同,因此需要不同的备份工具。
目前作为常见数据库之一的Oracle数据库,在数据备份和恢复上提供了多种灵活、方便的备份工具和方法。
逻辑备份工具主要有导入/导出(Import/Export)工具、数据泵等,物理备份工具就是Recover Manager(RMAN)。
对于Oracle数据库来说,目前市场上第三方备份软件都是通过调用RMAN接口实现的。
本文从保障系统数据安全的角度出发,首先分析了Oracle备份和恢复工具——RMAN的特点,然后介绍利用RMAN的功能,并建立合理备份方案,及故障时如何快速恢复数据库系统。
二、RMAN简介及其特点RMAN(Recovery Manager) 是Oracle数据库的一种物理备份和恢复工具,具有占用资源少、备份效率高、恢复速度快、支持在线备份和恢复等特点。
(一)RMAN采用数据块级备份,而不是数据文件级的备份。
块级备份将备份和恢复的最小单位从数据文件降到数据块,这对数据的备份和恢复都会带来明显的好处。
1.对备份而言,块级备份可以带来两个优势以有效减少备份量,提高备份效率。
首先是增量备份技术。
默认情况下Oracle会启动数据块更改跟踪特性,数据变更时,后台进程Change Tracking Writer(CTWR)将发生变化的数据块记录到名为“change tracking file”的文件中[1],这样增量备份无需读取整个数据文件,直接备份变更数据。
采用exp备份快速恢复数据库一、本文编写目的在Oracle10g数据库出现异常,无法启动时,根据exp备份,快速恢复数据库至exp备份时刻的状态。
主要步骤包括清空数据库、建库、起监听、建用户、imp恢复、用户授权信息补充。
二、恢复需要准备的脚本1.建库脚本:crdb10g.sh 、oratool.sql2.建用户脚本:zxindb.sql 、Create_zxdbm_870.sql、Create_User.sql3.Exp备份的文件:/zxinbak下的zxindb1.dmp、zxindb1.dmp.log备注:/zxinbak一般在/zxindata下,也可能跟/zxindata同级。
4.用户授权信息补充:grand_ user.sql三、清空数据库此处指清空数据库至裸状态,不是卸载oracle。
删除的内容主要包括:删除/zxindata目录下除/zxinbak以外的数据库文件,主要是控制文件、日志文件、数据文件。
只需要删除文件,不需要删除目录。
◆注意/zxinbak目录下的zxindb1.dmp、和zxindb1.dmp.log文件绝对不可以删除。
删除监听配置文件listener.ora、tnsnames.ora,目录$ORACLE_HOME/network/admin具体操作参考如下:【oracle用户】【1】备份oracle@linux:~>cd /oracle@linux:/>tar –cvf zxindata0128.tar /zxindata【注意】/zxindata/zxinbak目录下的文件不能删除oracle@linux:~> cd /zxindata/oracle@linux:/zxindata> lltotal 0drwxr-xr-x 2 oracle dba 48 Jan 28 09:35 datadrwxr-xr-x 5 oracle dba 120 Jan 27 18:04 oracledrwxr-xr-x 2 oracle dba 80 Jan 28 09:34 zxin_file0drwxr-xr-x 2 oracle dba 120 Jan 28 09:41 zxin_file1drwxr-xr-x 2 oracle dba 80 Jan 28 09:37 zxin_file2drwxr-xr-x 2 oracle dba 80 Jan 28 09:35 zxin_indexdrwxr-xr-x 2 oracle dba 80 Jan 28 09:35 zxin_tempdrwxr-xr-x 2 oracle dba 112 Jan 28 14:11 zxinbak【2】删除oracle/control中的文件oracle@linux:/zxindata/oracle/control> lltotal 26378-rw-r----- 1 oracle dba 8994816 Jan 28 14:15 control01.ctl-rw-r----- 1 oracle dba 8994816 Jan 28 14:15 control02.ctl-rw-r----- 1 oracle dba 8994816 Jan 28 14:15 control03.ctloracle@linux:~> rm /zxindata/oracle/control/control0*【3】删除oracle/redolog中的文件oracle@linux:/zxindata/oracle/redolog> lltotal 768762-rw-r----- 1 oracle dba 262144512 Jan 28 09:28 redo01.dbf-rw-r----- 1 oracle dba 262144512 Jan 28 14:16 redo02.dbf-rw-r----- 1 oracle dba 262144512 Jan 28 09:23 redo03.dbforacle@linux:~> rm /zxindata/oracle/ redolog/redo*【4】删除oracle/system中的文件oracle@linux:/zxindata/oracle/system> lltotal 3674632-rw-r----- 1 oracle dba 536879104 Jan 28 14:05 sysaux.dbf-rw-r----- 1 oracle dba 536879104 Jan 28 14:16 system.dbf-rw-r----- 1 oracle dba 536879104 Jan 28 09:30 temp.dbf-rw-r----- 1 oracle dba 2147491840 Jan 28 14:17 undo.dbf-rw-r----- 1 oracle dba 536879104 Jan 28 09:33 users.dbforacle@linux:~> rm /zxindata/oracle /system/*.dbf【5】删除zxin_file0中的文件oracle@linux:/zxindata/zxin_file0> lltotal 1640008-rw-r----- 1 oracle dba 1677729792 Jan 28 14:07 zxin_data.dbf oracle@linux:/zxindata/zxin_file0> rm zxin_data.dbf【6】删除zxin_file1中的文件oracle@linux:/zxindata/zxin_file1> lltotal 2408766-rw-r----- 1 oracle dba 1677729792 Jan 28 09:37 zxin_bill.dbf-rw-r----- 1 oracle dba 786440192 Jan 28 09:41 zxin_mmsloger.dbf oracle@linux:/zxindata/zxin_file1> rm zxin*【7】删除zxin_file2中的文件oracle@linux:/zxindata/zxin_file2> lltotal 1640008-rw-r----- 1 oracle dba 1677729792 Jan 28 09:38 zxin_omm.dbf oracle@linux:/zxindata/zxin_file2> rm zxin_omm.dbf【8】删除zxin_dex文件oracle@linux:/zxindata/zxin_index> lltotal 1640008-rw-r----- 1 oracle dba 1677729792 Jan 28 09:36 zxin_index.dbf oracle@linux:/zxindata/zxin_index> rm zxin_index.dbf【9】删除zxin_temp文件oracle@linux:/zxindata/zxin_temp> lltotal 472-rw-r----- 1 oracle dba 419438592 Jan 28 14:11 zxin_temp.dbf oracle@linux:/zxindata/zxin_temp> rm zxin_temp.dbf【10】listener.ora、tnsnames.ora文件备份删除oracle@linux:/zxindata/zxinbak> cd $ORACLE_HOME/network/admin oracle@linux:~/oracle10g/network/admin> lltotal 24-rw-r--r-- 1 oracle dba 686 Jan 28 09:23 listener.ora-rw-r--r-- 1 oracle dba 686 Jan 28 09:23 listener.zxinbakdrwxr-x--- 2 oracle dba 4096 Jan 28 08:54 samples-rw-r----- 1 oracle dba 172 Dec 26 2003 shrept.lst-rw-r--r-- 1 oracle dba 701 Jan 28 09:23 tnsnames.ora-rw-r--r-- 1 oracle dba 701 Jan 28 09:23 tnsnames.zxinbakoracle@linux:~/oracle10g/network/admin> cp listener.ora listener.ora.bak0128oracle@linux:~/oracle10g/network/admin> cp tnsnames.ora tnsnames.ora.bak0128oracle@linux:~/oracle10g/network/admin> rm listener.oraoracle@linux:~/oracle10g/network/admin> rm tnsnames.oraoracle@linux:~/oracle10g/network/admin> lltotal 24-rw-r--r-- 1 oracle dba 686 Jan 28 14:27 listener.ora.bak0128-rw-r--r-- 1 oracle dba 686 Jan 28 09:23 listener.zxinbakdrwxr-x--- 2 oracle dba 4096 Jan 28 08:54 samples-rw-r----- 1 oracle dba 172 Dec 26 2003 shrept.lst-rw-r--r-- 1 oracle dba 701 Jan 28 14:27 tnsnames.ora.bak0128-rw-r--r-- 1 oracle dba 701 Jan 28 09:23 tnsnames.zxinbak四、恢复过程恢复过程主要有建库、起监听、建用户、imp恢复数据、以及用户补充授权。
oracle 10g备份与还原总结一.总述1.数据库归档模式:* 非归档模式:当数据库数据只读不会改变时,数据不会改变,数据库适合用非归档模式, 这样提高性能* 归档模式:对于数据库数据经常变动,数据库最好用归档模式,这样可以尽量避免数据库数据丢失,使出现问题时灾害降到最低2.非归档模式与归档模式间的切换(在命令窗口下):@检查当前日志操作模式f:\>sqlplus sys/dba as sysdba连接数据库sql>select log_mode from v$database;@关闭数据库,后装载数据库,只能在mount状态下改变日志操作模式sql>startup mount@改变日志模式sql>alter database achivelog;(变为归档方式,否则为nochivelog)sql>alter database open;3.查看归档模式相关信息:@若采用默认设置,归档日志位置在快速恢复区@配置归档日志位置 log_archive_dest_n (n=[1:10])sql>alter system setlog_archive_dest_1 = 'location =c:\demo\archive [optional]';sql>alter system setlog_archive_dest_2 = 'service =standby [mandatory] [reopen]';其中:location 是本地service 是远程optional 无论归档是否成功,都会覆盖重做日志mandatory只有成功归档才会覆盖重做日志reopen 重新归档时间间隔默认是300s@显示归档信息,即显示显示日志操作模式sql>select name,log_mode from v$database;@显示归档日志信息sql>select name,sequence#,first_change# from v$archive_log;sequence#: 归档序列号first_change# : 起始SCN值@显示归档日志位置sql>select dest_name,destination,status from v$archive_dest;dest_name 归档位置参数名destination 位置@显示日志历史信息sql>select * from v$loghist;threade# : 重做线程号sequence# : 日志序列号first_change# : 起始SCN值first_time : 起始SCN发生时间switch_change : 切换SCN值二.非归档模式下的备份与还原. 日志采用覆盖原有日志的方式存储. 出现介质失败时,只能恢复到过去的完全备份点. 数据库OPEN状态是,不能备份数据库. 必须先关闭数据库,再备份,且必须备份所有数据,控制文件1.备份==冷备份@ 先关闭数据库sql>shutdown immediate@ 拷贝所有数据文件,和控制文件2.恢复* 数据文件出现丢失,但备份以来的重做日志内容尚未被覆盖,此时可以完全恢复@装载数据库sql>startup force mount@复制数据文件备份@恢复数据文件sql>recover datafile 1@打开数据库sql>alter database open;* 备份文件的重做日志内容已经被覆盖,则只能还原到备份点@关闭数据库@复制所有数据和控制备份文件至原位置@装载数据库,执行恢复命令sql>startup mountsql>recover database until cancel提示控制文件不再使用原有重做日志@用resetlogs选项打开数据库sql>alter database open resetlogs;三.归档模式. 可以防止数据丢失. 数据处于OPEN状态时可以进行备份. 当出现介质失败时,除了SYSTEM表空间中的数据文件外其他的都可以在open状态下恢复. 可执行完全恢复,也可以恢复到备份点与失败点之间的某时刻1.备份1)冷备份shutdown后拷贝所需数据文件和控制文件2)热备份@将数据库设置为归档模式@在数据库上发出全局检查点,在所有的数据文件头块上加锁sql>alter database begin backup ;@备份数据文件及控制文件数据文件直接拷贝至其他目录控制文件需使用alter database backup controlfilesql>alter database backup controlfile to 'd:\backup\demo.ctl';@结束数据备份,为确保数据文件备份的同步性,还应该归档当前日志组sql>alter database end backup;sql>alter system archive log cuurent;3)备份表空间*脱机备份(表空间处于OFFLINE状态,SYSTEM表空间和正在使用的UNDO空间不能脱机)@确定表空间包涵的数据文件,如空间USERSsql>select file_name from dba_data_fileswhere tablespace_name = 'users';@设置表空间为脱机状态sql>alter tablespace users offline;@复制数据文件@设置表空间联机sql>alter tablespace users online;*联机备份@确定对应关系@设置表空间为备份模式sql>alter tablespace users begin backup ;@复制数据文件@设置表空间为正常模式sql>alter tablespace users end backup ;*处理联机备份失败当执行联机备份时,若出现例程失败,再次打开数据库时,如果数据文件仍处于备份状态,则会出错,此时需要结束备份@装载数据库sql>startup force mount@查看处于联机备份状态的所有数据文件sql>select file# from v$backup where status = 'active';@结束联机备份状态sql>alter tablespace end backup或alter tablespace datafile backup;或recover datafile 序号@打开数据库sql>alter database open;2.还原1)完全恢复相关命令:recover database :恢复数据库的多个数据文件(在MOUNT状态下运行)recover tadaspace :恢复多个表空间的所有数据文件(在open状态下运行)recover datafile :恢复一个或多个数据文件(在mount,open 状态下都可)*在mount状态下恢复数据文件(用于SYSTEM表空间恢复)@装载数据库 mount状态@确定需要恢复的数据文件sql>select file#,error from v$recover_file@拷贝备份至原位置@恢复数据库 recover..上述命令@打开数据库 alter database open;*在open状态下恢复关闭后意外对视的数据文件,此时数据库将无法打开@装载数据库 mount@确定需要恢复的数据文件@使相应的数据文件脱机sql>alter database datafile 4 offline;@打开数据库sql>alter database open@复制数据备份文件@恢复数据文件@是数据文件联机 alter database datafile 4 online; *在open状态下恢复打开时意外丢失的数据文件@确定要恢复的数据文件@使数据文件脱机@复制数据文件@恢复相应的表空间或数据文件@使相应的表空间或数据文件联机*在open状态下恢复未备份的数据文件(要求在归档模式下,新建数据文件,其从简历开始的所有归档日志必须全部存在)@装载数据库@确定要恢复的数据文件@是数据文件脱机@打开数据库@重新建立数据文件sql>alter database create datafile 'd:\demo\users01.dbf';@恢复数据文件@使数据文件联机2)不完全恢复使用已备份的数据文件,归档日志,和重做日志,将数据库恢复到备份点与失败点之间某个时刻的状态*恢复分类基于时间的恢复:误删除表,误截断表,提交了错误的数据基于取笑恢复:恢复到某个日志序列号之前的状态基于SCN的恢复:恢复到特定SCN值的状态基于备份控制文件恢复:表空间被意外删除,或所有控制文件全部损坏*不完全恢复指令recover database until timerecover database until changerecover database until cancelrecover database .. using backup controlfile*基于时间的恢复@关闭数据库(为防止备份失败,应备份当前数据库所有文件 @装载数据库 startup mount@复制所有备份数据文件,并确定备份文件的时间点sql>select file#,to_char(time,'yyyy-mm-dd hh24:mi:ss)from v$recover_file;@执行recover database until timesql>recover database until time "2006-09-26 16:40:33'@以resetlogs方式打开数据库,并检查恢复结果sql>alter database open resetlogs;@备份数据库所有数据文件和控制文件,因为当以resetlogs方式打开数据库后会重新建立重做日志,清空原有重做日志的所有内容,并将日志序列号复位为1sql>select name from v$datafile;sql>alter database begin backup;拷贝数据文件sql>alter database end backup;sql>alter database backup controlfileto 'd:\backup\demo.ctl' reuse;sql>alter system archive log cuurent;*基于SCN恢复@关闭数据库@装载数据库 mount@复制所有备份数据文件,确定备份文件SCN值sql>select file#,change#, from v$recover_file; @执行recover database until changesql>recover database until change 675978;@以resetlogs方式打开数据库@备份数据库所有数据文件和控制文件*基于取消恢复@关闭数据库@装载数据库@复制所有备份的数据文件,确定备份文件的SCN值sql>select file#,change# from v$recover_file; @执行recover database until canclesql>recover database until cancel@以resetlogs方式打开数据库@备份所有数据文件和控制文件*基于备份控制文件的恢复@通过查看alert文件,确定误操作时间@关闭数据库@复制所有备份的数据文件,控制文件@装载数据库@执行recover database ing backup controlfile sql>recover database until time '2004-09-26 19:51:06'using backup controlfile@以resetlogs 方式打开数据库@备份所有数据文件和控制文件。
使用RMAN备份与还原Oracle数据库原理一、数据库备份概念对于Oracle数据库,备份方式包括物理备份和逻辑备份。
1、物理备份将实际组成数据库的操作系统文件从一处拷贝到另一处的备份过程,通常是从磁盘到磁带。
该方法实现数据库的完整恢复,但数据库必须运行在归档模式下(业务数据库在非归档模式下运行),且需要极大的外部存储设备,例如磁带库,具体包括冷备份和热备份。
冷备份和热备份是物理备份(也称低级备份),它涉及到组成数据库的文件,但不考虑逻辑内容。
使用RMAN备份与还原ORACLE数据库的方式,属于物理备份方法。
2、逻辑备份利用SQL语言从数据库中抽取数据并存于二进制文件的过程。
业务数据库采用此种方式,此方法不需要数据库运行在归档模式下,不但备份简单,而且可以不需要外部存储设备,包括导出/导入(EXPORT/IMPORT)。
这种方法包括读取一系列的数据库日志,并写入文件中,这些日志的读取与其所处位置无关。
二、RMAN备份方式使用RMAN备份Oracle数据库,包括以下三种备份概念。
1、完全备份(Full Backup)与增量备份(Incremental Backup)完全备份与增量备份是针对数据文件而言,控制文件和归档日志文件不能进行增量备份。
当然,后两者可以做备份优化。
2、打开备份(Open Backup)或关闭备份(Closed Backup)数据库打开状态下进行备份即是打开备份,数据库关闭状态下(加载状态)进行的备份即关闭备份。
3、一致备份(Consistent Backup)与不一致备份(Inconsistent Backup)数据库打开状态或不干净关闭状态(shutdown abort)进行的备份是不一致备份,利用不一致的备份修复数据库后还需要做数据库的恢复。
在数据库干净关闭状态进行的备份是一致备份,利用一致备份修复数据库后不需要做数据库的恢复。
三、备份策略由于数据库占据物理空间较大,每次都进行全库备份,对存储介质要求比较高,也会造成空间的冗余浪费,故而在实际的数据备份过程中,通常采用增量备份的方法。
RMAN复制数据库通过使用数据库备份,DBA可以在同一服务器或其他服务器上建立副本数据库,这个副本数据库可以和主数据库有相同的名称(数据库拷贝)或者与数据库名称不同(数据库克隆),Oracle在数据库备份和数据库克隆之间唯一不同的是拷贝的数据库不能更改原名称。
使用RMAN的复制数据库特性,可以从RMAN备份创建一个新的数据库,并为这个副本数据库保留已有的数据库名称或赋予新的名称。
在练习9已经介绍了复制数据库的概念,在练习20-23和练习27-29中,讲述了如何使用恢复管理器(RMAN)进行备份与恢复,本练习将讲解如何综合这几个练习的知识,用RMAN创建副本数据库。
RMAN如何从备份创建一个副本数据库?在复制期间,RMAN连接主数据库和副本的实例,复制进程包括在副本服务器上还原并恢复主数据库的备份文件。
首先在副本数据库服务器上恢复RMAN创建的主数据库备份基准;在恢复期间,所需的主数据库的增量备份和归档重做日志将应用到副本数据库中,副本数据库不能进行完全恢复,因为联机重做日志不能还原(由于没有用RMAN进行备份),因此不完全恢复将执行到一个指定的停止点或者直到RMAN所知的最新归档日志文件,此时RMAN将不会应用任何来自联机日志的重做。
副本数据库相比主数据库而言已经过时了,在复制期间,会生成一个新的控制文件和联机重做日志文件。
RMAN也将赋予这个数据库一个新的数据库标识(DBID)。
就向其他介绍RMAN其他练习一样,在本练习中将定义属于本章内容的新RMAN 术语或命令,本章将介绍一下RMAN术语和命令:z辅助数据库(Auxiliary database): RMAN将目标(主)数据库复制到该数据库实例,要创建该数据库的参数文件、路径和口令文件。
必须在RMAN数据库复制之前以非加载(NOMOUNT)模式启动辅助数据库实例;z复制(Duplicate):从其他数据库的RMAN备份创建一个新的数据库,要在RMAN执行复制操作的位置配置辅助数据库并启动Oracle的实例,从RMAN的角度来看,目标数据库被复制到副本数据库;z设置新名称(Set newname) :在一个RMAN运行块内为数据设置新的名称,提供给该参数名将覆盖任何该数据文件的辅助数据库名(用SET_AUXNAME)或者辅助数据库参数(DB_FILE_NAME_CONVERT),这个新名称的值只在数据块内有效);z设置辅助名称(Set auxname) :为数据文件设置辅助名称。
这个辅助名称将在RMAN会话之间存在,如果不希望以后的RMAN使用这个设置的名称,则必须要将该名称设置为null;z日志文件(Log fiel):可以在duplicate命令中使用这个关键字,以指定副本数据库创建的联机重做日志。
如果没有特别指定这个关键字,则RMAN将在辅助参数文件中的LOG_FILE_NAME_CONVERT参数决定路径中生成日志文件。
如果没有这个RMAN关键字,而且没有设置辅助参数,则RMAN将在目标数据库同样的位置创建日志文件(假设已经指定了NOCHECKFILENAME选项);z不检查文件名(NoCheckfilename) :默认情况下,RMAN将检查在副本主机上被恢复到主机目标数据文件路径下的数据文件,以确保不会被错误地覆盖。
使用该选项可以覆盖这个默认的操作。
这样就需要手工确保RMAN没有覆盖任何已经存在的数据文件。
应当谨慎使用这个命令,防止覆盖数据文件。
在Duplication命令中执行的过程中,RMAN执行了一系列工作。
当连接到目标、辅助和可选的目录数据库后,RMAN将执行如下操作:1、根据最近发生的或者是提供的恢复停止点来决定复制操作将使用哪个基本的备份;2、根据辅助数据库参数或RMAN设置的命令和选项来决定将数据文件保存在辅助数据库实例的什么位置;3、为辅助数据库读出备份片或映像拷贝并恢复数据文件,这个RMAN的功能与执行正常的数据库还原是一样的;4、根据恢复停止点将任何增量备份应用于还原数据文件,这个增量方式应用与应用RMAN发布恢复数据库命令的任务是一样的;5、根据恢复停止点从磁盘或备份将所有归档日志文件应用于还原数据文件6、为辅助数据库创建新的控制文件7、当重新设置联机重做日志文件时,打开副本数据库。
新的联机重做日志文件将根据RMAN复制数据库命令中指定的或者根据转换的辅助参数文件来创建。
为什么要使用RMAN来创建副本数据库呢?如果备份知识RMAN备份则必须使用RMAN进行操作。
如果既有RMAN备份也有用户管理的备份,则RMAN进行复制会比较容易,RMAN将创建新的控制文件并处理数据文件的还原与恢复。
当用RMAN进行数据库复制时,应该考虑以下注意是事项:z不是必须要使用RMAN目录。
RMAN信息被存储在目标数据库的控制文件中,必须确保创建副本数据库的备份仍然在目标控制文件中。
例如,如果将init.ora文件的CONTROLFILE_RECORD_KEEP_FOR_TIME参数设置为21天,则不能从2个月以前开始还原;z如果当数据库打开时进行备份,则应包括随后的日志切换以确保当备份进行时任何重做的更改都被归档;z确保选取的备份包含了必要的归档日志,RMAN必须清楚应用的归档日志;z不能在复制期间进行完全恢复,恢复必须有停止点。
该停止点可以是一个指定的停止点也可以是归档重做日志所知的最后一个点可以基于时间、日志序列或者SCN来指定一个停止点;z为了在复制期间创建数据库的拷贝,应使用与辅助数据库参数文件中的目标文件一样的数据库名称;z如果副本数据库驻留在其他服务器上,而且服务器拥有与主数据库服务器同样的路径结构,则在复制期间不需要重新命名任何文件。
默认情况下,DUPLICATE命令将告知RMAN还原的辅助文件的位置与目标数据库文件备份时的主数据库文件位置相同;z新的副本数据库的数据库名称可以和主数据库的相同,也可以不同。
当数据库的名称必须与任何共享ORACLE_HOME路径的数据库的名称不同。
因此,如果主数据库和副本数据库驻留在同一服务器上,而且共享相同的ORACLE_HOME,则副本数据库必须重新命名。
虽然在同一服务器上,但是拥有独立的ORACLE_HOME路径或在不同的服务器上则它们可以具有相同的数据库名称。
在本练习中,将用RMAN创建一个副本数据库。
可以通过辅助初始化参数文件以及RMAN命令更改数据库文件的名称和位置。
创建副本数据库涉及一系列相互协调的步骤,在下列描述的步骤中,主数据库为目标数据库,而副本数据库为辅助数据库。
1、使RMAN备份可以被将要存储副本数据库的服务器访问如果备份生在磁盘上,可以用ftp的二进制模式传送或用NFS这样的磁盘共享机制进行访问;2、准备副本数据库参数文件在副本数据库被创建以前,RMAN需要连接到一个辅助实例上,这类似于练习12-14中要执行的表空间时间点恢复时需要连接的辅助实例。
RMAN连接到辅助实例后,则从备份开始还原数据文件以生成副本数据库。
为了启动辅助实例,必须创建一个包含许多特殊参数的初始化参数文件,当在与主数据库同样的服务器上创建副本数据库时,必须确保控制文件、数据文件和联机重做日志文件没有覆盖已经存在的文件。
为了达到这个目的,可以告知RMAN在执行DUPLICATE命令时在新的位置重新命名这些文件,或者可以指定某些特殊的初始化参数自动完成这个工作。
3、生成副本数据库口令文件为了进行DBA验证,副本数据库需要一个口令文件,可以按照练习9步骤一生成这个文件;4、创建NET8连接文件 RMAN需要同时连接到主数据库(目标实例)以及副本数据库(辅助实例),如果这两个数据库驻留在不同的服务器上,则需要配置副本服务器上的lister监听器,而且需要配置运行RMAN服务器上的tnsnames文件;5、启动辅助实例在RMAN创建副本数据库之前,辅助实例需要以非加载模式启动,启动时将要读取步骤二创建的参数文件;6、加载或打开主数据库 RMAN需要主数据库加载或打开以便创建副本数据库;7、创建副本数据库当要求RMAN创建副本数据库时,它会自动还原所需的基准备份,并应用增量备份和归档重做日志文件,恢复完成后副本数据库会以RESETLOGS选项打开。
1.1.1.练习30:用RMAN复制PRACTICE数据库本练习中将要克隆生成的数据库名为CLNE,因此在本练习中PRACTICE数据库就是主/目标数据库,副本数据库是一个克隆。
因为该数据库被赋予了一个新的名称,如果在其他服务器上执行该练习,则创建的数据库可以具有相同的名称(PRACTICE),只需要将本练习中的CLNE用PRACTICE代替就可以了。
步骤一:准备克隆数据库为CLNE数据库开始创建数据库路径、参数文件、口令文件(及Window服务),如果已经执行了练习9,这些步骤就都已经完成了。
z路径为将要生成的CLNE数据库创建所有相关路径:1.set ORACLE_SID=CLNE2.set ORACLE_BASE=D:\oracle3.set ORACLE_HOME=D:\oracle\product\10.1.04.set ORACLE_DATA=D:\oracle\%ORACLE_SID%5.set ORACLE_ADMIN=%ORACLE_HOME%\admin\%ORACLE_SID%6.md %ORACLE_ADMIN%7.md %ORACLE_ADMIN%\pfile8.md %ORACLE_ADMIN%\bdump9.md %ORACLE_ADMIN%\cdump10.md %ORACLE_ADMIN%\udump11.md %ORACLE_ADMIN%\create12.md %ORACLE_DATA%\13.md %ORACLE_DATA%\ARCHIVE参数文件接下来,进入D:\oracle\product\10.1.0\admin\PRACTICE\pfile文件夹,复制PRACTICE参数文件init.ora.1016201010059并命名为initCLNE.ORA,使用写字板打开,将文件中出现”PRACTICE”替换为”CLNE”。
当执行这个全文搜索和替换时,就为参数更改了数据库名、服务名、控制文件的位置以及许多路径。
修改完毕后应确认一下参数:DB_NAME、CONTROL_FILES 以及目标路径。
在CLNE数据库参数文件中增加三个参数:log_archive_dest='D:\oracle\CLNE\ARCHIVE'db_file_name_convert=("PRACTICE","CLNE")log_file_name_convert=("PRACTICE","CLNE")在复制期间,这三个参数将把文件名和位置名从旧值转换为新值。