度量快速开发平台-专业、快速的软件定制快开平台

标题: oracle数据库高级复制(二) [打印本页]

作者: 张兴康    时间: 2020-3-5 14:10
标题: oracle数据库高级复制(二)
上贴链接:http://plat.delit.cn/forum.php?mod=viewthread&tid=834

如何检查一个错误的延迟事务到底作了什么?

有些时候因为种种原因,可能复制操作会出现错误。检查DEFERROR视图会发现有错误的延迟事务,我们首先可以通过DEFERRED_TRAN_ID和CALLNO在DEFCALL视图中查询这个操作大体上是在干什么。
select schemaname, packagename, procname from defcall;


其中SCHEMANAME表示哪个用户执行的DML,PACKAGENAME中可以知道是哪个对象上的操作,PROCNAME则可以知道是插入,更新还是删除。但是这样的信息往往不足够我们判断问题。我们想知道到底这个SQL干了什么,怎么办?我们可以利用DBMS_DEFER_QUERY.GET_CALL_ARGS来达到目的。运行以下的存储过程,可以得到想要查询的延迟事务的具体参数值。

CREATE OR REPLACE PROCEDURE GET_CALL(tran_id IN STRING,
callno IN NUMBER,
startarg IN NUMBER := 1,
argcnt IN NUMBER,
argsize IN NUMBER,
tran_db IN STRING := '') IS
v_types DBMS_DEFER_QUERY.TYPE_ARY;
v_vals DBMS_DEFER_QUERY.VAL_ARY;
indx NUMBER;
v_type_desc VARCHAR2(50);
BEGIN
DBMS_DEFER_QUERY.GET_CALL_ARGS(callno =>; callno,
startarg =>; startarg,
argcnt =>; argcnt,
argsize =>; argsize,
tran_db =>; tran_db,
tran_id =>; tran_id,
date_fmt =>; 'YYYY-MM-DD HH24:MI:SS',
types =>; v_types,
vals =>; v_vals);

FOR indx IN 1 .. argcnt LOOP
IF v_types(indx) = 1 THEN
v_type_desc := 'VARCHAR2';
END IF;
IF v_types(indx) = 2 THEN
v_type_desc := 'NUMBER';
END IF;
IF v_types(indx) = 12 THEN
v_type_desc := 'DATE';
END IF;
IF v_types(indx) = 23 THEN
v_type_desc := 'RAW';
END IF;
IF v_types(indx) = 96 THEN
v_type_desc := 'CHAR';
END IF;
IF v_types(indx) = 11 THEN
v_type_desc := 'ROWID';
END IF;
dbms_output.put_line('Arg ' || indx || ': Datatype ' ||
v_type_desc || '; Value: ' ||
v_vals(indx));
END LOOP;
END GET_CALL;



作者: 万望    时间: 2020-3-5 15:03

作者: 张兴康    时间: 2020-3-5 17:00
万望 发表于 2016-4-5 15:03

这表情又是从哪里弄到的?
作者: 陈晓龙    时间: 2020-3-6 21:50
果然高级,不怎么常用!
作者: 张兴康    时间: 2020-3-7 14:26
陈晓龙 发表于 2016-4-6 21:50
果然高级,不怎么常用!

了解就好
作者: 陈晓龙    时间: 2020-3-7 19:36
张兴康 发表于 2016-4-7 14:26
了解就好

要得嘛!
作者: 张兴康    时间: 2020-3-8 20:16
陈晓龙 发表于 2016-4-7 19:36
要得嘛!

嗯哼
作者: 陈晓龙    时间: 2020-3-10 23:18
张兴康 发表于 2016-4-8 20:16
嗯哼

这种就不要回了嘛!
作者: 张兴康    时间: 2020-3-11 13:47
陈晓龙 发表于 2016-4-10 23:18
这种就不要回了嘛!






欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://plat.delit.cn/) Powered by Discuz! X3.2