PDB 生命週期管理的核心架構

PDB 狀態轉換機制

關鍵狀態流程

NEW → NORMAL → RELOCATING → UNPLUGGED

狀態詳解

  • NEW:剛創建,尚未經過完整初始化
  • NORMAL:正常運作狀態
  • RELOCATING:遷移進行中
  • UNPLUGGED:已拔出,等待插入

重要原則:新創建的 PDB 必須先以 READ WRITE 或 RESTRICTED 模式開啟一次,才能從 NEW 轉為 NORMAL 狀態。

PDB 創建方法的實務分類

1. 基礎創建:從 PDB$SEED

適用場景:全新應用、開發環境

-- 標準方法
CREATE PLUGGABLE DATABASE pdb1
ADMIN USER pdb1_admin IDENTIFIED BY password
FILE_NAME_CONVERT = ('/seed/path', '/pdb1/path');
 
-- OMF 簡化方法
ALTER SESSION SET db_create_file_dest='/u01/app/oradata/pdb1';
CREATE PLUGGABLE DATABASE pdb1
ADMIN USER pdb1_admin IDENTIFIED BY password;

2. 生產複製:Clone 技術

本地複製(同 CDB 內):

-- 冷複製(來源 PDB 需關閉)
CREATE PLUGGABLE DATABASE test_pdb FROM prod_pdb
FILE_NAME_CONVERT=('/prod/', '/test/');
 
-- 熱複製(來源 PDB 保持開啟)
CREATE PLUGGABLE DATABASE test_pdb FROM prod_pdb
FILE_NAME_CONVERT=('/prod/', '/test/')
REFRESH MODE MANUAL;  -- 支援後續刷新

跨 CDB 遠程複製

-- 先建立資料庫連結
CREATE DATABASE LINK remote_link
CONNECT TO system IDENTIFIED BY password
USING 'remote_pdb_service';
 
-- 執行遠程複製
CREATE PLUGGABLE DATABASE local_pdb
FROM remote_pdb@remote_link
FILE_NAME_CONVERT=('/remote/', '/local/');

3. 遷移技術:Unplug/Plug

完整流程

-- Step 1: 拔出
ALTER PLUGGABLE DATABASE source_pdb CLOSE;
ALTER PLUGGABLE DATABASE source_pdb UNPLUG INTO '/tmp/pdb.xml';
DROP PLUGGABLE DATABASE source_pdb;  -- 從原 CDB 移除
 
-- Step 2: 插入(目標 CDB)
-- 可選:相容性檢查
EXEC DBMS_PDB.CHECK_PLUG_COMPATIBILITY('/tmp/pdb.xml');
 
-- 插入
CREATE PLUGGABLE DATABASE target_pdb USING '/tmp/pdb.xml';
ALTER PLUGGABLE DATABASE target_pdb OPEN;

Archive 方式(推薦):

-- 打包成單一檔案
ALTER PLUGGABLE DATABASE source_pdb UNPLUG INTO '/tmp/pdb.pdb';
 
-- 直接使用 archive 檔案
CREATE PLUGGABLE DATABASE target_pdb USING '/tmp/pdb.pdb';

4. 高級技術:Near-Zero Downtime Relocation

適用場景:生產環境遷移,要求最小停機時間

-- 一步完成遷移(在目標 CDB 執行)
CREATE PLUGGABLE DATABASE relocated_pdb
FROM source_pdb@source_cdb_link
RELOCATE AVAILABILITY MAX;  -- 最大可用性模式

PDB 運作模式管理

開啟模式控制

-- 限制模式(只允許有 RESTRICTED SESSION 權限的用戶)
ALTER PLUGGABLE DATABASE pdb1 OPEN RESTRICTED;
 
-- 只讀模式
ALTER PLUGGABLE DATABASE pdb1 OPEN READ ONLY;
 
-- 強制開啟(中斷現有連線)
ALTER PLUGGABLE DATABASE pdb1 OPEN READ WRITE FORCE;
 
-- 批次操作
ALTER PLUGGABLE DATABASE ALL OPEN READ ONLY;

狀態保存機制

-- 保存狀態,CDB 重啟後自動恢復
ALTER PLUGGABLE DATABASE pdb1 OPEN;
ALTER PLUGGABLE DATABASE pdb1 SAVE STATE;

Hot Clone 的技術要求

必要前提條件

  1. Local Undo Mode:兩個 CDB 都必須啟用
-- 檢查
SELECT property_value FROM database_properties 
WHERE property_name = 'LOCAL_UNDO_ENABLED';
 
-- 若未啟用,需要重啟 CDB 來啟用
  1. Archive Log Mode:來源 CDB 必須在歸檔模式
  2. 適當權限:資料庫連結用戶需要 CREATE PLUGGABLE DATABASE 權限

Refreshable Copy 特性

-- 建立可刷新的複本
CREATE PLUGGABLE DATABASE test_pdb FROM prod_pdb@link
REFRESH MODE MANUAL;  -- 或 AUTOMATIC
 
-- 手動刷新(需要先關閉)
ALTER PLUGGABLE DATABASE test_pdb CLOSE;
ALTER PLUGGABLE DATABASE test_pdb REFRESH;
ALTER PLUGGABLE DATABASE test_pdb OPEN READ ONLY;

檔案位置管理策略

優先序規則

  1. CREATE 語句中的子句(最高優先級)
  2. Session 級別設定
  3. 初始化參數
  4. OMF 設定(最低優先級)

實務建議

-- 方法 1:語句級控制(推薦)
CREATE PLUGGABLE DATABASE pdb1
FILE_NAME_CONVERT=('/source/', '/target/');
 
-- 方法 2:Session 級設定
ALTER SESSION SET db_create_file_dest='/target/path';
 
-- 方法 3:初始化參數
ALTER SYSTEM SET pdb_file_name_convert='/source/,/target/';

關鍵監控和驗證

狀態檢查

-- PDB 狀態總覽
SELECT pdb_name, status, open_mode, restricted 
FROM cdb_pdbs;
 
-- 檔案位置確認
SELECT file_name, tablespace_name, con_id 
FROM cdb_data_files WHERE con_id > 2;
 
-- 服務名稱驗證
SELECT name FROM v$services;

效能監控

-- PDB 級別的 ADDM 分析
EXEC DBMS_ADDM.ANALYZE_DB('pdb_task', 1, 1, 'PDB');

實務作業流程建議

開發環境建立

  1. 從 SEED 創建 → 開啟為 RESTRICTED → 初始化作業 → 改為 READ WRITE

測試環境刷新

  1. Hot Clone 建立 Refreshable Copy → 定期 REFRESH → 測試完成後刪除

生產遷移

  1. 評估相容性 → Hot Clone 驗證 → Near-Zero Downtime Relocation → 驗證完整性

複習與問題

  1. 什麼是OMF?