前兩天看文檔,提到了SERIALIZABLE隔離不支援延遲段建立和INTERVAL分區的功能,個人認為是由於這兩種方式都是在DML中遞迴產生DDL的操作,因此在串列隔離時可能會導致問題。不過驗證這個觀點的時候,竟然發現現象與文檔描述不符。文檔上的描述為:Serializable transactions do not work with deferred segment creation or interval partitioning. Trying to insert data into
在ITPUB上看到一個FORALL執行UPDATE的文章,覺得有點意思,簡單記錄一下。以前研究過FORALL中的INSERT語句,發現語句通過綁定數組的方式,實現了大量繫結,一次啟動並執行方式,從而提高了執行的效率。但是對於UPDATE語句而言,Oracle的實現和INSERT是不同的:SQL> CREATE TABLE T AS SELECT ROWNUM ID FROM TAB;表已建立。SQL> SELECT * FROM T; ID----------
PARALLEL_MAX_SEVERS參數設定並存執行可用的最大進程數量,該參數的預設值如下得出:1.當PGA_AGGREGATE_TARGET >0時PARALLEL_MAX_SERVERS= (CPU_COUNT x PARALLEL_THREADS_PER_CPU x 10)2.當PARALLEL_MAX_SERVERS未設定PARALLEL_MAX_SERVERS=(CPU_COUNT x PARALLEL_THREADS_PER_CPU x
dcba上周有了一個新的發現,在Oracle10g中,當重建一個預存程序時,Oracle的行為和以前有所不同。在Oracle9i中,即使一個完全相同的過程的重建,Oracle也需要重新編譯過程,這個可以從LAST_DDL_TIME看出:[oracle@jumper oracle]$ sqlplus eygle/eygleSQL*Plus: Release 9.2.0.4.0 - Production on Sat Mar 31 17:52:55 2007Copyright (c) 1982, 2
alter database open resetlogs 這個命令我想大家都很熟悉了,那有沒有想過這個resetlogs選項為什麼要用?什麼時候用?它的原理機制是什嗎?他都起哪些作用?我們都知道資料在啟動時候是要做一致性檢查的,oracle在open階段要做兩次檢查(1)檢查資料檔案頭的檢查點計數(checkpoint cnt)是否和控制檔案的檢查點計數(checkpoint cnt)一致。目的是確認資料檔案是否來自同一版本,而不是從備份 中恢複的。如果這一步檢查通過,就進行第二步檢查。(2)
由於B*Tree索引不儲存Null值,所以在索引欄位允許為空白的情況下,某些Oracle查詢不會使用索引.很多時候,我們看似可以使用全索引掃描(Full Index Scan)的情況,可能Oracle就會因為Null值的存在而放棄索引.在此情況下即使使用Hints,Oracle也不會使用索引,其根本原因就是因為Null值的存在.我們看以下測試.在username欄位為Not Null時,Index
雖然索引並不總會快於全表掃描,但是很多時候我們希望Oracle使用索引來執行某些SQL,這時候我們可以通過index hints來強制SQL使用index.Index Hints的格式如下:/*+ INDEX ( table [index [index]...] ) */我們簡單看一下這個提示的用法(範例為Oracle10g資料庫):SQL> create table t as select username,password from dba_users;Table