为什么NOARCHIVELOG模式做recover后,为什么会提示数据文件块损坏呢?

Samdy_Chan 2013-01-29 11:28:59
大家好:
我的数据库是noarchivlog非归档模式。
我在关闭数据库后,备份了users01.dbf 数据文件。之后重新打开数据库,建立一个表
create table scott.ddd logging as select * from scott.dept;
然后再次关闭数据库,删除users01.dbf数据文件,再复制之前创建scott.ddd表前的数据文件users01.dbf,然后恢复该数据文件,打开数据库后,当 select * from scott.ddd; 时提示数据块损坏。我创建soott.ddd表时的重做日志还存在的,没有切换过重做日志,执行recover datafile 4;时也没提示错误,为什么打开数据库后, 提示users01.dbf数据文件的数据块损坏呢?
但如果是先创建scott.ddd表,关闭数据库再备份users01.dbf数据文件,然后打开数据库,在scott.ddd表中删除和插入数据,关闭数据库,再复制创建表时的users01.dbf备份数据文件,这样却就可以恢复删除插入的数据。
如下:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> host cp /ora01/oracle/oradata/orcl/users01.dbf /ora01/oracle/oradata/orcl/users01.dbf.bak

SQL> startup;
ORACLE instance started.

Total System Global Area 167772160 bytes
Fixed Size 1218292 bytes
Variable Size 83888396 bytes
Database Buffers 75497472 bytes
Redo Buffers 7168000 bytes
Database mounted.
Database opened.
SQL> create table scott.ddd logging as select * from scott.dept;

Table created.

SQL> select * from scott.ddd;

DEPTNO DNAME LOC
------------------ ------------------------------------------ ---------------------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> host rm /ora01/oracle/oradata/orcl/users01.dbf

SQL> startup;
ORACLE instance started.

Total System Global Area 167772160 bytes
Fixed Size 1218292 bytes
Variable Size 83888396 bytes
Database Buffers 75497472 bytes
Redo Buffers 7168000 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: '/ora01/oracle/oradata/orcl/users01.dbf'


SQL> host cp /ora01/oracle/oradata/orcl/users01.dbf.bak /ora01/oracle/oradata/orcl/users01.dbf

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 4 needs media recovery
ORA-01110: data file 4: '/ora01/oracle/oradata/orcl/users01.dbf'


SQL> recover datafile 4;
Media recovery complete.
SQL> alter database open;

Database altered.

SQL> select * from scott.ddd;
select * from scott.ddd
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 4, block # 388)
ORA-01110: data file 4: '/ora01/oracle/oradata/orcl/users01.dbf'
ORA-26040: Data block was loaded using the NOLOGGING option
-------------------------------------------------------------------

小弟是菜鸟,想请问各位以下两个问题:
1、为什么是这样,如果是创建表前,备份数据文件,就不能恢复该表,提示数据块损坏。
如果是创建表后,再备份数据文件,就能恢复该表。请问这是什么原因?是不是重做日志是不记录创建表时的信息的?

2、请问如何用创建表前备份的数据文件,进行恢复表的数据呢?(重做日志未切换)
----
以上问题,还望各位大侠能帮解答一下,感谢。



...全文
303 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Samdy_Chan 2013-01-29
  • 打赏
  • 举报
回复
引用 1 楼 zhoulirong14 的回复:
恢复数据库不只要自上次备份以来的重做日志文件,,还需要有个当前的联机重做日志,,估计是你备份的时候,没有开启归档,然后有部分修改还没被日志写入器写入磁盘,这时候也没联机重做日志,所以就可能损坏数据块了。。。
您好,但是我是创建完scott.ddd表后,立即shutdown immediate数据库的,应该会将重做信息写到重做日志文件的啊。 可以帮忙回答一下这两个问题吗: 1、为什么是这样,如果是创建表前,备份数据文件,就不能恢复该表,提示数据块损坏。 如果是创建表后,再备份数据文件,就能恢复该表。请问这是什么原因?是不是重做日志是不记录创建表时的信息的? ----- 谢谢! 2、请问如何用创建表前备份的数据文件,进行恢复表的数据呢?(重做日志未切换)
zhoulirong14 2013-01-29
  • 打赏
  • 举报
回复
恢复数据库不只要自上次备份以来的重做日志文件,,还需要有个当前的联机重做日志,,估计是你备份的时候,没有开启归档,然后有部分修改还没被日志写入器写入磁盘,这时候也没联机重做日志,所以就可能损坏数据块了。。。

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧