database - 具有不同 SID 的 Oracle 导出数据库

标签 database oracle oracle11g export

我一直在使用 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 导出和导入。我找到了 this link它描述了设置全局 sid 变量,我认为它会更新我导出/导入的数据库。理想情况下,我希望打开命令,这样我就不必去更改环境变量。

我看不到通过 docs 执行此操作的任何方式虽然

是否有一种简单的方法来更改导出的 SID?

谢谢

最佳答案

如果您的tnsnames.ora 文件中有这两个数据库的条目,您可以specify the TNS alias to use as part of the connection string :

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=...

您还应该看看使用 datapump (expdpimpdp)而不是传统的 expimp,因为您使用的是 11g。

关于database - 具有不同 SID 的 Oracle 导出数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17942115/

相关文章:

sql-server - 查找多父层次结构数据模型中两个节点之间的所有可能关系[SQL Server]

database - Tomcat 数据库连接泄漏

sql - 我如何在更新前后验证一行

java - Hibernate、id、oracle、序列

.net - 查询 Oracle 数据库以获取表列表时出现的问题 : "table or view does not exist"

oracle - Oracle 中的非事件 session

asp.net - 使用 ASP.NET 连接到 Access 数据库

ruby-on-rails - 多个关联的rails数据库查询效率

oracle - 我可以在 oracle 函数中使用 insert all 语句吗

PLSQL:VARBIABLE:= SEQUENCE.NEXTVAL或SELECT SEQUENCE.NEXTVAL从对偶转换为VARIABLE?