基于NBU备份软件进行Oracle数据库异机恢复

        欢迎关注“数据库运维之道”公众号,一起学习数据库技术!

        本期将为大家分享“基于NBU备份软件进行Oracle数据库异机恢复”运维管理方法。

        关键词:restore database、recover database、switch datafile all、NBU、ORA-19554、ORA-27211

数据库恢复场景

        当数据库服务器宕机损坏且不能正常提供服务的情况下,通过常规的技术手段难以完成排除数据库宕机故障。因此需要通过备份进行异机恢复修复数据库。本次采用异机恢复的模式,将RAC集群的备份恢复到单机环境,不对现有业务产生任何影响。假设生产环境是采用NBU软件对数据库进行备份,因此以下步骤描述如何使用NBU备份恢复数据库的过程。

数据库恢复步骤

        1、恢复环境准备

        (1)找一台服务器(主机名为:YWZD-DB)安装同版本的操作系统和数据库软件,此处不讨论安装步骤;

        (2)安装好NBU备份代理软件,此处不讨论安装步骤;

        2、在YWZD-DB数据库服务器上执行以下操作,获取控制文件备份集。

/usr/openv/netbackup/bin/bplist -S NBU_MASTER服务器主机名 -C NBU客户端主机名 -t 4 -R -l / > /root/backlist
strings /root/backlist |grep -i ywzd > /root/backlist2
cat /root/backlist2|grep ctrl

        3、切换到oracle用户下,创建相关目录

mkdir -p /u01/app/oracle/admin/ywzd/adump
mkdir -p /u01/app/oracle/oradata/ywzd/datafile

        4、手动创建pfile参数文件

cd /u01/app/oracle/product/12.1.0.2/dbhome_1/dbs
vi initywzd.ora
*.audit_file_dest='/u01/app/oracle/admin/ywzd/adump'
*.audit_trail='db'
*.compatible='12.1.0.2.0'
*.db_block_size=8192
*.control_files='/u01/app/oracle/oradata/ywzd/current.ctl'
*.db_create_file_dest='/u01/app/oracle/oradata/ywzd'
*.db_domain=''
*.db_name='ywzd'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ywzdXDB)'
*.log_archive_dest_1='LOCATION=/u01/app/oracle/oradata/ywzd'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=8192m
*.processes=600
*.remote_login_passwordfile='exclusive'
*.undo_tablespace='UNDOTBS1'

        5、基于pfile启动实例到nomount状态

export ORACLE_SID=ywzd
rman target /
startup nomount

        6、恢复数据库控制文件

rman targer /
run 
{
allocate channel ch00 type 'SBT_TAPE';
send 'nb_ora_serv=NBU_MASTER服务器主机名'; 
send 'nb_ora_client=NBU客户端主机名';
restore controlfile from '/ctrl_dywzd_ur02l3j6v_s27488_p1_t1162988767' ;
release channel ch00;
}

        7、启动数据库至mount

alter database mount;

        8、执行report schema命令,查看所有的数据文件路径

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    0        SYSTEM               ***     +ywzd/ywzd/DATAFILE/system.261.950009243
2    0        SYSAUX               ***     +ywzd/ywzd/DATAFILE/sysaux.262.950009245
3    0        UNDOTBS1             ***     +ywzd/ywzd/DATAFILE/undotbs1.263.950009247
4    0        UNDOTBS2             ***     +ywzd/ywzd/DATAFILE/undotbs2.265.950009253
5    0        USERS                ***     +ywzd/ywzd/DATAFILE/users.266.950009253

        9、由于源库数据文件存放在ASM磁盘组,目标数据库存放在本地磁盘,因此需要进行路径转换,并通过SQL批量生成路径转换脚本

col sql for a200
set linesize 1000
set pagesize 900
select 'set newname for datafile '||FILE#||' to '||'''/u01/app/oracle/oradata/ywzd/datafile/'||substr( name,INSTR(name, '/', -1)+1)||'.dbf'';'  sql 
from v$datafile;

        10、基于任意时间点恢复和还原数据库

RUN {
allocate channel ch00 type 'sbt_tape';
allocate channel ch01 type 'sbt_tape';
allocate channel ch02 type 'sbt_tape';
allocate channel ch03 type 'sbt_tape';
allocate channel ch04 type 'sbt_tape';
send 'nb_ora_serv=NBU_MASTER服务器主机名'; 
send 'nb_ora_client=NBU客户端主机名';
set until time "to_date('2024-03-06 20:00:00','yyyy-mm-dd hh24:mi:ss')";
set newname for datafile 1 to '/u01/app/oracle/oradata/ywzd/datafile/system.261.950009243.dbf';
set newname for datafile 2 to '/u01/app/oracle/oradata/ywzd/datafile/sysaux.262.950009245.dbf';
set newname for datafile 3 to '/u01/app/oracle/oradata/ywzd/datafile/undotbs1.263.950009247.dbf';
set newname for datafile 4 to '/u01/app/oracle/oradata/ywzd/datafile/undotbs2.265.950009253.dbf';
set newname for datafile 5 to '/u01/app/oracle/oradata/ywzd/datafile/users.266.950009253.dbf';
set newname for datafile 6 to '/u01/app/oracle/oradata/ywzd/datafile/tseveflow_data.271.950012331.dbf';
set newname for datafile 7 to '/u01/app/oracle/oradata/ywzd/datafile/tseveflow_data2.272.950012331.dbf';
set newname for datafile 8 to '/u01/app/oracle/oradata/ywzd/datafile/tseveflow_data3.273.950012331.dbf';
restore database;
switch datafile all;
recover database; 
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
RELEASE CHANNEL ch02;
RELEASE CHANNEL ch03;
RELEASE CHANNEL ch04;
}

        11、查看控制文件和数据文件头的检查点和时间是否吻合

set linesize 1000
select file#,to_char(checkpoint_change#),to_char(CHECKPOINT_TIME,'yyyy-mm-dd hh24:mi:ss') 
from v$datafile;
     FILE# TO_CHAR(CHECKPOINT_CHANGE#)            TO_CHAR(CHECKPOINT_
---------- ---------------------------------------- -------------------
     1 275724628                    2024-03-06 23:04:39
     2 275724628                    2024-03-06 23:04:39
     3 275724628                    2024-03-06 23:04:39
     4 275724628                    2024-03-06 23:04:39
     5 275724628                    2024-03-06 23:04:39
     6 275724628                    2024-03-06 23:04:39
     7 275724628                    2024-03-06 23:04:39
     8 275724628                    2024-03-06 23:04:39

select file#,to_char(checkpoint_change#),to_char(CHECKPOINT_TIME,'yyyy-mm-dd hh24:mi:ss') 
from v$datafile_header;
     FILE# TO_CHAR(CHECKPOINT_CHANGE#)            TO_CHAR(CHECKPOINT_
---------- ---------------------------------------- -------------------
     1 275724628                    2024-03-06 23:04:39
     2 275724628                    2024-03-06 23:04:39
     3 275724628                    2024-03-06 23:04:39
     4 275724628                    2024-03-06 23:04:39
     5 275724628                    2024-03-06 23:04:39
     6 275724628                    2024-03-06 23:04:39
     7 275724628                    2024-03-06 23:04:39
     8 275724628                    2024-03-06 23:04:39

        12、检查数据库incarnation状态,如果数据库恢复多次,需要重新设定INCARNATION(RESET DATABASE TO INCARNATION 1;):

rman target /
list INCARNATION;
using target database control file instead of recovery catalog

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       1       ywzd     699325977        CURRENT 1          2017-07-22 11:27:21

        13、关闭块跟踪

alter database disable block change tracking;

        14、打开数据库

alter database open resetlogs;

        15、数据库正常打开,恢复完成

select status from v$instance;

恢复还原清理

        1、删除参数文件信息

ps -ef|grep ywzd
cd /u01/app/oracle/product/12.1.0.2/dbhome_1/dbs
rm -rf hc_ywzd.dat
rm -rf initywzd.ora
rm -rf spfileywzd.ora

        2、进入/u01/app/oracle/oradata/ywzd路径

cd /u01/app/oracle/oradata/ywzd
rm -rf *

        3、进入/u01/app/oracle/admin/ywzd/adump路径

cd /u01/app/oracle/admin/ywzd/adump
rm -rf *

数据库其他恢复场景

        1、基于时间点进行数据库恢复

RUN {
allocate channel ch00 type 'sbt_tape';
send 'nb_ora_serv=NBU_MASTER服务器主机名'; 
send 'nb_ora_client=NBU客户端主机名';
set until time "to_date('2024-02-25 15:00:00','yyyy-mm-dd hh24:mi:ss')";
restore database;
recover database;
RELEASE CHANNEL ch00;
}

        2、恢复归档日志文件的各种方法

RUN {
allocate channel ch01 type 'sbt_tape';
send 'nb_ora_serv=NBU_MASTER服务器主机名'; 
send 'nb_ora_client=NBU客户端主机名';
set archivelog destination to '/home/oracle/arch';
restore archivelog from sequence 1152 thread 2; 
restore archivelog from logseq 15143 until logseq 15146 thread 2;
restore archivelog time between "to_date('20220103 00','yyyymmdd hh24')" and "to_date('20220106 23','yyyymmdd hh24')";
restore archivelog all;
RELEASE CHANNEL ch01;
}

NBU报错处理

        1、NBU恢复过程出现ORA-27211错误。

using target database control file instead of recovery catalog
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of allocate command on ch00 channel at 01/18/2022 23:58:26
ORA-19554: error allocating device, device type: SBT_TAPE, device name: 
ORA-27211: Failed to load Media Management Library
Additional information: 2

        2、方法一:通过oracle_link加载Library库文件

$/usr/openv/netbackup/bin/oracle_link 
Fri Mar  8 01:01:09 CST 2024
All Oracle instances should be shutdown before running this script.

Please log into the Unix system as the Oracle owner for running this script

Do you want to continue? (y/n) [n] y


LIBOBK path: /usr/openv/netbackup/bin
ORACLE_HOME: /u01/app/oracle/product/12.1.0.2/dbhome_1
Oracle version: 12.1.0.2.0
Platform type: x86_64
Linking LIBOBK:
Moving 64-bit libobk.so to libobk.so.back
ln -s /usr/openv/netbackup/bin/libobk.so64 /u01/app/oracle/product/12.1.0.2/dbhome_1/lib/libobk.so
Done

Please check the trace file located in /tmp/make_trace.26440 
to make sure the linking process was successful.

        3、方法二:在rman恢复命令中设置SBT_LIBRARY参数

allocate channel ch00 type 'SBT_TAPE';
allocate channel ch00 type 'sbt_tape' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';

        以上就是本期关于“基于NBU备份软件进行Oracle数据库异机恢复”技术分享。希望能给大家带来帮助!

        欢迎关注“数据库运维之道”公众号,一起学习数据库技术!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值