キャッシュの名前と既存の論理領域の名前が一致する場合、ADD CACHEでは、表の行のサイズまたは(SORTED RANKED索引またはUNIQUE SORTED索引用の)索引ノードのサイズに基づいてROW LENGTHが計算されます。このキャッシュは、論理領域キャッシュと呼ばれます。
デフォルトはENABLEDです。
デフォルトでは、新規のキャッシュに対しても既存のキャッシュに対しても、この機能は無効です。
ROW SNAPSHOT IS ENABLEDオプションにCACHE SIZE句を指定しない場合は、スナップショット行を1000行まで含むことができるキャッシュが作成されます。
プロセス領域に作成されたキャッシュ・グローバル・セクションを使用する場合は、複数のユーザーで物理メモリーを共有します。また、OpenVMS Alphaオペレーティング・システムにより、行キャッシュが各ユーザーのプライベート・アドレス空間にマップされます。この結果、すべてのユーザーは空きのある仮想アドレス範囲に制限され、それぞれがオーバーヘッドに応じた一定の割合でメモリーを使用することになります。多数のユーザーがデータベースにアクセスした場合、オーバーヘッドは大きくなります。
多数のユーザーがデータベースにアクセスする場合は、SHARED MEMORY IS SYSTEM句の使用を検討します。これを使用すると、ユーザーはメモリーのシステム領域を共有することになり、メモリーのプロセス領域に関連するオーバーヘッドは発生しないため、ユーザーはより多くの物理メモリーを使用できるようになります。
- 行キャッシュの名前がいずれかの論理領域の名前(表名、索引名、RDB$SEGMENTED_STRINGS、RDB$SYSTEM_RECORDなど)と同じである場合、その行キャッシュは論理領域キャッシュであり、同じ名前を持つ論理領域が自動的にキャッシュされます。そうでない場合は、そのキャッシュにいずれかの記憶域を関連付ける必要があります。
- ADD CACHE句およびCREATE CACHE句のどちらを使用しても、行キャッシュは記憶域に割り当てられません。CACHE USING句をCREATE DATABASE文のCREATE STORAGE AREA句、またはALTER DATABASE文のADD STORAGE AREA句またはALTER STORAGE AREA句と併用する必要があります。
- CACHE SIZEおよびROW LENGTHの設定の内容に応じて、行キャッシュに必要なメモリーの量が決定されます(追加のオーバーヘッドおよびページ境界への端数の切上げ処理は、データベース・システムで実行されます)。
- 行キャッシュは、いずれか1つのノード上のデータベースにアタッチするすべてのプロセスによって共有されます。
- 行キャッシュ機能を使用する場合の要件を次に示します。
- アフター・イメージ・ジャーナルが有効になっていること。
- 高速コミットが有効になっていること。
- クラスタ・ノードの数が1であること、またはシステムでOpenVMS Galaxy構成が実行されており、NUMBER OF CLUSTER NODE ... (SINGLE INSTANCE)が有効になっていること。
- SHOW CACHE文を使用してキャッシュに関する情報を表示します。
- データベース内に定義された各行キャッシュを指定すると、指定した数のスナップショット行をキャッシュに格納できます。格納できるスナップショット行の数は、キャッシュに格納できる現在有効なデータベース行の数に加えて指定します。キャッシュのスナップショット部分には、同じ行に対する多数のバージョンを格納できるため、スナップショット行の数と現在有効なキャッシュ行の数は個別に指定します。行キャッシュのスナップショット部分は、実質的には行キャッシュ自体を拡張したものであるため、キャッシュのその他の属性はスナップショット部分と共有されます。
- 行キャッシュのスナップショット部分は、現在有効な部分より大きくする(格納できる行の数を多くする)ことも小さくする(格納できる行の数を少なくする)こともできます。変更できるデータベース行の数およびそれに関連するトランザクション長はアプリケーションの動作やワークロードの状況によって決まるため、すべてのアプリケーションおよびデータベース型のキャッシュのスナップショット部分のサイズについて特定の推奨事項を設定するのは適切ではありません。ただし、メイン・キャッシュのスナップショット・キャッシュのサイズの割合は、現在有効な記憶域のデータベース・スナップショットの記憶域の割合と同様であると想定されます。アプリケーションに、長時間実行されるトランザクションおよびキャッシュされたデータを変更するアクティブな読取り/書込みトランザクションがある場合、変更された多数のデータのスナップショット・コピーの保持が必要な場合があります。これにより、大容量の更新アクティビティを伴うこれらのキャッシュでは、多数のスナップショット行のキャッシュが必要な場合があります。
- SHARED MEMORY IS PROCESS RESIDENTまたはLARGE MEMORYを有効化または無効化するには、コマンドを実行するプロセスに、VMS$MEM_RESIDENT_USER権利識別子が付与されている必要があります。この機能を有効にした場合は、データベースをオープンするためのプロセスにもVMS$MEM_RESIDENT_USER識別子が付与される必要があります。この機能の利用時にはRMU/OPENコマンドの使用をお薦めします。
例1: 行キャッシュの作成次の例では、データベースを作成し、行キャッシュを作成して、その行キャッシュを記憶域に割り当てます。
SQL> CREATE DATABASE FILENAME test_db cont> ROW CACHE IS ENABLED cont> CREATE CACHE test1 cont> CACHE SIZE IS 100 ROWS cont> CREATE STORAGE AREA area1 cont> CACHE USING test1; SQL> SHOW CACHE Cache Objects in database with filename test_db TEST1 SQL> SHOW CACHE test1 TEST1 Cache Size: 100 rows Row Length: 256 bytes Row Replacement: Enabled Shared Memory: Process Large Memory: Disabled Window Count: 100 Reserved Rows: 20 Sweep Rows: 3000 No Sweep Thresholds Allocation: 100 blocks Extent: 100 blocks SQL> SHOW STORAGE AREA area1 AREA1 Access is: Read write Page Format: Uniform Page Size: 2 blocks Area File: SQL_USER1:[DAY.V70]AREA1.RDA;1 Area Allocation: 402 pages Area Extent Minimum: 99 pages Area Extent Maximum: 9999 pages Area Extent Percent: 20 percent Snapshot File: SQL_USER1:[DAY.V70]AREA1.SNP;1 Snapshot Allocation: 100 pages Snapshot Extent Minimum: 99 pages Snapshot Extent Maximum: 9999 pages Snapshot Extent Percent: 20 percent Extent : Enabled Locking is Row Level Using Cache TEST1 No database objects use Storage Area AREA1
例2: 様々なキャッシュの作成および変更
- CUSTOMER_STATUSという名前で作成されるキャッシュでは、行の長さが577バイト、現在有効なデータベース行の格納に使用するキャッシュ・スロットの数が88000、行のスナップショット・コピーの格納に使用するスロットの数が7000に設定されています。また、このキャッシュはメモリー常駐型として構成されています。
- MACHINE_FLOW_IDX_1という名前で作成されるキャッシュでは、行の長さが430バイト、現在有効なデータベース行の格納に使用するキャッシュ・スロットの数が5000、行のスナップショット・コピーの格納に使用するスロットの数が12000に設定されています。このキャッシュに対しては、キャッシュ内の行の置換は無効に設定されます。
- SALES_CALLSという名前で作成されるキャッシュでは、行の長さが160バイト、現在有効なデータベース行の格納に使用するキャッシュ・スロットの数が3000に設定されています。行のスナップショット・コピーの格納に使用するスロットの数は、明示的に指定されていないため、デフォルトの1000に設定されます。
- CUSTOMER_ORDERという名前のキャッシュにはROW SNAPSHOT IS ENABLEDが指定されていません。そのため、このキャッシュには行のスナップショット・コピーは格納されません。
- SALESという名前のキャッシュは、キャッシュ内のスナップショット行の格納が無効になるように変更されています。
- CLEARINGという名前のキャッシュは、キャッシュ内のスナップショット行の格納が有効になるように変更されており、スナップショット・キャッシュのサイズが12,345行に設定されています。
SQL> ALTER DATABASE FILENAME HDB_DB (1) ADD CACHE CUSTOMER_STATUS ROW LENGTH IS 577 BYTES CACHE SIZE IS 88000 ROWS ROW SNAPSHOT IS ENABLED (CACHE SIZE IS 7000 ROWS) SHARED MEMORY IS PROCESS RESIDENT (2) ADD CACHE MACHINE_FLOW_IDX_1 ROW LENGTH IS 430 BYTES CACHE SIZE IS 5000 ROWS ROW REPLACEMENT IS DISABLED ROW SNAPSHOT IS ENABLED (CACHE SIZE IS 12000 ROWS) (3) ADD CACHE SALES_CALLS ROW LENGTH IS 160 BYTES CACHE SIZE IS 3000 ROWS ROW SNAPSHOT IS ENABLED (4) ADD CACHE CUSTOMER_ORDER ROW LENGTH IS 760 BYTES CACHE SIZE IS 9000 ROWS CHECKPOINT UPDATED ROWS TO DATABASE (5) ALTER CACHE SALES ROW SNAPSHOT IS DISABLED (6) ALTER CACHE CLEARING ROW SNAPSHOT IS ENABLED (CACHE SIZE IS 12345 ROWS); SQL> SHOW CACHE CUSTOMER_STATUS CUSTOMER_STATUS Cache Size: 88000 rows Row Length: 580 bytes Row Replacement: Enabled Shared Memory: Process Resident Large Memory: Disabled Window Count: 100 Working Set Count: 10 Reserved Rows: 20 Allocation: 100 blocks Extent: 100 blocks Snapshot in Cache: Enabled Snapshot Cache Size: 7000 rows SQL> SHOW CACHE MACHINE_FLOW_IDX_1 MACHINE_FLOW_IDX_1 Cache Size: 5000 rows Row Length: 432 bytes Row Replacement: Disabled Shared Memory: Process Large Memory: Disabled Window Count: 100 Working Set Count: 10 Reserved Rows: 20 Allocation: 100 blocks Extent: 100 blocks Snapshot in Cache: Enabled Snapshot Cache Size: 12000 rows SQL> SHOW CACHE SALES_CALLS SALES_CALLS Cache Size: 3000 rows Row Length: 160 bytes Row Replacement: Enabled Shared Memory: Process Large Memory: Disabled Window Count: 100 Working Set Count: 10 Reserved Rows: 20 Allocation: 100 blocks Extent: 100 blocks Snapshot in Cache: Enabled Snapshot Cache Size: 1000 rows SQL> SHOW CACHE CUSTOMER_ORDER CUSTOMER_ORDER Cache Size: 9000 rows Row Length: 760 bytes Row Replacement: Enabled Shared Memory: Process Large Memory: Disabled Window Count: 100 Working Set Count: 10 Reserved Rows: 20 Allocation: 100 blocks Extent: 100 blocks Row cache: checkpoint updated rows to database
マルチスキーマ・データベース内のスキーマのグループの名前を作成します。
CREATE CATALOG文は次の環境で使用できます。
- 対話型SQL内
- プリコンパイル対象のホスト言語プログラムに埋め込まれる場合
- SQLモジュールのプロシージャの一部として
- 動的SQLで動的に実行される文として
"alias.name-of-catalog"
データベースにアタッチするオプションの名前を指定します。プログラムまたは対話型SQL文で複数のデータベースを参照している場合は、常にカタログ名を別名で修飾します。カタログ名とその別名はピリオドで区切り、修飾した名前は二重引用符で囲みます。catalog-name
作成するカタログ定義の名前です。名前には、データベース内のすべてのカタログ名で一意となる有効なSQL名を使用します。カタログ名の詳細は、第2.2.3項を参照してください。create-schema-statement
詳細は、「CREATE SCHEMA文」を参照してください。schema-element
CREATE文またはGRANT文を1つ以上指定します。詳細は、「CREATE SCHEMA文」を参照してください。
- カタログは、マルチスキーマ属性を持つデータベース内でのみ作成できます。データベースにマルチスキーマ属性を設定する場合は、CREATE DATABASE文またはALTER DATABASE文にMULTISCHEMA IS ON句を使用します。
- マルチスキーマ属性を持つデータベースでも、マルチスキーマ・ネーミングが無効になっている場合は、カタログを作成できません。マルチスキーマ属性を持つデータベースでは、マルチスキーマ・ネーミングはデフォルトで有効になっていますが、DECLARE ALIAS文またはATTACH文のMULTISCHEMA IS OFF句を使用して無効にできます。
- 別名を使用してデータベースにアタッチした場合、そのデータベース内の要素を後続の文に指定するには、同じ別名を使用する必要があります。カタログ名を別名で修飾した場合は、別名とカタログ名はピリオドで区切り、その名前のペアを二重引用符で囲む必要があります。
修飾したカタログ名を使用した文を発行する場合は、その前にSET QUOTING RULES文を発行し、プログラムに埋め込まれたDECLARE MODULE文にQUOTING RULES句を指定するか、またはSQLモジュール・ファイルにQUOTING RULES句を指定する必要があります。- ANSI/ISO SQL規格のフラガーをオンに設定した場合、CREATE CATALOG文は非標準構文としてフラグが付けられます。
- デフォルトのカタログを変更しない場合、SQLによりスキーマおよびスキーマ要素がRDB$CATALOGに格納されます。
- CREATE CATALOGを使用して作成されたカタログの名前が、文全体におけるデフォルトのカタログです。
例1: 別名を使用したデータベースのカタログの作成次の例では、対話型ユーザーがpersonnelというサンプル・データベースにアタッチし、そのデータベース内にカタログを作成する方法を示します。(この例では、マルチスキーマ属性を使用して作成されたサンプル・データベースpersonnelを使用する必要があります。)ユーザーは別名を使用することにより、personnelデータベースと、後で同じセッション内でアタッチする可能性がある他のデータベースを区別します。
SQL> ATTACH 'ALIAS CORPORATE FILENAME personnel - cont> MULTISCHEMA IS ON'; SQL> -- SQL> -- SQL creates a default catalog called RDB$CATALOG in SQL> -- each multischema database. SQL> -- SQL> SHOW CATALOG; Catalogs in database personnel "CORPORATE.RDB$CATALOG" SQL> -- SQL> -- The SET QUOTING RULES 'SQL99' statement allows the use of SQL> -- double quotation marks, which SQL requires when you SQL> -- qualify a catalog name with an alias. SQL> -- SQL> SET QUOTING RULES 'SQL99'; SQL> CREATE CATALOG "CORPORATE.MARKETING"; SQL> -- SQL> SHOW CATALOG; Catalogs in database personnel "CORPORATE.MARKETING" "CORPORATE.RDB$CATALOG"
例2: デフォルトの別名を使用したデータベース内でのカタログの作成
次の例では、対話型のCREATE DATABASE文で使用するCREATE CATALOG句を示します。この例では、ユーザーは別名を指定せずにデータベースを作成します。ユーザーは他のデータベースにアタッチされていないため、新規に作成したデータベースがデフォルトの別名になります。
SQL> CREATE DATABASE FILENAME inventory cont> MULTISCHEMA IS ON cont> CREATE CATALOG PARTS cont> CREATE SCHEMA PRINTERS AUTHORIZATION DAVIS cont> CREATE TABLE LASER EXTERNAL NAME IS DEPT_2_LASER cont> (SERIAL_NO INT, LOCATION CHAR) cont> CREATE SCHEMA TERMINALS AUTHORIZATION DAVIS cont> CREATE TABLE TERM100 EXTERNAL NAME IS DEPT_2_TERM100 cont> (SERIAL_NO INT, LOCATION CHAR); SQL> SHOW CATALOG; Catalogs in database with filename inventory PARTS RDB$CATALOG SQL> show schemas; Schemas in database with filename inventory PARTS.PRINTERS PARTS.TERMINALS RDB$SCHEMA
OpenVMS National Character Set(NCS)のユーティリティを使用して、定義されている照合順番を識別します。CREATE COLLATING SEQUENCE文を使用すると、特定のドメインで使用するデータベースのデフォルトの照合順番とは別の照合順番を指定できます。(データベースのデフォルトの照合順番は、CREATE SCHEMA文のCOLLATING SEQUENCE IS句により確立されます。データベースの定義時にこの句を省略した場合、デフォルトの順序はASCIIです。)次のいずれかの文に照合順番の名前を入力する前に、照合順番を指定するCREATE COLLATING SEQUENCE文を入力する必要があります。
- CREATE DOMAIN ... COLLATING SEQUENCE
- DROP COLLATING SEQUENCE
- ALTER DOMAIN ... COLLATING SEQUENCE
- SHOW COLLATING SEQUENCE
CREATE COLLATING SEQUENCE文は次の環境で使用できます。
- 対話型SQL内
- プリコンパイル対象のホスト言語プログラムに埋め込まれる場合
- SQLモジュールのプロシージャの一部として
- 動的SQLで動的に実行される文として
COMMENT IS 'string'
照合順番に関するコメントを追加します。SQLでは、対話型SQLでのSHOW COLLATING SEQUENCE文の実行時にテキストが表示されます。コメントは一重引用符(')で囲み、コメント内の複数の行はスラッシュ(/)で区切ります。FROM library-name
デフォルト以外のNCSライブラリの名前を指定します。デフォルトのNCSライブラリはSYS$LIBRARY:NCS$LIBRARYです。ncs-name
デフォルトのNCSライブラリであるSYS$LIBRARY:NCS$LIBRARYまたはlibrary-name引数で指定されたNCSライブラリの照合順番の名前を指定します。照合順番は、事前定義されたNCS照合順番のいずれかまたはNCSを使用してユーザーが定義したものにできます。
sequence-name
ncs-name引数で指定された照合順番がスキーマで認識される名前を指定します。ncs-name引数およびsequence-name引数は、同じものにできます。STORED NAME IS stored-name
マルチスキーマ・データベースに作成した照合順番へのアクセスに使用される名前を指定します。ストアド名を使用すると、Oracle Rdb管理ユーティリティであるOracle RMUなどのインタフェースを使用して、マルチスキーマ定義にアクセスできます。このユーティリティでは、1つのデータベース内で複数のスキーマを認識しません。複数のスキーマに対応しないデータベース内では、照合順番のストアド名は指定できません。
- ドメインに別の照合順番を指定する場合は、最初にCREATE COLLATING SEQUENCE文を実行します。照合順番を作成した後、その照合順番を特定のドメインに適用できます。
- 次のリストでは、照合順番に関連するすべての文を省略表記で示します。
- CREATE DOMAIN ... COLLATING SEQUENCE sequence-name
- CREATE DOMAIN ... NO COLLATING SEQUENCE
- ALTER DOMAIN ... COLLATING SEQUENCE sequence-name
- ALTER DOMAIN ... NO COLLATING SEQUENCE
- DROP COLLATING SEQUENCE sequence-name
- CREATE SCHEMA ... create-collating-sequence-statement
- CREATE DATABASE ... COLLATING SEQUENCE sequence-name ...
- IMPORT ... COLLATING SEQUENCE sequence-name ...
- SHOW ... COLLATING SEQUENCE
- この文は読取り/書込みトランザクションで実行する必要があります。アクティブなトランザクションがない場合にこの文を発行すると、SQLでは、読取り/書込みトランザクションが暗黙的に開始されます。
- CREATE COLLATING SEQUENCE文を発行すると、他のユーザーがデータベースにアタッチできるようになります。
- 次の照合順番を使用してデータベースを定義しようとすると、RDMS$$MCS$NCS_RECODE_8 + 00000665の例外でバグチェック・ダンプが発生します。
native_2_upper_lower = cs( sequence = (%X00,"#"," ","A","a","B","b","C","c","D","d","E", "e","8","F","f","5"-"4","G","g","H","h","I","i","J","j","K","k", "L","l","M","m","N","n","9","O","o","1","P","p","Q","q","R","r", "S","s","7"-"6","T","t","3"-"2","U","u","V","v","W","w","X","x", "Y","y","Z","z"), modifications = (%X01-%X1F=%X00,"!"-""""=%X00,"$"-"0"=%X00,":"-"@"= %X00, "{"-%XFF=%X00,""="A"));
照合順番のmodificationsの箇所では、多すぎる文字がヌル文字に変換されています。Oracle Rdbで処理可能なヌル文字への変換は、80文字程度です。
これを回避するには、MULTINATIONAL2キャラクタ・セットを目的の順序でソートするように変更します。- 次の文字列はいずれも、照合順番の名前として使用できません。
- "MCS"
- "ASCII"
- " "(すべて空白)
- ヌル文字(文字コードが0の特殊文字)
- ノルウェー語の照合順番には特殊文字が一部使用されているため、データベース内でノルウェー語の照合順番を作成する場合、一定の制限が適用されます。NCSライブラリにおけるノルウェー語の照合順番の名前は、先頭部分をNORWEGIANという文字列にする必要があります。
OpenVMSに標準で設定されている照合順番の名前はNORWEGIANとなっており、この制限を満たしています。ノルウェー語の照合順番は、内容を若干変更するか、または名前を変更できます。ノルウェー語の照合順番のバリエーションに、NORWEGIAN_1やNORWEGIANAなどの名前を付けることをお薦めします。- 照合順番のコメントを変更する場合は、COMMENT ON COLLATING SEQUENCEを使用します。
例1: フランス語の照合順番の作成次の例では、事前定義された照合順番FRENCHを使用して照合順番が作成されます。その後、定義された照合順番がSHOW COLLATING SEQUENCE文を使用して表示されます。
SQL> CREATE COLLATING SEQUENCE FRENCH FRENCH; SQL> -- SQL> SHOW COLLATING SEQUENCE User collating sequences in schema with filename SQL$DATABASE FRENCH
例2: 複数のコメントを指定したスペイン語の照合順番の作成
SQL> CREATE COLLATING SEQUENCE SPANISH_COL cont> COMMENT IS 'first comment' / 'second comment' cont> SPANISH; SQL> SHOW COLLATING SEQUENCE SPANISH_COL; SPANISH_COL Comment: first comment second comment