我有两个Oracle数据库。它们具有完全相同的表结构。大约有15个表具有各种FK关系。
我需要创建一个可以接受ID(整个数据库的父表的PK)的进程,并将与该密钥相关的数据库中的所有数据传输到第二个数据库。
我考虑过使用数据库链接。但是,看起来这个选项不是“制裁”。
还有哪些其他好的选择呢?我知道有MSSql Server的导入/导出工具,但我在Oracle上。我可以创建一个客户端应用程序来处理连接到两个数据库,但这似乎是客户端应用程序的很多工作。我可以导出到文件然后再导入,但这又是很多工作。
有什么好的方法可以做到这一点,还是我非常坚持我已经想到的解决方案?
我知道这可能是一个非常难以回答的问题,我提前感谢所有人的帮助!
答案 0 :(得分:1)
有两个互补的命令行工具,名为exp,imp用于oracle。您可以在http://www.orafaq.com/wiki/Import_Export_FAQ
找到更多相关信息您可能感兴趣的主要部分是where子句选项
exp scott/tiger tables=emp query="where deptno=10"
答案 1 :(得分:1)
@ kralco626 - 我知道这个问题很旧,但你可以做的是在源数据库中创建一个与原始表的参数匹配的临时表。然后将要移动到新数据库的记录从原始表复制到新临时表。 语法:
CREATE TABLE source_new_table
AS (SELECT * FROM source_old_table
WHERE old_table.column_name = criteria);
现在使用datapump export table命令导出新临时表。 语法:
EXPDP source_schema_name/source_schema_password TABLES=source_new_table DIRECTORY=datapump_dir DUMPFILE=dumpfile_name.dpdmp LOGFILE=expdp_logfile_name COMPRESSION=ALL
获取该数据泵导出文件并使用它对目标数据库执行数据泵导入表命令。 语法:
IMPDP destination_schema_name/destination_schema_password TABLES=source_new_table DIRECTORY=datapump_dir DUMPFILE=dumpfile_name.dpdmp LOGFILE=impdp_logfile_name
然后将新导入的临时表中的记录附加到目标数据库中的原始表。 语法:
INSERT INTO destination_old_table
SELECT * FROM source_new_table;
对于从源数据库中获取数据所需的每个表执行相同的步骤。 完成所有操作后,您只需要从两个数据库中删除临时表。 语法:
DROP TABLE destination_schema_name.source_new_table;
DROP TABLE source_schema_name.source_new_table;
那应该可以得到你想要的结果。