Oracle-Rman备份恢复单个PDB

前言:

对于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

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值