簡單的 Oracle 腳本

字號:


    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;