「異機遷移 + 就地升級」雙重變更是高風險操作,本文記錄一次生產級演練全過程:源庫 10.2.0.4 (192.168.8.132) → 目標庫 11.2.0.4 (192.168.8.133),Linux x86-64,覆蓋預檢查、RMAN 異機還原、升級腳本執行、時區文件升級 (DSTv4→DSTv14)、組件驗證等關鍵節點。
rdbms/admin/utlu112i.sql 複製到源庫執行,輸出 upgrade_info.log。
SGA_TARGET 需 ≥ 596M(64位),棄用參數 background_dump_dest/user_dump_dest → diagnostic_dest。@utlrp.sql 重編譯)。PURGE DBA_RECYCLEBIN 清空。@rdbms/admin/dbupgdiag.sql,配合 @utlrp.sql 消除無效對象。EXEC DBMS_STATS.GATHER_DICTIONARY_STATS; 加速升級過程。ORCL (僅軟件/實例,無數據庫)。diagnostic_dest、compatible=11.2.0.4.0、內存參數按預檢建議調整。RMAN> SET DBID=1393903281;
RMAN> RESTORE CONTROLFILE FROM '/home/oracle/bak/full_orcl_02pq07sn_1_1';
RMAN> ALTER DATABASE MOUNT;
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE; -- 若缺歸檔,CATALOG 備份集後 SET UNTIL SCN 恢復
SYS.LINK$ 生成 DDL,目標端執行)。@catupgrd.sql
ALTER DATABASE OPEN RESETLOGS UPGRADE;
SPOOL upgrade.log
@?/rdbms/admin/catupgrd.sql
-- 耗時 ~1-2 小時,勿中斷
升級後必跑:
SHUTDOWN IMMEDIATE
STARTUP
@?/rdbms/admin/utlu112s.sql -- 升級後狀態檢查
@?/rdbms/admin/utlrp.sql -- 重編譯所有無效對象
11.2.0.4 強制要求 DST 升級,使用 MOS 文檔 Doc ID 977512.1 提供的自動腳本:
-- 準備檢查
@check.sql -- 內容來自 upg_tzv_check.sql,輸出:Newest RDBMS DST version detected is DSTv14
-- 正式升級 (會自動重啟 2 次實例)
@app.sql -- 內容來自 upg_tzv_apply.sql
關鍵日誌輸出:
INFO: Upgrading all SYS owned TSTZ dataINFO: Upgrading all non-SYS TSTZ dataINFO: Total failures during update of TSTZ data: 0INFO: Your new Server RDBMS DST version is DSTv14驗證: SELECT * FROM v$timezone_file; → VERSION=14;DATABASE_PROPERTIES 中 DST_PRIMARY_TT_VERSION=14。
SELECT comp_id, comp_name, version, status FROM dba_registry;
-- 17 組件均為 VALID 11.2.0.4.0
-- 業務驗證:核心表數據量、關鍵 SQL 執行計劃、應用連接測試
這套「預檢 → 異機還原 → 升級 → DST 升級 → 驗證」標準化流程,已支撐多個 10g→11g 核心系統平滑遷移。關鍵在於把風險全部前置到預檢查階段消除,升級階段才能做到「只跑腳本、不做決策」。