【问题标题】:Copy data from one database to another in Oracle在 Oracle 中将数据从一个数据库复制到另一个数据库
【发布时间】:2012-10-30 12:46:21
【问题描述】:

我有 2 个 Oracle 数据库,我经常使用 TOAD 将数据从 prod DB 复制到测试 DB,方法是为 Prod DB 生成插入脚本并稍后在测试 DB 上运行它。

我正在尝试通过批处理文件来加快速度。

我认为我可以使用this 解决方案,但数据库有一个auto-increment 列。如果我使用此解决方案,该列会受到影响吗?我需要以某种方式更改脚本吗?到目前为止,我还没有尝试过,因为我无法访问数据库,并且只能在星期一进行测试。

有没有更好的方法可以做到这一点?我实际上正在寻找的是使用批处理文件执行整个复制过程,这将最大限度地减少我使用 TOAD 执行此操作的时间。

另外,如果解决方案不简单,如果我能被引导到正确的方向,我很好。

【问题讨论】:

  • 虽然COPY 命令可能非常有用,但最终会被淘汰,并且它有一些奇怪的行为。最简单、最快的方法是使用database link
  • Export-Import也可以考虑。

标签: sql oracle batch-file oracle10g bulkinsert


【解决方案1】:

确保两个表具有相同的结构。

连接到目标数据库。

创建到源数据库的公共链接。用户应具有“CREATE PUBLIC DATABASE LINK”系统权限才能执行此操作。

CREATE PUBLIC DATABASE LINK mylink
  CONNECT TO source_user IDENTIFIED BY source_password
  USING 'source_entry_in_tnsnames';

复制数据:

INSERT INTO mytable SELECT * FROM mytable@mylink;

如果表的主键来自序列,请将序列设置为 - 至少 - 与源数据库中的值相同:

ALTER SEQUENCE mysequence increment by 100000;
SELECT mysequence.nextval FROM DUAL;
ALTER SEQUENCE mysequence increment by 1;

【讨论】:

  • source_entry_in_tnsnames 周围的单引号至关重要;没有它们,您可能会花一些时间想知道为什么 Oracle 会向您抛出错误。见the documentation
猜你喜欢
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多