楼主: text1978

[FAQ] 冷备份还原数据库是不是不能前滚恢复?

[复制链接]
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
21#
发表于 2004-5-11 10:28 | 只看该作者
1、我备份的内容包括:在线日志、数据文件、控制文件,但不备份INIT.ORA.
      最后使用的在线日志是我特意保留用来恢复的(正常情况下,应假设其也被损毁),
   我想看到完全恢复,所以保留了最新的在线日志,因为最新的信息存在在线日志里
   (假设数据文件完全被损毁)。
2、recover database using backup controlfile UNTIL CANCEL
      从字面上也可以看懂这句话:使用备份的控制文件恢复数据库直到(DBA确认)取消!
   recover database until cancel 是指恢复数据库直到(DBA确认)取消!但不是使用备份的
   控制文件,可能控制文件是最新的。
   我做的确实是完全恢复,但ORACLE要求,对使用
   recover database using backup controlfile UNTIL CANCEL 语句进行恢复后,必须使用
   RESETLOGS打开数据库,没办法!
3、我使用了最新(最后)的在线日志,所以,完全恢复,我没测试不使用最新(最后)的
   在线日志的情况,但我想,应该也可以打开数据库,则此次就是通常的不完全恢复了!

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
22#
发表于 2004-5-11 10:31 | 只看该作者
最初由 shangym 发布
[B]我的理解,在线日志不用copy回去了吧 [/B]


我的理解,数据库正常关闭后,归档日志里的信息确实已经
包含在数据文件里。但由于我测试数据文件被损毁,使用旧的
数据文件来恢复,数据必须从最后的在线日志中读取,才能
“完全”恢复。

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
23#
发表于 2004-5-11 10:44 | 只看该作者
最初由 ZALBB 发布
[B]

我的理解,数据库正常关闭后,归档日志里的信息确实已经
包含在数据文件里。但由于我测试数据文件被损毁,使用旧的
数据文件来恢复,数据必须从最后的在线日志中读取,才能
“完全”恢复。 [/B]


你说的是对的,不过我的意思是说,如果当前的在线日志还在的话,那正好能利用备份的数据文件,新建的控制文件、归档日志和当前的在线日志来做恢复,这样是不需要把原来备份的在线日志也copy回来的吧?
冷备后数据库重新使用,冷备时刻的在线日志之后是会归档的,因此那个时刻的在线日志里的信息能从其后的归档日志里面找到

不知我理解有没有错误

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
24#
 楼主| 发表于 2004-5-11 10:44 | 只看该作者
冷备的时刻的在线日志是没有用的。因为这些信息最终会写到随后的归档中。
所以 ZALBB 你最后引用的 redo03.log一定是数据灾难前时刻的在线日志。

我的问题是 有数据库的一个完全冷备+冷备后所有的归档 ?是否可以前滚恢复。
答案在现在看来是不可以。有数据库的一个完全冷备+冷备后所有的归档是不可能完全恢复的,因为它“至少要丢失在线日志的内容”。如果可以恢复的话,只能恢复到最后一个归档。所以所有完全恢复的解决都是不符合的。

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
25#
发表于 2004-5-11 10:50 | 只看该作者
最初由 text1978 发布
[B]如果可以恢复的话,只能恢复到最后一个归档。所以所有完全恢复的解决都是不符合的。 [/B]


当前在线日志不在,不管什么方式都无法完全恢复,热备下来的数据文件,如果也没有当前在线日志,也不可能完全恢复

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
26#
发表于 2004-5-11 10:58 | 只看该作者

我不认同这句话

冷备的时刻的在线日志是没有用的。因为这些信息最终会写到随后的归档中。
--这些信息最终会写到随后的“数据文件”中。

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
27#
发表于 2004-5-11 11:03 | 只看该作者
最初由 shangym 发布
[B]

你说的是对的,不过我的意思是说,如果当前的在线日志还在的话,那正好能利用备份的数据文件,新建的控制文件、归档日志和当前的在线日志来做恢复,这样是不需要把原来备份的在线日志也copy回来的吧?
冷备后数据库重新使用,冷备时刻的在线日志之后是会归档的,因此那个时刻的在线日志里的信息能从其后的归档日志里面找到

不知我理解有没有错误 [/B]


1、能否用新建的控制文件来恢复,我不能确定,可能有点玄!
2、备份的日志是否有用,可能无用,因为可以使用
   数据文件结合控制文件使用UNTIL CANCEL来恢复。
   没有尝试,不好说。

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
28#
发表于 2004-5-11 11:08 | 只看该作者
我下午测一把,做完后把结果贴上来

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
29#
发表于 2004-5-11 13:31 | 只看该作者
测试一:
冷备份前test用户有表AA ,冷备份后删除表AA
做恢复时,仅恢复了所有的数据文件,未覆盖当前的控制文件和在线日志文件
恢复命令:recover database until cancel
恢复中指定了当前的在线日志,apply完成后用open resetlogs打开数据库
打开后表AA不存在,结果正确

这个恢复和用热备数据文件的恢复操作基本类似
[php]
SQL> alter system switch logfile;

System altered.

SQL> connect test/test
Connected.
SQL> drop table aa;

Table dropped.

SQL> create table aa (id number);

Table created.

SQL> insert into aa values(1);

1 row created.

SQL> commit;

Commit complete.

SQL> connect / as sysdba
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production
$ ls
bak  sdb
$ cd sdb
$ ls
control01.ctl  control03.ctl  example01.dbf  redo01.log     redo03.log     temp01.dbf     undotbs01.dbf  xdb01.dbf
control02.ctl  drsys01.dbf    indx01.dbf     redo02.log     system01.dbf   tools01.dbf    user01.dbf
[/php]
下面冷备所有数据文件、控制文件、在线日志文件[/COLOR]
[php]
$ cp * ../bak/
[/php]
重新启库,删除表AA[/COLOR]
[php]
$ sqlplus '/ as sysdba'

SQL*Plus: Release 9.2.0.4.0 - Production on Tue May 11 12:56:19 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  739740648 bytes
Fixed Size                   732136 bytes
Variable Size             301989888 bytes
Database Buffers          436207616 bytes
Redo Buffers                 811008 bytes
Database mounted.
Database opened.
SQL> connect test/test
Connected.
SQL> drop table aa;

Table dropped.

SQL> connect / as sysdba
Connected.
SQL> shutdown abort;
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production
[/php]
仅恢复所有的数据文件[/COLOR]
[php]
$ cd bak
$ ls
1_23.dbf       control02.ctl  drsys01.dbf    indx01.dbf     redo02.log     system01.dbf   tools01.dbf    user01.dbf
control01.ctl  control03.ctl  example01.dbf  redo01.log     redo03.log     temp01.dbf     undotbs01.dbf  xdb01.dbf
$ cp *.dbf ../sdb/
$ cd ../sdb
$ ls
1_23.dbf       control02.ctl  drsys01.dbf    indx01.dbf     redo02.log     system01.dbf   tools01.dbf    user01.dbf
control01.ctl  control03.ctl  example01.dbf  redo01.log     redo03.log     temp01.dbf     undotbs01.dbf  xdb01.dbf
[/php]
recover database[/COLOR]
[php]
$ sqlplus '/ as sysdba'

SQL*Plus: Release 9.2.0.4.0 - Production on Tue May 11 12:59:14 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to an idle instance.

SQL> startup mount;
ORACLE instance started.

Total System Global Area  739740648 bytes
Fixed Size                   732136 bytes
Variable Size             301989888 bytes
Database Buffers          436207616 bytes
Redo Buffers                 811008 bytes
Database mounted.
SQL> recover database until cancel;
ORA-00279: change 19677591 generated at 05/11/2004 12:54:13 needed for thread 1
ORA-00289: suggestion : /oracle/oradata/bak/1_24.dbf
ORA-00280: change 19677591 for thread 1 is in sequence #24


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: cannot open archived log '/oracle/oradata/bak/1_24.dbf'
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3


ORA-00308: cannot open archived log '/oracle/oradata/bak/1_24.dbf'
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3


SQL> recover database until cancel;
ORA-00279: change 19677591 generated at 05/11/2004 12:54:13 needed for thread 1
ORA-00289: suggestion : /oracle/oradata/bak/1_24.dbf
ORA-00280: change 19677591 for thread 1 is in sequence #24


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/oracle/oradata/sdb/redo01.log
ORA-00310: archived log contains sequence 22; sequence 24 required
ORA-00334: archived log: '/oracle/oradata/sdb/redo01.log'


SQL> recover database until cancel;
ORA-00279: change 19677591 generated at 05/11/2004 12:54:13 needed for thread 1
ORA-00289: suggestion : /oracle/oradata/bak/1_24.dbf
ORA-00280: change 19677591 for thread 1 is in sequence #24


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/oracle/oradata/sdb/redo02.log
ORA-00310: archived log contains sequence 23; sequence 24 required
ORA-00334: archived log: '/oracle/oradata/sdb/redo02.log'


SQL> recover database until cancel;
ORA-00279: change 19677591 generated at 05/11/2004 12:54:13 needed for thread 1
ORA-00289: suggestion : /oracle/oradata/bak/1_24.dbf
ORA-00280: change 19677591 for thread 1 is in sequence #24


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/oracle/oradata/sdb/redo03.log
Log applied.
Media recovery complete.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open


SQL> alter database open resetlogs;

Database altered.

SQL> connect test/test
Connected.
SQL> select * from aa;
select * from aa
              *
ERROR at line 1:
ORA-00942: table or view does not exist
[/php]

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
30#
发表于 2004-5-11 13:36 | 只看该作者
of course,你这是最普通的情况。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表