shellsql脚本
jdbc和连接池对于你这个场景来说,都足够,既然用spring管理了,建议还是使用连接池,另外,spring自身没有实现连接池,一般都是对第三方连接池的包装,常见的有C3P0,dbcp以及最近比较流行的boneCP等,这几个配置都差不多太多
‘贰’ 达梦数据库怎么写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脚本
‘叁’ shell脚本中怎么写sql语句
mysql -uroot -pxxx dbname -e "select xxx from xxx;"
‘肆’ 如何在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语句问题
你没有理解输入重定向的概念。在你上面的代码中,mysql -uDDAP -p$2是包含在输入重定向范围内的,所以不会提示你输入密码的。
你的$1 和$2也没有定义,可以参考如下写法:
#!/bin/sh
read -p "please input root password" pwd
mysql -uroot -p$pwd << EOF
\. /usr/src/DDAP-1.CreateUser.SQL
\. /usr/src/DDAP-2.CreateDatabase.SQL
\. /usr/src/DDAP-3.CreateTable.SQL
\. /usr/src/DDAP-4.CreateProcereAndFunction.SQL
\. /usr/src/DDAP-5.CreateData.SQL
EOF
‘陆’ shell参数传递SQL脚本
你可以这么写,把目录下file_1,file_2,file_3 文件名保存在一个文本文件里,
这个文件叫file.txt,格式一行一个文件名。比如脚本叫test.sh
使用:./test.sh file.txt
这样就循环读取文本中每行的文件名并代入到变量filename
或者你也可以通过files=($(ls -l | grep ^- | awk '{print $8}'))
截取一个files数组然后,for filename in ${files[*]} 往for循环里套。
#!/bin/bash
while read filename
do
sqlplus -S g471725/g471725 <<EOF
define v_input_file=$filename
@sql.sql
exit
EOF
done < $1
‘柒’ 在shell脚本执行sql语句为什么会报错
sql语句要在数据库中执行才可以,所以要先连接数据库。
比如如果是oracle那么首先要sqlplus连接,但是因为sqlplus本身是一个交互的内容,所以要改为非交互的模式,这个需要一些参数。具体什么参数我忘了,不过确实需要参数才行。
而且shell中的sql脚本也不是直接写就可以。要写成块的状态,或者调用脚本的状态才可以的。
大概就是这些,如果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
这类语句。
‘玖’ shell脚本执行sql传出结果
shell脚本执行sql需要输出结果,可以在shell脚本中写入语句,执行完成sql语句后,结果定向输入到一个txt文本文件中,再把txt文本文件存放在固定的文件夹中即可。
‘拾’ LINUX下shell脚本如何执行 sql脚本 到DB2数据库
1、在gedit中编写.sh格式的文件,保存为a.sh。