日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

database link问题解决

發布時間:2023/12/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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; ??
  • 總結

    以上是生活随笔為你收集整理的database link问题解决的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。