ORACLE 备份与恢复
目录
8.4.1 建立Recovery Catalog恢复目录 13
8.6.2 RESTORE/RECOVER恢复命令选项 23
DBA的主要职责之一是备份数据库和在数据库发生故障时高效、安全地恢复数据库。
1 数据库常见故障类型:
– 系统崩溃或服务器崩溃
– 用户错误、冲突或者磁盘失效导致的文件丢失
– SQL语句失败
– 网络故障
– 场地灾难
2 数据库保护机制:
Oracle数据库保护机制:数据库备份和事务日志。
2.1 数据库备份
一般来说,数据库备份可以分为物理备份和逻辑备份。
——物理备份可分为脱机备份和联机备份。脱机备份又称为冷备份,只能在数据库关闭后进行备份;联机备份又称为热备份,数据库没有关闭,用户还可以使用。
——逻辑备份是使用Export实用程序备份,当数据库出现故障,可以使用Oracle的Import实用程序恢复数据库。
2.2 事务日志
数据库的事务日志(Transaction Log)是一组操作系统文件,它记录了提交事务所做的数据库修改。 日志主要是保护数据库,在数据库出现故障时执行恢复。 为了防止日志本身的故障,Oracle允许在不同的物理磁盘上维护两个或多个日志的副本。
3 备份原则:
一般来说,一个完善的备份系统,需要满足以下原则:
• – 1) 稳定性:备份软件一定要与操作系统100%兼容,其次,当事故发生时,要能快速有效地恢复数据
• – 2) 全面性:选用的备份软件要能支持各种操作系统、数据库和典型应用
• – 3) 自动化:备份方案应能提供定时的自动备份,并利用磁带库等技术进行自动换带。在自动备份过程中,还要有日志记录功能,并在出现异常情况时自动报警。
• – 4) 高性能:设计备份时要尽量考虑提高数据备份的速度,采用多个磁带机并行操作的方法。
• – 5) 操作简单:数据备份应用于不同领域,进行数据备份的操作人员水平参差不齐,这就需要一个直观的、操作简单的图形化用户界面
• – 6) 实时性:有些关键性任务需要24小时不停机运行,进行备份时,有些文件可能仍处于打开状态。在这种情况下备份,必须采取措施,实时查看文件大小、进行事务跟踪,以保证正确地备份系统中的所有文件。
• – 7) 容错性:数据是备份在磁带上的,要对磁带进行保护,并确保备份磁带中数据的可靠性,这是一个至关重要的方面。若引入(RAID)技术对磁带进行镜像,就能更好地保证数据安全可靠,等于给用户再加一把保险锁
4 备份与恢复策略:
4.1 规划备份策略时需要考虑的因素:
(1)选择合适的备份频率(如经常做,有规律做,做了结构上的修改应及时做等)尽量采用定时器、批处理等由计算机自动完成的方式,以减少备份过程中的手工干预,防止操作人员漏操作或误操作。
(2)根据数据的重要性可选择一种或几种备份交叉的形式制定备份策略。
(3)当数据库比较小,或者当数据库实时性不强或者是只读的,则备份的介质可采用磁盘或光盘。在备份策略上可执行每天一次数据库增量备份,每周进行一次完全备份。备份时间尽量选择在晚上服务器比较空闲的时间段进行,备份数据保存在一星期以上。
(4)就一般策略来说,当数据库的实时性要求较强,或数据的变化较多而数据需要长期保存时,则备份介质可采用磁盘或磁带。在备份策略上可选择每天2次,甚至每小时一次的数据库热完全备份或事务日志备份。为把灾难损失减少到最小程度,备份数据应保存一个月以上。同时每季度或每半年可以考虑再做一次光盘备份。另外每当数据库的结构发生变化,或进行批量数据处理前应做一次数据库的完全备份,且这个备份数据要长期保存。
(5)当实现数据库文件或者文件组备份策略时,应时常备份事务日志。当巨大的数据库分布在多个文件上时,必须使用这种策略。
(6)备份数据的保管和记录是防止数据丢失的另一个重要的因素。这将避免数据备份进度的混乱,应清楚记录所有步骤,并为实施备份的所有人员提供此类信息,以免发生问题时束手无策。数据备份与关键应用服务器最好是分散保管在不同的地方,通过网络进行数据备份。定时清洁和维护磁带机或光盘。把磁带和光盘放在合适的地方,避免磁带和光盘放置在过热和潮湿环境。备份的磁带和光盘最好只许网络管理员和系统管理员访问他们。要完整、清晰的做好备份磁带和光盘的标签。
4.2 灾难恢复策略的规划
灾难恢复就是为恢复计算机系统提供的保证。业界广泛的经验和教训说明,灾难恢复的成功在于企业中经过良好训练和预演的人在自己的角色上实施预先计划的策略,即灾难恢复计划。
在系统备份与灾难恢复计划建立以后,还必须在事前反复测试,并随时调整、加以改进,完整的系统恢复方案才能得以建立。其中灾难恢复策略在整个恢复方案中占有非常重要的作用。
4.3 制定数据恢复策略步骤:
– (1)评估公司对数据流和有效数据的需要。
– (2)每次数据损坏事故造成的经济损失有多大。
– (3)在多长时间范围内必须成功进行数据恢复,以避免其影响企业收益。
– (4)评估数据损失的风险,确定跨部门的数据恢复策略优先级别。
– (5)评估数据存储设备的所有潜在的风险。
– (6)使用上述评估结果制定质优价廉(cost effective)的安全机制,包括备份。
– (7)数据损失的间接代价是什么。
– (8)通过对所有的数据损坏进行预算来制定预防策略和最终的数据恢复策略。
4.4 制定恢复策略时应该考虑以下几个要素:
• 文档化并归档系统配置
• 文档化并归档灾难恢复的程序
• 安全措施、文档及磁带介质跟踪
• 判别和保护所有业务关键的服务器
• 在线数据保护更利于恢复
5 备份分类:
5.1 按备份的数据量:
• – 完全备份(full backup) :备份系统中的所有数据,特点是备份所需的时间最长,但恢复时间最短,操作最方便,也最可靠;
• – 增量备份(incremental backup) :只备份上次备份以后有变化的数据,特点是备份时间较短,占用空间较少,但恢复时间较长;
• – 差分备份(differential backup):只备份上次完全备份以后有变化的数据,特点是备份时间较长,占用空间较多,但恢复时间较快;
• – 按需备份(Synthetic Full Backup) :根据临时需要有选择的进行数据备份。
5.2 按备份状态来划分
5.2.1 物理备份
物理备份是指将实际物理数据库文件从一处拷贝到另一处的备份,冷备份、热备份都属于物理备份。
• 所谓冷备份,也称脱机(offline)备份,是指以正常方式关闭数据库,并对数据库的所有文件进行备份。其缺点是需要一定的时间来完成,在恢复期间,最终用户无法访问数据库,而且这种方法不易做到实时的备份。
• 所谓热备份,也称联机(online)备份,是指在数据库打开和用户对数据库进行操作的装填下进行的备份;也指通过使用数据库系统的复制服务器,连接正在运行的主数据库服务器和热备份服务器,当主数据库的数据修改时,变化的数据通过复制服务器可以传递到备份数据库服务器中,保证两个服务器中的数据一致。这种热备份方式实际上是一种实时备份,两个数据库分别运行在不同的机器上,并且每个数据库都写到不同的数据设备中。
5.2.2 逻辑备份
逻辑备份就是将某个数据库的记录读出并将其写入到一个文件中,这是经常使用的一种备份方式。MS-SQL和Oracle等都提供Export/Import工具来用于数据库的逻辑备份。
6 脱机备份与恢复:
冷备份是可以进行的最简单的备份操作类型。冷备份是在以一致的方式,完全地将数据库关闭时进行的。一旦关闭数据库,所有的数据库文件应该被备份到磁盘或者磁带上面。一旦完成文件拷贝,数据库能够被启动,并且用户可以重新开始他们的工作。数据库不需要为了进行冷备份,而处于归档日志模式,但没有归档日志记录,数据库只能够被恢复到冷备份执行的时间点上。冷备份是一个简单的选择,就其运行方式来看是受限的,但是一旦拥有冷备份,那么它工作起来会更简单,而且提供很多功能。
6.1 冷备份所需备份文件
当数据库被关闭的时候,将文件拷贝到磁盘的其他位置或者磁带上。应该备份的文件包括:
l 所有数据库数据文件及表空间,包括系统、临时以及回滚/撤消表空间;
l 控制文件,备份二进位控制文件和文本控制文件;
l 正在被使用的归档日志;
l 警报日志;
l 存在的Oracle密码文件;
l 参数文件init<SID>.ora及spfile;
l 重做日志——但是在任何时候还原重做日志的时候,都应该特别小心,因为重做日志的还原会覆盖当前存在的重做日志,它包含完成恢复所需要的重做流中的最后信息。因为这一点,Oracle建议不要对重做日志进行备份。
6.2 脱机备份步骤:
(1)以DBA或特权用户登录,对于需要的备份文件,用户也可通过下列SQL语句来了解数据文件、重演日志文件及控制文件的相应位置及名称。
SELECT * FROM V$LOGFILE;
SELECT * FROM V$DBFILE;
SELECT * FROM V$CONTROLFILE;
(2)关闭数据库
SHUTDOWN NORMAL;或者执行SHUTDOWN IMMEDIATE;
(3)复制数据文件,用拷贝命令备份全部的数据文件、重做日志文件、控制文件、初始化参数文件等。简单的处理方法是将数据库所在路径下的文件全部复制备份。在下面实验案例中所用数据库ORCL的目录是:d:\oracle\product\10.2.0\oradata\orcl
(4)重新启动数据库
STARTUP;
6.3 案例实践:脱机备份与不完全恢复
——脱机备份数据库相应文件,由于误操作,删除了表空间对象STU表,将备份的数据文件复制到原来的位置,恢复数据库到执行误操作前的状态。以SYSDBA登录。数据字典DBA_TABLES可以查询表所在的表空间。
实际操作步骤:
(1) 创建表STU,并插入三条记录;
(2) 脱机备份:shutdown immediate;
备份数据文件user01.dbf,控制文件,重做日志文件,或者直接将d:\oracle\product\10.2.0\oradata\orcl目录下的文件全部备份。
(3) 备份结束重启数据库:startup;
(4) 对象stu增加一条记录,结果如下:
(5) 模拟误操作,删除了表STU:
drop table system.stu; commit;
(6) 查询对象STU,返回错误信息:
(7) 关闭数据库:Shutdown immediate;
(8) 复制原先备份的数据文件,控制文件,重做日志等到原来目录下,d:\oracle\product\10.2.0\oradata\orcl;
(9) startup mount;
(10) 执行基于取消的恢复,recover database until cancel;
(11) 以RESETLOGS方式打开数据库:
(12) 查询对象STU,只有脱机备份的三条记录,备份后增加的记录没有恢复;
6.4 脱机备份优缺点:
优点:
– 只需要拷贝文件,速度比较快。
– 将文件拷贝回去,数据库就可以恢复到某个时间点。
– 若结合数据库归档模式可以很好地恢复数据库。
– 维护量相对较少,但安全性相对较高。
缺点:
– 脱机备份时,数据库必须关闭。
– 单独使用脱机备份,数据库只能基于某一时间点恢复。
– 若磁盘空间有限,使用磁带等外设时速度较慢。
– 脱机备份不能按表或用户恢复。
7 联机备份与恢复
热备份是当数据库已经启动并且运行的时候进行的一种备份。整个数据库可以被备份,表空间或者数据文件的子集可以在一次被备份,当执行热备份的时候,最终用户可以继续进行他们所有的正常操作。为此,数据库必须运行在归档日志模式。一旦备份完成,需要确认所有在备份操作期间被建立的日志记录在随后已经被归档。
联机备份一般备份数据文件、控制文件和日志文件。
7.1 案例实践:联机备份与完全数据库恢复
在表空间TEST2_DATA上建立对象COUR,首先执行联机备份,在COUR表上加入记录,然后删除数据文件TEST2_DATA,最后执行恢复,数据文件重新联机,验证恢复成功。
实际操作步骤:
(1)设置数据库为归档(Archivelog)模式;
a.装载但不打开数据库:startup mount;
b.修改为归档模式:alter database archivelog;
c.打开并访问数据库:alter database open;
(2)在归档模式下,建立表空间TEST2_DATA并在其上建立表COUR,并插入两条记录;
(3)切换日志;
(4)备份数据文件;
a.先将表空间TEST2_DATA设置为备份模式 ;
alter tablespace test2_data begin backup;
b.拷贝表空间的数据文件TEST2_DATA.ORA,其他数据文件不变;
c.将表空间TEST2_DATA设置为正常模式
alter tablespace test2_data end backup;
(5) 在COUR表上添加记录;
(6) 使表空间脱机,删除数据文件TEST2_DATA.ORA;
(7) 将表空间联机,出现错误,提示恢复数据文件;
(8)将备份的数据文件复制到原来所在位置,执行数据文件恢复。然后,执行数据文件恢复命令,本例中文件号为7;
(9)联机表空间;
(10)查询对象COUR表,确认联机备份恢复成功,联机备份前的数据和备份后新增加的数据都存在;
7.2 联机备份优缺点:
优点:
– 可在表空间或数据文件级备份,备份时间短。
– 备份时数据库仍可使用。
– 可达到秒级恢复(恢复到某一时间点上)。
– 可对几乎所有数据库实体作恢复。
– 恢复快速,大多数情况下恢复不需要关闭数据库。
缺点:
– 不能出错,否则后果严重。
– 若联机备份不成功,所得结果不可用于时间点的恢复。
– 因难于维护,所以要特别小心,不允许“以失败而告终”。
8 备份恢复实践操作
8.1 基础理论
恢复可以分为完全恢复和不完全恢复
完全数据库恢复是恢复到故障发生前的状态,所有已经提交的操作都进行恢复,确保数据库不丢失任何数据,完全恢复只用于归档模式。
不完全数据库恢复是将数据库恢复到备份点与介质失败点之间某个时刻的状态,并不是恢复所有提交的操作,不完全恢复可能丢失部分数据。
任何类型的恢复包括两个阶段:前滚阶段和回滚(回退)阶段。 在前滚恢复阶段(roll-forward recovery),恢复管理器应用必要的事务日志组“重做”(REDO)所有提交的不在数据库数据文件中的事务 。 回滚阶段,在前滚恢复后,Oracle必须执行回滚恢复(roll-back recovery)。 由于一些未完成的事务对数据库的修改信息已经提交到数据库,为保证数据库的一致性,需要清除这些事务对数据库的修改,数据库应执行回滚操作(UNDO),强制撤销这些未完成事务。
8.2 RMAN(备份与恢复管理器)
注意:红体字为注意要点,所有详细语法代码都有,截图精选
RMAN 是ORACLE 提供的一个备份与恢复的工具,可以用来备份和还原数据库文件、归档日志和控制文件。它也可以用来执行完全或不完全的数据库恢复。RMAN可以由命令行接口或者OEM的Backup Manager GUI 来控制。
8.3 基本知识
8.3.1 RMAN的组件、概念
8.3.1.1 RMAN 组件
Target Database: (目标数据库)
就是需要 RMAN 对其进行备份与恢复的数据库,RMAN 可以备份数据文件,控制文件,归档日志,spfile。(注意:RMAN不能用于备份联机日志、初始化参数文件和口令文件)
Server Session: (服务器会话)
RMAN 启动数据库上的Oracle 服务器进程,将建立一个与目标数据库的会话。由目标数据库上的服务器进程进行备份、还原、恢复的实际操作。
服务器进程
RMAN 的服务进程是一个后台进程,用于与RMAN 工具与数据库之间的通信,也用于RMAN 工具与磁盘/磁带等 I/O 设置之间的通信,服务进程负责备份与恢复的所有工作,将产生一个服务进程。
Channel: (通道)
一个通道是RMAN和目标数据库之间的一个连接,"allocate channel"命令在目标数据库启动一个服务器进程,同时必须定义服务器进程执行备份或者恢复操作使用的I/O 类型。
通道控制命令可以用来:
(1) 控制RMAN 使用的O/S资源,影响并行度
(2) 指定I/O带宽的限制值(设置limit read rate 参数)
(3) 定义备份片大小的限制(设置limit kbytes)
(4) 指定当前打开文件的限制值(设置limit maxopenfiles)
recovery catalog: (恢复目录)
用来保存备份与恢复信息的一个数据库,不建议创建在目标数据库上。RMAN 利用恢复目录记载的信息去判断如何执行需要的备份恢复操作。如果不采用恢复目录,备份信息可以存在于目标数据库的control file中。如果存放在目标数据库的control file 中,控件文件会不断增长,不能保存RMAN 的Script。
CONTROL_FILE_RECORD_KEEP_TIME (default=7):控件文件中RMAN 信息保存的最短时间。
使用恢复目录的优势: 可以存储脚本,记载较长时间的备份恢复操作。RMAN Repository: (RMAN 恢复目录数据库)存放recovery catalog(恢复目录)的数据库。建议为恢复目录数据库创建一个单独的数据库。
MML: (媒体管理库)
Media Management Layer (MML)是第三方工具或软件,用于管理对磁带的读写与文件的跟踪管理。如果你想直接通过 RMAN 备份到磁带上,就必须配置媒体管理层,媒体管理层的工具如备份软件可以调用RMAN来进行备份与恢复。
8.3.1.2 概念述语
Backup Sets (备份集合)
备份集合的特性:包括一个或多个数据文件或归档日志,以oracle 专有的格式保存,有一个完全的所有的备份片集合构成,构成一个完全备份或增量备份。
Backup Pieces (备份片)
一个备份集由若干个备份片组成。每个备份片是一个单独的输出文件。一个备份片的大小是有限制的;如果没有大小的限制, 备份集就只由一个备份片构成。备份片的大小不能大于使用的文件系统所支持的文件长度的最大值。
Image Copies镜像备份
镜像备份是独立文件(数据文件、归档日志、控制文件)的备份。它很类似操作系统级的文件备份。它不是备份集或备份片,也没有被压缩。
Full backup Sets全备份集合
全备份是一个或多个数据文件中使用过的数据块的的备份。没有使用过的数据块是不被备份的,也就是说,oracle 进行备份集合的压缩。
Incremental backup sets增量备份集合
增量备份是指备份一个或多个数据文件的自从上一次同一级别的或更低级别的备份以来被修改过的数据块。 与完全备份相同,增量备份也进行压缩。
File multiplexing多个数据文件可以在一个备份集中。
Recovery catalog resyncing 恢复目录同步
使用恢复管理器执行backup、copy、restore 或者switch 命令时,恢复目录自动进行更新,但是有关日志与归档日志信息没有自动记入恢复目录。需要进行目录同步。使用resync
8.3.2 RMAN的使用:命令行接口与脚本
数据库状态
RMAN恢复目录数据库: 必须OPEN
目标数据库: 根据不同情况,必须MOUNT或OPEN
8.3.2.1 1. 使用不带恢复目录的RMAN
设置目标数据库的 ORACLE_SID ,执行:
$ rman nocatalog
RMAN> connect target
RMAN> connect target user/pwd>@db
8.3.2.2 2. 使用带恢复目录的RMAN
$ rman catalog rman/rman
RMAN> connect target //连接本地数据库作为目标数据库
RMAN> connect target user/pwd>@db //连接远程数据库
或
$ rman catalog rman/rman target user/pwd>@db
8.3.2.3 3. 命令行接口
1、单个执行
RMAN> backup database;
2、运行一个命令块
RMAN> RUN {
2> copy datafile 10 to
3> '/oracle/prod/backup/prod_10.dbf';
4> }
3、运行存储在恢复目录中的脚本:
RMAN> RUN { EXECUTE SCRIPT backup_whole_db };
4、运行外部脚本:
$ rman catalog rman/rman target / @backup_db.rman
$ rman cmdfile=backup.rman msglog=backup.log
RMAN> @backup_db.rman
[ Oracle备份与恢复总结] E-Mail / MSN : db.dw.dm@gmail.com
[ Oracle备份与恢复总结] E-Mail / MSN : db.dw.dm@gmail.com
RMAN> RUN { @backup_db.rman }
如果在cron 中执行,注意在脚本中设置正确的环境变量,例:
#set env
export ORACLE_HOME=/opt/oracle/product/9.2
export ORACLE_SID=test
export NLS_LANG="AMERICAN_AMERICA.zhs16gbk"
export PATH=$PATH:$ORACLE_HOME/bin
rman cmdfile=backup_db.rman
8.3.2.4 4. 使用脚本
创建或者取代脚本:
RMAN> create script alloc_disk {
2> # Allocates one disk
3> allocate channel dev1 type disk;
4> setlimit channel dev1 kbytes 2097150 maxopenfiles 32 readrate 200;
5> }
RMAN> replace script rel_disk {
2> # releases disk
3> release channel dev1;
5> }
删除脚本:
RMAN> DELETE SCRIPT Level0Backup;
查看脚本:
RMAN> PRINT SCRIPT Level0Backup;
运行脚本:
RMAN> RUN { EXECUTE SCRIPT backup_whole_db };
8.3.2.5 5. 运行OS命令
RMAN支持通过执行host命令暂时退出RMAN的命令提示符而进入到操作系统的命令环境。
8.3.2.6 6. 执行SQL语句
在 RMAN 的命令提示符后输入 SQL 命令,然后在一对单引号(双引号亦可)中输入要执行的 SQL 语句,例如:
RMAN> SQL 'ALTER SYSTEM CHECKPOINT';
对于SELECT 语句,无法得到结果。可以先执行host 再用SQLPLUS。
8.4 RMAN的配置
8.4.1 建立Recovery Catalog恢复目录
(1) 在目录数据库中创建恢复目录所用表空间:
SQL> create tablespace rman_ts datafile '/xxx/rman_ts.dbf' size 20M;
(2) 在目录数据库中创建RMAN 用户并授权:
SQL> create user rman identified by rman default tablespace rman_ts temporary tablespace temp quota unlimited on rman_ts;
SQL> grant connect, resource, recovery_catalog_owner to rman;
(3) 在目录数据库中创建恢复目录
$ rman catalog rman/rman
RMAN> create catalog tablespace rman_ts;
(4) 登记目标数据库:
一个恢复目录可以注册多个目标数据库,注册目标数据库的命令为:
$ RMAN catalog rman/rman target user/pwd @rcdb;
RMAN> register database;
8.4.2 查看RMAN的默认设置SHOW命令
必须连接目标数据库
RMAN> show all
RMAN> show channel; // 通道分配
RMAN> show device type; // IO设备类型
RMAN> show retention policy; // 保存策略
RMAN> show datafile backup copies; // 多个备份的拷贝数目
RMAN> show maxsetsize; // 备份集大小的最大值
RMAN> show exclude; // 不必备份的表空间
RMAN> show backup optimization; // 备份的优化
8.4.3 配置RMAN的默认设置
1. 配置备份集文件的格式 (format)
RMAN> configure channel device type disk format '/u05/oracle/rmanback/%U';
备份文件可以自定义各种各样的格式,如下
%c 备份片的拷贝数
%d 数据库名称
%D 位于该月中的第几天 (DD)
%M 位于该年中的第几月 (MM)
%F 一个基于 DBID 唯一的名称,这个格式的形式为 c-IIIIIIIIII-YYYYMMDD-QQ,
其中IIIIIIIIII 为该数据库的DBID,YYYYMMDD 为日期,QQ 是一个 1-256 的
序列
%n 数据库名称,向右填补到最大八个字符
%u 一个八个字符的名称代表备份集与创建时间
%p 该备份集中的备份片号,从1 开始到创建的文件数
%U 一个唯一的文件名,代表%u_%p_%c
%s 备份集的号
%t 备份集时间戳
%T 年月日格式(YYYYMMDD)
2. 配置默认IO设备类型 ( device type )
IO 设备类型可以是磁盘或者磁带,在默认的情况下是磁盘,可以通过如下的命令
进行重新配置。
RMAN> configure default device type to disk;
RMAN> configure default device type to sbt;
注意,如果换了一种IO 设备,相应的配置也需要做修改,如
RMAN> configure device type sbt parallelism 2;
3. 配置自动分配的通道 ( Chanel )
RMAN> configure channel device type disk format
'/U01/ORACLE/BACKUP/%U
在运行块中,手工指定通道分配,这样的话,将取代默认的通道分配。
RMAN> Run {
allocate channel cq type disk format='/u01/backup/%u.bak';
…}
通道的一些特性:
读的速率限制 Allocate channel ……rate = integer
最大备份片大小限制 Allocate channel …… maxpiecesize = integer
最大并发打开文件数(默认16) Allocate channel …… maxopenfile = integer
4. 配置默认的保存策略 ( Retention Policy)
保存策略是管理备份与副本有效期或者是否有效的一种方法。恢复数据库的时候Oracle 不考虑失效的备份。我们可以定义两种保存策略:恢复窗口备份保存策略(recovery window backup retention policy )和冗余备份保存策略(redundancy backupretention policy )
备份策略保持 分为两个保持策略:
一个是时间策略,决定至少有一个备份能恢复到指定的日期
一个冗余策略,规定至少有几个冗余的备份。
恢复窗口备份保存策略
这种保存策略类型的使用基于数据库可能恢复到的最早的日期。 例如,假设今天是星期一,此前存在 3 个备份。第一个备份在昨天生成的,第二个备份是上星期四生成的,而最后一个备份是 10 天前备份的。假如恢复窗口是 7 天,那么昨天和上星期四的备份是有效备份,而 10 天前的备份会成为废弃备份。下面的命令将恢复窗口配置为7 天:
RMAN> configure retention policy to recovery window of 7 days;
冗余备份保存策略
使用这种保存策略,RMAN 会从最新备份开是保留 N 个数据备份,其余的废弃。
例如,如果有四个备份,而冗余数是 3,那么最早的那个备份将被废弃。下面的命令将备份策略设置为 3:
RMAN> configure retention policy to redundancy 3;
设置NONE 可以把使备份保持策略失效,Clear 将恢复默认的保持策略
RMAN> configure retention policy to none;
例:
保证至少有一个备份能恢复到 Sysdate-5 的时间点上,之前的备份将标记为Obsolete
RMAN> configure retention policy to recovery window of 5 days;
至少需要有三个冗余的备份存在,如果多余三个备份以上的备份将标记为冗余
RMAN> configure retention policy to redundancy 5;
5. 配置多个备份的拷贝数目( backup copies )
如果觉得单个备份集不放心,可以设置多个备份集的拷贝,如:
RMAN> configure datafile backup copies for device type disk to 2;
RMAN> configure archivelog backup copies for device type disk to 2;
如果指定了多个拷贝,可以在通道配置或者备份配置中指定多个拷贝地点:
RMAN> configure channel device type disk format
'/u01/backup/%U', '/u02/backup/%U';
RMAN> backup datafile n format '/u01/backup/%U', '/u02/backup/%U';
6. 设置并行备份( ARALLELISM )
RMAN支持并行备份与恢复,也可以在配置中指定默认的并行程度。如:
RMAN> configure device type disk parallelism 4;
指定在以后的备份与恢复中,将采用并行度为4,同时开启4 个通道进行备份与恢复,当然也可以在RUN 的运行块中手工分配多个通道来决定备份与恢复的并行程度。并行的数目决定了开启通道的个数。如果指定了通道配置,将采用指定的通道,如果没有指定通道,将采用默认通道配置。还可以在BACKUP命令中使用指定FILESPERSET 或者指定(datafile 1,4,5 channelc1 tag=DF1)(datafile 2,3,6 channel c2 tag=DF2)
7. 设置控制文件自动备份 (autobackup on)
通过如下的命令,可以设置控制文件的自动备份
RMAN> configure controlfile autobackup on;
对于没有恢复目录的备份策略来说,这个特性是特别有效的,控制文件的自动备份发生在任何backup 或者copy 命令之后,或者任何数据库的结构改变之后。
可以用如下的配置指定控制文件的备份路径与格式
RMAN> configure controlfile autobackup format for type disk to '%f';
在备份期间,将产生一个控制文件的快照,用于控制文件的读一致性,如下配置:
RMAN> configure snapshot controlfile name to
'/u01/app/oracle/product/9.0.2/dbs/snapcf_U02.f';
8. 设置备份优化选项 ( optimization )
可以在配置中设置备份的优化,如
RMAN> configure backup optimization on;
如果优化设置打开,将对备份的数据文件、归档日志或备份集运行一个优化算法。
8.4.4 RMAN 会话的设置
set 命令与 configure 命令很相似,但是 set 命令设置不是永久的。set 命令定义只应用于当前RMAN会话的设置。
可以用于RUN代码之外的命令有:
set echo on | off // 显示或关闭 RMAN 显示
set DBID dbidn // 指定一个数据库的数据库标识符。
下面的set 命令只能在RUN 代码中使用:
set newname:
用于 TSPITR 或者数据库复制操作,指定新的数据库文件名,将数据库移动到新的系统中并且文件名不同的时候可以用此命令。
set maxcorrupt for datafile:
用于定义 RMAN 操作失败之前允许的数据块讹误的数量
set archivelog destination:
可以修改存储归档的重做日志 archive_log_dest_1 的目的地。
set 命令和 until 子句:
可以定义数据库时间点恢复操作所使用的具体的时间点、SCN 或者日志序列号,例:
set until time "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')";
set backup copies:
使用该命令可以定义为备份集的每个备份片创建的镜像副本数。
例:
RMAN> RUN{
set maxcorrupt for datafile 3 to 10;
set backup copies = 2;
backup database;
}
8.5 Copy镜像拷贝与恢复
Copy镜像拷贝命令可以创建数据库数据文件、归档重做日志或者控制文件的精确副本。RMAN 副本与这些文件的区别仅在于名称和(或)位置的区别。功能相当于用户管理的备份恢复中的热备份。备份副本的好处是恢复比较快,恢复时可以不用拷贝,指定新位置即可。Copy镜像拷贝至少要在 mount 状态下运行。
Copy镜像拷贝可作为增量备份的 Level 0。
Oracle10g开始,允许使用单条命令"backup as copy"进行数据库拷贝。
8.5.1 备份
生成数据文件副本:
RMAN> copy datafile 3 to 'd:\backup\datafilecopy\users01.dbf.bak';
RMAN> copy datafile 'd:\oracle\oradata\ora9i\users01.dbf' to
'd:\backup\datafilecopy\users01.dbf.bak';
生成控制文件副本:
RMAN> copy current controlfile to … ;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP is ON;
备份ARCHIVELOG 副本:
// 只能一个一个的来备份,而不能指定一个范围
RMAN> copy archivelog 'd:\oracle\oradata\arc\ming_351.arc' to
'd:\oracle\orabackup\arc\ming_351.arc';
并行设置:
1. RMAN> configure device type ... parallelism = 3;
//only 2 channel, one for writting data to disk
2. 手工分配多个通道
3. 在命令中指定多个文件
RMAN> copy datafile 'xx' to 'xx2', datafile 'yy' to 'yy2', ...;
块检查:
CHECK LOGICAL 选项
MAXCORRUPT 参数
V$COPY_CORRUPTION
在复制操作中,Oracle 服务器进程对每个块执行校验和计算以检测是否有块损坏。RMAN 在还原副本时也要核对校验和。该过程称为物理损坏检测。可以使用NOCHECKSUM 选项取消校验和操作,从而加快复制进程。如果数据库已在维护块校验和,则此选项无效。缺省情况下,禁用逻辑损坏的错误检查。可以使用 CHECK LOGICAL 选项测试通过了物理损坏检查的数据和索引块,查看它们是否存在逻辑损坏,如行片或索引条目损坏。如果检测到任何块存在逻辑损坏,则将该块记录到服务器进程的警报日志和跟踪文件中。可以使用 MAXCORRUPT 参数设置逻辑和物理损坏的阈值。只要在某个文件中检测到的逻辑和物理损坏总和低于该值,则 RMAN 命令完成,同时 Oracle 将损坏块的范围植入到 V$COPY_CORRUPTION 视图。如果超出 MAXCORRUPT,则该命令终止,并且不植入视图。 当并行度比较高时,占用的计算机资源较多,但备份操作完成速度较快。缺省情况下将启用对物理损坏的错误检查。有关在备份过程中遇到的损坏数据文件块的信息将记录在控制文件和警报日志中。
8.5.2 恢复
查看所有的Copy镜像拷贝:
RMAN> list copy;
数据文件副本还原:
还原时可以offline数据文件所属表空间,然后利用OS 拷贝命令恢复副本。
还可以用 restore (datafile num) from datafilecopy 命令来从数据文件副本中还原数据文件,然后再用 recover 命令来恢复。例如:
RMAN> sql "alter database datafile 5 offline";
RMAN> restore (datafile 5) from datafilecopy;
RMAN> recover datafile 5;
RMAN> sql "alter database datafile 5 online";
注意,上面的圆括号很重要,如果没有,restore 命令就会执行失败。
8.6 Backup备份与恢复
Backup 备份命令生成Backup sets (备份集合),以oracle专有的格式保存,由一个完全的所有的备份片集合构成,构成一个完全备份或增量备份。
8.6.1 BACKUP 备份命令选项
设置标记(TAG)
RMAN> backup database tag= 'test backup';
限制备份集大小
RMAN> backup database maxsetsize=100M;
只备份新增部分
RMAN> backup incremental level 0 database;
备份控制文件 同时备份SPFILE
RMAN> backup current controlfile;
RMAN> configure controlfile autobackup on; // 默认是off
也可以在备份数据库或者文件的时候加上include current controlfile 选项。例如:
RMAN> backup database include current controlfile;
使用自动备份进行恢复:
RMAN> restore spfile/controlfile to '/xx/xx' from autobackup;
备份归档日志(9i)
RMAN> backup archivelog all;
RMAN> backup ... plus archivelog; // 在备份其他时同时备份归档日志
plus archivelog隐含如下步骤:
Ø 运行一个ALTER SYSTEM ARCHIVELOG CURRENT命令
Ø 运行BACKUP ARCHIVELOG ALL 命令。注意如果备份优化被启用,
RMAN 只会备份未备份过的日志
Ø 备份BACKUP命令中定义的文件
Ø 运行ALTER SYSTEM ARCHIVELOG CURRENT 命令
Ø 备份所有的剩下的归档日志
备份完后删除归档日志
RMAN> backup ... ARCHIVELOG all delete all input;
修改备份集的保存策略
例如:将备份设置为永久有效
RMAN> backup database keep forever logs|nologs;
设置为有效期 180 天
RMAN> backup database keep until time='sysdate+180';
重写configure exclude / noexclude
通过 configure exclude 可以配置RMAN 不备份上次备份以来没有发生变化的数据文件。如果要确保RMAN备份这些数据文件,可以在backup 命令中添加 noexclude 选项。
例如:
RMAN> backup database noexclude;
跳过脱机的、不可存取的或者只读的数据文件
RMAN> backup database skip offline skip inaccessible skip readonly;
强制备份只读的数据文件
RMAN> backup database force;
备份指定周期内没有备份的数据文件
RMAN> backup database not backed up;
RMAN> backup database not backed up since time='sysdate-2';
在备份操作期间检查逻辑讹误
RMAN> backup check logical database; //在检查逻辑错误的同时进行备份
RMAN> backup validate check logical database; //只检查
建立压缩备份集
RMAN> backup as compressed backupset tablespace users
FORMAT='D:\BACKUP\%d_%s.dbf';
8.6.2 RESTORE/RECOVER恢复命令选项
数据库恢复
RMAN> restore/revover database ;
表空间恢复
RMAN> restore/revover tablespace xx(wangningning) ;
默认情况下,即使丢失了只读的数据文件,RMAN 也不会在执行完全数据库还原操作时候还原只读的数据文件。要在完全恢复期间还原只读的数据文件,就必须在RESTORE命令中使用CHECK READONLY参数:
RMAN> RESTORE DATABASE CHECK READONLY;
使用自动备份恢复SPFILE/控制文件
RMAN> restore spfile/controlfile to '/xx/xx' from autobackup ;
归档重做日志的还原
RMAN> RESTORE ARCHIVELOG ALL;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1 UNTIL LOGSEQ=20;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1;
数据文件副本还原
RMAN> sql "alter datafile 5 offline";
RMAN> restore (datafile 5) from datafilecopy;
RMAN> recover datafile 5;
RMAN> sql "alter datafile 5 online";
请注意,上面的圆括号很重要
与备份检查一样,还原操作也可以检查是否能正常restore 或者是否该备份集是否有效。如:
RMAN> RESTORE DATABASE VALIDATE;
RMAN> VALIDATE BACKUPSET 218;
RMAN> RESTORE DATABASE VALIDATE CHECK LOGICAL ;
从指定的 tag 恢复:
RMAN> RESTORE FROM tag=’xxxx’;
不完全恢复的还原:
1.set until time/SCN/
2.RMAN> restore database until scn 1000;
RMAN>restore database "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')";
RMAN> restore database until sequence 100 thread 1;
块级别的恢复
块恢复Block Media Recovery (BMR),块是恢复的最小单元,通过块可以减少恢复时间,而且数据文件可以在线。恢复块的时候,必须指定具体的块号,如:
RMAN> blockrecover datafile 6 block 3;
8.6.3 非归档模式下的 BACKUP 备份与恢复
恢复目录: 打开
目标数据库:例程启动,数据库加载,mount 不能open
因为目标数据库不在归档模式下,所以当进行备份/恢复操作的时候数据库无法打开。目标数据库只能在 MOUNT状态不能Open,所以属于脱机备份。
非归档模式不备份redo 日志,只有完全备份和readonly/offline 表空间和数据文件备份是有意义的,所以非归档模式最好不用RMAN 进行备份,备份语法与归档模式相同,所以这里只做简单介绍。
8.6.3.1 全库备份
例: 使用默认的设置脱机全备份的语句
例:不使用默认的设置执行脱机备份操作 ,在备份命令中指定备份选项
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> backup database;
在这个例子中,我们分配了两个通道,备份位置是在/xxx。默认情况下,如果备份数据文件1 (SYSTEM 表空间),控制文件和参数文件也会备份。
可以通过下面的命令显示恢复目录中记载的备份集信息:
RMAN> list backupset of database;
8.6.3.2 全库备份的恢复
$ rman target /
RMAN> startup mount
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;
8.6.3.3 表空间备份
只有readonly/offline 表空间的备份才有意义。
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> backup database;
RMAN> startup;
RMAN> run {
2> allocate channel dev1 type disk;
3> backup
4> tag tbs_users_read_only
5> format "/oracle/backups/tbs_users_t%t_s%s"
6> (tablespace users);
7> }
使用下列命令来显示恢复目录中该表的备份信息:
RMAN> list backupset of tablespace users;
8.6.3.4 表空间备份的恢复
RMAN> RUN{
sql "alter tablespace xx offline immediate;"
restore tablespace xx;
recover tablespace xx;
sql "alter tablespace xx online;"
}
8.6.3.5 备份控制文件
RMAN> run {
2> allocate channel dev1 type "SBT_TAPE";
3> backup
4> format "cf_t%t_s%s_p%p"
5> tag cf_monday_night
6> (current controlfile);
7> release channel dev1;
8> }
注:数据库完全备份将自动备份控制文件。(或者备份时加include current controlfile)
8.6.4 归档模式下的BACKUP备份与完全恢复
要用 RMAN 进行联机备份操作,数据库就必须位于 ARCHIVELOG 模式。恢复目录必须打开,目标数据库例程必须启动,数据库加载或者打开。
8.6.4.1 整库备份与恢复
备份命令:
只备份数据文件 (如果configure controlfile autobackup on; 将自动包括控件文件,SPFILE):
RMAN> backup database;
同时备份归档日志,然后将备份后的归档日志删除
RMAN> backup database plus archivelog delete input;
完全恢复:
目标数据库必须是mount 状态
$ rman target /
RMAN> startup mount
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open;
8.6.4.2 表空间的备份与恢复
备份命令:
RMAN> backup tablespace users ;
例:
RMAN> RUN{
allocate channel c1 type disk;
backup tablespace users tag 'ts_users' format '/oracle/rmanback/ts_%u_%s_%p' ;
release channel c1;
}
恢复:
如果我们只丢失了特定的表空间的数据文件,那么我们可以选择只恢复这个表空间,而不是恢复整个数据库。表空间恢复可以在不关闭数据库的情况下进行,只需要将需要恢复的表空间offline。
RMAN> RUN{
sql "alter tablespace xx offline immediate;"
restore tablespace xx;
recover tablespace xx;
sql "alter tablespace xx online;"
}
恢复到一个不同的位置:
RMAN> RUN{
sql "alter tablespace xx offline immediate;"
SET NEWNAME for datafile 1 to '/xx';
restore tablespace xx;
switch datafile 1;
recover tablespace xx;
sql "alter tablespace tbs1 online;"
}
8.6.4.3 数据文件的备份与恢复
备份命令:
RMAN> backup datafile 3;
RMAN> backup datafile 'D:\ORACLE\ORADATA\TEST\TEST.DB';
恢复命令:
数据文件恢复与表空间恢复类似。假设数据文件号为 5 的文件丢失,文件名是:
'E:\ORACLE\ORADATA\USERS.DBF', 那么我们恢复的时候可以指定文件号,也可以指定文件名。
RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter tablespace users offline immediate";
4> restore datafile 4; --或者 restore 'E:\ORACLE\ORADATA\USERS.DBF'
5> recover datafile 4;
6> sql "alter tablespace users online";
7> release channel dev1;
8> }
恢复到一个不同的位置:
$ rman target /
RMAN> startup mount
RMAN> RUN{
sql "alter tablespace users offline immediate";
SET NEWNAME for datafile 9 to '/xx/user01.dbf';
restore datafile 9;
switch datafile all;
recover datafile 9;
sql "alter tablespace users online";
}
8.6.4.4 归档重做日志的备份与恢复
备份:
整库备份的同时,备份所有归档 (以及联机日志):
RMAN> backup database plus archivelog;
备份所有归档:
RMAN> backup archivelog all;
备份两天来的归档:
RMAN> backup archivelog from time='sysdate-2' [to time=’xxx’] ;
备份从sequence 1 开始的归档:
RMAN> backup archivelog from sequence 1 [to sequence =’n];
备份没有三次备份的归档:
RMAN> backup archivelog not backed up 3 times;
备份所有归档,然后删除归档:
RMAN> backup archivelog all delete input;
恢复:
显示恢复目录中的归档日志:
RMAN> list backupset of archivelog all;
一般情况下,在 RMAN 的普通恢复过程中,不必恢复归档的重做日志。不过偶尔也需要恢复重做日志,例如我们用Log Miner 来从归档中查找一些东西。
RMAN命令举例:
RMAN> RESTORE ARCHIVELOG ALL;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1 UNTIL LOGSEQ=20;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1;
可以用 SET 命令来指定归档日志的还原位置,例如:
RMAN> run{
set archivelog destination to "d:\temp";
restore archivelog all;
}
需要注意的是,即使新的归档日志目录不同于默认的归档日志目录,如果 Oracle 判定日志已存在,也不会恢复该归档日志文件。
8.6.4.5 联机日志的备份
联机日志不能用 RMAN 来备份,可以先将其归档,再备份。为了实现这点,必须在RMAN
中执行归档命令语句:
RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter system archive log current";
4> backup (archivelog from time "sysdate-1" all delete input)
5> "format "/oracle/backups/log_t%t_s%s_p%p";
6> release channel dev1;
7> }
上面的脚本可以在执行完一个完整的联机数据库备份后执行,确保所有的重做日志可以将数据库恢复到一个一致性的状态。当然,也可以在全库备份时使用 plus archvielog 选项,将自动完成联机日志的备份。
8.6.4.6 控制文件和服务器参数文件的备份与恢复
备份:
// 设置文件名格式
RMAN> set controlfile autobackup format for device type disk to 'ctl_%F';
1. RMAN> configure controlfile autobackup on; // backup database时将自动备份
2. RMAN> backup current controlfile;
3. RMAN> backup .... include control file;
4. RMAN> backup file 1; // system datafile 自动备份
恢复SPFILE:
SPFILE(PFILE)的丢失/损坏,对数据库不会产生致命影响,可以从其他方式恢复。不过既然RMAN 的备份计划中包括了SPFILE 的备份,那么就可以使用RMAN 来还原SPFILE 了。
$ rman target / catalog "rman/rman@db"
RMAN> set dbid=153910023 // SET DBID 这个步骤是不能省略的,否则会报错。
RMAN> restore spfile from autobackup [MAXDAYS 100]; // 或者restore spfile;
RMAN> startup force
或者从某个备份集恢复:
RMAN> restore spfile from backupset bs_num命令。
使用 dbms_backup_restore 包恢复服务器参数文件:
在一些不常见的情况下,我们可能需要直接使用 dbms_backup_restore 包来恢复spfile。当然这个包也可以用来恢复其它数据,是常规办法都没有用的时候的一个利器。这个包可以在数据库 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('/back/SPFILE.ORA');
DBMS_BACKUP_RESTORE.restorebackuppiece(
'/back/C-2600315304-20060829-02',DONE=>done);
DBMS_BACKUP_RESTORE.devicedeallocate(NULL);
END;
/
恢复控制文件:
RMAN> startup nomount;
RMAN> set dbid=153910023
RMAN> restore controlfile from autobackup
或
RMAN> restore controlfile from '/arch/ct_c-2347671489-20060630-00';
联机状态:目标数据库MOUNT或OPEN
RMAN> restore controlfile to 'd:\temp\control01.ctl';
然后再执行恢复数据库的其他步骤:
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;
8.6.4.7 备份集的备份的备份与恢复
备份:
备份所有备份集:
RMAN> backup backupset all;
备份指定备份集:
RMAN> backup backupset bs_num;
恢复:(这种备份只是增加一个镜像,不用恢复)
主要用于改变备份集的位置,或者创建多个镜像备份,比如将备份集从硬盘备份到磁带。
8.6.5 归档模式下的不完全恢复
不完全恢复就意味着有数据的丢失。引起不完全恢复的原因有很多,如丢失了联机日志或某个归档日志。另外如果出现了严重损害数据库的用户错误,比如某用户错误的删除了某个重要的数据,那么数据库也要恢复到这个错误操作之前。
不完全恢复会影响整个数据库,需要在MOUNT状态下进行。在不完全恢复完成之后,通常需要使用 resetlogs 选项来打开数据库。resetlogs 表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始。数据库的逻辑生存期也被称为一个对应物(incarnation)。
每次使用 resetlogs 选项来打开数据库后都会创建一个新的数据库对应物,这对于恢复操作来说非常重要。每次使用 resetlogs 后,SCN 计数器不会被重置,但是Oracle会重置联机日志序列号,同时还会重置联机重做日志内容。因此执行了resetlogs 之后,应该立即重新备份整个数据库,否则恢复起来相当麻烦。 (注:Oracle 10g中已经可以在 resetlogs 之后不备份数据库,恢复的时候能够穿越resetlogs)
使用 RMAN 执行不完全恢复操作时需要完成的一个工作是建立恢复目标。恢复目标是要终止恢复进程的点,可以是时间点、指定的 SCN 或者一个日志序列号。我们可以在 run代码中使用set 命令和until time、until scn、until sequence参数。
也可以选择在 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;
8.6.5.1 基于SCN 的恢复
如果知道数据库出错前的SCN,可以将数据库还原到指定 SCN 状态。
$ startup mount;
RMAN> run{
allocate channel d1 type disk;
restore database until scn 1317011; --或者 set until scn 1317011
recover database until scn 1317011;
sql 'alter database open resetlogs';
release channel d1;
}
8.6.5.2 基于时间的恢复
下面使用set until time 命令为 2005 年 8 月 1 日下午 1点的恢复目标:
$ startup mount;
RMAN> 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 命令会应用恢复目标之前的归档重做日志或需要的增量备份。
8.7 RMAN查看信息 List与Report
8.7.1 恢复目录相关视图
恢复目录本身有一组视图,用于存放目标数据库与备份信息,可以用RMAN 用户登录数据库进行查看,例:
RC_DATABASE
RC_DATAFILE
RC_STORED_SCRIPT
RC_STORED_SCRIPT_LINE
RC_TABLESPACE
8.7.2 RMAN 动态性能视图
以下是目标数据库上与 RMAN 备份有关系的一些动态性能视图,可以用SYS 用户进行查询。
V$ARCHIVED_LOG
V$BACKUP_CORRUPTION
V$COPY_CORRUPTION
V$BACKUP_DEVICE
V$CONTROLFILE_RECORD_SECTION
V$BACKUP_DATAFILE 用于通过确定各数据文件中的块数来创建大小相同的备份集。通过它也可以找出数据文件中已损坏的块数。
V$BACKUP_REDOLOG 显示在备份集中存储的归档日志。
V$BACKUP_SET 显示已经创建的备份集。
V$BACKUP_PIECE 显示为备份集创建的备份片。
这里还有一个视图,可以大致的监控到 RMAN 备份进行的程度。如通过如下的 SQL脚本,将获得备份的进度。
SQL> SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK,
2 ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
3 FROM V$SESSION_LONGOPS
4 WHERE OPNAME LIKE 'RMAN%'
5 AND OPNAME NOT LIKE '%aggregate%'
6 AND TOTALWORK != 0
7 AND SOFAR <> TOTALWORK;
要在备份过程中将某一进程与一个通道关联起来,请:
1. 启动恢复管理器并连接到目标数据库和恢复目录(与后者的连接是可选的)。
rman target / catalog rman/rman@rcat
2. 在分配通道后,设置 COMMAND ID 参数,然后复制所需的对象。
run {
allocate channel t1 type disk;
set command id to 'rman';
copy datafile 1 to '/u01/backup/df1.cpy';
release channel t1;}
3. 查询 V$SESSION_LONGOPS 视图以获得复制的状态。
SELECT sid, serial#, context, sofar, totalwork
round(sofar/totalwork*100,2) "% Complete",
FROM v$session_longops
WHERE opname LIKE 'RMAN:%'
AND opname NOT LIKE 'RMAN: aggregate%';
4. 使用 SQL*Plus 并查询 V$PROCESS 和 V$SESSION 以获得 SID 和 SPID。然后, 使用
操作系统实用程序来监视进程或线程。
SELECT sid, spid, client_info
FROM v$process p, v$session s
WHERE p.addr = s.paddr
AND client_info LIKE '%id=rman%';
8.7.3 List
List 命令是一种在数据库控制文件或者恢复目录中查询备份的历史信息的方法。
List提供了一组信息,可以提供各种备份的信息,如对应物、备份集、归档日志备份、控
制文件备份等等。
列出对应物:
RMAN> list incarnation;
列出备份概要信息:
RMAN> list backup summary;
按备份类型列出备份:
RMAN> list backup by file;
获得备份的详细信息,包括备份片的物理文件名:
RMAN> list backup;
RMAN> list backupset bs#;
或者按照TAG 来查:
RMAN> list backup tag=tab_number;
列出过期的备份:
RMAN> list expired backup;
按照表空间和数据文件来列出备份:
列出USERS表空间的备份:
RMAN> list backup of tablespace USERS;
列出文件 5 的备份:
RMAN> list backup of datafile 5;
列出文件 E:\ORACLE\USERS.DB 的备份:
RMAN> list backup of datafile ' E:\ORACLE\USERS.DB ';
列出控制文件的备份:
RMAN> list backup of controlfile;
列出归档日志的备份:
RMAN> list archivelog all;
RMAN> list backup of archivelog all;
列出副本:
RMAN> list copy 列出所有的副本。
RMAN> list copy of controlfile 列出控制文件副本
RMAN> list copy of archivelog all 列出所有归档日志副本
RMAN> list copy of database 列出数据库所有数据文件的副本
8.7.4 Report
Report 命令被用于判断数据库的当前可恢复状态和提供数据库备份的特定信息,可以检测哪些文件需要备份,哪些备份能被删除以及那些文件能不能获得的信息。可以报告数据库的所有能备份数据文件对象,包括数据文件名、文件号、表空间、文件大小、是否含有回滚段等。
RMAN> report schema
或者
RMAN> REPORT SCHEMA AT TIME 'SYSDATE-14';
RMAN> REPORT SCHEMA AT SCN 1000;
RMAN> REPORT SCHEMA AT SEQUENCE 100 THREAD 1;
报告需要备份的数据文件
RMAN> report need backup [ redundancy | days | incremental n];
报告过期了的数据文件或者不可用的备份与拷贝
RMAN> Report obsolete [orphan]
8.8 操作中遇到的困难和解决方法
(1)因为命令shutdow immediate 引起监听程序破坏,导致sqlplus登陆失败,界面如下:
解决方法:
因为监听程序打不开,所以我们在监听文件下添加一个实例如下
修改\oracle\product\11.1.0\db_1\network\admin\listener.ora文件
原来:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rickLiu)(PORT = 1521))
)
)
添加:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = E:\oracle\product\10.1.0\db_1)
)
)
保存后重启监听服务
(2)在恢复操作中,往往因为恢复不彻底从而引发数据库一系列不稳定的故障,使数据库连接失败。
先在windows下运行cmd,进入DOS环境。
解决方法:
以DBA用户登录,具体命令是
sqlplus /NOLOG
SQL>connect sys/change_on_install as sysdba
提示:已成功
SQL>shutdown normal
提示:数据库已经关闭
已经卸载数据库
ORACLE 例程已经关闭
SQL>startup mount
提示:ORACLE例程已经启动
Total System Global Area 118255568 bytes
Fixed Size 282576 bytes
Variable Size 82886080 bytes
Database Buffers 33554432 bytes
Redo Buffers 532480 bytes
数据库装载完毕
SQL>alter database open;
提示:
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 19 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 19: ''''D:\oracle\oradata\oradb\FYGL.ORA''
这个提示文件部分根据每个人不同情况有点差别。
继续输入
SQL>alter database datafile 19 offline drop;
提示:数据库已更改。
循环使用最后两步,直到alter database open;后不再提示错误,出现“数据库已更改”。
然后接着输入即可
SQL>shutdown normal
提示:数据库已经关闭
已经卸载数据库
ORACLE 例程已经关闭
SQL>startup
提示:ORACLE例程已经启动
Total System Global Area 118255568 bytes
Fixed Size 282576 bytes
Variable Size 82886080 bytes
Database Buffers 33554432 bytes
Redo Buffers 532480 bytes
数据库装载完毕
8.9 附录----操作演示代码示例及注释
8.9.1 登陆恢复管理器
1、切换服务器设置归档模式,如果已经是归档模式可跳过此步:
sqlplus /nolog (启动sqlplus)
SQL> conn system/wnn as sysdba; (以DBA身份连接数据库)
SQL> shutdown immediate; (立即关闭数据库)
SQL> startup mount; (启动实例并加载数据库,但不打开)
SQL> alter database archivelog; (更改数据库为归档模式)
SQL> alter database open; (打开数据库)
SQL> alter system archive log start; (启用自动归档)
SQL> exit;(退出)
2、连接:
e:(进入E盘)
rman target=system/wnn@orcl(启动恢复管理器)
show all(查看默认所有设置)
3、基本设置:
RMAN> configure default device type to disk; (设置默认的备份设备为磁盘)
RMAN> configure device type disk parallelism 2; (设置备份的并行级别,通道数)
RMAN> configure channel 1 device type disk format '/backup1/backup_%U';(设置备份的文件格式,只适用于磁盘设备)
RMAN> configure channel 2 device type disk format '/backup2/backup_%U';(设置备份的文件格式,只适用于磁盘设备)
RMAN> configure controlfile autobackup on;(打开控制文件与服务器参数文件的自动备份)
RMAN> configure controlfile autobackup format for device type disk to '/backup1/ctl_%F';(设置控制文件与服务器参数文件自动备份的文件格式)
4、查看所有设置:
RMAN> show all
5、查看数据库方案报表:
RMAN> report schema;
8.9.2 镜像拷贝
1.拷贝数据文件
copy datafile 3 to 'e:\copy\cp1\users02(1).dbf.bak';注:需要事先建立目录
2.查看所有的Copy镜像拷贝:
RMAN> list copy;
3.恢复
RMAN> sql "alter database datafile 3 offline";
RMAN> restore (datafile 3) from datafilecopy;
RMAN> recover datafile 3;
RMAN> sql "alter database datafile 3 online";
注意,上面的圆括号很重要,如果没有,restore 命令就会执行失败。
8.9.3 backup操作
1.设置标记(TAG)
RMAN> backup database tag= 'test backup';
2.限制备份集大小
RMAN> backup database maxsetsize=100M;
3、备份全库:
RMAN> backup database plus archivelog delete input;
(备份全库及控制文件、服务器参数文件与所有归档的重做日志,并删除旧的归档日志)
4、备份表空间:
RMAN> backup tablespace system plus archivelog delete input;
(备份指定表空间及归档的重做日志,并删除旧的归档日志)
5、备份归档日志:
RMAN> backup archivelog all delete input;
6、复制数据文件:
RMAN> copy datafile 1 to '/bf/db1/system.copy';
7、查看备份和文件复本:
RMAN> list backup;
8、验证备份:
RMAN> validate backupset 3;
9、从自动备份中恢复服务器参数文件:
RMAN> shutdown immediate; (立即关闭数据库)
RMAN> startup nomount; (启动实例)
RMAN> restore spfile to pfile '/backup1/mydb.ora' from autobackup;
(从自动备份中恢复服务器参数文件)
10、恢复和复原全数据库:
RMAN> shutdown immediate(立即关闭数据库)
RMAN> exit(退出)
手动改文件名字模拟破坏
rman target=system/wnn@orcl(启动恢复管理器)
RMAN>startuppfile=/oracle/product/10.2.0/db1/admin/orcl/pfile/init.ora.1111201015130
(指定初始化参数文件启动数据库)
RMAN> restore database;(还原数据库)
RMAN> recover database;(恢复数据库)
RMAN> alter database open;(打开数据库)
11、恢复和复原表空间:
RMAN> sql 'alter tablespace users offline immediate';(将表空间脱机)
RMAN> exit(退出恢复管理器)
手动将表空间重命名
rman target=system/wnn@orcl启动恢复管理器
RMAN> restore tablespace users;(还原表空间)
RMAN> recover tablespace users;(恢复表空间)
RMAN> sql 'alter tablespace users online';(将表空间联机)
12、增量备份与恢复:
第一天的增量基本备份:
RMAN> backup incremental level=0 database plus archivelog delete input;
第二天的增量差异备份:
RMAN> backup incremental level=2 database plus archivelog delete input;
第三天的增量差异备份:
增量恢复:
RMAN> shutdown immediate;
RMAN> exit
手动将数据文件重命名
rman target=system/wnn@orcl启动恢复管理器
RMAN>startuppfile=/oracle/product/10.2.0/db1/admin/orcl/pfile/init.ora.1111201015130
(指定初始化参数文件启动数据库)
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open;