使用db2move和db2look迁移DB2物化查询表(MQT)的正确方法

时间:2014-01-24 15:34:30

标签: sql database db2 db2-luw

我正在将数据库从DB2 10.1 for Windows x86_64迁移到DB2 10.1 for Linux x86_64 - 这是操作系统和机器类型的组合,它们具有不兼容的备份文件格式,这意味着我不能只进行备份和还原

相反,我正在使用db2move从Windows备份数据库并在Linux上恢复它。但是,db2move不会移动具体化查询表(MQT)。相反,我需要使用db2look。这带来了寻找处理该过程的通用方法的挑战。现在要为物化查询转储DDL,我必须运行以下命令:

db2 connect to MYDATABASE
db2 -x "select cast(tabschema || '.' || tabname as varchar(80)) as tablename from syscat.tables where type='S'"

返回MQT列表,例如:

MYSCHEMA.TABLE1
MYSCHEMA.TABLE2
MYOTHERSCHEMA.TABLE3

然后,我可以获取所有这些值并将其提供给db2look以生成每个表的DDL,并将输出发送到mqts.sql

db2look -d MYDATABASE -e -t MYSCHEMA.TABLE1 MYSCHEMA.TABLE2 MYOTHERSCHEMA.TABLE3 -o mqts.sql

然后我将文件mqts.sql复制到目标计算机,我之前已经恢复了所有非MQT,并运行以下命令来恢复MQT:

db2 -tvf mqts.sql

这是迁移MQT的标准方法吗?我必须在这里找到一种更简单的方法。

2 个答案:

答案 0 :(得分:2)

db2move主要用于迁移数据以及与该数据相关的事物,例如每个表的DDL等.db2move甚至不迁移表之间的关系,因此必须使用ddl重新创建它们。

考虑到前面的事情,MQT只是一个DDL,它没有任何数据。处理DDL的工具是db2look,它有很多选项可以准确地提取你想要的东西。

您指出的过程是提取该DDL的正常过程。但是,我看到了比你更困难的进程,处理DDL和db2more / db2look;你的是“简单”。

另一个选择是使用Data Studio,但是你不能编写脚本。

答案 1 :(得分:0)

我相信你所做的是正确的,因为MQT没有自己的数据,而是从基表填充。因此,该过程应该是将数据迁移到MQT所引用的基表中,然后简单地创建/刷新MQT。