Oracle用了很久,但是一般使用还是通过PL/SQL Developer下面执行.
以前用过相关的脚本是 awrrpt.sql 生成awr报告使用.
最近有这样一个想法,写一个SQL脚本放在用户目录下,系统出问题时由同事负责执行.等我有时间时去查看相关信息.所以尝试写SQL脚本.也可以写成定时任务去处理某些事情.
中间遇到的问题:
1 字符集的问题.Windows下默认GBK编码,在数据库服务器上可能会执行报错,很可能是字符集的原因.当时使用Eclipse把字符集改成UTF-8 解决这个问题.
2 关于注释.SQL语句里注释很重要,做一引起必要的说明,不然自己被自己搞昏了头.
SQL脚本:
--初始化参数 define user = "‘HLWL‘"; define operate = "‘zhouxianglh‘"; define log_name; --初始化设置 --显示输出 set echo on; --指定每行长度 set LINESIZE 999; --指定每页大小,pagesize=0,则不会显示表头 set pagesize 10000; --显示实际执行的SQl(包含参数执行时能过 old,new 的方式分别显示) set verify ON; --输出文本去除首尾空格 set trimspool on; --显示字段名称 set heading ON; --set autotrace on;对执行SQL进行分析 --开始写入文件 select ‘/home/oracle/zx_‘||lower(name)||‘_‘||&user||‘_‘||to_char(sysdate,‘yyyy-mm-dd-hh24-mi‘)||‘.sql‘ log_name from v$database; spool &logname; --开始执行SQL --查找当进程,找出导致系统当前性能问题的SQL select inst_id,sid,serial#,seq#,taddr,sql_id,sql_child_number child,username,machine,last_call_et call_et,module, (select object_name from dba_objects where a.row_wait_obj#=object_id) object_name,action,event from gv$session a where a.status = ‘ACTIVE‘ and a.username is not null order by last_call_et; --记录操作完成 select sysdate from dual; --关闭文件 spool off;
原文:http://my.oschina.net/zhouxiang/blog/407025