摘要:前幾天師兄交了一個任務,要把一臺主機上的數據拷貝到另一臺主機。在社區裏提問,在衆多網友的幫助下,任務得以順利完成。現將整個思路整理、備案,也爲以後遇到同類問題的朋友提供參考。
感謝 54gj(1751) 、nojave(我一定要成爲程序員)、cenlmmx(學海無涯苦作舟) 、microd(以前是活到老學到老,現在學到老才能活到老) 、nowait(獨行天涯路)、qiaozhiwei(喬)、guangli_zhang(廣麗) 等CSDN好友的幫助!
一、建立連接遠程數據庫的本地服務
1、啓動Oracle的Net Configuration Assistant
2、選擇“本地網絡服務名配置”,next
3、選擇“添加”,next
4、選擇合適的數據庫版本,next
5、填寫服務名(如test),next
6、選擇網絡通信協議(TCP),next
7、填寫遠程主機名(IP地址)及端口號,next
8、選擇是否測試連接
9、一路狂next到完成。
10、修改 /oracle/oraHome/network/ADMIN/tnsnames.ora 文件
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.0.110)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME =TEST)
)
)
將其中的SERVICE_NAME 項改爲要連接遠程數據庫的服務名,
如此處數據庫服務名爲oradb.samlin,則改爲SERVICE_NAME =oradb.samlin
二、建立database link
1、登錄本機的Sql×Plus user/password
2、使用語句
create database link dblinkName connect to username identified by password using 'service';
注:dblinkName爲要建立的database link名
username/password爲遠程數據庫的用戶名/密碼(密碼爲數字時須用"")
service爲連接遠程數據庫的本地服務名
三、拷貝數據
1、拷貝表結構
使用語句
create table database.tableName as select * from database.tableB@dblink where 0=1
2、拷貝數據
使用語句
insert into database.tableName select * from database.tableB@dblink where xxx=yyy
如果是全部拷貝使用
insert into database.tableName select * from database.tableB@dblink
至此數據拷貝完成
注:
1、用這種CTAS方式須重建約束和索引,若要保留約束和索引可使用exp/imp
2、若出現監聽器無法處理,須將把/oracle/admin/oradb/pfile/init.ora中的參數
global_names = TRUE 改爲 global_names = false