首页 > Oracle > oracle 19c异机恢复pdb

oracle 19c异机恢复pdb

1、目标
异机恢复数据库GS

SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO  <---必需
         3 PDB1                           READ ONLY  NO
         4 DSJEPP                         READ WRITE NO
         5 GS                             READ WRITE NO  <---异机恢复此数据库
         6 GDTCEPP                        READ WRITE NO
         7 GSTEST                         READ WRITE NO

使用nfs把备份目录挂载到恢复机器(Target)
ROOT和PDB$SEED容器库是必需要携带的。

2、根据源库编辑pfile,并在新机器上启动数据库至nomount状态
pfile:

inityang.ora
-------
*.db_cache_size=1526531840
*.shared_pool_size=1626531840
*.java_pool_size=0
*.large_pool_size=100088640
*.pga_aggregate_target=1010612736
#*.sga_target=2068709120
*.audit_file_dest='/oracle/app/oracle/admin/dsjdb/adump'
*.audit_trail='db'
#*.cluster_database=true
*.compatible='19.0.0'
*.control_files='/oracle/app/oracle/oradata/DSJDB/control01.ctl'
*.db_block_size=8192
*.db_name='dsjdb'
*.diagnostic_dest='/oracle/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dsjdbXDB)'
*.enable_pluggable_database=true
#family:dw_helper.instance_mode='read-only'
*.instance_number=0
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.processes=512
*.remote_login_passwordfile='exclusive'
*.undo_tablespace='UNDOTBS1'

启动数据库至nomount

SQL> startup nomount pfile='/tmp/inityang.ora';  
ORACLE instance started.

Total System Global Area 3288332584 bytes
Fixed Size                  9140520 bytes
Variable Size            1744830464 bytes
Database Buffers         1526726656 bytes
Redo Buffers                7634944 bytes
SQL> 

3、恢复controlfile,启动至mount

[oracle@gs26 admin]$ rman target / catalog rman/xxxx@rman

Recovery Manager: Release 19.0.0.0.0 - Production on Tue Mar 8 19:40:57 2022
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: DSJDB (not mounted)
connected to recovery catalog database
recovery catalog schema version 19.09.00.00. is newer than RMAN version

RMAN> Restore controlfile from '/backup/backup_rman/controlfile_c-2776503480-20220309-08' ;

Starting restore at 20220308194118
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=501 device type=DISK

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/oracle/app/oracle/oradata/DSJDB/control01.ctl
Finished restore at 20220308194119

RMAN> 

RMAN> alter database mount;

released channel: ORA_DISK_1
Statement processed

如果没有rman catalog,需要手动注册backup filesets

RMAN> catalog start with '<the location where the backuppieces were copied on test server>'  noprompt;
RMAN> Crosscheck backup ;  ---------------->Required to mark any unavailable files to expired. 

4 restore database
report schema:

RMAN> report schema;

Report of database schema for database with db_unique_name DSJDB

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    8192     SYSTEM               YES     +DATA01/DSJDB/DATAFILE/system.260.1062361405
2    300      PDB$SEED:SYSTEM      NO      +DATA01/DSJDB/B95505487B20A00AE0530164090AF145/DATAFILE/system.261.1062361407
3    8192     SYSAUX               NO      +DATA01/DSJDB/DATAFILE/sysaux.262.1062361409
4    295      PDB$SEED:SYSAUX      NO      +DATA01/DSJDB/B95505487B20A00AE0530164090AF145/DATAFILE/sysaux.263.1062361409
5    25600    UNDOTBS1             YES     +DATA01/DSJDB/DATAFILE/undotbs1.264.1062361409
...  <---余下省略

根据report schema把相应目录都建好:

[oracle@gs26 data]$ mkdir -p /data/DSJDB/B95505487B20A00AE0530164090AF145/DATAFILE
[oracle@gs26 data]$ mkdir -p /data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/
[oracle@gs26 data]$ mkdir -p /data/DSJDB/BC355F0A406200CAE0530164090ADF59/DATAFILE
[oracle@gs26 data]$ mkdir -p /data/DSJDB/C11C508051F02C23E0530164090A842B/DATAFILE
[oracle@gs26 data]$ mkdir -p /data/DSJDB/D9B1FD312E8C88CCE0530164090A88D5/DATAFILE
[oracle@gs26 data]$ mkdir -p /data/DSJDB/B955AAE54DFB855EE0530164090AD3D2/DATAFILE

rman restore脚本,排除掉不相关的pdb:

run
{
set until time "to_date('2022-03-02 08:00:01','yyyy-mm-dd hh24:mi:ss')";

set newname for datafile 1   to '/data/DSJDB/DATAFILE/system.260.1062361405';
set newname for datafile 2   to '/data/DSJDB/B95505487B20A00AE0530164090AF145/DATAFILE/system.261.1062361407';
set newname for datafile 3   to '/data/DSJDB/DATAFILE/sysaux.262.1062361409';
set newname for datafile 4   to '/data/DSJDB/B95505487B20A00AE0530164090AF145/DATAFILE/sysaux.263.1062361409';
set newname for datafile 5   to '/data/DSJDB/DATAFILE/undotbs1.264.1062361409';
set newname for datafile 6   to '/data/DSJDB/B95505487B20A00AE0530164090AF145/DATAFILE/undotbs1.265.1062361409';
set newname for datafile 7   to '/data/DSJDB/DATAFILE/undotbs2.268.1062361421';
set newname for datafile 8   to '/data/DSJDB/DATAFILE/users.269.1062361423';
set newname for datafile 14  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/system.287.1062366837';
set newname for datafile 15  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/sysaux.286.1062366837';
set newname for datafile 16  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/undotbs1.288.1062366837';
set newname for datafile 17  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/undo_2.289.1062366837';
set newname for datafile 18  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/users.285.1062366837';
set newname for datafile 19  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/nnc_index01.291.1062367467';
set newname for datafile 20  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/nnc_data01.292.1062367493';
set newname for datafile 21  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/cwbasegs5.293.1062367549';
set newname for datafile 22  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/cwbasegs5.294.1062367601';
set newname for datafile 23  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/cwbasegs5.295.1062367633';
set newname for datafile 24  to '/data/DSJDB/DATAFILE/tbs_audit.296.1063652655';
set newname for datafile 25  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/audit01.297.1063653817';
set newname for datafile 34  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/cwbasegs5.307.1067961789';
set newname for datafile 43  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/cwbasegs5.317.1076529011';
set newname for datafile 44  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/cwbasegs5.318.1076529081';
set newname for datafile 45  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/cwbasegs5.319.1090249539';
set newname for datafile 46  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/cwbasegs5.320.1090251511';
set newname for datafile 47  to '/data/DSJDB/B95646F5C89D6C06E0530164090A4CBB/DATAFILE/cwbasegs5.321.1090251607';

restore database root;
restore database "PDB$SEED";
restore database GS;

switch datafile all;
}

输出省略。

5 recover database

根据report schema输出编辑如下脚本,除ROOT,PDB$SEED及GS外其它表空间skip掉。
run
{
set until time "to_date('2022-03-02 08:00:01','yyyy-mm-dd hh24:mi:ss')";
recover database
  skip forever tablespace
PDB1:SYSTEM,
PDB1:SYSAUX,
PDB1:UNDOTBS1,
PDB1:UNDO_2,
PDB1:USERS,
GDTCEPP:SYSTEM,
GDTCEPP:SYSAUX,
GDTCEPP:UNDOTBS1,
GDTCEPP:UNDO_2,
GDTCEPP:USERS,
GDTCEPP:GDTC_EPP_DATA,
DSJEPP:SYSTEM,
DSJEPP:SYSAUX,
DSJEPP:UNDOTBS1,
DSJEPP:UNDO_2,
DSJEPP:USERS,
DSJEPP:GDTC_EPP_DATA
  ;
}

输出省略。

6 调整在线日志的位置

alter database rename file '+DATA01/DSJDB/ONLINELOG/group_1.271.1062366165'  to   '/data/DSJDB/ONLINELOG/group_1.271.1062366165'; 
alter database rename file '+DATA01/DSJDB/ONLINELOG/group_2.270.1062366165'  to   '/data/DSJDB/ONLINELOG/group_2.270.1062366165'; 
alter database rename file '+DATA01/DSJDB/ONLINELOG/group_3.259.1062366167'  to   '/data/DSJDB/ONLINELOG/group_3.259.1062366167'; 
alter database rename file '+DATA01/DSJDB/ONLINELOG/group_4.258.1062366167'  to   '/data/DSJDB/ONLINELOG/group_4.258.1062366167'; 
alter database rename file '+DATA01/DSJDB/ONLINELOG/group_5.279.1062365793'  to   '/data/DSJDB/ONLINELOG/group_5.279.1062365793'; 
alter database rename file '+DATA01/DSJDB/ONLINELOG/group_6.280.1062365795'  to   '/data/DSJDB/ONLINELOG/group_6.280.1062365795'; 
alter database rename file '+DATA01/DSJDB/ONLINELOG/group_7.281.1062365797'  to   '/data/DSJDB/ONLINELOG/group_7.281.1062365797'; 
alter database rename file '+DATA01/DSJDB/ONLINELOG/group_8.282.1062365797'  to   '/data/DSJDB/ONLINELOG/group_8.282.1062365797'; 
alter database rename file '+DATA01/DSJDB/ONLINELOG/group_9.283.1062365799'  to   '/data/DSJDB/ONLINELOG/group_9.283.1062365799'; 
alter database rename file '+DATA01/DSJDB/ONLINELOG/group_10.284.1062365799' to   '/data/DSJDB/ONLINELOG/group_10.284.1062365799';

7 打开数据库

SQL> alter database open resetlogs ;

需关注alert日志,必要时可能需要在skip的库里offline drop掉alert.log中报错的数据文件。

分类: Oracle 标签: , , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.