ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 恢复之数据库打开时的完全恢复

恢复之数据库打开时的完全恢复

原创 Linux操作系统 作者:zhengbao_jun 时间:2009-02-11 14:29:04 0 删除 编辑

对于非系统表空间或数据文件的恢复,可以在数据库打开时进行,但是表空间或数据文件必须处于脱机状态。


通过ULTRAEDIT修改在线数据文件的方式来模拟联机情况下数据文件的损坏。

SQL> ALTER SYSTEM CHECKPOINT;

系统已更改。

SQL> SELECT * FROM TTT WHERE OBJECT_ID = 932;
SELECT * FROM TTT WHERE OBJECT_ID = 932
*
ERROR 位于第 1 行:
ORA-00376: 此时无法读取文件 5
ORA-01110: 数据文件 5: 'F:ORACLEORADATATESTUSERS01.DBF'

修改了TOOLS表空间数据文件的文件头信息,同时修改了USERS01.DBF中的数据信息。

SQL> SELECT NAME, STATUS FROM V$DATAFILE;

NAME STATUS
-------------------------------------------------- -------
F:ORACLEORADATATESTSYSTEM01.DBF SYSTEM
F:ORACLEORADATATESTUNDOTBS01.DBF ONLINE
F:ORACLEORADATATESTINDX01.DBF ONLINE
F:ORACLEORADATATESTTOOLS01.DBF RECOVER
F:ORACLEORADATATESTUSERS01.DBF RECOVER
F:ORACLEORADATATESTYANGTK01.DBF ONLINE

已选择6行。

SQL> UPDATE TTT SET OBJECT_NAME = 'AAA' WHERE OBJECT_ID = 932;
UPDATE TTT SET OBJECT_NAME = 'AAA' WHERE OBJECT_ID = 932
*
ERROR 位于第 1 行:
ORA-00376: 此时无法读取文件 5
ORA-01110: 数据文件 5: 'F:ORACLEORADATATESTUSERS01.DBF'


SQL> SELECT NAME, STATUS FROM V$DATAFILE;

NAME STATUS
-------------------------------------------------- -------
F:ORACLEORADATATESTSYSTEM01.DBF SYSTEM
F:ORACLEORADATATESTUNDOTBS01.DBF ONLINE
F:ORACLEORADATATESTINDX01.DBF ONLINE
F:ORACLEORADATATESTTOOLS01.DBF RECOVER
F:ORACLEORADATATESTUSERS01.DBF RECOVER
F:ORACLEORADATATESTYANGTK01.DBF ONLINE

已选择6行。

SQL> SELECT NAME, ONLINE_STATUS, ERROR
2 FROM V$DATAFILE A, V$RECOVER_FILE B
3 WHERE A.FILE# = B.FILE#;

NAME ONLINE_ ERROR
-------------------------------------------------- ------- -----------------
F:ORACLEORADATATESTTOOLS01.DBF OFFLINE FILE NOT FOUND
F:ORACLEORADATATESTUSERS01.DBF OFFLINE

在进行恢复之前,需要将联机的表空间处于脱机状态,注意,这个时候NORMAL方式可能无法将表空间脱机,需要使用TEMPORARY或IMMEDIATE。

SQL> SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES;

TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
INDX ONLINE
TOOLS ONLINE
USERS ONLINE
YANGTK ONLINE

已选择7行。

SQL> ALTER TABLESPACE USERS OFFLINE;
ALTER TABLESPACE USERS OFFLINE
*
ERROR 位于第 1 行:
ORA-01191: 文件5已经脱机 - 无法进行正常脱机
ORA-01110: 数据文件 5: 'F:ORACLEORADATATESTUSERS01.DBF'


SQL> ALTER TABLESPACE USERS OFFLINE TEMPORARY;

表空间已更改。

SQL> ALTER TABLESPACE TOOLS OFFLINE IMMEDIATE;

表空间已更改。

下面对需要恢复的数据文件进行还原。假设TOOLS表空间所在磁盘损坏,无法将备份恢复到原来的位置,需要使用ALTER DATABASE RENAME FILE命令将其改名,移植到新的位置:

注意,不要还原控制文件、联机日志文件和没有损坏的数据文件。

SQL> HOST COPY F:ORACLEBACKUPTEST20060219USERS01.DBF F:ORACLEORADATATEST

SQL> HOST COPY F:ORACLEBACKUPTEST20060219TOOLS01.DBF F:ORACLEORADATATESTTOOLS02.DBF

SQL> ALTER DATABASE RENAME FILE 'F:ORACLEORADATATESTTOOLS01.DBF'
2 TO 'F:ORACLEORADATATESTTOOLS02.DBF';

数据库已更改。

最后执行表空间的恢复就可以了:

SQL> SET AUTORECOVERY ON
SQL> RECOVER TABLESPACE USERS, TOOLS
ORA-00279: 更改 45822812 (在 02/19/2006 03:07:36 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00001.001
ORA-00280: 更改 45822812 对于线程 1 是按序列 # 1 进行的


ORA-00279: 更改 45843504 (在 02/19/2006 10:39:18 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00002.001
ORA-00280: 更改 45843504 对于线程 1 是按序列 # 2 进行的
ORA-00278: 此恢复不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00001.001'


ORA-00279: 更改 45858111 (在 02/19/2006 22:11:29 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00003.001
ORA-00280: 更改 45858111 对于线程 1 是按序列 # 3 进行的
ORA-00278: 此恢复不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00002.001'


已应用的日志。
完成介质恢复。
SQL> ALTER TABLESPACE USERS ONLINE;

表空间已更改。

SQL> ALTER TABLESPACE TOOLS ONLINE;

表空间已更改。

yangtingkun 发表于:2006.02.20 07:26 ::分类: ( ORACLE ) ::阅读:(1498次) :: 评论 (2)
re: 恢复之数据库打开时的完全恢复 [回复]

求助:
我也碰到这个问题
但是很棘手的是
我缺失的文件是d:oradatam202data.ora,这个文件不在了
而且也没有备份

刚才库正常起来了
但是查一些表的时候报ora-00376,ora-01110
问题

无头绪,不知道无法恢复

如果您有时间
在PUB内也可发站内短信

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/235507/viewspace-548691/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-08-08

  • 博文量
    209
  • 访问量
    865843