在执行恢复后,应该检查数据库的alert文件,看是否出现控制文件中的数据文件名称和数据字典中数据文件名称无法一一对应的现象。
这篇文章描述通过NORESETLOGS方式重建控制文件并打开数据库后,如果发现不一致情况及解决方法。
如果是利用备份的控制文件,除了数据文件的新增和删除以外,不会出现不一致的情况。这种不一致的情况更多的是出现在手工重建控制文件过程中。
SQL> CONN /@TEST AS SYSDBA
已连接。
SQL> ALTER TABLESPACE INDX READ ONLY;
表空间已更改。
SQL> ALTER TABLESPACE TOOLS OFFLINE;
表空间已更改。
SQL> CREATE TABLESPACE TEST DATAFILE 'F:ORACLEORADATATESTTEST01.DBF' SIZE 10M;
表空间已创建。
SQL> SELECT 'ALTER TABLESPACE ' || TABLESPACE_NAME || ' BEGIN BACKUP;'
2 FROM USER_TABLESPACES WHERE CONTENTS != 'TEMPORARY' AND STATUS = 'ONLINE';
'ALTERTABLESPACE'||TABLESPACE_NAME||'BEGINBACKUP;'
-------------------------------------------------------------
ALTER TABLESPACE SYSTEM BEGIN BACKUP;
ALTER TABLESPACE UNDOTBS1 BEGIN BACKUP;
ALTER TABLESPACE USERS BEGIN BACKUP;
ALTER TABLESPACE YANGTK BEGIN BACKUP;
ALTER TABLESPACE TEST BEGIN BACKUP;
SQL> ALTER TABLESPACE SYSTEM BEGIN BACKUP;
表空间已更改。
SQL> ALTER TABLESPACE UNDOTBS1 BEGIN BACKUP;
表空间已更改。
SQL> ALTER TABLESPACE USERS BEGIN BACKUP;
表空间已更改。
SQL> ALTER TABLESPACE YANGTK BEGIN BACKUP;
表空间已更改。
SQL> ALTER TABLESPACE TEST BEGIN BACKUP;
表空间已更改。
SQL> HOST COPY F:ORACLEORADATATEST*.DBF F:ORACLEBACKUPTEST20060308
SQL> SELECT 'ALTER TABLESPACE ' || TABLESPACE_NAME || ' END BACKUP;'
2 FROM USER_TABLESPACES WHERE CONTENTS != 'TEMPORARY' AND STATUS = 'ONLINE';
'ALTERTABLESPACE'||TABLESPACE_NAME||'ENDBACKUP;'
-----------------------------------------------------------
ALTER TABLESPACE SYSTEM END BACKUP;
ALTER TABLESPACE UNDOTBS1 END BACKUP;
ALTER TABLESPACE USERS END BACKUP;
ALTER TABLESPACE YANGTK END BACKUP;
ALTER TABLESPACE TEST END BACKUP;
SQL> ALTER TABLESPACE SYSTEM END BACKUP;
www.ixdba.net
表空间已更改。
SQL> ALTER TABLESPACE UNDOTBS1 END BACKUP;
表空间已更改。
SQL> ALTER TABLESPACE USERS END BACKUP;
表空间已更改。
SQL> ALTER TABLESPACE YANGTK END BACKUP;
表空间已更改。
SQL> ALTER TABLESPACE TEST END BACKUP;
表空间已更改。
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
数据库已更改。
假设在恢复过程中,发现丢失了所有控制文件和备份的控制文件。那么需要手工重建控制文件,而这时候手工重建控制文件可能会遗漏部分数据文件。
创建控制文件的脚本应该如下:
CREATE CONTROLFILE REUSE DATABASE "TEST" NORESETLOGS ARCHIVELOG
MAXLOGFILES 50
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 680
LOGFILE
GROUP 1 'F:ORACLEORADATATESTREDO01.LOG' SIZE 100M,
GROUP 2 'F:ORACLEORADATATESTREDO02.LOG' SIZE 100M,
GROUP 3 'F:ORACLEORADATATESTREDO03.LOG' SIZE 100M
DATAFILE
'F:ORACLEORADATATESTSYSTEM01.DBF',
'F:ORACLEORADATATESTUNDOTBS01.DBF',
'F:ORACLEORADATATESTUSERS01.DBF',
'F:ORACLEORADATATESTYANGTK01.DBF',
'F:ORACLEORADATATESTTEST01.DBF'
CHARACTER SET ZHS16GBK
;
假设由于没有将脚本保存到trace文件中,而完全通过手工创建,在创建的时候丢失了USERS01.DBF。另外在恢复操作执行之前,从数据库中删除TEST表空间,模拟在控制文件中包含数据文件但在数据字典中不包含的情况。
SQL> DROP TABLESPACE TEST INCLUDING CONTENTS AND DATAFILES;