ALTER DATABASE
通过使用 ALTER DATABASE 语句,您可以更改现有数据库。 与 CREATE DATABASE 语句不同,不存在缺省值。
调用
可以从 Java™ 应用程序提交此语句,并通过 IMS 通用 JDBC 驱动程序与 IMS 建立连接。 这是一个无法动态准备的可执行语句。对数据库执行ALTER操作时,若未进行任何结构变更,则扩展操作数将写入暂存目录。 这可能会导致后续的导入操作失败。 若使用数据定义实用程序( DFS3ID00 ),请指定PSBREBUILD控制选项,并提交'ALTER DATABASE 数据库名'的DDL语句(该数据库需与先前修改的数据库相同),以触发PSB重建,随后重新执行导入操作。
PHIDAM 语法
HDAM 语法
HIDAM 语法
PHDAM 语法
GSAM 语法
HISAM 语法
SHISAM 语法
DEDB 语法
HSAM 语法
SHSAM 语法
LOGICAL 语法
INDEX 语法
PSINDEX 语法
描述
以下关键字参数是为 ALTER DATABASE 语句定义的:- database_name
- CCSID "encoding"
- 可选的 1 到 25 个字符的字段,用于指定此数据库中所有字符数据的缺省编码。 CCSID 将作为元数据存储在目录中。 OpenDatabase/JDBC 驱动程序使用这些元数据来准备具有适当编码类型的结果集。此值不能包含以下字符:
- 单引号和双引号
- 空白
- 小于 (< ) 和大于 ( >) 符号
- & 符
可以在各个段或字段中覆盖此值。
- DATA CAPTURE
- 在 CREATE DATABASE 语句上指定 DATA CAPTURE 时,这些选项将应用于物理数据库中的所有表。 如果在 CREATE 或 ALTER TABLE 语句中指定此参数,那么它将覆盖此语句的规范。
以下物理数据库支持 DATA CAPTURE:
- HISAM
- 轮班
- HDAM
- PHDAM
- HIDAM
- 菲丹
- DEDB
- NONE
- 指示无数据捕获选项。
- 更改
- 您可以指定任意数目的出口例程,每个出口例程都有自己的一组更改选项。 如果您不提供出口例程,那么它们只能为日志记录指定 1 个更改选项集。 此方法等价于在 DBD 宏语句中的 EXIT = 参数上指定星号 (*) 来代替出口例程名称。 每个集合都用逗号分隔。 NOCASCADE 与 C* (例如, CKEY) 选项的任意组合互斥。
以下选项对 DATA CAPTURE CHANGES 有效:
- 前 | 之前
- 在数据包含在 REPL 调用的 X' 99 ' 日志记录中之前。 NOBREE 是缺省值。 此属性仅对 DEDB 有效。
- cdata | cnodata
- 将段数据传递到出口例程以进行级联删除。 CDATA 还标识在物理并置键无法执行此操作时要删除的段。 此属性与 NOCASCADE 互斥。
- CKEY | CNOKEY
- 将物理并置键传递到出口。 此键标识要由级联删除操作删除的段。 此属性与 NOCASCADE 互斥。
- cnopath | cpath
- 指示出口例程不需要物理根的分层路径中的分段数据。 使用 CNODATA 消除级联删除所需要的大量路径数据。 此属性与 NOCASCADE 互斥。
- 数据 | NODATA
- DATA 指定将物理表数据传递至出口例程以进行更新。 如果指定了 DATA 并且在表上也使用了 EDITPROC 出口例程,那么传递的数据是扩展数据。 DATA 是缺省值。
- 点头 | DLET
- 为 DLET 调用写入 X' 99 ' 日志记录。 NODLET 是缺省值。 此属性仅对 DEDB 有效。
- 出口名称
- 指定处理数据的出口例程的名称。 该名称必须与用户向 IMS定义的数据捕获出口例程的名称相匹配。 最多允许 8 个字母数字字符。
- 键 | NOKEY
- KEY 指定将物理并置键传递到出口例程。 此键标识由应用程序更新的物理表。 KEY 是缺省值。
- NOCASCADE
- 指示在 DL/I 删除此段时不调用出口例程。 当删除不带从属项的段时,无需进行级联删除。
- NOFLD | FLD
- 将捕获由 DEDB FLD 调用进行的更新的 FLD 选项请求。 此选项仅对 DEDB 有效,并且仅当指定了选项日志时,此信息才记录在 X' 9904 ' 日志记录中。 不会将此信息传递到数据捕获出口。 此属性仅对 DEDB 有效。
- noinpos | inpos
- INPOS 选项请求在使用 HERE 的插入规则且不使用 F 或 L 命令代码时,对非键控或非唯一键控段执行 ISRT 时传递孪生数据。 在将捕获 ISRT 之前,孪生数据 IMS 将定位在该时间。
- 无日志 | 日志
- LOG 选项请求将数据捕获控制块和数据写入到 IMS 系统日志中。
- NOPATH | 路径
- nOPATH 指示出口例程不需要物理根的分层路径中的表中的数据。 NOPATH 是避免检索路径数据所需要的处理时间的有效方法。 NOPATH 是缺省值。
当必须将来自物理根的分层路径中每个段的数据传递到已更新段的出口例程时,可以指定 PATH。 使用 PATH 以允许应用程序单独访问多个要插入,替换或删除的段。
当需要来自路径中的表的信息来组成 DB2® for z/OS 主键时,可以使用 PATH 选项。 然后,将在从属表更新的传播请求中使用 DB2 for z/OS 主键。 通常,如果父代包含密钥信息,并且从属项包含不适合父表的其他数据,那么您需要此类型的表信息。
您还可以在需要进行其他处理时使用 PATH。 可能是您不是通过一次调用来访问多个表; 例如,您未调用 D 命令代码。 在这种情况下,如果应用程序要通过单独调用来访问每个表,那么需要进行额外处理。
- nosspcmd | sspcmd
- 该 SSPCMD 选项请求捕获 DEDB 子集指针命令代码。 此选项仅对 DEDBs 有效。
- datxexitno | datxexityes
允许数据转换用户出口例程 (DFSDBUX1) 在应用程序处理此数据库时由应用程序使用。
如果指定了 YES ,那么将在每个数据库调用的开头和结束时调用用户出口 DFSDBUX1 。 如果未装入 DFSDBUX1 ,那么将调用 IMODULE 以将其装入。
如果指定了 NO ,那么可以调用用户 DFSDBUX1 ,但前提是 DFSDBUX1 位于 SDFSRESL 中。 如果对于数据库定义不需要再次调用 DFSDBUX1 ,那么会在 JCB 中的 SRCHFLAG 字段中返回 X'FF ' ,并且 DFSDLA00 会动态地将数据库定义标记为不需要退出。 在此情况下,除非从 DMB 池中清除 DMB ,否则在 IMS 会话的持续时间内不会再次调用该数据库定义的用户出口。
- DBVER
- 范围在 0 到 2147483647 之间的数字值,用于标识特定版本的 DBD。 指定数字值会驱动 IMS 以生成可供不同应用程序使用的新版本 DBD。
- 如果指定的版本号不是 IMS 目录中的当前活动版本的增量,那么 ALTER 将失败。
- 如果指定的版本号已存在于 IMS 目录中,而不是当前版本中,那么 ALTER 将失败。
- 如果指定的版本号是当前的现行版本,那么 IMS 将生成该 DBD 版本的新实例。
您还可以指定以下数字版本号,而不是数字版本号:- DBVER 自动
- AUTO 驱动 IMS 以根据保存在 IMS 目录中的当前现行版本号自动递增版本号。
- 当前 DBVER
- 当前驱动器 IMS ,用于对当前活动 DBD 执行 ALTER 操作。 DBVER CURRENT 是缺省值。
- doscompno | doscompyes
- 指示这是否是 DLI/DOS 索引数据库。 如果数据库是索引,那么必须指定它,并且它是使用 DLI/DOS 创建的。 DLI/DOS 索引数据库包含作为前缀的一部分的段代码。 指定数据库为 DLI/DOS 索引数据库会导致 IMS 期望此代码出现在已定义的数据库中,并以保留此代码的方式进行处理。 这包括为正在插入的新段提供段代码。 DLI/DOS数据库必须采用 VSAM 格式,不可使用PHDAM、PHIDAM或PSINDEX数据库。
- fpindexno | fpindexyes
- 指定索引数据库是否为主 "快速路径" DEDB 数据库的辅助索引。
- passwdno | passwdyes
- 指定PASSWDYES参数将使DL/I在为该数据库打开任何数据集时,使用数据库名称作为 VSAM 密码。 此参数仅适用于使用 VSAM 作为访问方法的数据库。 您不能使用数据库名称作为 LOGICAL 或 DEDB 数据库类型的密码。 当用户使用 z/OS® 访问方法服务的DEFINE语句为该数据库定义 VSAM 数据集时,控制级密码(CONTROLPW)或主级密码(MASTERPW)必须与该DBD的DBDNAME相同。 与此 DBD 关联的所有数据集都必须使用相同的密码。
对于 IMS 的DB/DC系统,所有 VSAM 的OPEN操作均绕过密码验证,从而避免操作员密码提示。 对于 IMS 数据库系统,将执行 VSAM 密码验证。 在批处理环境中,如果未指定自动密码保护,并且数据集在控制级别 (CONTROLPW) 受密码保护,并且密码不等于数据库名称,那么会出现操作员密码提示。
- protyes | protno
指定辅助索引数据库是否使用索引指针保护。 此可选参数确保 IMS所使用的索引指针段中的所有字段的完整性。 使用此参数将阻止应用程序对索引指针段中的任何字段执行替换操作,但索引指针段的用户数据部分中的字段除外。 仍对索引指针段启用删除操作。 如果对索引指针段发出了删除操作,那么将删除索引指针段中的索引目标段指针。 但是,最初导致创建索引指针段的索引源段未被删除。
如果未使用索引指针保护,那么应用程序可以替换除常量,搜索和子序列字段之外的索引指针段中的所有字段。 在所有条件下,对索引数据库的插入无效。
- PSNAME 名称
- 指定选择 HALDB 分区以用于 PSINDEX , PHDAM 或 PHIDAM 数据库的模块。 该参数是 HALDB 分区选择出口例程模块名称。 仅当数据库的访问类型为 PSINDEX , PHDAM 或 PHIDAM 时,此参数才有效。异常: 如果根键范围定义了 HALDB 分区成员资格,那么不需要用户提供的 HALDB 分区选择例程。
- RMNAME 名称
- 指定一个模块名称,用于管理存储在 DEDB 或 HDAM 或 PHDAM 数据库的主数据集组中的数据。 仅当数据库访问类型为 HDAM , PHDAM 或 DEDB 时,此参数才有效。 随机化模块控制在 DEDB , HDAM 或 PHDAM 数据库中的根段位置或从该数据库检索。 在 IMS 系统中,可以使用一个或多个称为随机化模块的模块。 一个特定的数据库只有一个随机化模块与之相关联。 可将使用用户提供的参数对特定数据库执行随机化的通用化模块写入服务多个数据库。 随机化模块的目的是将应用程序提供的用于在 DEDB , HDAM 或 PHDAM 数据库中进行根段放置或检索的值转换为相对块号和锚点号。 您可以在区域内进行随机化,方法是选择两阶段随机化器或单阶段随机化器(适用于仅包含单一区域的DEDB数据库)。 当您选择两级或单级随机化器时,可通过命令 /DBRECOVERY 调整区域内的根锚点数量,而无需停止DEDB中的所有区域。
对于 PHDAM 数据库,随机器模块名称和值将成为每个分区的缺省值。 您可以在 HALDB 分区定义期间为每个分区设置不同的随机器名称和值。 HALDB 分区选择是在调用随机化模块之前完成的。 随机化模块仅选择分区中的位置。
- RMANCH 数目
- 根据您是定义快速路径 DEDB 数据库,还是定义全功能的 HDAM 或 PHDAM 数据库, anch 值的用途有所不同。
此参数必须是无符号十进制整数。
对于 DEDB 数据库, 安奇 的值指定随机化程序的类型。 值为 1 表示单阶段随机生成器。 2 值为 2 表示两阶段随机器。 任何其他值都无效。
对于 HDAM 和 PHDAM 数据库, 安奇 的值指定在 HDAM 或 PHDAM 数据库的根可寻址区域的每个控制区间或块中期望的根锚点的数量。 典型 1 为 1 到 5 ,并且值不能超过 255。
在访问 HDAM 或 PHDAM 数据库时,如果用户随机化例程生成的锚点数大于为此参数指定的数字,那么将使用控制区间或块中编号最高的锚点。 当随机化例程生成 IMS 锚点数为零时, IMS 将在控制区间或块中使用锚点 1。
- RMRBN 数目
- 指定您要允许随机化模块为此数据库生成的最大相对块号值。 此参数仅适用于 HDAM 或 PHDAM 数据库。 此值确定 HDAM 或 PHDAM 数据库的根可寻址区域中的控制区间或块的数量。 此 2 必须是无符号十进制整数,其值不超过 224-1。 如果省略此参数,那么不会对由随机化模块创建的相关块号执行上限检查。 如果指定了此参数,但指定的随机化模块生成的相对块号大于此参数,那么 IMS将使用根可寻址区域中的最高控制区间或块。 如果用户随机化模块生成的块数为零,那么 IMS将使用控制区间或块 1。
在 HDAM 或 PHDAM 数据集中,第一个位图位于数据集的第一个扩展数据块的第一个块中。 在 HDAM 或 PHDAM 数据库中,为每个数据集组指定的数据集的第一个扩展数据块的第一个控制区间或块用于位映射。 在 VSAM 数据集中,第二个控制间隔用于位图,而第一个控制间隔被保留。 IMS 将随机数生成器计算出的区块号加一。
- RMBYTES 数目
- 指定可存储在根可寻址区域中的数据库记录的最大字节数,通过调用另一个数据库记录来进行一系列未中断的插入。 此参数仅适用于 HDAM 和 PHDAM 数据库。 如果省略此参数,那么不会对可插入到该数据库的根段可寻址区域中的数据库记录的最大字节数施加限制。 bytes 参数必须是一个无符号 2 整数,其值不超过 224-1。 当省略最大相对块号参数时,将忽略此参数。 在这种情况下,对于可以插入到根可寻址区域中的数据库记录的字节数没有限制。
如果对 HDAM 或 PHDAM 数据库指定此参数,并且数据库记录的长度较大,那么会将该记录的剩余部分插入到当前文件结束 (EOF) 之后的溢出区域中。 此操作要求在当前 EOF 之后有足够的空间可用,以包含超过此参数值的所有数据库记录的剩余部分。 如果在当前 EOF 之后的溢出区域中没有足够的空间可用,那么将在数据库中随机插入数据库记录。
- XCINO | XCIYES
- 指定此 DEDB 在对随机器进行调用时是否使用扩展调用接口。 此选项允许以三种不同的方式调用随机化器。 在初始化 IMS 时或在 /START DB 命令期间, IMS 将首先装入随机器,然后对随机器进行 INIT 调用以调用其初始化例程。 在 /DBR DB 命令期间, IMS 将对随机化器进行 TERM 调用,以在卸载随机化器之前调用终止例程。 当应用程序对根段发出 GU 或 ISRT 调用时,会对随机器进行正常的随机化调用。 仅对于 DEDB , XCI 选项才有效。
- 版本 "version_identifier"
- 指定版本标识字符串。 您可以使用此标识在对 IMS 目录的后续查询中区分资源的版本。
使用说明
因为 ALTER DATABASE 语句将数据库修改为 IMS,所以如果在 ALTER DATABASE 语句上指定的数据库不存在,那么该语句将失败并显示 -9000 消息。
数据库版本控制说明
ALTER DATABASE 在其自己的 DDL 流中更改现有 DBD。 数据库版本控制是可选的。 要针对当前版本实施更改,请在 DBVER 关键字上提供当前版本号。 您还可以指定 "DBVER CURRENT" ,并且 IMS 将为其标识当前处于活动状态的版本号。
要生成新版本,请在 DBVER 关键字上提供下一个版本号。 提供的版本号必须是当前处于活动状态的数据库版本的增量。
要自动分配 DBD 上的版本号,请指定 "DBVER AUTO"。 DDL 将临时将 INIT 令牌分配为版本号。 此分配处理多个工作站正在实现不同 DBD 更改的情况。
您可以选择指定 CREATE PROGRAMVIEW 以生成新的 PSB。 作为此流的一部分,在 PCB 上指定 "DBVER AUTO" 以使其锁定到正在生成的相同版本号。 当在 IMS 系统中激活 DDL 流中的更改时, IMS 会将版本号分配给 DBD 和 PSB。
如果从 ALTER DATABASE 语句中省略了 DBVER 关键字,那么 IMS 将针对 IMS 目录指示的当前活动数据库版本实现更改。
示例: 全功能数据库
DBD 生成实用程序的以下输入将创建基本全功能数据库:
用于定义新数据库的原始 DBD 源。
DBD NAME=COGDBD, C
ENCODING=Cp1047, C
ACCESS=(HDAM,VSAM), C
RMNAME=(DFSHDC40,3,3,25), C
PASSWD=NO, C
VERSION=’Latest version of COGDBD’
以下示例是与 DBD 源等效的 DDL。
CREATE DATABASE COGDBD
ACCESS HDAM VSAM
RMNAME(DFSHDC40 RMANCH 3 RMRBN 3 RMBYTES 25)
VERSION ‘Latest version of COGDBD’
CCSID 'Cp1047';
用于提供另一个随机器 PASSWD 和 VERSION 的 DBD 源。
DBD NAME=COGDBD, C
ENCODING=Cp1047, C
ACCESS=(HDAM,VSAM), C
RMNAME=(DFSHDC20,3,3,25), C
PASSWD=YES, C
VERSION=’Latest version of COGDBD’
以下示例是与 DBD 源等效的 DDL。
ALTER DATABASE COGDBD
RMNAME(DFSHDC20 RMANCH 3 RMRBN 3 RMBYTES 25)
PASSWDYES
VERSION ‘Latest version of COGDBD’
示例: 快速路径数据条目数据库 (DEDB)
与上一个示例类似,可以将以下输入提交给 DBD 生成实用程序以创建 DEDB:
用于定义数据库的原始 DBD 源:
DBD NAME=HOSPDBD1, C
ENCODING=Cp1047, C
ACCESS=(DEDB), C
RMNAME=(RMOD3,1,,,XCI) C
PASSWD=NO
以下示例是与 DBD 源等效的 DDL。
CREATE DATABASE HOSPDBD1
ACCESS DEDB
RMNAME( RMOD3 RMANCH 1 XCIYES)
CCSID 'Cp1047';
COMMENT ON DATABASE HOSPDBD1 IS 'This describes database HOSPDBD1.'
DBD 源更改,以提供不同的随机化程序, XCI ,编码和新注释。
DBD NAME=HOSPDBD1, C
ENCODING=Cp943C, C
ACCESS=(DEDB), C
RMNAME=(FPERNDM0,1,,,) C
PASSWD=NO
以下示例是与 DBD 源等效的 DDL。
ALTER DATABASE HOSPDBD1
RMNAME(FPERNDM0 RMANCH 1 XCINO)
CCSID 'Cp943C';
COMMENT ON DATABASE HOSPDBD1 IS 'Implemented change to database HOSPDBD1.'
