当前位置:数据库 > Oracle >>

用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=<fname> password=<password> entries=<users>

       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

然后重新执行如下语句mount数据库:

SVRMGR>startup mount。

<2> 修改数据库文件的路径

如果在上述的步骤3中修改了恢复的数据库文件的路径,可以用如下语句对数据库文件重新命名 :

              alter database rename file 'old_file' to 'new_file';

如把原来路径/home/oracle/app/oracle/oradata/ora816下的文件system01.dbf改到了/u21/oracle/app/oracle/oradata/ora816下:

SVRMGR>alter database rename file

    '/home/oracle/app/oracle/oradata/ora816/system01.dbf'

                to  '/u21/oracle/app/oracle/oradata/ora816/system01.dbf';

按照上面的方法把所有修改路径的数据库文件重新命名。

<3> 根据控制文件和归档日志文件恢复数据库

下面开始用控制文件和归档日志文件恢复数据库:

SVRMGR>recover database using backup controlfile until cancel;

出现如下提示:

ORA-00279: change 50971 generated at 08/23/2002 09:21:27 needed for thread 1

ORA-00289: suggestion: /home/oracle/app/oracle/admin/ora8/arch/arch_1_399.arc

ORA-00280: change 50971 for thread 1 is in sequence #399

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}输入:

       auto

如果有如下提示,则表示成功。

ORA-00279: change 51007 generated at 08/23/2002 11:23:13 needed for thread 1

ORA-00289: suggestion: /home/oracle/app/oracle/admin/ora8/arch/arch_1_400.arc

ORA-00280: change 51007 for thread 1 is in sequence #400

ORA-00278: log file '/home/oracle/app/oracle/admin/ora8/arch/arch_1_399.arc' noy

Log applied.

       意外处理:如果其它提示可能是需要的日志文件不存在,检查ORA-00289中该文件是否存在。

直到出现如下提示:

ORA-00279: change 51011 generated at 08/23/2002 11:23:45 needed for thread 1

ORA-00289: suggestion: /home/oracle/app/oracle/admin/ora8/arch/arch_1_401.arc

ORA-00280: change 51011 for thread 1 is in sequence #401

ORA-00278: log file '/home/oracle/app/oracle/admin/ora8/arch/arch_1_400.arc' noy

ORA-00308: cannot open archived log '/home/oracle/app/oracle/admin/ora8/arch

/arch_1_401.arc'

ORA-27037: unable to obtain file status

Intel SVR4 UNIX Error: 2: No such file or directory

Additional information: 3

<4> 重置日志

SVRMGR>alter database open resetlogs;

意外处理:如果提示创建日志的路径不存在,按提示路径创建目录。然后再重置日志。

<5> 重启数据库,完成恢复

SVRMGR>shutdown immediate

SVRMGR>startup 

ORACLE instance started.

Total System Global Area                        123437040 bytes

Fixed Size                                          69616 bytes

Variable Size                                   106418176 bytes

Database Buffers                                 16777216 bytes

Redo Buffers                                  &nbs

上一个:Oracle8i与MS SQL SERVER之比较
下一个:ORACLE中一些问题的解决方法

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,