Oracle用了很久,但是一般使用還是通過PL/SQL Developer下面執(zhí)行.
以前用過相關的腳本是 awrrpt.sql 生成awr報告使用.
最近有這樣一個想法,寫一個SQL腳本放在用戶目錄下,系統(tǒng)出問題時由同事負責執(zhí)行.等我有時間時去查看相關信息.所以嘗試寫SQL腳本.也可以寫成定時任務去處理某些事情.
中間遇到的問題:
1 字符集的問題.Windows下默認GBK編碼,在數(shù)據(jù)庫服務器上可能會執(zhí)行報錯,很可能是字符集的原因.當時使用Eclipse把字符集改成UTF-8 解決這個問題.
2 關于注釋.SQL語句里注釋很重要,做一引起必要的說明,不然自己被自己搞昏了頭.
SQL腳本:
--初始化參數(shù)
define user = "'HLWL'";
define operate = "'zhouxianglh'";
define log_name;
--初始化設置
--顯示輸出
set echo on;
--指定每行長度
set LINESIZE 999;
--指定每頁大小,pagesize=0,則不會顯示表頭
set pagesize 10000;
--顯示實際執(zhí)行的SQl(包含參數(shù)執(zhí)行時能過 old,new 的方式分別顯示)
set verify ON;
--輸出文本去除首尾空格
set trimspool on;
--顯示字段名稱
set heading ON;
--set autotrace on;對執(zhí)行SQL進行分析
--開始寫入文件
select '/home/oracle/zx_'||lower(name)||'_'||&user||'_'||to_char(sysdate,'yyyy-mm-dd-hh24-mi')||'.sql' log_name from v$database;
spool &logname;
--開始執(zhí)行SQL
--查找當進程,找出導致系統(tǒng)當前性能問題的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;
更多信息請查看IT技術專欄