转shell不能执行su 后的脚本 in oracle and dameng
##感谢haoxiaoyu
https://www.cnblogs.com/haoxiaoyu/p/4302663.html
shell不能执行su 后的脚本
[root@HZ-ITF-01 cron.d]# vi /data/itf/app/oracle/sync/test.sh #!/bin/bash set -x su - oracle sqlplus /nolog <<EOF conn hxy/hxy create table test1 as select * from dba_tables; exit EOF
在root用户下执行sh /data/itf/app/oracle/sync/test.sh后,停止在oracle用户的交互界面不在往下执行 ,需要手动输入exit才能继续,但是在脚本中加入exit也不好使
#!/bin/bash #set -x
su - oracle -c sqlplus /nolog <<EOF conn hxy/hxy create table test1 as select * from dba_tables; exit EOF
脚本顺利执行
#!/bin/bash set -x
su - oracle <<! sqlplus /nolog <<EOF conn hxy/hxy create table test1 as select * from dba_tables; exit EOF
!
也可以顺利执行
shell不能执行su 后的脚本
[root@HZ-ITF-01 cron.d]# vi /data/itf/app/oracle/sync/test.sh #!/bin/bash set -x su - oracle sqlplus /nolog <<EOF conn hxy/hxy create table test1 as select * from dba_tables; exit EOF
在root用户下执行sh /data/itf/app/oracle/sync/test.sh后,停止在oracle用户的交互界面不在往下执行 ,需要手动输入exit才能继续,但是在脚本中加入exit也不好使
#!/bin/bash #set -x
su - oracle -c sqlplus /nolog <<EOF conn hxy/hxy create table test1 as select * from dba_tables; exit EOF
脚本顺利执行
#!/bin/bash set -x
su - oracle <<! sqlplus /nolog <<EOF conn hxy/hxy create table test1 as select * from dba_tables; exit EOF
!
也可以顺利执行
达梦数据库-disql之SQL脚本使用
达梦disql调用sql语句
达梦数据库提供disql工具,我们可以通过disql工具使用命令行方式来查询SQL并将执行结果保留在指定文件中。对于达梦数据库内置的系统视图可以在达梦管理员手册的附录二
1、使用disql执行sql脚本
配置disql全局登录
vi ~/.bash_profile#编辑dmdba用户的环境变量
#添加如下内容
export DM_HOME="/home/dmdba/dmdbms"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
export PATH=$PATH:$DM_HOME/bin
1
2
3
4
5
编辑一个sql文件,用于记录登录信息和需要执行的sql语句
vim dmtest.sql
#添加如下内容
conn TEST/123456789@LOCALHOST:5236
select * from v$instance;
exit;
1
2
3
4
5
使用disql的相关命令就可以完成对指定sql的查询,
disql /nolog \`dmtest.sql
1
2、调用disql
使用disql调用sql脚本可以完成不输入sql的情况下对指定sql进行查询,那么否有更加便捷的方法让每次的查询结果都保存在指定的文件中呢?
先写一个shell脚本,通过脚本调用disql
vim dmtest.sh
#添加以下内容
#/bin/bash
disql /nolog \`dmtest.sql
1
2
3
4
目前disql的执行都是前台显示的,让它输入到指定文件中
vim dmtest.sh
#添加以下内容
#/bin/bash
dmdate=$(date "+%Y%m%d%H%M%S")
disql /nolog \`dmtest.sql >dmtest_${dmdate}.log
#如果需要前台显示,请增加以下内容
cat dmtst_${dmdate}.log
1
2
3
4
5
6
7
这样我们就完成后台执行sql脚本并将执行结果写到指定文件中
3、更加优雅的使用方式
选择更加优雅的方式调用disql,并增加具体的中文解释。将查询sql的结果赋值给变量,这样就可以增加个性化的定制
#! /bin/bash
#设置dmdbms/bin全局路径
export PATH=$PATH:/home/dmdba/dmdbms/bin
export LD_LIBRARY_PATH=/home/dmdba/dmdbms/bin:$LD_LIBRARY_PATH
#设置用户名和密码、端口
DB_USER=SYSDBA
DB_PASS=SYSDBA
DB_PORT=5248
dt=`date +"%Y_%m_%d_%H_%M"`
v_date=$(date)
echo 执行时间:$v_date >dmtest_${dmdate}.log
db_instance_name=$(disql -s ${DB_USER}/\"${DB_PASS}\"@LOCALHOST:${DB_PORT} <<"EOF"
SET ECHO OFF;
SET FEED OFF;
SET HEA OFF;
SET LINESHOW OFF;
SET NEWP 0;
SET PAGES 0;
SET TIMING OFF;
select INSTANCE_NAME from v$instance;
exit
EOF
)
echo 数据库实例名:$db_instance_name >dmtest_${dmdate}.log
cat dmtest_${dmdate}.log
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
运行结果,获取数据的实例名
disql的环境变量详细说明见达梦disql手册。
更多资讯请上达梦技术社区了解: https://eco.dameng.com
————————————————
版权声明:本文为CSDN博主「气可鼓不可泄」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33965675/article/details/118294209
##达梦如何开启AWR 报告
达梦数据库的AWR功能默认是关闭的,如果要使用AWR功能,需要相关配置来开启该功能
1 、检查数据库DBMS_WORKLOAD_REPOSITORY系统包的启用状态(0:未启用;1:已启用)以及awr快照信息和表空间信息
select sf_check_awr_sys;
select * from sys.wrm$_snapshot;
select tablespace_name from dba_tablespaces;
2 、创建数据库DBMS_WORKLOAD_REPOSITORY系统包,如果已创建,则可省略。
SP_INIT_AWR_SYS(1);
select sf_check_awr_sys;
select tablespace_name from dba_tablespaces;
select * from sys.wrm$_snapshot;
注意:SP_INIT_AWR_SYS(1)为创建DBMS_WORKLOAD_REPOSITORY,SP_INIT_AWR_SYS(0)则为关闭。达梦数据库在创建DBMS_WORKLOAD_REPOSITORY包时,默认会创建一个名为SYSAUX的表空间,对应的数据文件为SYSAWR.DBF,用来存放该包生成的快照数据。同样,该包被删除时,SYSAUX表空间及数据文件也响应的会删除。达梦MPP环境不支持该包。
3 、开启AWR功能
DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL(10);
(只能用10,不能用30分钟)
注意:达梦数据库开启AWR功能,调用DBMS_WORKLOAD_REPOSITORY.AWR_SET_INTERVAL过程设置快照间隔时间即可,快照间隔时间的有效范围为【10,525600】,默认为60,单位为分钟。关闭快照间隔值设定0即可。
4 、创建awr报告(可以手动创建,也可以等待,数据库会按照间隔时间自动创建)
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
SELECT * FROM SYS.WRM$_SNAPSHOT;
可以看到,快照已经生成了。
5 、生成awr报告,快照范围1-2,格式html
SELECT * FROM TABLE (DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(1,2));
或者
SYS.AWR_REPORT_HTML(1,2,‘/home/dmdba/’,‘AWR1_2.HTML’);
如果需要这个报错 [-6108]:String truncated,将html 改成text;
SET ECHO OFF;
SET FEED OFF;
SET HEA OFF;
SET LINESHOW OFF;
SET NEWP 0;
SET PAGES 0;
SET TIMING OFF;
Spool awr.txt
SELECT * FROM TABLE (DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(99,100));
Spool OFF
或者
SET ECHO OFF;
SET FEED OFF;
SET HEA OFF;
SET LINESHOW OFF;
SET NEWP 0;
SET PAGES 0;
SET TIMING OFF;
Spool awr.txt
SYS.AWR_REPORT_TEXT(1,2,‘/home/dmdba/’,‘AWR1_2.TEXT’);
Spool OFF
注意:达梦数据库的awr报告需要复制到文本文件中,保存成 html 格式即可查看。
6 、打开生成的awr报告
将/home/dmdba/AWR1_2.HTML文件下载到本地,用浏览器打开
1是性能影响;
2是稳定性上的,最近有项目上因为awr的影响导致实例夯住的情况;
3是awr能查看的信息也很有限,作用不大;所有不建议开启