我们都知道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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8394333/viewspace-993594/