Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3321822
  • 博文数量: 631
  • 博客积分: 10716
  • 博客等级: 上将
  • 技术积分: 8397
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-01 22:35
文章分类

全部博文(631)

文章存档

2020年(2)

2019年(22)

2018年(4)

2017年(37)

2016年(22)

2015年(1)

2013年(12)

2012年(20)

2011年(19)

2010年(20)

2009年(282)

2008年(190)

分类: Oracle

2008-07-23 11:27:21

1.什么是RMAN
RMAN可以用来备份和还原数据库文件、归档日志和控制文件。它也可以用来执行完全或不完全的数据库恢复。
注意:RMAN不能用于备份初始化参数文件和口令文件。
RMAN启动数据库上的Oracle服务器进程来进行备份或还原。备份、还原、恢复是由这些进程驱动的。
RMAN可以由OEM的Backup Manager GUI来控制,但在本文章里不作重点讨论。

2. Terminology专业词汇解释
2.1. Backup sets备份集合
备份集合有下面的特性:
  包括一个或多个数据文件或归档日志
  以oracle专有的格式保存
  有一个完全的所有的备份片集合构成
  构成一个完全备份或增量备份

2.2. Backup pieces备份片
一个备份集由若干个备份片组成。每个备份片是一个单独的输出文件。一个备份片的大小是有限制的;如果没有大小的限制, 备份集就只由一个备份片构成。备份片的大小不能大于使用的文件系统所支持的文件长度的最大值。

2.3. Image copies镜像备份
镜像备份是独立文件(数据文件、归档日志、控制文件)的备份。它很类似操作系统级的文件备份。它不是备份集或备份片,也没有被压缩。

2.4. Full backup sets全备份集合
全备份是一个或多个数据文件中使用过的数据块的的备份。没有使用过的数据块是不被备份的,也就是说,oracle 进行备份集合的压缩。

2.5. Incremental backup sets增量备份集合
增量备份是指备份一个或多个数据文件的自从上一次同一级别的或更低级别的备份以来被修改过的数据块。 与完全备份相同,增量备份也进行压缩。

2.6. File multiplexing
不同的多个数据文件的数据块可以混合备份在一个备份集中。

2.7. Recovery catalog resyncing 恢复目录同步
使用恢复管理器执行backup、copy、restore或者switch命令时,恢复目录自动进行更新,但是有关日志与归档日志信息没有自动记入恢复目录。需要进行目录同步。使用resync catalog命令进行同步。

RMAN>resync catalog;

RMAN-03022:正在编译命令:resync
RMAN-03023:正在执行命令:resync
RMAN-08002:正在启动全部恢复目录的 resync
RMAN-08004:完成全部 resync
3. 恢复目录
3.1.恢复目录的概念
恢复目录是由RMAN使用、维护的用来放置备份信息的仓库。RMAN利用恢复目录记载的信息去判断如何执行需要的备份恢复操作。

恢复目录可以存在于ORACLE数据库的计划中。

虽然恢复目录可以用来备份多个数据库,建议为恢复目录数据库创建一个单独的数据库。

恢复目录数据库不能使用恢复目录备份自身。

3.2.建立恢复目录
第一步,在目录数据库中创建恢复目录所用表空间:

SQL> create tablespace rman_ts datafile "d:oracleoradatarmanrman_ts.dbf" size 20M;

表空间已创建。第二步,在目录数据库中创建RMAN 用户并授权:

SQL> create user rman identified by rman default tablespace rman_ts temporary
tablespace temp quota unlimited on rman_ts;

用户已创建。

SQL> grant recovery_catalog_owner to rman;

授权成功。

SQL> grant connect, resource to rman;

授权成功。
第三步,在目录数据库中创建恢复目录

C:>rman catalog rman/rman

恢复管理器:版本8.1.6.0.0 - Production

RMAN-06008:连接到恢复目录数据库
RMAN-06428:未安装恢复目录

RMAN>create catalog tablespace rman_ts;

RMAN-06431:恢复目录已创建注意:虽然使用RMAN不一定必需恢复目录,但是推荐使用。因为恢复目录记载的信息大部分可以通过控制文件来记载,RMAN在恢复数据库时使用这些信息。不使用恢复目录将会对备份恢复操作有限制。

3.3.使用恢复目录的优势
可以存储脚本;

记载较长时间的备份恢复操作;
4. 启动RMAN
rMAN为交互式命令行处理界面,
也可以从企业管理器中运行。
为了使用下面的实例,先检查环境符合:
在使用RMAN前,设置NLS_DATE_FORMAT 和NLS_LANG环境变量,很多RMAN LIST命令的输出结果是与日期时间相关的,
这点在用户希望执行以时间为基准的恢复工作也很重要。
下例是环境变量的示范:NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
NLS_DATE_FORMAT=DD-MON-YYYY HH24:MI:SS
为了保证RMAN使用时能连接恢复目录,恢复目录数据库必须打开,目标数据库至少要STARTED(unmount),
否则RMAN会返回一个错误,目标数据库必须置于归档模式下。
4.1.使用不带恢复目录的RMAN
设置目标数据库的 ORACLE_SID ,执行: rman nocatalog RMAN connect target
RMAN> connect target internal
4.2.使用带恢复目录的RMAN
 rman rman_ts

RMAN connect target rman rman_ts
target internal

5.注册或者注销目标数据库
5.1.注册目标数据库数据库状态:恢复目录状态:打开目标数据库:加载或者打开目标数据库在第一次使用RMAN之前必须在恢复目录中注册:第一步,启动恢复管理器,并且连接目标数据库:C:>rman target
catalog
恢复管理器:版本8.1.6.0.0 - Production
RMAN-06005:连接到目标数据库:HIS (DBID=3021445076)
RMAN-06008:连接到恢复目录数据库第二步,注册数据库:RMAN> register database;
RMAN-03022:正在编译命令:register
RMAN-03023:正在执行命令:register
RMAN-08006:注册在恢复目录中的数据库
RMAN-03023:正在执行命令:full resync
RMAN-08002:正在启动全部恢复目录的resync
RMAN-08004:完成全部resync

5.2.注销目标数据库RMAN提供了一个注销工具,叫DBMS_RCVCAT工具包,请注意一旦注销了该目标数据库,就不可以使用恢复目录中含有的备份集来恢复数据库了。为了能注销数据库,需要获得数据库的标识码(DB_ID)和数据库键值(DB_KEY)。其中连接目标数据库时将会获得DB_ID。C:>rman target catalog
恢复管理器:版本8.1.6.0.0 - Production
RMAN-06005:连接到目标数据库:HIS (DBID=3021445076)
RMAN-06008:连接到恢复目录数据库其中DBID=3021445076,利用DBID=3021445076查询数据库键值码,连接到目标数据库,查询db表:
SQL> select * from db;

DB_KEY DB_ID CURR_DBINC_KEY
---------- ---------- --------------
1 3021445076 2获得DB_KEY=1,这样,该目标数据库DB_KEY=1,DBID=3021445076,利用两个值使用DBMS_RCVCAT工具包就可以注销数据库:
SQL> execute dbms_rcvcat.unregisterdatabase(1,3021445076);
PL/SQL 过程已成功完成。至此,注销数据库操作完成。
6.操作已有的备份
6.1.加入目录数据库数据库状态:恢复目录:打开目标数据库:加载或者打开如果存在8.x版本以前创建的备份数据想注册到目标数据库,可以采用如下手工方式加入到恢复目录中RMAN> catalog datafilecopy "/oracle/ .... /system01.dbf";
使用如下命令显示恢复目录中包含的文件
RMAN> list copy of database;6.2.
从目录数据库中删除
第一步:查看备份信息:
RMAN>list backup;
RMAN-03022:正在编译命令:list备份集列表关键字 Recid 标记 LV 集合标记 集合计数 完成时间
------- ---------- ---------- -- ---------- ---------- ----------------------
1104 2 501364455 0 501364446 2 06-8月 -03备份段列表关键字 Pc# Cp# 状态 完成时间 段名
------- --- --- ----------- ---------------------- ------------------------
1106 1 1 AVAILABLE 06-8月 -03 D:ORACLEORA81DATABASE2EU4DMU_1_1数据文件包括列表文件 名称 LV 类型 检查点SCN 检查点时间
---- ------------------------------------- -- ---- ---------- -------------
3 D:ORACLEORADATAHISUSERS01.DBF 0 Full 160052 06-8月 -03备份集的关键字为1104。
第二步:定义delete通道:RMAN>allocate channel for delete type disk;
RMAN-03022:正在编译命令:allocate
RMAN-03023:正在执行命令:allocate
RMAN-08030:分配的通道:delete
RMAN-08500:通道 delete:sid=19 devtype=DISK
第三步:删除backupset备份集RMAN>change backupset 1104 delete;
RMAN-03022:正在编译命令:change
RMAN-08073:已删除备份段
RMAN-08517:备份段 handle=D:ORACLEORA81DATABASE2EU4DMU_1_1 recid=2 stamp=50 1364447
RMAN-03023:正在执行命令:partial resync
RMAN-08003:启动部分恢复目录的 resync
RMAN-08005:完成部分 resync注意:部分执行删除备份集、备份片或者维护恢复目录的命令,需要先指定通道,如:
RMAN>allocate channel for delete type disk;

RMAN>allocate channel for maintenance type disk;
7.在非归档模式下备份数据库状态:恢复目录:打开目标数据库:例程启动或者数据库加载恢复目录数据库需要打开,目标数据库必须启动(或者加载)。因为目标数据库不在归档模式下,所以当进行备份恢复操作的时候数据库无法打开。不可以将表空间置于热备份模式上进行等同于文件系统级的拷贝,如果在非归档模式,数据库打开的状态下不能进行数据文件的备份。
7.1.数据库完全备份RMAN> run {
2> # backup the complete database to disk
3> allocate channel dev1 type disk;
4> backup
5> full
6> tag full_db_backup
7> format "/oracle/backups/db_t%t_s%s_p%p"
8> (database);
9> release channel dev1;
10> }
7.2.备份表空间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;
假设USERS表空间在备份后被置为READ ONLY表空间,以后的全库备份就可以不用备份该表空间,为了达到这个目的,可以在以后的备份中指定"skip readonly"。注意,目标数据库不需要一定打开,只要加载就可以,因为表空间的信息存储在控制文件中。
7.3.备份单独数据文件RMAN> run {
2> allocate channel dev1 type "SBT_TAPE";
3> backup
4> format "%d_%u"
5> (datafile "/oracle/dbs/sysbigdb.dbf");
6> release channel dev1;
7> }行#2: 使用MML(media manager layer)分配磁带驱动器,必须指定类型为SBT_TAPE;注意因为没有指定标识,所以标识为空;使用下面的命令显示恢复目录中备份的表空间: RMAN> list backupset of datafile 1;
7.4.备份数据文件RMAN> run {
2> allocate channel dev1 type "SBT_TAPE";
3> copy datafile "/oracle/dbs/temp.dbf" to "/oracle/backups/temp.dbf";
4> release channel dev1;
5> }使用下面的命令显示恢复目录中的文件拷贝:RMAN> list copy of datafile "/oracle/dbs/temp.dbf";拷贝数据文件和备份数据文件是不一样的,数据文件拷贝是一个该文件的镜像。文件的备份产生一个备份集。
7.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> }注意:数据库完全备份将自动备份控制文件。
8.归档模式下的备份数据库状态:恢复目录:打开目标数据库:例程启动,数据库加载或者打开备份操作使用的命令与非归档模式下基本一样。
8.1. Backing up archived logs 备份归档日志下面的脚本备份归档日志:RMAN> run {
2> allocate channel dev1 type disk;
3> backup
4> format "/oracle/backups/log_t%t_s%s_p%p"
5> (archivelog all)
6> release channel dev1;
7> }下面的脚本归档日志从# 90 to 100:RMAN> run {
2> allocate channel dev1 type disk;
3> backup
4> format "/oracle/backups/log_t%t_s%s_p%p"
5> (archivelog from logseq=90 until logseq=100 thread 1);
6> release channel dev1;
7> }下面的脚本备份在24小时内产生的归档日志,在备份完成后会自动删除归档日志。如果备份失败,归档日志不会被删除。RMAN> run {
2> allocate channel dev1 type disk;
3> backup
4> format "/oracle/backups/log_t%t_s%s_p%p"
5> (archivelog from time "sysdate-1" all delete input);
6> release channel dev1;
7> }使用下面的命令显示恢复目录中的归档日志:RMAN> list backupset of archivelog all;注意:RMAN找到归档日志后会备份指定日志,如果无法找到日志,它也不会返回错误信息。
8.2. Backing up the online logs 备份联机日志联机日志不能用RMAN来备份,必须先将其归档。为了实现这点,
必须在RMAN中执行如下SQL语句:
RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter system archive log current";
4> backup
5> format "/oracle/backups/log_t%t_s%s_p%p"
6> (archivelog from time "sysdate-1" all delete input);
7> release channel dev1;
8> }上面的脚本可以在执行完一个完整的联机数据库备份后执行,确保所有的重做日志可以将数据库恢复到一个一致性的状态。注意:不可以标识归档日志备份集。
10. 恢复恢复案例如下:10.1. Database open,datafile deleted 数据库打开时,文件被删除数据文件在数据库打开时被删除。有两种方法可以对打开的数据库进行恢复:还原数据文件或者表空间。下面两个实例显示了该方法:
(a) Datafile recovery 数据文件恢复
RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter tablespace users offline immediate";
4> restore datafile 4;
5> recover datafile 4;
6> sql "alter tablespace users online";
7> release channel dev1;
8> }(b) Tablespace recovery 表空间恢复RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter tablespace users offline immediate";
4> restore tablespace users;
5> recover tablespace users;
6> sql "alter tablespace users online";
7> release channel dev1;
8> }注意:如果还原系统表空间文件,数据库必须关闭,因为系统表空间不可以脱机。
10.2. Complete restore (lost online redo) and rollforward - database closed 完全还原(丢失联机日志)并且前滚 -
数据库关闭
RMAN> run {
2> allocate channel dev1 type disk;
3> set until logseq=105 thread=1;
4> restore controlfile to "/oracle/dbs/ctrltargdb.ctl";
5> replicate controlfile from "/oracle/dbs/ctrltargdb.ctl";
6> restore database;
7> sql "alter database mount";
8> recover database;
9> sql "alter database open resetlogs";
10> release channel dev1;
11> }Notes:"set until" 命令指明恢复到指定的日志文件。这一点在数据文件恢复时很重要,否则RMAN将试图恢复最近的数据文件,该数据文件可能在指定的日志以前。"replicate controlfile" 复制还原的控制文件到INIT.ORA指定的控制文件。如果数据库使用WITH RESETLOGS打开,则需要使用RESET DATABASE命令注册改变后的数据库。在使用RESETLOGS命令打开数据库后强烈建议做一个完全的数据库备份。
10.3. 还原数据文件的子集,完全恢复RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter database mount";
4> restore datafile 2;
5> restore datafile 3;
6> restore archivelog all;
7> recover database;
8> sql "alter database open";
9> release channel dev1;
10> }
11. 脚本创建或者取代脚本:
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> replace script backup_db_full {
2> # Performs a complete backup
3> execute script alloc_disk;
4> backup
5> .....
6> execute script rel_disk;
7> }前两个脚本分别用来分配和回收通道。alloc_disk 脚本还额外指定了备份片的最大兆字节数,备份时可以同时打开的输入文件的最大数目,以及每秒钟读每个输入文件的数据缓冲区的最大数目。第三个脚本调用先前存储的两个脚本进行数据库备份。运行存储脚本的示范:
RMAN> run {
2> execute script backup_db_full;
3> }注意:存储的脚本必须在{ .... execute

阅读(1431) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~