前言:
对于Oracle 12C之后的CDB,PDB备份,如果每次恢复都需要恢复整个CDB,那么这将大大增大恢复的时间以及空间,特别是在CDB包含多个PDB的时候,如果我们可以只从备份里面恢复某个PDB,将大大减少恢复的时间以及空间,本文将讲述如何从NBU全备里面恢复某个PDB的操作过程。
环境:
Oracle19c+CDB
恢复过程:
注意:恢复PDB的前提条件是,需要把根容器root恢复处理,才能在此基础上恢复PDB。
1 创建实例orcl,启动到nomount
export ORACLE_SID=orcl
---创建目录
mkdir -p /u01/app/oracle/admin/orcl/adump
mkdir -p /u01/app/oracle/oradata/orcl/controlfile
mkdir -p /u01/app/oracle/oradata/orcl/datafile
mkdir -p /u01/app/oracle/oradata/orcl/tempfile
mkdir -p /u01/app/oracle/oradata/orcl/onlinelog
mkdir -p /u01/app/oracle/arch/orcl/archivelog
---使用以下临时的pfile文件启动
cat $ORACLE_HOME/dbs/initorcl.ora
*._undo_autotune=FALSE
*._use_adaptive_log_file_sync='FALSE'
*._use_single_log_writer='TRUE'
*.aq_tm_processes=1
*.archive_lag_target=1200
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_sys_operations=TRUE
*.audit_trail='DB'
*.autotask_max_active_pdbs=6
*.awr_pdb_autoflush_enabled=TRUE
*.awr_snapshot_time_offset=1000000
*.cell_offload_processing=FALSE
*.compatible='19.0.0'
*.control_file_record_keep_time=31
*.control_files='/u01/app/oracle/oradata/orcl/controlfile/control01.ctl'
*.db_block_size=8192
*.db_create_file_dest='/u01/app/oracle/oradata'
*.db_files=1000
*.db_name='ksyhcdb'
*.db_unique_name='orcl'
*.db_securefile='ALWAYS'
*.deferred_segment_creation=FALSE
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.enable_ddl_logging=TRUE
*.enable_pluggable_database=true
*.fast_start_parallel_rollback='LOW'
*.job_queue_processes=1000
*.log_archive_dest_1='location=/u01/app/oracle/arch/orcl/archivelog'
*.max_dump_file_size='1024M'
*.memory_max_target=0
*.memory_target=0
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=1000
*.open_links=10
*.open_links_per_instance=50
*.parallel_force_local=TRUE
*.parallel_max_servers=4
*.parallel_min_servers=0
*.parallel_servers_target=4
*.pga_aggregate_target=1g
*.processes=2000
*.recovery_parallelism=2
*.remote_login_passwordfile='exclusive'
*.result_cache_max_size=0
*.sec_case_sensitive_logon=TRUE
*.session_cached_cursors=300
*.sga_max_size=3g
*.sga_target=0
*.thread=1
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
---数据库启动到nomunt
startup nomount
2 恢复控制文件,启动到mount
rman target /
run {
ALLOCATE CHANNEL CH10 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
SEND 'NB_ORA_SERV=GZLG-NBUSVR-01,NB_ORA_CLIENT=db202-vip.xxx';
restore controlfile from '/db201-cntrl_329_1_1073532480';
RELEASE CHANNEL CH10;
}
alter database mount;
3 恢复数据文件
---设置omf
sqplus / as sysdba
alter system set db_create_file_dest= '/u01/app/oracle/oradata';
---恢复数据文件
run {
ALLOCATE CHANNEL CH00 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH01 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH02 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH03 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH04 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH05 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH06 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH07 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
SEND 'NB_ORA_SERV=xxx-NBUSVR-01,NB_ORA_CLIENT=db202-vip.xxx';
restore database root;
restore pluggable database orcl;
switch datafile all;
switch tempfile all;
RELEASE CHANNEL CH00;
RELEASE CHANNEL CH01;
RELEASE CHANNEL CH02;
RELEASE CHANNEL CH03;
RELEASE CHANNEL CH04;
RELEASE CHANNEL CH05;
RELEASE CHANNEL CH06;
RELEASE CHANNEL CH07;
}
---语句批量生成跳过表空间
set pagesize 400
set linesize 400
select '"'||b.name||'"'||':'||a.name||','
from v$tablespace a,v$containers b
where a.con_id=b.con_id and b.name not in ('CDB$ROOT','orcl');
----recover数据库,跳过除了root,orcl之外的pdb表空间
run {
ALLOCATE CHANNEL CH00 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH01 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH02 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH03 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH04 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH05 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH06 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH07 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
SEND 'NB_ORA_SERV=xxx-NBUSVR-01,NB_ORA_CLIENT=db202-vip.xxx';
recover database skip forever tablespace
"PDB$SEED":SYSAUX,"PDB$SEED":TEMP,"PDB$SEED":UNDOTBS1,"PDB$SEED":SYSTEM,"TESTDB":PSS_SDI_IDX,"TESTDB":PSS_SDI_DATA,"TESTDB":TEMP,"TESTDB":UNDOTBS1,"TESTDB":SYSAUX,"TESTDB":SYSTEM,"TESTDB":UNDO_2;
RELEASE CHANNEL CH00;
RELEASE CHANNEL CH01;
RELEASE CHANNEL CH02;
RELEASE CHANNEL CH03;
RELEASE CHANNEL CH04;
RELEASE CHANNEL CH05;
RELEASE CHANNEL CH06;
RELEASE CHANNEL CH07;
}
4 开启数据库
---检查文件的恢复时间点
alter session set nls_date_Format='yyyy-mm-dd hh24:mi:ss';
set linesize 300
set pagesize 400
col name for a100
select file#,name,to_char(CHECKPOINT_TIME),fuzzy
from v$datafile_header;
---关闭归档
alter database noarchivelog;
---清空线程thread 1日志
select 'alter database clear logfile group '||group#||';'
from v$log
where thread#=1;
---删除standby log
select 'alter database drop logfile group '||group#||';'
from v$standby_log;
---关闭块追踪
alter database disable block change tracking;
---打开数据库
alter database open resetlogs;
---打开orcl pdb
alter pluggable database orcl open;
如果想在已经恢复的根容器里面继续恢复pdb,可以这么做
1 确认根容器具备恢复的条件
---注意当前容器是要恢复pdb所在的原容器
---确认当前容器的控制文件里面有恢复的pdb信息以及开启归档
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
4 TESTDB MOUNTED
5 ORCL MOUNTED
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/oracle/arch/TESTDB/archivelog
Oldest online log sequence 1
Next log sequence to archive 1
Current log sequence 1
2 恢复testdb的数据文件
---设置omf
sqplus / as sysdba
alter system set db_create_file_dest= '/u01/app/oracle/oradata';
---恢复数据
run {
ALLOCATE CHANNEL CH00 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH01 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH02 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH03 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH04 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH05 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH06 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
ALLOCATE CHANNEL CH07 TYPE 'SBT_TAPE' PARMS='SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64';
SEND 'NB_ORA_SERV=xxx-NBUSVR-01,NB_ORA_CLIENT=db202-vip.xxx';
restore pluggable database testdb;
recover pluggable database testdb;
switch datafile all;
switch tempfile all;
RELEASE CHANNEL CH00;
RELEASE CHANNEL CH01;
RELEASE CHANNEL CH02;
RELEASE CHANNEL CH03;
RELEASE CHANNEL CH04;
RELEASE CHANNEL CH05;
RELEASE CHANNEL CH06;
RELEASE CHANNEL CH07;
}
3 开启数据库
---检查文件的恢复时间点
alter session set container=testdb;
alter session set nls_date_Format='yyyy-mm-dd hh24:mi:ss';
set linesize 300
set pagesize 400
col name for a100
select file#,name,to_char(CHECKPOINT_TIME),fuzzy
from v$datafile_header;
---查询数据文件状态
alter session set container=testdb;
select name,status
From v$datafile;
alter session set container=testdb;
select name,status
From v$datafile;
---批量online数据文件
alter session set container=testdb;
select 'alter database datafile '||file#||' online;'
from v$datafile;
---online数据文件
alter database datafile 59 online;
alter database datafile 60 online;
alter database datafile 61 online;
alter database datafile 63 online;
alter database datafile 64 online;
alter database datafile 83 online;
---打开testdb pdb
alter pluggable database testdb open;
show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
4 testdb READ WRITE NO