sqlplus / as sysdba
shutdown immediate
startup nomount
備庫恢復(fù)新的控制文件:
rman target /
restore controlfile from '/home/oracle/standby.ctl';
備庫開啟到mount狀態(tài):
alter database mount;
e.增量備份注冊到RMAN的catalog,取消日志應(yīng)用,恢復(fù)增量備份
確認備庫已關(guān)閉DG同步進程:
sqlplus / as sysdba
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
備庫rman注冊增量備份文件:
rman target /
catalog start with '/home/oracle/';
YES
備庫開啟恢復(fù)增量備份:
recover database noredo;
f.開啟備庫的恢復(fù)進程
備庫開啟日志同步進程:
sqlplus / as sysdba
alter database openread only;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
主庫重新激活同步:
sqlplus / as sysdba
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=defer;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=enable;
查詢是否存在GAP,確認主備是否同步:
sqlplus / as sysdba
SELECT * FROM V$ARCHIVE_GAP;
SELECT max(sequence#) from v$archived_log where applied='YES';
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;
至此,DG GAP已被修復(fù),以上方式為常規(guī)修復(fù)方式,各個版本都通用。
四、12C新特性修復(fù)
首先,模擬備庫斷電,主庫切幾個最新的歸檔,然后手工刪掉,重新開啟DG同步。
模擬GAP期間,有數(shù)據(jù)文件添加的情況:
##主庫添加數(shù)據(jù)文件
alter tablespace TEST add datafile '/oradata/ORCL/test02.dbf' size 100M autoextend off;
📢 注意: 當(dāng)前DG數(shù)據(jù)庫已存在GAP,GAP日志為:30—31 。
a.記錄備庫當(dāng)前SCN號
備庫記錄當(dāng)前 scn 號:
sqlplus / as sysdba
SELECT CURRENT_SCN FROM V$DATABASE;
CURRENT_SCN
-----------
2600487
b.使用recover standby using service恢復(fù)
采用rman的新功能,recover standby using service,通過RMAN連接到target備庫,然后用主庫的service執(zhí)行恢復(fù)備庫命令。
語法:
RECOVER DATABASE FROM SERVICE < PRIMARY DB SERVICE NAME > NOREDO USING COMPRESSED BACKUPSET;
📢 注意: 確認主庫的TNS已配置,這里的< PRIMARY DB SERVICE NAME >即 TNSNAME。
c.備庫啟動到nomount狀態(tài),恢復(fù)控制文件
備庫啟動到nomount狀態(tài):
sqlplus / as sysdba
shutdown immediate
startup nomount
備庫通過from service恢復(fù)控制文件:
rman target /
restore standby controlfile from service orcl;
備庫開啟到mount狀態(tài):
sqlplus / as sysdba
alter database mount;
d.備庫恢復(fù),修復(fù)GAP
檢查主備GAP期間是否添加數(shù)據(jù)文件:
sqlplus / as sysdba
selectfile# from v$datafile where creation_change# > =2600487;
FILE#
----------
13
restore 新添加的數(shù)據(jù)文件:
rman target /
run
{
SET NEWNAME FOR DATABASE TO '/oradata/ORCL_STBY/%f_%U';
RESTORE DATAFILE 13 FROM SERVICE orcl;}
rman target /
catalog start with '/oradata/ORCL_STBY';
YES
SWITCH DATABASE TO COPY;
將備庫文件管理方式改為手動:
sqlplus / as sysdba
alter system setstandby_file_management=MANUAL;
重命名 tempfile && logfile:
sqlplus / as sysdba
##logfile
alter database clear logfile group 1;
alter database clear logfile group 2;
alter database clear logfile group 3;
alter database clear logfile group 4;
alter database clear logfile group 5;
alter database clear logfile group 6;
alter database clear logfile group 7;
alter database renamefile'/oradata/ORCL/redo03.log' to '/oradata/ORCL_STBY/redo03.log';
alter database renamefile'/oradata/ORCL/redo02.log' to '/oradata/ORCL_STBY/redo02.log';
alter database renamefile'/oradata/ORCL/redo01.log' to '/oradata/ORCL_STBY/redo01.log';
alter database renamefile'/oradata/ORCL/standby_redo04.log' to '/oradata/ORCL_STBY/standby_redo04.log';
alter database renamefile'/oradata/ORCL/standby_redo05.log' to '/oradata/ORCL_STBY/standby_redo05.log';
alter database renamefile'/oradata/ORCL/standby_redo06.log' to '/oradata/ORCL_STBY/standby_redo06.log';
alter database renamefile'/oradata/ORCL/standby_redo07.log' to '/oradata/ORCL_STBY/standby_redo07.log';##tempfile
alter database renamefile'/oradata/ORCL/temp01.dbf' to '/oradata/ORCL_STBY/temp01.dbf';
alter database renamefile'/oradata/ORCL/pdbseed/temp012021-04-11_06-13-50-844-AM.dbf' to '/oradata/ORCL_STBY/pdbseed/temp012021-04-11_06-13-50-844-AM.dbf';
alter database renamefile'/oradata/ORCL/BFA6BEE45A1E3605E053AC01A8C0DD20/datafile/o1_mf_temp_j749f5fy_.dbf' to '/oradata/ORCL_STBY/BFA6BEE45A1E3605E053AC01A8C0DD20/datafile/o1_mf_temp_j749f5fy_.dbf';
備庫重命名完后再改為自動:
sqlplus / as sysdba
alter system setstandby_file_management=AUTO;
恢復(fù)主備GAP:
recover database from service orcl noredo using compressed backupset;
📢 注意: 如果主備庫文件目錄不一致,則需要catalog切換控制文件中路徑,否則報錯:
e.開啟備庫日志應(yīng)用,檢查同步
檢查主備scn是否一致
sqlplus / as sysdba
col HXFNM for a100
set line222
select HXFIL File_num,substr(HXFNM,1,40) HXFNM,fhscn from x$kcvfh;
主庫切幾次歸檔
sqlplus / as sysdba
ALTER SYSTEM ARCHIVE LOG CURRENT;
ALTER SYSTEM SWITCH LOGFILE;
開啟備庫應(yīng)用日志
sqlplus / as sysdba
alter database open;
alter pluggable database all open;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
查看備庫同步是否正常
sqlplus / as sysdba
set line222
col member for a60
select t1.group#,t1.thread#,t1.bytes/1024/1024,t1.status,t2.member from gv$standby_log t1,gv$logfile t2 where t1.group#=t2.group#;
主庫插入數(shù)據(jù)
sqlplus test/test@pdb01
insert into test values (999);
commit;
備庫查詢是否實時同步
alter session setcontainer=pdb01;select * from test.test;
ID
----------
12999
sqlplus / as sysdba
SQL>select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/oradata/ORCL_STBY/redo03.log
/oradata/ORCL_STBY/redo02.log
/oradata/ORCL_STBY/redo01.log
/oradata/ORCL/standby_redo04.log
/oradata/ORCL/standby_redo05.log
/oradata/ORCL/standby_redo06.log
/oradata/ORCL/standby_redo07.log
關(guān)閉備庫文件自動管理:
sqlplus / as sysdba
alter system setstandby_file_management=MANUAL;
清理standby log:
sqlplus / as sysdba
alter database clear logfile group 4;
alter database clear logfile group 5;
alter database clear logfile group 6;
alter database clear logfile group 7;
修改standby log路徑:
sqlplus / as sysdba
alter database renamefile'/oradata/ORCL/standby_redo04.log' to '/oradata/ORCL_STBY/standby_redo04.log';
alter database renamefile'/oradata/ORCL/standby_redo05.log' to '/oradata/ORCL_STBY/standby_redo05.log';
alter database renamefile'/oradata/ORCL/standby_redo06.log' to '/oradata/ORCL_STBY/standby_redo06.log';
alter database renamefile'/oradata/ORCL/standby_redo07.log' to '/oradata/ORCL_STBY/standby_redo07.log';
修改完后打開備庫文件自動管理:
sqlplus / as sysdba
alter system setstandby_file_management=AUTO;
c.主庫切日志,備庫開啟日志應(yīng)用
檢查主備scn是否一致:
sqlplus / as sysdba
col HXFNM for a100
set line222
select HXFIL File_num,substr(HXFNM,1,40) HXFNM,fhscn from x$kcvfh;
主庫切幾次歸檔:
sqlplus / as sysdba
ALTER SYSTEM ARCHIVE LOG CURRENT;
ALTER SYSTEM SWITCH LOGFILE;
開啟備庫應(yīng)用日志:
sqlplus / as sysdba
alter database open;
alter pluggable database all open;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
查看備庫同步是否正常:
sqlplus / as sysdba
set line222
col member for a60
select t1.group#,t1.thread#,t1.bytes/1024/1024,t1.status,t2.member from gv$standby_log t1,gv$logfile t2 where t1.group#=t2.group#;
主庫插入數(shù)據(jù):
sqlplus test/test@pdb01
insert into test values (999);
commit;
備庫查詢是否實時同步:
sqlplus / as sysdba
alter session setcontainer=pdb01;select * from test.test;
ID
----------
12999