DB2 9.7数据库在线模式变更指南

我们今天主要向大家描述的是在修改数据库对象时最小化计划内宕机 DB2 9.7数据库在线模式变更,我们大家都知道IBM® DB2® 9.7 引入了新的增强,允许您更改数据库对象,同时确保在修改数据库期间用户可以完全访问这些对象。

这些增强允许数据库管理员在不影响用户的情况下动态地对数据库模式进行重要修改。本文提供了若干示例,演示如何使用 ALTER TABLE 命令重命名列、修改列数据类型,以及使用 ADMIN_MOVE_TABLE 例程移动表。其他示例演示了如何使用 ADMIN_MOVE_TABLE 例程移动和修改表,同时保持可访问性。

概述

本文提供了有关使用 DB2 9.7 新增强的指南,使您能够对数据库模式进行在线 更改。在线更改意味着被修改的对象仍然可以进行读写访问,甚至在修改期间也是这样。

其中一些特定的新功能包括:

使用 ALTER TABLE 语句在线重命名列。

OR REPLACE 作为选项被添加到多个 CREATE 语句中。

 

为视图和内联 SQL 函数添加了带有错误支持的 CREATE。

 

扩展了 ALTER COLUMN SET DATA TYPE 支持。

 

可以使用 ADMIN_MOVE_TABLE 例程在线修改和移动表。

 

先决条件和系统需求

 

本文专门为 DB2 数据库管理员编写。您应当理解表空间、表和列的基本概念。

要使用本文的示例,您必须安装 DB2 9.7 for Linux, UNIX, and Windows。使用 参考资料 小节提供的链接下载 DB2 9.7 for Linux, UNIX, and Windows 的免费试用版。

为使用示例做准备

要使用演示 DB2 的新的在线模式变更功能的示例,首先需要创建一个用作必要基础设施的样例数据库。示例使用了 DB2 SAMPLE 数据库。如果尚未创建 DB2 SAMPLE 数据库,那么请按照 DB2 Information Center 的 “The SAMPLE database” 一文中的说明创建数据库(见 参考资料 小节获得链接)。

一旦创建了 SAMPLE 数据库后,遵循这些步骤创建必要的表和数据,供示例使用:

使用以下命令,根据模拟客户信息的系统目录创建一个表:

清单 1. 创建 CUSTOMER_INFO 表

 

  1. CREATE TABLE CUSTOMER_INFO(   
  2. customer_id INTEGER NOT NULL,   
  3. first_name VARCHAR(128) NOT NULL,   
  4. last_name VARCHAR(128),  
  5. address_street VARCHAR(128),   
  6. address_city VARCHAR(128),  
  7. address_state VARCHAR(25),   
  8. address_country VARCHAR(30),  
  9. age VARCHAR(2),  
  10. customer_type VARCHAR(10),  
  11. CONSTRAINT customer_id_pk PRIMARY KEY (customer_id)  
  12. )   
  13. IN USERSPACE1; 

使用以下命令,用来自系统目录的虚构信息向 CUSTOMER_INFO 表填充数据:

 

清单 2. 填充 CUSTOMER_INFO 表

 

  1. INSERT INTO customer_info  
  2. SELECT   
  3. ROW_NUMBER() OVER () as customer_id ,   
  4. RTRIM(a.tabschema) as first_name,   
  5. RTRIM(a.tabname) as last_name,   
  6. CAST(a.colno AS VARCHAR(3)) || ' ' ||   
  7. RTRIM(a.colname) as address_street,   
  8. RTRIM(a.tabname) as address_city,  
  9. RTRIM(a.TYPENAME) as address_state,   
  10. RTRIM(a.TABSCHEMA) as address_country,   
  11. CAST(CAST(sysfun.rand()*50 AS INTEGER)+1 AS VARCHAR(2)) as age,   
  12. CASE WHEN MOD(CAST(sysfun.rand()*50 AS INTEGER),3)=0 THEN 'New'   
  13. ELSE 'Existing'   
  14. END AS type  
  15. FROM   
  16. syscat.columns a  
  17. ORDER BY   
  18. sysfun.rand();  

在***一步中,您在 CUSTOMER_INFO 表的基础上创建了一个视图和函数。

 

注意创建对象时使用的顺序。您首先创建 EXISTING_CUSTOMERS 视图,然后创建视图所依赖的 FULL_NAME 函数。这一点非常重要,因为在默认情况下,这将造成 CREATE OR REPLACE VIEW 语句失败,并发生 SQL0440N 错误。

然而,从版本 9.7 开始,您可以配置 DB2 来允许创建具有某些错误类型(比如缺失依赖对象)的对象。这个功能对于数据库对象的创建、设计和修改都很有用,因为它允许您按照随机的顺序使用 CREATE 命令。您还可以检查新的视图和过程的语法,而不需要创建所依赖的对象。

要启用这个特性,需要使用以下命令修改 AUTO_REVAL 动态数据库配置参数,将值设置为 DEFERRED_FORCE。

 

清单 3. 设置 AUTO_REVAL 配置参数

  1. db2 update db cfg using AUTO_REVAL DEFERRED_FORCE  

修改该参数后,在创建 EXISTING_CUSTOMER 视图时,将收到一个 SQL20480W 警告,并且视图最初被标记为无效。然而,如果视图所依赖的函数在下一次使用视图时仍然存在,那么该视图将被自动重新进行验证。

 

使用以下命令创建新的视图和函数。注意,这些命令利用了新的 CREATE OR REPLACE 语法,此语法适用于函数、过程、视图、模块、别名、触发器、变量和昵称。顾名思义,这个语法创建对象,如果对象已存在的话,那么将替代对象。换言之,对于已经存在的对象,它将在同一个命令中结合使用 DROP 和 CREATE,并保留分配给该对象的已有特权。

 

清单 4. 创建函数和视图

  1. CREATE OR REPLACE VIEW existing_customers AS  
  2. SELECT full_name(customer_id) AS full_name, address_city, address_state   
  3. FROM customer_info   
  4. WHERE customer_type='Existing';  
  5. CREATE OR REPLACE function full_name(p_customer_id INTEGER)   
  6. RETURNS VARCHAR(100)   
  7. return   
  8. SELECT first_name || ', ' || last_name   
  9. FROM customer_info   
  10. WHERE customer_id=p_customer_id;  

对表定义进行在线修改

 

DB2 9.7 新增的两项重要增强均与在线修改表定义相关:

首先,可以以在线的方式重命名列,同时仍可以针对表运行工作负载,不会对用户产生任何干扰。

其次,DB2 9.7 扩展了它修改已有表中的列数据类型的支持。

 

下面的示例演示了如何使用 ALTER TABLE 命令重命名一个列,同时保持表具有完整的可访问性:

 

清单 5. 重命名列的示例

 

  1. ALTER TABLE customer_info RENAME COLUMN age TO customer_age ;  

ALTER TABLE 语句中的 ALTER COLUMN SET DATA TYPE 选项进行了扩展,可以支持所有兼容的类型。例如,现在可以修改一个数据类型为 INTEGER 的列,从而拥有一个 VARCHAR 数据类型,或者将数据类型从 TIMESTAMP 修改为 DATE。参考 DB2 Information Center 中的 “Casting between data types” 一文,获得兼容数据类型的完整列表(见 参考资料 小节获得链接)。

 

在使用 ALTER COLUMN SET DATA TYPE 选项执行 ALTER TABLE 操作期间,DB2 将执行一次完整的验证,确保列数据与新数据类型兼容,并且没有发生截断、外溢或任何其他类型的错误。列默认值也进行了验证,确保它们遵守新的数据类型。如果列类型和数据内容是兼容的,那么就能够成功更改数据类型。否则,ALTER 命令将返回一个错误。

以下示例演示了如何将名为 customer_age from VARCHAR(2) 的列的数据类型修改为 SMALLINT:

清单 6. 修改列类型

 

  1. ALTER TABLE customer_info ALTER COLUMN customer_age SET DATA TYPE SMALLINT;  

大多数情况下,ALTER SET DATA TYPE 需要对表执行重组(reorg),因为它修改了物理行格式。可以使用 ADMIN_REVALIDATE_DB_OBJECTS 例程来自动判断是否需要对表执行重组:

 

清单 7. 对表进行重新验证

 

  1. CALL ADMIN_REVALIDATE_DB_OBJECTS('TABLE', 'DB2INST1', 'CUSTOMER_INFO');  

如果需要在修改列数据类型期间对数据库执行写访问,可以使用下一小节描述的 ADMIN_MOVE_TABLE 例程。

 

 

以上的相关内容就是对在修改数据库对象时最小化计划内宕机 DB2 9.7在线模式变更的介绍,望你能有所收获。

【编辑推荐】

  1. DB2 数据类型如何才能轻松接触?
  2. DB2v9.5控制中心建库报错如何挽救?
  3. IBM DB2数据库错误信息的大集合,不得不看!
  4. 降低DB2管理表空间的高水位标记实操
  5. 3个建议实现DB2数据库设计,很简单!

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/301182.html<

(0)
运维的头像运维
上一篇2025-05-24 05:24
下一篇 2025-05-24 05:25

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注