goldengate的sqlexec測試
1 源端建立表:
create table oggtest.test_id(id number,name varchar2(16));
並新增附加日誌:
add trandata oggtest.test_id
2 目標端建立表:
create table oggtest.test_id(id number,name varchar2(16),id2 number);
建立唯一索引,並將表的列置為不為空
create unique index oggtest.idx_test_id on oggtest.test_id(ID2);
alter table oggtest.test_id modify ID2 number not null;
目標端表如下:
SYS@orcl>desc oggtest.test_id
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER
NAME VARCHAR2(16)
ID2 NOT NULL NUMBER
目標端配置的OGG引數如下:
map oggtest.test_id,target oggtest.test_id;
3 插入資料,進行驗證
insert into oggtest.test_id values (1,'xue');
commit;
4 檢視OGG的狀態及報錯資訊
檢視OGG程式的狀態,發現為abend
MANAGER RUNNING
REPLICAT ABENDED REPTB1 00:00:05 00:00:07
檢視報錯資訊,為不能插入空置到非空列。但由於ID2為目標端自定義的一列,故決定使用序列,為插入的資料賦值。
2022-12-30 15:57:13 WARNING OGG-01154 SQL error 1400 mapping OGGTEST.TEST_ID to OGGTEST.TEST_ID
OCI Error ORA-01400: cannot insert NULL into ("OGGTEST"."TEST_ID"."ID2") (
status = 1400). INSERT /*+ RESTRICT_ALL_REF_CONS */ INTO "OGGTEST"."TEST_ID" ("ID","NAME")
VALUES (:a0,:a1).
2022-12-30 15:57:13 WARNING OGG-01003 Repositioning to rba 1724 in seqno 20.
Source Context :
SourceModule : [er.errors]
SourceID : [/scratch/aime1/adestore/views/aime1_adc4150267/oggcore/OpenSys/src/app/er/errors.cpp]
SourceFunction : [take_rep_err_action]
SourceLine : [632]
ThreadBacktrace : [12] elements
: [/app/oracle/goldengate/libgglog.so(CMessageContext::AddThreadContext()+0x1e) [0x2b6a770a061e]]
: [/app/oracle/goldengate/libgglog.so(CMessageFactory::CreateMessage(CSourceContext*, unsigned int, ...)+0x2ec) [0x2b6a7709915c]]
: [/app/oracle/goldengate/libgglog.so(_MSG_ERR_MAP_TO_TANDEM_FAILED(CSourceContext*, ggs::gglib::ggapp::CQualDBObjName<(DBObjType)1> const&, ggs::
gglib::ggapp::CQualDBObjName<(DBObjType)1> const&, CMessageFactory::MessageDisposition)+0x53) [0x2b6a7709512b]]
: [/app/oracle/goldengate/replicat(take_rep_err_action(short, int, char const*, extr_ptr_def*, __std_rec_hdr*, char*, file_def*, bool)+0xaa7) [0x5
24c31]]
: [/app/oracle/goldengate/replicat(process_extract_loop()+0x274c) [0x53e78c]]
: [/app/oracle/goldengate/replicat(replicat_main(int, char**)+0x741) [0x551101]]
: [/app/oracle/goldengate/replicat(ggs::gglib::MultiThreading::MainThread::ExecMain()+0x4f) [0x5ef7ff]]
: [/app/oracle/goldengate/replicat(ggs::gglib::MultiThreading::Thread::RunThread(ggs::gglib::MultiThreading::Thread::ThreadArgs*)+0x104) [0x5efa54
]]
: [/app/oracle/goldengate/replicat(ggs::gglib::MultiThreading::MainThread::Run(int, char**)+0x8b) [0x5efb5b]]
: [/app/oracle/goldengate/replicat(main+0x2c) [0x5502ac]]
: [/lib64/libc.so.6(__libc_start_main+0xf4) [0x3c9561d994]]
: [/app/oracle/goldengate/replicat(__gxx_personality_v0+0x31a) [0x4c266a]]
2022-12-30 15:57:13 ERROR OGG-01296 Error mapping from OGGTEST.TEST_ID to OGGTEST.TEST_ID.
5 解決方法
5.1 建立序列
create sequence oggtest.SEQ_TEST_ID
minvalue 1
maxvalue 9999999999
start with 1
increment by 1
cache 20;
5.2 修改目標端OGG的引數,主要使用sqlexec功能
map oggtest.test_id,target oggtest.test_id,SQLEXEC (ID lookup,QUERY 'select oggtest.SEQ_TEST_ID.nextval cname from dual'),COLMAP (USEDEFAULTS, ID2 = @GETVAL (lookup.cname) );
5.3 啟動OGG程式,OGG程式恢復正常
GGSCI (oracle10g1) 27> start reptb1
Sending START request to MANAGER ...
REPLICAT REPTB1 starting
GGSCI (oracle10g1) 28> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING REPTB1 00:00:00 00:00:02
5.4 驗證資料,發現資料按照期望值進行了入庫
SYS@orcl>select * from oggtest.test_id;
ID NAME ID2
---------- ---------------- ----------
1 xue 2
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996316/viewspace-2930316/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- GoldenGate使用SQLEXEC和GETVAL實現碼錶關聯GoSQL
- GoldenGate的安裝、配置與測試Go
- GoldenGate同步DML功能測試Go
- goldengate同步中文表名列名的測試Go
- GoldenGate複製的幾個簡單測試Go
- goldengate同步中文表名列名的測試 --續Go
- 【GoldenGate】Oracle GoldenGate(四) 壓力測試同步百萬行資料GoOracle
- 利用goldengate進行同步操作測試Go
- goldengate同步資料的同步速度測試記錄Go
- 搭建一個Oracle到Oracle的GoldenGate單向複製測試環境OracleGo
- 測試測試測試測試測試測試
- GoldenGate "Error mapping from table.a to table.a"錯誤測試GoErrorAPP
- GoldenGate 12.3 MA架構介紹系列(2) - 資料同步測試Go架構
- db2平臺下oracle goldengate配置支援truncate操作測試記錄DB2OracleGo
- 黑盒測試、白盒測試、單元測試、整合測試、系統測試、驗收測試的區別與聯絡...
- 小白測試系列:介面測試與效能測試的區別
- 軟體測試中的功能測試和非功能測試
- 軟體測試中功能測試的測試工作流程
- 功能測試、自動化測試、效能測試的區別
- 白盒測試、灰盒測試以及黑盒測試的區別
- 測試人員承接測試需求的策略
- 軟體穩定性測試的測試點
- 介面測試和效能測試的區別
- 介面測試和功能測試的區別
- 測試者出的APP測試面試題APP面試題
- JUnit5的條件測試、巢狀測試、重複測試巢狀
- App測試、Web測試和介面測試一般測試流程APPWeb
- 介面測試測試流程
- jwt的測試JWT
- 4大軟體測試策略的特點和區別(單元測試、整合測試、確認測試和系統測試)
- 安全測試和滲透測試的區別
- 單元測試:單元測試中的mockMock
- 測試經驗總結:測試員的角色
- Android單元測試-對Activity的測試Android
- Android單元測試-對View的測試AndroidView
- 測試方案和測試計劃的區別
- 遊戲測試和軟體測試的區別遊戲
- 黑盒測試和白盒測試的關係