附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱開始使用 Oracle Cloud Infrastructure Free Tier 。
- 其使用 Oracle Cloud Infrastructure 證明資料、租用戶以及區間的範例值。完成實驗室時,請將這些值替代為雲端環境特定的值。
使用 pglogical Extension 將 OCI 資料庫與 PostgreSQL 進行跨區域同步化
簡介
此 pglogical 擴充可跨多個 Oracle Cloud Infrastructure (OCI) 資料庫與 PostgreSQL 執行處理進行邏輯複寫。它支援跨版本 PostgreSQL 複製,並可協助在 OCI 內跨區域和本機可用性網域部署的資料庫之間進行資料同步。此外,它允許在多雲端供應商管理的 PostgreSQL 服務和自行管理的社群 PostgreSQL 執行處理 (無論是在雲端或內部部署環境中執行) 之間進行資料庫複寫,提供高度彈性且互通的複寫解決方案。
使用發佈 - 訂閱模型,pglogical 可讓邏輯串流複製將變更複製到訂閱者的表格、序列和其他物件。此擴充功能適用於各種使用案例,包括:
-
完整資料庫複製。
-
主要版本升級 (有某些限制)。
-
複製綱要、資料定義語言 (DDL)、序列以及表格資料。
-
變更資料擷取 (CDC)。
-
從多個上游伺服器聚總及合併資料。
限制
由於下列限制,pglogical 延伸可能不適用於特定使用案例:
-
不支援同時複製多個資料庫。
-
無法複製
UNLOGGED
和TEMPORARY
表格。 -
不支援資料庫描述資料移轉。
-
無法使用自動 DDL 複製。
-
不支援在不同編碼的資料庫之間進行複製。
-
大型物件 (LOB) 變更無法解碼,因此無法進行複寫。如果可以,請考慮使用位元組資料類型來儲存大型二進位資料,而不是使用 LOB。
如需詳細資訊,請參閱限制與限制。
目標
- 在兩個 OCI 區域之間的跨區域導入 pglogical 擴充,特別示範 Ashburn 和 Mumbai 之間的複寫。此設定也可以針對單一 OCI 區域內的區域內複寫進行調整。
必備條件
-
存取 OCI 租用戶。
-
OCI 堡壘主機 (OCI Compute 映像檔)。
-
在每個區域建立一個虛擬雲端網路 (VCN)。
-
pglogical 延伸必須同時安裝在來源與目標資料庫上 。
-
表格結構一致性:提供者和訂戶上的表格名稱必須相同、位於相同的綱要中,而且具有與相符資料類型相同的資料欄。
-
限制條件相容性:訂戶的
CHECK
和NOT NULL
限制條件必須與提供者相同或更寬鬆。 -
主索引鍵需求:表格必須具有相同的
PRIMARY KEYs
。不建議在主索引鍵之外新增其他UNIQUE
限制條件。
工作 1:建立資料庫之間的通訊
若要跨區域連線至資料庫系統,必須設定 VCN 對等互連。
若要使用動態路由閘道 (DRG) 建立 VCN 對等互連,請依照以下子作業進行:
任務 1.1:將 DRG 附加至 VCN
-
根據您的需求,在來源區域和目標區域中建立 VCN。
-
根據您的需求,在來源和目標區域中建立動態路由閘道 (DRG)。
-
若要將 DRG 連附至 VCN,請在來源區域中選取您的 DRG。請按一下VCN 連附項並建立虛擬雲端網路連附項。
-
在建立 VCN 連附項頁面中,輸入連附項名稱並選取 VCN-A (來源區域 VCN),然後按一下建立 VCN 連附項。
-
重複相同的步驟以連附目標 VCN。
如需詳細資訊,請參閱動態路由閘道。
工作 1.2:建立遠端對等互連連線 (RPC)
-
建立來源區域 RPC (
SOR-RPC
)。 -
移至
SOURCE DRG
詳細資訊頁面,然後按一下遠端對等互連連線附件。 -
按一下建立遠端對等互連連線。
-
在建立遠端對等互連連線頁面中,輸入連線名稱並選取區間,然後按一下建立遠端對等互連連線。
-
若要建立目標區域 RPC (
TAR-RPC
),請重複上述的相同程序以建立目標區域 RPC。
工作 1.3:建立 RPC 連線
透過 SOR-RPC
連線建立從「來源」區域到「目標」區域的連線。
-
移至
SOURCE DRG
詳細資訊頁面,然後按一下遠端對等互連連線附件。 -
按一下遠端對等互連連線資料欄中的連線名稱,即可檢視
SOR-RPC
的詳細資訊。 -
在連線詳細資訊頁面中,按一下建立連線,輸入連線名稱,然後選取區間。
-
在建立連線頁面中,選取您的目標區域名稱區域,然後輸入目標 RPC 的 OCID (
TAR-RPC
)。建立連線後,RPC 的狀態會變更為 PEERED 。因此,
TAR-RPC
對等互連狀態也會變更為 PEERED 。
工作 1.4:設定 VCN 中的路由表以傳送目的地為 DRG 連附項的流量
-
將
Source-VCN
中的路由表設定為將流量傳送至Target-VCN
專用子網路 CIDR。 -
移至
Source-VCN
詳細資訊頁面,然後按一下路由表。 -
在路由表清單中,按一下專用子網路 - 來源 -VCN 的路由表。
-
在路由表頁面中,按一下新增路由規則,然後根據您的需求輸入路由規則資訊。
-
若要在
Target-VCN
中設定路由表,以將流量傳送至來源 VCN 的專用子網路 CIDR,請重複上述步驟,為來源 VCN 的專用子網路設定路由表。
工作 1.5:新增安全傳入規則以允許透過 DRG 在 VCN 的專用子網路之間進行流量
-
將傳入規則新增至來源 VCN 的專用子網路安全清單 - 來源 VCN ,以允許來自
Target-VCN-private
子網路至Source-VCN-private
子網路的流量 -
前往
Source-VCN
詳細資訊頁面,然後按一下安全清單和專用子網路 - 來源 -VCN 的安全清單。 -
在安全性清單頁面中,按一下新增傳入規則,然後根據您的需求輸入傳入規則資訊。
-
若要將傳入規則新增至
Target-VCN
之專用子網路 - 目標 -VCN 的安全清單,以允許Source-VCN-private
子網路到Target-VCN-private
子網路的流量,請重複上述執行的相同步驟,為目標 -VCN 新增傳入規則,但使用適當的傳入規則。
工作 1.6:跨區域資料庫連線測試與驗證
連線至 Source-VM
以驗證與目標資料庫的連線,並同時驗證目標 VM 的來源資料庫連線,以確保雙向通訊。
任務 2:設定 A 記錄輸入
必須設定 A 記錄項目,才能解決跨區域的資料庫系統完整網域名稱 (FQDN)。在本教學課程中,孟買區域為目標區域。
-
切換至目標區域 (孟買),在搜尋列中輸入 DNS ,然後選取專用檢視。
-
將會顯示目前區域的 VCN 清單。選取已經設定 DRG 的 VCN。
-
將會顯示 DNS 區域清單,包括孟買資料庫系統的 FQDN。
-
新增遠端資料庫系統項目。
-
按一下建立區域。
-
在區域名稱中,輸入其他區域 (阿什本) 中資料庫系統的 FQDN。
-
按一下建立,即可新增區域項目。
-
-
配置 A 記錄項目。
-
開啟新建立的區域,按一下管理記錄,然後選取新增記錄。
-
請輸入下列資訊。
-
名稱:輸入名稱。
-
類型:選取 A (IPv4 位址) 。
-
TTL:輸入 3600 秒 (根據您的應用程式需求進行修改)。
-
資料模式:選取基本。
-
位址:輸入其他區域中資料庫系統的主要端點 IP 位址。
-
-
-
按一下儲存變更,然後按一下發布變更以套用組態。
使用此設定,資料庫系統 B (孟買) 現在可以使用 FQDN 解析並連線至資料庫系統 A (阿什本),以實現無縫接軌的跨區域資料庫通訊。
作業 3:跨區域建立資料庫系統
在 OCI 的各個區域部署 PostgreSQL 資料庫,以建立健全的災害復原 (DR) 策略。如需有關在 OCI 中建立 PostgreSQL 資料庫的詳細資訊,請參閱建立資料庫系統。
任務 4:啟用跨區域的邏輯延伸
本教學課程示範將 Ashburn 指定為來源區域,並將孟買指定為目標區域,以導入災害復原。
-
在阿什本區域中,登入 OCI 主控台、瀏覽至 PostgreSQL 資料庫、選取資料庫系統,以及存取組態檔來修改組態設定值。
-
系統會將您重新導向至完整的組態檔。選取複製組態以繼續進行作業,將會顯示下列頁面。
-
根據您的規格輸入必要資訊。然後,導覽至使用者變數 (讀取 / 寫入) ,按一下新增其他變數,然後將變數名稱分別選取為
wal_level
和track_commit_timestamp
,並將變數值分別選取為logical
和1
。 -
在設定擴充功能中,選取
pglogical
作為 PostgreSQL 副檔名。 -
按一下建立,即可產生組態檔。
-
瀏覽至您的資料庫系統,選取組態底下的編輯,然後將先前建立的組態套用至您的資料庫系統。
-
資料庫系統將會顯示更新狀態。請等到它變成作用中後再繼續。
-
作用中之後,請登入您的資料庫系統,然後使用下列查詢驗證啟用的擴充。
SHOW oci.admin_enabled_extensions;
-
使用下列指令建立 pglogical 延伸。
CREATE EXTENSION pglogical;
以下為指令的範例輸出。
pglogical_source=> show oci.admin_enabled_extensions ; oci.admin_enabled_extensions ------------------------------ pglogical (1 row) pglogical_source=> create extension pglogical; CREATE EXTENSION
-
在另一個 (孟買) 區域資料庫中重複相同的程序,以啟用邏輯擴充。
作業 5:設定來源資料庫
執行下列查詢以授予來源資料庫的權限,以啟用邏輯複製。
alter role psql with replication;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_reset() to psql ;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql ;
grant all on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql;
請注意,「psql」是資料庫設定處理作業期間所建立的範例使用者。
作業 6:在來源資料庫中設定 pglogical Extension Replication
-
在來源資料庫上建立發布者節點。
SELECT pglogical.create_node(node_name := 'provider1',dsn :='host=primary.xxxxxxxxx.postgresql.us-ashburn-1.oci.oraclecloud.com port=5432 user=xxxx password=xxxxx dbname=pglogical_source');
node_name:
指定要在來源資料庫上建立的發佈者名稱。host:
輸入來源資料庫的完整網域名稱 (FQDN)。port_number:
提供執行來源資料庫的連接埠。database_name:
指定將在其中建立發布的資料庫。
-
將公用綱要中的所有表格包括到預設複製集。
SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
作業 7:設定目標資料庫
執行下列查詢以授予目標資料庫的權限,以啟用邏輯複製。
alter role psql with replication;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_reset() to psql ;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql ;
grant all on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql;
請注意,「psql」是資料庫設定處理作業期間所建立的範例使用者。
授予必要的權限後,請複製目標資料庫中所有必要的物件,以符合來源資料庫結構。
工作 8:設定目標資料庫中的 pglogical Replication
-
在目標資料庫上建立訂戶節點。
SELECT pglogical.create_node(node_name := 'subscriber1',dsn :='host=primary.xxxxxxx.postgresql.ap-mumbai-1.oci.oraclecloud.com port=5432 user=xxxx password=xxxxx dbname=pglogical_target');
node_name:
定義目標資料庫上的訂閱者名稱。host:
輸入目標資料庫的完整網域名稱 (FQDN)。port_number:
輸入執行目標資料庫的連接埠。database_name:
提供將建立訂閱的資料庫名稱。
-
在訂閱者節點上建立訂閱,以起始背景同步化與複製處理。
SELECT pglogical.create_subscription(subscription_name := 'subscription1',provider_dsn := 'host=primary.xxxxxxxx.postgresql.us-ashburn-1.oci.oraclecloud.com port=5432 user=xxxx password=xxxxxx dbname=pglogical_source sslmode=verify-full sslrootcert=/etc/opt/postgresql/ca-bundle.pem'); SELECT pglogical.wait_for_subscription_sync_complete('subscription1');
subscription_name:
提供訂閱的名稱。host:
提供來源資料庫的 FQDN。port_number:
提供執行目標資料庫的連接埠。database_name:
提供來源資料庫的名稱。
注意:請確定在訂閱建立字串中使用
sslmode=verify-full
和sslrootcert = /etc/opt/postgresql/ca-bundle.pem
,以防止任何連線失敗。
任務 9:驗證訂閱狀態
執行下列陳述式以檢查目標資料庫上的訂閱狀態。
select * from pglogical.show_subscription_status();
作業 10:驗證資料複製正在執行中
執行下列陳述式以檢查來源資料庫上複製的狀態。
SELECT * FROM pg_stat_replication;
工作 11:( 選擇性 ) 停止或啟動複製
-
您可以在目標資料庫上使用下列命令停用訂閱。
select pglogical.alter_subscription_disable('subscription_name');
-
您可以在目標資料庫上使用下列命令來啟用訂閱。
select pglogical.alter_subscription_enable('subscription_name');
注意:在
subscription_name
中,輸入在目標建立的訂閱名稱。
任務 12:( 選擇性 ) 刪除訂閱
若要在您的目標資料庫上刪除訂閱,請執行下列命令。
select pglogical.drop_subscription('subscription_name');
注意:在
subscription_name
中,輸入在目標建立的訂閱名稱。
疑難排解
-
如果發生下列錯誤,代表必須將 A 記錄新增至目標 VCN。若要解決此問題,請參閱「任務 2」。
ERROR: could not connect to the postgresql server: could not translate host name "primary.XXXXXXX.postgresql.xx-xxxxx-1.oci.oraclecloud.com" to address: Name or service not known
-
若要避免認證失敗,請在建立訂閱時於字串中指定
sslmode=verify-full and sslrootcert=/etc/opt/postgresql/ca-bundle.pem
。could not connect to the postgresql server: connection to server at "primary.XXXXXXX.postgresql.xx-xxxxx-1.oci.oraclecloud.com" , port 5432 failed: SSL error: certificate verify failed
接下來的步驟
本教學課程提供使用 pglogical 擴充功能,在 OCI Database 中跨區域導入 DR 解決方案及使用 PostgreSQL 的全方位方法。課程內容涵蓋組態處理作業、資料複製及疑難排解常見問題。
此外,此方法可套用至 PostgreSQL 升級,確保最短停機時間,並在目標資料庫與來源完全同步後,讓應用程式切換變得順暢。
確認
- 作者 - Kaviya Selvaraj (資深會員技術人員)
其他學習資源
在 docs.oracle.com/learn 上探索其他實驗室,或在 Oracle Learning YouTube 頻道上存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Cross-Region Synchronization of OCI Database with PostgreSQL using the pglogical Extension
G31237-03
Copyright ©2025, Oracle and/or its affiliates.