1

我一直在 oracle 中使用 exp 和 imp 命令来导出和导入我的数据库。

我通常使用

exp My_DB/MyPass file=dump_My_DB_20130729.dmp

imp My_DB/MyPass file=/tmp/dump_My_DB_20130729.dmp fromuser=My_DB touser=My_DB

其中 My_DB 是 hte user/db 而 MyPass 是密码。

我的数据库一直使用 SID = orcl

我们的基础架构团队现在已经克隆了 My_DB 数据库并放入另一个 SID (orcl2) 用户/数据库名称是相同的。SID 是唯一的区别

如何使用 exp 和 imp 进行导出和导入。我发现这个链接描述了设置全局 sid 变量,我认为它会更新我导出/导入的数据库。理想情况下,我想打开命令,这样我就不必去更改环境变量了。

我看不到通过文档执行此操作的任何方法

有没有一种简单的方法来更改 SID 以进行导出?

谢谢

4

1 回答 1

4

如果tnsnames.ora文件中有两个数据库的条目,则可以指定 TNS 别名以用作连接字符串的一部分

exp My_DB/MyPass@orcl2 file=dump_My_DB_20130729.dmp

假设别名设置为与 SID 同名,例如:

orcl=
 (DESCRIPTION= 
   (ADDRESS=(PROTOCOL=tcp)(HOST=my.host)(PORT=1521)) 
   (CONNECT_DATA=(SID=orcl)))
orcl2=
 (DESCRIPTION= 
   (ADDRESS=(PROTOCOL=tcp)(HOST=my.host)(PORT=1521)) 
   (CONNECT_DATA=(SID=orcl2)))

如果您在数据库所在的同一台机器上执行此操作,那么 DBA 可能已在全局tnsnames.ora. 如果它不存在,或者您想覆盖它,您可以创建自己的文件并将环境变量TNS_ADMIN指向它所在的目录。

它也更有可能SERVICE_NAME在连接数据部分中包含 ,而不是SID,尽管它们可能相同。如果您知道服务名称,则可以根据需要绕过该tnsnames.ora文件:

exp My_DB/MyPass@//my.host:1521/<service_name> file=...

您还应该考虑使用数据泵( expdpand impdp) 而不是传统的expand imp,因为您使用的是 11g。

于 2013-07-30T08:48:23.610 回答