都是正確的,但是都不具備普遍性。所以還是那句話,具體問題具體分析。
以上是我對于技巧的一些看法,也可以算是我貢獻給大家的“不是技巧的技巧”。
下面,我也總結(jié)幾條常見問題的處理技巧,供大家參考:轉(zhuǎn)
貼于:http://www.vanceur.cn
1、關于Oracle字符集的設置,歷來是各技術論壇經(jīng)常被討論的問題,但許多討論都不徹底或有明顯的錯誤,致使許多朋友在應用過程中出現(xiàn)亂碼的煩惱。關于這方面的問題,大家可以參考我的《Oracle數(shù)據(jù)庫字符集問題解析》一文(www.itpub.net/276524.html),其中最主要的請記住兩點:(1)在數(shù)據(jù)庫端:選擇需要的字符集(通過create database中的CHARACTER SET與NATIONAL CHARACTER SET子句指定);(2)在客戶端:設置操作系統(tǒng)實際使用的字符集(通過環(huán)境變量NLS_LANG設置)。
2、Oracle 9i以來引入了“閃回”(flash back)功能,能夠查詢到不久前的時間點各表的數(shù)據(jù)情況,這對恢復人為差錯造成的數(shù)據(jù)丟失很有用,不用使用備份及歸檔日志進行恢復,只要一個簡單SQL即可恢復。如誤刪了某表的數(shù)據(jù),可用形如下面的SQL進行恢復:
insert into tab1
select * from tab1 as of timestamp to_timestamp('200501010101','yyyymmddhh24mi')
3、對于WEB查詢結(jié)果集比較大,需要分頁并排序顯示的情況,在Oracle中可以采用形如下面的SQL:
select *
from ( select a.*, rownum r
from ( select *
from t
where x = :host_variable
order by y ) a
where rownum <:HigherBound )
where r > :LowerBound
這樣Oracle在決定執(zhí)行計劃時,可以不對整個結(jié)果集進行排序,而只需保證顯示的當前頁及之前的數(shù)據(jù)排序準確即可,系統(tǒng)效率得以提升。轉(zhuǎn)貼于:http://www.
leadge.com
4、對于使用Oracle 數(shù)據(jù)庫,但沒有用到綁定變量的一些OLTP應用,可以考慮設置cursor_sharing參數(shù)強制使用綁定變量,我過去曾經(jīng)做過一個測試,對于某個應用,強制使用綁定變量后在相同的負載情況下系統(tǒng)CPU使用率下降30%以上,當然也要注意使用該設置后一些大的統(tǒng)計查詢SQL的執(zhí)行計劃有可能受到負面影響。所以,最好在開發(fā)階段就使用綁定變量。
5、對于Oracle數(shù)據(jù)庫經(jīng)常出現(xiàn)的ora 4031(unable to allocate %s bytes of shared memory)錯誤,首先應確定是否為Oracle的BUG所引起,尤其是ORACLE 8.1.7.0版本,存在內(nèi)存泄露(memory leak)(bug no:1397603)的問題,解決的辦法一是暫時設置內(nèi)部參數(shù)_db_handles_cached =0,最終的解決方法是將ORACLE升級到8.1.7.2或更高的版本。如果確認不是Oracle的BUG,可以考慮利用oracle提供的包dbms_shared_pool將一些大的對象固定在共享內(nèi)存中,或者加大共享內(nèi)存。
6、如果不能修改程序的源代碼,而想調(diào)整或固定某些SQL的執(zhí)行計劃,可以利用Oracle提供的Stored Outline功能。
7、對于Oracle 數(shù)據(jù)庫,使用本地管理的表空間(而不使用傳統(tǒng)
項目經(jīng)理勝任力免費測評PMQ上線啦!快來測測你排多少名吧~
http://www.vanceur.cn/pmqhd/index.html