我正在将数据库从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的标准方法吗?我必须在这里找到一种更简单的方法。
答案 0 :(得分:2)
db2move主要用于迁移数据以及与该数据相关的事物,例如每个表的DDL等.db2move甚至不迁移表之间的关系,因此必须使用ddl重新创建它们。
考虑到前面的事情,MQT只是一个DDL,它没有任何数据。处理DDL的工具是db2look,它有很多选项可以准确地提取你想要的东西。
您指出的过程是提取该DDL的正常过程。但是,我看到了比你更困难的进程,处理DDL和db2more / db2look;你的是“简单”。
另一个选择是使用Data Studio,但是你不能编写脚本。
答案 1 :(得分:0)
我相信你所做的是正确的,因为MQT没有自己的数据,而是从基表填充。因此,该过程应该是将数据迁移到MQT所引用的基表中,然后简单地创建/刷新MQT。