linux shell执行sql

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux shell执行sql相关的知识,希望对你有一定的参考价值。

linux环境,oracle数据库。
目的:统计每条语句执行的时间。
1,现在所有的sql(10条)语句写到一个test.sql文件中。(如果需要分成10个文件也可以)
2,shell中统计时间的语句已经写好。
3,现在需要在时间语句中写一个命令。让这个命令可以直接调用test.sql去oracle数据库查询,并且输出日志和时间。

语句如下
#! /bin/sh
echo "Start time: `date +'%F %T.%N'`"
start_time=`date +%s.%N`
# 下面写具体的加载语句

#计算加载用的时间
stop_time=`date +%s.%N`
echo "Stop time: `date +'%F %T.%N'`"
my_time=$(awk 'BEGINprint '$stop_time' - '$start_time'')
echo "Total time: $my_time s"
。请问,该如何写?

1.shell中执行sql
export ORACLE_SID=ORCL
sqlplus -S /nolog @/home/oracle/test.sql #注意此处执行sql脚本的方法 -S 表示以静默方式执行
exit
2.test.sql中要加入连接
conn scott/tiger@orcl
set time on
.......
exit;
参考技术A man time

直接time xxxx.bash不好嘛?

Linux—编写shell脚本操作数据库执行sql

修改数据库数据

??在升级应用时,我们常常会遇到升级数据库的问题,这就涉及到sql脚本的编写。
??一般我们会通过写sql脚本,然后将xxx.sql脚本放到数据库中进行source xxx.sql执行。本篇文章,我们可以通过写shell脚本来执行数据库操作。

配置文件

创建 test_sql.properties 作为shell脚本的外部配置参数修改:

[andya@liunx01 sql_sh]$ vim test_sql.properties
# set parameters start

# 1 db name
dbName="db01"


# 2 the valueof net  speeds and requests 
netMaxSpeeds=500
netRequests="test.t1"


# 3 database info 
## mysql address
MYSQL_ADDRESS="10.127.0.1" 
## database name
MYSQL_DATABASE_NAME="db_test" 
## 5.3 bdoc connect mysql user name
MYSQL_USER="user01" 
## 5.4 bdoc connect mysql user password
MYSQL_PASSWD="123456" 
## 5.5  mysql engine
DATABASE_ENGINE=mysql

shell脚本

创建shell脚本test_sql.sh

[andya@liunx01 sql_sh]$ vim test_sql.sh
#!/bin/bash
starttime=$(date +%Y-%m-%d %H:%M:%S)
echo "【Start to execute the script】, start time is: " $starttime   >> test_sql_sh.log

# 1 read parameters
# ===================================================================
echo "------ test_sql.properties start------" >> test_sql_sh.log

source ./test_sql.properties
echo "Parameters: cat test_sql.properties" >> test_sql_sh.log

while read line
do
 echo $line >> test_sql_sh.log ;
done < test_sql.properties

echo "------ test_sql.properties end------" >> test_sql_sh.log
# =================================================================

# 2 update database
# ========================
testSql="
SET @dbId=(SELECT id FROM ${MYSQL_DATABASE_NAME}.`test_tb01` WHERE `NAME` = "${dbName}");
INSERT INTO ${MYSQL_DATABASE_NAME}.`test_tb02` (`NAME`, `DB_ID` ,`MAX_SPEEDS`, `NET_REQUESTS`) VALUES ('${dbName}', @dbId, '${netMaxSpeeds}', '${netRequests}');
"

echo -e "
Sql: add hbase sql is: "${testSql} >> test_sql_sh.log

id=$(${DATABASE_ENGINE} -h${MYSQL_ADDRESS} -u${MYSQL_USER} -p${MYSQL_PASSWD} -D ${MYSQL_DATABASE_NAME} -e "${testSql}")
echo "Sql: Modify db data successfully, and insert db id is: "${id} >> test_sql_sh.log

endtime=`date +"%Y-%m-%d %H:%M:%S"`
echo "【Execute the script end】, end time is: " ${endtime} >> test_sql_sh.log
echo -e "
" >> test_sql_sh.log

exit 0

脚本执行

./test_sql.sh
并且可以查看到输出日志test_sql_sh.log

以上是关于linux shell执行sql的主要内容,如果未能解决你的问题,请参考以下文章

Linux—编写shell脚本操作数据库执行sql

linux shell执行sql

shell sql 顺序执行命令

从Linux shell执行sql文件

linux 定时执行shell脚本 定时任务

Linux下执行SQL文件