[20181013]12cR2 無法執行的sql語句會記錄在alert.log.txt

lfree發表於2018-10-13

[20181013]12cR2 無法執行的sql語句會記錄在alert.log.txt

--//12C R2 支援無法執行的sql語句記錄在alert.log檔案中,預設執行100次.
--//首先無法執行的SQL語句語句一樣消耗共享池,增加出現SQL*Net break/reset to client相關等待時間.
--//以及sql語句的分析時間,對於特別頻繁的語句消耗更大.

--//當然以前可以使用10035事件跟蹤定位這些sql語句.
--//如果執行頻率高,可以在檢視v$active_session_history或者dba_hist_active_sess_history抓取到等待事件
--//SQL*Net break/reset to client.

--//注意知道sql_id無法透過檢視v$sql找到sql語句,只能透過x$kglob定位相關資訊.

--//連結 http://blog.itpub.net/267265/viewspace-2120884/=>[20160624]使用10035事件跟蹤無法執行的sql語句.txt
--//透過例子演示這個功能:

1.環境:

SCOTT@test01p> @ ver1
PORT_STRING                    VERSION        BANNER                                                                               CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0           12.2.0.1.0     Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production              0

2.測試:
--//寫一個指令碼b3.txt內容如下:
select sysdate from xxxxxxxxxxxxxx;
/
/
....--//包含99個斜線
/

@b3.txt
...

3.檢查alert.log檔案:

2018-10-13T21:13:30.345877+08:00
TEST01P(3):select sysdate from xxxxxxxxxxxxxx
TEST01P(3):Additional information: hd=000007FF133F03A0 phd=000007FF13610B68 flg=0x20 cisid=81 sid=81 ciuid=81 uid=81

4.補充測試:

SYS@test> select sys.dbms_sqltune_util0.sqltext_to_sqlid('select sysdate from xxxxxxxxxxxxxx'||chr(0)) c20 from dual;
C20
--------------------
bb98w6dj7wz8p

SYS@test> select * from v$sql where sql_id='bb98w6dj7wz8p';
no rows selected

SYS@test> @ sharepool/shp4 bb98w6dj7wz8p 0
TEXT           KGLHDADR         KGLHDPAR         C40                                        KGLHDLMD   KGLHDPMD   KGLHDIVC KGLOBHD0         KGLOBHD6           KGLOBHS0   KGLOBHS6   KGLOBT16   N0_6_16        N20   KGLNAHSH KGLOBT03        KGLOBT09
-------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
子游標控制程式碼地址 000007FF133F03A0 000007FF13610B68 select sysdate from xxxxxxxxxxxxxx                0          0        100 00               00                        0          0       3171      3171       3171 1652456725 bb98w6dj7wz8p          0
父遊標控制程式碼地址 000007FF13610B68 000007FF13610B68 select sysdate from xxxxxxxxxxxxxx                1          0        100 000007FF1321AA70 00                     4072          0          0      4072       4072 1652456725 bb98w6dj7wz8p      65535

--//KGLHDADR=000007FF13610B68 對應前面的phd=000007FF13610B68. 對應父遊標
--//KGLHDADR=000007FF133F03A0 對應前面的hd=000007FF133F03A0   對應子游標.

--//附上shp4.sql
column N0_6_16 format 99999999
SELECT DECODE (kglhdadr,
               kglhdpar, '父遊標控制程式碼地址',
               '子游標控制程式碼地址')
          text,
       kglhdadr,
       kglhdpar,
       substr(kglnaobj,1,40) c40,
       KGLHDLMD,
       KGLHDPMD,
       kglhdivc,
       kglobhd0,
       kglobhd6,
       kglobhs0,kglobhs6,kglobt16,
       kglobhs0+kglobhs6+kglobt16 N0_6_16,
       kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6+kglobt16 N20,
       kglnahsh,
       kglobt03 ,
       kglobt09  
  FROM x$kglob
 WHERE kglobt03 = '&1'  or kglhdpar='&1' or kglhdadr='&1' or KGLNAHSH= &2;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2216312/,如需轉載,請註明出處,否則將追究法律責任。

相關文章