變更資料庫
您可以使用 ALTER DATABASE 陳述式來變更現有的資料庫。 與 CREATE DATABASE 陳述式不同,沒有預設值。
呼叫
此陳述式可以從 Java™ 應用程式提交,並透過 IMS Universal JDBC 驅動程式建立與 IMS 的連線。 它是無法動態準備的可執行陳述式。PHIDAM 語法
HDAM 語法
HIDAM 語法
PHDAM 語法
GSAM 語法
HISAM 語法
SHISAM 語法
DEDB 語法
HSAM 語法
SHSAM 語法
邏輯語法
INDEX 語法
PSINDEX 語法
說明
下列是針對 ALTER DATABASE 陳述式所定義的關鍵字參數:- database_name
- CCSID 'encoding'
- 1 到 25 個字元的選用欄位,指定此資料庫中所有字元資料的預設編碼。 CCSID 會儲存為型錄中的 meta 資料。 OpenDatabase/JDBC 驅動程式使用此 meta 資料來準備具有適當編碼類型的結果集。此值不能包含下列字元:
- 單引號和雙引號
- 空白
- Less than (< ) and greater than ( >) symbols
- &符號
在個別區段或欄位中可以置換此值。
- DATA CAPTURE
- 在 CREATE DATABASE 陳述式上指定 DATA CAPTURE 時,這些選項會套用至實體資料庫內的所有表格。 如果您在 CREATE 或 ALTER TABLE 陳述式中指定此參數,它會置換此陳述式的規格。
下列實體資料庫支援 DATA CAPTURE:
- HISAM
- SHISAM
- HDAM
- PHDAM
- HIDAM
- PHIDAM
- DEDB
- 無
- 指示無資料擷取選項。
- 變更
- 您可以指定任意數目的結束常式,每一個都有自己的一組變更選項。 如果您未提供結束常式,則它們只能指定 1 組變更選項來進行記載。 此方法相當於在 DBD 巨集陳述式中的 EXIT = 參數上指定星號 (*) 來取代結束常式名稱。 每一個集合都以逗點區隔。 NOCASCADE 與 C* (例如, CKEY) 選項的任何組合互斥。
下列選項適用於 DATA CAPTURE CHANGES:
- NOPREVER | 之前
- 在 REPL 呼叫的 X' 99 ' 日誌記錄中包含資料之前。 NOPREVITER 是預設值。 此屬性僅適用於 DEDB。
- CDATA | CNODATA
- 將區段資料傳遞至結束常式以進行連鎖刪除。 當實體連結索引鍵無法執行此動作時, CDATA 也會識別要刪除的區段。 此屬性與 NOCASCADE 互斥。
- CKEY | CNOKEY
- 將實體連結索引鍵傳遞至結束程式。 此索引鍵可識別連鎖刪除正在刪除的區段。 此屬性與 NOCASCADE 互斥。
- CNOPATH | CPATH
- 指出結束常式不需要實體根階層式路徑中的區段資料。 使用 CNODATA 來刪除連鎖刪除所需的大量路徑資料。 此屬性與 NOCASCADE 互斥。
- 資料 | NODATA
- DATA 指定將實體表格資料傳遞至結束常式以進行更新。 當指定 DATA 且在表格上也使用 EDITPROC 結束常式時,所傳遞的資料會是擴充資料。 DATA 是預設值。
- 諾德萊特 | DLET
- 針對 DLET 呼叫寫入 X' 99 ' 日誌記錄。 諾德萊特是預設值。 此屬性僅適用於 DEDB。
- 結束名稱
- 指定處理資料的結束常式名稱。 此名稱必須符合使用者定義的「資料擷取」結束常式名稱 IMS。 最多容許使用 8 個英數字元。
- 索引鍵 | NOKEY
- KEY 指定將實體連結索引鍵傳遞到結束常式。 這個索引鍵可識別應用程式所更新的實體表格。 KEY 是預設值。
- NOCASCADE
- 指出 DL/I 刪除此區段時不會呼叫結束常式。 當刪除不含相依項的區段時,不需要進行連鎖刪除。
- NOFLD | FLD
- FLD 選項要求擷取 DEDB FLD 呼叫所做的更新。 此選項僅適用於 DEDB ,且如果指定選項日誌,則此資訊僅會記載在 X' 9904 ' 日誌記錄中。 此資訊不會傳遞至資料擷取結束程式。 此屬性僅適用於 DEDB。
- NOINPOS | INPOS
- 當使用 HERE 插入規則,且未使用 F 或 L 指令碼時, INPOS 選項會要求對非索引鍵或非唯一索引鍵區段執行 ISRT 時傳遞成對資料。 在擷取 ISRT 之前,對應項資料 IMS 位於上。
- NOLOG | 日誌
- LOG 選項要求將資料擷取控制區塊及資料寫入 IMS 系統日誌。
- NOPATH | PATH
- NOPATH 指出結束常式不需要來自實體根階層式路徑中表格的資料。 NOPATH 是一種有效的方法,可避免擷取路徑資料所需的處理時間。 NOPATH 是預設值。
當來自實體根階層式路徑中每一個區段的資料必須傳遞至已更新區段的結束常式時,可以指定 PATH。 使用 PATH 可容許應用程式個別存取數個區段,以進行插入、取代或刪除。
當需要路徑中表格的資訊來撰寫 DB2® for z/OS 主要索引鍵時,您可以使用 PATH 選項。 然後會在相依表格更新的傳播要求中使用 DB2 for z/OS 主要索引鍵。 一般而言,當母項包含索引鍵資訊,而相依項包含不適合母項表格的其他資料時,您需要這類表格資訊。
當需要額外處理時,您也可以使用 PATH。 可能是您未使用一個呼叫來存取數個表格; 例如,您未呼叫 D 指令碼。 在此情況下,如果應用程式要使用個別呼叫來存取每一個表格,則需要額外處理。
- NOSSPCMD | SSPCMD
- SSPCMD 選項會要求擷取 DEDB 子集指標指令碼。 此選項僅適用於 DEDB。
- DATXEXITNO | DATXEXITYES
容許應用程式在處理此資料庫時使用「資料轉換」使用者結束常式 (DFSDBUX1)。
如果指定 YES ,則會在每一個資料庫呼叫開始及結束時呼叫使用者結束程式 DFSDBUX1 。 如果未載入 DFSDBUX1 ,則會呼叫 IMMODULE 來載入它。
如果指定 NO ,只要 DFSDBUX1 位於 SDFSRESL 中,就可以呼叫使用者 DFSDBUX1 。 如果不需要針對資料庫定義再次呼叫 DFSDBUX1 ,則會在 JCB 的 SRCHFLAG 欄位中傳回 X'FF ' ,且 DFSDLA00 會動態將資料庫定義標示為不需要結束程式。 在此情況下,除非從 DMB 儲存區清除 DMB ,否則在 IMS 階段作業期間不會針對該資料庫定義再次呼叫使用者結束程式。
- DBVER
- 0-2147483647 範圍內的數值,用於識別 DBD 的特定版本。 指定數值會驅動 IMS ,以產生可供不同應用程式使用的 DBD 新版本。
- 如果指定的版本號碼不是 IMS 型錄中現行作用中版本的增量,則 ALTER 會失敗。
- 如果指定的版本號碼已存在於 IMS 型錄中,且不是現行版本,則 ALTER 會失敗。
- 如果指定的版本號碼是現行作用中版本,則 IMS 會產生該 DBD 版本的新實例。
您也可以指定下列而非數值版本號碼:- DBVER AUTO
- AUTO 磁碟機 IMS 會根據儲存在 IMS 型錄中的現行作用中版本號碼,自動增加版本號碼。
- DBVER 現行
- CURRENT 會驅動 IMS 以 ALTER 現行作用中 DBD。 DBVER CURRENT 是預設值。
- DOSCOMPNO | DOSCOMPYES
- 指出這是否為 DLI/DOS 索引資料庫。 如果資料庫是索引,且是使用 DLI/DOS 建立的,則必須指定。 DLI/DOS 索引資料庫包含區段碼作為字首的一部分。 指定資料庫是 DLI/DOS 索引資料庫會導致 IMS 預期此程式碼會出現在已定義的資料庫中,並以保留此程式碼的方式處理。 這包括為要插入的新區段提供區段代碼。 DLI/DOS 資料庫必須使用 VSAM ,且不能是 PHDAM、PHIDAM 或 PSINDEX 資料庫。
- FPINDEXNO | FPINDEXYES
- 指定索引資料庫是否為主要「捷徑」DEDB 資料庫的次要索引。
- PASSWORDNO | PASSWORDYES
- 指定 PASSWORDYES 會導致 DL/I 在開啟此資料庫的任何資料集時使用資料庫名稱作為 VSAM 密碼。 此參數僅適用於使用 VSAM 作為存取方法的資料庫。 您無法使用資料庫名稱作為邏輯或 DEDB 資料庫類型的密碼。 當使用者使用 z/OS® Access Method Services 的 DEFINE 陳述式定義此資料庫的 VSAM 資料集時,控制層次 (CONTROLPW) 或主要層次 (MASTERPW) 密碼必須與此 DBD 的 DBDNAME 相同。 與此 DBD 相關聯的所有資料集都必須使用相同的密碼。
對於 IMS DB/DC 系統,所有 VSAM OPEN 都會略過密碼檢查,從而避免操作員密碼提示。 對於 IMS DB 系統,會執行 VSAM 密碼檢查。 在批次環境中,如果未指定自動密碼保護,且資料集在控制層次 (CONTROLPW) 上受到密碼保護,且密碼不等於資料庫名稱,則會出現操作員密碼提示。
- PROTYES | PROTNO
指定次要索引資料庫是否使用索引指標保護。 此選用參數可確保 IMS所使用之索引指標區段中所有欄位的完整性。 使用此參數可防止應用程式對索引指標區段中的任何欄位執行置換作業,但索引指標區段的使用者資料部分中的欄位除外。 索引指標區段仍會啟用刪除作業。 如果對索引指標區段發出刪除,則會刪除索引指標區段中的索引目標區段指標。 然而,不會刪除導致最初建立索引指標區段的索引來源區段。
如果未使用索引指標保護,則應用程式可以取代索引指標區段中除了常數、搜尋及子序列欄位之外的所有欄位。 在所有情況下,對索引資料庫的插入都無效。
- PSNAME 名
- 指定為 PSINDEX、PHDAM 或 PHIDAM 資料庫選取 HALDB 分割區的模組。 參數是 HALDB 分割區選擇結束常式模組名稱。 只有在資料庫的存取類型為 PSINDEX、PHDAM 或 PHIDAM 時,此參數才有效。異常狀況: 如果根索引鍵範圍定義 HALDB 分割區成員資格,則不需要使用者提供的 HALDB 分割區選取常式。
- RMNAME 名
- 指定模組名稱,用來管理儲存在 HDAM 或 PHDAM 資料庫的 DEDB 或主要資料集群組中的資料。 只有在資料庫存取類型為 HDAM、PHDAM 或 DEDB 時,此參數才有效。 隨機化模組可控制 DEDB、HDAM 或 PHDAM 資料庫中的根區段放置或擷取。 在 IMS 系統中,您可以使用一個以上稱為隨機化模組的模組。 一個特定的資料庫只有一個隨機化模組與其相關聯。 一般化模組 (使用使用者提供的參數對特定資料庫執行隨機化) 可以寫入服務數個資料庫。 隨機化模組的目的是將應用程式針對 DEDB、HDAM 或 PHDAM 資料庫中的根區段放置或擷取所提供的值轉換成相對區塊號碼及錨點號碼。 您可以透過選取兩階段隨機程式,在區域內進行隨機化。 當您選取兩階段隨機程式時,可以變更區域中的根錨點數目,而不需要使用 /DBRECOVERY 指令停止 DEDB 中的所有區域。
對於 PHDAM 資料庫,隨機程式模組名稱和值會變成每一個分割區的預設值。 在 HALDB 分割區定義期間,您可以為每一個分割區設定不同的隨機程式名稱及值。 HALDB 分割區選擇在呼叫隨機化模組之前完成。 隨機化模組只會選取分割區內的位置。
- RMANCH 數字
- anch 值的用途不同,視您是定義「捷徑」DEDB 資料庫還是完整功能 HDAM 或 PHDAM 資料庫而定。
此參數必須是不帶正負號的十進位整數。
若為 DEDB 資料庫, 安奇 值會指定隨機程式的類型。 值 1 表示單一階段隨機程式。 值 2 表示兩階段隨機程式。 任何其他值都無效。
若為 HDAM 及 PHDAM 資料庫, 安奇 值會指定 HDAM 或 PHDAM 資料庫的根可定址區域中每一個控制間隔或區塊中所需的根錨點數目。 一般值是從 1 到 5 ,且值不能超過 255。
存取 HDAM 或 PHDAM 資料庫時,如果使用者隨機化常式所產生的錨點數目大於對此參數指定的數目,則會使用控制間隔或區塊中最高編號的錨點。 當隨機化常式產生 IMS 錨點號碼零時, IMS 會在控制間隔或區塊中使用錨點 1。
- RMRBN 數字
- 指定您要容許隨機化模組為此資料庫產生的相對區塊數值上限。 此參數僅適用於 HDAM 或 PHDAM 資料庫。 此值決定 HDAM 或 PHDAM 資料庫的根可定址區域中控制間隔或區塊的數目。 此參數必須是不帶正負號的十進位整數,其值不超過 224-1。 如果省略此參數,則不會對隨機化模組所建立的相對區塊號碼執行上限檢查。 如果指定此參數,但指定的隨機化模組產生大於此參數的相對區塊數,則 IMS會使用根可定址區域中的最高控制間隔或區塊。 如果使用者隨機化模組產生的區塊數為零,則 IMS會使用控制間隔或區塊 1。
在 HDAM 或 PHDAM 資料集中,第一個點陣圖位於資料集第一個延伸範圍的第一個區塊中。 在 HDAM 或 PHDAM 資料庫中,針對每個資料集群組指定之資料集第一個延伸範圍的第一個控制間隔或區塊用於位元對映。 在 VSAM 資料集中,第二個控制間隔用於點陣圖,並保留第一個控制間隔。 IMS 會將一個新增至隨機程式所計算的區塊。
- RMBYTES 數字
- 指定在對另一個資料庫記錄的呼叫未中斷的一連串插入中,可以儲存至根可定址區域的資料庫記錄位元組數上限。 此參數僅適用於 HDAM 及 PHDAM 資料庫。 如果省略此參數,則不會限制可插入此資料庫根區段可定址區域的資料庫記錄位元組數上限。 位元組參數必須是不帶正負號的十進位整數,其值不超過 224-1。 當省略最大相對區塊數參數時,會忽略此參數。 在此情況下,可插入根可定址區域的資料庫記錄位元組數沒有限制。
如果對 HDAM 或 PHDAM 資料庫指定此參數,且資料庫記錄的長度較大,則會將記錄的其餘部分插入現行檔案結尾 (EOF) 之後的溢位區域中。 此作業需要在現行 EOF 之後有足夠的可用空間,以包含超出此參數值的所有資料庫記錄的其餘部分。 如果在現行 EOF 之後的溢位區域中沒有足夠的可用空間,則會在資料庫中隨機插入資料庫記錄。
- XCINO | XCIYES
- 指定此 DEDB 在呼叫隨機程式時是否使用「延伸呼叫介面」。 此選項容許以三種不同的方式來呼叫隨機程式。 在起始設定 IMS 時,或在 /START DB 指令期間, IMS 會先載入隨機程式,然後對隨機程式發出 INIT 呼叫,以呼叫其起始設定常式。 在 /DBR DB 指令期間, IMS 會對隨機程式發出 TERM 呼叫,以在卸載隨機程式之前呼叫終止常式。 當應用程式對根區段發出 GU 或 ISRT 呼叫時,會對隨機程式進行一般隨機化呼叫。 XCI 選項僅適用於 DEDB。
- 版本 'version_identifier'
- 指定版本識別字串。 您可以使用此 ID 來區分 IMS 型錄後續查詢中的資源版本。
使用注意事項
因為 ALTER DATABASE 陳述式會將資料庫修改為 IMS,所以如果在 ALTER DATABASE 陳述式上指定的資料庫不存在,則陳述式會失敗並產生 -9000 訊息。
資料庫版本化附註
其專屬 DDL 串流中的 ALTER DATABASE 會變更現有的 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.'
