現象
應用使用數據庫連接池,訪問A庫時通過dblink查詢B庫,應用時不時會報錯ORA-02068和ORA-0313。
過程還原
當應用獲取了壹個數據庫連接,並在數據庫連接中使用了dblink,如果應用到A庫的連接不釋放,則A庫到B庫的dblink 連接也不釋放;當A庫到B庫的dblink連接由於長時間無數據被防火墻設備斷開後,如果應用再次從連接池中獲取這個連接,並要使用dblink查詢時,則oracle就會報錯。
根本原因
oracle替妳保存了dblink連接,當妳再使用時,沒有檢查就直接使用,則可能導致報錯。
可行的解決方案
1. 升級oracle到11g,高版本oracle可以保證dblink使用時都是ok的;
2. 應用訪問數據庫的代碼中,查詢完畢後,顯示關閉dblink;
3. 取消A庫到B庫的超時斷開機制,這方法不保險,因為長時間的網絡連接可能還會被其他因素斷開;
4. 配置應用連接池,每次提供連接時也要檢查dblink是否可用。