Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1278135
  • 博文数量: 1211
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 14340
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-09 11:20
文章分类

全部博文(1211)

文章存档

2011年(1)

2008年(1210)

我的朋友

分类: 服务器与存储

2008-06-16 20:31:32

媒体恢复分完全恢复和不完全恢复。不完全恢复可以恢复到指定的时刻或系统更改号,但不完全恢复之后剩余日志文件就不可用,必须重置日志序列号,用RESETLOGS选项打开数据库,此后数据库变成一个新形体,为了将来的恢复,必须重做一致备份。而且,RESETLOGS之前的备份已不可用。但是,很可能在RESETLOGS后没有做数据库的一致备份,而数据库又不认识RESETLOGS之前的备份,此时该如何恢复RESETLOGS后的数据呢?

虽说本文提供的技术能实现用RESETLOGS之前的备份恢复到RESETLOGS之后某一时刻的数据,但这也是挽救措施,笔者强烈建议读者要做RESETLOGS之后的一致数据库备份。

本文技术的理论基础

Oracle仅根据系统更改号(SCN)进行恢复操作,所有数据文件必须恢复到同一时间点,并在该点后未作任何改动,才能打开数据库。数据库的SCN是唯一的,并随着数据库生存期间的操作事务增加而增加(可能不连续)。SCN的值永远不会为0,除非重新创建数据库。SCN的序列的递增性不随数据库的任何操作而改变,即使是RESETLOGS也如此。RESETLOGS清除所有联机日志文件中未应用的重做记录,RESETLOGS只重置日志文件的序列号为1,但对SCN无影响,SCN仍按原序列递增。

在控制文件中保存resetlogs SCN和计数器,以便唯一地标识用RESETLOGS选项执行的每一次打开数据库的操作。这个值被写进每个数据文件头以及重做日志文件。如果重做日志文件的日志序列号与Oracle的要求值不相符,则在恢复中不能应用重做日志文件。执行不完全恢复后,数据库要求日志序列号为1的日志文件,所以原来的日志序列中剩余的日志文件将不可用。RESETLOGS操作创建数据库的新形体,即一个拥有从1开始的新的日志序列号流的数据库。

根据以上理论,SCN为顺序数据流,在数据库存在期间始终递增,而日志文件序列流也是递增序列,只不过会因RESETLOGS而重置,但日志文件序列流中的SCN序列流却保持递增不便。因此可以用RESETLOGS之前的归档日志流和RESETLOGS之后的归档日志流来连接和延续SCN序列流,这样就实现了用RESETLOGS之前的备份恢复RESETLOGS之后的数据。前提是保证两股日志流(RESETLOGS之前的归档日志流和RESETLOGS之后的归档日志流)完整,并且有相应两股日志流的控制文件。

即使能够挽救数据,也要满足下列条件

(1)Oracle版本等于或高于7.3.3。

(2)能够成功实现RESETLOGS之前的不完全媒体恢复。

(3)RESETLOGS后没有提供一致备份。

(4)RESETLOGS之前提供一致性备份(冷或热)。

(5)必须备份RESETLOGS之前和之后的控制文件。

(6)分别保存RESETLOGS之前和之后的归档日志文件到不同位置,提供用于恢复的所有归档日志,并保证日志可用。

建议

(一)强烈建议RESETLOGS之后要备份数据库。

(二)在RESETLOGS前保证数据库以前备份的数据安全,在创建RESETLOGS之后的一个一致性备份之前,一定不可删掉在RESETLOGS前创建的一致数据库备份。如不是为了空间需要,建议永久保留RESETLOGS前创建的一致数据库备份,包括数据文件、控制文件和归档日志。

(三)在RESETLOGS之后立即创建控制文件备份,并把归档日志单独存放。

(四)在以RESETLOGS方式打开数据库前,备份在恢复中用过的所有归档日志和联机重做日志。

(五)进行RESETLOGS后,备份alter.log文件,因为该文件保存着point-in-time恢复后记录的change#(系统更改号SCN)。

(六)把RESETLOGS之前和之后的归档日志文件保存到不同位置,用于恢复。因为可能存在如下情形:如果RESETLOGS之前和之后的归档日志文件保存到相同位置,而RESETLOGS之后的归档日志文件序列号从1开始,随着日志切换的不断发生,新的日志序列号要增长到与RESETLOGS之前日志序列号相同的时候,那时RESETLOGS之前的归档日志文件将被新日志文件覆盖,从而使RESETLOGS之前的日志序列出现空洞。

实例演示的详细过程

系统环境

● 软件环境:Windows Server 2000、Oracle Enterprise Edition 9.0.1、数据库SID:TEST

● 数据库文件的目录(文件)及意义:

f:\test 在线数据文件和归档日志文件

f:\test1、f:\test2、f:\test3 联机重做日志和在线控制文件

f:\cool\coola 时刻A点的一致性冷备份数据文件目录

f:\cool\archa_b 时刻A、B两点间的归档日志备份目录

f:\cool\archb_c 时刻B、C两点间的归档日志备份目录

f:\cool\ctl_a\ctl.ctl 时刻A点的控制文件备份

f:\cool\ctl_c\ctl.ctl 时刻C点的控制文件备份

操作过程

本例中首先建立试验用户demo和表空间demo,当前时刻记为A点,用户demo建立表a后,插入数据1、2、3,之后的时刻记为B点,接着插入数据4、5、6后的时刻记为B'点,接着模拟丢失B'点的数据文件,从A点恢复到B点,用RESETLOGS选项打开数据库后,再向表a插入数据7、8、9,之后的时刻记为C点。此时模拟丢失C点的数据文件,用A点的备份和A、B之间及B、C之间的归档日志加上A、C两点的控制文件将数据库恢复到C点。下列步骤中的第17步最为关键,详细步骤如下:

(1)准备工作:建立表空间demo和临时用户demo。

create tablespace demo datafile 'f:\test\demo.dbf' size 5M;
create user demo identified by demo 
default tablespace demo quota unlimited on demo 
temporary tablespace temp;
grant connect,alter system to demo;
alter user demo account unlock;

(2)以SYSDBA身份查看归档日志并关闭数据库。

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            f:\test
Oldest online log sequence     18
Next log sequence to archive   19
Current log sequence           19
SQL> shutdown;

(3)当前时刻记为A点,做数据库的一致冷备份。

copy  f:\test\*.dbf  f:\cool\coola
copy  f:\test1\ctl.ctl  f:\cool\ctl_a

(4)以试验用户demo登录,并插入数据到表a中。

create table a (i number);
commit;
insert into a values(1);
commit;
alter system switch logfile;
insert into a values(2);
commit;
alter system switch logfile;
insert into a values(3);
commit;
alter system switch logfile;

(5)记录当前时刻为B点。

SQL> select to_char(sysdate,'DD-MONTH-YYYY HH24:MI:SS') "DATE" from dual;
DATE
--------------------------
04-OCTOBER  -2002 09:18:52

(6)继续由用户demo向表a插入数据。

insert into a values(4);
commit;
alter system switch logfile;
insert into a values(5);
commit;
alter system switch logfile;
insert into a values(6);
commit;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;

(7)记录当前时刻为B'点。

SQL>  select to_char(sysdate,'DD-MONTH-YYYY HH24:MI:SS') "DATE" from dual;
DATE
--------------------------
04-OCTOBER  -2002 09:21:13

(8)以SYSDBA身份查看归档日志并关闭数据库。

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            f:\test
Oldest online log sequence     27
Next log sequence to archive   28
Current log sequence           28
SQL> shutdown

(9)模拟丢失所有当前(B'点)数据文件和控制文件。首先保存归档日志文,再把点A的数据文件和控制文件恢复到在线数据文件的目录。

del  f:\test\*.dbf
copy  f:\test\*.arc  f:\cool\archa_b
copy  f:\cool\coola\*.dbf  f:\test
copy  f:\cool\ctl_a\ctl.ctl  f:\test1
copy  f:\cool\ctl_a\ctl.ctl  f:\test2
copy  f:\cool\ctl_a\ctl.ctl  f:\test3

(10)以SYSDBA身份登录,执行从时刻A到时刻B的基于时间点的不完全媒体恢复,因为媒体恢复过程使用时刻A的控制文件,所以要加上using backup controlfile子句。

conn /@test as sysdba
startup mount
SQL> recover database until time '2002-10-04:09:18:52' using backup controlfile;
ORA-00279: change 690619 generated at 10/04/2002 08:56:01 needed for thread 1
ORA-00289: suggestion : F:\TEST\ARCH19.ARC
ORA-00280: change 690619 for thread 1 is in sequence #19

Specify log: {

接下来顺序应用归档日志文件直到日志序列号为22的日志文件f:\cool\archa_b\arch22.arc,注意归档日志文件的目录为f:\cool\archa_b。

(11)以SYSDBA身份打开数据库,因为是不完全媒体恢复,所以要使用RESETLOGS选项。查看表demo.a,证实时刻B之前插入的数据已被恢复。

SQL> alter database open resetlogs;
SQL> select * from demo.a;
         I
----------
         1
         2
         3

(12)以demo用户登录数据库,接着向表a插入数据。

insert into a values(7);
commit;
alter system switch logfile;
insert into a values(8);
commit;
alter system switch logfile;
insert into a values(9);
commit;
alter system switch logfile;

alter system switch logfile;
alter system switch logfile;
alter system switch logfile;

(13)记录当前时刻为C点。

SQL> select to_char(sysdate,'DD-MONTH-YYYY HH24:MI:SS') "DATE" from dual;
DATE
--------------------------
04-OCTOBER  -2002 10:04:46

(14)以SYSDBA身份查看归档日志并关闭数据库。

SQL> conn /@test as sysdba
Connected.
SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            f:\test
Oldest online log sequence     6
Next log sequence to archive   7
Current log sequence           7
SQL> shutdown

由此可见,RESETLOGS后日志序列号从1重新开始。

(15)不备份C点的数据文件,但要备份C点的控制文件和时刻B和时刻C之间的归档日志。删除当前(时刻C)数据文件,从A点复制数据文件和控制文件到当前位置。

del  f:\test\*.dbf
copy  f:\test\*.arc  f:\cool\archb_c
copy  f:\test1\ctl.ctl  f:\cool\ctl_c
copy  f:\cool\coola\*.dbf  f:\test
copy  f:\cool\ctl_a\ctl.ctl  f:\test1
copy  f:\cool\ctl_a\ctl.ctl  f:\test2
copy  f:\cool\ctl_a\ctl.ctl  f:\test3

(16)以SYSDBA身份登录,执行从时刻A到时刻B的基于时间点的不完全媒体恢复,因为媒体恢复过程使用时刻A的控制文件,所以要加上using backup controlfile子句。该步骤类似于步骤(10)。

conn /@test as sysdba
startup mount
recover database until time '2002-10-04:09:18:52' using backup controlfile;

(17)该步骤最为关键!!不要打开数据库。首先关闭数据库,然后把C点的控制文件恢复到在线控制文件的位置,然后用C点的控制文件恢复步骤(16)结束之后的数据文件,恢复进程会自动应用时刻B和时刻C之间的归档日志文件,从序列号为1的归档日志arch1.arc开始。注意:本例执行的是完全媒体恢复,必须在不丢失联机重做日志文件的情况下。否则,要恢复联机重做日志文件。当然,也可执行不完全媒体恢复,恢复到时刻B和时刻C之间的任一时刻。本步骤的关键技术在于要备份时刻C的控制文件,并用它实现跨越时刻B的媒体恢复。

SQL> shutdown
copy  f:\cool\ctl_c\ctl.ctl  f:\test1
copy  f:\cool\ctl_c\ctl.ctl  f:\test2
copy  f:\cool\ctl_c\ctl.ctl  f:\test3
SQL> conn /@test as sysdba
Connected to an idle instance.
SQL> startup mount
SQL> recover database;
ORA-00279: change 690773 generated at 10/04/2002 09:59:31 needed for thread 1
ORA-00289: suggestion : F:\TEST\ARCH1.ARC
ORA-00280: change 690773 for thread 1 is in sequence #1

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
f:\cool\archb_c\arch1.arc
ORA-00279: change 690989 generated at 10/04/2002 10:04:11 needed for thread 1
ORA-00289: suggestion : F:\TEST\ARCH2.ARC
ORA-00280: change 690989 for thread 1 is in sequence #2
ORA-00278: log file 'f:\cool\archb_c\arch1.arc' no longer needed for this
recovery

……  ……

Log applied.
Media recovery complete.

(18)打开数据库,查看表demo.a,结果显示没有丢失时刻B和时刻C之间插入的数据7、8、9。

SQL> alter database open;
Database altered.
SQL> select * from demo.a;
         I
----------
         1
         2
         3
         7
         8
         9
6 rows selected.

(19)马上做数据库的一致备份(冷备份或热备份)。

附加说明

另外要指出,如果忘记或不能提供时刻B的准确时间,可以查看报警日志文件,搜索"change",找到系统更改号(SCN),也可在步骤(10)和步骤(16)中指定基于改变的恢复。命令格式如下:

recover database until change integer_scn [using backup controlfile]

注:integer_scn要用整数SCN替换。

本例中,数据库TEST的报警日志文件为f:\test\bdump\testALRT.log,在其中找到以下片段:

Fri Oct 04 09:57:15 2002
ALTER DATABASE RECOVER    LOGFILE 'f:\cool\archa_b\arch22.arc'  
Media Recovery Log f:\cool\archa_b\arch22.arc
Incomplete recovery done UNTIL CHANGE 690772
Media Recovery Complete
Completed: ALTER DATABASE RECOVER    LOGFILE 'f:\cool\archa_b
Fri Oct 04 09:59:31 2002
alter database open resetlogs

Fri Oct 04 09:59:31 2002
RESETLOGS after incomplete recovery UNTIL CHANGE 690772
Resetting resetlogs activation ID 1770840999 (0x698ce3a7)

由此可发现恢复到时刻B(2002-10-04:09:18:52)的SCN为690772,可以在不完全恢复中指定恢复到更改号690772,如下语句所示:

recover database until change 690773 using backup controlfile;

数据库执行过不完全恢复后,并在以RESETLOGS选项打开之前,SCN已经记录在报警日志文件中,也可以通过查询

select  RESETLOGS_CHANGE#-1  from  v$database;

找到SCN,这个结果与报警日志中的SCN相同,这样就可以恢复到该SCN。

 

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

chinaunix网友2010-05-23 17:30:56

现代企业将企业中的IT部门的职能全部或部分外包,集中精力发展企业的核心业务,这种形式已成为IT管理及应用向专业化发展的趋势,并日趋完善。炫天技术作为专业的IT服务提供商,帮助企业简化IT管理提升IT服务品质,节省IT投入成本,为用户提供专业的服务,进而满足用户深层次个性化服务需求。   天毅[url=http://www.591itwaibao.cn/]IT外包[/url]服务,就是客户将全部或部分IT工作包给专业性公司完成的服务模式。客户整合利用其外部最优秀的IT专业化资源,从而达到降低成本、提高效率、充分发挥自身核心竞争力和增强客户对外环境的应变能力的一种管理模式。 根据现阶段中小企业自身发展需求,和发展方向。天毅网络进行广泛调查结合实际工作经验,为客户量身订做适合企业的IT维护及电子商务整体解决方案。让客户从基础的电脑维修、维护、[url=http://www.591itwaibao.cn/]网站建设[/url]、更新维护等琐事中解脱出来,专心做好企业核心业务,以低成本、高效率、高回报的方式,让企业更具竞争力,获得长期,稳定的发展。网址:[url=http://

chinaunix网友2010-05-23 17:30:27

我们想与各界的朋友进行交换链接网址[url=http://www.591itwaibao.cn]http://www.591itwaibao.cn[/url] 关键词:[url=http://www.591itwaibao.cn]上海网站建设[/url]|[url=http://www.591itwaibao.cn]IT外包[/url]|[url=http://www.591itwaibao.cn]企业网络维护[/url]|[url=http://www.591itwaibao.cn]视频监控[/url]|[url=http://www.591itwaibao.cn]网站优化[/url]|[url=http://www.591itwaibao.cn]门禁考勤[/url]. 天毅网络是专业从事企业【IT外包】智能弱电工程、网络组建维护、网站SEO优化、网站建设【视频监控、门禁考勤系统】电脑上门维修、系统集成服务!

chinaunix网友2009-02-24 00:40:36

mwjcora [url=http://www.3p.com.cn]交会[/url]

chinaunix网友2008-11-13 09:30:26

专业提供磁带机、磁带库维修、小型机MA服务 维修磁带机,磁带机维修,磁带库维修、磁带库驱动器专业维修 IBM RS/6000 、HP9000、 AS/400 、 DEC 、 COMPAQ SUN 、 SGI 等全系列小型机、IBM、HP、ADIC、QUNTUM、STK SUN、SONY全系列磁带库和HP 惠普磁带机, IBM 磁带机, COMPAQ 康柏磁带机, EXABYTE 磁带机, SONY 索尼磁带机, M4 磁带机等全系列磁带机的销售、系统集成、MA服务、升级改造、租赁、第三方保修,技术培训为一体。 全国技术支持电话:400-650-1165 电话: (010)65519288 传真: (010)65536134 24小时服务电话:15811009607 网址:http://www.bluex1.com

chinaunix网友2008-08-09 18:26:48

this is a tutorial version ONLY