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 的技術要求
必要前提條件:
- Local Undo Mode:兩個 CDB 都必須啟用
-- 檢查
SELECT property_value FROM database_properties
WHERE property_name = 'LOCAL_UNDO_ENABLED';
-- 若未啟用,需要重啟 CDB 來啟用- Archive Log Mode:來源 CDB 必須在歸檔模式
- 適當權限:資料庫連結用戶需要 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;檔案位置管理策略
優先序規則:
- CREATE 語句中的子句(最高優先級)
- Session 級別設定
- 初始化參數
- 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');實務作業流程建議
開發環境建立:
- 從 SEED 創建 → 開啟為 RESTRICTED → 初始化作業 → 改為 READ WRITE
測試環境刷新:
- Hot Clone 建立 Refreshable Copy → 定期 REFRESH → 測試完成後刪除
生產遷移:
- 評估相容性 → Hot Clone 驗證 → Near-Zero Downtime Relocation → 驗證完整性