2014-8-..
最近总是用oracle10g导入导出,习惯了总是用如下语句:
导入(win):imp user_name/password@sid file=c:\路径\a.dmp full=y log=XXX.log
导入(linux):imp user_name/password@sid file=./路径/a.dmp full=y log=XXX.log
导出(win):exp user_name/[email protected] file=c:\a.dmp
导出(linux):exp user_name/[email protected] file=./a.dmp
这里需要说明下:log=xxx.log 可以省略,且当在本地导出或导入自己唯一实例下的用户的库时,一半不用@sid
我再这里只是想说明下如果加上@sid的含义,我通过oracle的net manager和plsql develper的配合,得到如下结论:
以imp为例:打开你在oracle中tnsnames.ora文件,如下:
# tnsnames.ora Network Configuration File: D:\app\j2ee\product\11.1.0\db_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
172.28.2.130/ORADB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.28.2.130)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oradb)
)
)
10.170.18.63_ORADB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.170.18.63)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oradb)
)
)
192.168.0.200_ORADB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.200)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oradb)
)
)
192.168.10.88_ORADB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.88)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oradb)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = j2ee-PC)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
10.10.11.245_ORADB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.11.245)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oradb)
)
)
10.163.110.101_ORADB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.163.110.101)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = commdb)
)
)
@sid中的sid就是=前边的名称,即:172.28.2.130/ORADB,10.170.18.63_ORADB ,192.168.0.200_ORADB,192.168.10.88_ORADB,ORCL ......
由于tnsnames.ora文件的下的=前边的名称很随意,故导入导出的sid如此(特殊字符没测试过),于我原来一直认为是库里的实例名称相差很大,自己悔恨了很久....
此文章有待继续测试,更新纠错中。。。。
2014-10-22 @sid进一步的理解
回头看这篇文章,有了新的理解:我们在cmd中利用exp或imp导入导出时,可能会纠结,当我想从本地想远程某个机器导出导出时,改怎么办呢?其实如果你前面都看明白的话,就不难理解,对于exp或imp命令来说,他是不区分是本地库还是远程机器的库的,全在你tnsnames.ora文件中的是怎么配的,这个文件的模板格式是
192.168.0.234_ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.234 )(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
而192.168.0.234_ORCL就是你导入导出的@sid,显然这个名字的自定义的,顺便提一下,对于tmsnames.ora这个文件的的修改和添加最好是在net manager这个工具自己一步步配,最好不要直接在这个文件上添加或修改,这个我的心得。
以上可知,对于imp和exp命令来来,其实他可以不区分是本地或远程,你文件里@sid配的是本地(即HOST = 192.168.0.234),那就是本地,反之亦然。