分类: Oracle
2009-02-05 19:39:11
一、Oracle RMAN快速入门指南 前言 这篇文章主要介绍RMAN的常用方法,其中包含了作者一些自己的经验,里面的实验也基本全在WIN 2K和ORACLE 8.1.6环境下测试成功(因为这个环境比较容易实现)。 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:\oracle\oradata\rman\rman_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为交互式命令行处理界面,也可以从企业管理器中运行。 为了使用下面的实例,先检查环境符合: the target database is called "his" and has the same TNS alias user rman has been granted "recovery_catalog_owner "privileges 目标数据库的连接用户为internal帐号,或者以其他SYSDBA类型帐号连接 the recovery catalog database is called "rman" and has the same TNS alias the schema containing the recovery catalog is "rman" (same password) 在使用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/rman@rman RMAN> connect target % rman rman_ts rman/rman@rman target internal/ 4.3.使用RMAN 一旦连接到目标数据库,可以通过交互界面或者事先存储的脚本执行指定RMAN命令,下面是一个使用RMAN交互界面的实例: RMAN> resync catalog; RMAN-03022:正在编译命令:resync RMAN-03023:正在执行命令:resync RMAN-08002:正在启动全部恢复目录的 resync RMAN-08004:完成全部 resync 使用脚本的实例: RMAN> execute script alloc_1_disk; 创建或者替代存储的脚本: RMAN> replace script alloc_1_disk { 2> allocate channel d1 type disk; 3> } 5.注册或者注销目标数据库 5.1.注册目标数据库 数据库状态: 恢复目录状态:打开 目标数据库:加载或者打开 目标数据库在第一次使用RMAN之前必须在恢复目录中注册: 第一步,启动恢复管理器,并且连接目标数据库: C:\>rman target internal/oracle@his catalog rman/rman@rman 恢复管理器:版本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 internal/oracle@his catalog rman/rman@rman 恢复管理器:版本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:\ORACLE\ORA81\DATABASE\02EU4DMU_1_1 数据文件包括列表 文件 名称 LV 类型 检查点SCN 检查点时间 ---- ------------------------------------- -- ---- ---------- ------------- 3 D:\ORACLE\ORADATA\HIS\USERS01.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:\ORACLE\ORA81\DATABASE\02EU4DMU_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> } 行# 2: 表明该行为注释行(#是注释符) 3&9: See section 15 - Channels通道定义 5: Full backup (default if full or incremental not specified)完全备份模式(缺省模式) 6: Meaningful string (<=30 chars)(备份集标识,<=30个字符) 7: Filename to use for backup pieces, including substitution variables. 备份片使用的文件名,可以包含代替变量。 8: Indicates all files including controlfiles are to be backed up表明备份所有数据文件包括控制文件 通过下面的命令显示恢复目录中记载的备份集信息: RMAN> list backupset of database; 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: [ 本帖最后由 rollingpig 于 2006-11-6 09:16 编辑 ] |
您对本贴的看法: |
天使 UID:38649 注册:2003-1-9 最后登录: 2009-02-02 帖子: 精华: 状态:...离线... [] [] [博客] |
|