为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。 【DM版本】: 【操作系统】: 【CPU】: 【问题描述】*: 使用GDB调试提示过程被加密 有啥排查的方法吗,可以看到报错的地方在做什么
看样子像是在函数参数传递或类型转换过程中出现的数据丢失的情况,看包头里的过程定义,也没啥特殊的类型啊,系统包都是加密了的,也看不到内容,只能靠猜了。
你要不先做个试验,排查一下问题范围,后面也方便达梦的工程师来分析原因
--用匿名块来模拟调用过程 DECLARE --根据包头能找到 AWR_GET_OPERATING_SYSTEM_STATISTICS_DATA 这个过程的参数定义,下面就模拟调用一下看看 --这里设置快照ID,根据你图里的内容,使用值 1 和 2 START_SNAP_ID INT := 1; END_SNAP_ID INT := 2; --初始化一个结果数组,这个类型就是个字符串数组 RES_TAB DBMS_WORKLOAD_REPOSITORY_DATA.AWRRPT_STR_DATA_TYPE := DBMS_WORKLOAD_REPOSITORY_DATA.AWRRPT_STR_DATA_TYPE(); --这个应该是返回数组内容的结构定义信息,应该是用于后续输出格式建立过程 N_ROWS INT; N_FLDS INT; BEGIN --先给结构数组预分配空间 RES_TAB.EXTEND(10000); --调用有问题的过程 DBMS_WORKLOAD_REPOSITORY_DATA.AWR_GET_OPERATING_SYSTEM_STATISTICS_DATA(START_SNAP_ID,END_SNAP_ID,RES_TAB,N_ROWS,N_FLDS); --输出结果看看是否正常 SELECT * FROM TABLE(RES_TAB) WHERE COLUMN_VALUE IS NOT NULL; END;
看样子像是在函数参数传递或类型转换过程中出现的数据丢失的情况,看包头里的过程定义,也没啥特殊的类型啊,系统包都是加密了的,也看不到内容,只能靠猜了。
你要不先做个试验,排查一下问题范围,后面也方便达梦的工程师来分析原因
--用匿名块来模拟调用过程 DECLARE --根据包头能找到 AWR_GET_OPERATING_SYSTEM_STATISTICS_DATA 这个过程的参数定义,下面就模拟调用一下看看 --这里设置快照ID,根据你图里的内容,使用值 1 和 2 START_SNAP_ID INT := 1; END_SNAP_ID INT := 2; --初始化一个结果数组,这个类型就是个字符串数组 RES_TAB DBMS_WORKLOAD_REPOSITORY_DATA.AWRRPT_STR_DATA_TYPE := DBMS_WORKLOAD_REPOSITORY_DATA.AWRRPT_STR_DATA_TYPE(); --这个应该是返回数组内容的结构定义信息,应该是用于后续输出格式建立过程 N_ROWS INT; N_FLDS INT; BEGIN --先给结构数组预分配空间 RES_TAB.EXTEND(10000); --调用有问题的过程 DBMS_WORKLOAD_REPOSITORY_DATA.AWR_GET_OPERATING_SYSTEM_STATISTICS_DATA(START_SNAP_ID,END_SNAP_ID,RES_TAB,N_ROWS,N_FLDS); --输出结果看看是否正常 SELECT * FROM TABLE(RES_TAB) WHERE COLUMN_VALUE IS NOT NULL; END;