情况描述
客户报告数据库故障,新来的系统管理员误操作。删掉了一些文件。
询问:删掉了那些文件?
答曰:所有重要数据文件,所有控制文件。数据库原来是归档模式,用rman备份数据,rman 使用控制文件。
幸运的是,最后一次rman full 备份是包括了控制文件在内。系统没有设定自动备份控制文件.现在状况是数据库无法启动.
不用说,客户的备份方案不够完善,但是这时候再去说这些话责备用户有事后诸葛亮之嫌,用户是上帝,不要去得罪他。还有,客户有full备份(虽然不是自动备份控制文件,这样无法用常规的恢复步骤来进行恢复)。这对我们来说是个绝对的好消息。
下面我们通过一次模拟操作来演示这个问题的解决办法。
解决过程
首先,用控制文件作数据库系统的全备份:
代码:------------------------蓝色部分是输入内容,黑色部分是敏感信息,须加以注意----------------------------------------------------
c:wutemp>rman target /
recovery manager: release 9.2.0.1.0 - production.
copyright (c) 1995, 2002, oracle corporation. all rights reserved.
connected to target database: demo (dbid=3272375326)
rman> run {
2> allocate channel c1 type disk;
3> backup full tag ’fullbackup’ format ’d:\kde\%d_%u_%s_%p.dbf’ database include current controlfile;
4> sql ’ alter system archive log current’;
5> release channel c1;
6> }
using target database controlfile instead of recovery catalog
allocated channel: c1
channel c1: sid=15 devtype=disk
starting backup at 18-jul-04
channel c1: starting full datafile backupset
channel c1: specifying datafile(s) in backupset
including current spfile in backupset
including current controlfile in backupset
input datafile fno=00001 name=d:\oracle\oradata\demo\system01.dbf
input datafile fno=00002 name=d:\oracle\oradata\demo\undotbs01.dbf
input datafile fno=00004 name=d:\oracle\oradata\demo\example01.dbf
input datafile fno=00009 name=d:\oracle\oradata\demo\xdb01.dbf
input datafile fno=00005 name=d:\oracle\oradata\demo\indx01.dbf
input datafile fno=00008 name=d:\oracle\oradata\demo\users01.dbf
input datafile fno=00003 name=d:\oracle\oradata\demo\drsys01.dbf
input datafile fno=00006 name=d:\oracle\oradata\demo\odm01.dbf
input datafile fno=00007 name=d:\oracle\oradata\demo\tools01.dbf
channel c1: starting piece 1 at 18-jul-04
channel c1: finished piece 1 at 18-jul-04
piece handle=d:\kde\demo_01fr79ot_1_1.dbf comment=none
channel c1: backup set complete, elapsed time: 00:01:17
finished backup at 18-jul-04
sql statement: alter system archive log current
released channel: c1
--如上所示,我们做了一次数据库的full备份.备份片中包括控制文件.注意上面输出内容的黑体部分.我们在后面的恢复操作中会用到.
模拟错误,关掉实例,删掉所有的控制文件和所有的.dbf文件。然后starup会看到如下的出错信息:
sql> startup
oracle instance started.
total system global area 152115804 bytes
fixed size 453212 bytes
variable size 100663296 bytes
database buffers 50331648 bytes
redo buffers 667648 bytes
ora-00205: error in identifying controlfile, check alert log for more info
查看alert log,应该是系统找不到控制文件.现在情形和客户问题一致.不过在继续讲述之前,我们还需要介绍一点背景知识.
背景知识:
在oracle 816 以后的版本中,oracle提供了一个包:dbms_backup_restore.dbms_backup_restore 包是由dbmsbkrs.sql 和 prvtbkrs.plb 这两个脚本创建的.catproc.sql 脚本运行后会调用这两个包.所以是每个数据库都有的这个包是oracle服务器和操作系统之间io操作的接口.由恢复管理器直接调用。而且据说这两个脚本的功能是内建到oracle的一些库文件中的.
由此可见,我们可以在数据库 nomount 情况下调用这些package ,来达到我们的恢复目的。在dbmsbkrs.sql 和prvtbkrs.plb 这两个脚本中有详细的说明文档,出于篇幅问题,就不一一加以翻译了,但在下面会直接引用一些原文说明。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器