簡單的 Oracle 腳本

字號(hào):


    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;
    --指定每行長度
    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;對執(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;