oracle11g基于nbu异机还原的不完全恢复

Oracle 11g异机不完全恢复实践

背景:现需要在一个新库上面通过nbu方式还原某数据库的全备数据,包括数据文件以及归档日志。

还原前的准备工作

在开始还原之前,请确保你已经完成以下准备工作:
1、目标数据库服务器配置:确保目标服务器上已安装相同版本的Oracle 11g数据库软件(不需要创建实例)和相同版本或兼容版本的NBU客户端软件。同时,操作系统版本和平台最好保持一致。
2、创建必要的操作系统用户和组:确保目标服务器上有与源服务器相同的Oracle安装用户和组(如oracle:dba)。
3、建立网络解析:在目标服务器的hosts文件中添加对NBU服务器和源数据库服务器的解析记录。
4、创建目录结构:在目标服务器上,创建与源数据库相同的目录结构(如 admin/orcl/{adump,bdump,cdump,udump}, oradata/orcl/, fast_recovery_area/ 等),并确保Oracle用户有正确的读写权限。
5、获取源数据库信息:你需要从源数据库获取以下关键信息:
DBID: 在源数据库上执行 select dbid from v$database;。
数据库名称 (DB_NAME)、控制文件路径、数据文件路径(如果你计划将文件恢复到相同路径,则目标库路径必须与源库一致)。
6、检查备份有效性:确认NBU上的备份是成功且可用的。

NBU服务器配置

在NBU服务器上,需要允许异机恢复操作:
在NBU安装目录下的 db/altnames/ 文件夹中,创建一个名为 No.Restrictions 的空文件。此操作允许NBU执行异机恢复。
查找并记录用于恢复的控制文件备份的名称。可以使用 bplist 命令(具体参数需根据你的环境调整,例如 bplist -C <源Oracle客户端名> -l -t 4 -s <开始日期> -e <结束日期> -R /)。

详细还原步骤

还原过程主要分为三个阶段:恢复控制文件、恢复数据文件、恢复并打开数据库。

恢复控制文件 (Control File)

创建初始参数文件 (pfile):如果目标服务器上没有spfile或pfile,你需要手动创建一个最简单的初始化参数文件 (pfile),例如 init.ora,其中至少包含 db_name=<你的数据库名> 参数。

启动实例到nomount状态:设置环境变量 ORACLE_SID=<你的SID>,然后启动RMAN并连接到目标数据库,使用初始pfile将数据库启动到nomount状态:

rman target /
RMAN> startup nomount pfile='/path/to/init<SID>.ora';

在RMAN中恢复控制文件:在RMAN中执行以下命令,替换相应的参数(DBID、NBU服务器名、源Oracle客户端名、控制文件备份名称):

run {
    set dbid=你的源库DBID; # 例如 1234567890
    allocate channel ch00 type 'sbt_tape';
    send 'NB_ORA_SERV=你的NBU服务器名, NB_ORA_CLIENT=你的源Oracle客户端名';
    restore controlfile from '控制文件备份名称'; # 例如 'cntrl_64_1_823720287'
    release channel ch00;
}

set dbid 命令用于告诉RMAN要恢复的数据库的DBID。
allocate channel 分配一个类型为 sbt_tape 的通道,这是用于NBU等磁带库设备的。
send 命令将NBU相关的连接参数发送给介质管理软件。

挂载 (mount) 数据库:控制文件恢复成功后,退出RMAN(或新建连接),使用恢复的控制文件将数据库启动到mount状态:

RMAN> shutdown immediate; # 可能会提示未启动,可忽略
RMAN> startup mount;
恢复数据文件 (Datafiles)

数据库处于mount状态后,即可恢复数据文件。

在RMAN中恢复数据库:在RMAN中执行恢复命令,替换相应的NBU参数:

run {
    allocate channel ch00 type 'sbt_tape';
    allocate channel ch01 type 'sbt_tape'; # 可以根据需要分配多个通道并行加速
    send 'NB_ORA_SERV=你的NBU服务器名, NB_ORA_CLIENT=你的源Oracle客户端名';
    restore database;
    release channel ch00;
    release channel ch01;
}

此命令会将数据文件、归档日志等备份内容从NBU恢复到目标服务器上与控制文件中记录的相同路径下。如果目标服务器上的路径与源服务器不同,必须在执行 restore 前使用 set newname for datafile 命令为数据文件指定新路径。

恢复 (Recover) 并打开数据库

数据文件还原完成后,需要进行恢复(应用重做日志等)才能打开数据库。

恢复数据库:在RMAN中执行恢复命令:

run {
    allocate channel ch00 type 'sbt_tape';
    send 'NB_ORA_SERV=你的NBU服务器名, NB_ORA_CLIENT=你的源Oracle客户端名';
    recover database;
    release channel ch00;
}

此过程会应用归档日志和重做日志,将数据库滚动到备份的最新状态或时间点。如果恢复过程询问归档日志,你可以指定或选择 AUTO。如果知道需要恢复到的具体时间点,可以使用 set until time “to_date(‘2024-09-16 14:00:00’, ‘YYYY-MM-DD HH24:MI:SS’)”; 命令。

以 resetlogs 方式打开数据库:由于是基于备份进行恢复,必须使用 resetlogs 选项打开数据库:

alter database open resetlogs;

这个命令会重置在线重做日志序列号,并创建新的数据库incarnation。

后续收尾工作

数据库成功打开后,还需要进行一些检查和清理工作:

检查临时表空间:临时表空间文件(tempfile)通常不会被备份和恢复。检查临时表空间是否存在:

select name from v$tempfile;

如果查询结果为空或报错,你需要重新创建临时表空间:

CREATE TEMPORARY TABLESPACE temp1 TEMPFILE '/path/to/temp01.dbf' SIZE 500M;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp1;
-- 如果存在旧的临时表空间,可以删除
-- DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;

验证数据库完整性:运行一些基本的查询,检查关键表和数据的完整性。

备份新数据库:一旦确认新数据库运行正常,立即为它创建一个新的完整备份。

重要注意事项

路径一致性:异机恢复时,最关键也是最容易出错的地方就是文件路径。如果目标服务器的磁盘挂载点、Oracle基础目录(ORACLE_BASE)与源服务器不同,必须在 restore 前在RMAN中使用 set newname 和 switch 命令重定向数据文件,否则恢复过程会因找不到文件而失败。

权限与环境:确保Oracle用户在目标服务器上对所有相关目录(数据文件路径、快速恢复区等)拥有足够的读写权限。检查 oracle 用户的环境变量(如 ORACLE_HOME, ORACLE_SID, PATH)是否正确设置。

版本兼容性:确保NBU客户端版本、Oracle数据库软件版本与源环境兼容。原则上要求目标服务器的Oracle版本等于或高于源服务器的版本。

监听与网络:配置好新数据库的监听器 (listener.ora) 和本地网络服务名 (tnsnames.ora),以便应用程序能够连接。

测试:强烈建议先在测试环境充分演练整个恢复过程,成功后再在生产环境的目标服务器上操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值