Oracle

Oracle 中使用 Data Guard 的基於模式的複制

  • October 8, 2020

我們的系統集群中有主動-被動數據庫複製,因此被動數據庫屬於 DR 節點類。我們正在嘗試設計零停機部署,所以我沒有什麼想法。

由於我們有 2 個數據庫模式,是否可以僅複製一個和第二個(未複製)以在完全讀寫模式下使用?

數據保護用於複製數據。在以前的公司,我們用 MySQL(免費版)很容易做到這一點,但不確定 Oracle 是否可以。對我來說,如果 MySQL 可以做到,Oracle 也可以,但網際網路並沒有為我提供確切的答案。

我在某處讀到可以執行一些EXCLUDE命令並限制將要複製的內容,但需要在完全讀寫模式下使用該排除模式。

謝謝

如果您想從一個數據庫複製到另一個數據庫,但跳過某些模式,那麼 Data Guard 邏輯備用數據庫可能非常適合您。

但是,如果您想在模式級別從同一數據庫中執行複制,那麼 Oracle GoldenGate“可能”能夠做到這一點……但是,我從未使用過 GoldenGate,所以我無法確認這是否會很合適。

此答案假設您想要從一個數據庫複製到另一個數據庫,但跳過某些模式。

邏輯備用數據庫使用 logminer 和 SQL Apply 在備用數據庫上重放 SQL 語句。您可以對複制的內容和不複製的內容進行非常精細的控制;但是,管理邏輯備用數據庫比管理物理備用數據庫要復雜得多,因此,如果您不熟悉 Data Guard,在嘗試管理邏輯備用數據庫之前,我會非常熟悉管理物理備用數據庫。另外,一個邏輯備庫是以讀/寫方式打開的,你可以通過關閉那些對象(或整個模式)的SQL Apply,並將GUARD設置為standby來控制哪些對象可以直接修改和不能修改。

1) 創建一個 Data Guard 物理備用

2) 將物理備用轉換為邏輯備用

--STANDBY 
alter database recover managed standby database cancel;

--PRIMARY
execute dbms_logstdby.build;

--STANDBY
alter database recover to logical standby keep identity;
alter database open;
alter database start logical standby apply immediate;

3) 跳過整個模式的複制(DDL 和 DML)(假設 HR 是您希望跳過的模式)

--STANDBY
alter database stop logical standby apply;

EXECUTE DBMS_LOGSTDBY.SKIP(STMT => 'SCHEMA DDL', schema_name => 'HR', object_name => '%');
EXECUTE DBMS_LOGSTDBY.SKIP(STMT => 'DML', schema_name => 'HR', object_name => '%');

alter database start logical standby apply immediate;

4) 允許對未通過 SQL Apply 維護的對象進行更改

alter database guard standby;

可以在此處找到有關 Data Guard 邏輯備用數據庫的 12c 文件:

創建邏輯備用數據庫

管理邏輯備用數據庫

引用自:https://dba.stackexchange.com/questions/168860