分享
 
 
 

RESETLOGS后没有备份情况下的数据恢复(1)

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

媒体恢复分完全恢复和不完全恢复。不完全恢复可以恢复到指定的时刻或系统更改号,但不完全恢复之后剩余日志文件就不可用,必须重置日志序列号,用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;

媒体恢复分完全恢复和不完全恢复。不完全恢复可以恢复到指定的时刻或系统更改号,但不完全恢复之后剩余日志文件就不可用,必须重置日志序列号,用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;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有