达梦数据库disql常见问题一: 执行含有&符号数据的插入(insert into)命令

一、前言:

从注册CSDN账号到现在为止,遇到问题一直都是参考各位大神的文章,解决了很多问题,今天我也来分享自己的第一篇文章。

二、问题描述:

用shell脚本执行disql,并使用 如下语句执行初始化数据库脚本,建表空间,用户以及建表都没有问题,唯独在insert插入数据的时候,数据进不去,而且会造成表锁。

start xxx.sql

如果将建库建表及插入数据sql脚本,CV放到dbeaver内执行就没有问题,让我深度怀疑我的shell自动化脚本有问题

1.解决方法:

在经过一些列的排查后,发现用disql登陆达梦数据库,用start命令执行sql脚本,若脚本内插入的数据带 & 字符,例:&A ,会将A当成变量,一直等待输入变量A的值,所以在脚本中是无法批量执行插入语句的,若insert语句没有执行完,再执行另外的插入语句,会造成表锁问题

方法一
sql 命令行中执行 set define off; 关闭替代标记功能后,重新插入数据成功。

方法二
通过使用转义符取消掉 & 符号的特殊含义,具体如下:全文替换:& 替换为'||'&'||',然后再导入就可以了。

2.表锁释放命令

        1).查询对应库所有的表锁数据

select * from v$sessions where trx_id in (select trx_id from V$LOCK ) and user_name like '%库名%';

        2).找到对应的SESS_ID,进行替换

sp_close_session(SESS_ID);

三、最后

第一次写分享心得,有很多不足之处,望大家多多包涵

你可能感兴趣的:(自动化,运维,数据库,大数据,database)