RAC 環境閃回數據庫比單實例複雜:需**全節點關閉、單節點 Mount、閃回、Read Only 驗證、RESETLOGS 打開、其它節點啟動**。本文記錄 11.2.0.3 RAC 雙節點 zhongwc1/zhongwc2 完整演練日誌,含關鍵命令、輸出解讀、常見報錯應對。
zhongwc1 (Node1)、zhongwc2 (Node2)t_zhongwc (75,289 行)1395475 (對應 2013-01-23 17:14:05)SQL> ALTER DATABASE FLASHBACK ON;
Database altered.
SQL> SELECT CURRENT_SCN FROM V$DATABASE;
CURRENT_SCN
-----------
1395475
SQL> TRUNCATE TABLE t_zhongwc; -- 模擬誤操作
Table truncated.
[oracle@zhongwc1 ~]$ srvctl stop database -d zhongwc
# 等待 CRS 資源狀態變為 OFFLINE
[oracle@zhongwc1 ~]$ sqlplus / as sysdba
SQL> STARTUP MOUNT
ORACLE instance started.
Database mounted.
SQL> FLASHBACK DATABASE TO SCN 1395475;
Flashback complete.
SQL> ALTER DATABASE OPEN READ ONLY;
Database altered.
SQL> CONN zwc/zwc
Connected.
SQL> SELECT COUNT(*) FROM t_zhongwc;
COUNT(*)
----------
75289 -- 數據已恢復
SQL> SHUTDOWN IMMEDIATE
Database closed. Database dismounted. ORACLE instance shut down.
SQL> STARTUP MOUNT
ORACLE instance started.
Database mounted.
SQL> ALTER DATABASE OPEN RESETLOGS;
Database altered.
SQL> !srvctl start instance -d zhongwc -i zhongwc2
# 等待實例啟動
SQL> SELECT INSTANCE_NAME, HOST_NAME, STATUS FROM GV$INSTANCE;
INSTANCE_NAME HOST_NAME STATUS
------------- -------------------- ------
zhongwc1 zhongwc1.oracle.com OPEN
zhongwc2 zhongwc2.oracle.com OPEN
SQL> FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('2013-01-23 17:14:05','YYYY-MM-DD HH24:MI:SS');
*
ERROR at line 1:
ORA-38757: Database must be mounted and not open to FLASHBACK.
原因:當前實例已 OPEN READ ONLY,閃回要求 MOUNT 狀態。需再次 SHUTDOWN → STARTUP MOUNT 才能執行時間點閃回。
srvctl stop database 確保無實例持有數據文件鎖,否則閃回報 ORA-38760。V$ASM_DISKGROUP 狀態。DB_FLASHBACK_RETENTION_TARGET 設置保留分鐘數,FRA 需容納對應量的閃回日志。ORA-1600 日志應用失敗。V$DATABASE.TIME_ZONE)。#!/bin/bash
# rac_flashback_drill.sh
TARGET_SCN=1395475
DB_UNIQ_NAME=zhongwc
NODE1=zhongwc1
NODE2=zhongwc2
srvctl stop database -d $DB_UNIQ_NAME
ssh $NODE1 "sqlplus / as sysdba <
RAC 閃回數據庫是「高風險、高價值」操作,**必須在測試環境全流程演練 3 次以上**才能納入生產應急預案。記住:閃回後的 RESETLOGS 將歷史切分為新舊 Incarnation,備份策略必須同步調整。