RMAN

In incomplete recovery, also known as point-in-time recovery, the
goal is to restore the database to its state at some previous target SCN or time.
Point-in-time recovery is one possible response to a data loss caused by, for instance, a user error or logical corruption that goes unnoticed for some time.

Point-in-time recovery is also your only option if you have to perform a recovery and discover that you are missing an archived log。Your only choice is to recover the database from the point in time of the restored backup, as far as the unbroken series of archived logs permits, then perform an OPEN RESETLOGS and abandon all changes in or after the missing log. (If you discover that you have lost archived logs and your database is still up, you should do a full backup immediately.)

If only one tablespace is affected by the data loss, you have the option of performing point-in-time recovery on that tablespace instead of the entire database.

[@more@]

RMAN

重新启动备份 对于异常结束了的备份,很多人可能不想再重新开始备份了吧,特别是备份到 90% 以上,因为异常原因终止了该备份,那怎么办呢?RMAN提供一个重新开始备份的方法,通过简单的命令,你就可以只备份那不到 1%的数据了。
RMAN> backup not backed up since time 'sysdate-14' database plus archivelog;

多级增量备份............................................................ 1

并行备份,恢复........................................................ 5

减少所需要的备份数据量......................................... 5

使用简单.................................................................... 5

配置RMAN.................................................................... 6

CATALOG数据库.................................................... 6

磁带接口.................................................................... 7

多级备份策略............................................................ 7

维护RMAN.................................................................. 12

检查RMAN备份信息.............................................. 12

RMAN信息同步..................................................... 12

使用RMAN进行恢复.................................................. 13

恢复整个数据库...................................................... 13

恢复单个表空间...................................................... 13

多级增量备份

例子:第一个星期天做一个增量的0级备份,然后在星期一,星期二做一个增量的2级备份,在星期三做一个增量的1级备份,然后类推。假设现在在星期五数据库需要做恢复,则可以先恢复第一个星期天的0级备份,然后恢复星期三的1级备份,再恢复星期四和星期五的2级备份就可以完成数据库的恢复。

Rman + crontab
#
周天运行level 0,周三level 1,其他时间都是level 2
#
需要建立以下几个脚本存放在/u01/rmanbak/script/

#步骤一:创建6个备份脚本如下
#
脚本1bakl0
bakl0.sh
#
脚本2bakl1 bakl1.sh
#
脚本3bakl2 bakl2.sh

bakl0 0级增量备份脚本!bakl0

run {

allocate channel 'dev1' type disk ;

allocate channel 'dev2' type disk ;

backup #无压缩

incremental level 0 tag sunday_inc0

format "/u01/rmanbak/inc0_%d_%u_%T"

database skip readonly; --(如果有只读表空间只需要写上skip readonly,下同)

sql 'alter system archive log current' ;

backup filesperset 3 archivelog all delete input;

release channel dev1;

release channel dev2;

}

bakl1 1级级增量备份脚本!bakl1

run {

allocate channel 'dev1' type disk ;

allocate channel 'dev2' type disk ;

backup incremental level=1 tag='inc1'

format='/rmanbak/inc0_%d_%u_%T'

database skip readonly;

sql 'alter system archive log current' ;

backup filesperset 3 archivelog all delete input;

release channel dev1;

release channel dev2;

}

bakl2级增量备份脚本! bakl2

run {

allocate channel 'dev1' type disk ;

allocate channel 'dev2' type disk ;

backup

incremental level=2 tag='inc2'

format='/rmanbak/inc0_%d_%u_%T'

database skip readonly;

sql 'alter system archive log current' ;

backup filesperset 3 archivelog all delete input;

release channel dev1;

release channel dev2;

}

××案例开始××

(注意 : 带压缩的备份与上面不带压缩的备份的写法的迥异)

#bakl2级增量备份
run {
allocate channel d1
device type disk;
backup
as compressed backupset #带压缩
incremental level=2
format='/rmanbak/inc0_%d_%u_%T'
tag='inc2'
channel=d1
database;
release channel d1;
}

××案例结束××

#以下为bakl0.sh bakl1.sh bakl2.sh 的三个脚本

oracle@tone script]$ vi bakl0.sh

#<1>环境变量!

ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE

ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME

ORACLE_SID=orcl; export ORACLE_SID

PATH=$HOME/bin:$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib; export LD_LIBRARY_PATH

LC_CTYPE=en_US.UTF-8; export LC_CTYPE

# <2>调用备份脚本

/u01/app/oracle/product/10.2.0/db_1/bin/rman

msglog=/u01/rmanbak/log/inc0`date +%Y%m%d%k%M`.log

target system/manager@targetname catalog rman/rman@catalog_tnsname cmdfile=/u01/rmanbak/script/bakl0

#复制 bakl1.sh bakl2.sh,然后稍微修改一下即可
[oracle@tone script]$ cp bakl0.sh bakl1.sh
[oracle@tone script]$ cp bakl0.sh bakl2.sh

设置脚本为可执行权限!
[oracle@tone script]$chmod a+x bak*
[oracle@tone script]$ ls
al

Crontab 设置!,需要注意的crontab配置文件
#/etc/cron.deny
不能有oracle 用户!以root用户执行.
[oracle@tone script]#crontab -e -u oracle
45 23 * * 0 /u01/rmanbak/script/bakl0.sh #
周日的2345分执行0级增量备份脚本

45 23 * * 1 /u01/rmanbak/script/bakl1.sh

45 23 * * 2 /u01/rmanbak/script/bakl1.sh

45 23 * * 3 /u01/rmanbak/script/bakl2.sh

45 23 * * 4 /u01/rmanbak/script/bakl1.sh

45 23 * * 5 /u01/rmanbak/script/bakl1.sh

45 23 * * 6 /u01/rmanbak/script/bakl1.sh

编辑完重启crond服务!
[oracle@tone script]#/etc/init.d/crond restart

#2查看日志文件/var/log/message./etc/rmanbak/log/*.log

配置RMAN

配置RMAN包括配置CATALOG数据库,配置数据库与媒体管理软件的接口,制定RMAN的多级备份方案,写RMAN备份脚本

CATALOG数据库

配置CATALOG数据库:

1. create tablespace rman_ts datafile '/u02/oradata/rmants.dbf'' size 200M; #如果之前已经有表空间 可以后面加参数 reuse

2. 在该数据库创建RMAN数据库用户:

create user rman identified by rman

default tablespace rman_ts

temporary tablespace temp;

grant connect ,resource , RECOVERY_CATALOG_OWNER to rman.

3.创建恢复目录
$rman catalog rman/rman
rman>create catalog tablespace rman_ts;

4.连接到目标数据库和CATALOG数据库

$rman target system/manager@targetname catalog rman/rman@catalog_tnsname

rman>register database ; 一个恢复目录可以注册多个目标数据库

这样就可以利用该RMAN数据库来备份目标数据库了。

注销数据库不是简单的在 RMAN提示下反注册就可以了,需要运行一个程序包,过程如下:
1.
连接目标数据库,获得目标数据库 ID
$ RMAN target internal/password catalog rman/rman@rcdb;
2.
RMAN用户登录,查询恢复目录,得到更详细的信息
SQL> SELECT db_key, db_id FROM db WHERE db_id = 1231209694;
DB_KEY DB_ID
---------- ---------------
1 12376032941
row selected.
3.
运行过程 dbms_rcvcat.unregisterdatabase 注销数据库,
SQL> EXECUTE dbms_rcvcat.unregisterdatabase(1 , 1237603294)

备份CATALOG数据库(数据库逻辑输出)

exp pafile=exp.dat

其中exp.dat如下 : userid=rman/rman file=rmanexp.dmp

磁带接口

当使用专用的磁带管理工具时,必须配置数据库与磁带的接口,一般是管理工具提供一个动态连接库与数据库进行连。

以下是一个测试的RMAN脚本:

run {

allocate channel 'dev1' type disk

resync catalog;

backup format /archive/ctl%u_%p_%c current controlfile;

release channel dev1;

}

维护RMAN

RMAN的维护工作主要是:

1. 查看备份信息

2. 因为手工删除了备份文件或归档文件需要把RMAN CATALOG数据库的信息与手工删除的信息同步。

3. 如果不加以维护,具有 DELETE 状态的旧备份会一直驻留在恢复目录中。为了解决 这个问题,Oracle 提供了?/rdbms/admin/prgrmanc.sql,这个脚本可以删除恢复目录中具有 DELETE 状态的记录。

检查RMAN备份信息

检查最新的备份是否可恢复:
RMAN> RESTORE DATABASE VALIDATE;
RMAN> RESTORE DATABASE VALIDATE CHECK LOGICAL ;

RMAN的相关参数!

CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

RMAN> configure controlfile autobackup on;

RMAN> configure backup optimization on;

查询RMAN设置中非默认值:

SQL> select name,value from v$rman_configure;

显示恢复目录中的归档日志:
RMAN> list backupset of archivelog all;

RMAN>report schema;#查看当前所有的表空间

列出已经过时的备份:

RMAN>report obsolete;

定义 delete 通道:
RMAN> allocate channel for delete/maintenance type disk;

删除过时的备份信息

RMAN> allocate channel for maintenance type disk;

RMAN> change backupset id delete;

RMAN> release channel;

列出对应物:RMAN> list incarnation;列出备份概要信息:RMAN> list backup summary;按备份类型列出备份:RMAN> list backup by file;获得备份的详细信息:RMAN> list backup;列出过期的备份:RMAN> list expired backup;报告需要备份的数据文件RMAN> report need backup ;

报告备份冗余或恢复窗口:RMAN> report need backup redundancy=2; // 文件冗余备份少于 2 如果存在以前创建的备份数据想注册到目标数据库,可以采用如下手工方式加入到恢复目录中
RMAN> CATALOGdatafilecopy '/oracle/ .... /system01.dbf';
RMAN> CATALOG controlfilecopy '/oracle/CONTROL01.CTL.BCK';
RMAN> CATALOG archivelog '/oracle/arc001.log';

10g新特性:
1
.可以手工加入手工加入备份片,所以,只要你的备份还在,归档还在,即使 catalog database 崩溃,控制文件重建,照样可以用这些备份来做恢复。
RMAN> CATALOG backupiece '/oracle/xxxx';
2
.扫描整个目录,如果备份片或者归档日志文件太多,可以放到一个目录中,一次性扫描就行。
RMAN> CATALOG START WITH '/xxx/arch_logs';
当恢复目录管理的某个数据库进行了升级,只要版本不高于恢复目录就没有问题,下面的命令查询恢复目录的版本 (RMAN用户)
SQL> select version from rcver;
如果要高于恢复目录,那么恢复目录就必须进行升级。用下面的命令即可:RMAN> upgrade catalog;如果目标数据库物理对象发生了变化,如添加了一个数据文件,需要用如下命令同步:
RMAN> resync catalog;
如果目标数据库 reset 了数据库,需要用如下命令同步
RMAN> reset database;
打开数据库的时候,每次使用 resetlogs 参数都会创建数据库的一个新对应物。如果这个操作是在 rman 中完成的,rman 会自动更新恢复目录。如果是在 rman 之外完 成,如 sql*plus,那么就必须手工重置对应物。如:RMAN> reset database;另外有的时候,我们需要改成之前的某个对应物,可以用 list incarnation 来显示出对应物列表之后用下面的命令:RMAN> reset database to incarnation incarnation_num;

RMAN信息同步

当手工删除了数据库的归档文件后,要执行以下脚本进行同步:

RMAN> allocate channel for maintenance type disk;

RMAN> change archivelog all crosscheck;

RMAN> release channel;

当手工删除了数据库的RMAN备份文件后,要执行以下脚本进行同步:

RMAN> allocate channel for maintenance type disk;

RMAN> crosscheck backup;

RMAN> delete expired backup; -- 删除过期的备份

RMAN> delete obsolete; -- 删除废弃的备份
RMAN> release channel;

使用RMAN进行恢复

恢复整个数据库

在恢复整个数据库之前必须让数据库处于安装的状态(mount状态)

RMAN> startup mount rman> run {

allocate channel 'dev1' type disk ;

allocate channel 'dev2' type disk ;

restore database ;

recover database ;

alter database open;

release channel dev1 ;

release channel dev2 ;

}

基于SCN的恢复
$ startup mount;
RMAN> run{
allocate channel d1 type disk;
restore database until scn 1317011;
recover database until scn 1317011;
sql 'alter database open resetlogs';
release channel d1;}
基于时间的恢复
$ 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;}
基于日志序列的恢复
SQL> startup mount;
RMAN> RUN {
2> SET UNTIL SEQUENCE 120 THREAD 1;
4> RESTORE DATABASE;
5> RECOVER DATABASE; --recovers through log 119 not include 120
6> ALTER DATABASE OPEN RESESTLOGS;
7> }

备份恢复单个表空间

表空间备份脚本(以users表空间为例)

run {

allocate channel 'dev1' type disk ;

allocate channel 'dev2' type disk ;

backup tag 'tsusers' format '/o9i/testrman/basic%u_%p_%c' tablespace users;

sql 'alter system archive log current' ;

backup filesperset 3 archivelog all delete input;

release channel dev1;

release channel dev2;

}

有两种方法可以对打开的数据库进行恢复:还原数据文件或者表空间。如下所示:

(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> }

(c)恢复到一个不同的位置:

RMAN> RUN{

allocate channel dev1 type disk;

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;"

release channel dev1;

}

恢复SPFILE/控制文件 使用自动备份恢复 SPFILE/控制文件
RMAN> startup nomount;
RMAN> set dbid=153910023
RMAN> restore spfile/controlfile from autobackup
RMAN> restore spfile/controlfile from'/arch/ct_c-2347671489-20060630-00';
联机状态:目标数据库 MOUNT OPEN
RMAN> restore controlfile to 'd:tempcontrol01.ctl';
然后再执行恢复数据库的其他步骤:
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;

归档重做日志的还原
RMAN> run{
set archivelog destination to "d:temp";
restore archivelog all;}

要恢复坏块信息可以从报警与跟踪文件,表与索引的分析,DBV 工具或第三方媒体管理工具以及具体的查询语句中获得。
1. DBV
工具 dbv file=EYGLE.DBF blocksize=8192
2. RMAN> backup validatedatafile 4;

或者 BACKUP VALIDATE DATABASE备份的 坏块 信息 保存 在
V$BACKUP_CORRUPTION
V$COPY_CORRUPTION V$DATABASE_BLOCK_CORRUPTION 视图中。
V$BACKUP_CORRUPTION
显示历史讹误的视图
V$DATABASE_BLOCK_CORRUPTION
显示当前数据块讹误的视图。 一旦修正了数据库的块讹误,就需要重新运行 BACKUP VALIDATE DATABASE 命令,然后确认 V$DATABASE_BLOCK_CORRUPTION 中没有其他讹误。假设我们在查 询一个 Oracle 表的时候接收到下面的错误:
ERROR
位于第 1 :ORA-01578: ORACLE 数据块损坏(文件号 5,块号 97ORA-01110: 数据文件 5: 'E:xxxx.dbf'那么我们就可以在 RMAN中用 BLOCKRECOVER 命令来修复:
RMAN> BLOCKRECOVER DATAFILE 5 BLOCK97;
恢复V$DATABASE_BLOCK_CORRUPTION 视图中列出的坏块:
RMAN> blockrecover corruption list [ restore until time 'sysdate - 10' ];
恢复指定坏块:RMAN> blockrecover datafile 2 block 12,13 datafile 9 block 19;
RMAN> blockrecover tablespace system dba 44404,44405 from tag "weekly_backup";
RMAN> blockrecover tablespace system dba 44404,44405 restore until time 'sysdate-2';

使用 RMAN可以进行穿越 resetlogs 的恢复,即可以恢复到前一个对应物。10g 版本增强了这方面的功能。
(1)
使用恢复目录的情况下,恢复前一个对应物是非常简单的。 首先,用list incarnation;来显示有哪些对应物:RMAN> list incarnation;接下来,决定恢复到哪个对应物比如,决定恢复到上面的 4437方法:在 NOMOUNT 状态下用下面的命令:
RMAN> 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;

http://space.itpub.net/13873293/viewspace-604474

多级增量

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/630733/viewspace-1026254/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/630733/viewspace-1026254/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值