大家應該都有等女朋友的經歷吧。想想下面兩種情況哪種會更讓你著急,一是知道她20分鐘後肯定到,二是不確定到底她會什麼時候來(可能5分鐘,也可能50分鐘)。我想對大部分人來說第二種會更讓人發狂。
在oracle的使用過程中,大家也一定會有下面的經歷,先前執行了乙個錯誤的大規模操作,幸好沒有提交,現在需要做的回滾。等發出了rollback的命令後,迎接我們的是不可預知的等待,我們不知道到底現在回滾進行到了什麼程度,大概還要需要多少才可能完成(這個更加值得關心)。也有很多人,經不這樣的漫漫的折磨,把視窗關閉,進而導致更加嚴重的等待。
在10g之前,衡量回滾的過程可以通過查詢v$transaction中的used_urec欄位。這個字段表示特定使用使用回滾條目的數量,在insert等dml中對於回滾條目的需要一直在增加,當回滾的時候也是應該undo條目並釋放undo條目的過程。所以在回滾的過程中這個欄位的值代表著undo的程序。
sql> create table sunwg as select *from dba_objects;表已建立。
sql> insert into sunwg select * from sunwg;
已建立50315行。
sql> /
已建立100630行。
sql> /
已建立201260行。
sql> /
已建立402520行。
sql> /
已建立805040行。
sql> commit;
提交完成。
sql> select count(*)from sunwg;
count(*)
----------
1610080
這樣我們就建立了乙個有161w的乙個測試表。現在我們進行delete操作,看一下v$transaction中的used_urec的變化。
sql> delete from sunwg;
我們查詢v$transaction可以看到used_urec的數值一直在增長,直到delete完成為止。接下來我們rollback看看。
sql> rollback;
現在在查詢v$transaction可以看到used_urec的數值一直在減少,直到回滾完後,used_urec變成0。
通過v$transaction可以了解整個回滾的過程,但是我們關係的回滾剩餘時間的資訊卻很難從v$transaction中得到。這樣檢視v$session_longops就派上用場了。v$session_longops會記錄系統中長時間執行的session資訊,sofar 和totalwork 提供操作的進展報告,欄位time_remaining則表示該操作的剩餘時間。在10g以前,回滾操作的系統是不會在v$session_longops中體現的,而在10g中則增加了transaction rollback的記錄來表示回滾資訊。
還是前面的例子
sql> delete from sunwg;
sql> rollback;
這個時候我們就可以查詢v$session_longops的time_remaining欄位來獲得大概的剩餘時間,對於回滾操作也就是心中有數了。
merge into的用法及10g新特性總結
merge into 的作用 將源資料 於實際的表,檢視,子查詢 更新或插入到指定的表中 必須實際存在 依賴於on條件,好處是避免了多個insert 和update操作。merge是乙個目標性明確的操作符,不允許在乙個merge 語句中對相同的行insert或update操作。這個語法僅需要一次全表...
9i和10g閃回技術
一 9i 1 查詢 scn system change number time對應關係 select to char sysdate,yyyy mm dd hh24 mi ss to char dbms flashback.get system change number as scn from d...
10g關閉歸檔 啟用閃回恢復區歸檔
一 關閉歸檔 1 啟動sql plus以管理身份登入oracle資料庫 sql connect as sysdba 2 關閉資料庫例項 sql shutdown immediate 3 備份資料庫 在對資料庫做出任何重要的改變之前,建議備份資料庫以免出現任何問題。4 啟動乙個新的例項並裝載資料庫,但...