达梦数据库-报错-12-[-7184]:对象定义[XXX]被修改,版本检查失败

目录

一、环境信息

二、问题描述

三、问题原因

四、模拟实验

1、测试数据

2、测试存过

3、复现问题

4、解决方法一之动态SQL

(1)静态SQL改动态

(2)执行效果

5、解决方法二之调参

(1)查询参数

(2)参数介绍

(3)参数调整

(4)执行效果


一、环境信息

|------|--------------------------|
| 名称 | 值 |
| CPU | x86 |
| 操作系统 | KylinV10 |
| DM版本 | DM Database Server 64 V8 |

二、问题描述

-7184:对象定义XXX被修改,版本检查失败。

三、问题原因

达梦存过中的DML语句为静态执行时,会将存过中用到的表结构,执行计划等做一个快照,如果在执行过程中表定义发生变化,则提示此报错。

四、模拟实验

1、测试数据

sql 复制代码
DROP TABLE IF EXISTS SUN;

CREATE TABLE SUN(A INT)
PARTITION BY LIST (A) (
    PARTITION p_1   VALUES (1)
);

2、测试存过

sql 复制代码
CREATE OR REPLACE PROCEDURE DM_TEST(VAL INT)
AS 
    v_sql VARCHAR(4000);
BEGIN 
    v_sql := 'ALTER TABLE SUN ADD PARTITION p_'||VAL||' VALUES ('||VAL||')';
	execute immediate v_sql;
	
	INSERT INTO SUN SELECT 1 FROM DUAL CONNECT BY LEVEL <= 100;
    COMMIT;
EXCEPTION 
    WHEN OTHERS THEN 
        ROLLBACK;
        RAISE;
END;
/

存过实现:添加分区和枚举值。

3、复现问题

sql 复制代码
16:25:19 SYSDBA@LOCALHOST:5236 SQL> CALL DM_TEST(2);
CALL DM_TEST(2);
[-7184]:对象定义[SUN]被修改,版本检查失败
-7184: DM_TEST line 13 .
已用时间: 15.992(毫秒). 执行号:0.

4、解决方法一之动态SQL

(1)静态SQL改动态

sql 复制代码
CREATE OR REPLACE PROCEDURE DM_TEST_V1(VAL INT)
AS 
    v_sql VARCHAR(4000);
BEGIN 
    v_sql := 'ALTER TABLE SUN ADD PARTITION p_'||VAL||' VALUES ('||VAL||')';
	execute immediate v_sql;
	
    v_sql := 'INSERT INTO SUN SELECT 1 FROM DUAL CONNECT BY LEVEL <= 100';
	execute immediate v_sql;
    COMMIT;
EXCEPTION 
    WHEN OTHERS THEN 
        ROLLBACK;
        RAISE;
END;

为了后续实现效果,我新建了一个,将DML改成动态。

(2)执行效果

sql 复制代码
16:28:54 SYSDBA@LOCALHOST:5236 SQL> CALL DM_TEST_V1(4);
DMSQL 过程已成功完成
已用时间: 20.767(毫秒). 执行号:771.

可以正常执行。此方法为通用方法,适用于新老版本。

5、解决方法二之调参

(1)查询参数

sql 复制代码
16:29:05 SYSDBA@LOCALHOST:5236 SQL> SELECT * FROM V$DM_INI WHERE PARA_NAME = 'PL_SQL_STRIP';

PARA_NAME    PARA_VALUE MIN_VALUE MAX_VALUE DEFAULT_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION                                                                                                                           PARA_TYPE SYNC_FLAG SYNC_LEVEL PARA_MODULE
------------ ---------- --------- --------- ------------- ------- ---------- ---------- ------------------------------------------------------------------------------------------------------------------------------------- --------- --------- ---------- -----------
PL_SQL_STRIP 0          0         255       0             N       0          0          Combination value for strip SQL from, 0:No, 1:PL, 2:PROC&FUNC, 4:PKG&OBJ, 8:TRIG, 16:ORG_SQL, 32:MERGE INTO, 64:CURSOR, 128:TRACE SQL SESSION   ALL_SYNC  CAN_SYNC   database

已用时间: 11.040(毫秒). 执行号:772.

当前值为0,没有开启DML剥离共。

(2)参数介绍

(3)参数调整

sql 复制代码
SP_SET_PARA_VALUE(1,'PL_SQL_STRIP',15);

(4)执行效果

sql 复制代码
16:45:11 SYSDBA@LOCALHOST:5236 SQL> CALL DM_TEST(5);
DMSQL 过程已成功完成
已用时间: 28.759(毫秒). 执行号:774.

正常调用老存过。新版本才有的参数。

相关推荐
白帽攻防录8 小时前
SRC 挖洞:Roundcube 预认证 SQL 注入深度复盘,CVE-2026-48842 preg_replace 转义绕过怎么打穿邮件系统
网络·数据库·sql·网络安全·sql注入
左手の明天9 小时前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
扶风ff9 小时前
新品知识更新太快?用练题簿在线刷题,安排企业培训的小测与复盘
前端·学习·小程序
꯭自꯭闭꯭9 小时前
达梦SQL优化相关
linux·运维·数据库·sql
对空六课9 小时前
支持注意力分析的热力图工具有哪些?
前端·数据库·数据分析
ZhangJun959 小时前
在 32GB 内存电脑上本地搭建 Qwen3.6-35B-A3B 大模型踩坑实录
运维·人工智能·阿里云·ai·软件构建
南京码讯光电技术有限公司9 小时前
How to Design an Antenna System for an Industrial WiFi Module
数据库·人工智能
一条破秋裤9 小时前
Linux 共享内存通信:POSIX 共享内存与 mmap
linux·运维·服务器
贵州山魈羡民10 小时前
【玩转手机】通过 Podroid 上的 Alpine 部署 1Panel,把微型服务器装进口袋
运维·服务器
小白的码BUG之路10 小时前
Docker -- 构建nacos镜像
运维·docker·容器