当前位置:首页 » 编程语言 » shell脚本执行sql

shell脚本执行sql

发布时间: 2023-01-23 12:22:53

㈠ 达梦数据库shell脚本怎么获取查询语句结果集

方式一

当然是windows电脑安装达梦管理工具,直接把脚本贴进去执行,但避免不了出现误操作

在这里插入图片描述

方式二

使用shell脚本执行sql

1. 先找到达梦数据库安装位置吧

[root@localhost ~]# ss -nlp |grep 5236
tcp LISTEN 0 128 [::]:5236 [::]:* users:(("dmserver",pid=103380,fd=4))
[root@localhost ~]# ps -ef|grep dmserver
root 85093 66993 0 17:56 pts/6 00:00:00 grep --color=auto dmserver
dmdba 103380 1 8 13:36 ? 00:23:18 /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/DAMENG_JW/dm.ini -noconsole
1
2
3
4
5
1
2
3
4
5
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>后:
直接输入sql语句,使用英文分号结尾,回车执行。
使用“`sql文件路径”,可以执行sql脚本文件,注意前面有一个小撇(esc和tab中间的键)
使用“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
2
1
2
但需注意
这个脚本执行完sql会停留在sql执行行,如需执行完返回到shell命令行,则需要在sql文件结尾添加:exit; 。
这个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(select 1 from 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, -- 最后修改时间
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脚本是否执行成功。

㈡ shell脚本调用mysql命令行执行sql脚本没日志

系统崩溃。shell脚本调用mysql命令行执行sql脚本没日志是由于系统崩溃导致的,检查系统崩溃原因,清除缓存后重新打开脚本即可,shell是一种为shell编写的脚本程序。

㈢ 如何在shell中调SQLPLUS 执行SQL语句

sqlplus命令本身可以卸载shell脚本中,只要环境变量配置了相关的命令路径就可以。
然后编写sql脚本,然后利用sqlplus 用户名/密码@XXX @sql命令文件.sql就可以了。
如果害怕两个@有冲突,那么就设置一个参数=用户名/密码@XXX
然后调用参数,就可以了。
如果还有其他需求,那么就利用sqlplus的set参数,来达到某些目的。
sqlplus的参数,比如-s等,也会有一些用处,这个要自己把握了。

㈣ 在shell脚本执行sql语句为什么会报错

shell执行sql语句出错一般两种原因。
1、一种是语句本身错误,这个你就需要仔细检查语句了。
2、语句结尾需要用英文逗号结束,否则是执行不过去的。
综上所述:仔细检查自己所写的sql语句。

㈤ SHELL脚本如何处理sql执行结果

pid id
1 2
1 3
1 4
1 5
2 3
2 4
3 5


存放在6.txt中,可以用工具将数据转换为SQL,然后拷贝到执行SQL的工具中执行

cat6.txt|awk'NR>1{printf("insertintotable_name(pid,id)values("%s","%s");
",$1,$2);}'


输出:

insert into table_name (pid,id) values ("1","2") ;
insert into table_name (pid,id) values ("1","3") ;
insert into table_name (pid,id) values ("1","4") ;
insert into table_name (pid,id) values ("1","5") ;
insert into table_name (pid,id) values ("2","3") ;
insert into table_name (pid,id) values ("2","4") ;
insert into table_name (pid,id) values ("3","5") ;


如果需要插入在一个事务中完成,可以视数据库类型自己在SQL前后增加

begin

commit

这类语句。

㈥ 如何在mysql shell命令中执行sql命令行

本文介绍 MySQL 8.0 shell 子模块 Util 的两个导入特性 importTable/import_table(JS和python 版本的命名差异)、importJson/import_json的使用方法。


其中 import_table 是通过传统 MySQL 协议来通信,Import_json 是通过 X 插件协议来通信。MySQL 一直以来提供导入文件 SQL 命令 load data infile(单线程)以及对应的可执行文件 mysqlimport(多线程)。


比如我导入 100W 行示例数据到表 ytt.tl1,花了 24 秒。这个已经是 MySQL 默认导入来的最快的。分析那我们现在看下 mysqlimport 工具的升级版,mysqlshell 的 util 工具集。


使用这两个工具之前,必须得临时开启 local_infile 选项。1. import_table建立 3306 端口的新连接我这里切换为 python 模式清空掉示例表 Ytt.tl1import_table 有两个参数,第一个参数定义导入文件的路径,第二个定义相关选项,比如导入的格式,并发的数量等。定义文件路径(参数1)定义选项(参数2)执行导入:只花了不到 17 秒,比传统 mysqlimport 快了不少。


我们上面指定了显式指定了字段分隔符,那有没有已经定义好的组合格式呢? 答案是有的,选项 dialect 可以指定以下格式:csv,tsv,json,csv-unix那么上面的导入,我们可以更简单,改下变量 y_options1 的定义导入时间差不多。这里要说明下,dialect 选项的优先级比较低,比如添加了'linesTerminatedBy':' ', 则覆盖他自己的' '。


选项 diaelect 还有一个可选值为 json,可以直接把 json 结果导入到文档表里。比如我新建一张表 tl1_json重新定义文件以及导入选项。导入 JSON 数据速度也还可以,不到 24 秒。那导入 json 数据,就必须得提到以 X 插件协议通信的工具 import_json了。2. imort_json我们切换到 mysqlx 端口import_json 参数和 Import_table 参数类似,这里我改下选项我在手册上没有看到多线程的选项,所以单线程跑 35 秒慢了些。查看刚刚导入的数据import_json 不仅仅可以导入 Json 数据,更重要的是可以在 BSON 和 JSON 之间平滑的转换,有兴趣的同学可以去 TRY 下。


㈦ shell脚本执行sql传出结果

shell脚本执行sql需要输出结果,可以在shell脚本中写入语句,执行完成sql语句后,结果定向输入到一个txt文本文件中,再把txt文本文件存放在固定的文件夹中即可。

㈧ 达梦数据库怎么写shell脚本,怎么通过shell脚本调用sql脚本

通过shell脚本调用sql脚本:
1、shell脚本调用sql脚本
#首先编辑sql文件
oracle@SZDB:~> more dept.sql
connect scott/tiger
spool /tmp/dept.lst
set linesize 100 pagesize 80
select * from dept;
spool off;
exit;

#编辑shell脚本文件,在shell脚本内调用sql脚本
oracle@SZDB:~> more get_dept.sh
#!/bin/bash

# set environment variable

if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

export ORACLE_SID=CNMMBO
sqlplus -S /nolog @/users/oracle/dept.sql #注意此处执行sql脚本的方法 -S 表示以静默方式执行
exit

#授予脚本执行权限
oracle@SZDB:~> chmod 775 get_dept.sh

-->执行shell脚本
oracle@SZDB:~> ./get_dept.sh

DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

2、shell脚本调用rman脚本
#首先编辑RMAN脚本
oracle@SZDB:~> more rman.rcv
RUN {
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/users/oracle/bak/%d_%F';
ALLOCATE CHANNEL CH1 TYPE DISK MAXPIECESIZE=4G;
ALLOCATE CHANNEL CH2 TYPE DISK MAXPIECESIZE=4G;
SET LIMIT CHANNEL CH1 READRATE=10240;
SET LIMIT CHANNEL CH1 KBYTES=4096000;
SET LIMIT CHANNEL CH2 READRATE=10240;
SET LIMIT CHANNEL CH2 KBYTES=4096000;
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
BACKUP
DATABASE FORMAT '/users/oracle/bak/%d_FULL__%U';
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP ARCHIVELOG ALL FORMAT '/users/oracle/bak/%d_LF_%U' DELETE INPUT;
DELETE NOPROMPT OBSOLETE;
RELEASE CHANNEL CH1;
RELEASE CHANNEL CH2;
}

#编辑shell脚本文件,在shell脚本内调用rman脚本
oracle@SZDB:~> more rman_bak.sh
#!/bin/bash

# set environment variable

if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
export ORACLE_SID=CNMMBO
$ORACLE_HOME/bin/rman target / cmdfile=/users/oracle/rman.rcv log=/users/oracle/bak/rman.log
exit

#授予脚本执行权限
oracle@SZDB:~> chmod 775 rman_bak.sh
#执行shell脚本

热点内容
学校安防存储系统 发布:2025-07-19 21:20:49 浏览:281
linux红帽下载 发布:2025-07-19 21:16:00 浏览:538
人员怎么配置 发布:2025-07-19 21:10:10 浏览:206
明日之后如何扫码登服务器 发布:2025-07-19 20:36:26 浏览:242
ftp搜索引擎工作原理 发布:2025-07-19 20:31:25 浏览:371
景物视频脚本 发布:2025-07-19 20:30:33 浏览:181
hadoop查看文件夹 发布:2025-07-19 20:19:12 浏览:22
安卓手机的旁白在哪里 发布:2025-07-19 20:09:40 浏览:741
身份证注册借书卡的密码是什么 发布:2025-07-19 19:44:39 浏览:76
玩梦幻西游哪个配置好 发布:2025-07-19 19:44:37 浏览:753