Oracle Rdb for OpenVMS

Oracle® Rdb for OpenVMS

新機能

リリース7.2.x.x


2008年5月

Oracle Rdb新機能, リリース7.2.x.x for OpenVMS

部品番号: E06179-01

原本名: Oracle Rdb New Features, Release 7.2.x.x for OpenVMS

Copyright © 1984, 2007 Oracle Corporation. All rights reserved.

制限付権利の説明

このプログラム(ソフトウェアおよびドキュメントを含む)には、オラクル社およびその関連会社に所有権のある情報が含まれています。このプログラムの使用または開示は、オラクル社およびその関連会社との契約に記された制約条件に従うものとします。著作権、特許権およびその他の知的財産権と工業所有権に関する法律により保護されています。

独立して作成された他のソフトウェアとの互換性を得るために必要な場合、もしくは法律によって規定される場合を除き、このプログラムのリバース・エンジニアリング、逆アセンブル、逆コンパイル等は禁止されています。

このドキュメントの情報は、予告なしに変更される場合があります。オラクル社およびその関連会社は、このドキュメントに誤りが無いことの保証は致し兼ねます。これらのプログラムのライセンス契約で許諾されている場合を除き、プログラムを形式、手段(電子的または機械的)、目的に関係なく、複製または転用することはできません。

このプログラムが米国政府機関、もしくは米国政府機関に代わってこのプログラムをライセンスまたは使用する者に提供される場合は、次の注意が適用されます。

U.S. GOVERNMENT RIGHTS

Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the Programs, including documentation and technical data, shall be subject to the licensing restrictions set forth in the applicable Oracle license agreement, and, to the extent applicable, the additional rights set forth in FAR 52.227-19, Commercial Computer Software--Restricted Rights (June 1987). Oracle Corporation, 500 Oracle Parkway, Redwood City, CA 94065.

このプログラムは、核、航空、大量輸送、医療あるいはその他の本質的に危険を伴うアプリケーションで使用されることを意図しておりません。このプログラムをかかる目的で使用する際、上述のアプリケーションを安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。万一かかるプログラムの使用に起因して損害が発生いたしましても、オラクル社およびその関連会社は一切責任を負いかねます。

Oracleは米国Oracle Corporationの登録商標です。Hot Standby、LogMiner for Rdb、Oracle CDD/Repository、Oracle CODASYL DBMS、Oracle Expert、Oracle Rdb、Oracle RMU、Oracle RMUwin、Oracle SQL/Services、Oracle Trace、Rdb7は米国Oracle Corporationの商標または登録商標です。その他の名称は、他社の商標の可能性があります。


目次


はじめに

このマニュアルの目的

このマニュアルには、Oracle Rdbリリース7.2.2.0および以前のRdb 7.2.x.xリリースの新機能に関する章が含まれます。

ドキュメントの構成

このマニュアルは次の章で構成されています。
第1章 Oracle Rdbリリース7.2.2.0での拡張機能について説明します。
第2章 Oracle Rdbリリース7.2.1.4での拡張機能について説明します。
第3章 Oracle Rdbリリース7.2.1.3での拡張機能について説明します。
第4章 Oracle Rdbリリース7.2.1.2での拡張機能について説明します。
第5章 Oracle Rdbリリース7.2.1.0での拡張機能について説明します。
第6章 Oracle Rdbリリース7.2.0.2での拡張機能について説明します。
第7章 Oracle Rdbリリース7.2.0.1での拡張機能について説明します。
第8章 Oracle Rdbリリース7.2での拡張機能について説明します。


第1章
Oracle Rdbリリース7.2.2.0での拡張機能および変更点

1.1 Oracle Rdbリリース7.2.2.0での拡張機能および変更点

1.1.1 実行可能イメージ・サイズの低減、CPU使用率の削減およびパフォーマンスの改善

Oracle Rdbのこのリリースでは、いくつかの点でパフォーマンスの向上を実現しています。これらの変更点の多くは、I64システムで実行されるアプリケーションに固有のものか、I64システムでより大きな効果が得られるものです。強化された点は次のとおりです。

1.1.2 最適化レベルを制御する新しいキーワードSET FLAGS

Oracle Bug#6389282

最適化レベルTOTAL TIMEおよびFAST FIRSTは、次の方法で指定できます。

ただし、一部の動的SQL環境では、これらの方法による影響を受けない問合せが生成されます。そのため、Oracle Rdbでは、このような問合せに対応する新しいフラグがSET FLAGS(およびRDMS$SET_FLAGS論理名)に追加されました。

フラグOPTIMIZATION_LEVELを使用すると、問合せのデフォルトの最適化レベルを変更できます。問合せでOPTIMIZE FOR句が明示的に使用されているか、前述の方法を使用したデフォルトを上書きする環境内で問合せがコンパイルされている場合、問合せの最適化は変更されません。問合せでデフォルトの最適化レベルが使用されている場合、その最適化はこのフラグによって変更されます。

次の例に、動的オプティマイザを使用している問合せでの動作の変更を示します。

SQL> -- show with default behavior (FFirst tactic used)
SQL> select *
cont> from xtest
cont> where col2 between 999980 and 1000000
cont>   and col1 > 0
cont> ;
Tables:
  0 = XTEST
Leaf#01 FFirst 0:XTEST Card=10
  Bool: (0.COL2 >= 999980) AND (0.COL2 <= 1000000) AND (0.COL1 > 0)
  BgrNdx1 XTEST_IDX [1:0] Fan=17
    Keys: 0.COL1 > 0
0 rows selected
SQL>
SQL> -- use SET FLAGS
SQL> set flags 'optimization_level(total_time)';
SQL>
SQL> -- show that BgrOnly is used for TOTAL TIME
SQL> select *
cont> from xtest
cont> where col2 between 999980 and 1000000
cont>   and col1 > 0
cont> ;
Tables:
  0 = XTEST
Leaf#01 BgrOnly 0:XTEST Card=10
  Bool: (0.COL2 >= 999980) AND (0.COL2 <= 1000000) AND (0.COL1 > 0)
  BgrNdx1 XTEST_IDX [1:0] Fan=17
    Keys: 0.COL1 > 0
0 rows selected
SQL>

これはOracle Rdbリリース7.2.2で追加された機能です。

1.1.3 RdbデータベースのABMページのみをダンプする新しい/ABMS_ONLY修飾子

現在、Oracle Rdbデータベースの領域ビットマップ(ABM)ページは、RMU/DUMPコマンドを使用して、統一記憶域または統一記憶域内の論理領域にある他のタイプのページとともにダンプできます。RMU/DUMPコマンドに新たに/ABMS_ONLY修飾子が追加されました。この修飾子では、統一記憶域または統一記憶域内の論理領域にあるABMページのみがダンプされます。既存の/START=nと/END=n修飾子(nはページ番号)を指定して、ABMページのダンプを特定のページ範囲に制限するか、ページ範囲の制限を指定せずに、統一記憶域内または統一記憶域に含まれる論理領域内のすべてのABMページをダンプすることもできます。

/ABMS_ONLY修飾子を無効にすることはできません。この修飾子は、デフォルトにはなりません。/ABMS_ONLYを指定しない場合、デフォルトにより、記憶域および論理領域の他のタイプのデータベース・ページとともにABMページがダンプされます。RMU/DUMPコマンドラインで、/ABMS_ONLY修飾子とともに既存の/AREAS、/LAREAS、/ALL_LIVEまたは/ALL_LAREA修飾子を使用しない場合、デフォルトの/ALL_LIVEにより、すべてのライブな統一記憶域内に含まれるABMページのみがダンプされます。ABMページのダンプ形式は変更されていません。現在と同様にヘッダーが出力され、ダンプの対象となるライブな統一記憶域、またはライブな統一記憶域内の論理領域と各論理領域内に含まれるABMページ、あるいはその両方がヘッダーによって識別されます。データベース・ヘッダーのダンプは、現在と同じケースにおいて、ダンプの開始時に含められます。

指定したページ範囲内にABMページがない場合、または記憶域が混合形式であるか、論理領域が混合記憶域内に含まれている場合は、ABMページがないため、ABMページはダンプされません。RMU/DUMP/HEADERコマンドを実行すると、Rdbデータベースの記憶域を定義するエントリによって、統一形式の領域と混合形式の領域が指定されます。/ABMS_ONLY修飾子は、領域管理(SPAM)ページのみをダンプする既存の/SPAMS_ONLY修飾子と同じダンプ・コマンドには指定できません。/ABMS_ONLY修飾子は、SNAPSHOT領域をダンプする既存の/SNAPSHOTS修飾子と同じダンプ・コマンドには指定できません。

ABMページのみをダンプする構文は次のとおりです。

/ABMS_ONLY

次の例では、指定されたRdbデータベースのすべての統一記憶域に含まれるすべてのABMページがダンプされます。

$ rmu/dump/abms_only/out=dmp.out mf_personnel

次の例では、指定されたRdbデータベースの指定された統一記憶域に含まれるABMページのみがダンプされます。

$ rmu/dump/abms_only/area=rdb$system mf_personnel

次の例では、指定されたRdbデータベースの統一記憶域の指定された論理領域に含まれるABMページのみがダンプされます。

$ rmu/dump/abms_only/larea=rdb$relations mf_personnel

次の例では、指定されたRdbデータベースの指定された統一記憶域の指定されたページ範囲に含まれるABMページのみがダンプされます。

rmu/dump/abms_only/area=rdb$system/start=1/end=5 mf_personnel

1.1.4 RMU/BACKUPのパフォーマンスの向上

記憶域が異なる複数のデバイス上に配置されている場合、RMU/BACKUPは、まず最初の入力デバイスからすべての記憶域を読み取り、その後で次の入力デバイスへと進みます。これによって、様々なデバイスでI/O負荷の不均衡が生じていました。1つの入力デバイスが読取りI/Oの実行で非常にアクティブなとき、他の入力デバイスはアイドル状態でした。

このリリースでは機能が強化され、RMU/BACKUPは、記憶域のディスク・デバイスに基づいたラウンドロビン方式を使用して、保存する記憶域をリーダー・スレッドに割り当てるようになりました。同じディスク・デバイスでは、より大きな記憶域が最初に選択されます。これまでと同様に、各出力デバイス、保存セットまたはメディア・マネージャ・ストリームのデータ量は均衡化されます。

$ RMU/BACKUP/LOG=FULL LDA100:[DB]MYTESTDB -
    $1$DGA20:[BACKUP]RBF1,$1$DGA40:[BACKUP]RBF2/DISK=WRITERS=2
%RMU-I-BCKTXT_01, Writer thread 1 writes $1$DGA20:[BACKUP]RBF1.RBF; containing:
    File LDA100:[DB]MYTESTDB.RDA;1    1404 blocks
    File LDA100:[DB]A0007.RDA;1       5388 blocks
    File LDA300:[DB]A0006.RDA;1       7758 blocks
    File LDA100:[DB]A0004.RDA;1       4490 blocks
    File LDA200:[DB]A0005.RDA;1       9310 blocks
    File LDA300:[DB]A0009.RDA;1       4490 blocks
    File LDA200:[DB]A0011.RDA;1       3742 blocks
    File LDA100:[DB]A0001.RDA;1       2599 blocks
    File LDA300:[DB]A0012.RDA;1       3742 blocks
%RMU-I-BCKTXT_01, Writer thread 2 writes $1$DGA40:[BACKUP]RBF2.RBF; containing:
    File LDA200:[DB]A0002.RDA;1      27802 blocks
    File LDA100:[DB]A0010.RDA;1       3742 blocks
    File LDA300:[DB]A0003.RDA;1       4490 blocks
    File LDA200:[DB]A0008.RDA;1       2166 blocks
%RMU-I-BCKTXT_00, Backed up root file LDA100:[DB]MYTESTDB.RDB;1
%RMU-I-RESUME, resuming operation on volume 2 using _$1$DGA40
%RMU-I-BCKTXT_02, Starting full backup of storage area (RDB$SYSTEM)
LDA100:[DB]MYTESTDB.RDA;1
%RMU-I-BCKTXT_12, Completed full backup of storage area (RDB$SYSTEM)
LDA100:[DB]MYTESTDB.RDA;1
%RMU-I-BCKTXT_02, Starting full backup of storage area (A0009)
LDA300:[DB]A0009.RDA;1
%RMU-I-BCKTXT_02, Starting full backup of storage area (A0002)
LDA200:[DB]A0002.RDA;1
%RMU-I-BCKTXT_02, Starting full backup of storage area (A0007)
LDA100:[DB]A0007.RDA;1
%RMU-I-BCKTXT_02, Starting full backup of storage area (A0010)
LDA100:[DB]A0010.RDA;1
%RMU-I-BCKTXT_02, Starting full backup of storage area (A0006)
LDA300:[DB]A0006.RDA;1
%RMU-I-BCKTXT_02, Starting full backup of storage area (A0003)
LDA300:[DB]A0003.RDA;1
%RMU-I-BCKTXT_02, Starting full backup of storage area (A0004)
LDA100:[DB]A0004.RDA;1
%RMU-I-BCKTXT_02, Starting full backup of storage area (A0008)
LDA200:[DB]A0008.RDA;1
%RMU-I-BCKTXT_02, Starting full backup of storage area (A0005)
LDA200:[DB]A0005.RDA;1
%RMU-I-BCKTXT_12, Completed full backup of storage area (A0008)
LDA200:[DB]A0008.RDA;1
%RMU-I-BCKTXT_12, Completed full backup of storage area (A0010)
LDA100:[DB]A0010.RDA;1
%RMU-I-BCKTXT_12, Completed full backup of storage area (A0003)
LDA300:[DB]A0003.RDA;1
%RMU-I-BCKTXT_12, Completed full backup of storage area (A0004)
LDA100:[DB]A0004.RDA;1
%RMU-I-BCKTXT_02, Starting full backup of storage area (A0011)
LDA200:[DB]A0011.RDA;1
%RMU-I-BCKTXT_12, Completed full backup of storage area (A0009)
LDA300:[DB]A0009.RDA;1
%RMU-I-BCKTXT_02, Starting full backup of storage area (A0001)
LDA100:[DB]A0001.RDA;1
%RMU-I-BCKTXT_12, Completed full backup of storage area (A0007)
LDA100:[DB]A0007.RDA;1
%RMU-I-BCKTXT_02, Starting full backup of storage area (A0012)
LDA300:[DB]A0012.RDA;1
%RMU-I-BCKTXT_12, Completed full backup of storage area (A0001)
LDA100:[DB]A0001.RDA;1
%RMU-I-BCKTXT_12, Completed full backup of storage area (A0002)
LDA200:[DB]A0002.RDA;1
%RMU-I-BCKTXT_12, Completed full backup of storage area (A0006)
LDA300:[DB]A0006.RDA;1
%RMU-I-BCKTXT_12, Completed full backup of storage area (A0011)
LDA200:[DB]A0011.RDA;1
%RMU-I-BCKTXT_12, Completed full backup of storage area (A0005)
LDA200:[DB]A0005.RDA;1
%RMU-I-BCKTXT_12, Completed full backup of storage area (A0012)
LDA300:[DB]A0012.RDA;1
%RMU-I-COMPLETED, BACKUP operation completed

1.1.5 RMU/SET SERVERコマンドでの/NOOUTPUTの指定

RMU /SET SERVER /OUTPUT=filespec servertypeコマンドを使用して、いくつかのデータベース・サーバー・プロセスのデフォルトの出力ファイル指定を指定できます。出力ファイル指定が空の場合、出力ファイルのエントリは無効になります。このリリースでは、/OUTPUT修飾子で空の出力ファイル指定を指定して出力ファイル・エントリを無効にすることもできますが、この他に出力ファイル・エントリを無効にする方法の1つとして、RMU /SET SERVER /NOOUTPUT servertypeも指定できるようになりました。/NOOUTPUTがデフォルトであり、/OUTPUTを指定しない場合は出力ファイルのサーバー・ロギング・エントリが無効になることに注意してください。

/OUTPUT修飾子の構文は次のとおりです。

[NO]OUTPUT[=filespec]

次の例は、RMU/SET SERVERコマンドで/NOOUTPUTを指定するか、/OUTPUTを空の出力ファイル指定で指定するか、あるいは/NOOUTPUTがデフォルトのため/OUTPUTを指定しないことで、出力ファイル・エントリを無効にできるようになったことを示しています。

$ RMU /SET SERVER LRS /NOOUTPUT DUA0:[ZDB]ZDB.RDB
$ RMU /SET SERVER LRS /OUTPUT="" DUA0:[ZDB]ZDB.RDB
$ RMU /SET SERVER LRS DUA0:[ZDB]ZDB.RDB

1.1.6 新しい構成パラメータSQL_PROTOCOL_RETRY

Oracle Bug#6494061

Oracle Rdbの旧バージョンでは、リモート接続のクライアント側は、現行バージョンのリモートRdbプロトコルの使用中にエラーが発生した場合、デフォルトで、より古いバージョンを使用してリモート・サーバーとの通信を試みました。この再試行は、データベースの接続、作成または削除に失敗した場合に発生します。古いバージョンのプロトコルは、Rdb 5.1以下で使用されていたプロトコルです。この再試行の目的は、クライアントが非常に古いバージョンのリモート・サーバーと自動的に通信できるようにすることでした。

この再試行によって、多数のユーザーは、データベースの接続、作成または削除での失敗の報告に2倍の時間およびリソースが消費されるという影響を受けていました。場合によっては、クライアントとサーバーのプロトコル交換が非常に混乱し、クライアントがLEF状態でハングすることもありました。これはたとえば、リモート・サーバーが稼働しているノード上でRdbモニターを実行していなかった場合に発生することがありました。

前述の問題に対処するため、デフォルトの動作が変更されて、古いプロトコルは再試行で使用されなくなりました。Rdb 5.1以下のバージョンを使用しているリモート・データベースに接続する必要があるユーザーのために、再試行で古いプロトコルを使用するための新しい構成ファイル・パラメータが追加されました。この構成ファイル・パラメータの名前はSQL_PROTOCOL_RETRYです。これをRDB$CLIENT_DEFAULTS.DATファイルに追加する必要があります。構成ファイルの詳細は、Oracle Rdbのインストレーションおよび構成ガイドの第4章を参照してください。

たとえば、RDB$CLIENT_DEFAULTS.DATに次のエントリが含まれている場合、リモート・データベースを使用しているクライアント・アプリケーションでは、再試行で古いリモート・プロトコルが使用されます。

SQL_PROTOCOL_RETRY TRUE

1.1.7 RMU /RESTOREによる統一形式の記憶域のページ・サイズの変更

Oracle Bug#705542

以前は、RMU/RESTOREコマンドでは、混合形式の記憶域についてのみページ・サイズを増加できました。

この制限は緩和されました。RMUリストア操作では、混合および統一の両方の記憶域でページ・サイズの増加が可能になりました。


第2章
Oracle Rdbリリース7.2.1.4での拡張機能および変更点

2.1 Oracle Rdbリリース7.2.1.4での拡張機能および変更点

2.1.1 RMU/SHOW STATISTICS /STALL_LOGおよび/ALARM

Oracle Enhancement Bug#6331702

以前のOracle Rdbリリースでは、RMU/SHOW STATISTICS /STALL_LOG機能を使用すると、すべてのアクティブなストール・メッセージが各サンプル間隔でストール・ログ・ファイルに書き込まれていました。アクティブなストールのほとんどは短時間であるのに対し、出力される情報の量は膨大になる場合がありました。

この問題は、Oracle Rdbリリース7.2.1.4で解決されました。RMU/SHOW STATISTICSコマンドで、/OPTION修飾子に新しいLOG_STALL_ALARMキーワードを使用できるようになりました。/STALL_LOGおよび/ALARMを使用するとき、LOG_STALL_ALARMがあると、/ALARMで指定された期間を超過したストールのみがストール・ログ出力ファイルに書き込まれます。

2.1.2 RMU/SHOW STATISTICSのストール・アラームで起動されるプロシージャのパラメータの追加

Oracle Enhancement Bug#6331702

ストール・アラームで起動されるコマンドに渡すパラメータに、パラメータP6が追加されました。P6パラメータには、ストール・メッセージの書式設定文字列が含まれます。

起動されるコマンドに渡すパラメータは次のとおりです。

表2-1 ストール・アラームによって起動されるプロシージャのパラメータ
パラメータ 説明
P1 ルート・ファイル指定
P2 現在の日付/時間
P3 プロセスID
P4 ストリームID
P5 アラームのしきい値(秒)
P6 書式設定されたストール・メッセージ

2.1.3 RMU /SHOW AIPの新しい修飾子/BRIEF

Oracle Enhancement Bug#3390639

RMU /SHOW AIPコマンドで、/BRIEF修飾子がサポートされるようになりました。これによって、次の例に示すように、AIP情報が簡略化された表形式で表示されるようになりました。

$ RMU/SHOW AIP  DKA0:[DB]DB /PAREA=(4,5)/BRIEF
*----------------------------------------------------------------------------
* Logical Area Name             LArea PArea   Len Type
*----------------------------------------------------------------------------
RDB$SYSTEM_RECORD                  60     4   215 SYSTEM RECORD
RDB$SYSTEM_RECORD                  61     5   215 SYSTEM RECORD
EMPLOYEES_HASH                     79     4   215 HASH INDEX
EMPLOYEES                          82     4   121 TABLE
JOB_HISTORY_HASH                   85     4   215 HASH INDEX
JOB_HISTORY                        88     4    42 TABLE
DEPARTMENTS_INDEX                  89     5   430 SORTED INDEX
DEPARTMENTS                        90     5    55 TABLE

表示される列は次のとおりです。

2.1.4 RMU /SHOW AIPの新しい修飾子/PAREA

RMU /SHOW AIPコマンドで、/PAREA修飾子がサポートされるようになりました。これによって、指定された物理領域の論理領域に格納されたAIP情報が表示されます。

$ RMU/SHOW AIP DKA0:[DB]DB /BRIEF /PAREA=(4,5)
*----------------------------------------------------------------------------
* Logical Area Name             LArea PArea   Len Type
*----------------------------------------------------------------------------
RDB$SYSTEM_RECORD                  60     4   215 SYSTEM RECORD
RDB$SYSTEM_RECORD                  61     5   215 SYSTEM RECORD
EMPLOYEES_HASH                     79     4   215 HASH INDEX
EMPLOYEES                          82     4   121 TABLE
JOB_HISTORY_HASH                   85     4   215 HASH INDEX
JOB_HISTORY                        88     4    42 TABLE
DEPARTMENTS_INDEX                  89     5   430 SORTED INDEX
DEPARTMENTS                        90     5    55 TABLE

2.1.5 RMU DUMP EXPORTコマンドの新しいオプション

Oracle Rdbのこのリリースでは、RMU DUMP EXPORTのOPTIONS修飾子に新しいキーワードが追加されました。OPTIONS修飾子により、ダンプ・コマンドからの出力を変更できます。

使用上の注意


第3章
Oracle Rdbリリース7.2.1.3での拡張機能および変更点

3.1 Oracle Rdbリリース7.2.1.3での拡張機能および変更点

3.1.1 RMU /ANALYZE /INDEXのワイルドカードのサポート

RMU /ANALYZE /INDEXコマンドは、索引名の指定でワイルドカード文字の%および*を処理するようになりました。

次の例に、様々な組合せのワイルドカード・パターンの使用を示します。

$ RMU /ANALYZE /INDEX MF_PERSONNEL EMP*
$ RMU /ANALYZE /INDEX MF_PERSONNEL *LAST%NAME
$ RMU /ANALYZE /INDEX MF_PERSONNEL EMP%LAST%NAME
$ RMU /ANALYZE /INDEX MF_PERSONNEL *HASH, *LAST*

3.1.2 新しいRMU VERIFYメッセージ%RMU-E-BADCLTSEQALLOC、%RMU-E-BADCLTSEQMAXID、%RMU-E-BADCLTSEQUSED

クライアント順序の検証時にOracle Rdbデータベースの破損を検出する3つの新しい診断メッセージがRMU/VERIFYに追加されました。これらのメッセージは、データベース・ルートとRDB$SEQUENCESシステム表の間で検出されたクライアント順序定義の不一致を出力します。

%RMU-E-BADCLTSEQALLOCメッセージは、データベース・ルートに割り当てられたクライアント順序の数と、システム表RDB$SEQUENCESに定義されたクライアント順序の数との間に不一致がある場合に出力されます。

%RMU-E-BADCLTSEQMAXIDメッセージは、データベース・ルートに割り当てられたクライアント順序の数と、システム表RDB$SEQUENCESに定義されたシーケンスIDの最大値との間に不一致がある場合に出力されます。

%RMU-E-BADCLTSEQUSEDメッセージは、データベース・ルートで使用中のクライアント順序の数と、システム表RDB$SEQUENCESに定義されたクライアント順序の数との間に不一致がある場合に出力されます。

次の例に、この3つの新しいメッセージを示します。%RMU-E-NOSEQENTメッセージは、新しいメッセージではなく、RMU/VERIFYによって出力される既存のメッセージです。

$ RMU/VERIFY/ALL DISK:[DIRECTORY]MF_PERSONNEL
%RMU-E-BADCLTSEQALLOC, 32 client sequences allocated in the root is less
 than 55 client sequences defined in RDB$SEQUENCES.
%RMU-E-BADCLTSEQMAXID, 32 client sequences allocated in the root is less
 than the maximum client sequence id of 55 in RDB$SEQUENCES.
%RMU-E-NOSEQENT, sequence id 33 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 34 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 35 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 36 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 37 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 38 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 39 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 40 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 41 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 42 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 43 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 44 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 45 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 46 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 47 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 48 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 49 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 50 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 51 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 52 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 53 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 54 has no valid entry in the root file
%RMU-E-NOSEQENT, sequence id 55 has no valid entry in the root file
%RMU-E-BADCLTSEQUSED, 32 client sequences in use in the root does not
 equal 55 client sequences defined in RDB$SEQUENCES.

これらの3つのメッセージはいずれもデータベースの破損を示しており、この破損がなかった最後の状態へのデータベースのリストアおよびリカバリが必要となります。

3.1.3 データベースごとのRMU/SHOW LOCKSの新機能

Oracle Enhancement Bug#6004181

以前のリリースのRdbでは、複数のデータベースを開いているシステムでRMU/SHOW LOCKSを使用すると、出力が膨大な量になり、特定のロックがどのデータベースを参照しているのか判断しにくい場合がありました。

この問題は、Oracle Rdbリリース7.2.1.3で解決されました。RMU/SHOW LOCKSコマンドで、ルート・ファイル指定を使用できるようになり、いくつかのケースでは、追加のフィルタを適用することで特定のデータベースのロックを表示できる場合があります。

RMU/SHOW LOCKSコマンドでは、表示する前にロックをフィルタできない場合もあることに注意してください。また、データベースのLOCK PARTITIONING IS ENABLED機能を使用する場合、データベース・ロックは領域、ページおよびレコードなどのロック・タイプのロック・ツリー・ルートではないため、ルート・ファイル指定を持つRMU/SHOW LOCKSコマンドでは、領域、ページおよびレコードのロックを指定されたデータベースに関連付けることはできません。

3.1.4 CPU使用率の削減およびパフォーマンスの改善

Oracle Rdbリリース7.2.1.3では、いくつかの点でパフォーマンスの向上を実現しています。これらの変更点の多くは、I64システムで実行されるアプリケーションに固有のものか、I64システムでより大きな効果が得られるものです。強化された点は次のとおりです。

3.1.5 Rdb外部ルーチンによるOracle RDBMSへのアクセスのサンプル

Rdb SQL外部ファンクションおよびプロシージャを使用してOracle RDBMSデータベースにアクセスする例を示すファイルのセットがSQL$SAMPLEディレクトリに追加されました。これらのファイルには、PRO*Cソース・コードおよびビルド・プロシージャに加え、外部ルーチンを定義するためのRdb SQLスクリプトが含まれます。デモンストレーションは、次のファイルで構成されています。

次の対話型セッションは、ORAUSER.COMが実行された環境で、共有実行可能ファイルを作成し、PERSONNELデータベースのファンクションを定義する方法を示しています。

$ set default MY_DEMO_DIR
$ define PROCEXTFUNC MY_DEMO_DIR
$ copy sql$sample:PRO_C_EXT_FUNC.* *.*
$ @pro_c_ext_func.com

Pro*C/C++: Release 9.2.0.4.0 - Production on Fri May 11 19:34:32 2007

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

System default option values taken from: ora_proc20:pcscfg.cfg

 - Linking PRO_C_EXT_FUNC.EXE
$ SQL$
SQL> at 'f personnel';
SQL> @PRO_C_EXT_FUNC.SQL
SQL> commit;
SQL> exit;
$

デモンストレーション・ルーチンは、Oracle RDBMSデータベースのSCOTTスキーマのEMP表にアクセスするように設計されています。これらのルーチンを使用して、この表のデータを取得(シングルトン取得およびカーソルを使用して取得)、更新および挿入できます。

デモンストレーションで作成されるORA_PRO_C_DEMO_FUNCSというRdbストアド・モジュールには、次の外部ルーチンが含まれます。

3.1.6 新しいRMU /SET DATABASE /TRANSACTION_MODE=(...)コマンド

Oracle Bug#6047140

新しいRMU /SETコマンドDATABASE /TRANSACTION_MODE=(...)が追加されました。これにより、データベースを変更済としてマークせずに、データベースを許可されたトランザクション・モードに変更できます。このコマンドは、スタンバイ・データベースで許可されたトランザクション・モードを設定するために作成されています。このコマンドには、データベースへの排他的アクセスが必要です(オープンされたデータベースまたは他のユーザーによるデータベースへのアクセスは許可されません)。

スタンバイ・データベースでは読取り専用トランザクションのみが許可されるため、TRANSACTION_MODE=READ_ONLY修飾子の設定を使用できます。この設定により、レプリケーション操作がアクティブでないときも、常にスタンバイ・データベースへの変更を防止できます。

RMU /SET DATABASEコマンドには、データベース指定が必要です。RMU /SET DATABASE /TRANSACTION_MODE=(...)修飾子に対する有効なキーワードは次のとおりです。

モード・リストで複数のトランザクション・モードを指定する場合は、リストをカッコで囲み、各トランザクション・モードをカンマで区切ります。次の点に注意してください。

3.1.7 アフター・イメージ・ジャーナルのバックアップ・コマンドのCOMPRESS修飾子

Oracle Bug#6009124

アフター・イメージ・ジャーナル・バックアップ・ファイルは、データベース・バックアップ・ファイルと同様に圧縮できるようになりました。AIJバックアップ・ファイルの圧縮を、暗号化と組み合せることができます。RMUバックアップのCOMPRESSIONおよびENCRYPT修飾子の使用方法は、ヘルプを参照してください。

次のコマンドは、AIJバックアップ・ファイルの圧縮を操作できるように変更されました。

RMU /BACKUP /AFTER_JOURNAL /COMPRESSION
RMU /DUMP   /AFTER_JOURNAL
RMU /RECOVER

圧縮は、NEW_TAPE形式を使用したAIJバックアップ・ファイルでのみサポートされます。したがって、前述のすべてのコマンドは、コマンドラインに/FORMAT=NEW_TAPEを追加する必要があります。

RMU /BACKUP /AFTER_JOURNALコマンドに/LOG修飾子を追加すると、圧縮の詳細がログ出力の最後にレポートされます。

RMU /BACKUP /AFTER /FORMAT=NEW_TAPE  FOO.RDB FOO.ABF /COMPRESS=ZLIB /LOG
%RMU-I-AIJBCKBEG, beginning after-image journal backup operation
...
%RMU-I-LOGCOMPR, data compressed by 55% (27152 KB in/12471 KB out)

3.1.8 RMU /BACKUPコマンドの新しい修飾子/[NO]DATABASE_VERIFICATION

Oracle Enhancement Bug#4940557

RMU /BACKUPコマンドは、バックアップ操作の開始時に、限定的なデータベース・ルート・ファイルの検証を実行します。この検証は、各種データベースの破損、ルート・ファイルまたは関連データベース構造の不整合が検出される可能性があるデータベースのバックアップを防止することを目的としています。ただし、一部の限定されたケースでは、これらのチェックを回避することが望ましい場合もあります。

新しい修飾子/[NO]DATABASE_VERIFICATIONがRMU /BACKUPコマンドに追加されました。デフォルトの動作は/DATABASE_VERIFICATIONです。/NODATABASE_VERIFICATIONを指定すると、バックアップの最初にデータベース・ルート・ファイルの検証は実行されません。デフォルトの/DATABASE_VERIFICATIONの使用を強くお薦めします。

3.1.9 RMU /RECOVERコマンドの修飾子/[NO]CONFIRM

RMU /RECOVERコマンドの/CONFIRM修飾子は、AIJファイルの順序が不適切な場合にオペレータに問い合せます。

次の例では、AIJバックアップ・ファイルがB1、B3、B2、B4の順序で指定され、順序番号が1、3、2、4になっています。

$ RMU/RECOVER/NOLOG B1,B3,B2,B4
%RMU-I-LOGRECDB, recovering database file $1$DGA203:[DB]FOO.RDB;1
%RMU-W-AIJSEQPRI, AIJ file sequence number 1 created prior to
expected sequence 2
%RMU-I-LOGRECSTAT, transaction with TSN 0:224 ignored
%RMU-I-AIJONEDONE, AIJ file sequence 1 roll-forward operations completed
%RMU-W-NOTRANAPP, no transactions in this journal were applied
%RMU-W-AIJSEQAFT, incorrect AIJ file sequence 3 when 2 was expected
Do you wish to continue the roll-forward operation [N]:

ジャーナルの順序が不適切であることがRMUにより検出され、「RMU-W-AIJSEQAFT, incorrect AIJ file sequence 3 when 2 was expected」というメッセージが表示されます。次に、不適切なAIJファイル順序3を使用してロール・フォワード操作を続行してよいかどうかを尋ねてきます。オペレータが「Y」を指定すると、AIJファイル順序3のロール・フォワード操作が続行されます。指定しない場合、RMUは次のジャーナル(この例ではAIJファイル順序2)に進みます。


注意

データベースが破損する可能性があるため、通常、不適切なジャーナル順序を適用しないことをお薦めします。

/ORDER_AIJ_FILES修飾子を使用すると、指定したジャーナルが必ず適切な順序で適用されるようにできます。

/CONFIRM修飾子のデフォルトの設定は、バッチ処理の場合は/NOCONFIRM、それ以外の場合は/CONFIRMです。

3.1.10 RMU /RECOVERコマンドでの/ORDER_AIJ_FILESによる不要なファイルの除外

/ORDER_AIJ_FILES修飾子は、指定された入力AIJファイルを順序番号の昇順に並べるだけでなく、AIJファイルがデータベース・リカバリ順序の開始点より前にあることが明らかな場合、処理から一部のAIJファイルを除外できるようになりました。

次の例では、AIJバックアップ・ファイルがB1、B3、B2、B4の順序で指定され、順序番号が1、3、2、4になっています。/ORDER_AIJ_FILESは、適用されるジャーナルを昇順に並べ替えた後、RMU/RESTOREの出力で示すように、データベース・リカバリがAIJファイル順序2から開始されるため、B1を処理から除外できます。

$ RMU/RESTORE/NEW/NOCDD/NOAFTER FOO
%RMU-I-RESTXT_00, Restored root file DUA0:[DB]FOO.RDB;16
    .
    .
    .
%RMU-I-AIJRECFUL, Recovery of the entire database starts with
AIJ file sequence 2
%RMU-I-COMPLETED, RESTORE operation completed at 24-MAY-2007 12:23:32.99
$!
$ RMU/RECOVER/LOG/ORDER_AIJ_FILES B1,B3,B2,B4
    .
    .
    .
%RMU-I-LOGOPNAIJ, opened journal file DUA0:[DB]B2.AIJ;24
%RMU-I-LOGRECSTAT, transaction with TSN 0:256 ignored
%RMU-I-LOGRECSTAT, transaction with TSN 0:257 ignored
%RMU-I-RESTART, restarted recovery after ignoring 2 committed transactions
%RMU-I-AIJONEDONE, AIJ file sequence 2 roll-forward operations completed
%RMU-I-LOGRECOVR, 0 transactions committed
%RMU-I-LOGRECOVR, 0 transactions rolled back
%RMU-I-LOGRECOVR, 2 transactions ignored
%RMU-I-AIJNOACTIVE, there are no active transactions
%RMU-I-AIJSUCCES, database recovery completed successfully
%RMU-I-AIJNXTSEQ, to continue this AIJ file recovery, the
sequence number needed will be 3
    .
    .
    .

AIJバックアップ・ファイルには複数のジャーナル順序が含まれる可能性があるため、それ以外の場合は不要であると思われるすべてのジャーナル・ファイルを常に除外することはできないことに注意してください。ただし、データベース・リカバリの再開情報に基づいて、不要なジャーナルを確実に把握できる場合は、それらのジャーナルを処理から除外できます。


第4章
Oracle Rdbリリース7.2.1.2での拡張機能および変更点

4.1 Oracle Rdbリリース7.2.1.2での拡張機能および変更点

4.1.1 I64でのオプションのランタイム・ルーチン・ネイティブ・コンパイラ

AlphaおよびVAXシステムでは、実行時に、ネイティブなマシン命令のコール可能サブルーチンがOracle Rdbにより生成されます。これらのサブルーチンは、データベースの挿入、更新または取得操作を処理する際に実行されます。

I64システム上のOracle Rdbは、ハードウェアに移植可能な命令インタプリタを使用します。これにより、Integrity OpenVMSシステムでのOracle Rdbの迅速な開発およびデプロイが可能になりました。このリリースのRdbでは、第2段の最適化として、これらの移植可能な命令の一部をネイティブなI64マシン・コードに変換してパフォーマンスを向上します。

ほとんどのアプリケーションは、I64でのサブルーチンの解釈によって、パフォーマンスが大きく低下することはありません。ただし、コンパイルされるリクエストごとに多数のレコードを処理し、IO操作が比較的少ないアプリケーションでは、I64システムでのこれらのサブルーチンの解釈にかなりのCPU時間が費やされる場合があります。

これらのアプリケーションのパフォーマンスを改善するため、Oracle Rdbには、生成される多数のサブルーチンをネイティブなItanium命令のサブルーチンに変換できるオプションのランタイム・コンパイラが含まれています。この機能はオプションであり、ほとんどの場合は有効にする必要がありません。この機能によって、アプリケーションのパフォーマンスが改善されるかどうかを判定する唯一の方法は、アプリケーションで機能を有効にした場合と無効にした場合のテストを実施することです。

サブルーチンのコンパイルにはCPUオーバーヘッドが必要であり、また現在では、すべてのサブルーチンをネイティブItaniumルーチンにコンパイルできるわけではありません。オプションのランタイム・コンパイラ機能には追加の仮想メモリーが必要です。

将来は、この機能が拡張され、生成されるすべてのサブルーチンが処理される見込みです。また、将来において、この機能の拡張とともにパフォーマンスが継続的に向上すると見込まれています。

I64システムでこのオプションのランタイム・コンパイラを有効にするには、論理名RDMS$BIND_CODE_OPTIMIZATIONの値を2に指定するか、フラグCODE_OPTIMIZATION(2)を使用します。オプションのランタイム・コンパイラを無効にするには、論理名の割当てを解除するか、値を0に指定する、またはフラグCODE_OPTIMIZATION(0)を使用します。この論理名とフラグは、Alphaシステムには影響を与えません。次の例に、論理名およびフラグを使用したI64システム上のオプションのランタイム・コンパイラの有効化、無効化およびステータスの表示方法を示します。

! To enable:
$ DEFINE RDMS$BIND_CODE_OPTIMIZATION 2
$ DEFINE RDMS$SET_FLAGS "CODE_OPTIMIZATION(2)"
SQL> SET FLAGS 'CODE_OPTIMIZATION(2)';

! To disable:
$ DEFINE RDMS$BIND_CODE_OPTIMIZATION 0
$ DEFINE RDMS$SET_FLAGS "CODE_OPTIMIZATION(0)"
SQL> SET FLAGS 'CODE_OPTIMIZATION(0)';

! Show current setting enabled and disabled:
SQL> ATT 'FI MF_PERSONNEL';
SQL> SET FLAGS 'CODE_OPTIMIZATION(2)';
SQL> SHOW FLAGS

Alias RDB$DBHANDLE:
Flags currently set for Oracle Rdb:
   PREFIX,WARN_DDL,INDEX_COLUMN_GROUP,MAX_SOLUTION
   ,MAX_RECURSION(100),REFINE_ESTIMATES(127)
   ,CODE_OPTIMIZATION(2),NOBITMAPPED_SCAN

SQL> SET FLAGS 'CODE_OPTIMIZATION(0)';
SQL> SHOW FLAGS

Alias RDB$DBHANDLE:
Flags currently set for Oracle Rdb:
   PREFIX,WARN_DDL,INDEX_COLUMN_GROUP,MAX_SOLUTION
   ,MAX_RECURSION(100),REFINE_ESTIMATES(127),NOBITMAPPED_SCAN
SQL>

この機能が有効なとき、Oracle Rdbの機能または動作に違いが検出された場合は、論理名の割当てを解除して以前の(解釈による)実行モデルに戻すことができます。

4.1.2 大/小文字のパスワードのサポート

Oracle Bug#5916102

これまでのバージョンのOracle Rdbでは、大/小文字のパスワードを渡して、CONNECT、ATTACHおよびSET SESSION AUTHORIZATIONのUSER句およびUSING句を使用しようとすると、システム権限ファイル(UAF)でユーザーに対してOpenVMS /FLAGS=PwdMixフラグが指定されている場合でも失敗しました。

次の例では、OpenVMSユーザーUSER100は、UAFファイルに/FLAGS=PwdMixが定義されています。

SQL> attach 'filename personnel user ''user100'' using ''TEST100''';
%SQL-F-ERRATTDEC, Error attaching to database personnel
-RDB-E-AUTH_FAIL, authentication failed for user USER100
SQL> attach 'filename personnel user ''user100'' using ''Test100''';
SQL>

このOpenVMSバージョン7.3-2の機能に対するサポートが、Oracle Rdbリリース7.2.1.2に含まれました。ユーザー・アカウントのPwdMixフラグの詳細は、OpenVMSバージョン7.3-2のドキュメントを参照してください。

4.1.3 RMUでのSDLT600、LTO2、LTO3ドライブに対するテープ・サポートの追加

Super DLT600、Ultrium460およびUltrium960テープ・ドライブに関して、Oracle Rdb RMUでサポートされるVMSテープの密度および圧縮値が追加されました。これにより、Super DLT600、Ultrium460およびUltrium960ドライブへの書込みを行うRMUコマンドで、/DENSITY修飾子を使用して次の新しい密度値を指定できるようになります。

/DENSITY = (SDLT600,[NO]COMPACTION) - Super DLT600
/DENSITY = (LTO2,[NO]COMPACTION) - Ultrium460
/DENSITY = (LTO3,[NO]COMPACTION) - Ultrium960

次に、これらのテープ・ドライブのいずれかにRdbデータベースをバックアップするとき、圧縮する場合と圧縮しない場合の密度の指定の例を示します。

$ RMU/BACKUP/DENSITY=SDLT600/REWIND/LABEL=(LABEL1,LABEL2) -
 MF_PERSONNEL TAPE1:MFP.BCK, TAPE2:
$ RMU/BACKUP/DENSITY=(SDLT600,COMPACTION)/REWIND/LABEL=(LABEL1,LABEL2) -
 MF_PERSONNEL TAPE1:MFP.BCK, TAPE2:
$ RMU/BACKUP/DENSITY=LTO2/REWIND/LABEL=(LABEL1,LABEL2) -
 MF_PERSONNEL TAPE1:MFP.BCK, TAPE2:
$ RMU/BACKUP/DENSITY=(LTO2,COMPACTION)/REWIND/LABEL=(LABEL1,LABEL2) -
 MF_PERSONNEL TAPE1:MFP.BCK, TAPE2:
$ RMU/BACKUP/DENSITY=LTO3/REWIND/LABEL=(LABEL1,LABEL2) -
 MF_PERSONNEL TAPE1:MFP.BCK, TAPE2:
$ RMU/BACKUP/DENSITY=(LTO3,COMPACTION)/REWIND/LABEL=(LABEL1,LABEL2) -
 MF_PERSONNEL TAPE1:MFP.BCK, TAPE2:


第5章
Oracle Rdbリリース7.2.1.0での拡張機能および変更点

5.1 Oracle Rdbリリース7.2.1.0での拡張機能および変更点

5.1.1 新しいCONCAT(||)演算子の実装

Oracle Rdbのこのリリースでは、より効率的でより少ない仮想メモリーを使用する新しいCONCATが実装されています。この新しい実装には、次のような変更点があります。

5.1.2 情報表RDB$JOURNALSの新しい列

Oracle Bug#5401232

情報表RDB$JOURNALSに、RDB$SEQUENCE_NUMBER列およびRDB$STATE列が追加されました。これらの列には、現行のAIJ順序番号およびAIJファイルのSTATE(「Current」または「Latent」のいずれか)が含まれます。

SQL> select RDB$SEQUENCE_NUMBER, RDB$STATE from RDB$JOURNALS;
 RDB$SEQUENCE_NUMBER   RDB$STATE
                  -1   Latent
                  -1   Latent
                   3   Current
3 rows selected

情報表RDB$JOURNALSがすでに含まれている既存のデータベースをアップグレードするには、その表を削除し、SQL$SAMPLE:INFO_TABLES.SQLを再実行します。これにより、新規の完全なRDB$JOURNALS表が作成されます(他の情報表の存在に関するエラーは無視しても支障ありません)。または、情報表を削除し、必要な列を持つ情報表を再作成します(使用可能な列は、SQL$SAMPLE:INFO_TABLES.SQLを参照してください)。

Rdbリリース7.2.1のインストール後、RDB$JOURNALS情報表が含まれるデータベースは以前のとおり機能し続けますが、新しい列は表示されません。同様に、前のバージョンのINFO_TABLES.SQLも以前のとおり機能し続けますが、新しい列は表示されません。

RDB$JOURNALSの新しい列の定義は、次のとおりです。

Column Name          Date Type   Domain
-----------          ---------   ------
RDB$SEQUENCE_NUMBER  integer     RDB$COUNTER
RDB$STATE            char(31)    RDB$USAGE

5.1.3 Oracle Rdbリリース7.2.x.xの新機能のドキュメントの追加

これまでのすべてのRdb 7.2のリリース・ノートに掲載されたすべての新機能の章を含む新しいドキュメントが作成されました。このドキュメントは、Rdbキットの保存セットAにあります。RDB_NEWFEATURES_72xxという名前で、PostScript、テキストおよびPDF形式で提供されます。これにより、Rdb 7.2リリースに追加されたすべての新機能の詳細を1つのドキュメントで参照できます。

5.1.4 RMU /SHOW AFTER_JOURNAL /BACKUP_CONTEXTからのホット・スタンバイの状態記号

ホット・スタンバイのレプリケーションの状態を示す追加のDCL記号がRMU /SHOW AFTER_JOURNAL /BACKUP_CONTEXTコマンドによって作成されるようになりました。

記号の名前は次のとおりです。

5.1.5 RMU BACKUP、COPY、MOVE /THREADS=nの新しい修飾子

バックアップ、コピーまたは移動操作によって作成されるシステム負荷をよりよく制御できるように、新しい修飾子が追加されました。新しい修飾子を使用して、RMUによって使用されるスレッド数を指定できます。

RMUでは、内部的な実行スレッドと呼ばれるものを作成して特定の記憶域からデータを読み取ります。スレッドは、RMUイメージを実行しているプロセス内で擬似並列実行されます。各スレッドはI/O負荷を生成し、仮想アドレス空間やプロセスの割当て制限(たとえば、FILLMやBYTLM)などのリソースを消費します。スレッド数が多いほど、ある時点で生成されるI/Oが増加し、同じタスクの実行に多くのリソースが必要になります。

スレッド数が増加すると、パラレル・アクティビティによってディスク・ドライブが活発に動作するため、パフォーマンスが向上します。ただし、一定のスレッド数になると、ディスクI/Oサブシステムが飽和状態になり、ディスク・ドライブのI/Oキューが増加するため、パフォーマンスが低下します。また、スレッドのスケジュールのオーバーヘッドによって追加のCPU時間が生じるため、全体的なパフォーマンスが低下します。ディスクI/Oサブシステムが最適な状態で動作するには、通常、入力ディスク・ドライブごとに2〜5スレッドで十分です。ただし、RAIDセットおよび追加のキャッシュ・メモリーを備えたディスク・コントローラなど、一部のコントローラは、より多くのスレッドのI/O負荷を処理できます。

COPYまたはMOVE操作では、1つのスレッドが一度に1つの記憶域のデータを移動します。移動の対象となる記憶域がスレッド数よりも多い場合は、次のアイドル・スレッドが次の記憶域を引き受けます。記憶域は、最も大きな領域からサイズ順に移動されます。これにより、最初のスレッドが大きな領域を処理している間に、他のスレッドがより小さい領域を移動できるため、全体の経過時間が最適化されます。スレッドの修飾子を指定しない場合、デフォルトで10個のスレッドが作成されます。最小値は1スレッド、最大値はコピーまたは移動対象の記憶域の数です。記憶域の数より大きな値を指定した場合は、RMUが警告なしでスレッド数を記憶域の数に制限します。

BACKUP操作では、出力ストリームごとに1つのライター・スレッドが作成されます。出力ストリームは、テープ・ドライブ、ディスク・ファイルまたはメディア・ライブラリ・マネージャ・ストリームのいずれかです。さらに、RMUはいくつかのリーダー・スレッドを作成します。この数は指定することができます。RMUはリーダー・スレッドのサブセットをライター・スレッドに割り当てます。RMUは、ほぼ同じ量のデータが各出力ストリームに割り当てられるように、割当てを計算します。デフォルトでは、ライター・スレッドごとに5個のリーダー・スレッドが作成されます。ユーザーがスレッド数を指定した場合は、その数を使用してリーダー・スレッド・プールが作成されます。RMUは常に、リーダー・スレッドの数を記憶域の数に制限します。スレッド数が0であると、RMUによって記憶域ごとに1つずつスレッドが作成され、これらのすべてのスレッドが即座に並列で実行を開始します。これはパフォーマンスの改善に役立つ場合もありますが、記憶域の数が多い(>10)データベースでは、パフォーマンスが低下します。記憶域の数が非常に多い場合(>800)、仮想アドレス空間などのシステム・リソースのハード制限によって失敗します。

COPYまたはMOVE操作の場合、指定できる最小のスレッド数は1です。スレッド数1を使用すると、ワーキング・セットの使用率とディスクI/O負荷の観点から、最小のシステム負荷が生成されます。ディスクI/Oサブシステムは、多くの場合、より高いI/O負荷を処理できます。通常、1より少し大きい値を使用すると、実行時間がより高速になります。

BACKUPでは、指定できる最小のスレッド数は、出力ストリームの数です。これにより、各ライター・スレッドに少なくとも1つのリーダー・スレッドが割り当てられ、空の保存セットが生じません。出力ストリームと同数のスレッド数を使用すると、ワーキング・セットおよびディスクI/O負荷の観点から、最小のシステム負荷が生成されます。ディスクI/Oサブシステムは、多くの場合、より高いI/O負荷を処理できます。通常、出力ストリーム数より少し大きい値を使用(ライター・スレッドに割り当てるリーダー・スレッドを増加)すると、実行時間がより高速になります。

従来のREADER_THREAD_RATIO修飾子の使用は推奨されませんが、引き続き使用できる状態にあり、前のバージョンとまったく同じように機能します。

/THREADS修飾子の使用例を次に示します。


Copying one storage area at a time:

$ RMU /COPY /THREADS=1 /LOG FOO BCK
%RMU-I-MOVTXT_04, Starting move of storage area ...
%RMU-I-MOVTXT_01, Completed move of storage area ...
%RMU-I-MOVTXT_05, Moved snapshot area file ...
%RMU-I-MOVTXT_04, Starting move of storage area ...
%RMU-I-MOVTXT_01, Completed move of storage area ...
%RMU-I-MOVTXT_05, Moved snapshot area file ...
    .
    .
    .
Copying three storage areas in parallel:

$ RMU /COPY /THREADS=3 /LOG FOO BCK
%RMU-I-MOVTXT_04, Starting move of storage area ...
%RMU-I-MOVTXT_04, Starting move of storage area ...
%RMU-I-MOVTXT_04, Starting move of storage area ...
%RMU-I-MOVTXT_01, Completed move of storage area ...
%RMU-I-MOVTXT_05, Moved snapshot area file ...
%RMU-I-MOVTXT_04, Starting move of storage area ...
%RMU-I-MOVTXT_01, Completed move of storage area ...
%RMU-I-MOVTXT_05, Moved snapshot area file ...
    .
    .
    .

5.1.6 LNM$SYSCLUSTER_TABLE表での隠された論理名の定義

以前は、様々な目的で使用される隠された論理デバイス名をLNM$SYSTEM_TABLE論理名表に定義する必要がありました。この要件は、異なるプロセス・コンテキストで実行中のデータベース・システムの様々なコンポーネントがすべて同一の論理名定義に確実にアクセスできるようにするためのものです。LNM$SYSTEM_TABLEに定義されていない隠された論理デバイス名を使用すると、COSI-F-NOTSYSCONCEAL「non-system concealed device name in filename」ステータスが発生する場合がありました。

この制限はいくらか緩和されました。データベースを使用するすべてのプロセスは同一の論理名定義へのアクセスが必要ですが、これをLNM$SYSTEM_TABLE論理名表またはLNM$SYSCLUSTER_TABLE論理名表(クラスタ全体のリソースを表す)を使用して実現できるようになりました。ただし、クラスタ・ノードで同時に両方の表に隠された論理デバイス名を定義しないことを強くお薦めします。予測できない結果が起こり、データベースが破損したり不安定になる可能性があります。

5.1.7 AlphaおよびItaniumでのGNAT Adaのサポート

プリコンパイル済SQLおよびSQLモジュール言語にAda Core GNAT Adaコンパイラのサポートが追加されました。このサポートにより、GNAT AdaコンパイラをSQL$PRE/ADAコンパイルのターゲットにすることが可能になり、SQLモジュール言語のモジュールのGNAT Adaプログラムとのインタフェースが容易になります。ほとんどの場合、既存アプリケーションのDEC AdaからGNAT Adaへの移行に際して変更が必要となるのは、異なる2つの言語による規則の相違点のみです。GNAT Adaでは、ソース・ファイル内に単一のコンパイル・ユニット、つまり、単一のパッケージ指定または単一のパッケージ本体が必要です。この点が、ほとんどのDEC Adaアプリケーションとの最も大きな相違点となります。ファイルにパッケージ指定およびパッケージ本体が含まれる場合、各ファイルに接尾辞.ADSおよび.ADBを使用する必要があります。

DEC AdaのAda開発ライブラリ・アプローチと比較して、GNAT Adaでは、UNIXに類似したコンパイル環境を使用します。これには、オブジェクト・ファイルおよび.ALI(Ada Library Information)ファイルを生成するGNAT COMPILE、整合性をチェックし、詳細の順序を決定して、その詳細を取り入れたメイン・プログラムを生成するGNAT BIND、およびGNAT BINDからのメイン・プログラムをコンパイルし、リンカ・オプションのセットを作成し、OpenVMSリンク・ユーティリティをコールして実行可能プログラムを生成するGNAT LINKからなる、3つのステップが含まれます。また、不要になったプログラムを検出して再コンパイルする処理も含め、これらのステップをまとめるGNAT MAKEというユーティリティもあります。ほとんどの場合、プリコンパイル済SQLアプリケーションおよびSQLモジュール言語のモジュールをコールするアプリケーションは、GNAT MAKEを使用して構築できます。ただし、SQL$PREまたはSQL$MODを使用して.SQLADAおよび.SQLMODソース・コード・ファイルが事前にコンパイルされている必要があります。

GNAT Adaの開発の詳細は、OpenVMSでのGNAT Adaに関するAda Coreのドキュメントを参照してください。次に、関連のあるAda Coreドキュメントを示します。

サポートされるAda Core GNAT Adaコンパイラのバージョンの最小値は、Alphaでは5.04a1、Itaniumでは5.04aです。

Itanium上のHPではDEC Adaはサポートされないため、ItaniumでのAda開発にはGNAT Adaのみを選択できます。Alphaでは、DEC AdaまたはGNAT Adaを使用できます。SQL$PREの場合、この選択は、/ADA修飾子に追加される値によって決まります。/ADA={DEC_ADA,GNAT_ADA}のように入力され、デフォルトはDEC_ADAです。

Alpha上のSQLモジュール言語の場合、2つの方法によりターゲットとなるAdaコンパイラを指定できます。最初の方法として、モジュール・ヘッダーにPRAGMAという新しい句があり、有効なキーワードGNAT_ADAおよびDEC_ADA(いずれか1つのみ)を指定できます。将来は、他の目的のためにPRAGMA句のキーワードが追加される可能性があります。PRAGMA句は、次の構文に従ってモジュール・ヘッダーに表示されます。




次に、GNAT Adaをターゲットとして指定する場合のモジュール・ヘッダーでのPRAGMA句の使用例を示します。

MODULE         MY_MODULE
DIALECT        SQL99
LANGUAGE       ADA
AUTHORIZATION  SAMPLE_USER
PRAGMA         (GNAT_ADA)
ALIAS          RDB$DBHANDLE
PARAMETER      COLONS

ターゲット・コンパイラを指定する2番目の方法として、コマンドラインの新たなSQL$MOD修飾子/PRAGMA={GNAT_ADA,DEC_ADA}があります。コード中のPRAGMA句が、修飾子よりも優先されます。

5.1.7.1 プラグマEXTEND_SYSTEM

SQLは、DEC AdaのSYSTEMパッケージに定義されたいくつかの型に依存します。これらの型の多くは、Ada Core実装にはありません。Ada Core実装には特殊なプラグマが存在し、このプラグマを使用することで、これらの型およびその関連ファンクションを使用できます。次に例を示します。

pragma EXTEND_SYSTEM (AUX_DEC);

このプラグマをコンパイル・ディレクトリのGNAT Adaコンパイル構成ファイル(GNAT.ADC)に追加して、すべてのコンパイルに自動的に適用することができます。GNAT Adaコンパイル環境およびGNAT.ADCファイルの詳細は、Ada Coreのドキュメントを参照してください。

5.1.7.2 SQL_STANDARDパッケージ

DEC Adaでは、SQL_STANDARDパッケージは、Rdbインストール・プロシージャによってSYS$LIBRARY内にSQL$STANDARD.ADAというファイル名で格納されます。GNAT Adaのネーミング規則に合致させるため、SQL_STANDARDパッケージを含む新しいファイルが作成されました。このファイルはSQL_STANDARD.ADSであり、Rdbインストール・プロシージャによってSYS$LIBRARYに格納されます。

5.1.7.3 GNAT Adaの型の相違

GNAT Adaでは、SYSTEM.ADDRESS型のデフォルトのアドレス・サイズは64ビットです。現在、すべてのSQLルーチンは32ビット・アドレスを使用しています。これに応じて、Ada SQLVAR_RECレコード(SQLDAで使用)の定義が変更されて、SQLDATAおよびSQLINDの各コンポーネントはSYSTEM.ADDRESSのかわりにSYSTEM.SHORT_ADDRESSになっています。

その他の関連のあるGNAT Adaの型の違いは、浮動小数点型(SQL REALおよびDOUBLE PRECISIONデータ型に対応)に関係があります。GNAT Adaでは、SYSTEMパッケージに明示的な浮動小数点表現の型を提供するかわりに、STANDARDパッケージの型に浮動小数点表現を指定するプラグマを提供しています。これらのプラグマはFloat_RepresentationおよびLong_Floatです。Float_Representationでは、IEEE_FloatまたはVAX_Floatを指定できます。VAX_Floatを指定した場合、プラグマLong_Floatにより、D_FloatまたはG_Floatを指定できます。SQLに関連があり、これらのプラグマの影響を受けるSTANDARDパッケージの型は、SINGLE_FLOATおよびDOUBLE_FLOATです。GNAT Adaの浮動小数点プラグマの詳細は、Ada Coreのドキュメントを参照してください。

5.1.7.4 SQLモジュール言語

SQL$MODは、GNAT COMPILEを生成およびコールして、モジュールと同じ名前および接頭辞.ADSが付けられたAdaパッケージ指定をコンパイルします。前述のモジュール・ヘッダーの例では、パッケージ指定ファイルはMY_MODULE.ADSとなります。GNAT COMPILEはオブジェクト・ファイルを作成し、この例の続きでは、そのファイルの名前はMY_MODULE.OBJとなります。SQL$MODによって直接に生成されるSQLオブジェクト・ファイルは、デフォルトで、.SQLMODソース・ファイルと接頭辞が同じであり、接尾辞は.OBJです。または、/OBJECT=修飾子を使用した場合は、その修飾子によって指定された名前が付けられます。SQL$MODは、この名前がGNAT Adaコンパイラのオブジェクト・ファイルの名前と重複するかどうかを確認し、重複する場合は、オブジェクト・ファイルに接尾辞.SQL_OBJを使用して名前の競合を防止します。また、SQL$MODは、GNAT LINKがSQLオブジェクト・ファイルでアプリケーションにリンクできるように、VMSリンカ・ユーティリティのオプション・ファイルも生成します。このmodule_name.OPTというオプション・ファイルには、SQL$MODにより生成されたオブジェクト・ファイルでGNAT LINKへの参照を解決できるように、SQL$USERライブラリのエントリも含まれます。SQL$MODは、生成される.ADSファイルにプラグマLinker_Optionsを追加して、.OPTファイルが生成されることをGNAT LINKに通知します。GNAT LINKは、OpenVMSリンカ・ユーティリティ用にオプション・ファイルを作成して、そのファイルにSQL$MODにより生成されたオプション・ファイルを統合します。このアプローチにより、SQL$MODのコンパイルが完了していれば、GNAT MAKEユーティリティを使用してSQLモジュール言語のモジュールをコールするほとんどのGNAT Adaアプリケーションの構築が可能になります。

5.1.7.5 プリコンパイル済のSQL

プリコンパイル済SQLでは、.SQLADAソース・ファイルの出力ファイルがいくつか生成されます。その1つのAdaソース・ファイルには、EXEC SQL文をプロシージャ・コールに変換した元のSQLADAファイルのAdaコードが含まれます。DEC Adaの場合、このファイルの名前は、元のSQLADAファイルの名前と同じですが、拡張子として.ADAが付けられます。GNAT Adaの場合は、GNAT Adaのネーミング規則に従って、このファイルの拡張子は.ADBです。SQL$PREは、GNATコンパイラをコールして.ADBファイルをコンパイルして、接尾辞が.OBJのオブジェクト・ファイルと、GNAT BINDおよびGNAT LINKコマンドで必要な.ALIファイルを生成します。DEC Adaの場合と同様に、SQL$PREは、EXEC SQL文をSQLモジュールのルーチン・コールに置き換えます。SQL$PREは、SQLモジュールのオブジェクト・ファイルおよびそのAdaパッケージ指定を生成します。DEC Adaの場合と同様に、生成されるSQLモジュール・ファイルのデフォルトのファイル名の接頭辞として、元のファイル名の先頭にSQL_が付けられます。唯一の相違点は、SQLモジュールのAdaパッケージ指定には、GNAT Adaの規則に従って接尾辞.ADSが付けられる点です。

GNAT Adaをターゲットとする場合、SQL$PREでは、DEC Adaの場合と同様に、生成されたAdaファイルとともにGNAT Adaコンパイラが自動的にコールされます。GNAT BINDおよびGNAT LINKコマンドを使用して実行可能ファイルを構築できるように、SQL$PREにより生成された.ADBおよび.ADSの両方のファイルがコンパイルされます。.ADSファイルをコンパイルすると、SQL$PREによって生成されるオブジェクト・ファイルと同じ名前、つまり、SQL_module_name.OBJというオブジェクト・ファイルが生成されます。これにより、SQL$PREによって生成されるオブジェクト・ファイルの名前はSQL_module_name.SQL_OBJです。SQL$PREは、GNAT LINKが.SQL_OBJファイルでアプリケーションにリンクできるように、VMSリンカ・ユーティリティのオプション・ファイルを生成します。このSQL_module_name.OPTというオプション・ファイルには、SQL$PREにより生成されたオブジェクト・ファイルでGNAT LINKへの参照を解決できるように、SQL$USERライブラリのエントリも含まれます。生成される.ADSファイルにプラグマLinker_Optionsが追加されて、.OPTファイルの生成についてGNAT LINKに通知されます。

GNAT Adaでは、RDB$MESSAGE_VECTOR PSECTへのオブジェクト・マッピングとしてのRDB_MESSAGE_VECTORの宣言が、.ADBファイルに移動しました。これは、RDB_MESSAGE_VECTORの宣言が.ADSファイルに存在すると、生成されるコードが適切にリンクしないためです。

次に、GNAT Adaコンパイラを使用してプリコンパイル済SQLアプリケーションを構築する例を示します。Itaniumでは、GNAT Adaのみがサポートされるため、=/GNAT_ADA修飾子は不要です。この例では、SQL$SAMPLESから、SQL_ALL_DATATYPESアプリケーションのAdaバージョンを構築して実行する方法を示します。

$!
$! Set up GNAT Ada environment
$!
$ CREATE GNAT.ADC
pragma EXTEND_SYSTEM (AUX_DEC);
$ DEFINE ADA_INCLUDE_PATH SYS$LIBRARY
$ GNAT COMPILE SYS$LIBRARY:SQL_STANDARD.ADS
$!
$! Build SQL_ALL_DATATYPES
$!
$ SQL$PRE/ADA=GNAT_ADA SQL$SAMPLE:SQL_ALL_DATATYPES
$ GNAT MAKE SQL_ALL_DATATYPES
$!
$ RUN SQL_ALL_DATATYPES

5.1.8 SQLCAの拡張機能

このリリースでのSQLCAに対する拡張機能は次のとおりです。

表5-1 SQLCA SQLERRD [0]の値
シンボリック名+ SQL文
0 不明
SQL_K_OCTRDB_CONNECT -1 Rdb Connect
SQL_K_OCTRDB_ATTACH -2 Rdb Attach
SQL_K_OCTRDB_DISCONNECT -3 Rdb Disconnect
SQL_K_OCTRDB_CREATE_MODULE -4 Rdb Create Module
SQL_K_OCTRDB_ALTER_MODULE -5 Rdb Alter Module
SQL_K_OCTRDB_DROP_MODULE -6 Rdb Drop Module
SQL_K_OCTRDB_CREATE_DOMAIN -7 Rdb Create Domain
SQL_K_OCTRDB_ALTER_DOMAIN -8 Rdb Alter Domain
SQL_K_OCTRDB_DROP_DOMAIN -9 Rdb Drop Domain
SQL_K_OCTRDB_CREATE_CATALOG -10 Rdb Create Catalog
SQL_K_OCTRDB_ALTER_CATALOG -11 Rdb Alter Catalog
SQL_K_OCTRDB_DROP_CATALOG -12 Rdb Drop Catalog
SQL_K_OCTRDB_ALTER_SCHEMA -13 Rdb Alter Schema
SQL_K_OCTRDB_DROP_SCHEMA -14 Rdb Drop Schema
SQL_K_OCTRDB_SET_SESSION -15 Rdb Set Session Authorization
SQL_K_OCTCTB 1 create table
SQL_K_OCTINS 2 insert
SQL_K_OCTSEL 3 select
SQL_K_OCTCCL 4 create cluster
SQL_K_OCTACL 5 alter cluster
SQL_K_OCTUPD 6 update
SQL_K_OCTDEL 7 delete
SQL_K_OCTDCL 8 drop cluster
SQL_K_OCTCIX 9 create index
SQL_K_OCTDIX 10 drop index
SQL_K_OCTAIX 11 alter index
SQL_K_OCTDTB 12 drop table
SQL_K_OCTCSQ 13 create sequence
SQL_K_OCTASQ 14 alter sequence
SQL_K_OCTATB 15 alter table
SQL_K_OCTDSQ 16 drop sequence
SQL_K_OCTGRA 17 grant
SQL_K_OCTREV 18 revoke
SQL_K_OCTCSY 19 create synonym
SQL_K_OCTDSY 20 drop synonym
SQL_K_OCTCVW 21 create view
SQL_K_OCTDVW 22 drop view
SQL_K_OCTVIX 23 validate index
SQL_K_OCTCPR 24 create procedure
SQL_K_OCTAPR 25 alter procedure
SQL_K_OCTLTB 26 lock table
SQL_K_OCTNOP 27 no operation
SQL_K_OCTRNM 28 rename
SQL_K_OCTCMT 29 comment
SQL_K_OCTAUD 30 audit
SQL_K_OCTNOA 31 noaudit
SQL_K_OCTCED 32 create database link
SQL_K_OCTDED 33 drop database link
SQL_K_OCTCDB 34 create database
SQL_K_OCTADB 35 alter database
SQL_K_OCTCRS 36 create rollback segment
SQL_K_OCTARS 37 alter rollback segment
SQL_K_OCTDRS 38 drop rollback segment
SQL_K_OCTCTS 39 create tablespace
SQL_K_OCTATS 40 alter tablespace
SQL_K_OCTDTS 41 drop tablespace
SQL_K_OCTASE 42 alter session
SQL_K_OCTAUR 43 alter user
SQL_K_OCTCWK 44 commit
SQL_K_OCTROL 45 rollback
SQL_K_OCTSPT 46 savepoint
SQL_K_OCTPLS 47 pl/sql execute
SQL_K_OCTSET 48 set transaction
SQL_K_OCTASY 49 alter system switch log
SQL_K_OCTXPL 50 explain
SQL_K_OCTCUS 51 create user
SQL_K_OCTCRO 52 create role
SQL_K_OCTDUS 53 drop user
SQL_K_OCTDRO 54 drop role
SQL_K_OCTSER 55 set role
SQL_K_OCTCSC 56 create schema
SQL_K_OCTCCF 57 create control file
SQL_K_OCTATR 58 Alter tracing
SQL_K_OCTCTG 59 create trigger
SQL_K_OCTATG 60 alter trigger
SQL_K_OCTDTG 61 drop trigger
SQL_K_OCTANT 62 analyze table
SQL_K_OCTANI 63 analyze index
SQL_K_OCTANC 64 analyze cluster
SQL_K_OCTCPF 65 create profile
SQL_K_OCTDPF 66 drop profile
SQL_K_OCTAPF 67 alter profile
SQL_K_OCTDPR 68 drop procedure
SQL_K_OCTARC 70 alter resource cost
SQL_K_OCTCSL 71 create snapshot log
SQL_K_OCTASL 72 alter snapshot log
SQL_K_OCTDSL 73 drop snapshot log
SQL_K_OCTCSN 74 create snapshot
SQL_K_OCTASN 75 alter snapshot
SQL_K_OCTDSN 76 drop snapshot
SQL_K_OCTCTY 77 create type
SQL_K_OCTDTY 78 drop type
SQL_K_OCTARO 79 alter role
SQL_K_OCTATY 80 alter type
SQL_K_OCTCYB 81 create type body
SQL_K_OCTAYB 82 alter type body
SQL_K_OCTDYB 83 drop type body
SQL_K_OCTDLB 84 drop library
SQL_K_OCTTTB 85 truncate table
SQL_K_OCTTCL 86 truncate cluster
SQL_K_OCTCBM 87 create bitmapfile
SQL_K_OCTAVW 88 alter view
SQL_K_OCTDBM 89 drop bitmapfile
SQL_K_OCTSCO 90 set constraints
SQL_K_OCTCFN 91 create function
SQL_K_OCTAFN 92 alter function
SQL_K_OCTDFN 93 drop function
SQL_K_OCTCPK 94 create package
SQL_K_OCTAPK 95 alter package
SQL_K_OCTDPK 96 drop package
SQL_K_OCTCPB 97 create package body
SQL_K_OCTAPB 98 alter package body
SQL_K_OCTDPB 99 drop package body
SQL_K_OCTCDR 157 create directory
SQL_K_OCTDDR 158 drop directory
SQL_K_OCTCLB 159 create library
SQL_K_OCTCJV 160 create java
SQL_K_OCTAJV 161 alter java
SQL_K_OCTDJV 162 drop java
SQL_K_OCTCOP 163 create operator
SQL_K_OCTCIT 164 create indextype
SQL_K_OCTDIT 165 drop indextype
SQL_K_OCTAIT 166 alter indextype用に予約
SQL_K_OCTDOP 167 drop operator
SQL_K_OCTAST 168 associate statistics
SQL_K_OCTDST 169 disassociate statistics
SQL_K_OCTCAL 170 call method
SQL_K_OCTCSM 171 create summary
SQL_K_OCTASM 172 alter summary
SQL_K_OCTDSM 173 drop summary
SQL_K_OCTCDM 174 create dimension
SQL_K_OCTADM 175 alter dimension
SQL_K_OCTDDM 176 drop dimension
SQL_K_OCTCCT 177 create context
SQL_K_OCTDCT 178 drop context
SQL_K_OCTASO 179 alter outline
SQL_K_OCTCSO 180 create outline
SQL_K_OCTDSO 181 drop outline
SQL_K_OCTAOP 183 alter operator
SQL_K_OCTCEP 184 create encryption profile
SQL_K_OCTAEP 185 alter encryption profile
SQL_K_OCTDEP 186 drop encryption profile
SQL_K_OCTCSP 187 create spfile from pfile
SQL_K_OCTCPS 188 create pfile from spfile
SQL_K_OCTUPS 189 merge
SQL_K_OCTCPW 190 change password
SQL_K_OCTUJI 191 update join index
SQL_K_OCTASYN 192 alter synonym
SQL_K_OCTADG 193 alter disk group
SQL_K_OCTCDG 194 create disk group
SQL_K_OCTDDG 195 drop disk group
SQL_K_OCTALB 196 alter library
SQL_K_OCTPRB 197 purge user recyclebin
SQL_K_OCTPDB 198 purge dba recyclebin
SQL_K_OCTPTS 199 purge tablespace
SQL_K_OCTPTB 200 purge table
SQL_K_OCTPIX 201 purge index
SQL_K_OCTUDP 202 undrop object
SQL_K_OCTDDB 203 drop database
SQL_K_OCTFBD 204 flashback database
SQL_K_OCTFBT 205 flashback table


+ 正の値は、Oracle 10gとの互換性のために定義されています。一部の文はOracle Rdbでサポートされていません。そのため、SQLCAでは表示されない値もあります。負の値は、Oracle Rdb固有の値です。

5.1.9 RMU /COPY、/MOVE、/BACKUP、/RESTOREおよびデータベースIOでのファイル・システム・キャッシングの防止

CPU消費およびXFCスピンロックの競合の低減、ファイル・システム・キャッシュのスラッシングの防止、ファイルの読取りおよび書込み操作の効率化のため、次に示す様々なファイルおよび操作で、オペレーティング・システムによるキャッシングは無効化されています。

様々な構成でのテストにより、一般に、これらのデータベース・ファイルIO操作でオペレーティング・システムのXFCキャッシュを行わないと、CPUとIOのコスト・バランスを考慮して、全体的なパフォーマンスが向上することが指摘されています。

5.1.10 RMU /BACKUP /COMPRESSIONの新しいアルゴリズム

RMU /BACKUP /COMPRESSION機能が拡張されて、圧縮アルゴリズムが追加されました。RMU /BACKUP /COMPRESSに、Jean-loup GaillyとMark Adlerによって開発された、ZLIBアルゴリズムとソフトウェアが実装されました。通常、この実装では、HUFFMANまたはLZSSアルゴリズムと同じCPU時間かそれ以下で、効率(圧縮率)がより高くなります。

/COMPRESSION修飾子は、次のキーワードを受け付けます。

/COMPRESSION修飾子を値なしで指定した場合、デフォルトは/COMPRESSION=ZLIB=6です。

次に/COMPRESS修飾子の使用例を示します。/LOG=FULLを指定すると、データ圧縮の統計情報が表示されます。

$ RMU /BACKUP /COMPRESS /NOLOG FOO BCK
$ RMU /BACKUP /COMPRESS=ZLIB:9 /LOG=FULL FOO BCK
    .
    .
    .
BACKUP summary statistics:
        Data compressed by 53% (9791 KB in/4650 KB out)

古いOracle Rdb 7.2リリースおよび圧縮されたRBFファイル

前のリリースのOracle Rdbでは、ZLIBアルゴリズムで圧縮されたRBFファイルを読み取ることができません。V7.2.1より前のOracle Rdbリリース7.2を使用して、圧縮されたバックアップを読み取るには、作成時に/COMPRESSION=LZSSまたは/COMPRESSION=HUFFMANを明示的に指定する必要があります(これは、デフォルトの圧縮アルゴリズムがLZSSからZLIBに変更されているためです)。Oracle Rdbリリース7.2.1では、前のリリースで作成された、LZSSまたはHUFFMANアルゴリズムを使用して圧縮されたバックアップを読み取ることができます。


異なる圧縮効果

どのアルゴリズムでも、実際の圧縮量は、圧縮の対象となる実際のデータに大きく左右されます。データベースの内容によっては、圧縮効果が高い場合もあれば、まったく圧縮されず、事実上、出力が大きくなる場合もあります。

/ENCRYPTと/COMPRESS機能を併用した場合、データは最初に圧縮され、次に暗号化されます。これにより、有効な圧縮および有効な暗号化が提供されます。

5.1.11 RMUのアンロードとロードでの圧縮サポートの拡張

Oracle Bug#690179および675012

Oracle Rdbのこのリリースでは、RMU Unload、RMU LoadおよびRMU Dump Exportの圧縮がサポートされるようになりました。

データ圧縮は、内部(交換)形式のファイルにアンロードされたユーザー・データに適用されます。表の行、NULLバイト・ベクトルおよびLIST OF BYTE VARYINGデータは、LZW(Lempel-Ziv-Welch)技術またはJean-loup GaillyとMark Adlerによって開発されたZLIBアルゴリズムを使用して圧縮されます。表のメタデータ(列名および属性)は圧縮されず、ファイルは構造化交換ファイルのままになります。このファイルはRMU Dump Exportコマンドを使用して処理することもできます。

これまでのリリースでも、表データの圧縮を有効にすると、RMUでアンロードするときと比較して、数倍も小さいサイズでデータベースに格納することが可能でした。データベース内では、単純かつ高速なRLE(Run-Length Encoding)アルゴリズムを使用して行を格納しますが、RMU Unloadによってこのデータは完全に拡張されます。圧縮を使用すると、データ・ファイルがさらにコンパクトになり、使用するディスク領域が減少し、通信回線での高速転送が可能になります。

RMU Unloadの変更点

RMU Unloadに、新しい/COMPRESSION修飾子が追加されました。デフォルトは、/NOCOMPRESSIONです。この修飾子では、オプションのキーワードLZW、ZLIB、LEVELおよびEXCLUDE_LISTを使用できます。使用する圧縮アルゴリズムは、ZLIB(デフォルト)またはLZWです。ZLIBでは、1〜9の数値レベルを受け入れるLEVELオプションを使用して、さらなるチューニングが可能になります。通常、デフォルトの6は、圧縮後のファイル・サイズとCPUコストの均衡を保つ上で最適な値です。

LIST OF BYTE VARYING列のデータは、すでに圧縮された形式(JPGデータとしてのイメージなど)になっている可能性があるため、RMU Unloadによって圧縮する必要がない場合もあります。事実上、このようなケースでは、圧縮によって出力が膨らむことがあります。そのため、/COMPRESSION修飾子は、LIST OF BYTE VARYING列の圧縮を無効にするEXCLUDE_LISTオプションを受け入れます。特定の列名のリストを指定できますが、指定しなかった場合は、すべてのLIST OF BYTE VARYING列が圧縮から除外されます。

$ rmu/unload/compress=LZW/debug=trace complete_works complete_works
complete_works
Debug = TRACE
Compression = LZW
* Synonyms are not enabled
Unloading Blob columns.
Row_Count = 500
Message buffer: Len: 54524
Message buffer: Sze: 109, Cnt: 500, Use: 31 Flg: 00000000
** compress data: input 2700 output 981 deflate 64%
** compress TEXT_VERSION : input 4454499 output 1892097 deflate 58%
** compress PDF_VERSION : input 274975 output 317560 deflate -15%
%RMU-I-DATRECUNL,   30 data records unloaded.

この例では、PDF_VERSION列に圧縮されないデータが含まれており、コマンドラインで除外する必要があります。

$ rmu/unload/compress=(LZW,exclude_list:PDF_VERSION)/debug=trace complete_works
complete_works complete_works
Debug = TRACE
Compression = LZW
Exclude_List:
        Exclude column PDF_VERSION
* Synonyms are not enabled
Unloading Blob columns.
Row_Count = 500
Message buffer: Len: 54524
Message buffer: Sze: 109, Cnt: 500, Use: 31 Flg: 00000000
** compress data: input 2700 output 981 deflate 64%
** compress TEXT_VERSION : input 4454499 output 1892097 deflate 58%
%RMU-I-DATRECUNL,   30 data records unloaded.

注意

短い行および短いNULLバイト・ベクトルでは、表の圧縮が自動的に無効化されます。ただし、LIST OF BYTE VARYING列の圧縮は実行されます。

/COMPRESSION修飾子は、LZWまたはZLIBを圧縮方法として受け入れます。ZLIBがデフォルトであり、圧縮全般において最良に機能する傾向があります。ただし、テストの後、データベース管理者がLZW方式の採用を決定する場合もあります。

RMU Loadの変更点

RMU Loadでは、新しい修飾子は必要ありません。交換ファイルのメタデータが、RMU Loadで使用する圧縮アルゴリズムを定義し、どのLIST OF BYTE VARYING列がRMU Unloadによって圧縮されたかを示します。

RMU Dump Exportの変更点

RMU Dump Exportに、新しい/OPTIONS修飾子が追加されました。デフォルトはNOOPTIONSです。データベース管理者は、HEADER_SECTIONキーワードを使用して、交換ファイルのヘッダー部分のみを表示し、表のすべての行のデータまたはメタデータがダンプされないように指定できます。

$ RMU/DUMP/EXPORT/OPTION=HEADER JOBS.UNL

BEGIN HEADER SECTION - (0)
    NONCORE_TEXT HDR_BRP_ID - (20) :  Load/Unload utility
    CORE_NUMERIC HDR_BRPFILE_VERSION - (1) : 4
    NONCORE_TEXT HDR_DBS_ID - (18) : Oracle Rdb V7.2-10
    NONCORE_TEXT HDR_DB_NAME - (16) : DB$:MF_PERSONNEL
    NONCORE_DATE HDR_DB_LOG_BACKUP_DATE - (8) :  3-JUL-2006 16:52:32.83
    CORE_NUMERIC HDR_DATA_COMPRESSION - (1) : 1
END HEADER SECTION - (0)

この例で、HDR_DATA_COMPRESSIONは、RMU Unloadによって圧縮が使用されたことを示します。

使用上の注意

5.1.12 RMU /UNLOAD /AFTER_JOURNALのコミット情報に含まれるユーザー名

Oracle Enhancement Bug#5128647

Oracle Rdb LogMiner(tm)機能でユーザー名情報を抽出できるようになりました。コミット情報のレコードが拡張され、12バイトのユーザー名文字列が含まれます。コミット情報のレコードを出力ストリームに抽出するように指定するには、/INCLUDE=ACTION=qualifierにCOMMITキーワードを指定します。

DUMP出力形式では、新しいフィールドRDB$LM_USERNAMEにユーザー名情報が含まれます。DELIMITED_TEXT形式では、既存レコードの末尾に新しいフィールドが挿入されます。TEXTおよびBINARY形式では、レコードの末尾に12バイトのユーザー名フィールドが追加されます。

次の例に、DUMP出力形式の使用方法を示します。

$ RMU /UNLOAD /AFTER_JOURNAL SQL$DATABASE AIJ1.AIJBCK -
        /INCLUDE=ACTION=COMMIT -
        /FORMAT=DUMP -
        /TABLE=(NAME=FOO,OUTPUT=FOO.DAT)
$ SEARCH /NOHEAD FOO.DAT RDB$LM_USERNAME
RDB$LM_USERNAME                 : JONES
RDB$LM_USERNAME                 : SMYTHE

5.1.13 SHOW DOMAINおよびSHOW TABLEのDEFAULT文字列の書式の改善

SHOW DOMAINおよびSHOW TABLEコマンドは、DEFAULTの文字列の値に関して、出力が変更されました。前のバージョンでは、デフォルトの文字列がデリミタなしで表示され、特にデフォルト値がすべて空白である場合には判読が困難でした。また、異なるキャラクタ・セットの文字列が識別されていませんでした。

このリリースのSQLでは、これらの文字列の前後に引用符が付けられ、また、キャラクタ・セットがセッションのデフォルトでない場合は、キャラクタ・セットの名前が先頭に表示されるようになりました。

次の例に、改訂後の出力を示します。

SQL> show domain STREET_NAME;
STREET_NAME                     CHAR(40)
 Oracle Rdb default: '>>'
SQL>
SQL> show table (column) PERSON;
Information for table PERSON

Columns for table PERSON:
Column Name                     Data Type        Domain
-----------                     ---------        ------
LAST_NAME                       CHAR(50)
 Oracle Rdb default: ' '
LATIN_NAME                      VARCHAR(30)
         ISOLATIN1 30 Characters,  30 Octets
 Oracle Rdb default: ISOLATIN1' '

SQL>

5.1.14 トリガー・アクションからのCALL文による表の更新

Oracle Bug#2421356

前のリリースのOracle Rdbでは、CALL文は、他の表のデータについてSELECTのみが可能でした。このリリースのRdbでは、CALL文は、他のルーチンのCALLだけでなく、表のINSERT、DELETEおよびUPDATEができるようになりました。CALL文によってアクティブ化されたルーチンのアクションには、次の制約が適用されます。


注意

トリガーがOracle Rdbによって解析されている場合のみ、トリガーからストアド・ルーチンをコールできます。この手順は、CREATEおよびALTER TRIGGER ... ADD文によって自動的に実行されます。ルーチンが、データベース(Oracle Rdbリリース7.0.6以降)で最近作成されたルーチンでない場合、ALTER MODULE ... COMPILEオプションを使用してルーチンを再コンパイルしてください。

5.1.15 RdbでのOpenVMS予約メモリー・レジストリの使用

Oracle Rdbのメモリーに常駐するグローバル・セクション(行キャッシュのグローバル・セクションまたはデータベース・ルートのグローバル・セクションのいずれか)では、OpenVMS予約メモリー・レジストリ機能を使用して、物理メモリーを予約できます。この予約済メモリーにより、グラニュラリティ・ヒント(GH)領域を使用して、少数のプロセッサの変換バッファ・エントリによって大きな物理メモリー・ページ範囲をマップできるため、さらなるパフォーマンスの向上が可能になります。予約済メモリーの使用はオプションであり、パフォーマンスの向上はアプリケーションごとに異なります。

OpenVMS予約メモリー・レジストリ機能を利用するには、グローバル・セクションをSHARED MEMORY IS PROCESS RESIDENTとして構成する必要があります。これを実行するためのSQL文は、ALTER CACHE ... SHARED MEMORY IS PROCESS RESIDENTおよびALTER DATABASE ... SHARED MEMORY IS PROCESS RESIDENTです。

OpenVMS共有メモリー・レジストリにグローバル・セクションを登録するには、グローバル・セクションの名前が必要です。RMU/DUMP/HEADERコマンドを使用して、データベース・ルートのグローバル・セクションおよび行キャッシュのグローバル・セクションの名前を表示できます。このコマンドでは、グローバル・セクションのサイズ(MB)が、端数を切り上げて整数として表示されます。

たとえば、RMU/DUMP/HEADERコマンドから出力される行キャッシュのグローバル・セクションに関する情報は、次のように表示されます。

Shared Memory...
  - Shared memory will be mapped resident
  - Global Section Name is "RDM72R$1$DGA2031064003D000000000005"
  - Shared memory section requirement is 77,070,336 bytes (74MB)

RMU/DUMP/HEADERコマンドから出力されるデータベースのグローバル・セクションに関する情報は、次のように表示されます。

Derived Data...
  - Global section size
      With global buffers disabled is 2,047,042 bytes (2MB)
      With global buffers enabled is 33,860,114 bytes (33MB)
       .
       .
       .
  - Global Section Name is "RDM72N$1$DGA2031064003D000000000000"

これらの例では、行キャッシュのセクションのサイズは74MB、データベースのグローバル・セクションのサイズは33MBです(グローバル・バッファを有効にした場合)。

メモリーを予約するには、SYSMANユーティリティのRESERVED_MEMORY ADDコマンドを使用し、次にAUTOGENを実行します。次に例を示します。

$ RUN SYS$SYSTEM:SYSMAN
SYSMAN> RESERVED_MEMORY ADD RDM72N$1$DGA2031064003D000000000000 -
        /ALLOCATE /SIZE=33
SYSMAN> RESERVED_MEMORY ADD RDM72R$1$DGA2031064003D000000000005 -
        /ALLOCATE /SIZE=74
SYSMAN> EXIT
$ @SYS$UPDATE:AUTOGEN ...

メモリーの予約を有効にするには、OpenVMSシステムを停止して再起動する必要があります。

再起動してデータベースをオープンした後、SHOW MEMORY /RESERVEDコマンドを使用して予約したメモリーが使用されているかどうかを確認できます。次に例を示します。

$ SHOW MEMORY/RESERVED
Memory Reservations (pages):       Group  Reserved   In Use       Type
 RDM72R$1$DGA408451A6A000000000002
                                 SYSGBL         2        2  Page Table
 RDM72R$1$DGA408451A6A000000000002
                                 SYSGBL      1536     1353   Allocated
 Total (12.01 MBytes reserved)               1538     1355

データベース・ルート・ファイルに関する注意

データベースまたは行キャッシュのグローバル・セクションのサイズの変更には、メモリーの予約サイズの更新が必要です(既存の予約を削除してから再び追加するか、既存の予約を変更します)。さらに、データベース・ルート・ファイルのデバイスおよびファイルの識別はグローバル・セクション名にエンコードされているため、ルート・ファイルのファイル識別またはデバイス識別のいずれかを変更する操作(リストアまたは移動など)を実行すると、グローバル・セクション名が変更されます。

予約メモリーに指定したサイズが、グローバル・セクションの実際のサイズより小さい場合、データベースをオープンまたはアクセスしたとき、セクションが作成されずに「SYSTEM-F-INSFLPGS, insufficient Fluid Pages available」のようなメッセージが表示される場合があります。

詳細は、OpenVMSドキュメント・セットの『HP OpenVMS System Manager's Manual, Volume 2: Tuning, Monitoring, and Complex Systems』、『HP OpenVMS Version 8.2-1 for Integrity Servers New Features and Release Notes』、および『HP OpenVMS System Services Reference Manual』などを参照してください。

5.1.16 データベースの属性としてのサーバーの出力ファイル名

以前は、論理名を使用して、様々なサーバーの出力またはログ・ファイルの名前と場所を制御できました。多くの場合、これらの論理名は、システム全体で定義する必要があり、そのため、複数のデータベースのサーバーに影響を与える可能性がありました。

この状況は改善されました。多くのデータベース・サーバー・プロセスの出力またはログ・ファイルの名前を、オプションのデータベース属性によって制御できるようになりました。

RMU /SET SERVER /OUTPUT=filespec servertypeコマンドを使用して、いくつかのデータベース・サーバー・プロセスのデフォルトの出力ファイル指定を指定できます。既存の論理名は、現在も有効であり、サポートされています。データベース属性が定義されている場合、論理名はデータベース属性よりも優先されます。出力ファイル指定が空の場合、エントリは無効になります。

有効なservertypeパラメータの値および対応する論理名を次に示します。

表5-2 サーバー・タイプと論理名
サーバー サーバー・タイプ 論理名
AIJバックアップ・サーバー ABS RDM$BIND_BIND_ABS_OUTPUT_FILE
AIJログ・サーバー ALS RDM$BIND_BIND_ALS_OUTPUT_FILE
AIJログ・ロールフォワード・サーバー LRS RDM$BIND_LRS_OUTPUT_FILE
AIJログ・キャッチアップ・サーバー LCS RDM$BIND_LCS_OUTPUT_FILE
データベース・リカバリ・サーバー DBR RDM$BIND_DBR_LOG_FILE
行キャッシュ・サーバー RCS RDM$BIND_RCS_LOG_FILE

/LOG修飾子を使用すると、RMU /SET操作の完了時にログ・メッセージが表示されます。

次の例は、RMU /SET SERVER /OUTPUT=filespec servertypeコマンドの使用方法を示しています。

$ RMU /SET SERVER RCS /OUTPUT=RCS_PID.LOG /LOG DUA0:[DB]MYDB.RDB
$ RMU /SET SERVER ALS /OUTPUT=ALS$LOGS:ALS_DB1.LOG DUA0:[DB1]MFP.RDB
$ RMU /SET SERVER LRS /OUTPUT="" DUA0:[ZDB]ZDB.RDB
$ RMU /SET SERVER DBR /OUTPUT=DBR$LOGS:DBR.LOG DUA0:[ADB]ADB.RDB

5.1.17 RMU/VERIFYに追加された新しいREBLDSPAM情報メッセージ

REBLDSPAM情報メッセージがRMU/VERIFYに追加されました。このメッセージは、表データおよび索引が格納されているデータベースの論理領域に関する情報が含まれているデータベースの領域インベントリ・ページ(AIP)を検証するときに出力されます。このメッセージは、SQL ALTER TABLEまたは他のコマンドによって実行された領域のしきい値やレコード長に対する変更を反映するため、論理領域の領域管理(SPAM)ページを更新する必要があることを示すフラグが設定された場合に出力されます。SPAMページの更新は、パフォーマンスの改善をもたらしますが、データベースの整合性や機能にとって必須ではないため、これは情報メッセージです。SPAMページの更新には、RMU/REPAIRコマンドを使用できます。

次に、このメッセージの例を示します。メッセージに、SPAMページを再構築してパフォーマンスを改善する必要がある論理領域の名前とID番号が示されています。

$RMU/VERIFY/ALL MF_PERSONNEL
%RMU-I-REBLDSPAM, Space management (SPAM) pages should be rebuilt for
                  logical area DEPARTMENTS_INDEX,
                  logical area id 74
%RMU-I-REBLDSPAM, Space management (SPAM) pages should be rebuilt for
                  logical area DEPARTMENTS,
                  logical area id 75

5.1.18 日付/時間の文字列の表示精度の向上

RMU SHOW STATISTICSユーティリティでは、いくつかの値に関して、表示する十分な領域がある場合、0.01秒単位より高精度で時間/日付のタイムスタンプが表示されるようになりました。いくつかのケースでは(たとえば、ストールの表示)、小数部7桁の完全な日付/時間を表示するには、画面の表示幅が100カラム以上である必要があります。

たとえば、shortの時間/日付書式の表示には、小数部2桁のみが含まれます。

一方、longの時間/日付書式の表示には、小数部7桁が含まれます。

5.1.19 マルチスキーマ・データベースでのシステム表参照機能の拡張

前のリリースのOracle Rdbでは、マルチスキーマ・データベースに接続するアプリケーションは、カタログおよびスキーマ名RDB$CATALOG.RDB$SCHEMAを使用して、明示的にRdbシステム表に問合せを行う必要がありました。そのようにしない場合、アプリケーションでSET SCHEMA文を使用すると、これらのシステム問合せが失敗する場合がありました。これは特に、SQL/ServicesおよびOracle ODBC Driver for Rdbなどのインタフェースで問題となりました。

このリリースでは、Oracle Rdbは最初に、SET CATALOG、SET SCHEMAまたはATTACH文によって確立されたデフォルト・スキーマで表の参照を試みます。参照に失敗した場合、RdbはRDB$CATALOG.RDB$SCHEMAを試します。この参照は、システム定義オブジェクトおよびユーザー定義オブジェクトの表、順序、ファンクションおよびプロシージャに適用されます。

次の例に、この新しい機能を使用して成功した問合せを示します。

SQL> attach 'filename db$:msdb';
SQL>
SQL> set schema 'west';
SQL>
SQL> select rdb$relation_name
cont> from rdb$relations
cont> where rdb$relation_name like 'JOB%';
RDB$RELATION_NAME
JOBS
JOB_HISTORY
2 rows selected
SQL>

同じ問合せを古いバージョンで実行すると失敗します。

SQL> attach 'filename db$:msdb';
SQL>
SQL> set schema 'west';
SQL>
SQL> select rdb$relation_name
cont> from rdb$relations
cont> where rdb$relation_name like 'JOB%';
%SQL-F-RELNOTDEF, Table RDB$RELATIONS is not defined in database or schema
SQL>

この問題は、Oracle Rdbリリース7.2.1で解決されました。

5.1.20 SET FLAGSの新しいオプションREBUILD_SPAM_PAGES

新しいフラグREBUILD_SPAM_PAGESが、DDLコマンドALTER TABLE、ALTER STORAGE MAPおよびALTER INDEXで使用するために追加されました。

表または索引の行の長さまたはTHRESHOLDS句を変更する場合、対応する論理領域のSPAMページの再構築が必要になる場合があります。デフォルトでは、これらのDDLコマンドは、AIPを更新して、SPAMページの再構築が必要であることを示すフラグを設定します。一方、この新しいフラグは、トランザクションのCOMMITを実行する前に設定され、トランザクション内で再構築を行うことができます。

このフラグを無効にするには、SET FLAGS 'NOREBUILD_SPAM_PAGES'を使用します。

次の例に、EMPLOYEES表に対する簡単な変更を示します(この例で、EMPLOYEES表は一連のUNIFORM領域にマップされています)。STOMAP_STATSフラグを使用すると、ALTERおよびCOMMIT文からより多くのトレース情報を得ることができます。

SQL> set transaction read write;
SQL>
SQL> set flags 'stomap_stats';
SQL>
SQL> alter table EMPLOYEES
cont>     add column MANAGERS_COMMENTS varchar(300);
~As: reads: async 0 synch 94, writes: async 18 synch 1
SQL>
SQL> alter storage map EMPLOYEES_MAP
cont>     store
cont>         using (EMPLOYEE_ID)
cont>             in EMPIDS_LOW
cont>           (thresholds (34,76,90))
cont>                 with limit of ('00200')
cont>             in EMPIDS_MID
cont>           (thresholds (34,76,90))
cont>                 with limit of ('00400')
cont>             otherwise in EMPIDS_OVER
cont>           (thresholds (34,76,90));
~As locking table "EMPLOYEES" (PR -> PU)
~As: removing superseded routine EMPLOYEES_MAP
~As: creating storage mapping routine EMPLOYEES_MAP (columns=1)
~As: reads: async 0 synch 117, writes: async 56 synch 0
SQL>
SQL> set flags 'rebuild_spam_pages';
SQL>
SQL> commit;
%RDMS-I-LOGMODVAL,     modified record length to 423
%RDMS-I-LOGMODVAL,     modified space management thresholds to (34%, 76%, 90%)
%RDMS-I-LOGMODVAL,     modified record length to 423
%RDMS-I-LOGMODVAL,     modified space management thresholds to (34%, 76%, 90%)
%RDMS-I-LOGMODVAL,     modified record length to 423
%RDMS-I-LOGMODVAL,     modified space management thresholds to (34%, 76%, 90%)
SQL>

LOGMODVALメッセージは、各パーティションにつき1件、ストレージ・マップの論理領域ごとに表示されます。

この再構築アクションはUNIFORM記憶域にのみ適用され、またSPAMページ再構築用のSPAMページおよびデータ・ページの読取りの際、かなりのI/Oが生じる場合があります。

5.1.21 RMU/BACKUPの新しい修飾子/NORECORD

新しく追加された修飾子は、最新のバックアップ情報によりデータベースが変更されないようにします。したがって、データベースは、バックアップされていない時点と同じような状態になります。

この修飾子の主な目的は、データベース・ファイルを変更せずに、ホット・スタンバイ・データベースをバックアップできるようにすることです。

/NORECORD修飾子の使用例を次に示します。

$ RMU /BACKUP /NORECORD FOO BCK

5.1.22 SQLコマンドによるAIP(領域インベントリ・ページ)データの管理機能の改善

Oracle Bug#4007253、3840715、3019205および4861228

このリリースのOracle Rdbでは、いくつかのDDL(データ定義言語)コマンドの動作が変更され、AIP(領域インベントリ・ページ)の情報がメンテナンスされるようになりました。

AIPの長さ、しきい値および名前を更新するアクションは、COMMITの時点まで延期されます。そのため、AIPの仮のレコード長が、現在の行の実際のレコード長と異なる場合、TRUNCATE TABLEの後のCOMMITで追加のI/Oが生じる可能性があります。

トランザクション中に行の長さが最終的に変更されず、名前またはしきい値の変更がない場合、RdbはAIPページを更新しません。

これらの問題は、Oracle Rdbリリース7.2.1で解決されました。

5.1.23 新しいRMU Show AIPコマンドの追加

このリリースのOracle Rdbでは、AIP(領域インベントリ・ページ)構造の内容を表示する新しいコマンドが追加されました。AIP構造は、論理領域の物理領域とのマッピング、および各論理領域の説明を提供します。この簡単なコマンド・インタフェースを使用して、論理領域の名前、格納されたレコードの長さ、記憶域のしきい値およびその他の情報を表示できるようになりました。前のバージョンでは、この情報を表示するRMUコマンドは、RMU Dump Larea=RDB$AIPコマンドだけでした。

書式

RMU/SHOW AIP rootfile [ larea-name ] [/LAREA=(n [,...]) ] [/OPTION=REBUILD_SPAMS] [/OUTPUT=output-filename] [/TYPE=type-name]

説明

RMU Show AIPコマンドにより、データベース管理者は、選択した論理領域またはデータベース中のすべての論理領域の詳細を表示できます。

コマンドのパラメータ

コマンドの修飾子

使用上の注意


この例では、既知のデータベース表の名前を使用して、単一の論理領域の詳細を表示します。

例5-1 JOBS表のAIPエントリの表示


$ RMU/SHOW AIP SQL$DATABASE JOBS

Logical area name JOBS
Type: TABLE
Logical area 85 in mixed physical area 7
Physical area name JOBS
Record length 41
AIP page number: 151
ABM page number: 0
Snapshot Enabled TSN: 64

ワイルドカード文字列*EMPLOYEE*は、索引と表のどちらの論理領域とも一致します。そのため、ここでは/TYPEを使用して、表の論理領域のみが表示されるようにします。MF_PERSONNELデータベースのEMPLOYEES表は、3つの記憶域にパーティション化されているため、3つの論理領域が存在します。

例5-2 ワイルドカードと/TYPE修飾子の使用方法


$ RMU/SHOW AIP SQL$DATABASE *EMPLOYEE*/TYPE=TABLE

Logical area name EMPLOYEES
Type: TABLE
Logical area 80 in mixed physical area 3
Physical area name EMPIDS_LOW
Record length 126
AIP page number: 150
ABM page number: 0
Snapshot Enabled TSN: 4800

Logical area name EMPLOYEES
Type: TABLE
Logical area 81 in mixed physical area 4
Physical area name EMPIDS_MID
Record length 126
AIP page number: 151
ABM page number: 0
Snapshot Enabled TSN: 1504

Logical area name EMPLOYEES
Type: TABLE
Logical area 82 in mixed physical area 5
Physical area name EMPIDS_OVER
Record length 126
AIP page number: 151
ABM page number: 0
Snapshot Enabled TSN: 1504

この例では、REBUILD_SPAMSオプションを使用して、SPAMの再構築が必要な論理領域を見つけます。論理領域の再構築は、格納された行の長さが変更されたり、索引または記憶域のマップでTHRESHOLDSが変更された場合に必要になる場合があります。

例5-3 再構築の必要なAIPの検出


$ RMU/SHOW AIP/OPTION=REBUILD_SPAMS
_Root: SQL$DATABASE
_Logical area name:

Logical area name ACCOUNT_AUDIT
Type: TABLE
Logical area 86 in uniform physical area 1
Physical area name RDB$SYSTEM
Record length 12
Thresholds are (10, 100, 100)
Flags:
    SPAM pages should be rebuilt
AIP page number: 151
ABM page number: 1004
Snapshot Enabled TSN: 5824

Logical area name DEPARTMENTS_INDEX
Type: SORTED INDEX
Logical area 94 in uniform physical area 10
Physical area name DEPARTMENT_INFO
Record length 430
Thresholds are (30, 65, 72)
Flags:
    SPAM pages should be rebuilt
AIP page number: 151
ABM page number: 2
Snapshot Enabled TSN: 7585

5.1.24 新しいRMU Set AIPコマンドの追加

このリリースのOracle Rdbでは、AIP(領域インベントリ・ページ)構造の内容を変更する新しいコマンドが追加されました。AIP構造は、論理領域の物理領域とのマッピング、および各論理領域の説明を提供します。この簡単なコマンド・インタフェースを使用して、論理領域の名前、格納されたレコードの長さおよび記憶域のしきい値などの情報を変更できるようになりました。前のバージョンでは、RMU Repair Initialize=Larea_Parametersコマンドが、この情報を更新できる唯一のRMUコマンドでした。

書式

RMU/SET AIP root-file-spec larea-name [/LAREA=(n [, ...])] [/LENGTH[=n]] [/LOG] [/REBUILD_SPAMS] [/RENAME_TO=new-name] [/THRESHOLD=(p,q,r)]

説明

このRMUコマンドを使用して、既存の論理領域の一部の属性を変更します。論理領域の追加または削除には使用できません。このコマンドを使用して、AIPエントリに記述されたレコードの長さおよび論理領域の名前を修正できます。また、このコマンドを使用してUNIFORMページ形式の領域に格納された論理領域のSPAMページを再構築することで、表の定義をページのしきい値の設定に正しく反映させることもできます。

MIXED領域のSPAMページの再構築の詳細は、RMU Repair Spamコマンドを参照してください。

コマンドのパラメータ

コマンドの修飾子

使用上の注意


RMUは再構築が必要な論理領域ごとにRdbをコールします。

例5-4 論理領域のSPAMページの再構築


$ RMU/SET AIP/REBUILD_SPAMS MF_PERSONNEL
%RMU-I-AIPSELMOD, Logical area id 86, name ACCOUNT_AUDIT selected for
modification
%RMU-I-AIPSELMOD, Logical area id 94, name DEPARTMENTS_INDEX selected for
modification

RMUは、AIPのEMPLOYEES表の長さを更新するように要求します。Oracle Rdbは、AIPで表の最新のレイアウトを使用して長さを計算し、それをAIPに書き込みます。EMPLOYEES表は3つの記憶域にパーティション化されているため、Log修飾子は、更新の対象となる3つの論理領域を示します。

例5-5 AIPでの表の長さの更新


$ RMU/SET AIP MF_PERSONNEL EMPLOYEES/LENGTH/LOG
%RMU-I-AIPSELMOD, Logical area id 80, name EMPLOYEES selected for modification
%RMU-I-AIPSELMOD, Logical area id 81, name EMPLOYEES selected for modification
%RMU-I-AIPSELMOD, Logical area id 82, name EMPLOYEES selected for modification

RMUがAIPのEMPLOYEES表の長さを更新するように要求し、次にSPAMページが再構築されます。これはオンライン操作です。注意: 論理領域名とオブジェクト名の間に黙示的な関係があります。この例では、EMPLOYEESオブジェクトがUNIFORMページ形式の領域にマップされていることを想定しています。

例5-6 表の長さの更新およびSPAMページの再構築


$ RMU/SET AIP MF_PERSONNEL EMPLOYEES/LENGTH/REBUILD_SPAMS

索引のしきい値を変更した場合、新しい値を使用するには、SPAMページを更新(再構築)して変更を有効にする必要があります。次の例に、SQLによって実行される索引のメンテナンスを示します。SET FLAGSコマンドを使用して、変更についての情報を表示します。変更はCOMMITの時点で適用され、SPAMの再構築はしばらく後に延期されている点に注意してください。RMU Set AIPを使用してSPAMページを再構築します。

例5-7 SORTED索引のしきい値の更新


$ SQL$
SQL> set flags 'index_stats';
SQL> alter index candidates_sorted store in rdb$system (thresholds are (32,56,
77));
~Ai alter index "CANDIDATES_SORTED" (hashed=0, ordered=0)
~Ai larea length is 215
~As locking table "CANDIDATES" (PR -> PU)
~Ai: reads: async 0 synch 58, writes: async 8 synch 0
SQL> commit;
%RDMS-I-LOGMODVAL,     modified space management thresholds to (32%, 56%, 77%)
%RDMS-W-REBUILDSPAMS, SPAM pages should be rebuilt for logical area CANDIDATES_
SORTED
$
$ RMU/SET AIP MF_PERSONNEL CANDIDATES_SORTED/REBUILD_SPAMS/LOG
%RMU-I-AIPSELMOD, Logical area id 74, name CANDIDATES_SORTED selected for
modification


第6章
Oracle Rdbリリース7.2.0.2での拡張機能および変更点

6.1 Oracle Rdbリリース7.2.0.2での拡張機能および変更点

6.1.1 同時DDL文の強化

Oracle Bug#4761143

前のバージョンのOracle Rdbでは、異なるセッションで複数のALTER TABLE ... ADD CONSTRAINTコマンドを同時に実行しようとすると、別のトランザクションの終了待ちでストールするか、次の例に示すように、デッドロックが発生して失敗していました。

SQL> alter table ORDER_LINES
cont>   add constraint ORDER_LINES_FK
cont>      foreign key (order_number) references orders (order_number)
cont>      not deferrable
cont> ;
%RDB-E-DEADLOCK, request failed due to resource deadlock
-RDB-E-NO_META_UPDATE, metadata update failed
-RDMS-F-DEADLOCK, deadlock on client '........ORDE'
4544524F0000001F0000000400000055

この動作は、すべての表のデータの一貫性を確保するためにRdbがターゲットの表をロックするために起こります。たとえば、この例の制約が有効であるためには、別のトランザクションによってORDER_LINES表から行を削除することはできません。これを確実に行うため、Rdbでは、制約の定義で参照されている各表のメタデータをロックします。

同時実行性の向上のため、このリリースのOracle Rdbでは、ターゲットの表がDATA DEFINITIONモードで予約されている場合、次の文を使用できるようになりました。


注意

これまでのリリースでは、DATA DEFINITIONモードで表が予約されているトランザクション内ではCREATE INDEX文のみが許可されていました。

ALTER TABLEのほとんどの句は、SHARED DATA DEFINITIONで予約された表でサポートされるようになりました。例外として、表の構造を変更するADD COLUMN、DROP COLUMNおよびデータ型を変更するALTER COLUMN句はサポートされません。

この問題は、Oracle Rdbリリース7.2.0.2で解決されました。

6.1.2 RMU LoadおよびUnloadでの表およびビューのシノニムのサポート

Oracle Bug#4018104

このリリースのOracle Rdb 7.2.0.2では、RMU LoadおよびRMU Unloadコマンドに表およびビューのシノニムのサポートが追加されました。前のリリースのRdbでは、RMUがシノニム名を理解できず、エラーが発生していました。次に例を示します。

$ SQL$
SQL> show tables
User tables in database with filename db$:personnel
     CANDIDATES
     COLLEGES
     CURRENT_INFO                    A view.
     CURRENT_JOB                     A view.
     CURRENT_SALARY                  A view.
     DEGREES
     DEPARTMENTS
     EMPLOYEES
     JOBS
     JOB_HISTORY
     RESUMES
     SALARY_HISTORY
     WORK_STATUS
     EMPS                            A synonym for table EMPLOYEES
SQL>exit
$ rmu/unload db$:personnel emps emps
%RMU-E-OUTFILDEL, Fatal error, output file deleted
-RMU-F-RELNOTFND, Relation (EMPS) not found

これらのツールは、シノニムをベース・オブジェクトに変換し、ベース表の名前が指定されている場合と同様にデータを処理するようになりました。これは、表のメタデータを含むアンロード交換ファイル(.UNL)またはレコード定義ファイル(.RRD)でシノニム名は使用されず、ベース表またはベース・ビューの名前が使用されることを意味します。そのため、メタデータを別のデータベースで使用する場合は、/MATCH_NAME修飾子を使用して、RMU Loadの際に優先する名前を指定する必要があります。


第7章
Oracle Rdbリリース7.2.0.1での拡張機能および変更点

7.1 Oracle Rdbリリース7.2.0.1での拡張機能および変更点

7.1.1 CPU使用率の削減およびパフォーマンスの改善

Oracle Rdbのこのリリースでは、いくつかの点でパフォーマンスの向上を実現しています。これらの変更点の多くは、I64システムで実行されるアプリケーションに固有のものか、I64システムでより大きな効果が得られるものです。強化された点は次のとおりです。

7.1.2 ALTER TABLE ... ALTER COLUMN句の拡張機能

Oracle Bug#2170476および4874525

このリリースのOracle Rdbでは、ALTER COLUMN句が強化され、COMPUTED BY、AUTOMATICおよびIDENTITYの特殊な列への変更(またはその逆)が可能になりました。

7.1.3 RMU/REPLICATE AFTERへの/TRANSPORTの追加

Oracle Bug#4109344

RMU/REPLICATE AFTER STARTおよびCONFIGUREコマンドに、/TRANSPORT修飾子が追加されました。この新しい修飾子を使用して、ネットワーク・トランスポートを指定できます。有効な値は、DECNETとTCPIPです。指定したネットワーク・トランスポートは、データベースに保存されます。

前のリリースでは、TCP/IPをホット・スタンバイ用のネットワーク・トランスポートとして使用するには、システム全体の論理RDM$BIND_HOT_NETWORK_TRANSPORTを定義する必要がありました。

次に例を示します。

$ RMU/REPLICATE AFTER CONFIGURE /TRANSPORT=TCPIP /STANDBY=
REMNOD::DEV:[DIR]STANDBY_DB M_TESTDB

7.1.4 対話型SQLの新しいSHOW STATISTICSコマンド

このリリースのOracle Rdbでは、対話型SQLにSHOW STATISTICSコマンドが追加されました。このコマンドは、現在のプロセスに関する簡単なプロセス統計を表示します。主として、様々な問合せのリソース使用状況および経過時間を比較するために使用されます。

次の例に、一般的な問合せを実行した後の出力を示します。

SQL> select count (*)
cont>  from employees natural full outer join job_history;

         274
1 row selected
SQL> show statistics;

                  process statistics at  5-MAR-2006 05:57:48.28
         elapsed time =   0 00:00:00.16              CPU time =   0 00:00:00.05
     page fault count = 430              pages in working set = 22768
   buffered I/O count = 26                   direct I/O count = 83
      open file count = 12               file quota remaining = 7988
           locks held = 138                   locks remaining = 16776821
      CPU utilization = 31.2%             AST quota remaining = 995
SQL>

統計は、各SHOW STATISTICSの実行後にリセットされます。


第8章
Oracle Rdbリリース7.2での拡張機能および変更点

8.1 Oracle Rdbリリース7.2での拡張機能および変更点

8.1.1 デフォルトの浮動小数点形式

Intel Itaniumアーキテクチャの64ビット仮想アドレス・モデルと基本的なシステム機能は、Alphaアーキテクチャに類似しています。ただし、この2つのプラットフォームには、ユーザーが作成したアプリケーションに影響を与える可能性があるいくつかの実装の相違点があります。

相違点の1つは、ハードウェアでサポートされる浮動小数点の形式です。Intel Itaniumアーキテクチャでは、IEEE単精度やIEEE倍精度など、IEEE浮動小数点形式を使用した浮動小数点演算をハードウェアに実装しています。Alphaアーキテクチャでは、IEEEとVAXの浮動小数点形式がハードウェアでサポートされ、OpenVMSコンパイラは、デフォルトでVAX形式を使用してコードを生成し、オプションとして(Alphaで)IEEE形式も使用できます。アプリケーションが本来VAX向けに作成されているか、Alpha向けであるかにかかわらず、デフォルトのVAX浮動小数点形式を使用しているOpenVMSアプリケーションは、Intel ItaniumのネイティブなIEEE形式を使用しているIntel Itaniumアーキテクチャで同等の動作をする必要があります。

Intel Itaniumアーキテクチャで、VAX浮動小数点を使用するオプションを指定してOpenVMSアプリケーションをコンパイルすると、浮動小数点形式を変換するコードが自動的に生成されます。このコードは、アプリケーションで一連の算術演算を実行するときに、常に次の処理を行います。

  1. VAX浮動小数点形式を、IEEE単精度またはIEEE倍精度のいずれかの浮動小数点形式に変換します。
  2. IEEE浮動小数点演算で算術演算を行います。
  3. 演算結果をIEEE形式から元のVAX形式に変換します。

VAX浮動小数点形式のビット数と精度は、同等のIEEE浮動小数点形式と同じです。ほとんどのアプリケーションでは、変換処理は透過的に実行されます。算術演算を実行しない場合(VAX浮動小数点をフェッチして保存する場合)、変換処理は発生しないことに注意してください。このような場合、コードでは移動として処理されます。

VAX形式とIEEE形式には次のような相違点があるため、計算処理の結果が異なる事例が発生する場合があります。

IA64のネイティブ・コンパイラに合せて、現在、Oracle RdbおよびSQLプリコンパイラのデフォルトの浮動小数点形式はIEEEです。OpenVMS AlphaでのOracle RdbおよびSQLのプリコンパイラのデフォルトは、VAW浮動小数点形式のままです。OpenVMS Alpha上のOracle RdbおよびSQLプリコンパイラでは、IEEE浮動小数点形式をオプションとしてサポートしています。

結果およびデータ内容の整合性を保つ上で、アプリケーションのすべての部分で同じ浮動小数点形式を使用することは重要なことです。コンパイラおよびプリコンパイラのコマンドで、浮動小数点形式を明示的に指定することを強くお薦めします。

浮動小数点の様々な例外条件に対して同様の動作を得るには、コンパイラのIEEE浮動小数点モードのオプションを確認および検討することをお薦めします。特に、FASTオプションは、VAXおよびAlphaシステム上の既存のアプリケーションに類似した動作を提供することがあります。

このリリースでは、Oracle Rdbのオンディスク構造、内容およびデータ形式は変更されていません。

HPから提供されているホワイト・ペーパー『OpenVMS Floating-point Arithmetic on the Intel Itanium Architecture』を参照することをお薦めします。

8.1.2 OpenVMS I64で現在利用できない機能

Oracle Rdbのこのリリースでは、次の機能またはコンポーネントは、OpenVMS I64上で現在使用できないか、正確に実行されないことが確認されています。

8.1.3 予想されるメモリー消費の増加

イメージ・ファイルのサイズの増加(特にIntegrityサーバー)、積極的なバッファリングおよびキャッシング・スキーム、より大きなI/Oサイズのデフォルトなどの理由から、Oracle Rdbリリース7.2を使用する場合は、ページ・ファイルの割当て制限、ワーキング・セットのサイズおよびバッファI/Oバイト制限の割当てを増加する必要があると予想されます。

特に、Integrityサーバーで実行する場合、アプリケーションによっては約3倍のページ・ファイルの割当てが必要になる場合があります。Oracle Rdbリリース7.2に移行した場合、バッファI/Oバイト制限の割当ての使用が2倍になる可能性があります(これまでのOracle Rdbのリリースと比較して、一部の操作で最大I/Oサイズが著しく大きくなるため)。

8.1.4 OpenVMS I64での初期化済のオーバーレイ・プログラム・セクションの取り扱い

AlphaおよびVAXシステムでは、オーバーレイ・プログラム・セクションの一部に対して初期化を実行できます。その後、同じ部分に対して初期化を行うと、前のモジュールからの初期化が上書きされます。リンクされるイメージで、いずれかのバイトに対して実行された最後の初期化が、そのバイトの最終の初期化として使用されます。I64システムのELF(Executable and Linkable Format)オブジェクト言語は、セクションの一部を初期化できるAlphaおよびVAXオブジェクト言語の機能を実装していません。初期化を行うと、セクション全体が初期化されます。その後、このセクションの初期化は、ゼロ以外の部分の値が一致した場合にのみ実行されます。

2つのオーバーレイ・セクションで、ゼロ以外の値が同一であれば、これらは互換性があります。互換性がない場合、リンカは次のエラーを出力します。

%ILINK-E-INVOVRINI, incompatible multiple initializations for overlaid section
section: <section name>
module: <module name for first overlaid section>
file: <file name for first overlaid section>
module: <module name for second overlaid section>
file: <file name for second overlaid section>

このメッセージには、ゼロ以外の初期化を提供する最初のモジュールと、互換性のない初期化を含む最初のモジュールが表示されています。これはすべての互換性のない初期化を示す完全なリストではなく、リンカで検出された最初のものにすぎません。

この現象は、Oracle Rdbを使用しているアプリケーションで、複数のモジュールがハンドルの値を初期化しようとした場合に起こることがあります。特定のハンドルの初期化は、1つのモジュールでのみ実行できます。SQLプリコンパイラでは、SQLOPTIONS修飾子のINITIALIZE_HANDLESキーワードを使用して初期化を制御できます。

初期化済のオーバーレイ・セクションの処理の詳細は、『HP OpenVMS Version 8.2 New Features and Documentation Overview』を参照してください。

8.1.5 統一領域内の削除された領域が他のユーザーによって再利用されない

Oracle Bug#2551066

前のリリースのOracle Rdbでは、統一記憶域に格納された表から行が削除された場合、他のデータベース・ユーザーは使用可能な領域ができたことを認識できず、空き領域があるにもかかわらず、追加の行を挿入するときに記憶域を拡張することがありました。

このリリースのOracle Rdbでは、同一のクラスタ・ノード上のデータベース・ユーザーが、使用可能な空き領域に関する情報を共有できるメカニズムを取り入れています。ユーザーが新しい行を格納する場所を選択すると、その場所はデータベースのグローバル・セクションに格納されます。これにより、他のユーザーが使用可能な領域を探すとき、その領域を出発点として使用できます。ユーザーが表の行を削除したとき、削除した行の位置が、挿入に使用された最後のページよりも記憶域の先頭に近い場合、次回の挿入の開始ページは、行が削除されたページのうち、最も下位のページの位置に更新されます。

8.1.6 AIPエントリのキャッシュによるパフォーマンスの改善

データベース接続内で表への最初のアクセスが行われると、Oracle Rdbは常に表の説明を検索する必要があります。表の説明の一部は、ディスクの領域インベントリ・ページ(AIP)と呼ばれるページに格納されています。これらのページは、特殊な表、またはRDB$AIPと呼ばれる論理領域内で相互にリンクされています。AIPエントリの検索が必要になると、常にAIPページが順次スキャンされます。データベースに多数の表が定義されていると、RDB$AIPリストで必要なAIPエントリを見つけるためにかなりのI/O数が必要になる場合があります。これまでのリリースでは、新しい接続で表が初めて参照されるごとに、検索が繰返し行われていました。そのため、多数の表が定義されているデータベースへの接続と切断を頻繁に行うアプリケーションでは、ディスクから絶えずAIPエントリをリロードして膨大な量のI/Oを消費する可能性があります。

このリリースでは、機能強化が実施され、ほとんどのアプリケーションでは、基本的にRDB$AIPのI/Oがなくなります。現在では、表が初めて参照されると、AIPエントリは拡張ロック値ブロックにコピーされるようになりました。(ロック値ブロックの詳細は、『OpenVMS Programming Concepts Manual』を参照してください。)その後の表への参照では、ロック値ブロックで必要な情報が見つかるため、ディスクからエントリを読み取る必要はありません。最も頻繁にアクセスされる表のAIPエントリがロック値ブロックにロードされてしまえば、さらなるRDB$AIP領域へのI/Oは、ほとんどなくなります。

8.1.7 ロールバック・パフォーマンスの向上

このリリースのOracle Rdbでは、トランザクションのロールバックがさらに最適化されています。これらの改善は、アプリケーションおよびデータベース・リカバリ(DBR)プロセスから発行されるROLLBACK文のパフォーマンスに作用します。最も重要な変更点の概要を次に示します。

8.1.8 索引プリフェッチのパフォーマンスの改善

このリリースのOracle Rdbでは、索引をスキャンして表から行をフェッチする問合せが最適化されています。索引スキャンでは、アプリケーションから実際に行を返すように要求される前に、索引のエントリが指しているデータをプリフェッチするようになりました。この最適化により、アプリケーションが結果セットから次の行を要求しない多くのケースで、行はすでにI/Oバッファ内にあり、アプリケーションにすぐに返すことができます。

たとえば、次の表と索引の定義について考えます。

CREATE TABLE T1 (C1 INT, C2 INT);
CREATE INDEX I1 ON T1 (C2)

次の問合せは、列C2の値の範囲に基づいて、表から行を選択します。Oracle Rdbでは、この問合せに対して索引スキャンによる取得方法を選択します。

SQL> SET FLAGS 'STRATEGY';
SQL> SELECT C1 FROM T1 WHERE C2 > 100 AND C2 < 900000 ORDER BY C2;
  Conjunct        Get     Retrieval by index of relation T1
    Index name  I1 [1:1]

前述の問合せを実行すると、100より大きい最初のC2値を含む索引ノードをフェッチします。次に、100より大きく、かつ900000より小さい索引ノードの各エントリを調べて、各索引エントリが指し示す各データ・ページのI/Oを開始します。次のいずれかの条件が満たされるまで、索引ノードの各エントリのプリフェッチを続行します。

可能なすべてのプリフェッチが発行された後に、結果セットの最初の行がアプリケーションに返されます。その後、さらなる行のフェッチを行うとき、必要なバッファのI/O要求はすでに進行中であるか、完了しています。

索引を介して新しいエントリが要求されたとき、PREFETCH DEPTHに到達したか、新しい索引ノードが要求されたためにプリフェッチが終了していた場合は、その条件が満たされると、プリフェッチが再開されます。

アプリケーションによっては、この最適化によってパフォーマンスが大幅に向上する場合があります。通常、既存のキャッシュ製品によって簡単にキャッシュできない大規模なデータベースで、最も大きなパフォーマンスの向上が見られます。

8.1.9 一定のブール述語を伴う問合せのパフォーマンスの改善

Oracle Bug#4205719

ブール条件が常に既知の値FALSEを返す次の問合せでは、完全順次取得が使用され、大きな表で処理が非常に遅くなるという報告をユーザーから受けていました。

set flags 'strategy,detail';
select * from resumes where  1 = 2;
Tables:
  0 = RESUMES
Conjunct: 1 = 2
Get     Retrieval sequentially of relation 0:RESUMES
0 row selected

条件が常にfalseで、返される行が0であっても、Oracle Rdbは表の順次操作を実行していました。行数が約100万のデータベースになると、この不要な表スキャンに長い時間がかかります。

Oracle Rdbでは、次の形式の式を検出し、これらの式が不可変であり、falseになる場合は、索引および表のスキャンを行わないように変更されました。

WHERE constant-expression
WHERE other-expression AND constant-expression
WHERE constant-expression AND other-expression

次に例を示します。

WHERE 1 = 2
WHERE (1 = 2) AND (LAST_NAME > '')
WHERE (LAST_NAME > '') AND (1 = 2)

ただし、ホスト変数は可変とみなされるため、次の例に示すように、ホスト変数が含まれる式は対象外となります。

WHERE :HV = 1
WHERE (:HV1 = 1) AND (LAST_NAME > '')

この問題は、Oracle Rdbリリース7.2で解決されました。

8.1.10 デフォルトで有効なIndex Column Group

これまでのバージョンでは、Index Column Groupフラグはデフォルトで無効化されていました。このフラグを有効すると、Oracle Rdbオプティマイザは、Index Column Group(またはWorkload Column Group)と同じ列を先頭に持つ索引を見つけます。一致がみつかった場合、オプティマイザは索引接頭辞カーディナリティを使用して、列の重複とNULL要素を計算し、より高い精度でソリューションのコストおよびカーディナリティの見積りを計算できます。

このフラグは、デフォルトで有効化されるようになりました。

次の例に、デフォルトで設定されるフラグを示します。RDMS$SET_FLAGS論理名を使用するか、対話型SQLおよび動的SQLのSET FLAGS文を使用すると、この設定よりも優先されます。

SQL> show flags

Alias RDB$DBHANDLE:
Flags currently set for Oracle Rdb:
   PREFIX,WARN_DDL,INDEX_COLUMN_GROUP,MAX_SOLUTION
   ,MAX_RECURSION(100),NOBITMAPPED_SCAN

RMU Collect Optimizer_Statistics

前のバージョンのRdbから変換されたデータベースでは、RMU /COLLECT OPTIMIZER_STATISTICSコマンドを使用することを強くお薦めします。

8.1.11 データベースおよびAIJバックアップ・ファイルの書込みでのファイル・システム・キャッシングの無効化

データベースまたはアフター・イメージ・ジャーナルのバックアップ操作からのディスク・ベースの出力ファイルは、比較的大容量であり、順次にアクセスされ、近い将来に読取りが行われないことが予想されます。ファイル・システム・キャッシュが汚染されるのを防止し、ファイルの書込み操作を効率化するため、これらのファイルの書込みをする際、オペレーティング・システムによるキャッシングは明示的に無効化されています。

8.1.12 デフォルトで有効となる見積りの調整規則

これまでのバージョンでは、通常、ソート索引の分割レベルまで降順にソートすることで、索引の見積りを計算していました。詳細は、『Guide to Database Performance and Tuning: Predicate Estimation』の技術文書を参照してください。

見積りの調整規則を使用すると、TYPE IS SORTED RANKEDの索引に対する見積りの精度が向上し、ハッシュ索引の見積りが可能になります。これらの規則は、REFINE_ESTIMATESフラグを使用して有効化していました。

このリリースでは、このフラグはデフォルトで有効に設定され、これにより、見積りの精度を上げるすべての規則が有効になります。

次の例に、デフォルトで設定されるフラグを示します。RDMS$SET_FLAGS論理名を使用するか、対話型SQLおよび動的SQLのSET FLAGS文を使用すると、この設定よりも優先されます。

SQL> show flags

Alias RDB$DBHANDLE:
Flags currently set for Oracle Rdb:
   PREFIX,WARN_DDL,INDEX_COLUMN_GROUP,MAX_SOLUTION
   ,MAX_RECURSION(100),REFINE_ESTIMATES(127),NOBITMAPPED_SCAN

REFINE_ESTIMATESフラグの値が127に設定されています。この値の意味の詳細は、前述の技術文書を参照してください。

このフラグを0に設定するか、フラグを無効にすると、すべての調整規則が無効になり、従来の動作に戻ります。

SQL> set flags 'refine_estimates(0)'
SQL> show flags

Alias RDB$DBHANDLE:
Flags currently set for Oracle Rdb:
   PREFIX,WARN_DDL,INDEX_COLUMN_GROUP,MAX_SOLUTION
   ,MAX_RECURSION(100),REFINE_ESTIMATES(0),NOBITMAPPED_SCAN
SQL> exit
$ define rdms$set_flags "refine_estimates(0)"
$ sql
SQL> show flags

Alias RDB$DBHANDLE:
Flags currently set for Oracle Rdb:
   PREFIX,WARN_DDL,INDEX_COLUMN_GROUP,MAX_SOLUTION
   ,MAX_RECURSION(100),REFINE_ESTIMATES(0),NOBITMAPPED_SCAN
SQL>exit
$ define rdms$set_flags "norefine_estimates"
$ sql
SQL> show flags

Alias RDB$DBHANDLE:
Flags currently set for Oracle Rdb:
   PREFIX,WARN_DDL,INDEX_COLUMN_GROUP,MAX_SOLUTION
   ,MAX_RECURSION(100),REFINE_ESTIMATES(0),NOBITMAPPED_SCAN
SQL>exit
$ sql
SQL> set flags 'norefine_estimates'
SQL> show flags

Alias RDB$DBHANDLE:
Flags currently set for Oracle Rdb:
   PREFIX,WARN_DDL,INDEX_COLUMN_GROUP,MAX_SOLUTION
   ,MAX_RECURSION(100),REFINE_ESTIMATES(0),NOBITMAPPED_SCAN

8.1.13 新しいLIMIT TO構文

このリリースのOracle Rdbでは、LIMIT TO句が強化され、問合せで返されるいくつかの行をスキップできるようになりました。たとえば、結果セットの第1行は、RMU/LOAD/RECORD=FORMAT=DELIMITEDによってロードされるCSVデータ・ソースからロードされる列見出しであるため、問合せで無視することができます。


注意

パフォーマンス上の理由から、スキップ式に指定する値を小さくすることをお薦めします。スキップされた行は、アプリケーションには返されませんが、問合せによってフェッチおよび処理されます。

次の例に、この新しい機能の使用方法の1つを示します。この問合せは、EMPLOYEES表から100番目の従業員を返します。

SQL> select last_name, first_name, employee_id
cont> from employees
cont> order by employee_id
cont> limit to 1 skip 99 rows;
 LAST_NAME        FIRST_NAME   EMPLOYEE_ID
 Herbener         James        00471
1 row selected

ソートされたリストの最後の行を取得するには、リテラル値のかわりに副選択を使用して値を計算できます。この問合せでは、この問合せ方法のSET FLAGSコマンドからの出力も表示されます。新しいSKIP句を表すSkipnキーワードに注目してください。

SQL> set flags 'strategy,detail';
SQL> select last_name, first_name, employee_id
cont> from employees
cont> order by employee_id
cont> limit to 1
cont> skip (select count(*)-1 from employees) rows;
Tables:
  0 = EMPLOYEES
  1 = EMPLOYEES
Cross block of 2 entries
  Cross block entry 1
    Aggregate: 0:COUNT (*)
    Index only retrieval of relation 1:EMPLOYEES
      Index name  EMP_EMPLOYEE_ID [0:0]
  Cross block entry 2
    Firstn: 1
    Skipn: <agg0> - 1
    Get     Retrieval by index of relation 0:EMPLOYEES
      Index name  EMP_EMPLOYEE_ID [0:0]
 LAST_NAME        FIRST_NAME   EMPLOYEE_ID
 Herbener         James        00471
1 row selected
SQL>

この問合せのかわりに、ORDER ... DESCを使用し、次に単純なLIMIT 1 ROW句を使用することもできます。

この問合せは、統計上の給与の中央値を返します。

SQL> -- select the median salary
SQL> select salary_amount
cont> from salary_history
cont> where salary_end is NULL
cont> order by salary_amount
cont> limit to 1
cont> skip (select count(*)/2
cont>       from salary_history
cont>       where salary_end is NULL);
 SALARY_AMOUNT
    $24,166.00
1 row selected
SQL>

統計上の給与の中央値を平均給与と比較できます。

SQL> -- select the median salary compare with average
SQL> select salary_amount as median_salary,
cont>        (select avg (salary_amount)
cont>         from salary_history
cont>         where salary_end is NULL) as avg_salary edit using SALARY
cont> from salary_history
cont> where salary_end is NULL
cont> order by salary_amount
cont> limit to 1
cont> skip (select count(*)/2
cont>       from salary_history
cont>       where salary_end is NULL);
 MEDIAN_SALARY    AVG_SALARY
    $24,166.00    $31,922.79
1 row selected
SQL>

構文

LIMIT TO句の改訂後のSQL構文は次のとおりです。



この構文のバリエーションが様々なSQLの実装でサポートされており、異なるツールでこの構文をOracle Rdbとともに使用できます。

引数

limit-expressionまたはskip-expressionを数値リテラルとして指定する場合は、スケールなしの値である必要があります。これらの数式は、問合せを実行する前にBIGINTに変換されます。

limit-expressionまたはskip-expressionは、これらが生じるselect-expressionの列を参照できません。limit-expressionまたはskip-expressionで指定した副選択の列のみを使用できます。LIMIT TO句での副選択の使用方法は、前述の例を参照してください。

8.1.14 CDDとの統合による追加の%CDD-I-BLRSYNINFO

Oracle Rdbリリース7.2データベースをCommon Data Dictionaryリポジトリに統合すると、Oracle Rdbリリース7.1と比較して、追加の%CDD-I-BLRSYNINFOが生成されます。この追加のメッセージは、ファンクション・コールを使用してRDB$FILE_NAME列の値を計算できるように、RDB$DATABASEメタデータ表を機能強化した結果として生じました。追加の情報メッセージが表示されますが、無視できます。

たとえば、次のSQL文は、Oracle Rdbリリース7.1で実行すると、INTEGRATE文の後に単一インスタンスの%CDD-I-BLRSYNINFOメッセージが生じますが、Oracle Rdbリリース7.2で実行すると、%CDD-I-BLRSYNINFOメッセージが2つ生成されます。次に例を示します。

SQL> CREATE DATABASE FILENAME TEMP;
SQL> DISCONNECT ALL;
SQL> INTEGRATE DATABASE FILENAME TEMP CREATE PATHNAME TEMP;
%CDD-I-BLRSYNINFO, unsupported entity - marked Incomplete
%CDD-I-BLRSYNINFO, unsupported entity - marked Incomplete

8.1.15 RMU Unload Record_DefinitionでのTRIMオプションの使用

このリリースのOracle Rdbでは、RMU Unload Record_Definition修飾子にTRIMオプションが追加されました。新しいTRIMオプションは、3つのキーワードをサポートします。

次の例に、TRIMオプションを使用しない場合の出力を示します。

$ RMU/UNLOAD/RECORD=(FORMAT=DELIMITED) DB$ WORK_STATUS SYS$OUTPUT:
"0","INACTIVE","RECORD EXPIRED"
"1","ACTIVE  ","FULL TIME     "
"2","ACTIVE  ","PART TIME     "
%RMU-I-DATRECUNL,   3 data records unloaded.

TRIM=BOTHオプションを追加すると、末尾の空白がすべて削除されます。

$ RMU/UNLOAD/RECORD=(FORMAT=DELIMITED,TRIM=BOTH) DB$ WORK_STATUS SYS$OUTPUT:
"0","INACTIVE","RECORD EXPIRED"
"1","ACTIVE","FULL TIME"
"2","ACTIVE","PART TIME"
%RMU-I-DATRECUNL,   3 data records unloaded.

8.1.16 ページおよびバッファの最大サイズの増加

以前は、データベース・バッファの許容最大サイズは64ブロック、データベース・ページの許容最大サイズは32ブロックでした。これらの制限値が増加しました。現在、データベース・バッファの許容最大サイズは128ブロック、データベース・ページの許容最大サイズは63ブロックです。

データベース・バッファ・サイズを増加すると、仮想メモリーおよびバッファI/Oバイト数の割当て制限の増加が必要になることに注意してください。

8.1.17 様々なI/Oサイズの増加

以前は、ほとんどすべてのOracle Rdbに関連するI/Oリクエストは、最大127ブロック(65,024バイト)に制限されていました。Oracle Rdb内の多数の領域で、この制限は、256ブロック(131,072バイト)に増加しました。SORTワーク・ファイルへの書込みと読取りは、最大1024ブロック(524,288バイト)のI/Oリクエストで行われるようになりました。これらの値の増加により、一部のケースでは、I/O数の減少、および低いCPUコストでの効率的なI/Oスループットの増加に役立ちます(大きなI/O数の減少による)。

この変更により、ページ・ファイルの割当て制限およびバッファI/Oバイト数制限において、プロセスに必要な仮想メモリーと物理メモリーの容量も増加します。

8.1.18 Oracle Rdbの実行に関する新しい統計情報

Oracle Bug#3917094

RMU/SHOW STATISTICSの新しい統計画面に、いくつかの新しい統計値が追加されました。

次に、新しい画面の例を示します。

Rate: 3.00 Seconds          Rdb Executive Statistics      Elapsed: 00:03:05.26
Page: 1 of 1            DUA0:[PERS.V72]MF_PERSONNEL.RDB;1         Mode: Online
-------------------------------------------------------------------------------
statistic.........      rate.per.second............. total....... average......
name..............      max..... cur..... avg....... count....... per.trans....
queries compiled              18       18        0.3           60          60.0
index scans                   13       13        0.2           42          42.0
 index only                    5        5        0.0           17          17.0
 index full                    5        5        0.0           17          17.0
dynamic optimizer              5        5        0.0           17          17.0
 one abandoned                 0        0        0.0            0           0.0
 all abandoned                 0        0        0.0            0           0.0

この画面に表示される統計値の意味は次のとおりです。

8.1.19 RMU /SHOW STATISTICSの行キャッシュ間のナビゲーションの強化

Oracle Bug#4727723および3738511

以前は、RMU /SHOW STATISTICSのRow Cache Utilization、Hot Row Information、Row Cache Status、Row Cache Queue LengthおよびRow Length Distributionを使用すると、表示された複数の行キャッシュ間での移動が困難でした。

この問題は解決されました。これらの表示で、次の行キャッシュまたは前の行キャッシュにナビゲートするには、[]]および[[]キーを使用できます。

8.1.20 RMU SHOW LOCKSの/RESOURCE_TYPE修飾子

以前は、RMU /SHOW LOCKSコマンドでは、すべてのロック・リソース・タイプが表示されました。これにより、大量の出力が生じる場合があり、特定タイプのリソースのロックを見つけるのが困難でした。

この状況は、/RESOURCE_TYPE=(restyp...)修飾子により改善されました。この修飾子がコマンドラインにあると、特定のリソース・タイプのみが表示されます。これにより、たとえば、PAGEまたはRECORDロック・タイプのみを選択できます。この機能は、主としてデバッグ・ツールとして使用されることを意図しています。Oracle Rdbのロック・タイプおよび機能を理解していることが前提となっています。すべてのシステムおよびすべてのバージョンのOracle Rdbに、すべてのロック・タイプが存在するとはかぎりません。

/RESOURCE_TYPE修飾子で使用できるキーワードを次に示します。

表8-1 RESOURCE_TYPEのキーワード
ロック・タイプの内部名 キーワード
ACCESS ACCESS
ACTIVE ACTIVE
AIJDB AIJDB
AIJFB AIJFB
AIJHWM AIJHWM、AIJ_HIGH_WATER_MARK
AIJLOGMSG AIJ_LOG_MESSAGE
AIJLOGSHIP AIJ_LOG_SHIPPING
AIJOPEN AIJ_OPEN
AIJSWITCH AIJ_SWITCH
AIJ AIJ
AIPQHD AIP
ALS ALS_ACTIVATION
BCKAIJ AIJ_BACKUP、BCKAIJ
BCKAIJ_SPD AIJ_BACKUP_SUSPEND
BUGCHK BUGCHECK
CHAN CHAN、FILE_CHANNEL
CLIENT CLIENT
CLOSE CLOSE
CLTSEQ CLTSEQ
CPT CORRUPT_PAGE_TABLE、CPT
DASHBOARD DASHBOARD_NOTIFY
DBK_SCOPE DBKEY_SCOPE
DBR DBR_SERIALIZATION
DB DATABASE
FIB FAST_INCREMENTAL_BACKUP、FIB
FILID FILID
FRZ FREEZE
GBL_CKPT GLOBAL_CHECKPOINT
GBPT_SLOT GLOBAL_BPT_SLOT
KROOT KROOT
LAREA LAREA、LOGICAL_AREA
LOGFIL LOGFIL
MEMBIT MEMBIT
MONID MONID、MONITOR_ID
MONITOR MONITOR
NOWAIT NOWAIT
PLN DBKEY、RECORD、PLN
PNO PAGE、PNO
QUIET QUIET
RCACHE RCACHE
RCSREQUEST RCS_REQUEST
RCSWAITRQST RCS_WAIT_REQUEST
REL_AREAS RELEASE_AREAS
REL_GRIC_REQST RELEASE_GRIC_REQUEST
RMUCLIENT RMU_CLIENT
ROOT_AREA DUMMY_ROOT_AREA
RO_L1 L1_SNAP_TRUNCATION
RTUPB RTUPB
RUJBLK RUJBLK
RW_L2 L2_SNAP_TRUNCATION
SAC SNAP_AREA_CURSOR
SEQBLK SEQBLK
STAREA STORAGE_AREA、PAREA
STATRQST STATISTICS_REQUEST
TRM TERMINATION
TSNBLK TSNBLK
UTILITY UTILITY

RESOURCE_TYPE修飾子は、MODE、LIMIT、LOCKおよびPROCESS修飾子と互換性がありません。

8.1.21 RMUコマンドの修飾子で指定できる絶対またはデルタ日付/時間

いくつかのRMUコマンドの修飾子で、日付/時間の書式が拡張されて、絶対時間だけでなくデルタ時間も使用できるようになりました。次のコマンドの修飾子で、デルタまたは絶対時間を指定できるようになりました。

絶対時間には、特定の日付または時刻が含まれます。絶対日付/時間の書式は、次のいずれかです。

日付または時間の末尾のフィールドは、省略できます。たとえば、-mmm-yyyy hhのように、記号が指定されているかぎり、書式の中間にある任意のフィールドを省略できます。

デルタ時間は、現在の時間から将来の時間までのオフセットです。デルタ時間の書式は次のとおりです。

時間フィールドの後のデルタ時間は、省略できます。また、記号が指定されているかぎり、時間フィールドの後の任意のフィールドを省略できます。

8.1.22 64ビットの統計情報

これまでのバージョンのOracle Rdbでは、統計情報のカウンタは、32ビットのロングワードの整数で維持されていました。これによって、カウンタの最大値は4,294,967,294に制限されていました。この制限値を超えると、カウンタは折り返してゼロに戻っていました。

この問題は解決されました。Oracle Rdbの統計情報カウンタは、64ビットのクワドワードの整数に拡張されました。この変更は、統計情報のバイナリの出力ファイル形式にも有効です。

ただし、RMU /SHOW STATISTICSユーティリティ内のほとんどのフィールドの表示は拡張されておらず、内部のカウンタの値が表示の10進値の幅を超えると、オーバーフローが発生する可能性があります。

8.1.23 最大グローバル・バッファ・カウントの増加

Oracle Enhancement Bug#3820284

これまでのバージョンのOracle Rdbでは、各データベースのグローバル・バッファの合計数は524,288に制限されていました。この制限は緩和されました。Oracle Rdbリリース7.2のグローバル・バッファの最大許容カウントは1,048,576です。

8.1.24 WORM(Write Once Read Many)記憶域のサポートの停止

これまでのバージョンのOracle Rdbでは、Write Once Read Many(WORM)光学ディスク・デバイスでWrite Once記憶域のサポートを提供していました。Oracle Rdbリリース7.2ではこのサポートが行われなくなりました。

WRITE ONCEまたはWORMとして構成された記憶域が含まれるデータベースは、Oracle Rdbリリース7.2形式に変換することも、Oracle Rdbリリース7.2を使用してリストアすることもできません。

RDO、RMUおよびSQLでの様々なWRITE ONCEまたはWORMキーワードおよび修飾子の使用は推奨されません。

SQLでは、「%SQL-I-DEPR_FEATURE, Deprecated Feature: WRITE ONCE no longer supported - assuming READ WRITE attribute」というメッセージが表示されます。

このメッセージは、次の句を後述のいずれかの文で指定した場合に生成されます。

該当する文は次のとおりです。

次に例を示します。

SQL> CREATE DATA FILENAME WORM_TEST
cont> CREATE STORAGE AREA WORM_AREA WRITE ONCE;
%SQL-I-DEPR_FEATURE, Deprecated Feature: WRITE ONCE no
longer supported - assuming READ WRITE attribute

読取り専用の媒体は、引き続き使用できます。読取り専用としてマークされたデータベースまたは記憶域を光学媒体に移動して、読取り専用でアクセスできます。

8.1.25 ACE(電子ディスク上のAIJキャッシュ)のサポートの停止

これまでのバージョンのOracle Rdbでは、AIJ書込み操作の一時キャッシュとして使用される、電子ディスク上のAIJキャッシュ(ACE: AIJ Cache on Electronic disk)のサポートを提供していました。かつて、この種のデバイスは、アフター・イメージ・ジャーナルを頻繁に使用する一部のクラスのアプリケーションで、パフォーマンスの向上に役立っていました。

技術の変化(特に、I/Oインタフェースの改善および様々なライトバック・キャッシング・スキーム)により、ACE機能の利点が減少し、現在ではパフォーマンスの向上にとって有効ではなくなりました。このため、Oracle Rdbリリース7.2ではこのサポートが行われなくなりました。

データベース属性CACHE FILENAME ...は、Oracle Rdbにより無視されます。RMU、RDOおよびSQLでの様々な関連するキーワードおよび修飾子の使用は推奨されません。

8.1.26 RMUでの/DENSITY = SDLT320のサポート

/DENSITY修飾子(つまり、RMU/BACKUP、RMU/BACKUP/AFTER_JOURNALおよびRMU/OPTIMIZE_AIJ)をサポートするOracle Rdb RMUコマンドで、SDLT320キーワードがサポートされるようになり、SuperDLT320テープ・ドライブとともに使用できます。

8.1.27 順次スキャンの統計情報

Oracle Bug#3917080

以前は、厳密な順次スキャンの回数やこれらの順次スキャンから返されるDBKEYの数を正確に判断する方法がありませんでした。

この問題は、Oracle Rdbリリース7.2で解決されました。新しい2つの統計情報カウンタにより、順次スキャンが開始された回数とこれらの順次スキャンから返されたDBKEYの数が記録されます。これらのカウンタは、データベース全体(「Record Statistics」画面に表示)と各表(「Logical Area Statistics」画面に表示)のベースで記録されます。

8.1.28 RDB$SHOVER、RDB$SETVER、SQL$SETVERの一時ファイル

これまでは、RDB$SHOVER.COM、RDB$SETVER.COMおよびSQL$SETVER.COMプロシージャでは、イメージ・ファイルの識別を確認する際に一時ファイルが作成されました。ファイルの作成と削除アクティビティにより、システムに不当な負担がかかり、プロシージャの処理速度も制限されました。

この問題は、Oracle Rdbリリース7.2で解決されました。現在、これらのプロシージャは、一時ファイルの作成と削除を行いません。

8.1.29 論理RDM$BIND_RW_TX_CHECKPOINT_ADVANCEの削除

Oracle Bug#1584167

7.1.2より前のリリースでは、論理RDM$BIND_RW_TX_CHECKPOINT_ADVANCEを1として定義しなかった場合、データベースに変更を加えていない読取り/書込みトランザクションでは、高速コミット・チェックポイント位置が進みませんでした。リリース7.1.2では、Oracle Bug#2439694に応えて、チェックポイント・コードが再構築されました。これにより、トランザクションでデータベースが変更されたか否かにかかわらず、すべてのトランザクションの終了時にチェックポイントが進められるようになりました。この変更によって、論理RDM$BIND_RW_TX_CHECKPOINT_ADVANCEは不要になり、削除されました。

8.1.30 バックアップ・ファイルの暗号化

Oracle Rdbでは、新しい/ENCRYPT修飾子を使用して、.RBFバックアップ・ファイルおよび.AIJアフター・イメージ・ジャーナルのバックアップ・ファイルを暗号化できます。

暗号化により、セキュリティ・ドメインまたはセキュリティ範囲から離れるバックアップ・データのセキュリティ・レベルを高めることができます。高度なセキュリティを提供するため、バックアップ・ファイルは常に一意の内部キーによって暗号化されます。同じRMUコマンドを使用して同じデータをバックアップした場合でも、暗号化されたファイルは、前のバックアップとは異なります。これはユーザーに対して透過的に行われ、データの復号化にも同じキーが使用されます。

この機能は、OpenVMS V8.2以降のオペレーティング・システムに付属のOpenVMS ENCRYPTコンポーネントを使用します。RMUでは、OpenVMS ENCRYPTでサポートされるすべての暗号化アルゴリズムを使用できます。詳細およびサポートされる暗号化アルゴリムは、オンライン・ヘルプおよびENCRYPTのドキュメントを参照してください。RMUコマンドで/ENCRYPT修飾子を使用する前に、OpenVMS ENCRYPTコンポーネントをインストールしておく必要があります。


暗号化のメッセージ

RMU/ENCRYPTを実行する際に暗号化メッセージの適切なメッセージ・テキストを取得するには、このコマンドを使用して次のファイルをインストールしておく必要があります。
       $INSTALL ADD SYS$MESSAGE:ENCRYPT$_MSG.EXE/OPEN/SHARED

暗号化プロセスでは、プレーンテキストと呼ばれる判読可能なデータを受け取り、算術アルゴリズムを使用してプレーンテキストを暗号文と呼ばれる判読不能な理解できない形式に変換します。

プレーンテキスト・データを暗号化するには、暗号化操作のキーが必要です。キーは、暗号化操作を制御する変数です。同じプレーンテキストを異なるキーで暗号化すると、異なる暗号文になります。また、同じキーを使用して同じプレーンテキストを繰返し暗号化した場合、暗号化するごとに異なる暗号文が生成されます。

暗号化されたファイルのデータにアクセスするには、復号化プロセスを実行して暗号化プロセスの逆を行います。復号化では、算術的な暗号化アルゴリズムを使用して、暗号文を元のプレーンテキストに変更します。

暗号化キーを直接に指定するか、DCL-ENCRYPTを使用してキーを事前に定義しておき、RMUコマンドラインでそのキー名を使用することもできます。


暗号化キー

暗号化キーを思い出せない場合は、事実上、暗号化されたファイルのすべてのデータを失ったことになります。

8.1.30.1 /ENCRYPTを使用できるコマンド

/ENCRYPT修飾子は、次のコマンドで使用できます。


FORMAT=NEW_TAPE

/ENCRYPTを指定するには、アフター・イメージ・ジャーナルのバックアップ・ファイルを新しいテープ・フォーマット(/FORMAT=NEW_TAPE)にする必要があります。

/ENCRYPT修飾子の書式は、Encrypt=([Value=|Name=][,Algorithm=])です。

表8-2 Encryptのキーワード
キーワード 説明
NAME=key-name key-valueを指定しない場合は必須。ENCRYPT /CREATE_KEYコマンドを使用して以前に作成され、キー記憶域表に格納された既存のキー名。キーの名前または値のいずれかを指定します。名前と値の両方を指定しないでください。
VALUE=key-value key-nameを指定しない場合は必須。対話形式でキーの値を定義します。次のいずれかを指定します。
  • 引用符("")で囲まれた文字列。
  • 1〜243の英数字。ドル記号およびアンダースコアは有効です。数字の0〜9およびA〜Fを使用した16進定数。
キーの名前または値のいずれかを指定します。名前と値の両方を指定しないでください。
ALGORITHM=DESCBC | DESECB | DESCFB 初期化ベクトルおよび指定したキーの暗号化に使用するアルゴリズム。デフォルトはDESCBCです。

キー値を文字列で指定するか、ENCRYPT /CREATE_KEYコマンドを使用して作成した事前定義済のキー名を指定します。アルゴリズム名を指定しない場合、デフォルトのDESCBCが使用されます。Value、NameおよびAlgorithmパラメータの詳細は、『Encryption for OpenVMS Installation and Reference Manual』を参照してください。

8.1.30.2 例

8.1.31 RMU /POPULATE_CACHEコマンドの/[NO]ONLY_CACHED修飾子

RMU /POPULATE_CACHEコマンドでは、データベースおよびキャッシュ(存在する場合)に格納された1つ以上の表および索引を読み取ることができます。新しい/[NO]ONLY_CACHED修飾子を使用して、指定した表または索引をすべて読み取るか、行キャッシュに関連付けられた表または索引のみを読み取るかを指定できます。

表8-3に、RMU /POPULATE_CACHEコマンドの修飾子を示します。

表8-3 RMU /POPULATE_CACHEコマンドの修飾子
修飾子 説明
/TABLE=table-list フェッチする1つ以上の表の名前を指定します。各表のすべての行をフェッチします。複数の表を指定する場合は、カンマ区切りの表名のリストをカッコで囲みます。ワイルドカード文字*および%を使用できます。
/INDEX=index-list フェッチする1つ以上の索引の名前を指定します。各索引のすべてのノードをフェッチします。複数の索引を指定する場合は、カンマ区切りの索引名のリストをカッコで囲みます。ワイルドカード文字*および%を使用できます。
/LOG コマンドの処理をSYS$OUTPUTにレポートするかどうかを指定します。Log修飾子を指定して、処理に関する情報を表示するように要求します。/NOLOGまたは/LOGのどちらも指定しない場合、DCL検証スイッチの現在の設定がデフォルトで使用されます。(DCL検証スイッチはDCL SET VERIFYコマンドによって制御されます。)
/[NO]ONLY_CACHED 表または索引に行キャッシュが関連付けられている場合にのみ表または索引の内容を読み取るかを指定します。デフォルトでは、キャッシュを持つオブジェクトからのみデータを読み取ります。/NOONLY_CACHEDを指定すると、指定した表または索引からすべてのデータを読み取ります。
/TRANSACTION_TYPE=transaction_mode トランザクションのモード、分離レベルおよび待機動作を指定できます。次のいずれかのキーワードを使用してトランザクション・モードを制御します。
  • AUTOMATIC: Transaction_Type=Automaticを指定すると、データベースの現在のスナップショット設定(有効、遅延または無効)、このユーザーが使用できるトランザクション・モード、およびデータベースのスタンバイ・ステータスに応じてトランザクション・タイプが決まります。Automaticモードがデフォルトです。
  • READ_ONLY: 読取り専用トランザクションを開始します。
  • WRITE: 読取り/書込みトランザクションを開始します。

8.1.32 RMU/SHOW LOCKSでの時間とノード名の出力

Oracle Bug#4761828

RMU/SHOW LOCKSコマンドの出力が強化され、ヘッダー行に現在の日付、時間およびシステム・ノード名が含まれるようになりました。次に例を示します。

$ RMU /SHOW LOCKS
====================================================================
  SHOW LOCKS Information at 26-NOV-2005 09:29:01.21 on node RDBI64
====================================================================

---------------------------------------------------------------------
Resource Name: AIJ journal control
Granted Lock Count: 7,  Parent Lock ID: 180007FA,   Lock Access Mode:
Executive, Resource Type: Global, Lock Value Block: 00000013 00000000
00000000 00000000
     .
     .
     .

8.1.33 RMU/UNLOADおよびRMU/LOADでのデフォルトの/ROW_COUNTの増加

RMU/LOADおよびRMU/UNLOADコマンドでは、/ROW_COUNT修飾子のデフォルト値が50から500に増加しました。

/ROW_COUNT修飾子は、Oracle RdbサーバーとRMU Loadプロセス間で複数の行をバッファに入れることを指定します。デフォルトは500行です。ただし、この値は、ワーキング・セットのサイズおよびロードするデータの長さに基づいて調整する必要があります。行数を増加すると、ロード操作のCPUコストを軽減できる場合があります。リモート・データベースの場合は、バッファ・データをより大きなネットワーク・パケットとしてパッケージできるため、大容量のデータではネットワーク・トラフィックが大幅に低減される場合があります。

指定可能なnの最小値は1です。デフォルトの行サイズは、Commit_Every修飾子に指定された値か500のうち、いずれか小さい方の値です。

| 目次