2010-10-20 130 views
0

我在这里有一些问题。让我解释。从表格中插入另一个数据库的数据

所以我刚刚完成了这个项目的迁移,我决定运行测试套件以确保逻辑仍然按预期工作。不幸的是,它没有......但这不是问题。

在套件的最后,有一个很好的脚本,对我们的开发数据库的5个表的数据执行删除操作。这将是很好,如果还有一个脚本实际上填充数据库...

好的一面是,我们仍然有大量的生产环境中的数据,所以我正在寻找一种方式和/或可能是工具来提取生产中这5个特定表上的数据并将其插入开发环境中。这些表之间有各种主键和外键,可能是自动递增字段(还有很多数据),这就是为什么我不想手动执行它。

我们的数据库是db2 v9,如果它有任何区别。我也在与SQuirreL合作,可能有一个插件,但我还没有找到。

感谢

回答

0

这有点在黑暗中拍摄的,因为我从来没有用过DB2,但是从以往的经验,我的直觉immidiately“试用CSV”。我愿意打赌我可以在你的软件中输入/输出CSV文件(为什么我刚开始考虑来自Seinfeld的乔治?) 这也应该让你的FK和ID完好无损。如果需要,您可能必须将自动增量值重置为适当的值。当然,这将在导入后完成

此外,csv文件是纯文本的,如果任何怪异现象出现,它们都很容易操作。

祝你好运!

+0

好主意,我可以导出到csv,但我找不到导入cvs的插件:( – ALOToverflow 2010-10-20 13:59:30

+0

你可以从其他格式导入吗?找到一个工具来转换CVS应该是相当简单的 - >任何表格格式真的,快速谷歌搜索“db2 cvs导入”让我这个链接http://bit.ly/crs4xH,但我不知道这是不是一个好的包,只是说,这应该不会太难你做一些研究。:) – Arve 2010-10-20 14:09:15

+0

是的。我知道谷歌能为你做什么;)不幸的是,我们的工作环境是严格的(出于安全目的),所以我无法下载我在Google上找到的任何东西。 – ALOToverflow 2010-10-20 15:26:59

0

大厦艾云的回答,DB2有一个内置的命令导入CSV文件:

IMPORT FROM 'my_csv_file.csv' 
OF del 
-- 1st, 2nd, 3rd column in CSV 
METHOD P(1, 2, 3) 
INSERT INTO my_table 
(foo_col, bar_col, baz_col) 

IMPORT FROM 'my_csv_file.csv' 
OF del 
INSERT INTO my_table 

,如果他们不是在默认顺序您可以指定列的列表

如果不是逗号分隔的,您还可以指定不同的分隔符。例如,以下指定由| |

IMPORT FROM 'my_csv_file.csv' 
OF del 
MODIFIED BY COLDEL| 
-- 1st, 2nd, 3rd column in CSV 
METHOD P(1, 2, 3) 
INSERT INTO my_table 
(foo_col, bar_col, baz_col) 

有更多选项。官方的文档是有点毛毛:

+0

我无法连接到运行db2的机器,这有什么关系吗? – ALOToverflow 2010-10-20 15:26:12

+0

您是指开发DB2环境还是生产DB2环境?你有什么样的访问权限?你可以在上面放一个脚本和一个CSV文件,然后运行脚本导入CSV文件? – Leons 2010-10-21 16:19:40

0

你可以访问到模拟器?在模拟器中有一个功能,允许您直接将CSV导入到表中。

+0

我不这么认为,两个数据库都在外部服务器上。 – ALOToverflow 2010-10-27 21:40:39

0

Frank。我个人并不知道有任何自动化工具可以将一小部分生产数据“捕获”到测试套件中,但在我的一天中,我能够使用QMF和一些通用查询来做到这一点。它确实需要对表结构,父 - 子依赖关系,参照完整性和其他事物进行前瞻性规划/分析。

它确实需要做一些初步工作,但一旦完成,我就可以使用这些工具并重新使用这些工具来提取生产数据的几个不同视图,以供测试之用。 如果这吸引你,请继续阅读。

在一个高级视图,你可以这样做:

  1. 确定键列名是什么。
  2. 为他们创建一个“keys”表。
  3. 编写几个查询来查找您的测试条件并填充keys_table。
  4. 一旦您满意key_table有一个令人满意的键子集,那么您可以使用您创建的工具为您去除数据。
  5. 编写一个通用查询,它将keys_table与您的生产表连接起来,并将数据导出到平面文件中。
  6. 编写一个proc自动完成所有的提取/填充。

如果您有机会获得QMF(你可能做的DB2店),你可能能够做这样的事情:

  1. 确定所有你需要的表。
  2. 确定这些表的主索引。
  3. 确定这些表的任何参照完整性要求。
  4. 确定所有表之间的父子关系。
  5. 对于最低级子表(通常是具有大多数索引的表)注意用于标识唯一键的所有列。

通过上述信息,您可以创建一个通用查询来删除生产数据中的较小部分,如#5。换句话说,您可以创建一系列特定的查询并填充您创建的小型密钥表。

在QMF,你可以创建这样的通用查询:

select t.* 
    from &t_tbl t 
    , &k_tbl k 
where &cond 
order by 1, 2, 3 

在proc,您只需通过表名,密钥和变量condtions。一旦数据被捕获,您将数据导出到某个文件名。

您可以创建一个EXPORT_TABLE PROC会是这个样子:

run query1 (&&t_tbl = students_table , &&k_tbl = my_test_keys , 
+ &&cond = (t.stud_id = k.stud_id and t.course_id = k.course_id) 
export data to studenttable 

run query1 (&&t_tbl = course_table , &&k_tbl = my_test_keys , 
+ &&cond = (t.cour_id = k.cour_id 
+ (and t.cour_dt between 2009-01-01 and 2010-02-02) 
export data to coursetable 

..... 

根据需要这可以捕获所有的数据。

然后,您可以创建一个IMPORT_TEST PROC反其道而行之:

import data from studenttable 
save data as student_table (replace = yes 

import data from coursetable 
save data as course_table (replace = yes 

.... 

这可能需要一段时间来建立,但至少你会再有一个可重复使用的工具来提取数据。

希望有所帮助。

相关问题