Chinaunix首页 | 论坛 | 博客
  • 博客访问: 894531
  • 博文数量: 206
  • 博客积分: 10276
  • 博客等级: 上将
  • 技术积分: 2358
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-01 02:41
文章分类

全部博文(206)

文章存档

2014年(1)

2013年(1)

2012年(2)

2011年(10)

2010年(14)

2009年(15)

2008年(33)

2007年(90)

2006年(40)

我的朋友

分类: Oracle

2008-09-05 07:58:47

接下来,决定恢复到哪个对应物

比如,决定恢复到上面的 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;

上面的例子中,我们最大可恢复到的  SCN  就是 3794934,因为 4437  的下一个对

应物的重置  SCN   3794935

(2)  不使用恢复目录的情况

不使用恢复目录的情况下,要恢复前一个对应物就必须要能恢复到前一对应物的控 制文件。不使用恢复目录,我们就无法使用  RESET DATABASE TO incarnation_num  命 令。

首先看看有哪些对应物:

RMAN> list incarnation;

数据库    Incarnations    列表

DB    关键字    Inc                                   关键字    DB                                      DB ID CUR    重置 SCN 重置时间

------- ------- -------- ---------------- --- ---------- ----------

1         1               MING             2600315304                NO         3501920        20-8     -06

2

2

MING

2600315304

NO

3785052

29-8  

-06

3

3

MING

2600315304

NO

3794049

29-8  

-06

4

4

MING

2600315304

NO

3794728

29-8  

-06

5

5

MING

2600315304

NO

3794935

29-8  

-06

 

6         6               MING             2600315304                YES       3976301             03-9      -06

假设我们要恢复到 56之间,那么就要看看有没有控制文件的备份的  SCN    3794935

3976301。我们使用下面的命令:

RMAN> LIST BACKUP OF CONTROLFILE BY FILE;

控制文件备份列表

===========================

CF Ckp SCN Ckp      时间           BS Key      S  段数  副本数  标记

---------- ---------- ------- - -------    ------- ---

3976095

03-9  

-06 34

A 2

1

TAG20060903T170136

3959239

03-9  

-06 30

A 1

1

 

3959170

03-9  

-06 29

A 1

1

 

3958983

03-9  

-06 28

A 1

1

 

3958937

03-9  

-06 27

A 1

1

 

 

3816575

30-8  

-06 11

A 2

1

TAG20060830T064447

可以看出,上面的列表中,控制文件都是可以用的。接下来找到一个具体的含有控制文

件的备份:

RMAN> LIST BACKUP OF CONTROLFILE;

备份集列表

===================

……

段名:E:\TEST\C-2600315304-20060830-07

控制文件包括: Ckp SCN: 3818213                            Ckp    时间:30-8      -06

……

假 设 我 们 使 用  E:\TEST\C-2600315304-20060830-07 ,那 么 接 下 来 我 们 需 要 用

DBMS_BACKUP_RESTORE  包来从这个文件中恢复控制文件。(在 SQLPLUS  中运行)

 

 

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP NOMOUNT;

SQL>DECLARE

DEVTYPE VARCHAR2(256);

DONE BOOLEAN;

BEGIN

DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);

DBMS_BACKUP_RESTORE.restoresetdatafile;

DBMS_BACKUP_RESTORE.restorecontrolfileto('/xxx/CONTROL01.CTL');

DBMS_BACKUP_RESTORE.restorebackuppiece('/xxx/C-2600315304-20060830-07',D

ONE=>done);

DBMS_BACKUP_RESTORE.restoresetdatafile;

DBMS_BACKUP_RESTORE.restorecontrolfileto('/xxx/CONTROL02.CTL');

DBMS_BACKUP_RESTORE.restorebackuppiece('/xxx/C-2600315304-20060830-07',D

ONE=>done);

DBMS_BACKUP_RESTORE.restoresetdatafile;

DBMS_BACKUP_RESTORE.restorecontrolfileto('/xxx/CONTROL03.CTL');

DBMS_BACKUP_RESTORE.restorebackuppiece('/xxx/C-2600315304-20060830-07',D

ONE=>done);

DBMS_BACKUP_RESTORE.devicedeallocate(NULL);

END;

/

SQL>ALTER DATABASE MOUNT;

 

重新联到 RMAN      再来运行一下 LIST INCARNATION;

$ RMAN TARGET /@MING NOCATALOG; RMAN> LIST INCARNATION;

数据库     Incarnations  列表

DB    关键字     Inc         关键字    DB               DB  ID                              CUR     重置    SCN

重置时间

------- ------- -------- ---------------- --- ---------- ----------

1

1

MING

2600315304

NO

3501920

20-8  

-06

2

2

MING

2600315304

NO

3785052

29-8  

-06

3

3

MING

2600315304

NO

3794049

29-8  

-06

4

4

MING

2600315304

NO

3794728

29-8  

-06

5

5

MING

2600315304

YES

3794935

29-8  

-06

 

可以看出来,我们已经恢复到想要的对应物上了。接下来:

RMAN> RESTORE DATABASE; RMAN> RECOVER DATABASE;

RMAN> ALTER DATABASE OPEN RESETLOGS;

 

4.7.6 RMAN增量备份

 

 

通过增量备份,RMAN  允许用户只备份上次增量备份操作以来被修改过的数据块。

N  级别增量备份备份从最近的  N  级别或者更小级别以来的所有更改过的数据块内容。0 级备份与全备份的不同就是  0  级备份可以作为其它增量备份的基础备份而全备份是不可 以的。

增量备份的优点:  节约备份时间节省备份磁带或者磁盘空间    降低网络带宽要求

增量备份的缺点:  恢复时间可能要长。

 

 

增量备份分为两种,一种是累积增量备份,一种是非累积增量备份。

差异增量备份(Differential Incremental Backup)

差异备份是默认的增量备份类型,备份上一次在同级或者更低级别进行备份以来所

有有变化的数据块。

RMAN>backup incremental level n (incremental) database;

累积增量备份(Cumulative Incremental Backup)

包括上一次低级备份以来所有有变化的数据块。累计增量备份增加了备份的时间, 但是因为恢复的时候,需要从更少的备份集中恢复数据,所以,为了减少恢复的时候,累计增量备份将比差异增量备份更有效。

RMAN>backup incremental level n (cumulative) database;

 

9i    不管怎么样增量备份,还是需要比较数据库中全部的数据块,这个过程其实是一个漫长的过程,而且由于增量备份形成多个不同的备份集,使得恢复变的更加不可靠而且速度慢, 所以增量备份在版本 9中仍然是鸡肋,除非是很大型的数据仓库系统,没有必要选择增量备份。

10g    在增量备份上做了很大的改进,可以使增量备份变成真正意义的增量,因为通过特

有的增量日志,使得 RMAN  没有必要去比较数据库的每一个数据块,当然,代价就是日志

IO与磁盘空间付出。另外,10g 通过备份的合并,使增量备份的结果可以合并在一起,

而完全的减少了恢复时间。

 

1  基本备份(0  级备份)

Level  0  是增量备份策略的基础(注意与 Full备份区别)。执行增量备份操作时,首先需要的是基本备份(incremental base backup),增量备份必须有一个基本备份。基本备份的增量 级别是  0,如果没有  0  级备份,那么其它级别的备份会自动转成基本备份。

0  级备份举例:

 

RMAN> run {

2> allocate channel dev1 type disk;

3> backup

4> incremental level 0

5> filesperset 4    #定义每个 backupset  的最大文件数

6> format "/oracle/backups/sunday_level0_%t"

7> (database);

8> release channel dev1;

 

 

使用 LIST语句查看,数据库备份集的列表显示中, "type"  将显示  "Incremental""LV"

列将显示"0"  

2  N  级备份

 

RMAN> run {

2> allocate channel dev1 type disk;

3> backup

4> incremental level 1/2/3/4

5> filesperset 4    #定义每个 backupset  的最大文件数

6> format "/oracle/backups/sunday_level0_%t"

7> (database);

8> release channel dev1;

9> }

 

3  N  级备份的规划

根据业务需求、数据量、恢复所需要的时间等方面考虑,制定合理的备份计划。 例:  一个典型的增量备份案例如下:

星期天晚上  - level 0 backup performed 星期一晚上  - level 2 backup performed 星期二晚上  - level 2 backup performed 星期三晚上  - level 1 backup performed 星期四晚上  - level 2 backup performed 星期五晚上  - level 1 backup performed 星期六晚上  - level 2 backup performed 星期天晚上  - level 0 backup performed

4  增量备份的恢复

同普通的完全恢复:  restore    recover

RMAN自动确定和使用需要的备份集。

 

4.7.7 RMAN备份的优化

 

可以在 RMAN配置中设置备份的优化,如

RMAN> CONFIGURE BACKUP OPTIMIZATION ON;

如果优化设置打开,将对备份的数据文件、归档日志或备份集运行一个优化算法。

 

RMAN备份操作主要是完成以下三个步骤

1、从磁盘上读取数据

2、在内存中处理数据块

3、写入数据到磁盘或磁带

以上的读写操作可以同步或异步的完成,在同步 I/O操作中,一个时间只允许有一个 IO 操作,但是在异步 I/O操作中,一个时间允许有多个 IO操作。因此,备份与恢复的调优主 要集中在以下几个方面:

1  提高同步或异步 I/O操作能力

                                                TAPE_AYSNCH_IO,DISK_ASYNCH_IO BACKUP_TYPE_IO_SLAVES 来支持异步操 作,提高写的能力。

2  提高磁盘读能力

可以在  backup命令后通过设置  DISKRATIO来保证从多个磁盘上读取数据,保证 连续的数据流。

3  正确设置缓冲区与参数值

设置  LARGE_POOL_SIZE , 使 备 份 可 以 使 用 连 续 的缓冲 池 , 通 过 设 置

DB_FIL_DIRECT_IO_COUNT  可以提高缓冲区的利用。如果使用磁带备份,还可以设 置 BACKUP_TYPE_IO_SLAVES 来提高磁带的写能力。

4  采用并行备份

开辟多个通道,可以实现并行备份与恢复

 

4.7.8 DBMS_BACKUP_RESTORE 

 

这个包是  RMAN  备份与恢复的核心,在调试模式下,RMAN  会输出它调用的每一条命 令:

C:\> rman debug target /@tlgaxz catalog rman/rman@reco trace=debug.txt

常用命令:

restoreSetDataFile               指示还原操作的开始(但是不会执行实际的还原操作) restoreSetDataFileTo     定义要还原的数据文件和该文件的还原位置 restoreControlFileTo 定义控制文件的还原位置

restoreSpfileTo                     定义要还原的  spfile 的位置

restorebackuppiece             执行实际的还原操作,这个函数的一个参数是备份文件名

devicedeallocate                  释放  deviceallocate 函数所分配的设备 deviceallocate          分配用于连续  I/O的设备 applySetDataFile      指示增量还原操作的开始 applyDataFileTo    定义数据文件的增量还原位置 applybackuppiece        执行实际的还原操作 resetoreSetArchivelog    指示归档日志还原操作的开始

restoreArchivelog                 定义要还原的归档的重做日志序列和线程

 

 

例:使用  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('d:\spfile.ora');

DBMS_BACKUP_RESTORE.restorebackuppiece('d:\C-2600315304-20060829-00',

DONE=>done);

DBMS_BACKUP_RESTORE.devicedeallocate(NULL);

END;

/

 

『完』

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