大家好:
    我的数据库是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.bakSQL> 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                                 BOSTONSQL> 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.dbfSQL> 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、请问如何用创建表前备份的数据文件,进行恢复表的数据呢?(重做日志未切换)
----
以上问题,还望各位大侠能帮解答一下,感谢。

解决方案 »

  1.   

    您好,但是我是创建完scott.ddd表后,立即shutdown immediate数据库的,应该会将重做信息写到重做日志文件的啊。
    可以帮忙回答一下这两个问题吗:
    1、为什么是这样,如果是创建表前,备份数据文件,就不能恢复该表,提示数据块损坏。
    如果是创建表后,再备份数据文件,就能恢复该表。请问这是什么原因?是不是重做日志是不记录创建表时的信息的?
    -----
    谢谢!2、请问如何用创建表前备份的数据文件,进行恢复表的数据呢?(重做日志未切换)