ORCL(Primary)STBY(Logical Standby)物理備庫建立後,建議雙方各自建立 SPFILE。
-- 主庫執行,會觸發數次日誌切換,忽略報錯
EXEC DBMS_LOGSTDBY.BUILD;
-- 1. 停止 Redo Apply
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
-- 2. 轉換(db_name 需與主庫一致)
ALTER DATABASE RECOVER TO LOGICAL STANDBY ORCL;
-- 3. 重啟至 MOUNT
SHUTDOWN IMMEDIATE
STARTUP MOUNT
-- 4. 驗證角色
SELECT DB_UNIQUE_NAME, OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, GUARD_STATUS, PROTECTION_MODE FROM V$DATABASE;
ORAPWD FILE=$ORACLE_HOME/dbs/orapwstby PASSWORD=oracle ENTRIES=5 IGNORECASE=Y FORCE=Y
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u01/oradata/arch/stby VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=STBY' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='LOCATION=/u01/oradata/arch VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=STBY' SCOPE=BOTH;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u01/oradata/stby/standbylj01.log') SIZE 20M REUSE;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/u01/oradata/stby/standbylj02.log') SIZE 20M REUSE;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/u01/oradata/stby/standbylj03.log') SIZE 20M REUSE;
ALTER DATABASE OPEN RESETLOGS;
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
-- 檢查實例狀態
SELECT INSTANCE_NAME, STATUS FROM V$INSTANCE;
SELECT DB_UNIQUE_NAME, OPEN_MODE, DATABASE_ROLE, GUARD_STATUS FROM V$DATABASE;
SELECT GROUP#, SEQUENCE#, USED, STATUS FROM V$STANDBY_LOG;
-- 主庫測試
CREATE TABLE SCOTT.T4 (ID INT);
INSERT INTO SCOTT.T4 VALUES(4);
COMMIT;
ALTER SYSTEM SWITCH LOGFILE;
-- 稍等片刻,備庫查詢
SELECT * FROM SCOTT.T4; -- 應返回 1 行
| 維度 | 物理備庫 | 邏輯備庫 |
|---|---|---|
| 複製單位 | 區塊級 | SQL 邏輯級(經 LogMiner 轉換) |
| 備庫可讀寫 | 唯讀 / Active Data Guard | 可讀寫(需注意 GUARD 限制) |
| 支援物件類型 | 全部 | 部份不支援(如物化視圖、全域暫存表) |
| 轉換複雜度 | 低 | 需 DBMS_LOGSTDBY.BUILD + 轉換指令 |
邏輯備庫適合「報表查詢+災備」雙活場景,但需嚴格測試應用相容性(DBMS_LOGSTDBY.SKIP 跳過不支援物件)。