2011-10-03 42 views
1

我有两个Oracle数据库。它们具有完全相同的表结构。大约有15个表格有不同的FK关系。将数据从一个数据库加载到另一个数据库的最佳方法

我需要创建一个进程,它可以接受一个I​​D(整个数据库的父表的PK),并将与该密钥相关的数据库中的所有数据传输到第二个数据库。

我想过使用数据库链接。但是,它看起来像这个选项不是“制裁”。

还有什么其他的好选择呢?我知道有MSSql Server的导入/导出工具,但我在Oracle上。我可以创建一个客户端应用程序来处理连接到这两个数据库,但对于客户端应用程序来说,这似乎很多工作。我可以导出到文件然后导入,但是再一次,这是很多工作。

任何想法,这样做的好方法或我几乎坚持我已经想到的解决方案?

我知道这可能是一个棘手的问题,真的有一个坚实的答案,我提前感谢大家的帮助!

回答

1

有两种互补的命令行工具,称为exp和imp for oracle。您可以在这里找到他们一些更多的信息http://www.orafaq.com/wiki/Import_Export_FAQ

您可能会感兴趣的主位是在where子句选项

exp scott/tiger tables=emp query="where deptno=10" 
+0

看起来很有趣。我会看一看。看起来有一个更新版本的命令:http://www.orafaq.com/wiki/Data_Pump – kralco626

+0

虽然有一个问题,我该如何去使用这些命令?我在安装SQL Developer的windows xp上。我需要安装其他东西吗? – kralco626

+0

此外,它看起来像使用这个过程需要一个数据库链接,所以导入和导出。'使用网络模式导入时,不需要任何中间转储文件(GREAT,不再需要转储文件的FTP)。数据通过数据库链接导出并直接导入到目标数据库中'这是一个我可以在本地计算机上执行的命令,让它在那里存储dmp文件,然后从那里加载转储文件,所以我不必使用数据库链接? – kralco626

1

@ kralco626 - 我知道这个问题是旧的,但你可以做的是在源数据库中创建一个与原始表的参数匹配的临时表。然后将要移动到新数据库的记录从原始表复制到新的临时表中。 语法:

CREATE TABLE source_new_table 
AS (SELECT * FROM source_old_table 
    WHERE old_table.column_name = criteria); 

现在导出新的临时表数据泵导出表的命令。 语法:

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; 

这应该让你得到你想要的结果。

相关问题