-----------------------------------------------------------------------------------
需求:
将nbu备份的生产环境(PCCMDB--oracle19c)恢复到测试环境;
-----------------------------------------------------------------------------------
一、测试环境说明:
测试环境OS版本:linux7.6
存储方式:文件系统
Oracle版本:19.5
-----------------------------------------------------------------------------------
二、查看nbu备份情况(登录到catalog库执行查询):
select * from rman_19c.rc_database; ------查询catalog库中注册的数据库
select * from rman_19c.rci_backup_piece where handle like 'bk_dPCCM%'; ----查询数据库的全备份
select aa.db_id,aa.handle,aa.tag,aa.completion_time,aa.bytes from rman_19c.rci_backup_piece aa
where handle like 'ctrl_dPCCM%' order by completion_time desc; ----查询最新备份的控制文件
select aa.db_id,aa.handle,aa.tag,aa.completion_time,aa.bytes from rman_19c.rci_backup_piece aa
where handle like 'arch_dPCCM%' order by completion_time desc; ----查询最新备份的归档文件
-----------------------------------------------------------------------------------
三、在PCCMDB生产环境生成pfile,修改相关参数:
1、生成pfile:
select name,value from v$parameter where name='spfile';
create pfile='/home/oracle/pccm2024.ora' from spfile='/oracle/19.3.0/dbs/spfilepccmdb.ora';
2、修改参数文件:/home/oracle/pccm2024.ora
注意,要修改几个地方:
根据测试服务器的CPU和内存资源,修改SGA、PGA、processes等设置;
修改控制文件和归档日志的设置路径及文件名称;
例如:
sga:6442450944----6G
db_cache_size: 5368709120----5G
pga_aggregate_target:3221225472----2G
java_pool_size:52428800----50M
large_pool_size:157286400----150M
shared_pool_size:1073741824----1G
oracle_base='/oracle'
audit_file_dest='/oracle/admin/pccmdb/adump' ----没有路径建立路径
control_files='/data/pccmdb/control01.ctl' ----注意控制文件名称
db_create_file_dest='/data'
db_files=100
db_name='pccmdb'
diagnostic_dest='/oracle/app/oracle'
job_queue_processes=0 ----设置为0,取消任务执行
local_listener='(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=REGISTER)))'
log_archive_dest_1='LOCATION=/oracle/arch'
processes=300
undo_tablespace='UNDOTBS1'
-----------------------------------------------------------------------------------
四、启动测试环境数据库到nomount状态:
oracle$export ORACLE_SID=pccmdb
sql>sqlplus / as sysdba
sql>startup nomount pfile='/home/oracle/pccm.ora';
sql>set linesize 2000 pagesize 200
sql>show parameter name;
sql>show parameter control;
sql>select instance_name,status from v$instance;
-----------------------------------------------------------------------------------
五、在测试环境,连接到恢复目录数据库:
oracle$rman target /
RMAN>connect catalog rman_19c/passwd@CATADB19C
RMAN>set dbid 1259609138 ----生产环境数据库的DBID
-----------------------------------------------------------------------------------
六、恢复最新备份的控制文件:
1、连接到恢复目录数据库,查询最新备份的控制文件:
select aa.db_id,aa.handle,aa.tag,aa.completion_time,aa.bytes
from rman_19c.rci_backup_piece aa
where handle like 'ctrl_dPCCM%'
order by completion_time desc;
2、在测试环境,恢复控制文件:注意和参数文件中的文件名一样,否则报错;
RMAN>
run{
ALLOCATE CHANNEL CH00 TYPE 'SBT_TAPE' ;
send 'nb_ora_serv=nbumaster,NB_ora_client=pccmdb';
restore controlfile to '/data/pccmdb/control01.ctl' from '/ctrl_dPCCMDB_usq37pnke_s136090_p1_t1182588558';
release channel CH00;
}
注:
恢复控制文件报错;无法继续进行;
nbu在备份时需要调用oracle lib库文件,bin目录下提供了此脚本,执行:
oracle@pccmtest:/home/oracle$ /usr/openv/netbackup/bin/oracle_link
执行此脚本失败,提示不支持Oracle19c;
说明:nbu8.0版本,不支持Oracle19c;需要升级到8.1.1以上;
咨询nbu厂家后,手工建立dblink;
控制文件可以正常恢复成功;
3、启动到mount状态:
RMAN> sql 'alter database mount';
oracle$ps -ef | grep oracle ----查看oracle进程
-----------------------------------------------------------------------------------
七、恢复最少的数据文件:
1、由于生产环境数据量非常大(几个T),可以只恢复最少的数据文件,满足测试环境数据库能正常启动即可;
查询生产库system、sysaux、users、undotbs1表空间的数据文件号,进行恢复;
也可以根据需求,在增加部分业务表空间,或者全库恢复;
select * from v$tablespace; ----上述表空间号为0,1,2,4
select file#,status,enabled,bytes,name from v$datafile where ts# in (0,1,2,4); ----查看需要恢复的数据文件号及大小
本次需要恢复的数据文件如下:
/data/pccmdb/system01.dbf
/data/pccmdb/sysaux01.dbf
/data/pccmdb/undotbs01.dbf
/data/pccmdb/undotbs02.dbf
/data/pccmdb/users01.dbf
/data/pccmdb/users02.dbf
/data/pccmdb/tbs_data_46.dbf
/data/pccmdb/tbs_data_47.dbf
2、恢复最少数据文件--由于是恢复到文件系统,因此需要指定文件名称;恢复到datadg则不用,asm自动命名:
恢复到文件系统:
RMAN>
run{
ALLOCATE CHANNEL CH01 TYPE 'SBT_TAPE';
send 'nb_ora_serv=nbumaster,NB_ora_client=pccmdb';
set newname for datafile 1 to '/data/pccmdb/system01.dbf' ;
set newname for datafile 2 to '/data/pccmdb/sysaux01.dbf' ;
set newname for datafile 3 to '/data/pccmdb/undotbs01.dbf' ;
set newname for datafile 4 to '/data/pccmdb/users01.dbf' ;
set newname for datafile 55 to '/data/pccmdb/users02.dbf' ;
set newname for datafile 56 to '/data/pccmdb/tbs_data_46.dbf' ;
set newname for datafile 57 to '/data/pccmdb/tbs_data_47.dbf' ;
set newname for datafile 62 to '/data/pccmdb/undotbs02.dbf' ;
restore datafile 1,2,3,4,55,56,57,62;
switch datafile all;
release channel CH01;
}
如果是恢复到asm的datadg磁盘组,则参考如下命令:
select 'set newname for datafile '||file#||' to ''+DATAVG'' ; ' from v$datafile where ts# in (0,1,2,4,5);
恢复到ASM磁盘组:
RMAN>
run{
ALLOCATE CHANNEL CH01 TYPE 'SBT_TAPE';
send 'nb_ora_serv=nbumaster,NB_ora_client=hrdb-db';
set newname for datafile 1 to '+DATADG' ;
set newname for datafile 2 to '+DATADG' ;
set newname for datafile 3 to '+DATADG' ;
set newname for datafile 4 to '+DATADG' ;
set newname for datafile 55 to '+DATADG' ;
set newname for datafile 56 to '+DATADG' ;
set newname for datafile 57 to '+DATADG' ;
set newname for datafile 62 to '+DATADG' ;
restore datafile 1,2,3,4,55,56,57,62;
switch datafile all;
release channel CH01;
}
3、进行数据文件恢复:
-------写成脚本执行,否则可能会由于恢复时间过长,超时断开,导致恢复失败-------------
nohup ./hfpccmdb.sh > hfpccmdb_2024.log &
tail -f hfpccmdb_2024.log
hfpccmdb.sh
rman target / <<EOF
run{
ALLOCATE CHANNEL CH01 TYPE 'SBT_TAPE';
send 'nb_ora_serv=nbumaster,NB_ora_client=pccmdb';
set newname for datafile 1 to '/data/pccmdb/system01.dbf' ;
set newname for datafile 2 to '/data/pccmdb/sysaux01.dbf' ;
set newname for datafile 3 to '/data/pccmdb/undotbs01.dbf' ;
set newname for datafile 4 to '/data/pccmdb/users01.dbf' ;
set newname for datafile 55 to '/data/pccmdb/users02.dbf' ;
set newname for datafile 56 to '/data/pccmdb/tbs_data_46.dbf' ;
set newname for datafile 57 to '/data/pccmdb/tbs_data_47.dbf' ;
set newname for datafile 62 to '/data/pccmdb/undotbs02.dbf' ;
restore datafile 1,2,3,4,55,56,57,62;
switch datafile all;
release channel CH01;
}
-----------------------------------------------------------------------------------
八、恢复归档日志文件:
1、根据恢复数据文件时的tag号,查询catalog库的备份片编号的日期,来确定归档日志恢复到什么时间点;或者根据需求,指定恢复到某个时间点;
select * from rman_new.rc_backup_piece where tag='********';
2、恢复归档日志,注意取消掉其他没有恢复的表空间(由于本次是恢复系统必要的表空间,没有恢复全部业务表空间,因此需要跳过那些没有恢复的表空间):
run {
ALLOCATE CHANNEL CH00 TYPE 'SBT_TAPE' ;
send 'nb_ora_serv=nbumaster,NB_ora_client=pccmdb';
set until time "to_date('2024-10-15 16:30:00','yyyy-mm-dd hh24:mi:ss')";
RECOVER DATABASE SKIP FOREVER TABLESPACE TBS_APP,TBS_DATA,TBS_DSS001,TBS_EDW002,TBS_ODS024;
release channel CH00;
}
全库恢复参考:
run {
ALLOCATE CHANNEL CH00 TYPE 'SBT_TAPE' ;
send 'nb_ora_serv=nbumaster,NB_ora_client=pccmdb';
set until time "to_date('2024-10-15 16:30:00','yyyy-mm-dd hh24:mi:ss')";
RECOVER DATABASE; ----恢复的是全库,没有SKIP FOREVER TABLESPACE
release channel CH00;
}
-----------------------------------------------------------------------------------
九、启动测试环境数据库:
1、退出rman,启动数据库:
sqlplus / as sysdba
set linesize 2000 pagesize 200
查看日志状态:
select * from v$logfile;
alter database rename file '/data/PCCMDB/redo01.log' to '/data/pccmdb/redo01.log';
alter database rename file '/data/PCCMDB/redo02.log' to '/data/pccmdb/redo02.log';
alter database rename file '/data/PCCMDB/redo03.log' to '/data/pccmdb/redo03.log';
alter database rename file '/data/PCCMDB/redo07.log' to '/data/pccmdb/redo07.log';
alter database rename file '/data/PCCMDB/redo08.log' to '/data/pccmdb/redo08.log';
SQL>select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
SQL>select instance_name,status from v$instance;
SQL>alter database open resetlogs;
SQL>select instance_name,status from v$instance;
SQL>select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
-----------------------------------------------------------------------------------
十、恢复完成后,清理生产环境的注册信息:
1、由于通过catalog恢复数据库,相关信息也记录到catalog库,导致nbu备份生产环境归档日志的时候,找错路径;
在生产环境,连接到catalog库,检查过期归档,并清除,nbu备份归档恢复正常;
connect catalog rman_19c/4Qy8_zer@catadb19c
crosscheck archivelog all; ----核对EXPIRED归档日志备份集
delete expired archivelog all; ----删除EXPIRED 归档日志备份集
-----------------------------------------------------------------------------------
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




