达梦:将sql通过shell脚本的方式放在后台执行
工作中为了解决服务器跨网络不稳定等因素,因此想要在服务器本地执行运行的sql,同时也能知道sql执行的情况,因此提供一个示例,其他类似需求可参考类似方式解决。
背景:按照表的粒度对表执行统计信息更新,并且能知道更新的进度及耗时。
1. 创建shell
vi /home/dmdba/stat.sh
#!/bin/sh
cd /home/dmdba/dmdbms/bin #进入数据库安装目录bin目录
./disql SYSDBA/密码:5236 <<EOFstart /home/dmdba/stat.sqlexit;EOF
2.将需要后台的sql写入stat.sql文件
cd /home/dmdba
vi stat.sql select sysdate(); #在语句的首位加上时间,就可以知道整个统计信息执行的耗时
dbms_stats.gather_table_statS('模式名','表名1',null,100,true,'FOR ALL COLUMNS SIZE AUTO');
dbms_stats.gather_table_statS('模式名','表名2',null,100,true,'FOR ALL COLUMNS SIZE AUTO');
dbms_stats.gather_table_statS('模式名','表名3',null,100,true,'FOR ALL COLUMNS SIZE AUTO');
dbms_stats.gather_table_statS('模式名','表名4',null,100,true,'FOR ALL COLUMNS SIZE AUTO');
dbms_stats.gather_table_statS('模式名','表名5',null,100,true,'FOR ALL COLUMNS SIZE AUTO');
dbms_stats.gather_table_statS('模式名','表名6',null,100,true,'FOR ALL COLUMNS SIZE AUTO');
select sysdate();
3.通过nohup命令后台执行并将执行日志写入stat.log中
cd /home/dmdba
nohup ./stat.sql > stat.log 2>&1 &
4.确定后台正常运行
通过查看stat.sh进程是否存在ps -ef|grep stat.sh或者查看日志是否打印。tail -100f stat.log
注意:需要注意各个路径的正确性,避免后台运行失败。