《Oracle 9i RMAN 备份与恢复技术》学习笔记


Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 《Oracle 9i RMAN 备份与恢复技术》 学习笔记 第 3 章 RMAN设置和配置 ................................................................................................................... 2 第 9 章 RMAN 备份................................................................................................................................5 第 10 章 RMAN还原与恢复 .............................................................................................................. 10 第 12 章 RMAN的高级恢复 ........................................................................................................... 15 第 13 章 RMAN维护................................................................................................................................. 25 第 14 章 RMAN报告................................................................................................................................. 29 1 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 第 3 章 RMAN 设置和配置 1.9i 下将数据库配置为 ARCHIVELOG 模式 虽说 RMAN 也可以在非归档模式下使用,但是我们不推荐。因为非归档模式下很多 RMAN 的 功能都用不上。在 9i 中必须配置如下参数: LOG_ARCHIVE_DEST_n:指定归档的重做日志文件的位置,并指定是否是必要的。N 从 1 到 10,也就是可以指定 10 个位置,至少指定一个。例如下面的参数设置中: LOG_ARCHIVE_DEST_1= 'location=e:\oracle\backup mandatory' e:\oracle\backup 是要备份文件要存放的位置,mandatory 的意思是说这个目录下 的日志是必须成功写入的;也可以是 optional,也就是可选的。 LOG_ARCHIVE_START:这个参数指定 Oracle 实例启动数据库的时候启动 ARCH 进程。 这个参数需要设置成 TRUE(书上第 47 页倒数第 5 行关于该参数的描述有误) 其它的与 ARCH 进程相关的参数: LOG_ARCHIVE_STATE_n:这个参数与 LOG_ARCHIVE_DEST_n 相对应,可能的值有 ENABLE 和 DISABLE 两种。如果设置成 ENABLE,ARCH 进程会认为与该状态关联的目标为一个 有效的归档日志目标;如果设置成 DEFER,ARCH 进程就不会再相关的位置归档。 LOG_ARCHIVE_FORMAT:该参数设定归档文件的命名规则 LOG_ARCHIVE_MIN_SUCCEED_DEST:定义归档日志必须成功的最小的副本数量。这个 参数应该大于等于 LOG_ARCHIVE_DEST_n 中的 MANDATORY 数量。 下面是 9i 下多个与归档相关的参数设置的例子: LOG_ARCHIVE_DEST_1= 'location=e:\oracle\backup mandatory' LOG_ARCHIVE_DEST_2= 'location=z:\oracle\backup optional' LOG_ARCHIVE_DEST_3= 'service=recover1 mandatory' LOG_ARCHIVE_MIN_SUCCEED_DEST=2 LOG_ARCHIVE_FORMAT= "tlxt_%s_%t.arc" LOG_ARCHIVE_START=TRUE 设置好参数后,就可以将数据库设置为归档模式了。这个操作需要在 MOUNT 状态下进行, 例如: SQL> connect / as sysdba 已连接。 SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup mount ORACLE 例程已经启动。 Total System Global Area 252780316 bytes Fixed Size 454428 bytes Variable Size 58720256 bytes Database Buffers 192937984 bytes 2 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner Redo Buffers 667648 bytes 数据库装载完毕。 SQL> alter database archivelog; 数据库已更改。 SQL> alter database open; 数据库已更改。 注意:更改为归档模式后,应该立即备份一次数据库。 SQL> 2.10g 中设置成归档的配置: 10g 中不需要设置 LOG_ARCHIVE_START 参数,其余与 9i 相同。 3.RMAN 命令介绍: 参数 值 说明 ----------------------------------------------------------- target 加引号的字符串 目标数据库连接字符串 catalog 加引号的字符串 恢复目录的连接字符串 nocatalog 无 如果已指定, 则没有恢复目录 cmdfile 加引号的字符串 输入命令文件的名称 log 加引号的字符串 输出消息日志文件的名称 trace 加引号的字符串 输出调试信息日志文件的名称 append 无 如果已指定, 日志将以附加模式打开 debug 可选参数 激活调试 msgno 无 对全部消息显示 RMAN-nnnn 前缀 send 加引号的字符串 将命令发送到介质管理器 pipe 字符串 管道名称的构建块 timeout 整数 等待管道输入的秒数 举例: rman target='system/mana@tl' rman target='sys/pwd as sysdba @tlgaxz' catalog=rman/rman@catalog log=rman.log 注意:命令行和参数之间,=是可选的。 使用 RMAN 的 CONNECT 命令: 如果启动了 RMAN,但是发现没有连接到正确的数据库,或者要连接到不同的数据库,可以 用 CONNECT。例如 RMAN>CONNECT TARGET SYS/PWD@TESTDB; RMAN>CONNECT CATALOG RMAN/RMAN@CATALOGDB; 4.设置 CONTROL_FILE_RECORD_KEEP_TIME 如果不使用 RMAN 的恢复目录,应该考虑设置这个参数。这个参数默认是 7,也就是说控 制文件会记录 7 天内的 RMAN 信息。因此,如果备份策略时间超过 7 天,就会有比较严重 的问题:存在备份,但是却无法被 RMAN 使用。如果用恢复目录(CATALOG)就不存在这个问 题。 5.配置 RMAN 的默认设置 9i 中 RMAN 允许我们执行自动的数据库备份和恢复。为了支持这个操作,RMAN 允许我们为 一些设置定义默认值(如通道配置)。 6.CONFIGURE 命令介绍 下面是可以用 CONFIGURE 来设置的内容: 3 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 用于 RMAN 操作的默认设备类型,如磁盘或者磁带(SBT) 执行自动备份和恢复操作时自动分配的通道数 配置备份时的排斥策略 配置自动备份时给定备份片的最大空间和任何备份集的大小 配置备份最优化的默认设置。可以是 ON 或者 OFF. 快照控制文件的默认名称 是否自动备份控制文件 辅助数据文件的默认名称 默认的保存策略 V$RMAN_CONFIGURATION 视图中可以查看 RMAN 的设置。 7.显示默认设置举例: SHOW DEFAULT DEVICE TYPE; SHOW MAXSET SIZE; SHOW RETENTION POLICY; SHOW ALL;(显示全部配置) 8.CONFGIURE 命令举例: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; CONFIGURE BACKUP OPTIMIZATION OFF; CONFIGURE DEFAULT DEVICE TYPE TO DISK; CONFIGURE CONTROLFILE AUTOBACKUP OFF; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; CONFIGURE DEVICE TYPE DISK PARALLELISM 1; CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; CONFIGURE MAXSETSIZE TO UNLIMITED; CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'E:\ORACLE\ORA92\DATA\SNCFTLGAXZ.ORA' ; 下面的例子将 1 通道的默认文件片大小最大设置成 100M: CONFIGURE CHANNEL 1 DEVICE TYPE DISK MAXPIECESIZE 100M; 如果要设置所有通道,则用下面的命令: CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 100M; 如果想取消上面的设置,则用下面的命令: CONFIGURE CHANNEL DEVICE TYPE DISK CLEAR; 设置保存策略举例: CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS; 清除上面的设置: CONFIGURE RETENTION POLICY CLEAR; 9.恢复目录 10. 4 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 第 9 章 RMAN 备份 1. RMAN 备份的优点: RMAN 会检测和报告损坏的数据块 不需要将表空间置于热备模式,RMAN 就可以备份数据库。因此热备期间生成的重 做会减少 RMAN 自动跟踪更新新的数据文件和表空间,这样就不再需要在脚本中添加新的表 空间和数据文件 RMAN 只备份使用过的数据块,这样 RMAN 备份通常小于联机脚本备份 RMAN 可以与第三方介质管理产品一起无缝地工作 RMAN 支持增量备份 可以测试备份而不需要实际还原。 2. 脱机备份 如果数据库处于未归档模式,那么只能进行脱机备份,也就是在 MOUNT 状态下进行。 下面是脱机全备份的语句(假设配置好了默认设置): shutdown immediate; startup mount; backup database; startup; 3. 不使用默认的设置执行脱机备份操作 如果没有配置默认设置,或者默认设置不合要求,那么可以在备份命令中指定备份选项, 包括通道分配、备份文件格式、位置、大小限制等。例如: shutdown immediate; startup mount; run { allocate channel c1 type disk format 'd:\backup\robt\robt_%U'; allocate channel c2 type disk format 'd:\backup\robt\robt_%U'; backup database; backup current controlfile; } 在这个例子中,我们分配了两个通道,备份位置是在 d:\backup\robt。默认情况下,如果备 份数据文件 1(SYSTEM 表空间),控制文件和参数文件也会备份。 4. BACKUP 命令选项 设置标记(TAG) 可以为 Oracle 的每个备份指派一个标记。标记应用于万全备份、表空间备份、数据文 件备份、增量备份、甚至文件副本等。标记可以相同,恢复的时候会在满足条件的情 况下自动应用最新备份。例如: backup database tag= 'test backup'; 限制备份集大小 backup database maxsetsize=100M; 上面的例子中,设定每个备份集的大小不能超过 100M。但是如果数据文件大于 100M, 5 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 那么备份就会失败。 修改备份集的保存策略 我们可以用 KEEP 参数来改变默认的保存策略。 例如: backup database keep forever logs|nologs; backup database keep until time='sysdate+180'; 第一个语句,我们将备份设置为永久有效;第二个语句设置为有效期 180 天。 重写 configure exclude 通过 configure exclude 可以配置 RMAN 不备份上次备份以来没有发生变化的数据文 件。如果要确保 RMAN 备份这些数据文件,可以在 backup 命令中添加 noexclude 选 项。例如: backup database noexclude; 跳过脱机的、不可存取的或者只读的数据文件 backup database skip readonly; backup database skip offline skip inaccessible skip readonly; 强制备份只读的数据文件 backup database force; 备份指定周期内没有备份的数据文件 backup database not backed up; backup database not backed up since time='sysdate-2'; 在备份操作期间检查逻辑讹误 backup check logical database; backup validate check logical database; 第一个例子中会在检查逻辑错误的同时进行备份,第二个例子只检查数据库。 备份控制文件 backup current controlfile; 也可以在备份数据库或者文件的时候加上 include current controlfile 选项。例如: backup database include current controlfile; 5. set 命令介绍 set 命令可以定义只应用于当前 RMAN 会话的设置。set 命令与 configure 命令很相似,但 是 set 命令设置不是永久的。可以用于 run 代码之外的命令有: set echo on|off 上面用来显示或关闭 RMAN 显示 set DBID dbid 上面命令用来指定一个数据库的数据库标识符。下面的 set 命令只能在 run 代码中使用: set newname:用于 TSPITR 或者数据库复制操作。该命令允许指定新的数据库文件名, 将数据库移动到新的系统中并且文件名不同的时候可以用此命令。 set maxcorrupt for datafile:用于定义 RMAN 操作失败之前允许的数据块讹误的数量 set archivelog destination:可以修改存储归档的重做日志 archive_log_dest_1 的目的地。 set 命令和 until 子句:可以定义数据库时间点恢复操作所使用的具体的时间点、SCN 或者日志序列号 set backup copies:使用该命令可以定义为备份集的每个备份片创建的副本数。 使用 set 命令的例子: run 6 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner { set maxcorrupt for datafile 3 to 10; set backup copies = 2; backup database; } 6. 联机 RMAN 数据库备份 要用 RMAN 进行联机备份操作,数据库就必须位于 ARCHIVELOG 模式。下面是一个整 库备份的简单例子: backup database plus archivelog delete input; 这个例子备份数据库还要备份归档日志,然后将备份后的归档日志删除。 重要提示:用 RMAN 首次进行热备的时候,可能会遇到这样的问题:rman 报告丢失了恢 复操作所需要的重做日志。如果数据库被切换进又切换出 ARCHIVELOG 模式,并且删除 了旧的归档重做日志,这些归档日志属于之前的 ARCHIVELOG 模式下的数据,此时就会 出现这种问题。这种情况下备份的时候就会产生 RMAN-06059 和 ORA-19625 错误。我们 需要执行 crosscheck archivelog all 命令来检查一下归档重做日志。 7. 表空间备份: backup tablespace users; backup tablespace users plus archivelog; 8. 数据文件备份 backup datafile 3; backup datafile 'D:\ORACLE\ORADATA\TEST\TEST.DB'; 9. 归档重做日志备份。 备份所有归档: backup archvielog all; 备份两天来的归档: backup archivelog from time='sysdate-2'; 备份从 sequence 1 开始的归档: backup archivelog from sequence 1; 备份没有三次备份的归档: backup archivelog not backed up 3 times; 备份所有归档,然后删除归档: backup archivelog all delete input; 10. 控制文件和服务器参数文件的备份: backup current controlfile; 11. 备份集的备份 备份所有备份集: backup backupset all; 备份指定备份集: backup backupset bs_num; 12. 副本介绍: RMAN 可以创建数据库数据文件、归档重做日志或者控制文件的精确副本。RMAN 副本 与这些文件的区别仅在于名称和(或)位置的区别。备份副本的好处是恢复比较快。备份 副本至少要在 mount 状态下运行。 13. 生成数据文件副本: 7 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner copy datafile 3 to 'd:\backup\datafilecopy\users01.dbf .bak'; copy datafile 'd:\oracle\oradata\ora9i\users01.dbf' to 'd:\backup\datafilecopy\users01.dbf .bak'; 14. 生成控制文件副本: copy current controlfile to …; 15. 备份 ARCHIVELOG 副本: 生成归档的重做日志副本麻烦的是只能一个一个的来备份,而不能指定一个范围。例如: copy archivelog 'd:\oracle\oradata\arc\robt_351.arc' to 'd:\oracle\orabackup\arc\robt_351.arc'; 16. 增量 RMAN 备份基本介绍 通过增量备份,RMAN 允许用户只备份上次增量备份操作以来被修改过的数据块。增量 备份具有如下优点: 节约备份时间 节省备份磁带或者磁盘 降低网络带宽要求 增量备份的缺点是恢复时间可能要长。 17. 基本备份(0 级备份) 执行增量备份操作时,首先需要的是基本备份(incremental base backup),增量备份必须有 一个基本备份。基本备份的增量级别是 0,如果没有 0 级备份,那么其它级别的备份会自 动转成基本备份。备份举例: backup incremental level=0 database; 18. 差异备份与累积(cumulative)备份 差异备份是默认的增量备份类型,差异备份会备份上一次进行的同级或者低级备份以来所 有变化的数据块,而累积备份,则备份上次低级备份以来所有的块。例如,星期一进行了 一次 2 级备份,星期二进行了一次 3 级备份,如果星期四进行 3 级差异增量备份,那么只 备份上次 3 级备份以来变化过的数据块;如果进行累积 3 级备份,那么就会备份上次 2 级 备份以来变化的数据块。 8 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 9 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 第 10 章 RMAN 还原与恢复 1.还原与恢复的区别 在 RMAN 用语中,“还原”与“恢复”具有不同的含义。还原(RESTORE)是指访问先前生 成的备份集,从中得到一个或多个对象,然后再磁盘上的某个位置还原这些对象。恢复 (RECOVERY)是一个使数据库与给定时间点相一致以保证能打开这个数据库的实际进程。 该进程通常是通过应用归档日志和联机日志来完成的,如果是从增量备份中还原的数据文 件,那么只还原到基本备份,RECOVER 首先应用增量备份,然后再应用归档和联机日志。 2.使用 RMAN,不使用恢复目录从自动备份中还原服务器参数文件(spfile) 如果配置了控制文件自动备份,那么备份控制文件的同时也会备份 spfile。 还原spfile一般过程是先设置ORACLE_SID,然后登录RMAN,如果不使用恢复目录还需 要设置DBID,使RMAN知道需要查找哪一个数据库的服务器参数文件。然后启动到 NOMOUNT状态,然后用RESTORE SPFILE FROM AUTOBACKUP命令来恢复控制文件。 通常,RMAN可以在不存在任何参数文件或者服务器参数文件的情况下启动Oracle实例到 nomount状态,会给实例分配默认值。如果不允许Oracle使用这些默认值,则必须创建临 时参数文件来启动Oracle实例。下面是具体的例子。(略去部分输出内容) C:\> DEL E:\ORACLE\database\SPFILETLGAXZ.ORA C:\> SET ORACLE_SID=TLGAXZ C:\>RMAN TARGET / NOCATALOG RMAN>SET DBID=2600315304; RMAN>STARTUP NOMOUNT; RMAN>RESTORE SPFILE FROM AUTOBACKUP; 启动 restore 于 29-8 月 -06 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: sid=9 devtype=DISK 通道 ORA_DISK_1: 寻找以下日期的自动备份: 20060829 通道 ORA_DISK_1: 已找到的自动备份: c-2600315304-20060829-0a 通道 ORA_DISK_1: 从自动备份复原 SPFILE 已完成 完成 restore 于 29-8 月 -06 RMAN>SHUTDOWN IMMEDIATE; RMAN>STARTUP; 注意设置 DBID,如果不知道的话可以从自动备份的控制文件集的名字中可以看出来(假 设采用默认的命名规则)。例如下面的这个备份中,C 表明是控制文件备份,2600315304 是 DBID,20060829 是备份日期,02 是序列号。 C-2600315304-20060829-02 使用 RESTORE SPFILE FROM AUTOBACKUP 命令时,默认只在一定的时间内来搜索备 份。如果想突破这个限制,比如默认周期内没有 SPFILE 的备份,可以使用 MAXDAYS 来指定要查找的时间范围。比如下面的例子中在 100 天内查找 SPFILE RESTORE SPFILE FROM AUTOBACKUP MAXDAYS 100; 3.使用 dbms_backup_restore 包恢复服务器参数文件 在一些不常见的情况下,我们可能需要直接使用 dbms_backup_restore 包来恢复 spfile。当 然这个包也可以用来恢复其它数据,是常规办法都没有用的时候的一个利器。这个包可以 10 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 在数据库 NOMOUNT 状态下使用。假设我们有一个自动备份文件 C-2600315304-20060829-02,我们需要从这里恢复数据,那么可以通过执行下面的脚本来 完成: SQL>DECLARE DEVTYPE VARCHAR2(256); DONE BOOLEAN; BEGIN DEVTYPE:=DBMS_BACKUP_RESTORE.DEVICEALLOCATE(NULL); DBMS_BACKUP_RESTORE.RESTORESETDATAFILE; DBMS_BACKUP_RESTORE.RESTORESPFILETO('D:\TEMP\SPFILETLGAXZ.ORA') ; DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE('E:\ORACLE\database\C-260 0315304-20060829-00',DONE=>done); DBMS_BACKUP_RESTORE.DEVICEDEALLOCATE(NULL); END; / dbms_backup_restore 的更多使用方法会在随后的笔记中更多的介绍。 4.使用恢复目录来恢复 spfile 相对来说简单多了,下面是一个示例: #set oracle_sid=ora9i #rman target / catalog rman/rman@reco rman>startup nomount; rman>restore spfile from autobackup; rman>shutdown immediate; rman>startup; 这个例子中,我们直接用 restore spfile;也可以恢复 spfile,RMAN 会自动搜寻 SPFILE。 5.不使用自动备份恢复 spfile 如果 spfile 存放于某备份集,而不是自动备份,则可用 restore spfile from backupset bs_num 命令。 6.还原控制文件 还原控制文件与还原服务器参数文件很相似。还原控制文件用 restore controlfile 命令。 不使用 CATALOG 从自动备份中恢复控制文件举例: set oracle_sid=tlgaxz; rman target sys/wzh set DBID=2600315304; startup nomount; restore controlfile from autobackup; 使用 dbms_backup_restore 包恢复控制文件 与恢复方法 spfile 很类似,关键是 RESTORECONTROLFILETO 过程。 SQL>DECLARE DEVTYPE VARCHAR2(256); DONE BOOLEAN; BEGIN DEVTYPE:=DBMS_BACKUP_RESTORE.DEVICEALLOCATE(NULL); 11 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner DBMS_BACKUP_RESTORE.RESTORESETDATAFILE; DBMS_BACKUP_RESTORE.RESTORECONTROLFILETO('D:\TEMP\CONTROL01.CT L'); DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE('E:\ORACLE\database\C-26003 15304-20060829-00',DONE=>done); DBMS_BACKUP_RESTORE.DEVICEDEALLOCATE(NULL); END; / 使用恢复目录恢复控制文件 我们可以简单的用 RESTORE CONTROLFILE;即可。 联机恢复控制文件 因为处于联机状态,所以现有控制文件不能被覆盖,我们用 restore controlfile to …来 将控制文件恢复为指定的文件,例如: RMAN> restore controlfile to 'd:\temp\control01.ctl'; 启动 restore 于 29-8 月 -06 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 正在开始恢复数据文件备份集 通道 ORA_DISK_1: 正在恢复控制文件 输出文件名=D:\TEMP\CONTROL01.CTL 通道 ORA_DISK_1: 已恢复备份段 1段 handle=E:\ORACLE\DATABASE\C-2600315304-20060829-00 tag=null params=NULL 通道 ORA_DISK_1: 恢复完成 完成 restore 于 29-8 月 -06 7.在 NOARCHIVELOG 模式下还原与恢复数据库 在非归档的情况下,我们只能从完全的脱机备份中恢复数据库,并且不可能实现基于时间 点的恢复。 存在完整的联机日志文件的情况: startup mount; restore database; recover database; alter database open; 如果是使用恢复的控制文件,那么可能需要用 resetlogs 方式打开数据库。 日志文件不完整或者损坏(需要使用 noredo 选项): startup mount; restore database; recover database noredo; alter database open resetlogs; 从旧备份中还原数据库 如果有多个数据库备份,而且不想恢复到最新的备份,那么需要使用 SET 命令来设 置时间,也可以用 RESTORE 命令的时候指定截止时间。如果使用 SET 命令,必须 在 RUN 代码中运行。例如: startup mount; run { 12 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner SET UNTIL TIME "TO_DATE('2006/8/29 16:08:00', 'YYYY/MM/DD HH24:MI:SS')"; restore database; recover database noredo; alter database open resetlogs; } 也可以用 restore database until time "TO_DATE('2006/8/29 13:00:00', 'YYYY/MM/DD HH24:MI:SS ')"; 在不同的位置上还原数据库 如果需要把数据文件还原到不同的位置,则需要用 SET NEWNAME 命令和 SWITCH 命令。SWITCH 命令用来指示使用新的位置的文件作为数据文件,这个命令应该在 RECOVER 命令前执行,可惜书上的顺序是反的。见 P188。下面是一个例子: RUN { SET NEWNAME FOR DATAFILE 'E:\ORACLE\ORADATA\TLGAXZ\SYSTEM01.DBF' TO 'E:\ORACLE\ORADATA\TLGAXZ_RECOVER\SYSTEM01.DBF'; SET NEWNAME FOR DATAFILE 'E:\ORACLE\ORADATA\TLGAXZ\OEM_REPOSITORY.DBF' TO 'E:\ORACLE\ORADATA\TLGAXZ_RECOVER\OEM_REPOSITORY.DBF'; SET NEWNAME FOR DATAFILE 'E:\ORACLE\ORADATA\TLGAXZ\INDX01.DBF' TO 'E:\ORACLE\ORADATA\TLGAXZ_RECOVER\INDX01.DBF'; SET NEWNAME FOR DATAFILE 'E:\ORACLE\ORADATA\TLGAXZ\TOOLS01.DBF' TO 'E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TOOLS01.DBF'; SET NEWNAME FOR DATAFILE 'E:\ORACLE\ORADATA\TLGAXZ\USERS.DB' TO 'E:\ORACLE\ORADATA\TLGAXZ_RECOVER\USERS.DB'; SET NEWNAME FOR DATAFILE 'E:\ORACLE\ORADATA\TLGAXZ\TLGAXZUSR.DB' TO 'E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZUSR.DB'; SET NEWNAME FOR DATAFILE 'E:\ORACLE\ORADATA\TLGAXZ\TLGAXZADM.DB' TO 'E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZADM.DB'; SET NEWNAME FOR DATAFILE 'E:\ORACLE\ORADATA\TLGAXZ\TLGAXZDICT.DB' TO 'E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZDICT.DB'; SET NEWNAME FOR DATAFILE 'E:\ORACLE\ORADATA\TLGAXZ\TLGAXZLOB.DB' TO 'E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZLOB.DB'; SET NEWNAME FOR DATAFILE 'E:\ORACLE\ORADATA\TLGAXZ\STATSPACK.DB' TO 'E:\ORACLE\ORADATA\TLGAXZ_RECOVER\STATSPACK.DB'; SET NEWNAME FOR DATAFILE 'E:\ORACLE\ORADATA\TLGAXZ\UNDOTBS.DB' TO 'E:\ORACLE\ORADATA\TLGAXZ_RECOVER\UNDOTBS.DB'; RESTORE DATABASE; SWITCH DATAFILE ALL; RECOVER DATABASE NOREDO; ALTER DATABASE OPEN RESETLOGS; } 8.在 ARCHIVELOG 模式中恢复数据库 由于各种需求,产品数据库通常会在 ARCHIVELOG 模式中运行,这些需求包括: 时间点恢复 为用户提供最小恢复时间服务等级协议(server-level agreement,简称 SLA) 13 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 执行联机数据库备份操作的能力 在数据库有效时恢复指定数据文件的能力 9.故障点数据恢复 场景:归档模式,丢失了所有的数据文件,联机日志和控制文件完好。 模拟: 1.备份数据库 RMAN> BACKUP DATABASE INCLUDE CURRENT CONTROLFILE PLUS ARCHIVELOG DELETE INPUT; 2.关掉数据库,删除数据文件 恢复的方法(输出略去): RMAN>STARTUP MOUNT; RMAN>RESTORE DATABASE; RMAN>RECOVER DATABASE; RMAN>ALTER DATABASE OPEN; 10. 表空间恢复 如果我们只丢失了特定的表空间的数据文件,那么我们可以选择只恢复这个表空间,而不 是恢复整个数据库。表空间恢复可以在不关闭数据库的情况下进行。例如 USERS 表空间 丢失了,我们可以采用下面的方法来恢复: RMAN>SQL "ALTER TABLESPACE USERS OFFLINE"; RMAN>RESTORE TABLESPACE USERS; RMAN>RECOVER TABLESPACE USERS; RMAN>SQL "ALTER TABLESPACE USERS ONLINE"; 11. 数据文件的恢复 数据文件恢复与表空间恢复类似。假设数据文件号为 5 的文件丢失,文件名是: 'E:\ORACLE\ORADATA\TLGAXZ_RECOVER\USERS.DB',那么我们恢复的时候可以指定 文件号,也可以指定文件名。 方法 1: RMAN>SQL "ALTER DATABASE DATAFILE 5 OFFLINE"; RMAN>RESTORE DATAFILE 5; RMAN>RECOVER DATAFILE 5; RMAN> SQL "ALTER DATABASE DATAFILE 5 ONLINE"; 方法 2:将上面的文件号替换为数据文件名即可。数据文件两边加单引号 ' 14 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 第 12 章 RMAN 的高级恢复 1.不完全恢复基本知识 不完全恢复就意味着有数据的丢失。引起不完全恢复的原因有很多,如丢失了联机日 志或某个归档日志。另外如果出现了严重损害数据库的用户错误,比如某用户错误的删除 了某个重要的数据,那么数据库也要恢复到这个错误操作之前。不完全恢复会影响整个数 据库。在不完全恢复完成之后,通常需要使用 resetlogs 选项来打开数据库。 resetlogs 表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始。数据 库的逻辑生存期也被称为一个对应物(incarnation)。每次使用 resetlogs 选项来打开数据库 后都会创建一个新的数据库对应物,这对于恢复操作来说非常重要。 每次使用 resetlogs 后,SCN 计数器不会被重置,但是 Oracle 会重置联机日志序列号, 同时还会重置联机重做日志内容。因此执行了 resetlogs 之后,应该立即重新备份整个数据 库,否则恢复起来相当麻烦。(注:Oracle 10g 中已经可以在 resetlogs 之后不备份数据库, 恢复的时候能够穿越 resetlogs) 2.基于时间的恢复 使用 RMAN 执行不完全恢复操作时需要完成的一个工作是建立恢复目标。恢复目标是要 终止恢复进程的点,可以是时间点、指定的 SCN 或者一个日志序列号。我们可以在 run 代码中使用 set 命令和 until time、until scn、until sequence 参数。下面使用 set until time 命 令为 2005 年 8 月 1 日下午 1 点的恢复目标: run { set until time "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')"; restore database; recover database; alter database open resetlogs; } 执行上面的命令时,RMAN 会查找与恢复目标时间最近、但是不包含恢复目标时间及以 后时间的备份集,并且从这个备份中还原数据库。如果数据库非归档模式,那么恢复操作 会在备份集的时间点停止;否则 RECOVER 命令会应用恢复目标之前的归档重做日志或 需要的增量备份。 也可以选择在 RESTORE 和 RECOVER 命令中直接使用 UNTIL TIME、UNTIL SCN、或 者 UNTIL SEQUENCE 参数,这样就可以避免使用 run 代码。例如; startup mount; restore database "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')"; recover database "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')"; alter database open resetlogs; 3.基于 SCN 的恢复举例 startup mount; restore database until scn 10000; recover database until scn 10000; alter database open resetlogs; 上面的例子中,数据库还原到 SCN 10000 之前。 15 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 4.基于日志序列的恢复 RMAN 允许用户将数据库恢复到指定的归档重做日志序列号。如果归档的重做日志中有 间隙(某个归档日志文件或备份损坏或丢失),使用这种方法就很方便。间隙通常意味着 我们只能将数据库还原到间隙开始的地方。 startup mount; restore database until sequence 100 thread 1; recover database until sequence 100 thread 1; alter database open resetlogs; 5.只读表空间的恢复 默认情况下,即使丢失了只读的数据文件,RMAN 也不会在执行完全数据库还原操作的 时候还原只读的数据文件。要在完全恢复期间还原只读的数据文件,就必须在 RESTORE 命令中使用 CHECK READONLY 参数: RESTORE DATABASE CHECK READONLY; 6.归档重做日志的还原 一般情况下,在 RMAN 的普通恢复过程中,不必恢复归档的重做日志。不过偶尔也需要 恢复重做日志,例如我们用 Log Miner 来从归档中查找一些东西。RMAN 命令举例: RESTORE ARCHIVELOG ALL; RESTORE ARCHIVELOG FROM LOGSEQ=1 UNTIL LOGSEQ=20; RESTORE ARCHIVELOG FROM LOGSEQ=1; 也可以用 SET 命令来指定归档日志的还原位置,例如: run { set archivelog destination to "d:\temp"; restore archivelog all; } 需要注意的是,即使新的归档日志目录不同于默认的归档日志目录,如果 Oracle 判定日 志已存在,也不会恢复该归档日志文件。 7.数据文件副本还原 我们可以用 restore (datafile num)from datafilecopy 命令来从数据文件副本中还原数据文件, 然后再用 recover 命令来恢复。例如: sql "alter datafile 5 offline"; restore (datafile 5) from datafilecopy; recover datafile 5; sql "alter datafile 5 online"; 请注意,上面的圆括号很重要,如果没有,restore 命令就会执行失败。 8.恢复讹误的数据块 在 Oracle9i 中可以用 RMAN 来执行块级的恢复,而且恢复期间数据文件可以是联机状态。 RMAN 通过 block media recovery(简称 BMR)来执行块级恢复操作。假设我们在查询一 个 Oracle 表的时候接收到下面的错误: SQL> SELECT PERSONID,NAME FROM PSN_M_CRIMINAL_TEST WHERE PERSONID='R8001016002005080014'; SELECT PERSONID,NAME FROM PSN_M_CRIMINAL_TEST WHERE PERSONID='R8001016002005080014' ERROR 位于第 1 行: 16 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner ORA-01578: ORACLE 数据块损坏(文件号 5,块号 97) ORA-01110: 数据文件 5: 'E:\ORACLE\ORADATA\TLGAXZ_RECOVER\USERS.DB' 那么我们就可以在 RMAN 中用 BLOCKRECOVER 命令来修复: RMAN> BLOCKRECOVER DATAFILE 5 BLOCK 97; 启动 blockrecover 于 03-9 月 -06 正在启动全部恢复目录的 resync 完成全部 resync 使用通道 ORA_DISK_1 通道 ORA_DISK_1: 正在从数据文件副本 E:\ORACLE\BACKUP\RMAN\USERS.BCK 恢复块 正在开始介质的恢复 完成介质的恢复 完成 blockrecover 于 03-9 月 –06 然后再来查就可以了。那么我们除了遇到块讹误,怎样来预先检查呢?我们可以使用 BACKUP VALIDATE DATABASE 命令来检查整个数据库讹误,这条命令会在 V$BACKUP_CORRUPTION 和 V$DATABASE_BLOCK_CORRUPTION 试图中填充检测 到的所有讹误数据块。如果讹误发生在复制操作期间,那么 V$COPY_CORRUPTION 视 图会指明含有讹误的备份集。需要注意的是,V$BACKUP_CORRUPTION 是一个显示历 史讹误的视图,而 V$DATABASE_BLOCK_CORRUPTION 则是显示当前数据块讹误的视 图。一旦修正了数据库的块讹误,就需要重新运行 BACKUP VALIDATE DATABASE 命令, 然后确认 V$DATABASE_BLOCK_CORRUPTION 中没有其他讹误。补充:我们也可以用 BACKUP VALIDATE DATAFILE file#来只检查某个数据文件的块讹误,从而加快速度。 进行块恢复的时候,我们也可以用 blockrecover 的 corruption list restore 选项来方便的执行 恢复。例如: BLOCKRECOVER CORRUPTION LIST RESTORE UNTIL TIME 'SYSDATE-3'; 这个例子中,我们还原讹误块列表中最近 3 天的所有的讹误的数据块。 注:如果想练习 BMR,那么很简单,将某部太重要的表空间 OFFLINE 之后,用 ultraedit 之类的工具打开,然后随便找点内容编辑编辑就可以了。 9.恢复前一个对应物(incarnation) 在前面讨论 resetlogs 命令时,我们介绍过一个数据库的对应物(incarnation)表示这个数据 库的特定的逻辑生存周期。每当使用 resetlogs 之后,都意味着一个生存周期的结束,一个 新的周期的开始。但是,有的时候,你可能需要从执行 resetlogs 命令打开数据库前生成的 备份中来还原数据库。例如,你可能需要将数据库恢复到两天之前,但是在这期间,曾经 用 resetlogs 方式打开过数据库。这里介绍使用恢复目录的情况下恢复前一个对应物(非常 简单)和不使用恢复目录来恢复前一个对应物(相对困难)。 10. 使用恢复目录恢复前一个对应物 使用恢复目录的情况下,恢复前一个对应物是非常简单的。首先,用 list incarnation;来显 示有哪些对应物: RMAN> list incarnation; 数据库 Incarnations 列表 DB 关键字 Inc 关键字 DB 名 DB ID CUR 重置 SCN 重置时间 ------- ------- -------- ---------------- --- ---------- ---------- 1 2 TLGAXZ 2600315304 NO 1 20-4 月 -06 1 854 TLGAXZ 2600315304 NO 3407561 19-8 月 -06 17 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 1 4368 TLGAXZ 2600315304 NO 3794049 29-8 月 -06 1 4437 TLGAXZ 2600315304 NO 3794728 29-8 月 -06 1 4639 TLGAXZ 2600315304 YES 3794935 29-8 月 –06 接下来,决定恢复到哪个对应物,比如,上面的 4437,就用下面的命令: reset database to incarnation 4437; 下面是具体的恢复步骤的一个演示(输出略去): RMAN>SHUTDOWN IMMEDIATE; RMAN>STARTUP NOMOUNT; RMAN>RESET DATABASE TO INCARNATION 4437; RMAN>RESTORE CONTROLFILE; RMAN>ALTER DATABASE MOUNT; RMAN>RESTORE DATABASE UNTIL SCN 3794934; RMAN>RECOVER DATABASE UNTIL SCN 3794934; RMAN>ALTER DATABASE OPEN RESETLOGS; 上面的例子中,我们最大可恢复到的 SCN 就是 3794934,因为 4437 的下一个对应物的重 置 SCN 是 3794935。 11. 不使用恢复目录恢复前一个对应物 这种情况下恢复以前的对应物实际上是恢复控制文件的过程。不使用恢复目录,我们就无 法使用 RESET DATABASE TO incarnation_num 命令。首先看看有哪些对应物: RMAN> list incarnation; 数据库 Incarnations 列表 DB 关键字 Inc 关键字 DB 名 DB ID CUR 重置 SCN 重置时间 ------- ------- -------- ---------------- --- ---------- ---------- 1 1 TLGAXZ 2600315304 NO 3501920 20-8 月 -06 2 2 TLGAXZ 2600315304 NO 3785052 29-8 月 -06 3 3 TLGAXZ 2600315304 NO 3794049 29-8 月 -06 4 4 TLGAXZ 2600315304 NO 3794728 29-8 月 -06 5 5 TLGAXZ 2600315304 NO 3794935 29-8 月 -06 6 6 TLGAXZ 2600315304 YES 3976301 03-9 月 –06 假设我们要恢复到 5,那么就要看看有没有控制文件的备份的 SCN 在 3794935 到 3976301 之间。我们使用下面的命令: RMAN> LIST BACKUP OF CONTROLFILE BY FILE; 控制文件备份列表 =========================== CF Ckp SCN Ckp 时间 BS Key S 段数 副本数 标记 ---------- ---------- ------- - ------- ------- --- 3976493 03-9 月 -06 36 A 1 1 3976095 03-9 月 -06 34 A 2 1 TAG20060903T170136 3959239 03-9 月 -06 30 A 1 1 3959170 03-9 月 -06 29 A 1 1 3958983 03-9 月 -06 28 A 1 1 3958937 03-9 月 -06 27 A 1 1 3816575 30-8 月 -06 11 A 2 1 TAG20060830T064447 18 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 可以看出,上面的列表中,黑体的部分的控制文件都是可以用的。接下来找到一个具体的 含有控制文件的备份: RMAN> LIST BACKUP OF CONTROLFILE; 备份集列表 =================== BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间 ------- ---- -- ---------- ----------- ------------ ---------- 14 Full 2M DISK 00:00:01 30-8月 -06 BP 关键字: 18 状态: AVAILABLE 标记: 段名:E:\ORACLE\DATABASE\C-2600315304-20060830-02 控制文件包括: Ckp SCN: 3817206 Ckp 时间:30-8 月 -06 BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间 ------- ---- -- ---------- ----------- ------------ ---------- 15 Full 2M DISK 00:00:01 30-8月 -06 BP 关键字: 19 状态: AVAILABLE 标记: 段名:E:\ORACLE\DATABASE\C-2600315304-20060830-03 控制文件包括: Ckp SCN: 3817362 Ckp 时间:30-8 月 -06 BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间 ------- ---- -- ---------- ----------- ------------ ---------- 18 Full 2M DISK 00:00:01 30-8月 -06 BP 关键字: 22 状态: AVAILABLE 标记: 段名:E:\ORACLE\DATABASE\C-2600315304-20060830-06 控制文件包括: Ckp SCN: 3817898 Ckp 时间:30-8 月 -06 BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间 ------- ---- -- ---------- ----------- ------------ ---------- 19 Full 2M DISK 00:00:01 30-8月 -06 BP 关键字: 23 状态: AVAILABLE 标记: 段名:E:\ORACLE\DATABASE\C-2600315304-20060830-07 控制文件包括: Ckp SCN: 3818213 Ckp 时间:30-8 月 –06 …… 假设我们使用 E:\ORACLE\DATABASE\C-2600315304-20060830-07,那么接下来我们需要 用 DBMS_BACKUP_RESTORE 包来从这个文件中恢复控制文件。(在 SQLPLUS 中运行) SQL>SHUTDOWN IMMEDIATE; SQL>STARTUP NOMOUNT; SQL>DECLARE DEVTYPE VARCHAR2(256); DONE BOOLEAN; BEGIN DEVTYPE:=DBMS_BACKUP_RESTORE.DEVICEALLOCATE(NULL); DBMS_BACKUP_RESTORE.RESTORESETDATAFILE; 19 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner DBMS_BACKUP_RESTORE.RESTORECONTROLFILETO(' E:\oracle\oradata\TLGAXZ\CONTROL01.CTL'); DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE(' E:\ORACLE\DATABASE\C-2600315304-20060830-07',DONE=>done); DBMS_BACKUP_RESTORE.RESTORESETDATAFILE; DBMS_BACKUP_RESTORE.RESTORECONTROLFILETO(' E:\oracle\oradata\TLGAXZ\CONTROL02.CTL'); DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE(' E:\ORACLE\DATABASE\C-2600315304-20060830-07',DONE=>done); DBMS_BACKUP_RESTORE.RESTORESETDATAFILE; DBMS_BACKUP_RESTORE.RESTORECONTROLFILETO(' E:\oracle\oradata\TLGAXZ\CONTROL03.CTL'); DBMS_BACKUP_RESTORE.RESTOREBACKUPPIECE(' E:\ORACLE\DATABASE\C-2600315304-20060830-07',DONE=>done); DBMS_BACKUP_RESTORE.DEVICEDEALLOCATE(NULL); END; / SQL>ALTER DATABASE MOUNT; 重新联到 RMAN 后 再来运行一下 LIST INCARNATION; C:\>RMAN TARGET /@TLGAXZ NOCATALOG; RMAN>LIST INCARNATION; 数据库 Incarnations 列表 DB 关键字 Inc 关键字 DB 名 DB ID CUR 重置 SCN 重置时间 ------- ------- -------- ---------------- --- ---------- ---------- 1 1 TLGAXZ 2600315304 NO 3501920 20-8 月 -06 2 2 TLGAXZ 2600315304 NO 3785052 29-8 月 -06 3 3 TLGAXZ 2600315304 NO 3794049 29-8 月 -06 4 4 TLGAXZ 2600315304 NO 3794728 29-8 月 -06 5 5 TLGAXZ 2600315304 YES 3794935 29-8 月 –06 可以看出来,我们已经恢复到想要的对应物上了。接下来: RMAN>RESTORE DATABASE; RMAN>RECOVER DATABASE; RMAN>ALTER DATABASE OPEN RESETLOGS; 12. 表空间时间点恢复(TSPITR) 用户可能错误的删除了几个表,而且还截断了几个表,如果进行整库恢复可能代价比较高。 幸运的是,RMAN 允许我们执行表空间时间点恢复(tablespace point-in-time recovery, TSPITR)。为了掌握如何执行 TSPITR,应该理解下面这些术语: 辅助实例(auxiliary instance):这是我们创建的临时实例,RMAN 使用这个实例执行 TSPITR。完成 TSPITR 后,这个实例可以删除。 辅助集(auxiliary set):辅助实例上的文件集。包括控制文件、回滚段或者重做段的表 空间、系统表空间、联机日志文件等,还可以选择辅助实例的临时表空间。 恢复集(recovery set):要执行 TSPITR 的表空间/数据文件集 目标数据库:实际执行 TSPITR 的数据库 20 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner TSPITR 的本质是,RMAN 将要进行时间点恢复的表空间按照设定的条件复制到辅助实例 上,然后再从辅助实例将表空间传到目标数据库,从而避免整个数据库的恢复,减少恢 复时间,而且这期间其他表空间仍然可用。 成功进行 TSPITR 的基本步骤是(与书上的步骤略有不同): (1) 验证表空间的可传输性 (2) 准备辅助实例 (3) 执行实际的 TSPITR (4) 在目标数据库上执行 TSPITR 后的操作。 13. 验证表空间的可传输性 RMAN 使用 Oracle 可传送的表空间特性来执行 TSPITR,因此表空间本身必须是可传送的。 许多因素都导致表空间不可传送。可以通过 TS_PITR_CHECK 视图来判断表空间是否可 传送。如果表空间不可传送,那么执行 TSPITR 时就会失败。下面是查询 USERS 表空间 是否可传送的语句: SQL> SELECT OBJ1_NAME "Object Owner",obj1_name "Object Name", obj1_type "Object Type",ts1_name "Tablespace Name",reason FROM TS_PITR_CHECK WHERE ts1_name='USERS'; Object Owner Object Name Object Type ------------------------------ ------------------------------ ---------------- Tablespace Name ------------------------------ REASON -------------------------------------------------------------------------------- TEST_PITR_TRANSPORTABLE TEST_PITR_TRANSPORTABLE TABLE USERS Sys owned tables not allowed in Recovery Set 在这个例子中,因为 USERS 表空间中有 SYS 用户的对象,所以不可传输。 14. 准备 TSPITR 的辅助实例 启动 TSPITR 之前,需要准备辅助实例。这是一个不需要 RMAN 参与的手工过程。执行 下面的步骤来创建辅助实例: 创建口令文件 创建数据库参数文件 如果在 Windows NT 上运行 Oracle,需要使用 oradim 来添加数据库服务 启动辅助实例,如有必要,配置 tnsnames.ora,测试是否连通。 辅助实例的参数文件: 辅助实例的参数文件与目标数据库所使用的参数文件有些区别。下表中是一些附加的和额 外需要注意的参数: 21 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 参数名 可选/必要 说明 db_name 可选 与目标数据库相同的名称 lock_name_space 必要 不同于创建辅助数据库所在系统上其他数据库的 唯一名称。 db_file_name_convert 可选 使用 RMAN 还原辅助数据库中的文件时,该参数 用于为这些数据文件定义一组文件命名转换模 式。 log_file_name_convert 可选 使用 RMAN 还原辅助数据库中的重做日志文件 时,该参数用于为这些重做日志文件定义一组文 件命名转换模式。 control_files 必要 定义了辅助实例控制文件的位置和名称。应该与 目标数据库不同 remote_login_passwordfile 可选/必要 用于允许 RMAN 通过 Oracle Networking 服务连接 辅助数据库。如果要本地连接辅助实例,就不需 要设置该参数。 compatible 必要 必须与目标数据库设置相同 db_block_size 可选/必要 如果目标数据库设置了该参数,则辅助数据库中 也要设置相同的值 编辑辅助实例的一个简单方法是把目标数据库的参数文件改一下即可。如果目标数据库用 的是 SPFILE,那么在 SQLPLUS 中执行 CREATE PFILE FROM SPFILE 就可以生成参数文 件。下面是一个辅助实例的参数配置文件的例子。这个辅助实例的 SID 是 aux1,目标数 据库是 TLGAXZ。 db_name=TLGAXZ compatible='9.2.0.0.0' control_files='E:\oracle\oradata\AUX1\control01.ctl','E:\oracle\oradata\AUX1\control02.ctl','E:\ oracle\oradata\AUX1\control03.ctl' db_block_size=8192 db_cache_size=102476800 remote_login_passwordfile='EXCLUSIVE' shared_pool_size=33554432 LOCK_NAME_SPACE=AUX1 instance_name=AUX1 DB_FILE_NAME_CONVERT=('E:\oracle\oradata\TLGAXZ','E:\oracle\oradata\AUX1') LOG_FILE_NAME_CONVERT=('E:\oracle\oradata\TLGAXZ','E:\oracle\oradata\AUX1') 15. 在 WINDOWS 平台下进行 TSPITR 的一个例子: (1) 目标:恢复用户误删除的某个重要的表。将实例 TLGAXZ 的 USERS 表空间恢复到 SCN 是 3888161 的时候。模拟环境:创建一个表,然后插入些数据,然后选择出当前的 scn, 然后删除这个表。这里的环境是要恢复 test_tspitr 表,SCN 是 3888161。注:9i 中当前 scn 可以这样来获取:select dbms_flashback.get_system_change_number from dual; 9i 之前的版本可以通过 select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe; 来获取,不过要求是以 sysdba 身份登录。 22 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner (2) 检查 USERS 表空间的可传输性: SQL> SELECT OBJ1_NAME "Object Owner",obj1_name "Object Name",obj1_type "Object Type",ts1_name "Tablespace Name",reason FROM TS_PITR_CHECK WHERE ts1_name='USERS'; 未选定行 说明 USERS 表空间可传输。 (3) 准备参数文件: 按照上面的内容编辑好参数文件,根据实际情况做适当修改。这个例子把此文件保 存为:E:\ORACLE\database\INITAUX1.ORA。另外,参数文件中涉及到的目录都要 建好。 (4) 创建辅助实例: 创建服务: C:\>oradim -NEW -SID AUX1 -PFILE E:\ORACLE\database\INITAUX1.ORA 创建口令文件: C:\>ORAPWD FILE=E:\ORACLE\database\PWDAUX1.ORA PASSWORD=TEST 启动辅助实例: C:\>SET ORACLE_SID=AUX1 C:\>SQLPLUS /NOLOG SQL*Plus: Release 9.2.0.4.0 - Production on 星期二 9月 5 15:45:58 2006 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> CONNECT / AS SYSDBA 已连接到空闲例程。 SQL> STARTUP NOMOUNT; ORACLE 例程已经启动。 Total System Global Area 185671292 bytes Fixed Size 454268 bytes Variable Size 75497472 bytes Database Buffers 109051904 bytes Redo Buffers 667648 bytes SQL> 请注意,SET ORACLE_SID=AUX1 很重要,这样就可以不用配置 TNSNAMES.ORA。 (5) 执行实际的 TSPITR 首先要连到目标数据库和备用库。可以联到恢复目录,也可以不连到恢复目录: C:\>SET ORACLE_SID=AUX1 C:\>RMAN TARGET /@TLGAXZ CATALOG RMAN/RMAN@RECO AUXILIARY / 恢复管理器: 版本 9.2.0.4.0 - Production Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved. 连接到目标数据库: TLGAXZ (DBID=2600315304) 连接到恢复目录数据库 已连接到备用数据库: AUX1 (未安装) RMAN>RECOVER TABLESPACE USERS UNTIL SCN 3888161; … 等待完成表空间的恢复。当然也可以用 UNTIL TIME 或者 UNTIL SEQUENCE 子句 (6) 执行 TSPITR 后的操作。 23 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 首先应该重新连接 RMAN 与目标数据库,并且备份刚恢复的表空间。完成备份后, 需要将表空间联机(RMAN 在 TSPITR 后使表空间脱机)。最后,我们还要关闭辅助数 据库。 16. TSPITR 限制 TSPITR 具有很多限制,下面任何一种情况都不能使用 TSPITR 不能还原包含 SYS 用户对象 不能执行 TSPITR 恢复具有复制主表的表空间 不支持使用快照日志的表空间 不能还原含有回滚段的表空间 不能还原含有分区对象(该对象的分区跨越多个表空间)的表空间 表空间中不能含有 VARRAY、嵌套表、外部表对象 TSPITR 不能用于恢复删除的表空间。 17. 验证备份的可恢复性 通过使用 RESTORE DATABASE VALIDATE; 和 RESTORE DATABASE VALIDATE CHECK LOGICAL;可以检查最新的备份是否可恢复。这些命令并不真正的执行恢复,而 是检查备份中是否有讹误。如果使用 CHECK LOGICAL 选项,还将检查数据和索引段中 是否存在逻辑讹误。为了检查历史备份的可恢复性,可以用 VALIDATE BACKUPSET bs 和 VALIDATE BACKUPSET bs CHECK LOGICAL 命令 18. RMAN 内核:DBMS_BACKUP_RESTORE 包介绍 这个包是 RMAN 备份与恢复的核心,在前面我们已经多次介绍过。这里介绍几个常用的 函数和含义。 restoreSetDataFile 指示还原操作的开始(但是不会执行实际的还原操作) restoreSetDataFileTo 定义要还原的数据文件和该文件的还原位置 restoreControlFileTo 定义控制文件的还原位置 restoreSpfileTo 定义要还原的 spfile 的位置 restorebackuppiece 执行实际的还原操作,这个函数的一个参数是备份文件名 devicedeallocate 释放 deviceallocate 函数所分配的设备 deviceallocate 分配用于连续 I/O 的设备 applySetDataFile 指示增量还原操作的开始 applyDataFileTo 定义数据文件的增量还原位置 applybackuppiece 执行实际的还原操作 resetoreSetArchivelog 指示归档日志还原操作的开始 restoreArchivelog 定义要还原的归档的重做日志序列和线程 如果我们对 RMAN 内部工作情况感兴趣,那么可以在命令行中启用 debug 开关。在调试 模式下,RMAN 会输出它调用的每一条命令(包括对 dbms_backup_restore 包的调用)。例 如: C:\> rman debug target /@tlgaxz catalog rman/rman@reco trace=debug.txt 24 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 第 13 章 RMAN 维护 1.交叉校验 RMAN 备份 CROSSCHECK 命令用于检查恢复目录或者控制文件中的备份集片或副本与实际的备份 介质上的物理文件是否对应。CROSSCHECK 将备份的状态置为 A(Available)或者 X(Expired)。A 代表备份位于存储介质上,X 代表备份并没有在存储介质上。下面是 CROSSCHECK 校验备份的一些例子: crosscheck backup of datafile 1; crosscheck backup of tablespace users; crosscheck backup of controlfile; crosscheck backup of spfile; crosscheck backup completed between 'sysdate-10' and 'sysdate'; crosscheck backup device type sbt; crosscheck archivelog all; crosscheck archivelog from sequence 12; crosscheck archivelog from time "to_date('20050101','yyyymmdd')"; 也可以用 CROSSCHECK 命令来检查副本。例如: crosscheck copy of datafile 5; crosscheck datafilecopy 'd:\oracle\oradata\rman\users.dbf'; 2.验证 RMAN 备份 在本笔记的 12 章的第 17 个上面说明了 VALIDATE 的用法 3.备份保存策略 保存策略(retention policy)是管理备份与副本有效期或者是否有效的一种方法。恢复数 据库的时候 Oracle 不考虑失效的备份。我们可以定义两种保存策略:恢复窗口备份保存 策略(recovery window backup retention policy)和冗余备份保存策略(redundancy backup retention policy) 4.恢复窗口备份保存策略 这种保存策略类型的使用基于数据库可能恢复到的最早的日期。 例如,假设今天是星期一,此前存在 3 个备份。第一个备份在昨天生成的,第二个备份是 上星期四生成的,而最后一个备份是 10 天前备份的。假如恢复窗口是 7 天,那么昨天和 上星期四的备份是有效备份,而 10 天前的备份会成为废弃备份。下面的命令将恢复窗口 配置为 7 天: configure retention policy to recovery window of 7 days; 5.冗余备份保存策略 使用这种保存策略,RMAN 会从最新备份开是保留 x 各数据备份,其余的废弃。例如, 如果有四个备份,而冗余数是 3,那么最早的那个备份将被废弃。下面的命令将备份策略 设置为 3: configure retention policy to redundancy 3; 6.保存策略的维护: 当一个给定的备份或者副本根据备份的保存策略的标准而被废弃的时候,RMAN 并不会 自动删除这个备份或者副本,而只是标记这个备份为废弃。我们可以用 report obsolete 命 令来查看标记为废弃的备份。可以使用 change 命令来将一个备份修改为永久保留的备份, 25 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 也可以修改为要保存多少天的备份。还可以使用 change…nokeep 来手工丢弃一个备份。 change 命令使用举例: 将 4981 备份集标记为废弃 change backupset 4981 nokeep; 将 4981 备份集标记为 7 天内有效 change backupset 4981 keep until time 'sysdate+7' logs; 将 5422 备份集标记为永久有效 change backupset 5422 keep forever logs; 废弃的备份集并不真正的删除,如果需要物理删除,则可以用下面的命令: delete obsolete; 7.change 命令 change 命令除了上面介绍到的功能之外,还有一些其它的作用。例如,可以修改备份的状 态是可用(available)还是不可用(unavailable)。对于不可用的备份,还原与恢复期间不 会被考虑到,不过执行 delete expired 命令期间也不会删除这些记录。 例如: change backup of database tag='GOLD' unavailable; change copy of database like '%GOLD%' available; change archivelog 'd:\arc\arch_001.arc' unavailable; change backupset 4981 available; change backup of database available; change archivelog all available; change archivelog all backed up 5 times unavailable; 我们还可以用 change…delete 选项来物理删除备份,和 delete 命令类似。在 8i 和 8i 之前 的版本只能用 change…delete 命令来删除物理备份。 change backupset 4981,4988 delete; change archivelog until logseq=500 delete; 8.delete 命令 9i 中可以用 delete 来删除备份,并且比 change…delete 更灵活。例如如果要删除废弃的备 份,那么用 delete obsolete;即可。如果要删除过期的(expired)备份,那么用 delete expired backup;即可。 9.在 RMAN 中为其它备份编写目录 使用 rman 之前,我们可能手工备份数据库的数据文件。要想在 rman 中记录这些备份,可 以用 catalog 命令来记录这些手工的数据库文件备份、控制文件备份和归档日志备份。例 如: CATALOG DATAFILECOPY 'E:\ORACLE\BACKUP\USERS.DB.BCK'; CATALOG CONTROLFILECOPY 'E:\ORACLE\BACKUP\CONTROL01.CTL.BCK'; CATALOG ARCHIVELOG 'E:\ORACLE\BACKUP\arc001.log'; 10. 恢复目录的维护 作为一个完善的备份策略,恢复目录也许要备份。我们可以用 exp 来备份,也可以用 rman 来备份恢复目录的用户的所有数据。当恢复目录管理的某个数据库进行了升级,只要版本 不高于恢复目录就没有问题,下面的命令查询恢复目录的版本: sql>select version from rcver; 如果要高于恢复目录,那么恢复目录就必须进行升级。用下面的命令即可: RMAN>upgrade catalog; 26 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 11. 手工重置数据库对应物 打开数据库的时候,每次使用 resetlogs 参数都会创建数据库的一个新对应物。如果这个操 作是在 rman 中完成的,rman 会自动更新恢复目录。如果是在 rman 之外完成,如 sql*plus, 那么就必须手工重置对应物。如: RMAN>reset database; 另外有的时候,我们需要改成之前的某个对应物,可以用 list incarnation 来显示出对应物 列表之后用下面的命令: RMAN>reset database to incarnation incarnation_num; 12. 手工同步恢复目录 如果我们有的时候用恢复目录,有的时候又不用恢复目录,那么可能导致控制文件中的信 息与恢复目录中的信息不一致。可以用下面的命令来手工同步: RMAN>resync catalog; 13. 恢复目录记录的删除 如果不加以维护,具有 DELETE 状态的旧备份会一直驻留在恢复目录中。为了解决这个 问题,Oracle 提供了?/rdbms/admin/prgrmanc.sql,这个脚本可以删除恢复目录中具有 DELETE 状态的记录。如果项删除旧的对应物,那么我们可以在删除 dbinc 表的记录。例 如如果要删除对应物是 2 的记录,则可以执行下面的语句: SQL>delete from dbinc where dbinc_key=2; 14. 在恢复目录中撤销数据库的注册 我们可以通过 SQL*Plus 来从恢复目录中撤销数据库的注册。首先确定要从恢复目录中删 除的数据库的 DBID,随后需要登陆恢复目录模式并查询 DB 表,已确定要撤销注册的数 据库所使用的数据库键。下面是具体的步骤: 进入要撤销的数据库,获取这个数据库的 DBID: SQL> connect /@tlgaxz as sysdba 已连接。 SQL> select dbid from v$database; DBID ---------- 2600315304 连接到拥有恢复目录的模式,确定恢复目录中盖数据库的 DB_KEY: SQL> connect rman/rman@reco 已连接。 SQL> select db_key from db where db_id='2600315304'; DB_KEY ---------- 1 使用 dbms_rcvcat.unregisterdatabase 来注销数据库 SQL> exec dbms_rcvcat.unregisterdatabase(1,2600315304); 15. RMAN 存储的脚本 如果经常要执行相同的 RMAN 操作,您可能希望存储这些操作,并且在需要的时候执行 这些操作。当然,我们可以创建一个命令文件,这是一个在磁盘上物理存在的文本文件, 包含 RMAN 命令。然后可以用 cmdfile 参数来让 RMAN 执行该命令文件: rman target /@tlgaxz cmdfile=run_backup.cmd; 我们也可以在 RMAN 的提示符下用@来运行某命令文件: 27 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 如: RMAN>@run_backup.cmd RMAN 还提供另外一个选项,就是在恢复目录中存储脚本,这个操作要求使用恢复目录。 16. 创建存储的脚本: RMAN> create script my_backup_script { backup database plus archivelog; } 17. 删除存储的脚本 delete script my_backup_script; 18. 修改存储的脚本 首先删除某脚本,然后再创建 19. 运行存储的脚本 run {execute script my_backup_script;} 20. 打印存储的脚本: print script my_backup_script; 21. 查看有哪些存储的脚本。 可以查询 rc_stored_script 视图。如果要查询脚本的内容可查看 rc_stored_script_line 视图 SQL> select script_name from rc_stored_script; SCRIPT_NAME ----------------------------------------------- my_backup_script 28 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 第 14 章 RMAN 报告 1.list 命令介绍 RMAN 的 list 命令是一种在数据库控制文件或者恢复目录中查询备份的历史信息的方法。 列表提供了一组信息,可以提供各种备份的信息,如对应物、备份集、归档日志备份、控 制文件备份等等。 2.列出对应物: RMAN> list incarnation; 数据库 Incarnations 列表 DB 关键字 Inc 关键字 DB 名 DB ID CUR 重置 SCN 重置时间 ------- ------- -------- ---------------- --- ---------- ---------- 5456 5470 TLGAXZ 2600315304 NO 3501920 20-8 月 -06 5456 5471 TLGAXZ 2600315304 NO 3785052 29-8 月 -06 5456 5472 TLGAXZ 2600315304 NO 3794049 29-8 月 -06 5456 5473 TLGAXZ 2600315304 NO 3794728 29-8 月 -06 5456 5474 TLGAXZ 2600315304 NO 3794935 29-8 月 -06 5456 5457 TLGAXZ 2600315304 YES 3816761 04-9 月 –06 YES 表明这一行是当前的对应物信息。注意,是用恢复目录和不使用恢复目录列出对应物 的输出通常有差异。下面是没有使用恢复目录的输出: RMAN> list incarnation; 数据库 Incarnations 列表 DB 关键字 Inc 关键字 DB 名 DB ID CUR 重置 SCN 重置时间 ------- ------- -------- ---------------- --- ---------- ---------- 1 1 TLGAXZ 2600315304 NO 3501920 20-8 月 -06 2 2 TLGAXZ 2600315304 NO 3785052 29-8 月 -06 3 3 TLGAXZ 2600315304 NO 3794049 29-8 月 -06 4 4 TLGAXZ 2600315304 NO 3794728 29-8 月 -06 5 5 TLGAXZ 2600315304 NO 3794935 29-8 月 -06 6 6 TLGAXZ 2600315304 YES 3816761 04-9 月 –06 3.列出备份概要信息 RMAN> list backup summary; 备份列表 =============== 关键字 TY LV S 设备类型 完成时间 段数 副本数 标记 ------- -- -- - ----------- ---------- ------- ------- --- 21 B F A DISK 05-9月 -06 2 1 TAG20060905T153531 22 B A A DISK 05-9月 -06 1 1 TAG20060905T153933 37 B F A DISK 17-9月 -06 1 1 38 B 0 A DISK 17-9月 -06 1 1 TAG20060917T111721 39 B F A DISK 17-9月 -06 1 1 上面列出了一些有用的概述信息。关键字(key)列出了备份集键;TY(类型)和 LV 代表 备份类型。TY 的 B 代表是备份,LV 的 F 代表全备份,A 表示归档日志备份,0 表示增量 29 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 备份的级别。S 列表明备份的状态,A 表示可用(available),X 表示过期(expired) 4.按备份类型列出备份: RMAN> list backup by file; 数据文件备份列表 ======================== 文件关键字 TY LV S Ckp SCN Ckp 时间 段数 副本数 标记 ---- ------- - -- - ---------- ---------- ------- ------- --- 1 5503 B F A 3887986 05-9 月 -06 2 1 TAG20060905T153531 2 5503 B F A 3887986 05-9 月 -06 2 1 TAG20060905T153531 3 5503 B F A 3887986 05-9 月 -06 2 1 TAG20060905T153531 4 5503 B F A 3887986 05-9 月 -06 2 1 TAG20060905T153531 5 5561 B F A 4040568 17-9 月 -06 1 1 TAG20060917T111721 5503 B F A 3887986 05-9 月 -06 2 1 TAG20060905T153531 6 5503 B F A 3887986 05-9 月 -06 2 1 TAG20060905T153531 7 5503 B F A 3887986 05-9 月 -06 2 1 TAG20060905T153531 8 5503 B F A 3887986 05-9 月 -06 2 1 TAG20060905T153531 9 5503 B F A 3887986 05-9 月 -06 2 1 TAG20060905T153531 11 5503 B F A 3887986 05-9 月 -06 2 1 TAG20060905T153531 12 5503 B F A 3887986 05-9 月 -06 2 1 TAG20060905T153531 已存档的日志备份列表 ============================ Thrd Seq 低 SCN 短时间 BS 关键字 S 段数 副本数 标记 ---- ------- ---------- ---------- ------- - ------- ------- --- 1 7 3889240 05-9 月 -06 5508 A 1 1 TAG20060905T171228 1 8 3889804 05-9 月 -06 5508 A 1 1 TAG20060905T171228 1 9 3890136 05-9 月 -06 5508 A 1 1 TAG20060905T171228 控制文件备份列表 =========================== CF Ckp SCN Ckp 时间 BS Key S 段数 副本数 标记 ---------- ---------- ------- - ------- ------- --- 4040569 17-9 月 -06 5565 A 1 1 4040179 17-9 月 -06 5554 A 1 1 4040176 17-9 月 -06 5549 A 1 1 TAG20060917T110940 3998515 16-9 月 -06 5517 A 1 1 3939808 05-9 月 -06 5515 A 1 1 SPFILE 备份的列表 ====================== 修改时间 BS 关键字 S #片段 #副本标记 ---------- ------- - ------- ------- --- 30-8 月 -06 5565 A 1 1 30-8 月 -06 5554 A 1 1 30-8 月 -06 5517 A 1 1 30-8 月 -06 5515 A 1 1 RMAN> 30 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 上面的报告中列出了数据文件、归档日志、控制文件、spfile 的备份的基本信息 5.获得备份的详细信息 用 list backup 可以获得各种备份的详细信息,包括备份片的物理文件名。例如: RMAN> list backup; 备份集列表 =================== BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间 ------- ---- -- ---------- ----------- ------------ ---------- 5503 Full 1G DISK 00:04:00 05-9 月 -06 保留:NOLOGS 直到: 16-10 月-06 备份集 5503 中的数据文件列表 文件 LV 类型 Ckp SCN Ckp 时间 名称 ---- -- ---- ---------- ---------- ---- 1 Full 3887986 05-9 月 -06 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\SYSTEM01.DBF 2 Full 3887986 05-9 月-06 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\OEM_REPOSITORY.DBF 3 Full 3887986 05-9 月 -06 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\INDX01.DBF 4 Full 3887986 05-9 月 -06 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TOOLS01.DBF 5 Full 3887986 05-9 月 -06 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\USERS.DB 6 Full 3887986 05-9 月 -06 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZUSR.DB 7 Full 3887986 05-9 月 -06 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZADM.DB 8 Full 3887986 05-9 月 -06 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZDICT.DB 9 Full 3887986 05-9 月 -06 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZLOB.DB 11 Full 3887986 05-9 月 -06 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\STATSPACK.DB 12 Full 3887986 05-9 月 -06 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\UNDOTBS.DB 备份集 副本号 1 属于备份集 5503 设备类型经过时间 完成时间 标记 ----------- ------------ ---------- --- DISK 00:04:00 05-9月 -06 TAG20060905T153531 备份集 5503 副本号 1的备份段列表 BP 关键字 Pc# 状态 段名称 ------- --- ----------- ---------- 5518 1 AVAILABLE E:\ORACLE\BACKUP\RMAN\BACKUP1_0QHSHKA4_1_1 5519 2 AVAILABLE E:\ORACLE\BACKUP\RMAN\BACKUP1_0QHSHKA4_2_1 … 上面略去了其它的输出。这个报告里有很多备份集的详细信息,比如段名称(piece name), 段大小,备份经历的时间。 如果只想列出某个备份集的详细信息,可以用下面的命令: list backupset bs#; 或者按照 TAG 来查: list backup tag=tab_number; 6.列出过期的备份 list expired backup; 7.按照表空间和数据文件来列出备份: 比如列出 USR 表空间的备份: 31 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner list backup of tablespace USR; 列出文件 5 的备份: list backup of datafile 5; 列出文件 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\USERS.DB 的备份: list backup of datafile 'E:\ORACLE\ORADATA\TLGAXZ_RECOVER\USERS.DB'; 8.列出控制文件和 spfile 的备份: list backup of controlfile; 9.列出归档日志的备份: RMAN> list archivelog all; 已存档的日志副本列表 关键字 Thrd Seq S 短时间 名称 ------- ---- ------- - ---------- ---- 5492 1 4 A 05-9 月 -06 E:\ORACLE\BACKUP\TLGAXZ\ARC00004.001 5490 1 5 A 05-9 月 -06 E:\ORACLE\BACKUP\TLGAXZ\ARC00005.001 5491 1 6 A 05-9 月 -06 E:\ORACLE\BACKUP\TLGAXZ\ARC00006.001 5493 1 7 A 05-9 月 -06 E:\ORACLE\BACKUP\TLGAXZ\ARC00007.001 5494 1 8 A 05-9 月 -06 E:\ORACLE\BACKUP\TLGAXZ\ARC00008.001 5495 1 9 A 05-9 月 -06 E:\ORACLE\BACKUP\TLGAXZ\ARC00009.001 5496 1 10 A 05-9 月 -06 E:\ORACLE\BACKUP\TLGAXZ\ARC00010.001 5497 1 11 A 05-9 月 -06 E:\ORACLE\BACKUP\TLGAXZ\ARC00011.001 5498 1 12 A 05-9 月 -06 E:\ORACLE\BACKUP\TLGAXZ\ARC00012.001 5499 1 13 A 16-9 月 -06 E:\ORACLE\BACKUP\TLGAXZ\ARC00013.001 5500 1 14 A 16-9 月 -06 E:\ORACLE\BACKUP\TLGAXZ\ARC00014.001 5584 1 15 A 17-9 月 -06 E:\ORACLE\BACKUP\TLGAXZ\ARC00015.001 5585 1 16 A 18-9 月 -06 E:\ORACLE\BACKUP\TLGAXZ\ARC00016.001 RMAN> list backup of archivelog all; 备份集列表 =================== BS 关键字 大小 设备类型占用时间 完成时间 ------- ---------- ----------- ------------ ---------- 5504 51K DISK 00:00:01 05-9 月 -06 BP 关键字: 5520 状态: AVAILABLE 标记:TAG20060905T153933 段名:E:\ORACLE\BACKUP\RMAN\BACKUP1_0RHSHKHL_1_1 备份集 5504 中的已存档日志列表 Thrd Seq 低 SCN 短时间 下一个 SCN 下一次 ---- ------- ---------- ---------- ---------- --------- 1 4 3887964 05-9 月 -06 3888173 05-9 月 -06 BS 关键字 大小 设备类型占用时间 完成时间 ------- ---------- ----------- ------------ ---------- 5508 1M DISK 00:00:01 05-9 月 -06 BP 关键字: 5521 状态: AVAILABLE 标记:TAG20060905T171228 段名:E:\ORACLE\BACKUP\RMAN\BACKUP1_0VHSHPVT_1_1 备份集 5508 中的已存档日志列表 32 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner Thrd Seq 低 SCN 短时间 下一个 SCN 下一次 ---- ------- ---------- ---------- ---------- --------- 1 5 3888173 05-9 月 -06 3889099 05-9 月 -06 1 6 3889099 05-9 月 -06 3889240 05-9 月 -06 1 7 3889240 05-9 月 -06 3889804 05-9 月 -06 1 8 3889804 05-9 月 -06 3890136 05-9 月 -06 1 9 3890136 05-9 月 -06 3892981 05-9 月 -06 10. 列出副本: list copy 可以列出所有的副本。 list copy of controlfile 列出控制文件副本 list copy of archivelog all 列出所有归档日志副本 list copy of database 列出数据库所有数据文件的副本 11. REPORT 命令介绍 RMAN 的 report 命令被用于判断数据库的当前可恢复状态和提供数据库备份的特定信息。 12. 报告最近没有备份的数据文件 RMAN> report need backup days=10; 文件报表的恢复需要超过 10 天的归档日志 文件天数据 名称 ---- ----- ----------------------------------------------------- 1 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\SYSTEM01.DBF 2 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\OEM_REPOSITORY.DBF 3 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\INDX01.DBF 4 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TOOLS01.DBF 6 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZUSR.DB 7 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZADM.DB 8 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZDICT.DB 9 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZLOB.DB 11 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\STATSPACK.DB 12 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\UNDOTBS.DB 这个报告列出的数据文件要求应用 10 天以上的归档重做日志,换言之,这些文件 10 天以 上没有备份了。 RMAN> report need backup incremental=3; 恢复时需要超过 3 增量的文件报表 文件增量名称 ---- ------------ ---------------------------------------------- 8 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZDICT.DB 9 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZLOB.DB 这个报告中,列出的数据文件,在进行恢复的时候,需要从 3 个以上的增量备份文件中恢 复。我们知道如果需要从很多文件中恢复,会影响恢复速度,可以根据情况来重新备份这 些文件。 13. 报告备份冗余或恢复窗口 我们可以执行 report need backup redundancy 来确定为满足冗余备份策略而需要备份的文 件。例如: RMAN> report need backup redundancy=2; 33 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 文件冗余备份少于 2 个 文件 #bkps 名称 ---- ----- ----------------------------------------------------- 1 1 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\SYSTEM01.DBF 2 1 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\OEM_REPOSITORY.DBF 3 1 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\INDX01.DBF 4 1 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TOOLS01.DBF 6 1 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZUSR.DB 7 1 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZADM.DB 8 1 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZDICT.DB 9 1 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZLOB.DB 11 1 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\STATSPACK.DB 12 1 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\UNDOTBS.DB 上面这个例子旧是查看哪些文件的备份少于 2 个。 我们也可以按照恢复窗口来查找需要备份的文件。比如我们要求恢复窗口小于 2 天,那么 用下面的命令: RMAN>report need backup recovery window of 2 days; 文件报表的恢复需要超过 2 天的归档日志 文件天数据 名称 ---- ----- ----------------------------------------------------- 1 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\SYSTEM01.DBF 2 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\OEM_REPOSITORY.DBF 3 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\INDX01.DBF 4 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TOOLS01.DBF 5 3 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\USERS.DB 6 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZUSR.DB 7 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZADM.DB 8 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZDICT.DB 9 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\TLGAXZLOB.DB 11 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\STATSPACK.DB 12 15 E:\ORACLE\ORADATA\TLGAXZ_RECOVER\UNDOTBS.DB 这个命令等同于:report need backup days=2; 14. 报告不可恢复操作 对表空间中的对象与组成这些表空间的数据文件进行的不可恢复操作会导致某些可恢复 性问题。比如,如果用 unrecoverable 选项创建了一个表,随后用直接加在路径加载这个 表,那么就需要备份这个表空间,否则加载的数据不可恢复。我们可以用 report unrecoverable 来查看。 15. 报告数据库模式(schema) 这里的模式指的是目标数据库的物理结构。包括数据文件名、文件号、表空间、文件大小、 是否含有回滚段等 RMAN> report schema; 数据库方案报表 文件 KB 表空间 RB segs 数据文件名称 34 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner ---- ---------- -------------------- ------- ------------------- 1 440320 SYSTEM YES E:\ORACLE\ORADATA\TLGAXZ\SYSTEM01.DBF 2 35848 OEM_REPOSITORY NO E:\ORACLE\ORADATA\TLGAXZ\OEM_REPOSITORY.DBF …… 12 343040 UNDOTBS YES E:\ORACLE\ORADATA\TLGAXZ\UNDOTBS.DB 16. 报告废弃的备份 如果使用了保存策略,备份可能标记为废弃(obsolete)。可以用 report obsolete 来查看废弃 的备份: RMAN> report obsolete; RMAN 保留策略将应用于该命令 将 RMAN 保留策略设置为 1 天的恢复窗口 已废弃的备份和副本报表 类型 关键字 完成时间 文件名/句柄 -------------------- ------ ------------------ -------------------- 备份集 5515 05-9 月 -06 备份段 5522 05-9 月 -06 E:\ORACLE\DATABASE\C-2600315304-20060905-09 备份集 5554 17-9 月 -06 备份段 5555 17-9 月 -06 E:\ORACLE\DATABASE\C-2600315304-20060917-00 数据文件副本 5547 17-9 月 -06 E:\ORACLE\BACKUP\USERS.DB.BCK 35 Oracle 9i RMAN 备份与恢复技术学习笔记——by turner 作者简介: 王忠海,网名:turner Email:turner@itpub.net 现任 itpub 的《Oracle 入门与认证》版主,喜欢 Oracle 技术及 unix 技术。 我爱好广泛:读书、音乐、跑步;喜欢Oracle和unix技术,在www.itpub.net上 比较活跃。 36
还剩35页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

zcfl613

贡献于2013-05-22

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf