0

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

相反,我使用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

然后我可以获取所有这些值并将它们输入 adb2look以生成每个表的 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 的标准方法吗?必须有一种更简单的方法,我在这里错过了。

4

2 回答 2

2

db2move主要是迁移数据,和数据相关的东西,比如每张表的DDL等等。db2move甚至不迁移表之间的关系,所以你必须用ddl重新创建它们。

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

您指示的过程是提取该 DDL 的正常过程。然而,我见过比你更困难的过程,处理 DDL 和 db2more/db2look;你的很“简单”。

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

于 2014-01-25T12:46:15.373 回答
0

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

于 2014-02-13T06:21:12.990 回答