ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于介质恢复的进一步研究

关于介质恢复的进一步研究

原创 Linux操作系统 作者:syforacle 时间:2010-05-21 10:05:49 0 删除 编辑
关于介质恢复的进一步研究
  环境:表空间XXX的数据文件AA遭意外损坏
   用户在启动数据库的时候,出现下面提示信息:
  SQL>STARTUP
ORACLE例程已经启动。
Total System Global Area  135338868 bytes
Fixed Size                453492    bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers               667648   bytes
数据库装载完毕。(标志着数据库以打开到mount状态,与下面第5步对应)
ORA-01157:无法标识/锁定数据文件 5 - 请参阅 DBWR 跟踪文件
ORA-01110:数据文件 5:'D:\oracle\oradata\orcl\AA'(假设安装路径为D盘,全局数据库名为orcl)
当我面对这个问题时,我首先想到的是利用热备份进行介质恢复;还可以将数据库启动到monut状态,直接recover database也可以;
可能会有更好的办法,鄙人才疏只能想到用此方法,下面着重讲述第一种方法。
 (1)、以sysdba的身份进入sql*plus;接下来将出现问题的数据文件设置为脱机状态,(可以到OEM中进行检查是否脱机成功);
      具体语法:SQL>ALTER DATABASE DATAFILE
            'D:\ORACLE\ORADATA\ORCL\AA' OFFLINE;
 (2)、将先前系统自动备份的相应数据文件复制到原来的目录,并覆盖原来的文件;
 (3)、使用recover命令进行介质恢复,具体语法为:
              SQL>RECOVER DATAFILE
                   'D:\oracle\oradata\orcl\AA';
(4)、介质恢复完成后,将表空间恢复为联机状态,具体语法:
         SQL>ALTER DATABASE DATAFILE
            'D:\ORACLE\ORADATA\ORCL\AA' ONLINE;
(5)、数据库转变为打开状态,语法为:
         SQL>ALTER DATABASE OPEN;
 (6)、检验恢复结果
   如果数据库可以正常打开,说明已经恢复成功。也可以查询表空间XXX当中的相关表BB(假定BB是表空间XXX中的一个表,隶属scott模式),
进一步确认数据是否已恢复到正确的状态。例如:
          SQL>select * from SCOTT.BB;
如果丢失或损坏的数据文件有多个,然后依次使用类似的方法进行回复即可。(前提是读者在使用数据库时以养成良好的备份习惯,否则在恢复之前必须先检查相应数据文件是否已成功备份)。
   特别注意:
    尤其是初学者。由于本操作中有很多语法类似,特别是同时恢复多个数据文件的时候,因此,读者可能会多次使用文本编辑命令ED[IT],
在这里这个很好用的命令可能会有失效的时候,如果你是一位心细的读者,你会发现当我们在ed编辑框中将 语句:
SQL>ALTER DATABASE DATAFILE
            'D:\ORACLE\ORADATA\ORCL\AA' OFFLINE;    修改为:
 SQL>RECOVER DATAFILE
             'D:\oracle\oradata\orcl\AA';   时,我们试图执行,结果并不像我们预期的那样,
   反而系统会提醒:
    ERROR 位于第一行:
    OEA-00900:无效SQL语句。
  仔细检查语句并没有错误。怎么回事?
很简单,那是因为你忽略了ed的适用范围;只有在缓冲区先前存放的是SQL语句或者 PL/SQL程序时才能使用ed命令,这里我们的操作超出了ed命令的使用范围,也许你会问了,超出了范围,为何还能用?!  告诉你:那是因为
SQL>ALTER DATABASE DATAFILE
            'D:\ORACLE\ORADATA\ORCL\AA' OFFLINE;是一个完全正确的SQL语句,
而当我们把它修改为
 SQL>RECOVER DATAFILE
             'D:\oracle\oradata\orcl\AA';时,已经改变了它的语句属性,成了非SQL 语句了,而这个语句又是通过ed写入缓冲区的,你说编译器会认识它吗?
   由此可得:
 oracle是一个非常严谨的数据库系统,因为它的严谨,所以它也要求使用它的用户也要仔细严谨。。到此为止吧,我要去上课了,这个问题就先到此为止吧。
                                                                                         
                                                                                                          2010 05 21 

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

下一篇: 关于备份的知识
请登录后发表评论 登录
全部评论

注册时间:2010-05-07

  • 博文量
    20
  • 访问量
    19632