去年協(xié)助客戶某云化項(xiàng)目(將部分老舊的Oracle數(shù)據(jù)庫(kù)(Uinx + 9i)遷移至Linux + MySQL 5.7),其中部分?jǐn)?shù)據(jù)庫(kù)使用導(dǎo)出導(dǎo)入的方式可以搞定(數(shù)據(jù)量小、可停機(jī)時(shí)間長(zhǎng)),但是其中部分?jǐn)?shù)據(jù)庫(kù)遷移要求盡量停機(jī)時(shí)間短,數(shù)據(jù)質(zhì)量要求高, 割接當(dāng)晚需要驗(yàn)證目標(biāo)端及源端的數(shù)據(jù)一致,故針對(duì)這部分?jǐn)?shù)據(jù)庫(kù)遷移選擇使用GoldenGate作為同步工具來實(shí)現(xiàn)。
在源端配置GoldenGate的時(shí)候,使用add trandata為需要同步的表添加表級(jí)附加日志,檢查輸出日志發(fā)現(xiàn)部分表報(bào)錯(cuò) OGG-00706 && ORA-02257,添加附加日志不成功。
通過MOS搜索相關(guān)文檔得知,該報(bào)錯(cuò)只發(fā)生在Oracle 9i 且沒有主鍵的情況下為超過33列的表添加表級(jí)附加日志時(shí)會(huì)出現(xiàn)報(bào)錯(cuò)(參考Doc ID 1357001.1 ,Doc ID 1357001.1)),從MOS上得知該報(bào)錯(cuò)解決的辦法也很簡(jiǎn)單,只需要將原來的添加一個(gè)supplemental log group 拆分成多個(gè)日志組,一個(gè)日志組包含33個(gè)列,剩余列放在另一個(gè)日志組,如下:
處理過程中發(fā)現(xiàn)這些業(yè)務(wù)表的列設(shè)計(jì)的非常多,甚至大大超過了33列,上百個(gè)或者幾百個(gè)列,而且是有很多表都存在這個(gè)情況,如下圖查詢所示(T001表為建立的測(cè)試表),顯示很多表列的個(gè)數(shù)已經(jīng)超過了100個(gè),在GoldenGate同步的時(shí)候如果每一張表都手工來處理實(shí)在是費(fèi)時(shí)費(fèi)力,效率太低。
于是想辦法通過拆分表的列,用SQL來拼接添加附加日志的腳本,經(jīng)過一番折騰過后,最終成品如下圖所示,當(dāng)然最后可以用shell腳本循環(huán)跑一下需要的表,就可以全部輕松搞定:
附拆分column腳本:
▼▼▼
Set line 32767 pages 0
set long 99999999
set feedback off
set heading off
--set wrap off
set tab off
set trimspool on
set trimout on
set termout off
col ddl for a300
Select alter table || Owner || . || Table_Name ||
add supplemental log group || Table_Name || _ || Max_Id || ( ||
Column_Name || ) always; As Ddl
From (Select Owner,
Table_Name,
Substr(Column_Name, 1, Length(Column_Name) - 1) As Column_Name,
Max(Col_Id) As Max_Id
From (Select Owner,
Table_Name,
Ceil(Column_Id / 30) As Col_Id,
Replace(Replace(Replace(To_Char(Xmlagg(Xmlelement(e, Column_Name, ,).Extract(//text()) Order By Column_Id)
.Getclobval()),
Chr(13),
),
Chr(10),
),
Chr(9),
) As Column_Name
From Dba_Tab_Columns
Where Table_Name = T001
And Owner = PERFSTAT
Group By Owner, Table_Name, Ceil(Column_Id / 30)
Order By 3)
Group By Owner, Table_Name, Column_Name
Order By 4);
更多精彩干貨分享
點(diǎn)擊下方名片關(guān)注
IT那活兒
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/129833.html
集成安裝之Oracle12C補(bǔ)丁升級(jí)數(shù)據(jù)字典更新報(bào)錯(cuò)處理 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; ...
摘要:摘要徒手寫錯(cuò)誤監(jiān)控。為什么用定時(shí)器呢,因?yàn)樵趩雾?yè)應(yīng)用中,路由的切換和地址欄的變化是無法被監(jiān)控的,我確實(shí)沒有想到特別好的辦法來監(jiān)控,所以用了這種方式,如果有人有更好的辦法,請(qǐng)給我留言,謝謝。 摘要: 徒手寫JS錯(cuò)誤監(jiān)控。 作者:一步一個(gè)腳印一個(gè)坑 原文:搭建前端監(jiān)控系統(tǒng)(二)JS錯(cuò)誤監(jiān)控篇 Fundebug經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有。 背景:市面上的監(jiān)控系統(tǒng)有很多,大多收費(fèi),對(duì)于...
閱讀 1464·2023-01-11 13:20
閱讀 1816·2023-01-11 13:20
閱讀 1267·2023-01-11 13:20
閱讀 2009·2023-01-11 13:20
閱讀 4228·2023-01-11 13:20
閱讀 2889·2023-01-11 13:20
閱讀 1489·2023-01-11 13:20
閱讀 3814·2023-01-11 13:20