久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

ORACLE中怎么找到未提交事務的SQL語句

143次閱讀
沒有評論

共計 3621 個字符,預計需要花費 10 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章主要介紹了 ORACLE 中怎么找到未提交事務的 SQL 語句,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。

在 Oracle 數據庫中,我們能否找到未提交事務(uncommit transactin)的 SQL 語句或其他相關信息呢?關于這個問題,我們先來看看實驗測試吧。實踐出真知。

首先,我們在會話 1(SID=63) 中構造一個未提交的事務,如下所:

SQL  create table test
 2 as
 3 select * from dba_objects;
 
Table created.
SQL  select userenv(sid) from dual;
 
USERENV(SID)
--------------
 63
 
SQL  delete from test where object_id=12;
 
1 row deleted.
 
SQL

然后我們在會話 2(SID=70) 中,我們使用下面 SQL 查詢未提交的 SQL 語句。如下所示:

SQL  select userenv(sid) from dual;
 
USERENV(SID)
--------------
 70
 
SQL  
SQL  SET SERVEROUTPUT ON SIZE 99999;
SQL  EXECUTE PRINT_TABLE( SELECT SQL_TEXT FROM V$SQL S,V$TRANSACTION T WHERE S.LAST_ACTIVE_TIME=T.START_DATE 
SQL_TEXT : delete from test where object_id=12
-----------------
SQL_TEXT : select
grantee#,privilege#,nvl(col#,0),max(mod(nvl(option$,0),2))from objauth$ where
obj#=:1 group by grantee#,privilege#,nvl(col#,0) order by grantee#
-----------------
SQL_TEXT : SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS
IGNORE_WHERE_CLAUSE NO_PARALLEL(SAMPLESUB)
opt_param(parallel_execution_enabled ,  false) NO_PARALLEL_INDEX(SAMPLESUB)
NO_SQL_TUNE */ NVL(SUM(C1),0), NVL(SUM(C2),0) FROM (SELECT /*+
IGNORE_WHERE_CLAUSE NO_PARALLEL(TEST) FULL(TEST) NO_PARALLEL_INDEX(TEST)
*/ 1 AS C1, CASE WHEN  TEST . OBJECT_ID =12 THEN 1 ELSE 0 END AS C2 FROM  TEST 
SAMPLE BLOCK (6.134372 , 1) SEED (1)  TEST ) SAMPLESUB
-----------------
SQL_TEXT : select col#, grantee#,
privilege#,max(mod(nvl(option$,0),2)) from objauth$ where obj#=:1 and col# is
not null group by privilege#, col#, grantee# order by col#, grantee#
-----------------
SQL_TEXT : select
type#,blocks,extents,minexts,maxexts,extsize,extpct,user#,iniexts,NVL(lists,6553
5),NVL(groups,65535),cachehint,hwmincr,
NVL(spare1,0),NVL(scanhint,0),NVL(bitmapranges,0) from seg$ where ts#=:1 and
file#=:2 and block#=:3
-----------------
PL/SQL procedure successfully completed.

ORACLE 中怎么找到未提交事務的 SQL 語句

如上所示,這個 SQL 我們會查出很多不相關的 SQL 語句,接下來我們可以用下面的 SQL 查詢(改用 SQL Developer 展示,因為 SQL*Plus,不方便展示),如下所示,這個 SQL 倒不會查出不相關的 SQL。但是這個 SQL 能勝任任何場景嗎?答案是否定的。

SELECT S.SID
 ,S.SERIAL#
 ,S.USERNAME
 ,S.OSUSER 
 ,S.PROGRAM 
 ,S.EVENT
 ,TO_CHAR(S.LOGON_TIME, YYYY-MM-DD HH24:MI:SS) 
 ,TO_CHAR(T.START_DATE, YYYY-MM-DD HH24:MI:SS) 
 ,S.LAST_CALL_ET 
 ,S.BLOCKING_SESSION 
 ,S.STATUS
 ,( 
 SELECT Q.SQL_TEXT 
 FROM V$SQL Q 
 WHERE Q.LAST_ACTIVE_TIME=T.START_DATE 
 AND ROWNUM =1) AS SQL_TEXT 
FROM V$SESSION S, 
 V$TRANSACTION T 
WHERE S.SADDR = T.SES_ADDR;

ORACLE 中怎么找到未提交事務的 SQL 語句

我們知道,在 ORACLE 里第一次執行一條 SQL 語句后,該 SQL 語句會被硬解析,而且執行計劃和解析樹會被緩存到 Shared Pool 里。方便以后再次執行這條 SQL 語句時不需要再做硬解析。但是 Shared Pool 的大小也是有限制的,不可能無限制的緩存所有 SQL 的執行計劃,它使用 LRU 算法管理庫高速緩存區。所以有可能你要找的 SQL 語句已經不在 Shared Pool 里面了,它從 Shared Pool 被移除出去了。如下所示,我們使用 sys.dbms_shared_pool.purge 人為構造 SQL 被移除出 Shared Pool 的情況。如下所示:

SQL  col sql_text for a80;
SQL  select sql_text
 2 ,sql_id
 3 ,version_count
 4 ,executions 
 5 ,address
 6 ,hash_value
 7 from v$sqlarea where sql_text 
 8 like  delete from test% 
 
SQL_TEXT SQL_ID VERSION_COUNT EXECUTIONS ADDRESS HASH_VALUE
------------------------------------ ------------- ------------- ---------- ---------------- ----------
delete from test where object_id=12 5xaqyzz8p863u 1 1 0000000097FAE648 3511949434
 
SQL  exec sys.dbms_shared_pool.purge( 0000000097FAE648,3511949434 , C 
 
PL/SQL procedure successfully completed.
 
SQL

此時我們查詢到的 SQL 語句,是一個不相關的 SQL 或者其值為 Null。

ORACLE 中怎么找到未提交事務的 SQL 語句

接下來我們回滾 SQL 語句,然后繼續新的實驗測試,如下所示,在會話 1(SID=63) 里面執行了兩個 DML 操作語句,都未提交事務。

SQL  delete from test where object_id=12;
 
1 row deleted.
 
SQL  update test set object_name= kkk  where object_id=14;
 
1 row updated.
 
SQL

接下來,我們使用 SQL 語句去查找未提交的 SQL,發現只能捕獲最開始執行的 DELETE 語句,不能捕獲到后面執行的 UPDATE 語句。這個實驗也從側面印證了,我們不一定能準確的找出未提交事務的 SQL 語句。

ORACLE 中怎么找到未提交事務的 SQL 語句

所以結合上面實驗,我們基本上可以給出結論,我們不一定能準確找出未提交事務的 SQL 語句,這個要視情況或場景而定。存在這不確定性。

感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“ORACLE 中怎么找到未提交事務的 SQL 語句”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計3621字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 垫江县| 虎林市| 浦北县| 静海县| 都匀市| 华宁县| 庆安县| 诏安县| 丰城市| 高台县| 陇川县| 霍邱县| 石景山区| 辽宁省| 库伦旗| 肇源县| 南康市| 偏关县| 界首市| 昌宁县| 和硕县| 金山区| 丹寨县| 成都市| 腾冲县| 宾川县| 温泉县| 区。| 景泰县| 巨野县| 济阳县| 五常市| 伊春市| 临洮县| 曲靖市| 西畴县| 漳浦县| 化隆| 龙川县| 赣榆县| 宝兴县|