goldengate的sqlexec測試

xueshancheng發表於2022-12-30

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章