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,顯示很多并行進(jìn)程在rollback,根據(jù)以往的工程經(jīng)驗(yàn):
于是改為
SQL>alter system set fast_start_parallel_rollback=false scope=both;
之后,再次運(yùn)行
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
使用如下腳本查看回滾完畢的預(yù)計(jì)時間(以天為單位):
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小時。即:預(yù)計(jì)5.04小時后回滾完畢。
另外注意:在其他環(huán)境使用時,請注意替換KTUXEUSN=13和KTUXESLT=5
您可能感興趣的文章:- ORACLE數(shù)據(jù)庫事務(wù)隔離級別介紹
- oracle 合并查詢 事務(wù) sql函數(shù)小知識學(xué)習(xí)
- MSSQL與Oracle數(shù)據(jù)庫事務(wù)隔離級別與鎖機(jī)制對比
- Java與Oracle實(shí)現(xiàn)事務(wù)(JDBC事務(wù))實(shí)例詳解
- ORACLE中如何找到未提交事務(wù)的SQL語句詳解