利用sql_trace提高自學能力

sunwgneuqsoft發表於2007-12-14

我們都知道SQL_TRACE是一個SQL最佳化的工具,其實它也是一個可以幫助我們提高ORACLE水平的自學的好工具。

10G中出現了回收站(RECYCLEBIN)的概念,這樣我們DROP後的也可以被恢復回來,例如:

[@more@]

SQL> create table test01

2 (id varchar2(10));

Table created

SQL> insert into test01 values('001');

1 row inserted

SQL> commit;

Commit complete

SQL> drop table test01;

Table dropped

SQL> flashback table test01 to before drop;

Done

SQL> select * from test01;

ID

----------

001

透過回收站就可以避免以前版本經常出現的誤刪除表的錯誤,提高了系統的可用性。那麼10G中的刪除的原理是什麼呢?SQL_TRACE就可以幫助我們找到答案。

SQL> alter session set sql_trace = true;

Session altered

SQL> drop table test01;

Table dropped

SQL> alter session set sql_trace = true;

Session altered

這樣就會產生一個TRACE檔案,找到那個TRACE並透過TKPROF格式化之後,可以找到這樣的SQL

ALTER TABLE "SUNWG"."TEST01" RENAME TO "BIN$0Oe8eyXVTb+lEosbol6pBg==$0"

可以發現其實10G中的DROP實際僅僅是一個RENAME操作(還會包括一些對資料字典表SEG$,OBJ$,TAB$等的操作),表TEST01上如果有索引的話,那麼還有一個索引RENAME的操作。可以想象一下,當我們進行FLASHBACK TABLE的時候,也僅僅是一個RENAME的操作。

SQL_TRACE是一個很好用的工具,善加利用,會對提高ORACLE水平有很大的幫助。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8394333/viewspace-993594/,如需轉載,請註明出處,否則將追究法律責任。

相關文章