對于單純的導資料,經驗證,比impdp命令還快。
但是,一般企業禁用dblink方式。
主要原因是:
1、一般開發不會關會話,使用后不關閉導致session過多而影響系統
2、dblink沒有詳細的日志記錄,出了問題不易排查,一般的操作都是有現成的同步方式或工具的,所以為了節省問題處理時間,采用現成的更可靠。
對于關閉dblink產生的session,有如下文章可參考。
抄自:http://blog.itpub.net/9932141/viewspace-631509/
db-link session在基于連接池的管理中可能會引起目標管理系統的Session泛濫,從而消耗行程資源。
最近出現一個關于db-link session的問題,在A資料庫建立了一個DBLINK,其他有三臺服務器利用DBLINK連接到A資料庫,但是在應用中利用了連接池進行
session管理,當使用DBLINK時,在A資料庫出現session快速增長,達到了頂峰從而導致行程資源消耗連接出現中斷。
方式一:
使用命令
alter sesssion close database link ;
使用系統包
DBMS_SESSION.CLOSE_DATABASE_LINK(dblink_name);
此種方式需要用在應用程式當中,ORACLE檔案說明,此方式只對當前session起作用,所以管理員SYS去關閉也是不成功的。
SQL> conn / as sysdba
Connected.
SQL> alter session close database link test;
ERROR:
ORA-02081: database link is not open
注意,在使用此方式的命令之前需要用commit命令首先提交,否則會出現ora-02080錯誤。
--eg:實現關閉dblink
declare
v varchar2(50);
CURSOR r IS
select first_name from t1@test;
begin
open r;
loop
fetch r
into v;
exit when r%NOTFOUND;
end loop;
close r;
commit;
execute immediate 'alter session close database link test';
end;
/
方式二:
SQLNET.ORA檔案中的引數設定(針對PROFILE的建立,限制用戶資源使用)
SQLNET.EXPIRE_TIME=
注:用此方式會導致用戶的會話都受到影響,除非DBLINK是單獨使用一個用戶。
方式三:
用SELECT查詢并形成命令
select sid,
serial#,
username,
osuser,
machine,
'alter system kill session ' || '''' || sid || ',' || serial# ||
''' immediate;' session_level
from v$session
where machine in ('DB01', 'DB02', 'DB03');
注意每個命令后面后加的immediate,沒有加此關鍵字則v$session中的STATUS列會變為KILLED,但是資源并未釋放。
利用方式三可以做成JOB定時kill session,但這樣存在很大的風險。
總之,在使用DBLINK時一定要注意session的回收,在應用程式中使用
commit;
alter sesssion close database link ;
uj5u.com熱心網友回復:
impdp本身就能借助dblink導資料。uj5u.com熱心網友回復:
其實,所有事情都不是絕對的,關鍵是會用。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/28126.html
標籤:基礎和管理
上一篇:Oracle orader group 非常非常慢!
下一篇:pl/sql求助
