使⽤shell脚本执⾏达梦数据库sql脚本⽂件
使⽤shell脚本执⾏达梦数据库sql脚本⽂件
最近遇到⼀个问题,需要给现场实施⼈员准备数据库执⾏脚本,但需要进⾏隔离操作,避免现场⼈员误操作修改了sql,导致出现其他问题。达梦数据库在⽹上的资料真是少之⼜少,但是发现⼤多数达梦语法描述为同oracle,嗯??……
⽅式⼀
当然是windows电脑安装达梦管理⼯具,直接把脚本贴进去执⾏,但避免不了出现误操作
⽅式⼆
使⽤shell脚本执⾏sql
1. 先到达梦数据库安装位置吧
[root@localhost ~]# ss -nlp |grep 5236
tcp LISTEN 0128[::]:5236 [::]:* users:(("dmserver",pid=103380,fd=4))
[root@localhost ~]# ps -ef|grep dmserver
root 8509366993017:56 pts/6 00:00:00 grep --color=auto dmserver
dmdba 1033801813:36 ? 00:23:18 /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/DAMENG_JW/dm.ini -noconsole 2. 直接在linux上执⾏shell命令执⾏sql脚本
2.1 # disql username/password:port
使⽤这个命令可以进⼊sql控制台
[root@localhost sql]# /home/dmdba/dmdbms/bin/disql cpuser/cpuser123:5236
服务器[LOCALHOST:5236]:处于普通打开状态
登录使⽤时间:5.524(ms)
disql V8
SQL>
进⼊SQL>后:
1. 直接输⼊sql语句,使⽤英⽂分号结尾,回车执⾏。
2. 使⽤“`sql⽂件路径”,可以执⾏sql脚本⽂件,注意前⾯有⼀个⼩撇(esc和tab中间的键)
3. 使⽤“start sql⽂件路径”,可以执⾏sql脚本⽂件。
2.2 # disql username/password:port `sql⽂件位置
使⽤这个命令可以执⾏sql脚本
[root@localhost sql]# /home/dmdba/dmdbms/bin/disql cpuser/cpuser123:5236 \`sql/test.sql
[root@localhost sql]#
但需注意
1. 这个脚本执⾏完sql会停留在sql执⾏⾏,如需执⾏完返回到shell命令⾏,则需要在sql⽂件结尾添加:exit; 。
2. 这个shell语句不能⽤start执⾏sql⽂件,只能使⽤“`”,并且前⾯需要添加转义字符“\”。
2.3 达梦sql脚本注意事项
⽬前发现-创建schema语句以及执⾏过程结尾,都需要添加“/”结束
例如执⾏以下语句,回车执⾏,⼀直在输出数字,直到输⼊“/”,再回车执⾏,才执⾏成功。
[root@localhost sql]# /home/dmdba/dmdbms/bin/disql cpuser/cpuser123:5236
服务器[LOCALHOST:5236]:处于普通打开状态
登录使⽤时间:6.121(ms)
disql V8
SQL> create schema test;
2
3 /
操作已执⾏
已⽤时间: 26.698(毫秒). 执⾏号:700604.
SQL>
sql脚本⽰例:
-- 创建schema
CREATE SCHEMA DB_ZFBA_MOBILE;
/
-
- 执⾏过程
begin
if exists(select1from DBA_TAB_COLUMNS where OWNER='DB_ZFBA_MOBILE'AND TABLE_NAME='T_ZJTQD')then EXECUTE immediate 'drop table DB_ZFBA_MOBILE.T_ZJTQD';
end if;
end;
/
create table DB_ZFBA_MOBILE.T_ZJTQD
(
"C_BH"char(32)NOT NULL,-- 主键
"C_BH_AJ" varchar2(32)NULL,-- 案件编号
……
"DT_ZHXGSJ"datetime NULL,-- 最后修改时间linux命令及shell编写
constraint PK_T_ZJTQD primary key( C_BH )
);
sql⽂件结尾添加exit;,保证多个sql⽂件执⾏不会中断
3. 编写shell脚本
注意:shell脚本⼀定在linux中编写,windows编写的有些语句执⾏不成功(⽬前原因未知)例如: a=a b=b c=$a$b echo $c 在windows下编写,linux中执⾏完会输出b
#!/bin/bash
# 请先配置数据库连接信息,再执⾏此脚本
DM_PATH=/home/dmdba/dmdbms #达梦数据库的安装位置
USERNAME=cpuser #达梦数据库连接⽤户名
PASSWORD=cpuser123 #达梦数据库连接密码
PORT=5236#达梦数据库连接端⼝号
# 下⾯的信息请不要随意修改
CONNECT_INFO=$USERNAME/$PASSWORD:$PORT
echo"连接信息:"$CONNECT_INFO
# STEP 1
echo"【开始执⾏】---- sql/02_创建数据库对象/00.CS_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO\`sql/02_创建数据库对象/00.CS_GSYS.sql >> DB_DM.log echo"【执⾏完成】---- sql/02_创建数据库对象/00.CS_GSYS.sql"
# STEP 2
echo"【开始执⾏】---- sql/02_创建数据库对象/01.CT_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_创建数据库对象/01.CT_GSYS.sql >> DB_DM.log echo"【执⾏完成】---- sql/02_创建数据库对象/01.CT_GSYS.sql"
# STEP 3
echo"【开始执⾏】---- sql/02_创建数据库对象/02.CC_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO\`sql/02_创建数据库对象/02.CC_GSYS.sql >> DB_DM.log echo"【执⾏完成】---- sql/02_创建数据库对象/02.CC_GSYS.sql"
# STEP 4
echo"【开始执⾏】---- sql/02_创建数据库对象/03.CI_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_创建数据库对象/03.CI_GSYS.sql >> DB_DM.log echo"【执⾏完成】---- sql/02_创建数据库对象/03.CI_GSYS.sql"
# STEP 5
echo"【开始执⾏】---- sql/03_初始化数据/02.I_T_Aty_CodeType_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO\`sql/03_初始化数据/02.I_T_Aty_CodeType_GSYS.sql >> DB_DM.log echo"【执⾏完成】---- sql/03_初始化数据/02.I_T_Aty_CodeType_GSYS.sql"
# STEP 6
echo"【开始执⾏】---- sql/03_初始化数据/02.I_T_Aty_Code_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/03_初始化数据/02.I_T_Aty_Code_GSYS.sql >> DB_DM.log echo"【执⾏完成】---- sql/03_初始化数据/02.I_T_Aty_Code_GSYS.sql"
# Complete
echo"【SQL全部执⾏完成】---- ⽇志请查看DB_DM.log"
执⾏完成后,通过shell控制台和DB_DM.log⽇志可以分析sql脚本是否执⾏成功。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论