DB2 10.5 for Linux, UNIX, and Windows

升级数据库

将实例升级到 DB2® V10.5 之后,必须升级每个实例中的每个数据库。

开始之前

  • 确保您具有 SYSADM 权限。
  • 确保已对要升级的所有本地数据库进行编目。
  • 确保已按照DB2 服务器的升级前任务中所指示那样备份数据库。
  • 确保已安装 DB2 V10.5 并且已将实例升级到 DB2 V10.5

限制

过程

要将 DB2 数据库升级到 DB2 V10.5

  1. 作为实例所有者或具有 SYSADM 权限的用户登录 DB2 服务器。
  2. 可选: 重命名或删除 db2diag 日志文件,以便创建新文件。此外,除去 diagpath 参数所指示的目录中的任何现有转储文件、陷阱文件和警报日志文件,或者将这些文件移至另一个目录。这样,文件中将只包含有关升级过程的信息,这些信息可以帮助您找出和了解在数据库升级期间可能遇到的任何问题。
  3. 可选: 发出 db2 LIST DATABASE DIRECTORY 命令,以确保数据库在当前实例中的所有已编目数据库的列表中。
  4. 使用 UPGRADE DATABASE 命令来升级数据库:
       db2 UPGRADE DATABASE database-alias USER username USING password
    其中 database-alias 是要对其进行升级的数据库的名称或别名,而 username 和 password 用来认证一个用户是否具有 SYSADM 权限。

    要避免自动重新绑定的开销,请考虑使用 REBINDALL 参数,它指定升级期间对所有程序包都执行 REBIND

  5. 如果 UPGRADE DATABASE 命令失败并且返回了 SQL1704N 错误消息和用来描述故障原因的原因码,请找到此 SQL 错误代码并从针对每个原因码可采用的解决方案列表中确定要执行的操作。 导致升级失败的一种最常见原因是日志文件空间不够大,在这种情况下将返回以下错误:
    SQL1704N  数据库升级失败。原因码为“3”。
    必须增大日志文件大小并再次执行 UPGRADE DATABASE 命令。完成数据库升级之后,将数据库配置参数 logfilsizlogprimarylogsecond 的值复位。

    数据库升级不支持 UPGRADE DATABASE 命令在特定情况下返回的其他错误代码。升级限制中描述了这些情况。

  6. 如果 UPGRADE DATABASE 命令返回警告消息 SQL1243W,那么必须删除或重命名 SYSTOOLS.DB2LOOK_INFO 表。 否则,ALTER TABLE 和 COPY SCHEMA 语句将运行失败。 通过运行以下命令检查 SYSTOOLS.DB2LOOK_INFO 表是否存在:
       db2 "SELECT tabname, tabschema, definer FROM syscat.tables 
                        WHERE tabschema = 'SYSTOOLS' AND tabname= 'DB2LOOK_INFO' "
    如果已经创建了此表,那么通过运行 RENAME 语句将它重命名:
       db2 RENAME SYSTOOLS.DB2LOOK_INFO TO new-table-name
    如果尚未创建此表,那么通过运行 DROP 命令将它除去:
       db2 DROP TABLE SYSTOOLS.DB2LOOK_INFO
  7. 如果 UPGRADE DATABASE 命令返回警告消息 SQL1499W 并将警告消息 ADM7535W 以及所有详细信息写入管理通知日志,那么该命令未能刷新目录表中的表空间属性。 但是,已成功升级数据库。
  8. 如果 UPGRADE DATABASE 命令返回警告消息 SQL1499W 并将警告消息 ADM4003E 以及所有详细信息写入管理通知日志,那么由于存储过程中的错误,该命令未能升级 DB2 Text Search 目录或索引。
  9. 如果 UPGRADE DATABASE 命令返回警告消息 SQL1499W 并将警告消息 ADM7534W 以及所有详细信息写入管理通知日志,那么该命令未能刷新目录表中的表空间属性。 但是,已成功升级数据库。
  10. 如果 UPGRADE DATABASE 命令返回警告消息 SQL1499W 并将警告消息 ADM4102W 写入管理通知日志,请在 SQL 语句中使用引号来限定或定界 NULL 标识,以避免与 NULL 关键字发生冲突。
  11. 如果 UPGRADE DATABASE 命令返回警告消息 SQL1499W 并将警告消息 ADM4102W 写入管理通知日志,请在 SQL 语句中使用引号来限定或定界 NULL 标识,以避免与 NULL 关键字发生冲突。

    如果您对 SQL 语句中的列名、例程参数名或变量名使用了未用引号完全限定或定界的 NULL 标识,那么此标识名可能会被解析为 NULL 关键字。这将导致行为与先前发行版中的行为不同。请参阅数据库应用程序的升级基本要求 以了解详细信息。

  12. 如果 UPGRADE DATABASE 命令返回警告消息 SQL1499W 并将警告消息 ADM9516W 写入管理通知日志,请验证 indexrec 配置参数是否设置为 RESTART,并发出 RESTART DATABASE 命令以重建在数据库升级期间被标记为无效的索引。 否则,当您首次访问表时将开始重建索引,并且您可能会遇到响应时间意外延长。
  13. 如果 UPGRADE DATABASE 命令返回错误消息 SQL0473N,那么必须对数据库进行逆向迁移,然后使用另一个不受限制的名称来重新创建所有使用系统内置数据类型名称的用户定义的数据类型。

    为了避免 UPGRADE DATABASE 命令失败,请在验证数据库是否已准备好进行升级期间重新创建这些用户定义数据类型。

  14. 如果 UPGRADE DATABASE 命令返回错误消息 DBT5512,那么由于工作负载管理对象的标识与系统保留的标识冲突,该命令未能升级数据库。要升级数据库,请执行下列操作:
    1. 通过发出带有 -wlm 参数的 db2look 命令来生成 DDL 语句以重新创建工作负载管理对象。
    2. 从数据库中删除所有工作负载管理对象。
    3. 解决 db2ckupgrade 命令报告的所有问题并阻止升级数据库。
    4. 升级数据库。
    5. 通过发出使用 db2look 命令生成的 DDL 语句,在已升级的数据库中重新创建工作负载管理对象。
  15. 如果 UPGRADE DATABASE 命令返回错误消息 SQL1700N,那么必须对数据库进行逆向迁移,然后使用一个不受限制的模式名来重新创建那些使用受限制模式名的数据库对象。

    为了避免 UPGRADE DATABASE 命令失败,请在验证数据库是否已准备好进行升级期间重新创建这些数据库对象

  16. 如果 UPGRADE DATABASE 命令返回错误消息 ADM4003E,请手动升级 DB2 Text Search 目录和索引。 有关详细信息,请参阅 SYSTS_UPGRADE_CATALOGSYSTS_UPGRADE_INDEX
  17. 将完成升级之后的数据库配置设置与升级数据库之前的配置设置进行比较。验证下列设置和数据库信息是否相同:
    • 数据库配置参数设置
    • 表空间信息
    • 仅适用于应用程序的程序包信息

    不需要检查系统生成的程序包的程序包信息。可以在升级之后更改有关由系统生成的程序包的信息。
  18. 验证数据库升级是否成功。连接至已升级的数据库并发出以下简单查询:
          db2 connect to sample
    
         Database Connection Information
    
        Database server        = DB2/AIX64 10.1.0
        SQL authorization ID   = TESTDB2
        Local database alias   = SAMPLE
    
       db2 “select * from syscat.dbauth”
    或者,如果已安装样本文件,请运行 testdata.db2 脚本:
       cd samplefile-dir-clp
          db2 connect to sample
          db2 -tvf testdata.db2
    其中 samplefile-dir-clp 在 Linux 和 UNIX 上为 DB2DIR/samples/clp,而在 Windows 上为 DB2DIR\samples\clpDB2DIR 表示在安装 DB2 V10.5 期间指定的位置,而 sample 是数据库名称。

下一步做什么

在升级 DB2 数据库之后,请执行建议的升级后任务,以确保成功完成数据库升级。