各位好。
我这有个疑问是,复制端,如何配置,使得复制进程可以调用存储过程(中间表及存储过程在目标端数据库上)
场景描述:
我在源库oggs,目标库oggt中分别新建了张同构的表test01,oggs中的数据导到oggt中。
借助oggt上的中间表以及存储过程进行数据转换。
oggs上
ID NAME
1 01 A
2 02 B
3 03 C
4 04 D
oggt上中间表
MAPPING_GUID MAPPING_FRMTABLE MAPPING_FRMCOLNAME MAPPING_FRMCOLVALUE MAPPING_TOTABLE MAPPING_TOCOLNAME MAPPING_TOCOLVALUE
1 001 test01 name A test01 name AA
2 002 test01 name B test01 name BB
3 003 test01 name C test01 name CC
4 004 test01 name D test01 name DD
设想目标端投递结果为
Id name
01 AA
02 BB
03 CC
04 DD
create or replace procedure procMappingTest(frmcolvalue in varchar,
tocolvalue out varchar) is
begin
select mapping_tocolvalue
into tocolvalue
from mappingtable t
where mapping_frmcolvalue = frmcolvalue;
end;
复制端参数配置
replicat repl
userid oggt, password aaaaaa
setenv (NLS_LANG = AMERICAN_AMERICA.US7ASCII)
assumetargetdefs
reperror default, discard
discardfile ./dirrpt/repl.dsc, append, megabytes 100
gettruncates
map oggs.test01, target oggt.test01,
sqlexec(id procMappingTest,spname procMappingTest, --这个地方id不添加,会start repl进程时就报错
params(frmcolvalue=mapping_frmcolvalue)),
colmap(usedefaults,name=@GETVAL(procMappingTest.tocolvalue));
可是执行过程中,复制进程挂起。出错日志如下
ERROR OGG-00665 OCI Error executing alter session disable parallel dml (status = 12841-ORA-12841: Cannot alter the session parallel DML state within a transaction), SQL<Not available>. |
|