从NBU备份恢复到测试服务器案例
nbu恢复测试环境:linux6.5 Oracle11g + ASM存储
一、检查磁盘组空间、停测试环境数据库,释放资源:
1、ps -ef | grep oracle ,停测试库,释放资源;
2、lsdg,清理datadg空间;
grid@nbu-Restore:/home/grid$ sqlplus / as sysdba
SQL> set linesize 2000 pagesize 200
SQL> select name,state,type,total_mb,free_mb from v$asm_diskgroup;
二、从生产环境生成pfile,修改相关参数:
1、生成pfile:
select name,value from v$parameter where name='spfile';
create pfile='/home/oraclezhyydb.ora' from spfile='/oracle/app/oracle/product/11.2.0/dbs/spfilezhyydb.ora'
2、修改参数文件:
注意,要修改几个地方:
根据测试服务器的CPU和内存资源,修改SGA、PGA、processes等设置;
修改控制文件和归档日志的设置路径及文件名称;
例如:
oracle_base='/oracle/app/oracle'
audit_file_dest='/oracle/app/oracle/admin/bss/adump'----没有路径建立路径
control_files='+DATADG/BSS/controlfile/control01.ctl' ----注意控制文件名称
db_create_file_dest='+DATADG'
db_files=100
db_name='zhyydb'
diagnostic_dest='/oracle/app/oracle'
job_queue_processes=0 ----设置为0,取消任务执行
local_listener='(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=REGISTER)))'
log_archive_dest_1='LOCATION=+DATADG'
processes=300
undo_tablespace='UNDOTBS1' --如果是rac环境,指定UNDOTBS1即可
注:如果DATADG下面没有相关的系统数据库目录,则需要建立目录:
sqlplus / as sysasm
alter diskgroup datadg add directory '+datadg/zhyydb'
三、启动数据库到nomount状态:
export ORACLE_SID=zhyydb
sqlplus / as sysdba
startup nomount pfile='/home/oracle/zhyy.ora';
show parameter name;
show parameter control;
exit
四、连接到恢复目录数据库:
注只在恢复控制文件的时候,需要连接到catalog,以后再恢复数据文件,归档日志,就不需要了,恢复是利用的控制文件来恢复的;
oracle@nbu-Restore:/oracle$rman target /
connect catalog rman_new/4Qy8_zer@NEWCATADB
set dbid 2030516423
五、恢复最新备份的控制文件:
登录到nbumaster主机,使用命令查询备份情况(在测试服务器上,也可以查询zhyy-db是主机名):
bplist -C zhyy-db -t 4 -R -l / | more
1、连接到newcatadb恢复目录数据库:
----查询最新备份的控制文件
select * from rman_new.rc_backup_piece where handle like 'ctrl_dZHYYDB%' order by completion_time desc
2、恢复控制文件:注意和参数文件中的文件名一样,否则报错;
注意:
NB_ora_client=hrdb-db 是在nbu服务器端hosts文件中,各生产服务器的ip和主机名(应该和生产服务器的主机名一致)
RMAN>
run{
ALLOCATE CHANNEL CH00 TYPE 'SBT_TAPE' ;
send 'nb_ora_serv=nbumaster,NB_ora_client=zhyy-db';
restore controlfile to '+DATADG/zhyydb/controlfile/control01.ctl' from '/ctrl_dZHYYDB_uvo37ff3d_s233464_p1_t1182252141';
release channel CH00;
}
3、启动到mount状态:
RMAN> sql 'alter database mount';
六、恢复最少的数据文件:
1、查询生产库system、sysaux、users、undotbs1表空间的数据文件号,如果是RAC环境,还要恢复undotbs2;
select * from v$tablespace; 表空间号为0,1,2,3,4
select * from v$datafile where ts# in (0,1,2,3,4); --查看需要恢复的数据文件号及大小
select 'set newname for datafile '||file#||' to ''+DATAVG'' ;' from v$datafile where ts# in (0,1,2,4,5);
2、恢复最少数据文件:
RMAN>
run{
ALLOCATE CHANNEL CH01 TYPE 'SBT_TAPE';
send 'nb_ora_serv=nbumaster,NB_ora_client=zhyy-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 21 to '+DATADG' ;
restore datafile 1,2,3,4,21;
switch datafile all;
release channel CH01;
}
七、恢复归档日志文件:
1、由于是恢复的部分数据文件,因此,根据恢复数据文件时的tag号,查询catalog库的备份片编号的日期,来确定归档日志恢复到什么时间点;
select * from rman_new.rc_backup_piece where tag='TAG20241012T222936';
单实例:
until 时间可以为:该备份片最后的完成时间,往后10--30分钟;
RAC:
根据tag号的最新的完成时间,比如2020-02-23 0:56:27
归档的时间范围可以在此时间的前后范围:between '2020-02-23 00:40:01' and '2020-02-23 01:30:01'
2、恢复归档日志,注意取消掉其他没有恢复的表空间:
单实例:
run {
ALLOCATE CHANNEL CH00 TYPE 'SBT_TAPE' ;
send 'nb_ora_serv=nbumaster,NB_ora_client=zhyy-db ';
set until time "to_date('2024-10-13 02:30:00','yyyy-mm-dd hh24:mi:ss')";
RECOVER DATABASE SKIP FOREVER TABLESPACE G_HB01,G_HB02,G_HB03,G_HB04;
release channel CH00;
}
run {
ALLOCATE CHANNEL CH00 TYPE 'SBT_TAPE' ;
send 'nb_ora_serv=nbumaster,NB_ora_client=dh-db';
set until time "to_date('2019-11-26 1:00:00','yyyy-mm-dd hh24:mi:ss')";
RECOVER DATABASE; ----恢复的是全库,没有SKIP FOREVER TABLESPACE
release channel CH00;
}
RAC:
run {
ALLOCATE CHANNEL CH00 TYPE 'SBT_TAPE' ;
send 'nb_ora_serv=nbumaster,NB_ora_client=billocsdb2';
SQL 'ALTER SESSION SET NLS_DATE_FORMAT="YYYY-MM-DD:HH24:MI:SS"';
SET ARCHIVELOG DESTINATION TO '+DATADG';
restore (archivelog time between '2020-02-23 00:40:01' and '2020-02-23 01:30:01');
release channel CH00;
}
八、启动数据库:
1、退出rman,启动数据库:
sqlplus / as sysdba
set linesize 2000 pagesize 200
查看日志状态:
select * from v$logfile;
SQL> alter database drop logfile group 2;
SQL>select 'alter database rename file '''||member||''' to ''+DATADG'';' from v$logfile;
SQL>alter database disable block change tracking; --取消块跟踪
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;
至此,数据库的部分或全部恢复完成;
浙公网安备 33010602011771号