背景:现需要在一个新库上面通过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),以便应用程序能够连接。
测试:强烈建议先在测试环境充分演练整个恢复过程,成功后再在生产环境的目标服务器上操作。
Oracle 11g异机不完全恢复实践
1495

被折叠的 条评论
为什么被折叠?



