我们需要在多个Oracle数据库实例之间迁移数据。
我们希望从一个表中的一个表中转储记录,然后将其导入另一个实例的相同表中。
复杂的是我们正在使用的Oracle用户名无法直接访问表本身 - 这些表由一个单独的用户拥有。我们看不到任何表,我们只有权查看表的同义词。
我看过的两个工具,Oracle SQL Developer和Toad for Oracle将允许您从表中转储数据(我们可以做的是我们可以访问所有者帐户),还可以创建一个脚本来重新创建同义词本身(如DROP SYNONYMY XYZ; CREATE SYNONYM XYZ FOR ABC;
);但是,它们似乎不允许您指定同义词并按照该链接转储该数据的所有数据。
有没有办法调整上述任何一种方法,或者我们可以使用工具通过同义词转储数据的解决方法?
如果做不到这一点,那么下一个最好的事情就是编写一些SQL并编写转储/重新导入脚本。这里有什么建议,警告,最佳实践?
答案 0 :(得分:1)
DB Link对你的情况有用吗?
答案 1 :(得分:1)
我的一位同事发现了Oracle SQLPlus COPY命令,它似乎可以完成这项任务:
COPY FROM username/password@hostname:port/SERVICENAME TO username_owner/password@hostname:port/SERVICENAME APPEND TABLE1 USING SELECT * from TABLE1;
它将复制所有值,在这种情况下,将值附加(虽然您也可以创建表,或插入表中)将值添加到单独的Oracle数据库实例上的表中。
唯一需要注意的是SQLPlus手册说它会被淘汰(不知道为什么),但是,我刚检查了11G,命令肯定还在那里。
干杯, 维克多
答案 2 :(得分:0)
您真的需要与您的DBA讨论此问题,并获得对数据所有者的正确访问权限,或让DBA根据Chin Boon的建议创建数据库链接。
从一个实例获取数据到另一个实例的粗略和(非常)原始方法,除了源上的select之外没有访问权限,将来自源的输出假脱机到分隔文件,然后将该数据导入目标数据库(使用外部表或如果您的访问权限不允许您创建外部表,那么在Java等中创建其他一些自定义构建的应用程序。)
我对上述解决方案的保留(如果你可以称之为)是,如果你的数据量非常大,分隔文件将很快变得难以处理。所以我最初的观点可能是您最好的选择,请您的DBA为您执行此操作,因为他们的访问权限将使他们能够非常有效地执行操作。