oracle 新建用户NUB恢复ORACLE数据库
刘荣刚
(云南锡业集团(控股)有限责任公司网络中心,云南个旧661000)
摘要:利用NBU将ORACLE备份数据恢复到一个全新的数据库环境,详细讲解NBU恢复ORACLE数据库的过程。
关键词:NBU;ORACLE;备份;恢复
中图分类号:TP311文献标识码:A文章编号:1009-3044(2016)26-0003-05
1引言
NUB(Veritas NetBackup)是公认的企业级备份和恢复软件的领导者,越来越多的企业采用NBU备份ORACLE数据库。NBU备份的ORACLE数据,依据不同的情况及用户期望的目标,可以有不同的恢复方式。本文所陈述的是在一种极端情况下的数据库恢复,即原来运行的数据库软硬件平台已不复存在,仅留
下备份数据,需要将ORACLE数据库恢复到一个新建的数据库平台上。理解了这种恢复方式,则其他恢复方式都可以看做这种恢复方式的简化操作。
2运行环境
2.1原始数据库的运行环境
原始数据库运行于Linux平台,采用2台服务器组成RAC 集,数据库的数据文件存储在ASM的+YTNC存储组中,数据库实例分别是ytcdb1和ytcdb2。Hosts文件内容如下:
#Public Network
10.7.100.150ytcdb01
10.7.100.152ytcdb02
#Virtual IP address
10.7.100.151ytcdb01_vip
10.7.100.153ytcdb02_vip
#Interconnect RAC
10.10.10.100ytcdb01_rac
10.10.10.101ytcdb02_rac
#nbu server address
10.7.100.111netbackup
其中netbackup为NBU备份服务器主机及备份介质服务器。
2.2新建数据库运行环境
新建数据库运行环境运行于Linux平台,采用2台服务器组成RAC集,数据库的数据文件存储在ASM的+DBDIR存储组中,安装数据库时仅安装程序,不创建数据库。CRS程序安装目录为/oracle/crs,数据库程序安装目录为/oracle/ora。Hosts文件内容如下:
#Public Network
10.7.100.164ytcdb03
10.7.100.166ytcdb04
#Virtual IP address
10.7.100.165ytcdb03_vip
10.7.100.167ytcdb04_vip
#Interconnect RAC
10.10.10.110ytcdb03_rac
10.10.10.111ytcdb04_rac
#nbu server address
10.7.100.111netbackup
CRS集状态:
[root@ytcdb03~]#/oracle/crs/bin/crs_stat-t
Name Type Target State Host
--------------------------------------------SM1.asm application ONLINE ONLINE b03.gsd application ONLINE ONLINE s application ONLINE ONLINE b03.vip application ONLINE ONLINE SM2.asm application ONLINE ONLINE b04.gsd application ONLINE ONLINE s application ONLINE ONLINE b04.vip application ONLINE ONLINE ytcdb04
新环境包含ytcdb03、ytcdb04的CRS集及ASM实例,不包括任何数据库。
3安装NBU客户端
CRS环境下的数据库恢复,仅需在其中一个集成员上完成,本文选择在ytcdb03上实施数据库恢复。在ytcdb03上安装NBU客户端,确保ytcdb03能够与netbackup建立通讯。NBU程序安装于/usr/openv/netbackup/bin。
4查看备份数据
[root@ytcdb03~]#/usr/openv/netbackup/bin/bplist-C
收稿日期:2016-08-15
作者简介:刘荣刚(1964—),男,云南个旧人,计算机高级工程师,大学,工学学士,主要研究方向为计算机应用和管理。
DOI:10.14004/jki.ckt.2016.3392
Computer Knowledge and Technology电脑知识与技术第12卷第26期(2016年9月)
ytcdb01-S netbackup-l-t4-s2016-09-01-e2016-09-05-R /
209715209月0323:12/c-588629775-20160903-05 209715209月0323:11/
ctrl_dYTCDB_u2jretp9d_s11347_p1_t921625901 209715209月0323:11/c-588629775-20160903-04 4179712K9月0323:09/
arch_dYTCDB_u2hretp4o_s11345_p1_t921625752 4223488K9月0323:07/
arch_dYTCDB_u2gretp1b_s11344_p1_t921625643 209715209月0323:06/c-588629775-20160903-03 9489612809月0322:59/
bk_dYTCDB_u2eretoih_s11342_p1_t921625169 209715209月0300:19/c-588629775-20160903-02 209715209月0300:19/
ctrl_dYTCDB_u2crer8sf_s11340_p1_t921543567 209715209月0300:18/c-588629775-20160903-01 3774873609月0300:18/
arch_dYTCDB_u2arer8qm_s11338_p1_t921543510
4452608K9月0300:11/
arch_dYTCDB_u26rer8db_s11334_p1_t921543083 209715209月0300:10/c-588629775-20160903-00 2621449月0300:10/
bk_dYTCDB_u24rer8b5_s11332_p1_t921543013
32888064K9月0222:59/
bk_dYTCDB_u1grer46h_s11312_p1_t921538769
以上为2016年9月2日22时59分开始做的一个数据库全备份,其中/c-588629775-20160903-05中含有这个备份数据的最新的参数文件及控制文件,本文将从这个全备份中恢复数据。
5恢复参数文件spfile
我们所需要的参数文件位于备份集c-588629775-20160903-05中,其原始存储位置位于ASM的+YTNC存储组中,在恢复的时候要重定位到ASM的+DBDIR存储组中。以下为恢复参数文件的RMAN程序:
[root@ytcdb03oracle]#vi restorespfile.sh
/oracle/ora/bin/rman target/<<EOF_RMAN
RUN{
ALLOCATE CHANNEL ch00TYPE'SBT_TAPE'PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64'; SEND'NB_ORA_SERV=netbackup,NB_ORA_CLIENT= ytcdb01';
restore spfile to'+DBDIR/a'from'/c-588629775-20160903-05';
}
6编辑参数文件
由于参数文件中控制文件的位置、归档日志位置、闪回区位置等都是指向原始运行平台的位置,所以,参数文件恢复之后,要对参数文件进行修改,主要是修改控制文件、归档日志、闪回区位等在新环境下的位置。
6.1设置oracle环境变量
[oracle@ytcdb03bin]$export ORACLE_SID=ytcdb1
6.2启动数据库到nomount状态
[oracle@ytcdb03bin]$./sqlplus/nolog
SQL>connect/as sysdba
Connected to an idle instance.
SQL>startup nomount;
ORACLE instance started.
Total System Global Area2.1475E+10bytes
Fixed Size2122368bytes
Variable Size  1.2918E+10bytes Database Buffers853*******bytes
Redo Buffers14651392bytes
6.3利用spfile生成可编辑的pfile文件
SQL>create pfile='/oracle/ora/a'from spfile= '+DBDIR/a';
File created.
SQL>exit
6.4编辑pfile文件
[oracle@ytcdb03bin]$vi/oracle/ora/a
*.control_files='+YTNC/l','+YTNC/ytcdb/ l','+YTNC/l'
*.db_create_file_dest='+YTNC’
*.db_recovery_file_dest='+YTNC'
*.log_archive_dest='+YTNC/ytcdb'
将以上涉及存储位置的行对应修改为:
*.control_files='+DBDIR/l','+DBDIR/ytcdb/ l','+DBDIR/l'
*.db_create_file_dest='+DBDIR'
*.db_recovery_file_dest='+DBDIR'
*.log_archive_dest='+DBDIR/ytcdb'
6.5用新的pfile文件启动数据库
[oracle@ytcdb03bin]$./sqlplus/nolog
SQL>connect/as sysdba
Connected to an idle instance.
SQL>shutdown immediate
ORA-01507:database not mounted
ORACLE instance shut down.
SQL>startup pfile=’/oracle/ora/a’nomount; ORACLE instance started.
Total System Global Area2.1475E+10bytes
Computer Knowledge and Technology电脑知识与技术第12卷第26期(2016年9月)
Fixed Size2122368bytes
Variable Size  1.2918E+10bytes Database Buffers853*******bytes
Redo Buffers14651392bytes
6.6创建新的spfile文件
SQL>create spfile='+DBDIR/a'from pfile='/oracle/ora/a';
File created.
SQL>exit
7恢复控制文件
参数文件准备好以后,就可以恢复控制文件了。控制文件的存储位置是有参数文件确定的,在恢复时不需要指定存储位置。控制文件恢复的RMAN程序如下:
[root@ytcdb03oracle]#vi/oracle/ora/dbs/recovercontrol.sh /oracle/ora/bin/rman target/<<EOF_RMAN
run{
ALLOCATE CHANNEL CH00TYPE'SBT_TAPE'PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64'; SEND'NB_ORA_SERV=netbackup,NB_ORA_CLIENT= ytcdb01';
restore controlfile from'/c-588629775-20160903-05';
}
8恢复数据文件
8.1将数据库启动到mount状态
在恢复数据文件之前,我们要将数据库启动到mount状态。由于在恢复控制文件之前已将数据库启动到nomount状态,因此可以用如下SQL命令将数据库置于mount状态。SQL>alter database mount;
Database altered.
SQL>
8.2查看原始数据文件
到目前为止,控制文件中仍然保存着原始数据库的数据文件名称及存储位置,我们先要确定原始数据库有哪些数据文件及存储在什么位置,可以通过查询v$datafile获得原始数据库文件名及存储位置。
SQL>select name from v$datafile;
NAME
--------------------------------------------+YTNC/ytcdb/datafile/system.277.844095125
+YTNC/ytcdb/datafile/undotbs1.278.844095129
+YTNC/ytcdb/datafile/sysaux.279.844095131
+YTNC/ytcdb/datafile/undotbs2.281.844095135
+YTNC/ytcdb/datafile/users.282.844095135
+YTNC/ytcdb/datafile/undomac.288.844095863
+YTNC/ytcdb/datafile/nnc_index03.289.844096055
+YTNC/ytcdb/datafile/iufo.290.844096083
+YTNC/ytcdb/datafile/nnc_index02.291.844096113
+YTNC/ytcdb/datafile/nnc_index01.292.844096145
+YTNC/ytcdb/datafile/nnc_data01.293.844096185
11rows selected.
SQL>
8.3恢复数据文件
恢复数据文件最主要的是重定向数据文件的存储位置,将数据文件恢复到新环境下的ASM存储组中。恢复数据文件的RAM程序如下:
[root@ytcdb03oracle]#vi rmanrestore.sh
/oracle/ora/bin/rman target/<<EOF_RMAN
RUN{
ALLOCATE CHANNEL ch00TYPE'SBT_TAPE'PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64'; SEND'NB_ORA_SERV=netbackup,NB_ORA_CLIENT= ytcdb01';
Set newname for datafile'+YTNC/ytcdb/datafile/ system.277.844095125'to'+DBDIR/YTCDB/datafile/ system.277.844095125';
Set newname for datafile'+YTNC/ytcdb/datafile/ undotbs1.278.844095129'to'+DBDIR/YTCDB/datafile/ undotbs1.278.844095129';
Set newname for datafile'+YTNC/ytcdb/datafile/ sysaux.279.844095131'to'+DBDIR/YTCDB/datafile/ sysaux.279.844095131';
Set newname for datafile'+YTNC/ytcdb/datafile/ undotbs2.281.844095135'to'+DBDIR/YTCDB/datafile/ undotbs2.281.844095135';
Set newname for datafile'+YTNC/ytcdb/datafile/ users.282.844095135'to'+DBDIR/YTCDB/datafile/ users.282.844095135';
Set newname for datafile'+YTNC/ytcdb/datafile/ undomac.288.844095863'to'+DBDIR/YTCDB/datafile/
undomac.288.844095863';
Set newname for datafile'+YTNC/ytcdb/datafile/
nnc_index03.289.844096055'to'+DBDIR/YTCDB/datafile/ nnc_index03.289.844096055';
Set newname for datafile'+YTNC/ytcdb/datafile/ iufo.290.844096083'to'+DBDIR/YTCDB/datafile/
iufo.290.844096083';
Set newname for datafile'+YTNC/ytcdb/datafile/
nnc_index02.291.844096113'to'+DBDIR/YTCDB/datafile/ nnc_index02.291.844096113';
Set newname for datafile'+YTNC/ytcdb/datafile/
nnc_index01.292.844096145'to'+DBDIR/YTCDB/datafile/ nnc_index01.292.844096145';
Set newname for datafile'+YTNC/ytcdb/datafile/
nnc_data01.293.844096185'to'+DBDIR/YTCDB/datafile/ nnc_data01.293.844096185';
Computer Knowledge and Technology电脑知识与技术第12卷第26期(2016年9月)
RESTORE DATABASE;
switch datafile all;
}
8.4修改redolog文件位置
原始redolog文件的名称及存储位置可以通过查询图v $Logfile获得:
SQL>select member from v$Logfile; MEMBER
-----------------------------------------+YTNC/ytcdb/onlinelog/group_1.273.844095123
+YTNC/ytcdb/onlinelog/group_2.275.844095125
+YTNC/ytcdb/onlinelog/group_3.283.844095489
+YTNC/ytcdb/onlinelog/group_4.285.844095491
8rows selected.
利用SQL命令修改redolog文件的存储位置:SQL>alter database rename file'+YTNC/ytcdb/onlinelog/ group_1.273.844095123'to'+DBDIR/ytcdb/onlinelog/group_ 1.273.844095123';
SQL>alter database rename file'+YTNC/ytcdb/onlinelog/ group_2.275.844095125'to'+DBDIR/ytcdb/onlinelog/group_ 2.275.844095125';
SQL>alter database rename file'+YTNC/ytcdb/onlinelog/ group_3.283.844095489'to'+DBDIR/ytcdb/onlinelog/group_ 3.283.844095489';
SQL>alter database rename file'+YTNC/ytcdb/onlinelog/ group_4.286.844095491'to'+DBDIR/ytcdb/onlinelog/group_ 4.285.844095491';
8.5修改tempfile文件位置
原始tempfile文件的名称及存储位置可以通过查询图v $tempfile获得:
SQL>select name from v$tempfile;
NAME
--------------------------------------------+YTNC/ytcdb/tempfile/temp.280.844095131
+YTNC/ytcdb/tempfile/temmac.299.844099227
+YTNC/ytcdb/tempfile/temmac.300.844099255
利用SQL命令修改tempfile文件的存储位置:SQL>alter database rename file'+YTNC/ytcdb/tempfile/ temp.280.844095131'to'+DBDIR/ytcdb/tempfile/ temp.280.844095131';
SQL>alter database rename file'+YTNC/ytcdb/tempfile/tem⁃mac.299.844099227'to'+DBDIR/ytcdb/tempfile/tem⁃mac.299.844099227';
SQL>alter database rename file'+YTNC/ytcdb/tempfile/tem⁃mac.300.844099255'to'+DBDIR/ytcdb/tempfile/tem⁃mac.300.844099255';
9恢复数据库
恢复数据库仍然必须使用RMAN程序,并且同样要连接到NBU的磁带库,因为恢复数据库时要查所需的归档日志。恢复数据库的RMAN程序如下:
[root@ytcdb03oracle]#vi rmanrecover.sh
/oracle/ora/bin/rman target/<<EOF_RMAN
RUN{
ALLOCATE CHANNEL ch00TYPE'SBT_TAPE'PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64'; SEND'NB_ORA_SERV=netbackup,NB_ORA_CLIENT= ytcdb01';
RECOVER DATABASE;
}
注意程序执行完毕时的错误提示:
RMAN-00569:===============ERROR MESSAGE STACK FOLLOWS===============
RMAN-00571:================================= RMAN-03002:failure of recover command at07/28/201617: 10:20
RMAN-06054:media recovery requesting unknown log: thread2seq36228lowscn5358717364
由于NBU采用在线备份(热备份),在备份时数据库仍然在运行,在线归档日志在不断变化,NBU并不备份在线归档日志。把数据库恢复到一个新的数据库平台上,由于没有在线归档日志,实际上是一种不完全恢复,因此,在数据库恢复时会报需要在线归档日志的错误,只能忽略。
10打开数据库
由于数据库恢复过程中无法应用在线归档日志。因此,在打开数据库时,需要使用RESETLOG参数,强制数据库放弃原来的在线归档日志,使用新的在线归档日志。SQL>connect/as sysdba
Connected.
SQL>alter database open RESETLOGS; Database altered.
SQL>
11在集中添加数据库
数据库成功恢复并打开之后,需要将数据库添加到CRS集中,添加数据库的关键是spfile文件的位置及数据库程序的安装位置。
以oracle登录:
[oracle@ytcdb03~]#/oracle/ora/bin/srvctl add database-d ytcdb-n ytcdb-o'/oracle/ora'-p'+DBDIR/a'其中:oracle数据库安装目录为/oracle/ora,数据库名称为ytcdb。
查看数据库添加结果:
[oracle@ytcdb03~]#/oracle/ora/bin/srvctl config database-d ytcdb–a
DB_NAME:ytcdb
ORACLE_HOME:/oracle/ora
SPFILE:+DBDIR/a
Computer Knowledge and Technology电脑知识与技术第12卷第26期(2016年9月)
DOMAIN:null
DB_ROLE:null
START_OPTIONS:null
POLICY:AUTOMATIC
ENABLE FLAG:DB ENABLED
12在集中添加数据库实例
以oracle登录:
[oracle@ytcdb03~]#/oracle/ora/bin/srvctl add instance-d ytcdb-i ytcdb1-n ytcdb03
[oracle@ytcdb03~]#/oracle/ora/bin/srvctl add instance-d ytcdb-i ytcdb2-n ytcdb04
查看数据库实例添加结果:
[oracle@ytcdb03~]#/oracle/ora/bin/srvctl config database-d ytcdb–a
ytcdb03ytcdb1/oracle/ora
ytcdb04ytcdb2/oracle/ora
DB_NAME:ytcdb
ORACLE_HOME:/oracle/ora
SPFILE:+DBDIR/a DOMAIN:null
DB_ROLE:null
START_OPTIONS:null
POLICY:AUTOMATIC
ENABLE FLAG:DB ENABLED
13重启数据库集
13.1分别在ytcdb03和ytcdb04重启CRS。[oracle@ytcdb03~]#/oracle/ora/bin/crsctl stop crs [oracle@ytcdb03~]#/oracle/ora/bin/crsctl start crs
[oracle@ytcdb04~]#/oracle/ora/bin/crsctl stop crs [oracle@ytcdb04~]#/oracle/ora/bin/crsctl start crs 13.2查看CRS集状态
[root@ytcdb03oracle]#/oracle/crs/bin/crs_stat-t Name Type Target State Host
--------------------------------------------db.db application ONLINE ONLINE b1.inst appli
cation ONLINE ONLINE b2.inst application ONLINE ONLINE SM1.asm application ONLINE ONLINE ytcdb03
<03.lsnr application ONLINE ONLINE b03.gsd application ONLINE ONLINE s application ONLINE ONLINE b03.vip application ONLINE ONLINE SM2.asm application ONLINE ONLINE ytcdb04
<04.lsnr application ONLINE ONLINE b04.gsd application ONLINE ONLINE s application ONLINE ONLINE b04.vip application ONLINE ONLINE ytcdb04 14结语
NBU恢复oracle数据库依据不同的目的及环境状况可以有不同的恢复方式,本文论述的是原始数据库运行环境被彻底破坏,需要将数据库恢复到一个新的运行环境时的恢复方法,可以说基本囊括了常见的数据库恢复方法。针对不同的数据库故障,参照本文,适当省略不必要的步骤,可以轻松完成各种故障现象下的oracle数据库恢复。
参考文献:
[1]Matthew Hart,Robert G.Freeman.Oracle Database10g RMAN备份与恢复[M].江玲玲,译.北京:清华大学出版社,2008.