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

Samdy_Chan Samdy_Chan 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
大家好:
我的数据库是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、请问如何用创建表前备份的数据文件,进行恢复表的数据呢?(重做日志未切换)
----
以上问题,还望各位大侠能帮解答一下,感谢。



...全文

相关推荐

NOARCHIVELOG模式下的备份与恢复

如果数据库处在NOARCHIVELOG模式下,那么选择备份恢复的方案就较小,这里列出了该模式下的备份恢复全解决方案;

搞怪的索引

oracle控制文件损坏恢复

oracle控制文件损坏恢复,文档描述如何进行恢复的操作。

weixin_38098098

非归档模式system表空间损坏数据库恢复.docx

非归档模式system表空间损坏数据库恢复

omyligaga

用Oracle8i修复数据库坏块的三种方法

当数据库出现问题时可以根据不同的数据块损坏类型,检测并修复错误。本文介绍三种使用Oracle8i修复损坏数据块的方法。

weixin_38704701

ORACLE表空间恢复方案

主要描述几种方式下得数据恢复 一)用户表空间      错误: 在启动数据库时出现ORA-01157,ORA-01110或操作系统级错误例如ORA-07360, 在关闭数据库(使用shutdown normal或shutdown immediate) 时将导致错误ORA -01116,ORA-01110以及操作系统级错误ORA-07368      解决: 以下有两种解决方案:      1.用户的表空间可以被轻易地重建   即最近导出的对象是可用的或表空间中的对象可以被轻易地重建等.   在这种情况下,最简单的方法是offline并删除该数据文件,删除表空间并重建表空间以及所有的对象.   svrmgrl> startup mount   svrmgrl> alter database datafile filename offline drop;   svrmgrl> alter database open;   svrmgrl> drop tablespace tablespace_name including contents;   重建表空间及所有对象.

lklk0
评论 2
收藏 已收藏
分享
返回顶部
Samdy_Chan
基础和管理 17,379 成员 95,111 内容