摘要: sybase版本:Sybase15(源端) Oracle版本:11g(目標端) Goldengate版本:11.2.0.1.0(源端),12c(目標端) 個人博客:www.czhiying.cn Goldengate同步原理: Oracle GoldenGate軟體是一種基於日誌的結構化數據 ...
摘要:
- sybase版本:Sybase15(源端)
- Oracle版本:11g(目標端)
- Goldengate版本:11.2.0.1.0(源端),12c(目標端)
- 個人博客:www.czhiying.cn
Goldengate同步原理:
Oracle GoldenGate軟體是一種基於日誌的結構化數據複製備份軟體,它通過解析源資料庫線上日誌或歸檔日誌獲得數據的增量變化,再將這些變化應用到目標資料庫,從而實現源資料庫與目標資料庫同步。參考圖如下:
從上圖可以知道,Ogg的同步實現方式有兩種:
- 在源端建立Extract進程捕獲日誌變化,形成Ogg自身定義的Trail文件,Trail文件不保存在本地,通過網路方式,直接傳輸到目的端;然後目的端通過Replicat進程解析Trail文件,將變化支付到目標端資料庫;
- 在 源端建立Extract進程捕獲日誌變化,形成Ogg自身定義的Trail文件,Trail文件保存在本地,然後在源端建立Data Pump進程(實際也是Extract進程,不過職能不同,我們在叫法上將其區分);然後通過Data Pump進程將產生的Trail文件傳輸到目的端;然後目的端通過Replicat進程解析Trail文件,將變化支付到目標端資料庫;
既然存在兩種同步方式,存在即有理,但是我還是推薦使用第二種方式同步數據。因為這樣本地有保存Trail文件,有保障一點。所以我下麵的介紹也是基於第二種方式來進行同步的。
同步思路:
- 由於源資料庫和目標資料庫屬於異構關係,表結構不同,故需要使用Ogg提供的表結構定義工具將源資料庫的表結構定義出來,提供給目標資料庫解析。
- 數據同步存在數據初始化和數據增量同步。故此,在準備進行數據初始化時,需保證Ogg對源資料庫的捕獲進程為開啟狀態。這樣,便可以實現源/目標資料庫的數據一致性。
同步步驟:
- 源端sybase建立goldengate同步用戶,需要許可權 sa_role,replication_role;
- 在需要同步的庫上,開啟第二事務截斷點;
假設需要同步的庫是test,則使用isql進入sybase命令行後,執行 use test go dbcc settrunc(ltm,valid) go 目的:ogg的捕獲進程可以成功捕獲到事務日誌變化的保證;如果沒有開啟此選項,extract進程啟動將會失敗,各位可以試驗一下。其實,如果沒有開啟此選項,當你使用ggsci進行添加附加日誌的時候,ggsci也會提醒你沒有開啟某個庫的第二事務截斷點選項。 註意:這裡的ltm選項可以說又愛又恨啊,為什麼這麼說呢,請看我另外一篇文章。 |
3.進入ggsci控制台,使用dblogin訪問資料庫,添加表級附加日誌;
進入ggsci控制台後,使用命令: dblogin sourcedb 數據源,userid 用戶名,password 密碼 註意:因為gg是oracle的產品,所以其他的資料庫需要使用odbc建立數據源,讓oracle能訪問到其資料庫,如何建立數據源,可以去上度娘,這裡就不做介紹了。 success後使用命令添加附加日誌: add trandata test.test; (這裡的test.test的意思是,對test庫下的test表添加附加日誌。) 成功添加的話,將會看到enable的相關信息,同時,如果這裡沒對同步庫開啟ltm選項的話,將會看到一條提醒,不過不用擔心,你過會再去開啟也行,反正在extract進程啟動之前開啟就行。 |
4.配置ogg針對源資料庫(Sybase資料庫)的捕獲進程;
prm文件: EXTRACT ext_test --捕獲進程名稱 sourcedb test,userid sa,password 123456 EXTTRAIL dirdat/te DISCARDFILE dirrpt/ext_test.dsc , APPEND REPORTCOUNT EVERY 10000 RECORDS, RATE GETTRUNCATES table dbo.test; --聲明需要捕獲數據變化的表 ggsci控制台: edit params ext_test(將會創建一個ext_test.prm的參數文件,將上述參數複製進該文件) add extract ext_test,tranlog,begin now(創建extract進程) add exttrail dirdat/te,extract ext_test,megabytes 100(創建exttrail,既抓取數據後記錄到本地trail文件) 啟動extract進程: start ext_test 如無意外,進程啟動成功。如果這裡啟動失敗的話,請使用命令,view report ext_test,查看錯誤報告,如果解決不了,可留下評論,博主看到會幫你解決。 |
5.源端配置、啟動數據泵進程
目的:由於Ogg將捕獲到的數據變化記錄為自身定義的trail文件並存放於本地文件中,故需要使用數據泵進程將這些trail文件遠程投遞到目標機上。 ggsci控制台: edit params dp_test 參數文件配置: EXTRACT dp_test add extract dp_test,exttrailsource dirdat/te(這裡創建數據泵進程,trail源是剛剛捕獲進程設置的trail路徑) add rmttrail D:\ogg112101_ggs_Windows_x86_ora11g_32bit\dirdat\du,extract dp_test,megabytes 100(這裡創建rmttrail定義) start dp_test 如無意外,進程成功開啟。這裡要註意的一點是,準備投遞過去的那臺電腦,必須先安裝好ogg,由於博主這裡是使用同一臺電腦,所以博主這裡安裝了兩個Ogg,一個for sybase,一個for oracle,兩個是不同埠的。 |
6.目標端配置、啟動應用進程
目的:將源端投遞過來的trail文件進行解密、分析,將源端的增量數據同步更新到目標資料庫。 目標端ggsci: edit params rep_test 參數文件配置: REPLICAT rep_test Dblogin userid ogg, password 123456(訪問oracle資料庫,目的是建checkpoint表) Add checkpointtable ogg.chkpt_test(表名隨意,有意義就行) add replicat rep_test,exttrail dirdat/du,CHECKPOINTTABLE ogg.chkpt_test(這裡的exttrail,是指源端投遞過來的trail文件) start rep_test 啟動成功,即可在sybase端試試插入數據,更新數據,刪除數據,是否會進行同步。 |