2022年7月6日 星期三

2. Golden Gate 安裝與前置設定

Oracle Golden Gate 是一個輕量軟體,早期在 OGG 12c 的版本之前,軟體的安裝只不過是把下載下來的軟體解壓縮就可以使用了,值得注意的是,在 OGG 12c 之前的軟體種類區分的非常細,例如要使用 OGG 11g 同步在 Linux上面的 Oracle 10g 的資料庫就必須下載 OGG 11g for Oracle 10g On Linux ,如果是 Oracle 9i 的資料庫就必須下載 OGG 11g for Oracle 9i On Linux :


到了 OGG 12c 的版本之後就沒有區分到這麼細了,軟體只有區分 for 不同的資料庫以及作業系統平台,此外,對於 OGG 12c for Oracle 來說,軟體的安裝必須使用 runInstaller ,比起以往只需要解壓縮, runInstaller 是不是讓 OGG 覺得有 "安裝" 的感覺呢 ?  使用 runInstaller 安裝 OGG ,預設需要使用 XWindows 開啟圖型介面進行安裝,例如安裝 OGG 12c , OGG 12c 可以支援 Oracle 11g 與 12c 的版本,因此安裝一開始必須選擇此次 OGG 是要搭配 Oracle 11g 或 12c 來使用 :


接下來就是設定軟體安裝位置然後就開始進行安裝 :


雖然是 runInstaller 的安裝,不過實際上所做的事也只不過是把軟體解壓縮回來而已,安裝的過程是可以不需要使用圖型介面的,我們只需要編輯 response file 來設定幾個簡單的參數,就可以使用 Silent Mode 來安裝, response file 在 OGG 軟體的 response 目錄下已經有現成的範本 oggcore.rsp ,只需要為 oggcore.rsp 填入幾個參數就完成 response file 的設定 :

oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_schema_v12_1_2       (軟體範本的設定,無須改動)

INSTALL_OPTION=ORA11g   (ORA11g 表示 OGG for Oracle 11g) 

SOFTWARE_LOCATION=/u01/app/ogg   (設定 OGG 軟體安裝位置)

START_MANAGER=            (無須設定)

MANAGER_PORT=             (無須設定)

DATABASE_LOCATION=       (無須設定)

INVENTORY_LOCATION=/opt/app/oraInventory

UNIX_GROUP_NAME=oinstall


編輯完 response file 之後就可以使用 Silent Mode 進行安裝 :

$ ./runInstaller –silent –responsefile oggcore.rsp


安裝完成後必須設定環境變數 LD_LIBRARY_PATH 才可以進入 ggsci ,否則會出現找不到 library 的錯誤, 如果是 OGG 19c 之後的版本需要再設定環境變數 GG_HOME :

$ export GG_HOME=/u01/app/ogg

$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$GG_HOME:$GG_HOME/lib


最後進入 ggsci 執行 create subdirs 建立目錄後,完成安裝 :

$ ./ggsci

GGSCI> create subdirs


安裝完成後的第一件事就是將 MGR 啟動,進入 ggsci 編輯 MGR 參數 :

$ ./ggsci

GGSCI> edit param mgr


MGR 參數如下 :

PORT 7809

DYNAMICPORTLIST 9101-9121

PURGEOLDEXTRACTS ./dirdat/*, usecheckpoints, minkeepfiles 10

LAGREPORTHOURS 1

LAGINFOMINUTES 30

LAGCRITICALMINUTES 45


PORT : 設定 PORT Number 為 7809 。

DYNAMICPORTLIST : 設定 PORT Range 為 9101-9121 ,在 Source 與 Target 中間有防火牆需要開通時,才需要使用這個設定。

PURGEOLDEXTRACTS : 設定自動刪除 Trail File ,以 check point 為基準,在 Trail 被使用之後進行刪除,最少保留 10 個檔就好。

LAGREPORTHOURS : 設定為 1 表示每隔 1 小時檢查同步有無 Lag 。

LAGINFOMINUTES : 設定為 30 表示當 Lag 達到 30 分鐘以上就將此延遲記錄寫入 error log 。

LAGCRITICALMINUTES : 設定為 45 表示當 Lag 達到 45 分鐘以上就將此記錄視為告警並寫入 error log 。


完成參數設定後就可以啟動 MGR ,完成初步 OGG 的設定 :

$ ./ggsci

GGSCI> start mgr


如果是 Windows 平台,可以把 MGR 的啟動加入到 Windows 服務當中,於 GG_HOME 底下執行 :

C:\GGS>  Install AddService AddEvents


接下來在 Oracle 資料庫當中必須建立一個給 OGG 所用的專屬使用者並賦予相關權限 :

SQL> create tablespace ogg datafile '/u01/oradata/ogg.dbf' size 500M;

SQL> create user ogg identified by ogg default tablespace ogg;

SQL> exec dbms_streams_auth.grant_admin_privilege('OGG');(10g 之前使用)

SQL> exec dbms_goldengate_auth.grant_admin_privilege('OGG');(11g 之後使用)

SQL> grant dba to ogg;  (直接授予 dba 權限,或是授予以下權限)

SQL> grant create any table to ogg;

      grant create any view to ogg;

      grant create any procedure to ogg;

      grant create any sequence to ogg;

      grant create any index to ogg;

      grant create any trigger to ogg;


建立完使用者之後,使用 ggsci 建立 OGG 的 check point table :

GGSCI> dblogin userid ogg, password ogg

GGSCI> add checkpointtable ogg.ggschkpt


對於 Oracle 11g 之後的資料庫版本,需要打開參數 enable_goldengate_replication :

SQL> alter system set enable_goldengate_replication=true;


在一切準備就緒後,接下來就可以開始來設定 OGG 的同步機制。



2022年7月5日 星期二

1. Oracle Golden Gate 介紹

Oracle Golden Gate (簡稱 OGG) 是一套主要用來做資料同步的軟體, Oracle 資料庫本身已經有 Stream 這項功能用來做資料同步,不過 Stream 的設定與管理不易,在 Oracle 併購了 Golden Gate 之後已漸漸用 OGG 取代了 Stream 作為主要資料同步的方式,而 Oracle 自 19c 這個版本開始已經不再支援 Stream 這項功能了, Golden Gate 已成為 Oracle 做資料同步的主流產品。


同樣作為資料同步之用, OGG 不同於 Physical Standby 、 Materialized view 的地方在於, OGG 的同步是以 Table 為單位,在交易 commit 之後便立刻進行同步,提供了資料同步的即時性,而且 Source 與 Target 可以是不同的 Oracle 版本,或者是不同的作業系統平台,甚或可以是不同種類的資料庫 (例如 Oracle to MySQL 、 SQL Server to SQL Server …等) ,在跨平台的支援之下,運用起來比起 Stream 更為彈性,使得 Oracle 發展的重心移往 OGG 這項產品。


資料同步可運用的場景在 Data Guard 的章節已討論過,例如 Target 資料庫可以當作備份或報表伺服器之用…等, OGG 在即時資料同步的特性之下,最常運用的場景在於資料庫的異機升級,或者是資料庫的異機同質或異質平台的移轉,透過 OGG 的同步機制,可以大量減少資料庫移轉的服務停止時間。


OGG 另一項優點是軟體本身是輕量的,軟體的安裝不需要花費太多空間,不像資料庫軟體動輒就要幾十G 的空間,並且安裝與設定上也非常容易。 OGG 整體的概念上也非常的簡單,在 Source 與 Target 資料庫所在的 Server 上安裝好 OGG 軟體之後,首先要先啟動 Manager (MGR) 這個 Process , MGR 主要的功能在於定義 Source 與 Target 之間溝通所需要的 Port ,以及啟動與關閉 Extract 、 Pump 、 Replicate 等 Process 所用 :


在設定完 MGR 之後, Source 端需要設定兩種 Process , Extract 與 Pump , Extract 主要的功能是從 Source 資料庫的交易日誌檔將交易抽取出來,這些被抽取出來的交易紀錄便會放入 Trail 這個檔案當中; Pump 主要的目的就是將 Trail 的內容傳送到 Target 端。 Target 端也有兩種 Process , Collector 與 Replicate , Collector 是一個隱含的 Process ,一般不用特別去設定它,主要的功能是用來接收 Source 端 Pump 所傳過來的 Trail , Replicate 則是用來將 Trail 的內容 Apply 到 Target 資料庫中,這邊就需要去定義它哪些資料庫物件是需要被 Apply 的。


OGG 的 Extract 只會抓取已經 commit 的交易,所以它資料同步的順序是以交易 commit 的順序來同步,例如 Source 資料庫先發起了一個交易 TX1 進行了 Insert 與 Update 等動作,在這中途又有另一個交易 TX2 發起了 Insert 的動作,而 TX2 進行完 Insert 之後立即執行了 commit 在 TX1 之前 :


由於 TX2 先於 TX1 前進行 commit ,所以 Extract 會先將 TX2 抽取出來,因此在 Trail 裡面的順序會先進行 TX2 然後才進行 TX1 ,到了 Target 端 Apply 的順序也會從 TX2 先進行 Apply 。 OGG 在抽取、傳送、 Apply 每個交易之後都會做一個 Checkpoint 並記錄起來,這邊稱作 CSN (Commit Sequence Number) ,用途在於當發生異常中斷時,可以藉由 CSN 確認同步到哪一筆交易,然後再接續同步往後的交易, OGG 的 CSN 就等同於 Oracle 資料庫的 SCN ,若是同步 Oracle 資料庫,這兩者是可以對應起來的。


OGG 在操作上使用的是文字介面,都是經由 ggsci 這個介面來做操作,在 OGG 安裝目錄下執行 ggsci 便會進入到 GGSCI 的介面 :

$ ./ggsci

GGSCI>

GGSCI> info all


在進入 GGSCI 之後,我們所要學習的第一個命令就是 info all ,透過 info all 就可以馬上知道目前 OGG 設定多少個同步的 Group ,以及當下同步的狀態為何 :


既然 OGG 操作上使用的是文字介面,那麼當然爾所有的設定也是透過文字介面來完成,所有的 MGR 、 Extract 、 Pump 、 Replicate 設定都是透過參數檔來完成,這些參數檔都是位於 OGG 安裝目錄下的 dirprm 目錄,並且都是以 *.prm 來命名,而這些 Process 的 Log 檔我們稱作 Report File ,位於 dirrpt 目錄底下,以 *.rpt 命名,同時在 dirrpt 目錄底下還會有另一種檔案 *.dsc ,表示 Discard File ,這個檔案是用來存放同步中有發生異常的資料。


在初學 OGG 階段,我們只需要知道 info all 、 以及參數檔 dirprm 、 Log 檔 dirrpt 這些東西就已經足夠,設定上也並不複雜,是一個蠻好上手的工具。