共計(jì) 4991 個(gè)字符,預(yù)計(jì)需要花費(fèi) 13 分鐘才能閱讀完成。
這篇文章給大家分享的是有關(guān) OGG ora-01403 錯(cuò)誤怎么處理的內(nèi)容。丸趣 TV 小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨丸趣 TV 小編過(guò)來(lái)看看吧。
OGG 運(yùn)維中有一個(gè)經(jīng)典錯(cuò)誤 -1403。現(xiàn)象是目標(biāo)端復(fù)制 update 或者 delete 操作導(dǎo)致復(fù)制進(jìn)程 abended,原因是 update 或 delete 時(shí)找不到目標(biāo)數(shù)據(jù)。至于該數(shù)據(jù)為什么不在目標(biāo)端有很多可能,比如人為刪除、trigger 沒(méi)有禁用導(dǎo)致刪除、級(jí)聯(lián)外鍵刪除沒(méi)有禁用導(dǎo)致刪除等等。通常我們的排查手段是確認(rèn)目標(biāo)端的 trigger、級(jí)聯(lián)外鍵刪除、job 是否啟動(dòng)了?如果啟動(dòng)了禁用它。然后再排查源端表是否有主鍵,主鍵在 trandata 中是否生效。上述排查都沒(méi)有問(wèn)題的話就開(kāi)始做表級(jí)初始化吧,數(shù)據(jù)泵導(dǎo)出導(dǎo)入,同步變化 …
但是有時(shí)候我們也可以不這么折騰,可以采取“補(bǔ)缺”的方式讓復(fù)制進(jìn)程迅速恢復(fù)。思路如下:
1. 通過(guò)目標(biāo)端 ggserr 日志和 replcat.dsc 文件來(lái)定位丟失的數(shù)據(jù)
2. 在源端使用 database link 執(zhí)行 insert into 目標(biāo)端 select * from 源表 where=(步驟一確認(rèn)的條件)的方式來(lái)手工補(bǔ)缺。
3. 啟動(dòng)復(fù)制進(jìn)程,復(fù)制進(jìn)程會(huì)重新操作 abended 之前失敗的操作。
下面通過(guò)一個(gè)實(shí)驗(yàn)來(lái)演示上述過(guò)程
1. source 插入第一條測(cè)試數(shù)據(jù)
Insert into FM_TAX_RATE_TEST (TEST_ID,COUNTRY, STATE, TAX_TYPE, TAX_RATE)
Values (1, CN , 68 , WT3 , 0.0015);
commit;
2. target 確認(rèn)同步
select * from fm_tax_rate_test;
COUNTR STAT TAX_TY TAX_RATE TEST_ID
—— —- —— ———- ———-
CN 68 WT3 .0015 1
3. target 刪除復(fù)制記錄,人為制造 1403 錯(cuò)誤
delete from fm_tax_rate_test where test_id=1;
commit;
4. source 對(duì)第一條測(cè)記錄執(zhí)行 update 操作會(huì)導(dǎo)致 target 復(fù)制進(jìn)程中斷。中斷原因是 update 語(yǔ)句中的 where 字句定位的數(shù)據(jù)在 target 端不存在,因?yàn)槲覄倓偸止h除了這條記錄。
update FM_TAX_RATE_TEST set country= US where test_id=1;
commit;
此時(shí) target 端已經(jīng)中斷,在 source 增加數(shù)據(jù)變化,期待 target 重啟后會(huì)應(yīng)用這些故障后產(chǎn)生的變化。
Insert into FM_TAX_RATE_TEST (TEST_ID,COUNTRY, STATE, TAX_TYPE, TAX_RATE)
Values (2, TW , 68 , WT3 , 0.0015);
Insert into FM_TAX_RATE_TEST (TEST_ID,COUNTRY, STATE, TAX_TYPE, TAX_RATE)
Values (3, JP , 68 , WT3 , 0.0015); 2
commit;
target 復(fù)制進(jìn)程中斷
GGSCI (cdbsym3) 6 info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING REPSYM 00:00:00 00:00:02
REPLICAT ABENDED REPSYM_T 00:10:20 00:00:01
target 端 ggserr.log 中錯(cuò)誤信息片段
2015-03-31 13:50:26 WARNING OGG-01004 Oracle GoldenGate Delivery for Oracle, repsym_t.prm: Aborted grouped transaction on OGG_TEST.FM_TAX_RATE_TEST , Database error 1403 (OCI Error ORA-01403: no data found, SQL UPDATE OGG_TEST . FM_TAX_RATE_TEST SET COUNTRY = :a1, STATE = :a2, TAX_TYPE = :a3, TAX_RATE = :a4, TEST_ID = :a5 WHERE TEST_ID = :b0).
2015-03-31 13:50:26 WARNING OGG-01003 Oracle GoldenGate Delivery for Oracle, repsym_t.prm: Repositioning to rba 170249512 in seqno 12.
2015-03-31 13:50:26 WARNING OGG-01154 Oracle GoldenGate Delivery for Oracle, repsym_t.prm: SQL error 1403 mapping OGG_TEST.FM_TAX_RATE_TEST to OGG_TEST.FM_TAX_RATE_TEST OCI Error ORA-01403: no data found, SQL UPDATE OGG_TEST . FM_TAX_RATE_TEST SET COUNTRY = :a1, STATE = :a2, TAX_TYPE = :a3, TAX_RATE = :a4, TEST_ID = :a5 WHERE TEST_ID = :b0 .
2015-03-31 13:50:26 WARNING OGG-01003 Oracle GoldenGate Delivery for Oracle, repsym_t.prm: Repositioning to rba 170249512 in seqno 12.
2015-03-31 13:50:26 ERROR OGG-01296 Oracle GoldenGate Delivery for Oracle, repsym_t.prm: Error mapping from OGG_TEST.FM_TAX_RATE_TEST to OGG_TEST.FM_TAX_RATE_TEST.
2015-03-31 13:50:26 ERROR OGG-01668 Oracle GoldenGate Delivery for Oracle, repsym_t.prm: PROCESS ABENDING.
target 端 discard 文件中記錄了 test_id= 1 的數(shù)據(jù)執(zhí)行 udpate 失敗
more repsym_t.dsc
Oracle GoldenGate Delivery for Oracle process started, group REPSYM_T discard file opened: 2015-03-31 13:50:25
Current time: 2015-03-31 13:50:26
Discarded record from action ABEND on error 1403
OCI Error ORA-01403: no data found, SQL UPDATE OGG_TEST . FM_TAX_RATE_TEST SET COUNTRY = :a1, STATE = :a2, TAX_TYPE = :a3, TAX_
RATE = :a4, TEST_ID = :a5 WHERE TEST_ID = :b0
Aborting transaction on ./dirdat/yt beginning at seqno 12 rba 170249512
error at seqno 12 rba 170249512
Problem replicating OGG_TEST.FM_TAX_RATE_TEST to OGG_TEST.FM_TAX_RATE_TEST
Record not found
Mapping problem with compressed key update record (target format)…
*
TEST_ID = 1
COUNTRY = US
STATE = 68
TAX_TYPE = WT3
TAX_RATE = .00150000
TEST_ID = 1
這時(shí)候很多運(yùn)維人員最常用的就是按照 csn 一致性導(dǎo)出 source 表,重新初始化 target 端數(shù)據(jù)不一致的表。在使用下面的方式來(lái)修改復(fù)制進(jìn)程參數(shù)文件,重啟復(fù)制進(jìn)程追進(jìn)度。
map schema.table, target schema.table, filter (@GETENV ( TRANSACTION , CSN) 9527);
如果同步的表比較大,這個(gè)過(guò)程會(huì)很漫長(zhǎng)。
如果只是缺少那么幾條數(shù)據(jù),別人被認(rèn)為誤刪除了造成的,也需要這么大動(dòng)干戈處理么?其實(shí)可以用個(gè)簡(jiǎn)單的方法來(lái)處理,在源庫(kù)創(chuàng)建一個(gè) database link,將 target 端缺少的數(shù)據(jù)手工 insert 過(guò)去補(bǔ)全這個(gè)漏洞,然后啟動(dòng)復(fù)制進(jìn)程。復(fù)制進(jìn)程會(huì)再次嘗試失敗的 update 語(yǔ)句,where 字句鎖定剛才手工插入的數(shù)據(jù),修改成功。復(fù)制進(jìn)程繼續(xù)應(yīng)用 source 端數(shù)據(jù)變化。
5. 源端創(chuàng)建 database link。其中 SERVICE_NAME = data 為 target 數(shù)據(jù)庫(kù)的 SID
5-1 在 tnsnames.ora 中添加 target 端數(shù)據(jù)庫(kù)的字符串
to19 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.78.2.19)(PORT = 1553))
)
(CONNECT_DATA =
(SERVICE_NAME = data)
)
)
5-2 創(chuàng)建 database link 指向 target 數(shù)據(jù)庫(kù); 其中 ogg_test 為 target 數(shù)據(jù)庫(kù)的 schema。
create public databbase link to19 connect to ogg_test identified by ogg_test;
5-3 通過(guò) database link 手工同步丟失語(yǔ)句。其中 select 語(yǔ)句是源表的數(shù)據(jù),insert into 是目標(biāo)數(shù)據(jù)庫(kù)。
insert into ogg_test.fm_tax_rate_test@to19 select * from ogg_test.fm_tax_rate_test where test_id=1;
6. target 啟動(dòng)復(fù)制進(jìn)程
GGSCI (cdbsym3) 4 start repsym
Sending START request to MANAGER …
REPLICAT REPSYM starting
GGSCI (cdbsym3) 5 info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING REPSYM 00:00:00 00:00:00
REPLICAT RUNNING REPSYM_T 00:00:00 00:00:01
數(shù)據(jù)變化已經(jīng)被應(yīng)用到復(fù)制端了
GGSCI (cdbsym3) 8 stats repsym total table dbp.rb_restraints
Sending STATS request to REPLICAT REPSYM …
Start of Statistics at 2015-03-31 11:09:14.
Replicating from SYMBOLS.RB_RESTRAINTS to DBP.RB_RESTRAINTS:
*** Total statistics since 2015-03-31 11:08:13 ***
Total inserts 1.00
Total updates 4.00
Total deletes 0.00
Total discards 0.00
Total operations 5.00
End of Statistics.
7. 在數(shù)據(jù)庫(kù)中查看復(fù)制進(jìn)程啟動(dòng)后的數(shù)據(jù)變化
OGG_TEST@data select * from ogg_test.fm_tax_rate_test;
COUNTR STAT TAX_TY TAX_RATE TEST_ID
—— —- —— ———- ———-
US 68 WT3 .0015 1
TW 68 WT3 .0015 2
JP 68 WT3 .0015 3
其中第一條數(shù)據(jù)就是我們通過(guò)手工同步的數(shù)據(jù),后面兩條數(shù)據(jù)是故障之后的數(shù)據(jù)變化。
注意: 如果手工同步之前源表的數(shù)據(jù)也執(zhí)行 delete 操作就無(wú)法通過(guò) isnert into select 的方式獲取并同步到 target 端了。
感謝各位的閱讀!關(guān)于“OGG ora-01403 錯(cuò)誤怎么處理”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!