oracle數據庫是一種大型數據庫系統,一般應用於商業,政府部門,它的功能很強大,能夠處理大批量的數據,在網絡方面也用的非常多。Oracle數據庫管理系統是一個以關系型和面向對象為中心管理數據的數據庫管理軟件系統,其在管理信息系統、企業數據處理、因特網及電子商務等領域有著非常廣泛的應用。 1.having 子句的用法 having 子句對 group by 子句所確定的行組進行控制,having 子句條件中只允許涉及常量,聚組函數或group by 子句中的列。 2.外部聯接"+"的用法 外部聯接"+"按其在"="的左邊或右邊分左聯接和右聯接。若不帶"+"運算符的表中的一個行不直接匹配於帶"+"預算符的表中的任何行,則前者的行與後者中的一個空行相匹配並被返回。若二者均不帶?+?,則二者中無法匹配的均被返回。利用外部聯接"+",可以替代效率十分低下的 not in 運算,大大提高運行速度。例如,下面這條命令執行起來很慢 select a.empno from emp a where a.empno not in (select empno from emp1 where job=?SALE?); 倘若利用外部聯接,改寫命令如下: select a.empno from emp a ,emp1 b where a.empno=b.empno(+) and b.empno is null and b.job=?SALE?; 可以發現,運行速度明顯提高。 3.刪除表內重復記錄的方法 可以利用這樣的命令來刪除表內重復記錄: delete from table_name a where rowid< (select max(rowid) from table_name where column1=a.column1 and column2=a.column2 and colum3=a.colum3 and …); 不過,當表比較大(例如50萬條以上)時,這個方法的效率之差令人無法忍受,需要另想辦法(可參看拙文《電信計費中長途重復話單的技術處理》,《計算機與通信》,1999-07)。 4.set transaction 命令的用法 在執行大事務時,有時Oracle會報出如下的錯誤: ORA-01555:snapshot too old (rollback segment too small) 這說明Oracle給此事務隨機分配的回滾段太小了,這時可以為它指定一個足夠大的回滾段,以確保這個事務的成功執行。例如 set transaction use rollback segment roll_abc; delete from table_name where … commit; 回滾段roll_abc被指定給這個delete事務,commit命令則在事務結束之後取消了回滾段的指定。 5.使用索引的注意事項 select,update,delete 語句中的子查詢應當有規律地查找少於20%的表行。如果一個語句查找的行數超過總行數的20%,它將不能通過使用索引獲得性能上的提高。 索引可能產生碎片,因為記錄從表中刪除時,相應也從表的索引中刪除。表釋放的空間可以再用,而索引釋放的空間卻不能再用。頻繁進行刪除操作的被索引的表,應當階段性地重建索引,以避免在索引中造成空間碎片,影響性能。在許可的條件下,也可以階段性地truncate表,truncate命令刪除表中所有記錄,也刪除索引碎片。 6.數據庫重建應注意的問題 在利用import進行數據庫重建過程中,有些視圖可能會帶來問題,因為結構輸入的順序可能造成視圖的輸入先於它低層次表的輸入,這樣建立視圖就會失敗。要解決這一問題,可采取分兩步走的方法:首先輸入結構,然後輸入數據。命令舉例如下 (uesrname:jfcl,passWord:hfjf,host sting:ora1,數據文件:expdata.dmp): imp jfcl/hfjf@ora1 file=empdata.dmp rows=N imp jfcl/hfjf@ora1 file=empdata.dmp full=Y buffer=64000 commit=Y ignore=Y 第一條命令輸入所有數據庫結構,但無記錄。第二次輸入結構和數據,64000字節提交一次。ignore=Y選項保證第二次輸入既使對象存在的情況下也能成功。 以上六條小經驗是從平時的工作中總結出來的,拿出來與大家分享,希望能幫到大家。