日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

get_locked_objects_rpt.sql

發布時間:2024/4/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 get_locked_objects_rpt.sql 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在metalink上看到一個腳本(get_locked_objects_rpt.sql),非常不錯,如下所示

/*----------------------------------------------------------------------------+ | MODULE: get_locked_objects_rpt.sql | | DESCRIPTION: | | Script to retrieve a list of locked objects from the database and identify | the object being locked, and its rowid, and the SQL being blocked. | | INFORMATION: | | BRM Performance Tools ... | | REVISION: | | $Revision: 1.4 $ | $Author: pin $ | $Date: 2013/09/16 13:15:22 $ +----------------------------------------------------------------------------*/set serveroutput on?size unlimitedset feedback off?DECLARE?? v_num_sessions INTEGER := 0;?? CURSOR cv ISSELECT dba_objects.object_name,?????? locks_t.row#,?????? locks_t.blocked_secs,?????? locks_t.blocker_text,?????? locks_t.blocked_text,?????? locks_t.blocked_sql_text? FROM (SELECT?/*+ NO_MERGE */?????????????? blocking_lock_session.username||'@'||blocking_lock_session.machine||'(SID='||blocking_lock_session.sid||') ['||?????????????? blocking_lock_session.program||'/PID='||blocking_lock_session.process||']'?as blocker_text,?????????????? blocked_lock_session.username||'@'||blocked_lock_session.machine|| '(SID='||blocked_lock_session.sid||') ['||?????????????? blocked_lock_session.program||'/PID='||blocked_lock_session.process||']'?as blocked_text,?????????????? blocked_lock_session.row_wait_obj#,?????????????? blocked_lock_session.row_wait_file#,?????????????? blocked_lock_session.row_wait_block#,?????????????? blocked_lock_session.row_wait_row#,?????????????? DBMS_ROWID.ROWID_CREATE (1,????????????????? blocked_lock_session.row_wait_obj#,????????????????? blocked_lock_session.row_wait_file#,????????????????? blocked_lock_session.row_wait_block#,????????????????? blocked_lock_session.row_wait_row#) row#,?????????????? blocked_lock_session.seconds_in_wait blocked_secs,?????????????? blocked_sql.sql_text blocked_sql_text????????? FROM v$lock blocking_lock,?????????????? v$session blocking_lock_session,?????????????? v$lock blocked_lock,?????????????? v$session blocked_lock_session,?????????????? v$sql blocked_sql???????? WHERE blocking_lock.block = 1?????????? AND blocking_lock.id1 = blocked_lock.id1?????????? AND blocking_lock.id2 = blocked_lock.id2?????????? AND blocked_lock.request > 0?????????? AND blocking_lock.sid = blocking_lock_session.sid?????? AND blocked_lock.sid = blocked_lock_session.sid?????????? AND blocked_lock_session.sql_id = blocked_sql.sql_id?????????? AND blocked_lock_session.sql_child_number = blocked_sql.child_number?????? ) locks_t,?????? dba_objects?WHERE locks_t.row_wait_obj# = dba_objects.object_id?? AND locks_t.blocked_secs > &1ORDER?BY locks_t.blocked_secs;?BEGIN?? FOR cv_rec IN cv LOOP????? dbms_output.put_line(???????? '========= $Revision: 1.4 $ ($Date: 2013/09/16 13:15:22 $) ===========');????? v_num_sessions := v_num_sessions + 1;????? dbms_output.put_line('Locked object : '||???????? cv_rec.object_name);????? dbms_output.put_line('Locked row#?? : '||???????? cv_rec.row#);????? dbms_output.put_line('Blocked for?? : '||???????? cv_rec.blocked_secs||' seconds');????? dbms_output.put_line('Blocker info. : '||???????? cv_rec.blocker_text);????? dbms_output.put_line('Blocked info. : '||???????? cv_rec.blocked_text);????? dbms_output.put_line('Blocked SQL?? : '||???????? cv_rec.blocked_sql_text);?? END LOOP;?? dbms_output.new_line;?? dbms_output.put_line('Found '||TO_CHAR(v_num_sessions)||????? ' blocked session(s).');END;/exit;

?

那么我們來測試一下,新建3個會話來測試驗證:

?

1: 在會話ID為11的窗口執行下面SQL語句

SQL> create?table test(id number, name varchar2(12));?Table created.?SQL> insert into test values(1001,'kerry');?1 row created.?SQL> commit;?Commit complete.?SQL> update test set name='jimmy'?where id=1001;?1 row updated.

?

2:在會話ID為192的窗口執行下面語句。

?SQL> update test set name='tina'?where id=1001;?1 row updated.

?

3: 在會話窗口3執行下面語句查看阻塞或鎖定對象情況,輸入查詢阻塞多少秒以上的SQL

[oracle@DB-Server ~]$ sqlplus / as sysdba?SQL*Plus: Release 11.2.0.1.0 Production on Fri Aug 19 16:14:25 2016?Copyright (c) 1982, 2009, Oracle.? All rights reserved.??Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and?Real Application Testing options?SQL> @get_locked_objects_rpt.sqlEnter value?for 1: 10old? 42:??? AND locks_t.blocked_secs > &1new? 42:??? AND locks_t.blocked_secs > 10========= $Revision: 1.4 $ ($Date: 2013/09/16 13:15:22 $) ===========Locked object : TESTLocked row#?? : AAASEkAAEAAAADUAAABlocked for?? : 34 secondsBlocker info. : TEST@DB-Server.localdomain(SID=11)[sqlplus@DB-Server.localdomain (TNS V1-V3)/PID=3971]Blocked info. : TEST@DB-Server.localdomain(SID=192)[sqlplus@DB-Server.localdomain (TNS V1-V3)/PID=4046]Blocked SQL?? : update test set name='tina'?where id=1001Found 1 blocked session(s).Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and?Real Application Testing options

?

參考資料:

Information To Collect When High Row-Lock Contention Is Seen In The BRM DB (文檔 ID 1356147.1)

總結

以上是生活随笔為你收集整理的get_locked_objects_rpt.sql的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。