程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 檢查Oracle中死事務的語句

檢查Oracle中死事務的語句

編輯:Oracle教程

檢查Oracle中死事務的語句


SQL> SELECT KTUXEUSN, KTUXESLT, KTUXESQN, /* Transaction ID */   
  2  KTUXESTA Status,    KTUXECFL Flags ,KTUXESIZ 
  3  FROM x$ktuxe
  4  WHERE ktuxesta!='INACTIVE';

  KTUXEUSN   KTUXESLT   KTUXESQN STATUS           FLAGS                      KTUXESIZ
---------- ---------- ---------- ---------------- ------------------------ ----------
        13          5      47447 ACTIVE           DEAD                        2819919
        39          0        502 ACTIVE           NONE                              1
        43         45        480 ACTIVE           NONE                              0
SQL> /


  KTUXEUSN   KTUXESLT   KTUXESQN STATUS           FLAGS                      KTUXESIZ
---------- ---------- ---------- ---------------- ------------------------ ----------
        13          5      47447 ACTIVE           DEAD                        2819919<----該值沒減小。
        39          0        502 ACTIVE           NONE                              1
        43         45        480 ACTIVE           NONE                              0

查詢v$px_session和v$fast_start_servers,顯示很多並行進程在rollback,根據以往的工程經驗:

於是改為

SQL>alter system set fast_start_parallel_rollback=false scope=both;

之後,再次運行

SQL> SELECT KTUXEUSN, KTUXESLT, KTUXESQN,/* Transaction ID */  
 2  KTUXESTA Status,    KTUXECFL Flags ,KTUXESIZ
 3  FROM x$ktuxe
 4  WHERE ktuxesta!='INACTIVE';
 KTUXEUSN   KTUXESLT   KTUXESQN STATUS           FLAGS                      KTUXESIZ
---------- ---------- -------------------------- ------------------------ ----------
       13          5      47447 ACTIVE           DEAD                        2033516
       35         29        502 ACTIVE           NONE                              1
 
SQL> /
 
 KTUXEUSN   KTUXESLT   KTUXESQN STATUS           FLAGS                      KTUXESIZ
---------- ---------- -------------------------- ------------------------ ----------
       13          5      47447 ACTIVE           DEAD                        2033433<---該值不斷變小。
       35         29        502 ACTIVE           NONE                              1

使用如下腳本查看回滾完畢的預計時間(以天為單位):

SQL> set serveroutput on
SQL> declare
 2   l_start number;
 3   l_end number;
 4   begin
 5   select ktuxesiz into l_startfrom x$ktuxe where KTUXEUSN=13 and KTUXESLT=5;
 6   dbms_lock.sleep(60);
 7   select ktuxesiz into l_endfrom x$ktuxe where KTUXEUSN=13 and KTUXESLT=5;
 8   dbms_output.put_line('time estDay:'|| round(l_end/(l_start -l_end)/60/24,2));
  9   end;
 10   /
time est Day:.21

24*0.21=5.04小時。即:預計5.04小時後回滾完畢。

另外注意:在其他環境使用時,請注意替換KTUXEUSN=13和KTUXESLT=5

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved