动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息



本月文章推荐
.DBA 应遵循的 Oracle 调优原则.
.buffer cache深度分析之buffer c.
.Oracle 10g第2版新特性之SQL和PL.
.[Oracle]浅谈保证安全性的策略和.
.如何利用QCTO开发可重复使用的测.
.Oracle数据库技术(12).
.Linux V2.2.X(i386体系结构)进.
.工作中遇到的oracle故障分析和处.
.Oracle 数据库管理脚本命名规范.
.Oracle 的 in 和 not in ――性能.
.ORACLE ERP导数据(BOM清单).
.Oracle数据库中分区表的操作方法.
.ORACLE SGA 的分配.
.用改变跟踪技术加速Oracle递增备.
.解析Oracle/Oracle Forms 的多用.
.Developer/2000 R2.1 中文版 在 .
.rman的增量备份恢复的测试问题.
.如何在Windows 2000下将Oracle完.
.存储参数(storage子句)含义及设.
.oracle的update问题.

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

发表日期:2008-2-9 |


媒体恢复分完全恢复和不完全恢复。不完全恢复可以恢复到指定的时刻或系统更改号,但不完全恢复之后剩余日志文件就不可用,必须重置日志序列号,用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;
上一篇:MIS系统实例中Oracle数据库的安全策略 人气:445
下一篇:用Oracle导入导出工具实现Oracle数据库移植 人气:366
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号