测试说明及背景
NBU备份系统的Oracle数据库恢复演练是一个重要的IT运营活动,它有助于确保在真正的灾难或数据丢失情况下能够快速有效地恢复业务关键数据。
本测试,将Oracle RAC数据库恢复至单节点主机,在测试环境中,仍然使用备份数据恢复。
1.1 主要测试过程
1)搭建独立测试环境,将测试节点的OS版本和数据库版本与生产保持一致;
2)在测试主机上安装NetBackup软件,并测试简单的文件备份是否成功;
3)Oracle RAC恢复至测试节点; 4)数据库验证,open数据库后,进行相关数据验证。
1.2 测试要求
测试环境主机的操作系统版本以及oracle数据库软件版本与生产环境保持一致; 在测试机上安装NetBackup软件并进行配置,进行简单的文件系统备份测试,确保成功。 在测试机上创建的oracle用户 uid和gid信息与生产环境主机保持一致;oracle环境变量配置保持一致。
环境准备
Master服务器
mastersrv
源端Client主机
db1
OS
Linux 7.5
DB version
Oracle 19c
NetBackup version
8.3.2
测试环境:
测试服务器
目标端Client主机:testdb OS:Linux 7.5
DB version:Oracle 19c
NetBackup version: 8.3.2
虚拟机
演练过程
3.1 修改/etc/hosts文件
在测试环境主机上修改/etc/hosts文件,添加NBU master server,media server 解析,保持测试环境中的对应关系。
在Master server 、media server主机上修改/etc/hosts文件,添加测试环境主机解析。
192.168.128.206 testdb1
##nbu master node list##
192.168.128.4 master01
192.168.128.5 master02
192.168.128.6 mastersrv
##nbu media list##
192.168.128.7 media01
192.168.128.8 media02
3.2 修改NBU相关配置
在Master上,创建/usr/openv/netbackup/db/altnames/No.Restrictions文件,用于异机恢复。
3.3 备份记录查询
找到需要恢复的备份集,在Master server上执行如下命令:
# bplist -l -C sourcedb -t 4 -R
有类似如下输出,根据需求找到需要恢复的备份集。

3.4 启动数据库到nomount状态
在/tmp下,使用initORA.ora用于初始阶段的引导。通过sqlplus命令行操作,使用oracle自带参数文件模板创建临时pfile,将数据库启动至nomount状态;
testdb /home/oracle>export ORACLE_SID=ORA
testdb home/oracle>sqlplus nolog
SQL*Plus: Release 19.0.0.0.0 Production on Mon Jan 19 18:45:27 2018
Copyright (c) 1982, 2011, Oracle. All rights reserved.
SQL> conn as sysdba
Connected to an idle instance.
SQL> startup nomount pfile='/tmp/initORA.ora';
ORACLE instance started.
Total System Global Area 5344731136 bytes
3.5 恢复spfile文件
RUN{
ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
SEND 'NB_ORA_SERV=mastersrv,NB_ORA_CLIENT=testdb';
restore spfile to pfile '/u01/app/oracle/product/19.0.0/dbhome_1/dbs/test.ora' from '/c-1846610895-20201208-09';
RELEASE CHANNEL ch00;
}
3.6 修改pfile文件
恢复spfile完成后,生产pfile文件,进行修改参数;
根据单节点的要求,将原RAC的参数去除。
3.7 创建spfile文件
SQL> shutdown immediate
SQL> exit
testdb/home/oracle>export ORACLE_SID=testdb
testdb/home/oracle>sqlplus nolog
SQL*Plus: Release 19.0.0.0.0 Production on Mon Jan 19 19:54:01 2018
Copyright (c) 1982, 2011, Oracle. All rights reserved.
SQL> conn as sysdba
Connected to an idle instance.
SQL> create spfile from pfile='/u01/app/oracle/product/19.0.0/dbhome_1/test.ora';
File created.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 8.5516E+10 bytes
Fixed Size 2192008 bytes
Variable Size 4.2950E+10 bytes
Database Buffers 4.2413E+10 bytes
Redo Buffers 151187456 bytes
SQL>
3.8 恢复控制文件
RUN{
ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
SEND 'NB_ORA_SERV=mastersrv,NB_ORA_CLIENT=testdb';
restore controlfile from 'c-1846610895-20201208-09';
RELEASE CHANNEL ch00;
}
3.9 启动数据库到mount状态
Alter database mount;
3.10 调整块跟踪参数
ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;
如不执行,后续open库时候会报错。
3.11 恢复数据文件和归档日志
在恢复的过程中,数据文件需要重新指定到新路径进行恢复,可以由DBA选择恢复到文件系统或者是裸卷。
利用list backup of archivelog all命令查看最新的scn;然后通过SCN恢复;(Low SCN的最大值)
RUN{
ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
SEND 'NB_ORA_SERV=mastersrv,NB_ORA_CLIENT=TESTDB';
ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
SEND 'NB_ORA_SERV=mastersrv,NB_ORA_CLIENT=TESTDB';
ALLOCATE CHANNEL ch02 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
SEND 'NB_ORA_SERV=mastersrv,NB_ORA_CLIENT=TESTDB';
ALLOCATE CHANNEL ch03 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
SEND 'NB_ORA_SERV=mastersrv,NB_ORA_CLIENT=TESTDB';
set newname for datafile '+SYS/TESTDB/DATAFILE/system.267.1013453659' to '/data/TESTDB/DATAFILE/system.267.1013453659';
set newname for datafile '+SYS/TESTDB/DATAFILE/sysaux.268.1013453661' to '/data/TESTDB/DATAFILE/sysaux.268.1013453661';
set newname for datafile '+SYS/TESTDB/DATAFILE/undotbs1.269.1013453661' to '/data/TESTDB/DATAFILE/undotbs1.269.1013453661';
set newname for datafile '+SYS/TESTDB/DATAFILE/undotbs2.271.1013979385' to '/data/TESTDB/DATAFILE/undotbs2.271.1013979385';
set newname for datafile '+SYS/TESTDB/DATAFILE/undotbs3.272.1013453669' to '/data/TESTDB/DATAFILE/undotbs3.272.1013453669';
set newname for datafile '+SYS/TESTDB/DATAFILE/undotbs4.273.1013453669' to '/data/TESTDB/DATAFILE/undotbs4.273.1013453669';
set newname for datafile '+SYS/TESTDB/DATAFILE/undotbs5.274.1013453669' to '/data/TESTDB/DATAFILE/undotbs5.274.1013453669';
set newname for datafile '+SYS/TESTDB/DATAFILE/undotbs6.275.1013453669' to '/data/TESTDB/DATAFILE/undotbs6.275.1013453669';
set newname for datafile '+SYS/TESTDB/DATAFILE/users.276.1013453669' to '/data/TESTDB/DATAFILE/users.276.1013453669';
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
restore database;
switch datafile all;
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
RELEASE CHANNEL ch02;
RELEASE CHANNEL ch03;
}
RUN{
ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
SEND 'NB_ORA_SERV=mastersrv,NB_ORA_CLIENT=TESTDB';
recover database until scn 16673848511159;
RELEASE CHANNEL ch00;
}
3.12 以resetlogs 方式打开数据库
[oracle@SJKHFCS01 dbs]$ sqlplus as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Dec 09 18:03:31 2020
Version 19.0.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
SQL> alter database open resetlogs;
Database altered.
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE
3.13 重新启动数据库
SQL>shutdown immediate
SQL>startup
3.14 验证数据文件
[oracle@SJKHFCS01 ~]$ sqlplus as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 918:16:412020
Version 19.7.0.0.0
Copyright (c) 1982, 2020, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.7.0.0.0
SQL> select t.*
2from (SELECT D.TABLESPACE_NAME,
SPACE "SUM_SPACE(M)",
BLOCKS SUM_BLOCKS,
SPACE - NVL(FREE_SPACE, 0) "USED_SPACE(M)",
ROUND((1 - NVL(FREE_SPACE, 0) SPACE) * 100, 2) "USED_RATE(%)",
3 4 5 6 7 FREE_SPACE "FREE_SPACE(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) (1024 * 1024), 2) SPACE,
SUM(BLOCKS) BLOCKS
8 9 10 11 FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) D,
(SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) (1024 * 1024), 2) FREE_SPACE
FROM DBA_FREE_SPACE
12 13 14 15 16 GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
UNION ALL --if have tempfile
17 18 19 SELECT D.TABLESPACE_NAME,
SPACE "SUM_SPACE(M)",
20 21 BLOCKS SUM_BLOCKS,
USED_SPACE "USED_SPACE(M)",
ROUND(NVL(USED_SPACE, 0) SPACE * 100, 2) "USED_RATE(%)",
SPACE - USED_SPACE "FREE_SPACE(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) (1024 * 1024), 2) SPACE,
SUM(BLOCKS) BLOCKS
22 23 24 25 26 27 28 FROM DBA_TEMP_FILES
GROUP BY TABLESPACE_NAME) D,
29 30 (SELECT TABLESPACE,
ROUND(SUM(BLOCKS * 8192) / (1024 * 1024), 2) USED_SPACE
FROM V$SORT_USAGE
GROUP BY TABLESPACE) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE(+)) t
order by"USED_RATE(%)" desc;
select count(*) from hxb_tables;
演练总结
通过此恢复演练手册,可以从容的应对在NBU备份系统中面对各种Oracle数据库的物理恢复需求,日常通过恢复演练,来提升自身应急恢复能力,对未来面对更多的挑战,做好准备。
虽恢复过程中遇到了一些挑战,但通过及时解决问题和总结经验教训,我们能够不断改进备份和恢复策略。未来将继续优化备份体系结构,提高恢复效率,并确保所有相关人员都具备应对数据丢失事件的能力。

本文作者:景 璐(上海新炬中北团队)
本文来源:“IT那活儿”公众号





