http://space.itpub.net/24751738/viewspace-707559
RMAN可以进行增量备份:数据库,表空间,数据文件
只有使用过的block可以被备份成backup set
表空间与数据文件对应关系:dba_data_files / v$datafile_header
在noarchivelog模式下,可以使用RMAN备份read-only和offline的表空间
ORACLE RMAN停机备份:
备份
RMAN连接上ORACLE,WINDOWS下在命令模式下
RMAN TARGET /
连接本地数据库用的是本地认证模式。RMAN连接数据库必须在dedicate模式下。因此在share模式下的数据库应配置一个dedicate的连接用于RMAN连接。
如果要把控制文件、参数文件也一起备份
configure controfile autobackup on;//打开autobackup
|iSa&@q(k0configure controfile autobackup off;//关闭autobackupITPUB个人空间Z} qF3Kf
关闭数据库
(cK_[J0RMAN>shutdown immediateITPUB个人空间'y'D)l7pE y{
mount 数据库RMAN的备份必须在MOUNT模式下,这也就是控制文件备份的重要。
5M1@ Oe+y$Z0RMAN>startup mount
7M VXsa/d0最简单的备份ITPUB个人空间x5u$zI!A'cC
RMAN>backup databaseITPUB个人空间`V6T-J8EDJ
就这一句就OK了
%l,g.@mCu { s6~e$]0这样的备份,备份集在数据库默认位置。%oracle_home%/ora92/databaseITPUB个人空间6H0Hv!@|s
当然你也可以用run来灵活的定义你的备份。ITPUB个人空间{@3K,a~'?-@
RMAN>run{ITPUB个人空间R:H ysU:Azj
>allocate chennel d1 type disk; //分配通道ITPUB个人空间&NIu {H8p2x^ [Ui
>backup full database //全备份数据库ITPUB个人空间-s~%Y8STMaZ
>include current controlfile //包括当前的controlfileITPUB个人空间/yT&k:?:lh:U
>format 'e:\oracle\orders\db_%d_%s_%p_%t_%T'; //备份文件位置和文件名格式
/L4s:c5J_0>release channel d1;//释放通道
Md'@jXazZ\f'f0>}
恢复
*LK,dAF\6@T01、数据文件损坏,而控制文件是好,或者已经恢复
,[`-t[4} p$^Efl0 RMAN连上数据库
D7h zJO0 startup mountITPUB个人空间4X(oq r7r4c
restore databaseITPUB个人空间2O;y3^;d*py'R
recover database noredo;ITPUB个人空间4qiD*V.rz
alter database open resetlogs;ITPUB个人空间:d-fqV+`6S$h
recover database noredo该命令指示RMAN执行最后的恢复操作以准备打开这个数据库。因为是在NOARCHIVELOG模式下并且不应用任何归档的重做日志并且丢失了联机重做日志,所以要求在这条命令中使用noredo参数。
最后使用alter database open resetlogs打开数据库。由于已经还原了控制文件并且需要重新构建重做日志,所以必须用resetlogs。ITPUB个人空间e HB'x+C c
2、还原控制文件
+l9EXa6@g0startup nomount;
;D#xD j#tn0set dbid = <dbid>ITPUB个人空间#w&E1m/DI o}^
restore controlfile from autobackup ;ITPUB个人空间 B$J?"E4D
alter database mount;
6c)Fv ]DZj~ i0restore database;
,}0~+T[:R0recover database noredo;
%FP5R_&m0alter database open resetlogs;ITPUB个人空间#o!x:js s6L4a#R6t(v
alter database open;ITPUB个人空间\'K.g"Ql~
在这个例子中有一个DBID这个可以ITPUB个人空间"SVN|2^ p
select * from v$database中查到。但是一个数据库在控制文件坏掉了不能OPEN如何能看的到呢这就在平时把这个DBID记下来。ITPUB个人空间e:U6].k~b
这是最简单的用RMAN备份与恢复的例子,但从中可以看到RMAN备份与恢复的梗概。
ORACLE RMAN在线备份:
1. ORACLE RMAN在线备份之前需要切换日志方式为归档日志;
a. 关闭数据库ITPUB个人空间v`0?)b.l {
SQL> shutdown immediate;
b. 启动数据库到mount状态ITPUB个人空间zT_ nQ8My-[i
SQL> startup mount;
c. 启用归档模式
}y5dVEN$] D*CB0SQL> alter database archivelog;
d. 查看修改后的数据库备份和恢复策略及归档文件的位置ITPUB个人空间fuUU'G.\!?(D
SQL> archive log list;
注意:修改成archive模式之后,之前所有的数据库备份均无效。
e. 修改相应的初始化参数
bFoWV7s1A8E,Y0Oracle10g之前,你还需要修改初始化参数使数据库处于自动归档模式。ITPUB个人空间rl,SwX-yy4eq
可用SQL> show parameter log_archive_start;查看ITPUB个人空间"{txW&v#z tV
NAME TYPE VALUEITPUB个人空间%D ZK1~2Os
------------------------------------ ----------- --------------
&K(SV*vmj0v4Q0log_archive_start boolean FALSEITPUB个人空间 Y RwZ h5mQ"V-q
SQL> alter system set log_archive_start=true scope=spfile;
'hA+T$X-p0重启数据库此参数生效,此时数据库处于自动归档模式。
当然你也可以不做第5步,直接ITPUB个人空间7m E1UIjvK6jI
SQL>archive log start
"We-t_ R}0使数据库启用自动归档,但是重启后数据库仍然处于手工归档模式。
2. 运行:RMAN target /
3. RMAN信息保存:默认保存在control file中,保存周期7天
调整:alter system set control_file_record_keep_time=天数;
4. 搭建独立数据库保存RMAN备份信息
由于只有一个数据库,就建在本身数据库上
a. 创建表空间RC:create tablespace rc datafile size 10M autoextend on next 1M
b. 创建用户RC:
CREATE USER rc IDENTIFIED BY rc TEMPORARY TABLESPACE temp DEFAULT TABLESPACE rc QUOTA UNLIMITED ON rc;
c. 授权RC: GRANT RECOVERY_CATALOG_OWNER TO rc;
d. 搭建:
rman catalogrc/rc@orcl
RMAN>create catalog;
RMAN>exit
rman target / catalogrc/rc@orcl
RMAN>register database;
e. 使用:
rman target / catalogrc/rc@orcl
这种连接方式后,数据就会在控制文件和catalog各存一份
5. 全局参数配置:
查看:show all;
修改:configure 参数名称 具体设置
例如:修改是否自动保存control file:configure controlfile autobackup on;
恢复默认值:configure 参数名称 clear;
关键参数:
a. 保存周期:retention policy
默认是redundancy 1:保留一个备份;
可用值:recovery window of 7 days:保留可以满足7天恢复周期的备份
根据条件检查:report obsolete:RMAN会根据保存周期参数来列出可以删除的备份
删除多于备份:delete obsolete
b. 优化备份:backup optimization:RMAN会自动忽略已经备份过的内容(数据文件,归档日志,备份块)
前提:备份指定同一个channel
c. 默认备份渠道:default device type to disk:默认备份到磁盘,路径为flash recovery area
渠道类型:
disk:文件系统路径
flash recovery area:默认路径
sbt:磁带设备
修改到磁盘其他路径:configure channel device type disk format '路径/%U';
例如:configure channel device type disk format '/tmp/movedata/%U';
6. 备份结果
backupset:backup (as backupset) 备份内容,里面分割成一个或多个backup piece,只有该类型备份可以进行压缩。
copy:backup as copy 备份内容
按类型查看:
backupset 查看:list backup summary(list backupset summary)
查看详情:list backupset BS
copy查看:list copy
按内容查看:
整个数据库:list backup of database;
tablespace:list backup of tablespace users;
数据文件:list backup of datafile n;
控制文件:list backup of controlfile;
归档日志:list archivelog all;
按规则查看:
查看根据保存规则可删除文件:report obsolete;
查看根据保存规则需要备份内容:report
RMAN和OS结合检查:corsscheck 内容;
7. 备份方式
full:全备;
Incremental:增量备份
可以增量备份的类型:数据库,数据文件,表空间
a. 首先需要做level 0备份作为基础。例如:backup incremental level 0 备份内容;(备份内容:所有使用过的data block,和image copy不同)
b. 增量类型:
累计增量:backup cumulative level 1 备份内容;
差异增量:backup incremental level 1 备份内容;
区别:累计增量始终是基于level 0的备份;
第一次差异增量是基于level 0的备份;从第二开始就是基于前一次增量备份
c. Image备份增量方式:
第一次:以Image全备为基础;
第二次:基于全备,做增量备份;完成后合成成一个Image全备
第三次:基于第二次的Image全备,做增量备份;完成后合成成一个Image全备
实现:
例如:针对tablespace example
RUN {ITPUB个人空间Q7p+oH:k#Mbs X0{*_
RECOVER COPY OF tablespace example WITH TAG 'incr_update';ITPUB个人空间LtD`j,F#} [
BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_update'ITPUB个人空间@(_%}!I Q.j'R
tablespace example;
RUJ k"c0 }
d. 开启参数"block change tracking",可以提高速度
查看状态:SELECT status FROM v$block_change_tracking;
默认值:DISABLED
开启:ALTER DATABASE ENABLE BLOCK CHANGE TRACKING;(默认存放路径OMF中的DB_CREATE_FILE_DEST)
设置文件路径:
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/u01/oradata/MYSID/rman_change_track.f' REUSE;
关闭:ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;
备份并检查:bakcup check logical 备份内容;
不备份只是检查文件:backup validate 备份内容;
如果检查有报错,查看:v$backup_corruption;v$copy_corruption
8. 备份内容:
整个数据库:RMAN>backup database;
经典整库备份:backup as compressed backupset database include current controlfile plus archivelog delete input;
tablespace:RMAN>backup tablespace 名字;
数据文件:RMAN>backup datafile n; (n:具体的数据文件编号select file_name,file_id,tablespace_name from dba_data_files;)
控制文件:RMAN>backup current controlfile;
或者RMAN>backup database include current controlfile;
日志文件:RMAN>backup archivelog all;
或者RMAN>backup database plus archivelog;
参数文件:RMAN>backup spfile;
9. 还原
a. 完全恢复
方法一:从最近的备份集恢复整个数据库,数据库会自动运行redo和archive日志(完全恢复):
SQL>shutdown immediate
SQL>startup mount
RMAN>restore database;
RMAN>recover database;
RMAN>sql 'alter database open';
方法二:从tag恢复整个数据库,数据库也会运行redo 和archive 日志(完全恢复),结果与上面的脚本一样:
1. 查看标签:
RMAN> list backupset summary;ITPUB个人空间,jM(E U @$Du-@
Key TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
'@/jF/tRA!\'e0------- -- -- - ----------- --------------- ------- ------- ---------- ---
yR {6p)Z'N~.i q025 B A A DISK 25-JUL-11 1 1 NO TAG20110725T104634
(g;\,|$p_6X028 B 0 A DISK 25-JUL-11 1 1 NO TAG20110725T104645
1gE'jA3]LB$w)j029 B A A DISK 25-JUL-11 1 1 NO TAG20110725T104711
F` X9o+B4z^;Q[9{030 B F A DISK 25-JUL-11 1 1 NO TAG20110725T104713
~u-T}?;~031 B A A DISK 25-JUL-11 1 1 NO TAG20110725T105333ITPUB个人空间"JYE$eS fd
32 B A A DISK 25-JUL-11 1 1 NO TAG20110725T105350
NP WQ/V$U!f1@033 B 1 A DISK 25-JUL-11 1 1 NO TAG20110725T105353
S4RrV)c*pR$~034 B A A DISK 25-JUL-11 1 1 NO TAG20110725T105408
/LH7p E$k035 B F A DISK 25-JUL-11 1 1 NO TAG20110725T105411
/VpfN$^o*I:l036 B A A DISK 25-JUL-11 1 1 NO TAG20110725T111403
I](E,Qgm037 B 1 A DISK 25-JUL-11 1 1 NO TAG20110725T111405
.Qf ATp*} uE038 B A A DISK 25-JUL-11 1 1 NO TAG20110725T111421ITPUB个人空间)Wt"V,xQ5@4L5T
39 B F A DISK 25-JUL-11 1 1 NO TAG20110725T111423
2. 还原数据库:
SQL>shutdown immediate;ITPUB个人空间_{2LIP TT
SQL>startup mount;
&@Mr"y-T ?I0RMAN>restore database from tag TAG20110725T104645;
RMAN> recover database from tag TAG20110725T104645;
RMAN> alter database open;
b. 不完全恢复:
SQL>shutdown immediate;
l4]0esia0SQL>startup mount;
v'q2~R.U8u}9x0RMAN>restore database from tag TAG20110725T104645;
RMAN>recover database until time "to_date('2011-08-04 15:37:25','yyyy/mm/dd hh24:mi:ss')";
RMAN>alter database open resetlogs;ITPUB个人空间(u7w l^3X:}8SzF
注意:使用后所有的备份集都无效了,确保安全需要重新对数据库进行全备(ORACLE10G之后,resetlog之前的备份还是可以用的)
关键表空间恢复(system / undotbs1 / sysaux):
SQL>shutdown abort
SQL>startup mount
RMAN>restore tablespace 名字;
RMAN>recover tablespace 名字;
RMAN>sql 'alter database open';
非关键表空间恢复(example / users ):
select * from v$datafile_header; 表空间与数据文件对应关系
SQL>alter database datafile 数字 offline;
RMAN>restore tablespace 名字;
RMAN>recover tablespace 名字;
SQL>alter database datafile 数字 online;
10. 删除备份
所有backup备份集:delete backup;
所有copy备份机:delete copy;
特定备份机:delete backupset 19;
删除根据保存规则可删除文件:delete obsolete;
删除过期的备份:
delete expired backupset;
delete expired copy;
11. RUN块
例如:
RMAN> RUN {
T:[3w'IQ1U"I4C)i0 ALLOCATE CHANNEL c1 DEVICE TYPE sbt;
(zl&j+Ky*L0 ALLOCATE CHANNEL c2 DEVICE TYPE sbt;
;|3R(G$b)TC0 ALLOCATE CHANNEL c3 DEVICE TYPE sbt;
;R*?{%NA H0 BACKUP
6nj!lGvW$n,Y0 INCREMENTAL LEVEL = 0ITPUB个人空间M1v ~t#fQ
FORMAT '/disk1/backup/df_%d_%s_%p.bak'
9Kw"@%mK(U0 (DATAFILE 1,4,5 CHANNEL c1)ITPUB个人空间 ~^3X8tD0@QGV
(DATAFILE 2,3,9 CHANNEL c2)ITPUB个人空间!jemapN/v6Z
(DATAFILE 6,7,8 CHANNEL c3);ITPUB个人空间9`I(CQ9_0M3mr,wo
ALTER SYSTEM ARCHIVE LOG CURRENT;
V-]~2Z9~0 }
O^w x]!I-|wk"e012. 外部变量:
语言:set nls_lang=american
日期:set nls_date_format=yyyy-mm-dd....
13. RMAN sciprt
前提条件:有catalog
写法:(global表示可以由多个数据库调用)
create global script. 名
comment "备注说明"
{脚本内容}
例如:
create global script. abc
comment "test"
{backup current controlfile;}
调用:run {execute script. 名}
例如:run {execute script. abc;}
查看:print script. 名
改写:
replace global script. 名
comment "备注说明"
{脚本内容}
删除:delete script. 名;
14. 永久保留备份
条件是备份不能保留在flash recovery area中;
a. 创建备份:
RUN
{
m*Lr j*n:T Z0ALLOCATE CHANNEL c1 DEVICE TYPE disk format '/tmp/autobackup/%U';ITPUB个人空间!M-hPv K\1|
BACKUP tablespace example;ITPUB个人空间%k%Z |#] Hj!~
}
b. 查找该备份:
list backupset of tablespace example;
c. 修改属性为永久
change backupset 编号 keep forever nologs;
15. 建立多个固定大小的备份
例如:example 测试备份大小是大于50M
run
{
allocate channel c1 device type disk maxpiecesize 10M format '/tmp/autobackup/%U';
backup tablespace example;
}
/tmp/autobackup目录下有六个文件
16.运行脚本:backup recovery area
备份内容:
a. control file autobackup;
b. incremental backup sets
17.block change tracking
a. 针对整个数据库;
b. 默认存放路径:background_dump_dest