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