很多時候,出於數據安全考慮,需要備份一些重要的業務數據,但這個時候服務器沒有直接登錄的權限,我們只能通過數據庫用戶名方式進行訪問,這個時候可以考慮用exp,但exp畢竟是個舊版的工具,功能沒有expdp那麼全面,但由於expdp只能在服務端進行本地備份寫入,受限比較大,這個時候可以考慮用expdp的network_link方式進行遠程導出或直接導入,下面是這個方案的詳細介紹:
解決方案:通過dblink實現遠程數據的導入導出。
- 本地庫創建dblink指向遠程庫。
create database link link_oss connect to dba_ftc identified by ****** using 'OSS';
- 本地庫創建directory目錄對象。
create directory expdp_dir as '/home/oracle11g/expdp_dir/';
- 本地庫創建數據泵導出參數文件。
vi exp.par:
userid=username/password //本地庫的用戶名密碼,可用上面創建的dblink和directory目錄。
directory=expdp_dir //本地庫創建的directory目錄。
dumpfile=gf_expdp.dump //dump文件名。
logfile=gf_expdp.log //日誌文件名。
tables=depkf15.t_cp //要導出的表。
query='"where rownum<1000001"' //導出條件,前100萬行。
network_link=gf_local //dblink名。
注意,這裏有個小問題值得注意,tables=depkf15.t_cp,如果待導出表和登錄用戶不同,則這裏需要添加導出的對象schema(用戶),否則會報錯。
- 執行導出命令。
expdp '"/ as sysdba"' network_link=link_oss directory=dir1 dumpfile=om_order.dmp tables=gdoss.om_order
impdp使用network_link直接導入
1,從源庫直接複製用戶到目標庫。
建立從目標庫連接源庫的dblink,登錄目標庫使用下面語句
impdp system/password schemas=用戶名 network_link=dblink
2,也可以將源庫作爲目標庫,創建連接自身的dblink
impdp system/password schemas=用戶名 network_link=dblink remap_schema=用戶名:新用戶名
通過network_link方式直接將遠程用戶(schema)複製到本地!