DB2下数据转移任务操作实例
时间:03-25
来源:51CTO
点击:
使用 DB2 LOAD 实用程序的 FROM CURSOR 选项简化 DB2 for Linux, UNIX, and Windows的数据转移过程。本文介绍 LOAD FROM CURSOR 特性并提供两个接口 Command Line Processor 和 ADMIN_CMD 存储过程的使用示例。
简介
典型的 DB2 数据转移任务涉及三个步骤:
◆把数据以二进制或文本格式从源数据库导出到一个临时数据交换文件
◆在系统之间转移生成的文件
◆把数据从文件导入或装载到目标数据库中
在数据量很大的情况下,使用 EXPORT 实用程序生成数据交换文件常常要花费很长时间。另外,在把数据移入和移出数据库时,必须考虑不同的数据库编码页和操作系统。
可以使用 LOAD 实用程序的 FROM CURSOR 选项避免这些问题。当指定 FROM CURSOR 选项时,LOAD 实用程序直接把一个 SQL 查询的结果集作为数据装载操作的来源,这样就不需要生成临时数据交换文件。因此,LOAD FROM CURSOR 是在不同的表空间或数据库之间快速轻松地转移数据的方法。可以在命令行上执行 LOAD FROM CURSOR,也可以通过使用 DB2 的 ADMIN_CMD 存储过程在应用程序或存储过程中执行它。本文介绍 LOAD FROM CURSOR 特性并提供两个接口 Command Line Processor (CLP) 和 ADMIN_CMD 存储过程的使用示例。
把表转移到另一个表空间
首先,看看如何把表从一个表空间转移到另一个表空间。如果创建表的表空间的页面大小不合适,或者应该用另一个缓冲区池访问表,就可能需要执行这种数据转移。在 9.1 以前的 DB2 版本中,常常由于达到表空间的最大大小而在表空间之间转移表。但是,在 DB2 9.1 和更高版本中,这应该不再是问题了,因为表空间大小限制已经显著提高了(前提是使用大表空间,而不是以前使用的常规表空间)。
这个示例场景首先创建 DB2 SAMPLE 数据库。这可以通过在命令行上调用 db2sampl 命令来完成,见清单 1。
清单 1. 创建 SAMPLE 数据库
除了其他表之外,SAMPLE 数据库包含一个名为 SALES 的表。在默认情况下,在表空间 USERSPACE1 中创建这个表。可以通过对 DB2 编目视图 SYSCAT.TABLES 和 SYSCAT.TABLESPACES 执行查询来确认这一点。
清单 2. 判断 SALES 表的表空间
除了 USERSPACE1 表空间之外,还有第二个表空间 IBMDB2SAMPLEREL,它也用于存储用户数据。在这个示例场景中,IBMDB2SAMPLEREL 作为转移 SALES 表的目标表空间。执行 DB2 命令 LIST TABLESPACES,就可以看到一个数据库的所有表空间。清单 3 演示具体做法。
清单 3. 列出 SAMPLE 数据库的所有表空间
在把 SALES 表的内容复制到 IBMDB2SAMPLEREL 表空间之前,必须在目标表空间中创建一个空表,此表的结构应该与 SALES 表相同。因为在同一个数据库模式中不可能有两个同名的表,所以临时用 SALES_TMP 这个名称创建新的表。通过在 CREATE TABLE 命令中指定 LIKE 选项,创建一个与现有表结构相同的空表(清单 4)。通过 IN 选项显式地定义新表 SALES_TMP 的表空间。
清单 4. 创建数据转移操作所需的目标表 SALES_TMP
现在,可以执行数据转移操作了。使用 DECLARE CURSOR 命令定义一个游标,它使用 SELECT 语句读取源表 SALES 的所有数据。可以自由选择游标的名称,在此示例中使用 C1。然后,在用来填充目标表 SALES_TMP 的 LOAD 命令中引用此游标。此示例中的 LOAD 命令把它的消息写到日志文件 load_sales_tmp.msg 中。执行的 LOAD 操作包含 NONRECOVERABLE 选项。这意味着在数据库恢复的前滚阶段无法重新执行这个 LOAD 操作。因此,在执行数据转移操作之后,应该执行数据库备份,至少是表空间备份。LOAD 命令有其他选项可以避免这种情况,但是这些选项超出了本文的范围。更多信息请参见 DB2 Information Center 中对 LOAD 命令的说明(参见 参考资料)。
清单 5. 执行 LOAD FROM CURSOR 操作把 SALES 表中的所有行复制到 SALES_TMP 表
在把 SALES 表中的所有行成功地复制到 SALES_TMP 表之后,可以删除源表(DROP TABLE 语句)。然后,把目标表 SALES_TMP 重命名为 SALES(RENAME TABLE 语句)。在使用 RENAME TABLE 时,只能修改表名,而不能修改表的模式名。因此,一定要在正确的模式中创建 SALES_TMP 表。
清单 6. 删除源表 SALES 并重命名目标表 SALES_TMP
再次对 DB2 编目视图执行查询,可以确认 SALES 表已经从原来的表空间 USERSPACE1 转移到了新的表空间 IBMDB2SAMPLEREL 中,见清单 7。
清单 7. 确认新 SALES 表的表空间
简介
典型的 DB2 数据转移任务涉及三个步骤:
◆把数据以二进制或文本格式从源数据库导出到一个临时数据交换文件
◆在系统之间转移生成的文件
◆把数据从文件导入或装载到目标数据库中
在数据量很大的情况下,使用 EXPORT 实用程序生成数据交换文件常常要花费很长时间。另外,在把数据移入和移出数据库时,必须考虑不同的数据库编码页和操作系统。
可以使用 LOAD 实用程序的 FROM CURSOR 选项避免这些问题。当指定 FROM CURSOR 选项时,LOAD 实用程序直接把一个 SQL 查询的结果集作为数据装载操作的来源,这样就不需要生成临时数据交换文件。因此,LOAD FROM CURSOR 是在不同的表空间或数据库之间快速轻松地转移数据的方法。可以在命令行上执行 LOAD FROM CURSOR,也可以通过使用 DB2 的 ADMIN_CMD 存储过程在应用程序或存储过程中执行它。本文介绍 LOAD FROM CURSOR 特性并提供两个接口 Command Line Processor (CLP) 和 ADMIN_CMD 存储过程的使用示例。
把表转移到另一个表空间
首先,看看如何把表从一个表空间转移到另一个表空间。如果创建表的表空间的页面大小不合适,或者应该用另一个缓冲区池访问表,就可能需要执行这种数据转移。在 9.1 以前的 DB2 版本中,常常由于达到表空间的最大大小而在表空间之间转移表。但是,在 DB2 9.1 和更高版本中,这应该不再是问题了,因为表空间大小限制已经显著提高了(前提是使用大表空间,而不是以前使用的常规表空间)。
这个示例场景首先创建 DB2 SAMPLE 数据库。这可以通过在命令行上调用 db2sampl 命令来完成,见清单 1。
清单 1. 创建 SAMPLE 数据库
除了其他表之外,SAMPLE 数据库包含一个名为 SALES 的表。在默认情况下,在表空间 USERSPACE1 中创建这个表。可以通过对 DB2 编目视图 SYSCAT.TABLES 和 SYSCAT.TABLESPACES 执行查询来确认这一点。
清单 2. 判断 SALES 表的表空间
除了 USERSPACE1 表空间之外,还有第二个表空间 IBMDB2SAMPLEREL,它也用于存储用户数据。在这个示例场景中,IBMDB2SAMPLEREL 作为转移 SALES 表的目标表空间。执行 DB2 命令 LIST TABLESPACES,就可以看到一个数据库的所有表空间。清单 3 演示具体做法。
清单 3. 列出 SAMPLE 数据库的所有表空间
在把 SALES 表的内容复制到 IBMDB2SAMPLEREL 表空间之前,必须在目标表空间中创建一个空表,此表的结构应该与 SALES 表相同。因为在同一个数据库模式中不可能有两个同名的表,所以临时用 SALES_TMP 这个名称创建新的表。通过在 CREATE TABLE 命令中指定 LIKE 选项,创建一个与现有表结构相同的空表(清单 4)。通过 IN 选项显式地定义新表 SALES_TMP 的表空间。
清单 4. 创建数据转移操作所需的目标表 SALES_TMP
现在,可以执行数据转移操作了。使用 DECLARE CURSOR 命令定义一个游标,它使用 SELECT 语句读取源表 SALES 的所有数据。可以自由选择游标的名称,在此示例中使用 C1。然后,在用来填充目标表 SALES_TMP 的 LOAD 命令中引用此游标。此示例中的 LOAD 命令把它的消息写到日志文件 load_sales_tmp.msg 中。执行的 LOAD 操作包含 NONRECOVERABLE 选项。这意味着在数据库恢复的前滚阶段无法重新执行这个 LOAD 操作。因此,在执行数据转移操作之后,应该执行数据库备份,至少是表空间备份。LOAD 命令有其他选项可以避免这种情况,但是这些选项超出了本文的范围。更多信息请参见 DB2 Information Center 中对 LOAD 命令的说明(参见 参考资料)。
清单 5. 执行 LOAD FROM CURSOR 操作把 SALES 表中的所有行复制到 SALES_TMP 表
在把 SALES 表中的所有行成功地复制到 SALES_TMP 表之后,可以删除源表(DROP TABLE 语句)。然后,把目标表 SALES_TMP 重命名为 SALES(RENAME TABLE 语句)。在使用 RENAME TABLE 时,只能修改表名,而不能修改表的模式名。因此,一定要在正确的模式中创建 SALES_TMP 表。
清单 6. 删除源表 SALES 并重命名目标表 SALES_TMP
再次对 DB2 编目视图执行查询,可以确认 SALES 表已经从原来的表空间 USERSPACE1 转移到了新的表空间 IBMDB2SAMPLEREL 中,见清单 7。
清单 7. 确认新 SALES 表的表空间
DB2 LOAD Linux Unix Windows 数据转移 相关文章:
- IBM DB2 数据复制迁移方法(05-01)
- 避免数据库开发者常犯的十大错误(05-18)
- DB2 9实例 完美诠释混合型数据库优势(05-15)
- 创建访问 DB2 Everyplace 的 JSP 应用程序 (05-18)
- DB2数据库归档日志的管理方案 (05-18)
- 为 SAP 安装多个 DB2 9数据库服务器(05-20)