进一步研究不可恢复操作的恢复。
在前一个测试的基础上进行一点小的修改。
SQL> SELECT DEFAULT_TABLESPACE FROM USER_USERS;
DEFAULT_TABLESPACE
------------------------------
YANGTK
SQL> ALTER TABLESPACE YANGTK BEGIN BACKUP;
表空间已更改。
SQL> HOST COPY F:ORACLEORADATATESTYANGTK01.DBF F:ORACLEBACKUPTEST20060325
SQL> ALTER TABLESPACE YANGTK END BACKUP;
表空间已更改。
SQL> CREATE TABLE TEST_UNRECOVER NOLOGGING AS SELECT * FROM DBA_TABLES;
表已创建。
SQL> CREATE INDEX IND_TEST_UNRECOVER ON TEST_UNRECOVER (OWNER) LOGGING;
索引已创建。
SQL> ALTER TABLESPACE YANGTK OFFLINE IMMEDIATE;
表空间已更改。
SQL> HOST COPY F:ORACLEBACKUPTEST20060325* F:ORACLEORADATATEST
SQL> RECOVER TABLESPACE YANGTK;
完成介质恢复。
SQL> ALTER TABLESPACE YANGTK ONLINE;
表空间已更改。
SQL> SELECT COUNT(*) FROM TEST_UNRECOVER;
SELECT COUNT(*) FROM TEST_UNRECOVER
*
ERROR 位于第 1 行:
ORA-01578: ORACLE 数据块损坏(文件号6,块号274)
ORA-01110: 数据文件 6: 'F:ORACLEORADATATESTYANGTK01.DBF'
ORA-26040: 数据块是使用 NOLOGGING 选项加载的
SQL> SELECT COUNT(*) FROM TEST_UNRECOVER WHERE OWNER = 'YANGTK';
COUNT(*)
----------
15
对于以NOLOGGING方式建立的表,表中的数据无法进行恢复。而在这个表上建立的索引却可以正常访问。
SQL> DROP TABLE TEST_UNRECOVER;
表已丢弃。
SQL> CREATE TABLE TEST_UNRECOVER AS SELECT * FROM DBA_TABLES;
表已创建。
SQL> CREATE INDEX IND_TEST_UNRECOVER ON TEST_UNRECOVER (OWNER) NOLOGGING;
索引已创建。
SQL> ALTER TABLESPACE YANGTK OFFLINE IMMEDIATE;
表空间已更改。
IXDBA.NET社区论坛SQL> HOST COPY F:ORACLEBACKUPTEST20060325* F:ORACLEORADATATEST
SQL> RECOVER TABLESPACE YANGTK;
完成介质恢复。
SQL> ALTER TABLESPACE YANGTK ONLINE;
表空间已更改。
SQL> SELECT COUNT(*) FROM TEST_UNRECOVER;
COUNT(*)
----------
503
SQL> SELECT COUNT(*) FROM TEST_UNRECOVER WHERE OWNER = 'YANGTK';
SELECT COUNT(*) FROM TEST_UNRECOVER WHERE OWNER = 'YANGTK'
*
ERROR 位于第 1 行:
ORA-01578: ORACLE 数据块损坏(文件号6,块号292)
ORA-01110: 数据文件 6: 'F:ORACLEORADATATESTYANGTK01.DBF'
ORA-26040: 数据块是使用 NOLOGGING 选项加载的
如果LOGGING方式建表,以NOLOGGING方式建立索引,则进行恢复后,索引不可访问。
由于NOLOGGING方式造成数据不可恢复,索引和表都只和自身是否NOLOGGING有关,是不会相互影响的。