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