分类: Oracle
2008-04-15 12:50:14
来源:赛迪网 作者:Franklin |
最简单的方法是选自动恢复:
auto + < enter >
系统会在init.ora文件中定义的位置上查找所有必需的日志并依次应用它们,最后一个要应用的日志是online redo log,实际上它并不包括任何的transaction,只有一个SCN,可以略过,但是自动恢复过程会因为找不到相应的文件而报错:
ORA-00308: cannot open archived log
E:\ORACLE\ORADATA\KIMSTAD\ARCHIVE\KIMSTADT00036949.ARC'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) The system cannot find the file specified.
为此输入以下命令(until cancel参数使我们可以在需要的时候中止恢复过程):
recover database until cancel using backup controlfile +
这样在数据库恢复的最后阶段再次提示前面的错误时,我们就可以中止恢复过程:
cancel + < enter >
这时除了最后一个online redo log以外,所有的commit transaction都已经提交到数据库之中了,完成后会显示:
Media recovery canceled
实际上恢复过程已经正常完成了。
最后是打开数据库并同步日志序列号:
alter database open resetlogs + < enter >
至此,Oracle数据库被成功恢复到最后一次Full Online备份。
说明:Oracle 8i可以用internal账号完成DBA操作。9i取消了internal账号,SYS账号代替它了。为了以DBA身份登录,启动SQL Plus时应该加nolog参数,进入之后再登录,connect username/password as sysdba。
具体示例:
1. 用Oracle数据库的热备份来重建数据库
为了检验我为公司开发的Oracle数据库在线自动备份系统,我根据“Oracle数据库在线自动备份系统”产生的备份文件来重建和恢复Oracle数据库。为了让大家共享其方法和步骤(也适合于用其它方式对Oracle做的热备份进行重建数据库)现整理如下。
一、系统环境
本次测试所使用的系统环境如下:
1. 硬件环境
服务器:Dell PowerEdge 1300 (CPU:PⅢ 550MHz 内存:128MB 硬盘:36GB)
2. 软件环境
操作系统:UnixWare 7.1
数据库: Oracle 8.1.6 for Unix 企业版,SID:ora816
Oracle安装路径:/home/oracle
备份文件:所有数据库文件、控制文件、初始化文件、数据库备份以来的所有归档日志文件。
二、恢复步骤
下面根据从用户处带回来的备份数据,在一台新的服务器重建Oracle数据库。其详细步骤如下:
1. 创建数据库恢复使用的环境
在新的Dell服务器上,安装与原来的数据库服务器相同的操作系统UnixWare 7.1;然后安装与原数据库相同版本的Oracle 8.1.6 for Unix 企业版。
2. 删除新服务器上的Oracle实例
启动新数据库服务器上的Oracle,在sqlplus中,查找到数据库文件的路径,并保存在当前路径下的文件file_name.txt中:
$ sqlplus system/manager
SQL> spool file_name.txt
SQL> select file_name from sys.dba_data_files;
SQL> spool end
SQL>exit
关闭新服务器的Oracle,然后根据文件file_name.txt中的路径,删除新装的Oracle实例的所有数据库文件。
注:从本步开始所有操作都是用Oracle用户登录操作系统(Unix)后进行。文中所有的黑色粗体5号字符(标题除外)的语句可以直接执行,黑色倾斜粗体5号字符的语句需要修改后执行。
3. 恢复数据库文件
把备份的所有数据库文件用Ftp上传新的数据库服务器中的相同路径下。如果原来的路径已不存在,可以拷贝到其他路径下,恢复时详细处理方法见步骤7中<2>。
4. 恢复初始化参数文件
把备份的initSID.ora文件用Ftp上传到新数据库服务器中Oracle实例的initSID.ora文件位置,覆盖之。其位置一般在$ORACLE_HOME/dbs目录下。
5. 恢复控制文件
把备份的ControlFile.bak文件用Ftp上传到新数据库服务器中Oracle实例的各个镜像路径下,并按初始化参数文件initSID.ora中的该项的位置和名称命名。
control_files = ("/home/oracle/app/oracle/oradata/ora816/control01.ctl", "/home/oracle/app/oracle/oradata/ora816/control02.ctl","/home/oracle/app/oracle/oradata/ora816/control03.ctl")
其路径如有变动,在初始化参数文件initSID.ora中修改如上内容的路径和名称,使其实际路径与该参数的路径一致。
6. 恢复归档日志文件
把数据库备份后的归档日志用Ftp上传到新数据库服务器的相同路径下。路径如有变动可以根据初始化参数文件initSID.ora中如下位置进行修改,使其实际路径与该参数的路径一致。
log_archive_dest_1 = "location=/home/oracle/app/oracle/admin/ora816/arch"
7. 恢复数据库
经过以上6个步骤,把所有的备份文件已经上传到了新数据库服务器中。下面开始根据这些文件恢复并启动数据库,先在操作系统的提示符下做如下操作:
$svrmgrl
SVRMGR>connect internal
SVRMGR>startup mount
<1> 创建口令文件
如果原来的数据库配置了口令文件,并且在mount数据库时报如下错误:
ORA-01990: error opening password file '/home/oracle/app/oracle/product/8.1.6/dbs/orapw'
可以到/home/oracle/app/oracle/product/8.1.6/dbs/路径下,用以下命令创建口令文件:
orapwd
其用法如下:
Usage: orapwd file= password= entries=
where
file - name of password file (mand),(口令文件的命名方式为:orapwSID)
password - password for SYS and INTERNAL (mand),
entries - maximum number of distinct DBA and OPERs (opt),
There are no spaces around the equal-to (=) character.
例如: orapwd file=orapwora816 password=manager |