database link问题解决
生活随笔
收集整理的這篇文章主要介紹了
database link问题解决
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Oracle數據庫中關于database link?
可以通過在A庫設置指向B庫的database link來直接訪問B庫的數據?
語法?
Sql代碼?? create?[public]?database?link?b_lk?connect?to?userA?identified?by?xxx?using?'tnsname'??
其中,如果省略public則創建的是private的連接,只能當前所有者可以使用這個link?
使用connect to user identified by xxx則所有通過dblink的用戶在訪問B庫時都使用userA這個用戶?
b_lk指的是database link的名字,如果A庫的global_names=true,則這個名字一定要使用B庫的global_name.在b庫執行select * from global_name可以得到。否則建立db link的時候不會報錯,但是在執行查詢時會報錯?
ORA-02085: database link b_lk connects to b.world.COM?
tnsname指的是A庫的tnsnames文件中配置的b庫名稱?
也可以直接使用以下的語句代替?
Sql代碼?? USING?'(DESCRIPTION?=?? (ADDRESS_LIST?=?? (ADDRESS?=?(PROTOCOL?=?TCP)(HOST?=?b.world.COM)(PORT?=?1521))?? )?? (CONNECT_DATA?=?? (SERVICE_NAME?=?b)?? )?? )';??
a庫使用dblink訪問b庫時比如select * from table@b_lk默認會在a庫生成一個事務,可以查詢v$transaction得到。有三種方法來控制這個事務?
1.查詢后執行rollback或者commit?
Sql代碼?? 2.查詢后關閉link?:alter?session?close?database?link?b_lk?? SQL>?alter?session?close?database?link?b_lk;?? ERROR:?? ORA-02080:?database?link?is?in?use?? SQL>?rollback;?? Rollback?complete.?? SQL>?alter?session?close?database?link?b_lk;?? Session?altered.??
注意:在rollback因為dblink查詢產生的事務前,無法關閉dblink。關閉后可以再次執行基于dblink的查詢?
3.set transaction read only;讓事務只讀,dblink將不產生事務,但是也限制了同一個session下對本地庫的寫操作?
注意:有了dblink后,可以執行對b庫的insert等dml操作,有安全隱患,如何控制只能對b庫進行讀操作呢??
------------------------------?
如果使用dblink,我們需要及時顯示的關閉dblink。以下提供兩種方式,因為并不會在你建立的以后就自動的關閉和遠程服務器建立的session,如果session太多,會0.+造成查詢失敗?
Sql代碼?? alter?session?close?database?link?<dblink_name>;?? ?? dbms_session.close_database_link(<dblink_name>);??
你的程序是JAVA或者其他;可以寫個存儲過程,然后用動態sql實現database link的顯示關閉.?
? ---用db link查詢表事務的兩個小燈也會亮!!!?
因為 DBLINK 會起一個新的事務處理的。 所以哪怕你是SELECT ROLLBACK和COMMIT都會亮的。?
每次使用db_link查詢時釋放連接,調用dbms_session包中的關閉函數即可?
??? 例:dbms_session.close_database_link(CONN_MY_LINK);?
?? ……?
是本地數據庫的事務?
加上set transaction read only;?
------------------------------?
ORA-02068,ORA-03113 報錯?
Cause:?
由于大量使用dblink遠程連接未正常釋放所致,也可能是bug所致。?
Solution:?
一,最好不要大量使用dblink方式實時遠程取數據,有大概如下幾個缺點:?
1,頻繁對遠程數據庫創建連接,釋放連接會有較大開銷,特別是OLTP類數據庫。?
2,此類遠程dblink連接session,如本地session不退出或手動釋放,此類session是不會及時自動釋放的。大量耗用遠程數據庫資源。?
3,占用網絡帶寬?
4,觸發bug,此類bug很多?
此類應用根絕實際需求可以用物化視圖,觸發器等方式替代.?
注:切忌使用dblink嵌套dblink的訪問方式,性能會非常糟糕,而且不穩定。?
二,使用ALTER SESSION CLOSE DATABASE LINK dblink_name;語句來手動關閉遠程dblink session.?
在使用此語句前,切忌先執行commit;否則報錯ORA-02080或者不能達到預期效果。?
-------------------------------?
Sql代碼?? ORACLE?"ORA--22992:無法使用遠程表選擇的LOB定位器,database?link"??? ?? ???解決辦法:??? ???先創建一個臨時表,然后把遠程的含CLOB字段的表導入到臨時表中,再倒入本表。??? ????create?global?temporary?table?demo_temp?as?select?*?from?demo;??? ????insert?into?demo_temp?select?*?from?demo@D_LINK;??? ????insert?into?demo?select?*?from?demo_temp;??? ????commit; ??
可以通過在A庫設置指向B庫的database link來直接訪問B庫的數據?
語法?
Sql代碼??
其中,如果省略public則創建的是private的連接,只能當前所有者可以使用這個link?
使用connect to user identified by xxx則所有通過dblink的用戶在訪問B庫時都使用userA這個用戶?
b_lk指的是database link的名字,如果A庫的global_names=true,則這個名字一定要使用B庫的global_name.在b庫執行select * from global_name可以得到。否則建立db link的時候不會報錯,但是在執行查詢時會報錯?
ORA-02085: database link b_lk connects to b.world.COM?
tnsname指的是A庫的tnsnames文件中配置的b庫名稱?
也可以直接使用以下的語句代替?
Sql代碼??
a庫使用dblink訪問b庫時比如select * from table@b_lk默認會在a庫生成一個事務,可以查詢v$transaction得到。有三種方法來控制這個事務?
1.查詢后執行rollback或者commit?
Sql代碼??
注意:在rollback因為dblink查詢產生的事務前,無法關閉dblink。關閉后可以再次執行基于dblink的查詢?
3.set transaction read only;讓事務只讀,dblink將不產生事務,但是也限制了同一個session下對本地庫的寫操作?
注意:有了dblink后,可以執行對b庫的insert等dml操作,有安全隱患,如何控制只能對b庫進行讀操作呢??
------------------------------?
如果使用dblink,我們需要及時顯示的關閉dblink。以下提供兩種方式,因為并不會在你建立的以后就自動的關閉和遠程服務器建立的session,如果session太多,會0.+造成查詢失敗?
Sql代碼??
你的程序是JAVA或者其他;可以寫個存儲過程,然后用動態sql實現database link的顯示關閉.?
? ---用db link查詢表事務的兩個小燈也會亮!!!?
因為 DBLINK 會起一個新的事務處理的。 所以哪怕你是SELECT ROLLBACK和COMMIT都會亮的。?
每次使用db_link查詢時釋放連接,調用dbms_session包中的關閉函數即可?
??? 例:dbms_session.close_database_link(CONN_MY_LINK);?
?? ……?
是本地數據庫的事務?
加上set transaction read only;?
------------------------------?
ORA-02068,ORA-03113 報錯?
Cause:?
由于大量使用dblink遠程連接未正常釋放所致,也可能是bug所致。?
Solution:?
一,最好不要大量使用dblink方式實時遠程取數據,有大概如下幾個缺點:?
1,頻繁對遠程數據庫創建連接,釋放連接會有較大開銷,特別是OLTP類數據庫。?
2,此類遠程dblink連接session,如本地session不退出或手動釋放,此類session是不會及時自動釋放的。大量耗用遠程數據庫資源。?
3,占用網絡帶寬?
4,觸發bug,此類bug很多?
此類應用根絕實際需求可以用物化視圖,觸發器等方式替代.?
注:切忌使用dblink嵌套dblink的訪問方式,性能會非常糟糕,而且不穩定。?
二,使用ALTER SESSION CLOSE DATABASE LINK dblink_name;語句來手動關閉遠程dblink session.?
在使用此語句前,切忌先執行commit;否則報錯ORA-02080或者不能達到預期效果。?
-------------------------------?
Sql代碼??
總結
以上是生活随笔為你收集整理的database link问题解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cocos2d-xV3.17.2获取cs
- 下一篇: Unity编辑器(Editor)的问题全