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
- Oracle Goldengate(ogg) 12c認證考試流程OracleGo
- 基於Docker的GoldenGate部署DockerGo
- goldengate + asm + racGoASM
- 測試測試測試測試測試測試
- GoldenGate Logdump基本使用Go
- ORACLE GoldenGate Initial LoadOracleGo
- About the Oracle GoldenGate TrailOracleGoAI
- 測試——水杯的測試用例
- 瞭解GoldenGate Replicat的HANDLECOLLISIONS引數Go
- GoldenGate表異構的解決方法Go
- 功能測試、自動化測試、效能測試的區別
- 小白測試系列:介面測試與效能測試的區別
- 軟體測試中的功能測試和非功能測試
- Oracle GoldenGate 18.1釋出OracleGo
- GoldenGate GGSCI監控命令Go
- Oracle GoldenGate安裝(一)OracleGo
- Oracle GoldenGate安裝(二)OracleGo
- Oracle GoldenGate安裝(三)OracleGo
- GoldenGate的一些引數的意義Go
- Oracle GoldenGate 18.1 支援的DB和OS列表OracleGo
- 【黑盒測試】測試用例的常用方法
- 測試人員承接測試需求的策略
- 軟體穩定性測試的測試點
- 介面測試和效能測試的區別
- 介面測試和功能測試的區別
- JUnit5的條件測試、巢狀測試、重複測試巢狀
- 測試—測試方法
- 測試測試用
- jwt的測試JWT
- 影子測試:軟體測試的創新策略
- 安全測試和滲透測試的區別
- 單元測試:單元測試中的mockMock
- 4大軟體測試策略的特點和區別(單元測試、整合測試、確認測試和系統測試)
- Flutter 學習之路 - 測試(單元測試,Widget 測試,整合測試)Flutter
- App測試、Web測試和介面測試一般測試流程APPWeb
- 簡單談一下我對持續測試下的測試左移、迭代測試和測試右移的理解吧