Maintenance を使用した Btrieve データ ファイルの操作
Maintenance ユーティリティを使用した Btrieve データ ファイルの操作
この章では、以下の項目について説明します。
Maintenance ユーティリティの概要
PSQL には、対話型の Maintenance ユーティリティおよびコマンド ラインの Maintenance ユーティリティが用意されています。この Maintenance ユーティリティは、いずれも以下の共通したファイル操作およびデータ操作を行います。
2 つのユーティリティは基本的に同じですが、機能が異なる部分が多少あります。たとえば、対話型 Maintenance ユーティリティでは、定義したファイルおよびキー仕様に基づいてディスクリプション ファイルを作成することができますが、コマンド ライン Maintenance ユーティリティでは、サーバー上でファイルの Continuous オペレーションを直接開始または停止することができます。
Maintenance ユーティリティを使用する前に、ファイル、レコード、キー、セグメントなどの Btrieve の基本概念について熟知しておく必要があります。これらの項目の詳細については、『PSQL Programmer's Guide』を参照してください。
メモ: PSQL 製品では次の 2 種類の Maintenance ユーティリティを提供します。Btrieve および SQL の 2 つです。SQL Maintenance ユーティリティは ODBC 経由でのリレーショナル アクセスに使用するデータ ソース名(DSN)をサポートします。
対話型 Maintenance ユーティリティ
対話型 Maintenance ユーティリティは、Windows 32 ビットおよび 64 ビット プラットフォームで実行される Windows アプリケーションです。このユーティリティは、グラフィカル インターフェイスを使用した場合、またはディスクリプション ファイルを作成したい場合に使用します。このセクションには次の主なトピックがあります。
それぞれの主なトピックにはそのトピックに固有のタスクがあります。
拡張ファイルのサポート
MicroKernel データ ファイルは、オペレーティング システムのファイル サイズ上限を超えた容量を持つことが可能です。データを、MicroKernel の拡張ファイルからシーケンシャル ファイルにエクスポートした際、実際の形式の違いから、そのシーケンシャル ファイルの容量がデータベース エンジンのファイル サイズ上限を超える場合があります。
大きなサイズのファイルをエクスポートする際、対話型 Maintenance ユーティリティでは、シーケンシャル ファイルがファイル サイズの上限(2 GB)を超えていることを検出すると、エクステンション ファイルの作成が開始されます。この処理は自動的に行われます。エクステンション ファイルおよび元のシーケンシャル ファイルは、同じボリューム内に存在する必要がありますファイルのサイズの制限は、オペレーティング システムやファイル システムによって異なるので注意してください。2 GB というサイズはデータベース エンジンでサポートされる制限サイズです。
エクステンション ファイルの名前には、ベース ファイルと似た名前を付ける方式が使用されます。エクステンション ファイルを示すのに、ネイティブな MicroKernel エンジン エクステンション ファイルがキャレット("^")を使用するのに対し、シーケンシャル ファイルのエクステンション ファイルはチルダ("~")を使用するので、同じベース ファイル名を持つ既存のエンジン拡張ファイルを上書きするのを防ぎます。最初のエクスポート エクステンション ファイルには、ベース ファイル名に ".~01" という拡張子が付きます。次のエクステンション ファイルには、ベース ファイル名に ".~02" というように拡張子が付けられます。これらの拡張子は 16 進形式で追加されます。
名前付け規則は 255 までのエクステンション ファイルをサポートします。したがって、最大ファイル サイズは 256 GB です。
また、シーケンシャル ファイルからデータをインポートする場合は、ファイルが拡張されているかどうかがチェックされ、エクステンション ファイルからデータがロードされます。
長いファイル名と埋め込みスペースのサポート
スペースを含む長いファイル名は、サポートされるすべてのオペレーティング システムで使用できます。参照対象となるすべてのファイル名には、埋め込みスペースを含むことが可能であり、また 8 バイトを超える名前も使用可能です。
Btrieve の古いバージョンでは、Open や Create など、パスに基づくオペレーションの際に、ファイル名の最後にスペースを追加することができました。このバージョンでも、デフォルトとしてこれが設定されており、操作に支障をきたしませんが、バージョン埋め込みスペースを含むファイル名やディレクトリ名も正しく認識する機能を利用したい場合は、クライアント リクエスターの[スペースを含むファイル/ディレクトリ名]設定をオンに設定します。デフォルトの設定はオンです。
このオプションをオフに設定した場合でも、埋め込みスペースを含む名前を持つファイルにアクセスする際に、アプリケーションがファイルを開く、または作成する BTRV/BTRVID/BTRCALL/BTRCALLID コールを行うとき、その名前を二重引用符で囲めば、使用することができます。
レコードおよびページ圧縮
PSQL ではレコードおよびページによる 2 種類のデータ圧縮を提供します。これら 2 種類のデータ圧縮は、別々に使われることもあれば、一緒に使われることもあります。2 つの圧縮タイプの主な目的はいずれも、データ ファイルのサイズを減らし、データのタイプとデータ操作のタイプに応じてより速いパフォーマンスを提供することです。
レコード圧縮
レコード圧縮には 6.0 以上のファイル形式が必要です。レコード圧縮により、多数の繰り返し文字を含むレコードの格納に必要なスペースを大幅に削減できます。データベース エンジンは、5 つ以上連続する同一文字を 3 バイトに圧縮します。
ファイルの作成時、指定されたレコード長に余裕を持たせるため、データベース エンジンは自動的に指定されたより大きいページ サイズを使用します。圧縮されていないレコードが、使用できる最大ページに収まりきらないほど大きい場合、データベース エンジンは自動的にレコード圧縮をオンにします。
圧縮レコードの最終的な長さは、ファイルに書き込まれるまで決定されないため、データベース エンジンはレコード圧縮されたファイルを可変長レコード ファイルとして作成します。レコードの圧縮されたイメージは可変長レコードとして格納されます。アプリケーションがレコードの追加、更新、削除を頻繁に行うと、個々のレコードはいくつかのファイル ページに断片化されます。データベース エンジンは 1 つのレコードを取得するために複数のファイル ページを読み取らなければならない場合があるので、この断片化によってアクセス時間が遅くなるおそれがあります。
PSQL Programmer's Guide』のページ サイズの選択ファイル サイズの予測およびレコード圧縮を参照してください。
ページ圧縮
ページ圧縮には 9.5 以上のファイル形式が必要です。内部的には、PSQL データ ファイルはさまざまな種類のページの連続です。ページ圧縮は、ファイル内のデータ ページの圧縮と復元を制御します。
ファイルが物理ストレージから読み取られると、データ ページは復元されてメモリ キャッシュに保持されます。レコードの読み取りと更新は、メモリ キャッシュ内の圧縮されていないデータに対して行われます。書き込み操作が行われると、データ ページは圧縮されて物理ストレージに書き込まれます。圧縮されたページが、次回アクセスされるまで保持されるかどうかは、キャッシュ管理によって異なります。
データの種類によって圧縮しても意味がない場合、データベース エンジンはそのデータを圧縮しないで物理ストレージに書き込みます。
圧縮の使用時期の判断
レコード圧縮、ページ圧縮、あるいはその両方を使用することで得られる利点は、圧縮されるデータのタイプによって異なります。次の表では、データ圧縮を使用するかどうかを判断するための一般的な要因を説明します。
Maintenance ユーティリティのインターフェイス
オペレーティング システムの[スタート]メニューまたはアプリ画面から、あるいは PSQL Control Center の[ツール]メニューから Maintenance ユーティリティにアクセスします。Maintenance ユーティリティのメイン ウィンドウは次のようになっています。
図 18 Maintenance ユーティリティのメイン ウィンドウ
メニュー オプション
対話型 Maintenance ユーティリティには、以下のメニューが用意されています。
ファイル情報エディターの表示、オーナー ネームの設定およびクリア、ファイル情報レポートの生成、ユーティリティの終了を行います。
ヘルプの起動
Maintenance ユーティリティのヘルプを使用するには、ヘルプの必要なダイアログ ボックスで[ヘルプ]をクリックするか、以下のような[ヘルプ]メニューのコマンドを選択します。
ファイル情報エディター
このセクションでは、構築するファイルおよびキー仕様に基づいて新しいファイルを作成する[ファイル情報エディター]に関する一般的な説明を行います。このエディターでは、既存ファイルの情報をロードできるため、既存データ ファイルのファイル仕様やキー仕様の確認に便利です。また、既存ファイルのファイルやキー仕様に基づいた新規ファイルの作成も可能です(コマンド ライン Maintenance ユーティリティである BUTIL の CLONE コマンドと同様)。
注意: 同じディレクトリに、ファイル名が同一で拡張子のみが異なるようなファイルを置かないでください。たとえば、同じディレクトリ内のデータ ファイルの 1 つに Invoice.btr、もう 1 つに Invoice.mkd という名前を付けてはいけません。このような制限が設けられているのは、データベース エンジンがさまざまな機能でファイル名のみを使用し、ファイルの拡張子を無視するためです。ファイルの識別にはファイル名のみが使用されるため、ファイルの拡張子だけが異なるファイルは、データベース エンジンでは同一のものであると認識されます。
ファイル情報エディターを開くには、[オプション]>[情報エディターの表示]をクリックします。
図 19 ファイル情報エディター
 
[ファイル情報エディター]ダイアログの項目
エディターの上部には、以下のボタンが表示されます。
ファイル情報エディター]ダイアログ ボックスのヘルプを表示します。
データ ファイル情報
ファイル情報エディター]の上部の[データ ファイル情報]領域には、以下のコントロールが含まれます。
ファイル仕様
[ファイル情報エディター]の中央部に[ファイル仕様]領域があります。表 67 はこのボックス内のコントロールの説明です。
レコード長およびオーバーヘッドの説明については、『PSQL Programmer's Guide』の「レコード長」セクションを参照してください。このマニュアルは、PSQL 開発者リファレンスに含まれています。
キー
ダイアログ ボックスの左下部には[キー]グループ ボックスがあります。表 68 はこの領域のコントロールの説明です。これらのコントロールは、現在のキー セグメントだけでなく、[キー]リストで選択されているキーに固有です。これらの設定を変更した場合、指定したキーのすべてのセグメントに対して変更が適用されます。
重複キーの操作方法を参照してください。
重複キーの操作方法を参照してください。
[キー]リストおよび[セグメント]リスト
ダイアログ ボックス中央下部の[キー]リストには、ファイルに定義されているキー番号が表示されます。バージョン 6.x 以降のファイルでは、このキー番号が連続した数値である必要はありません。Maintenance ユーティリティでは、選択されたキーの仕様が、ダイアログ ボックス左下部の[キー]ボックスに表示されます。
また、ダイアログ ボックス中央下部の[セグメント]リストには、[キー]リストで選択されたキーに定義されている、キー セグメント番号が表示されます。Maintenance ユーティリティでは、選択されたセグメントの仕様が、ダイアログ ボックス右下部の[セグメント]ボックスに表示されます。
また、[キー]と[セグメント]リストには、以下のボタンが表示されます。
これらのボタンは、作成するファイルのキー仕様を設定するもので、既存ファイルのキーに対して使用することはできません。既存ファイルのインデックスを作成または削除する場合は、インデックスの作業を参照してください。
キー セグメント
ダイアログ ボックスの右下部には[キー セグメント]グループ ボックスがあります。表 69 はこの領域のコントロールの説明です。これらのコントロールは、[セグメント]リストで選択されているセグメントに固有のものです。
キー セグメントのヌル文字値(16 進数)を設定します。この設定は、キーに対する[ヌル キー]チェック ボックスがオンの場合にのみ使用できます。
重複キーの操作方法
複数のレコードが、インデックス キーに同一の重複した値を持つことができます。重複キー値を持つレコードを記憶しておく 2 つの方法は、リンク重複および繰り返し重複と呼びます。
リンク重複
リンク重複の手法では連鎖技術を使用し、グループ内の各レコードをポインターを使用して隣のレコードと連結します。同一インデックス ページ上の各エントリは 1 組のレコード ポインターを持ち、キー値が重複しているレコードの連鎖の最初と最後のリンクを示します。このため、各キー ページのエントリは繰り返し重複インデックスより 4 バイト長くなります。さらに、データ ページの各レコードでは、リンク重複インデックスごとに 8 バイトのオーバーヘッドが必要です。この 8 バイトは、連鎖中の次のレコードと前のレコードを指す 2 つのレコード ポインターです。
最初のレコード ポインターは、最初に、または最も古い時期に格納されたレコードのアドレスを保持します。2 番目のポインターは最近または最後に格納されたレコードのアドレスを保持します。最初のレコードが書き込まれた後でほかのレコードが追加される前には、キー ページ エントリ上の両方のポインターに最初のレコードのアドレスが保持されています。その後にレコードが追加されると、2 番目のポインターが追加された各レコードを指すように変更されます。このことにより、最後のレコードのレコード ポインターが、レコードの追加時にデータ ページ内に構築される前のレコードの連鎖のリンクとして使用されること、および前のレコードの検索に使用されることが可能になります。
繰り返し重複
繰り返し重複の手法では、各重複キー値はインデックス ページとデータ ページ上のレコード内の両方に格納されます。各キー値には、レコード ポインターが 2 つではなく 1 つだけあります。この手法ではデータ レコードの連鎖が不要で、レコードごとの 8 バイトのオーバーヘッドを節約します。キー値が重複レコードごとに繰り返されるため、インデックスのサイズが大きくなるという影響があります。
手法の比較
リンク重複および繰り返し重複の手法は、以下の基準によって比較することができます。
順序付け
リンク重複インデックスは、データが追加された順序で重複を取得します。繰り返し重複インデックスは、データがファイル内に存在する順序で重複を取得します。ファイル内での位置は制御できないため、順序はランダムであると考える必要があります。
ストレージ
リンク重複インデックスでは、各重複キー値の最初の出現で 12 バイト余分に必要になります。これには、各レコードについての 8 バイトとキー ページ エントリとしての 4 バイトが含まれます。ただし、重複レコードはキー ページでこれ以外の余計な空間を必要とせず、レコードごとに 8 バイトが追加されるだけです。したがって、キー値ごとの重複の数が増加してキー値のサイズが増加しても、リンク重複インデックスはキー ページが使用するストレージ空間を著しく節約することができます。ただし、重複キーを持つレコードがほとんどファイルに格納されていないか、キー長が非常に短い、またはその両方に該当する場合は、使用するストレージ空間は増加します。
次の図で、リンク重複インデックスの使用によって節約されるストレージ空間の量を例示します。リンク重複インデックスは、キー値ごとの重複レコード数が少ない場合にはより多くの空間を必要とするので注意してください。しかし、キー値ごとの重複レコード数が増えるにつれ、リンク重複インデックスが必要とするページ数は少なくなり、ストレージ空間を著しく節約します。
図 20 重複キー手法によるページ数の比較
 
パフォーマンス
インデックス検索に関わるページが少ない場合、ディスクから読み取るページ数が少なくなるため、結果として速いパフォーマンスが得られます。リンク重複手法は一般的に少しの物理ストレージ空間しか使用しないため、速いパフォーマンスが得られます。繰り返し重複手法は、重複のあるキー数が少ない場合にのみパフォーマンスでの利点があります。
並行性
データベース エンジンは、複数の並行トランザクションが同一ファイルに対し同時にアクティブである場合に、ページ レベルの並行性を提供します。これは、キー ページへのほとんどの変更と、データ ページへのすべての変更に適用されます。並行性とは、同一ページが別個のトランザクションからの複数の保留中の変更を同時に持つことができることを意味します。また、これらのトランザクションはどのような順序でもコミットすることができます。繰り返し重複インデックスはこの並行性を最もよく利用しています。
リンク重複インデックスでは、繰り返し重複には存在しない並行性の制限が追加されます。新しい重複データが作成された場合、そのレコードはリストの最後で別のレコードにリンクされます。このレコードのリンクにより、1 つではなく 2 つのレコードがロックされることになります。すべての重複データはリンク レコードの連鎖の最後に追加されるため、重複は一度に 1 つしか追加できません。
このようなレコード ロックの衝突により、通常、ほかのクライアントは最初のトランザクションがコミットされるまで待機状態になります。並行動作が行われる環境では、すべての新規レコードが同じ重複値を使用する場合、並行性は事実上一度に 1 トランザクションというレベルまで低減します。さらに、トランザクションが大きいかまたは長く継続する場合、この連続状態がパフォーマンスに非常に大きく影響します。
並行環境で更新されるデータベースに繰り返し重複インデックスを使用した場合、パフォーマンスは一般的に向上します。したがって、リンク重複手法を使用せざるを得ない理由がある場合を除き、並行環境で更新されるデータベースには繰り返し重複インデックスを使用してください。
情報エディターでの作業
ファイル情報エディターを使用して次の作業を行うことができます。
既存ファイルからの情報のロード
既存ファイルから情報をロードした場合、既存ファイルを編集するわけではありません。既存ファイルに関する情報のコピーのみがロードされます。一般的に、ファイル情報エディターでほかの作業をする前にファイルをロードしますが、これは必須ではありません。
1
[ファイル情報エディター]ダイアログ ボックスの上部の[情報のロード]をクリックします。[ファイルの選択]ダイアログ ボックスが表示されます。
図 21 [ファイルの選択]ダイアログ ボックス
2
Maintenance ユーティリティでは、指定されたファイルを、まずデータ ファイルとして開こうとします。ファイルにオーナー ネームが必要な場合は、オーナー ネームを要求するメッセージが表示されます。オーナー ネームはオプションであるため、開こうとするファイルがオーナー ネームを必要としない場合もあります。指定されたファイルがデータ ファイルでない場合、このユーティリティではそのファイルを、ディスクリプション ファイルとして開こうとします。
新規ファイルの作成
ファイル情報エディターで、現在の情報または入力した新しい情報に基づいた新規ファイルを作成することができます。
1
ファイル情報エディター]ダイアログ ボックスの上部の[ファイルの作成]をクリックします。[ファイルの作成]ダイアログ ボックスが表示されます。
図 22 [ファイルの作成]ダイアログ ボックス
2
ファイルの作成]ダイアログ ボックスで設定を行います。各コントロールについては、表 70 を参照してください。
作成するファイルの種類を指定します。ディスクリプション ファイルを作成する場合は、[インデックス オンリー]オプションを使用して、BUTIL ユーティリティで既存データ ファイルへのインデックス追加に使用できるディスクリプション ファイルを作成できます(詳細については、インデックスの作成を参照してください)。
ファイルにシステム データを含むかどうかを設定します。[エンジン設定を使用]を選択した場合は、[システム データ]設定オプションの設定が適用されます。[システム データなし]を選択した場合、エンジンの設定にかかわらず、システム データは作成されません。[システム データを強要]を選択した場合は、エンジンの設定にかかわらず、システム データが作成されます。

この設定は、ファイルの種類が[MicroKernel 互換]の場合にのみ有効になります。
 
ディスクリプション ファイルへのコメントの追加
コメントは、ディスクリプション ファイルを作成したときに、その先頭に出力されます。たとえば、コメント「これは私のファイルです」はディスクリプション ファイルの先頭に /* これは私のファイルです*/ と表示されます。ディスクリプション ファイル作成後にコメントを追加する場合は、コメントを追加してファイルを作成し直す必要があります。
1
ディスクリプション コメント]をクリックします。[ディスクリプション ファイル コメント]ダイアログ ボックスが表示されます。
図 23 [ディスクリプション ファイル コメント]ダイアログ ボックス
2
3
コメント入力後、[OK]をクリックします。
Btrieve データ ファイルのコンパクト化
未使用スペースを除去することにより Btrieve データ ファイルのコンパクト化を行うことができ、通常ファイルのサイズを小さくすることができます。この処理は、コマンド ライン Maintenance ユーティリティ(Btrieve データ ファイルをコンパクト化するにはを参照)を使用して実行することもできます。
1
ファイル情報エディターの[情報のロード]をクリックし、コンパクト化するファイルを選択します。
2
ファイルの作成]をクリックし、[ファイルの作成]ダイアログ ボックスに、複製する新しいファイルの名前を入力して[OK]をクリックします。
3
メイン ウィンドウの[データ]メニューから[保存]をクリックします。[データの保存]ダイアログ ボックスの[保存元 MicroKernel ファイル]ボックスに元のファイルの名前を入力し、[保存先シーケンシャル ファイル]ボックスに出力ファイルの名前(たとえば <元のファイル名>.out)を入力します。
4
実行]をクリックします。[データの保存]ダイアログ ボックスに、保存の結果が表示されます。[閉じる]をクリックします。
5
データ]メニューの[ロード]をクリックします。[データのロード]ダイアログ ボックスの[ロード元シーケンシャル ファイル]ボックスに、保存したシーケンシャル データ ファイルの名前を入力します。ステップ 2 で作成した複製ファイルの名前を[ロード先 MicroKernel ファイル]ボックスに入力します。
6
実行]をクリックします。[データのロード]ダイアログ ボックスに、ロードの結果が表示されます。[閉じる]をクリックします。
元のファイルと複製されたファイルのサイズを比較すると、コンパクト化の結果を確認できます。
キーのオルタネート コレーティング シーケンスの指定
オルタネート コレーティング シーケンス(ACS)を使用して、文字型のキー(STRING、LSTRING および ZSTRING)を標準 ASCII コレーティング シーケンスとは異なる順序でソートすることができます。1 つまたは複数の照合順序を使用して、次のようにキーをソートすることができます。
ファイルには、キーごとに異なる ACS を持つことができますが、1 つのキーには 1 つの ACS のみです。したがって、キーがセグメント化されている場合、各セグメントはそのキーに指定された ACS を使用するか、または ACS をまったく使用しないかのいずれかになります。あるファイルに、一部のセグメントにだけ ACS が指定されているキーがある場合、Btrieve は指定されたセグメントのみ、ACS を使用してソートします。
ISR テーブルは ISO の標準ロケール テーブルに基づいており、PSQL によって提供されます。ISR テーブルは PSQL のデータベース エンジンと一緒にインストールされた collate.cfg ファイルに格納されています。複数のデータ ファイルが 1 つの ISR を共有できます。
1
ACS 情報]をクリックします。
Maintenance ユーティリティに[ACS 情報の指定]ダイアログ ボックスが表示されます。
図 24 [ACS 情報の指定]ダイアログ ボックス
2
 
3
4
ISO で定義されている言語固有のコレーティング シーケンスを使用して文字列の値をソートする ACS を指定する場合は、ISR テーブル名を指定します。[テーブル名]フィールドへの入力は、半角で 16 文字までです。ISR の詳細については、開発者リファレンスの『PSQL Programmer's Guide』を参照してください。
オーナー ネームの管理
MicroKernel は、ファイル オーナー ネームを設定することにより、データ ファイルへのアクセスを制限するオプションを提供しています。オーナー ネームは大文字小文字を区別します。オーナー ネームはパスワードに似ていますが、PCC で設定されるユーザー名やグループ名と同じではありません。たとえば、ファイル オーナー ネームの Master はデフォルト ユーザーの Master とは異なります。
短いオーナー ネームは半角 8 文字までの範囲で指定できます。長いオーナー ネームは半角 24 文字までの範囲で指定できます。長いオーナー ネームを設定すると、以下のすべての事項が適用されることに留意してください。
リレーショナル アクセスでは、オーナー ネームの制限のあるテーブルを操作しようとすると ODBC エラーになります。たとえば、PCC でテーブルを削除しようとする場合などです。オーナー ネームは GRANT ステートメントまたは SET OWNER ステートメントを使って適用できます。GRANT ステートメントを使用して、特定のユーザーまたはグループにアクセス権を与え、ODBC 経由でリレーショナル アクセスすることができます。Master ユーザーは GRANT ステートメントに正しいオーナー ネームを使用する必要があります。『SQL Engine Reference』のGRANTを参照してください。
SET OWNER ステートメントを使用し、現在のデータベース接続中に使用するオーナー ネームを 1 つまたは複数指定できます。『SQL Engine Reference』のSET OWNERを参照してください。
オーナー ネームの作業
オーナー ネームは設定およびクリアすることができます。
オーナー ネームを設定またはクリアする
オーナー ネームを設定すると、データ ファイルへのアクセスが制限されます。オーナー ネームをクリアすると、この制限が解除されます。
1
PSQL Maintenance ウィンドウで、[オプション]>[オーナー ネームの設定/クリア]を選択して、[オーナー ネームの設定/クリア]ダイアログを開きます。
図 25 [オーナー ネームの設定/クリア]ダイアログ
2
MicroKernel ファイル]ボックスで、オーナー ネームを設定またはクリアするファイルを入力します。オーナー ネームをクリアする場合は、[オーナー ネームのクリア]をクリックし、[現在のオーナー]フィールドにファイルのオーナー ネームを設定します。
3
オーナー ネームを設定する場合は、[オーナー ネームの設定]をクリックし、[新しいオーナー]フィールドに新しいオーナー ネームを入力して、その後、希望するオプションを選択します。
オーナー ネームなしの読み込み専用アクセスを許可する]をオンにすると、すべてのユーザーが、データ ファイルへの読み取り専用アクセスを許可されます。
ファイルのデータを暗号化する]をオンにすると、デバッグ ユーティリティやファイル ダンプ ユーティリティを使用したデータへの不正アクセスを防ぐことができます。暗号化と復号により処理時間が増えるため、使用する環境でデータのセキュリティが優先される場合にのみ、このチェック ボックスをオンにしてください。
長いオーナー ネーム]を選択して、半角 24 文字までの範囲でオーナー ネームを作成します(短いオーナー ネームは半角 8 文字までの範囲で指定できます)。長いオーナー ネームを設定すると、以下のすべての事項が適用されます。
4
実行]をクリックしてオプションを適用します。
メモ: オーナー ネームを指定するには GRANT ステートメントを使用することもできます。『SQL Engine Reference』のオーナー ネームを参照してください。PCC では現在、ファイルのセキュリティ プロパティでオーナー ネームを設定する方法は提供していません。
情報レポート
ファイル情報レポートの作成は、データベース エンジンのトランザクション一貫性保持機能でファイルのログを作成できるかどうかを確認する際に便利です。レポートは、ファイルにシステム データがあるかどうか、キーがユニークであるかどうかを表示します(ユニーク キーには、重複が許可されていることを示す D フラグが付きません)。情報レポートはファイルのメタデータを提供します。この情報は、問題の解決に使用したり、よく似たファイルを作成するのに役立ちます。
情報レポートの作業
情報レポートを作成する手順を以下に示します。
1
メイン ウィンドウのメニューで、[オプション]>[情報レポートの作成]をクリックします。Maintenance ユーティリティに[ファイル情報レポート]ダイアログ ボックスが表示されます。
図 26 [ファイル情報レポート]ダイアログ ボックス
2
レポートを表示する設定にした場合、次のような[ファイルの表示]ウィンドウが表示されます。
図 27 ファイル情報レポートの例
ファイル情報レポートの情報ヘッダーは、ファイル情報エディターに記述されているファイル情報エディターのコントロールに対応しています。
ファイル情報レポート下部の凡例には、レポートのキー/セグメントの部分で使用されている記号の説明が表示されます。この情報には、キーやキー セグメントの数、ファイル中のキーの位置、キー長などが含まれます。
凡例:
< = Descending Order
D = Duplicates Allowed
I = Case Insensitive
M = Modifiable
R = Repeat Duplicate
A = Any Segment (Manual)
L = All Segments (Null)
* = The values in this column are hexadecimal.
?? = Unknown
-- = Not Specified
インデックス
インデックスは、特定キーのすべてのキー値をソートするためのものです。Btrieve アクセスではオーバーラップするインデックス(列の一部を含むインデックス)が許可されます。ODBC を介したリレーショナル アクセスでは、オーバーラップするインデックスは許可されません。[エディターの起動]ボタンをクリックして表示できるファイル情報エディターを使用して、オーバーラップするインデックスを作成することができます。
インデックスの作業
インデックスに関連する以下の作業を行います。
インデックスの作成
ファイルにキーが定義されていない場合、ファイルのインデックスを作成することはできません。ファイル情報エディター(ファイル情報エディターを参照)を使用してキーを作成することができます。
1
メイン メニューで、[インデックス]>[作成]をクリックすると、[インデックスの作成]ダイアログ ボックスが開きます。
図 28 [インデックスの作成]ダイアログ ボックス
2
インデックスの作成]ダイアログ ボックスで以下のオプション設定を行います。
 
ファイル情報エディターで定義されたキー番号が表示されます。
リストのリフレッシュ]をクリックすると、ファイルに定義されているキー番号が表示されます。ファイルにシステム定義のログ キーが含まれている場合は、このリストに SYSKEY が表示されます。
リストのリフレッシュ]をクリックすると、ファイルに定義されていない、使用可能なキー番号が表示されます。インデックスの作成時に使用するキー番号を選択します。
3
エディターの起動]をクリックすると、[ファイル情報エディター]ダイアログ ボックスにキーの詳細情報が表示されます。[リストのリフレッシュ]をクリックして、データ ファイルからキー情報を読み取ると、[データ ファイルの既存キー番号]リストと[作成に使用するキー番号]リストをリフレッシュできます。インデックスを作成する前に[リストのリフレッシュ]をクリックしてください。
4
インデックスの作成]ダイアログ ボックスの設定完了後、[実行]をクリックしてインデックスを作成します。インデックス作成の所要時間は、ファイルに含まれるデータの量によって異なります。
インデックスの削除
インデックスを削除する前に、アプリケーション プログラムが行うアクセスについてよく理解しておいてください。必要なインデックスがないと、GET NEXT などの機能が動作しません。その結果、アプリケーション プログラムは正常に機能しなくなります。
1
メイン メニューで、[インデックス]>[削除]をクリックします。[インデックスの削除]ダイアログ ボックスが表示されます。
図 29 [インデックスの削除]ダイアログ ボックス
2
インデックスの削除]ダイアログ ボックスで以下のオプション設定を行います。
 
リストのリフレッシュ]をクリックすると、ファイルに定義されているキー番号が表示されます。削除するインデックスのキー番号を選択します。ファイルにシステム定義のログ キーが含まれている場合は、リストに SYSKEY が表示され、それを選択することにより、システム定義のログ キーをファイルから削除することができます。
3
リストのリフレッシュ]をクリックし、指定したファイルからキー情報を取得します。
データ
[データ]メニューのコマンドを使用して、データ ファイルのレコードをインポート、エクスポート、およびコピーすることができます。また、ロール フォワード機能を利用して、システム エラー発生後にデータを修復することも可能です。ロール フォワードについては、ロール フォワード コマンドを参照してください。
ASCII ファイル形式のインポートとエクスポート
データを保存すると、ASCII ファイルのレコードは、以下の形式になります。以下の仕様に従うことにより、ASCII テキスト エディターを使用してロード可能なファイルを作成できます。多くのテキスト エディターでは、バイナリ データを編集することができないので注意してください。
30 は、入力 ASCII ファイルのレコード形式です。この例では、データ ファイルに 40 バイトのレコード長が定義されています。
図 30 入力シーケンシャル ファイルのレコード形式
データに関する作業
以下のデータに関する作業は Maintenance ユーティリティを使用して行うことができます。
ASCII ファイルからのレコードのインポート
Maintenance ユーティリティでは、ASCII ファイルから標準データ ファイルにレコードをインポートすることができます。この処理では、データ変換は行われません。テキスト エディター、または Maintenance ユーティリティを使用してインポート ファイルを作成することが可能です(ASCII ファイルへのレコードのエスクポートを参照)。
1
メイン メニューで[データ]>[ロード]をクリックします。[データのロード]ダイアログ ボックスが表示されます。
図 31 [データのロード]ダイアログ ボックス
指定する ASCII ファイルは、ASCII ファイル形式のインポートとエクスポートで説明されている仕様に従っている必要があります。指定する標準データ ファイルのレコード長は、ASCII ファイル内のレコードと適合している必要があります。
2
実行]をクリックしてレコードをインポートします。
データのインポート中は、インポートされたレコードの数とパーセンテージ、およびステータス メッセージが表示されます。このとき、Maintenance ユーティリティでは別の作業(新しい[データのロード]ダイアログ ボックスを開くなど)を続けることもできます。
ASCII ファイルへのレコードのエスクポート
Maintenance ユーティリティでは、データ ファイルから ASCII ファイルにレコードをエクスポートすることができます。
1
メイン メニューで[データ]>[保存]をクリックします。[データの保存]ダイアログ ボックスが表示されます。
図 32 [データの保存]ダイアログ ボックス
2
データの保存]ダイアログ ボックスで、以下のオプションを設定します。
内部インデックス番号:
指定したキー番号を使用します。[保存元 MicroKernel ファイル]ボックスのファイルを変更した場合は、[インデックス リストをリフレッシュ]をクリックして使用可能なインデックスを更新します。
外部インデックス ファイル:
指定した外部インデックスを使用します(外部インデックスの作成は、インデックスの作成を参照)。
 
3
実行]をクリックしてデータをエクスポートします。Maintenance ユーティリティによって、ASCII ファイル形式のインポートとエクスポートの形式に従って、指定された ASCII ファイルが作成されます。その後、この ASCII ファイルを編集し、[ロード]コマンドを使用して、編集したテキストを別の標準データ ファイルにインポートできます。
データ ファイル間のレコードのコピー
Maintenance ユーティリティでは、MicroKernel データ ファイルから別の MicroKernel データ ファイルにデータをコピーすることができます。指定するデータ ファイルの両方のレコード長は、同じでなければなりません。
1
メイン メニューで[データ]>[コピー]をクリックします。[データのコピー]ダイアログ ボックスが表示されます。
図 33 [データのコピー]ダイアログ ボックス
2
コピーするファイルの名前を[コピー元 MicroKernel ファイル]ボックスに入力し、ファイルのコピー先のパスを[コピー先 MicroKernel ファイル]ボックスに入力します。
指定するデータ ファイルの両方のレコード長は、同じでなければなりません。
データ ファイルへの変更の回復(ロール フォワード)
ログ、バックアップおよび復元を参照してください。
Btrieve の Maintenance コマンド ライン ユーティリティ(butil)
このユーティリティは、コマンド ライン形式のインターフェイスを使用したい場合、または Continuous オペレーションを開始または停止したい場合に使用します。Maintenance ユーティリティは、サーバー上で(Windows プラットフォームの DOS プロンプトから)、またはローカルの DOS、Windows、Linux、および OS X クライアントから、コマンド ライン形式で使用することもできます。Maintenance ユーティリティのコマンドは、コマンド ラインまたは作成したコマンド ファイルから実行することができます。Maintenance ユーティリティのコマンド(BUTIL)を実行する前に、コマンドで説明されている、基本的な考え方と操作方法を理解しておく必要があります。
Btrieve の Maintenance コマンド ライン ユーティリティでは、以下のファイル処理およびデータ処理を行います。
リターン コード
BUTIL は実行を完了すると、終了コードまたは DOS エラー レベルのリターン コードをオペレーティング システムに返します。リターン コードの種類は次の表に示すとおりです。
コマンド
次の表は butil ユーティリティで使用できるコマンドの一覧です。表内のリンクから、詳細な情報へ移動できます。
STOP(DOS のみ)
コマンド構文の表示
各コマンドの使用方法を表示するには、ファイル サーバーで butil コマンドを入力します。
コマンド形式
Maintenance ユーティリティのコマンド ラインは、以下の形式になります。
BUTIL [-command [parameter ...]] | @commandFile
command
コマンド ファイル
コマンド ファイルは、以下の処理に使用します。
コマンドを実行すると、結果の出力ファイルには、実行したコマンドとその結果が表示されます。すべてのメッセージは、サーバーのコンソール画面にも表示されます。
コマンド ファイルには、コマンド ラインで必要な情報と同じものが含まれます。
コマンド ファイルの規則
Maintenance ユーティリティのコマンド ファイルを作成する際、以下の規則に従ってください。
各コマンドは、<end> または [end] で終わる必要があります。複数のコマンドを実行する場合は、各コマンドが <end> で終わっている必要があります。<end> または [end] には、小文字を使用します。
コマンド ファイルの例
以下は、コマンド ファイルの例 COPYCRS.CMD です。このファイルでは、BUTIL -CLONE コマンドを呼び出し、COURSE.MKD ファイルを複製することによって NEWCRS.MKD ファイルを作成します。次に -CREATE コマンドを呼び出し、NEWFILES.DES ディスクリプション ファイルのディスクリプションを使用して NEWFILE.DTA ファイルを作成します。
-clone newcrs.mkd course.mkd <end>
-create newfile.dta newfiles.des <end>
以下のコマンドでは、COPYPATS.CMD ファイルを使用して COPYPATS.OUT ファイルに書き込みを行います。
butil @copypats.cmd copypats.out
ディスクリプション ファイル
ディスクリプション ファイルは、データ ファイルとインデックスの作成に使用するファイルのディスクリプションおよびキー仕様を含む、ASCII テキスト ファイルです。作成したファイルの情報を保存するための媒体としてディスクリプション ファイルを使用することもできます。ディスクリプション ファイル形式の詳細については、ディスクリプション ファイルを参照してください。
拡張ファイルのサポート
データベース エンジンの データ ファイルは、オペレーティング システムのファイル サイズ上限を超えた容量を持つことが可能です。データを、MicroKernel の拡張ファイルからシーケンシャル ファイルにエクスポートした際、実際の形式の違いから、そのシーケンシャル ファイルの容量がデータベース エンジンのファイル サイズ上限を超える場合があります。
大きなサイズのファイルをエクスポートする際、対話型 Maintenance ユーティリティでは、シーケンシャル ファイルがオペレーティング システムのファイル サイズの上限(2 GB)を超えていることを検出すると、エクステンション ファイルの作成が開始されます。この処理は自動的に行われます。エクステンション ファイルおよび元のシーケンシャル ファイルは、同じボリューム内に存在する必要がありますエクステンション ファイルの名前には、ベース ファイルと似た名前を付ける方式が使用されます。エクステンション ファイルを示すのに、ネイティブな MicroKernel エンジン エクステンション ファイルがキャレット("^")を使用するのに対し、シーケンシャル ファイルのエクステンション ファイルはチルダ("~")を使用するので、同じベース ファイル名を持つ既存の MicroKernel エンジン拡張ファイルを上書きするのを防ぎます。最初のエクスポート エクステンション ファイルには、ベース ファイル名に ".~01" という拡張子が付きます。次のエクステンション ファイルには、ベース ファイル名に ".~02" というように拡張子が付けられます。これらの拡張子は 16 進形式で追加されます。
名前付け規則は 255 までのエクステンション ファイルをサポートしますが、現在のエクステンション ファイルの最大数は 64 です。したがって、最大ファイル サイズは 128 GB です。
シーケンシャル ファイルに対する、サイズの大きなファイルの SAVE または RECOVER については、それぞれのコマンドを参照してください。また、シーケンシャル ファイルからデータをインポートする場合は、そのファイルが拡張されているかどうかがチェックされ、エクステンション ファイルからデータがロードされます。
オーナー ネーム
MicroKernel では、オーナー ネームを指定することにより、ファイルへのアクセスを制限することができます。オーナー ネームはオプションであるため、ユーティリティで使用するファイルにオーナー ネームが必要でない場合もあります。
短いオーナー ネームは半角 8 文字までの範囲で指定できます。長いオーナー ネームは半角 24 文字までの範囲で指定できます。長いオーナー ネームを指定した場合、そのデータ ファイルは PSQL v10 SP1 より前のデータベース エンジンで読み取ることはできません。また、長いオーナー ネームを使用したデータ ファイルは、v9.5 より前のファイル形式にリビルドしようとする場合、そのオーナー ネームを最初に削除しておかないとリビルドすることができません。オーナー ネームは、長いものでも短いものでも、その最大長(8 または 24 バイト)に満たない部分は空白が埋め込まれます。
ファイルにオーナー ネームが必要な場合は、/O オプションを使用してオーナー ネームを指定します。オーナー ネームの指定は、以下のいずれかの方法で行います。
アスタリスク(*)オーナー ネームの入力を要求するメッセージが表示されます。rollfwd コマンドでは、複数のオーナー ネームをカンマで区切って入力します。
オーナー ネームは大文字小文字を区別します。コマンド ラインでオーナー ネームを入力した場合、先頭のスペースは削除されます。アスタリスクを使用した場合は、先頭のスペースは削除されません。
エラー メッセージのリダイレクト
エラー メッセージをリダイレクトする場合は、フル パス名(ドライブ文字または UNC パスを含む)を入力します。
BUTIL -command commandParameters > filePath
ASCII ファイル形式
「対話型 Maintenance ユーティリティ」セクションの、ASCII ファイル形式のインポートとエクスポートを参照してください。
異なるプラットフォームでのファイル名指定の規則
Windows、Linux、または OS X で BUTIL を使用する際、データ ファイルが現在のディレクトリに存在する場合は、パスを指定する必要はありません。
データのインポートとエクスポート
BUTIL コマンドの COPYLOADRECOVER、および SAVE を使用したデータのインポートおよびエクスポートの詳細について説明します。
COPY
COPY コマンドは、MicroKernel ファイルの内容を、別のファイルにコピーします。COPY は、入力データ ファイルの各レコードを取得して、出力データ ファイルに挿入します。両ファイルのレコードのサイズは同じである必要があります。レコードのコピー後、COPY によって新しいデータ ファイルに挿入されたレコードの総数が表示されます。
メモ: COPY は、RECOVER コマンドと LOAD コマンドに相当する処理を一度に実行します。
COPY コマンドを使用することにより、古いファイルからのデータと新しいキー属性を持つデータ ファイルを作成できます。
1
CREATE コマンドを使用し、任意のキー属性(キー位置、キー長、重複キー値)を持つ空のデータ ファイルを作成します。
または
CLONE コマンドを使用して、既存ファイルの属性を使った空のデータ ファイルを作成します。
2
COPY コマンドを使用し、既存データ ファイルの内容を、新しく作成したデータ ファイルにコピーします。
形式
butil -copy sourceFile outputFile [/O< owner1 | *>
[/O<owner2 | *>]] [/UIDuname /PWDpword [/DBdbname]]
/Oowner1
/Oowner2
/UID<name>
/UIDuname
/PWD<word>
/PWDpword
uname で識別されるユーザーのパスワードを指定します。uname が指定された場合、pword は必ず指定する必要があります。
/DB<name>
/DBdbname
以下のコマンドは、COURSE.MKD のレコードを NEWCRS.MKD にコピーします。COURSE.MKD 入力ファイルに、オーナー ネームは必要ありませんが、NEWCRS.MKD 出力ファイルでは、オーナー ネーム Pam が使用されています。
butil -copy course.mkd newcrs.mkd /O /OPam
この例から最初の /O を省略した場合、オーナー ネーム Pam は、出力データ ファイルではなく、入力データ ファイルのものとして認識されます。
LOAD
LOAD コマンドは、入力 ASCII ファイルのレコードをファイルに挿入します。入力 ASCII ファイルは、1 つのファイルまたは拡張ファイル(ベース ファイルと複数のエクステンション ファイル)のどちらでもかまいません。LOAD コマンドでは、入力 ASCII ファイルのデータは変換されません。データ ファイルへのレコード移動後、ロードされたレコードの総数が表示されます。
メモ: LOAD コマンドは、アクセラレイティド モードで出力ファイルを開きます。ロード オペレーション中は、ファイルのログは作成されません。アーカイブ ログを使用している場合は、LOAD コマンド使用後にデータ ファイルを再度バックアップします。

拡張ファイル:次のエクステンション ファイルが検出された場合は、ロードが継続されます。SAVE コマンドおよび RECOVER コマンドで作成してあるエクステンション ファイルは、削除しないでください。ファイルに 3 つのエクステンション ファイルが存在し、ユーザーが 2 つ目のエクステンション ファイルを削除した場合は、1 つ目のエクステンション ファイル処理後に、レコードのロードが中止されます。

SAVE または RECOVER コマンドにより作成されたエクステンション ファイルは 3 つなのに、4 つ目のエクステンション ファイルが以前の SAVE または RECOVER コマンドで作成されて存在している場合、4 つ目のエクステンション ファイルからもレコードが読み取られ、データベース エンジン ファイルに挿入されます。4 つ目のエクステンション ファイルが存在する場合は、LOAD 開始前に削除してください。
LOAD コマンド実行前には、入力 ASCII ファイルおよびデータ ファイルを作成する必要があります。入力 ASCII ファイルは、標準のテキスト エディターやアプリケーションを使用して作成できますが、そのファイル形式(ASCII ファイル形式のインポートとエクスポートを参照)に従う必要があります。データ ファイルは、CREATE コマンドまたは CLONE コマンドを使用して作成できます。
形式
butil -load unformattedFile outputFile [/O<owner |*>] [/UIDuname /PWDpword [/DBdbname]]
/Oowner
/UID<name>
/UIDuname
/PWD<word>
/PWDpword
uname で識別されるユーザーのパスワードを指定します。uname が指定された場合、pword は必ず指定する必要があります。
/DB<name>
/DBdbname
以下の例では、シーケンシャル レコードを COURSE.TXT から COURSE.MKD に読み込みます。COURSE.MKD のオーナー ネームは Sandy です。
butil -load course.txt course.mkd /OSandy
RECOVER
RECOVER コマンドは、MicroKernel ファイルからデータを取り出し、LOAD コマンドで使用する入力 ASCII ファイルと同じ形式の ASCII ファイルに書き込みます。これは、破損した MicroKernel ファイルから、一部または全部のデータを取り出すときに便利です。RECOVER コマンドは、すべてではないにしても、ファイルのレコードの多数を取り出すことができます。この後は、LOAD コマンドを使用し、新しい MicroKernel ファイルに回復したレコードを挿入します。
メモ: Maintenance ユーティリティでは、レコードのデータは変換されないため、テキスト エディターを使用してバイナリ データを含む出力ファイルを編集する場合、テキスト エディターによってはバイナリ データが変更されてしまい、予期しない問題が発生する場合があります。
形式
BUTIL -RECOVER sourceFile unformattedFile [/O<owner |*>]
[/Q] [/J] [/I] [/UIDuname /PWDpword [/DBdbname]]
/Oowner
ファイルを前方から読み取ります。デフォルトでは、前方から読み取られますが、このオプションを使用して前方および後方を指定することができます。/I および /J の両方を指定した場合は、エラーが発生するまで前方からファイルが読み取られます。次に、発生したエラーまで、または別のエラーが発生するまで、ファイルを最後から読み取ります。

/J を最初に指定した場合は、まず後方から、次に前方から読み取ります。
/UID<name>
/UIDuname
/PWD<word>
/PWDpword
uname で識別されるユーザーのパスワードを指定します。uname が指定された場合、pword は必ず指定する必要があります。
/DB<name>
/DBdbname
ソース ファイルの各レコードでは、RECOVER コマンドで可変ページ エラー(ステータス コード 54)が発生した場合、現在のレコードから取得できるすべてのデータをシーケンシャル ファイルに書き込み、回復処理を継続します。
ユーティリティでは、以下のメッセージが表示されます。
以下の例では、COURSE.MKD からレコードを取り出し、COURSE.TXT に書き込みます。
butil -recover course.mkd course.txt
SAVE
SAVE コマンドは、指定したインデックス パスを使用して MicroKernel ファイルからデータを読み込み、LOAD コマンドで使用する形式に対応した ASCII ファイルに書き込みます。その後、その ASCII ファイルを編集し、LOAD コマンドを使用して編集後のデータを、別のデータ ファイルに保存することができます。ASCII ファイル形式の詳細については、ASCII ファイル形式のインポートとエクスポートを参照してください。
SAVE は、入力データ ファイルの各レコードに対して、出力 ASCII ファイルにレコードを 1 つ作成します。完了後、SAVE によって保存されたレコードの総数が表示されます。
メモ: Maintenance ユーティリティでは、レコードのデータは変換されないため、テキスト エディターを使用してバイナリ データを含む出力ファイルを編集する場合、テキスト エディターによってはバイナリ データが変更されてしまい、予期しない問題が発生する場合があります。
形式
butil -save sourceFile unformattedFile [Y indexFile | N <keyNumber | -1>] [/O<owner1 | *> [/O<owner2 | *>]] [/Q] [/J] [/I] [/UIDuname /PWDpword [/DBdbname]]
/Oowner1
/Oowner2
ファイルを前方から読み取ります。デフォルトでは、前方から読み取られますが、このオプションを使用して前方および後方を指定することができます。/I および /J の両方を指定した場合は、エラーが発生するまで前方からファイルが読み取られます。次に、発生したエラーまで、または別のエラーが発生するまで、ファイルを最後から読み取ります。

/J を最初に指定した場合は、まず後方から、次に前方から読み取ります。
/UID<name>
/UIDuname
/PWD<word>
/PWDpword
uname で識別されるユーザーのパスワードを指定します。uname が指定された場合、pword は必ず指定する必要があります。
/DB<name>
/DBdbname
ユーティリティでは、以下のメッセージが表示されます。
以下の 2 つの例は、SAVE コマンドを使用した、データ ファイルからのレコード取得方法です。
この例では、NEWCRS.IDX 外部インデックス ファイルを使用して COURSE.MKD からレコードを取得し、それらを COURSE.TXT という名前のシーケンシャル テキスト ファイルに保存します。
butil save course.mkd course.txt newcrs.idx
この例では、キー番号 3 を使用して COURSE.MKD からレコードを取得し、それらを COURSE.TXT という名前のシーケンシャル テキスト ファイルに保存します。
butil -save course.mkd course.txt n 3
データ ファイルの作成と変更
このセクションでは、CLONECLROWNERCREATEDROPINDEXSETOWNER、 および SINDEX といった各種 BUTIL コマンドを使用した、データ ファイルの作成と変更に関する詳細について説明します。またこのセクションでは、Btrieve データ ファイルのコンパクト化で、Btrieve データ ファイルの未使用スペース削除に関して詳細に説明します。
注意: 同じディレクトリに、ファイル名が同一で拡張子のみが異なるようなファイルを置かないでください。たとえば、同じディレクトリ内のデータ ファイルの 1 つに Invoice.btr、もう 1 つに Invoice.mkd という名前を付けてはいけません。このような制限が設けられているのは、データベース エンジンがさまざまな機能でファイル名のみを使用し、ファイルの拡張子を無視するためです。ファイルの識別にはファイル名のみが使用されるため、ファイルの拡張子だけが異なるファイルは、データベース エンジンでは同一のものであると認識されます。
 
CLONE
CLONE コマンドは、既存ファイルと同じファイル仕様(オーナー ネームを含まず、補足インデックスを含む)を持つ、空の新規ファイルを作成します。新しいデータ ファイルには、既存ファイルのすべての定義済みキー属性(キー位置、キー長、重複キー値など)が含まれます。
CLONE コマンドでは、ファイル情報(システム データを参照)に影響する MicroKernel 設定オプションのすべてが無視されます(ファイル バージョンを除く)。CLONE コマンドは、[作成ファイルのバージョン]オプションで指定したデータベース エンジンのファイル バージョンを使用して新規ファイルを作成します。
形式
BUTIL -CLONE outputFile sourceFile [/O<owner | *>] [/pagecompresson | /pagecompressoff] [/recordcompresson | /recordcompressoff] [/UIDuname /PWDpword [/DBdbname]] [/S]
/Oowner
outputFile のページ圧縮をオンにすると、以下の条件が設定されます。
outputFile のページ圧縮をオフにします。このパラメーターは、sourceFile にページ圧縮が指定されていない場合は無効です。
outputFile のページ圧縮をオンにします。
outputFile のレコード圧縮をオフにします。このパラメーターは、sourceFile にレコード圧縮が指定されていない場合は無効です。
/UID<name>
/UIDuname
/PWD<word>
/PWDpword
uname で識別されるユーザーのパスワードを指定します。uname が指定された場合、pword は必ず指定する必要があります。
/DB<name>
/DBdbname
備考
Btrieve 6.0 以降では、ページ サイズが 1,024 バイトのデータ ファイルで最大 23 のキー セグメントを使用することができるため、CLONE コマンドでは、既存データ ファイルに 24 のキー セグメントが含まれ、ページ サイズが 1,024 バイトの場合、新規データ ファイルのページ サイズは 2,048 バイトに設定されます。これは、既存データ ファイルがバージョン 6.0 より前の形式で、データベース エンジン ロードの際に、作成ファイルのバージョン オプションが 5.x または 6.x に設定されていない場合に発生します。
バージョン 7.x 以前のファイルを複製する場合は、作成する新規ファイルのバージョン設定を確認してください。たとえば、6.15 ファイルを 9.5 形式で複製する場合は、[作成ファイルのバージョン]オプションを 9.5 に設定します。
メモ: ソース ファイルがシステム データを含まない 8.x 以上の形式の場合は、データベース エンジンの設定にかかわらず、出力ファイルにもシステム データは含まれません。既存ファイルへのシステム データの追加については、『Getting Started with PSQL』を参照してください。
ステータス コード 30(指定されたファイルは MicroKernel ファイルではありません)が発生し、ソース ファイルのヘッダー ページが破損している可能性がある場合、ディスクリプション ファイルで CREATE コマンドを使用して新規の MicroKernel ファイルを作成します。
以下のコマンドは、COURSE.MKD ファイルを複製して NEWCRS.MKD ファイルを作成します。
butil -clone newcrs.mkd course.mkd
CLROWNER
CLROWNER コマンドは、MicroKernel ファイルのオーナー ネームをクリアします。
形式
BUTIL -CLROWNER sourceFile </O<owner | *> [/UIDuname /PWDpword [/DBdbname]]
/Oowner
/UID<name>
/UIDuname
/PWD<word>
/PWDpword
uname で識別されるユーザーのパスワードを指定します。uname が指定された場合、pword は必ず指定する必要があります。
/DB<name>
/DBdbname
以下のコマンドは、TUITION.MKD のオーナー ネームをクリアします。このファイルのオーナー ネームは Sandy です。
butil -clrowner tuition.mkd /OSandy
CREATE
CREATE コマンドは、ディスクリプション ファイルで指定されている属性を使用して、空の MicroKernel ファイルを作成します。CREATE コマンドを実行する前に、新しいキー属性を指定するディスクリプション ファイルを作成します。詳細については、ディスクリプション ファイルを参照してください。
形式
BUTIL -CREATE outputFile descriptionFile [< Y | N >] [/UIDuname /PWDpword [/DBdbname]]
既存のファイルに上書きするかどうかを指定します。このオプションに N を指定し、同名の MicroKernel ファイルが存在する場合は、エラー メッセージが表示されます。デフォルト設定は、Y です。
/UID<name>
/UIDuname
/PWD<word>
/PWDpword
uname で識別されるユーザーのパスワードを指定します。uname が指定された場合、pword は必ず指定する必要があります。
/DB<name>
/DBdbname
以下のコマンドは、CREATE.DES ディスクリプション ファイルで定義された内容を使用し、ファイル COURSE.MKD を作成します。
butil -create course.mkd create.des
CREATE コマンドで使用するディスクリプション ファイルの例
34 の例では、MicroKernel 形式のファイルが作成されます。ファイルのページ サイズは 512 バイト、キーは 2 つに設定されています。ファイルの各レコードの固定長部は 98 バイト に設定されています。このファイルでは、可変長レコードがブランク トランケーション、レコード圧縮、可変長部割り当てテーブル(VAT)を使用しないように指定されています。空きスペース スレッショルドは、20 パーセントに設定されています。プリアロケーションは、100 ページに設定されています。ファイル作成時に、100 ページつまり 51,200 バイトがプリアロケートされます。
図 34 CREATE コマンドで使用するディスクリプション ファイルの例
キー 0 は、重複可能で変更不可能な文字列セグメントを 2 つ含むセグメント キーで、この 2 つのセグメントには、16 進数で 20(スペース)のヌル値が指定されています。キー 0 では、コレーティング シーケンス upper.alt が使用されます。
キー 1 は、重複不可能で変更可能な数値型のセグメント化されていないキーです。これは、降順でソートされます。
DROP
DROP コマンドは、ファイルからインデックスを削除し、それ以降のキー番号から 1 を引くことによって、残りのインデックスのキー番号を調整します。キーの番号を調整しない場合は、削除に指定したキー番号に 128 を加算します。この調整は、6.0 以降のファイルでのみ使用可能です。
形式
BUTIL -DROP sourceFile < keyNumber | SYSKEY >
[/O<owner | *>] [/UIDuname /PWDpword [/DBdbname]]
/Oowner
/UID<name>
/UIDuname
/PWD<word>
/PWDpword
uname で識別されるユーザーのパスワードを指定します。uname が指定された場合、pword は必ず指定する必要があります。
/DB<name>
/DBdbname
以下の例では、COURSE.MKD に 3 つのキーが存在します。ファイルの元のキーは、それぞれの番号が 0、1、2 となっています。
最初の例では、BUTIL -DROP コマンドで、COURSE.MKD からキー番号 1 を削除し、残りのキー番号をそれぞれ 0 と 1 に調整します。
butil -drop course.mkd 1
以下の例では、BUTIL –DROP コマンドでキー番号 1 を削除し、キー番号の調整は行いません。キー番号は、それぞれ 0 と 2 のままになります。
butil -drop course.mkd 129
INDEX
INDEX コマンドは、既存ファイルでキーとして指定されていないフィールドに基づき、既存 MicroKernel ファイルの外部インデックス ファイルを構築します。INDEX コマンドを実行する前に、新しいキー属性を指定するディスクリプション ファイルを作成します。ディスクリプション ファイルの詳細については、ディスクリプション ファイルを参照してください。
新規ファイルのレコードは、以下から構成されます。
メモ: ディスクリプション ファイルで指定したキー長が 10 バイトの場合、外部インデックス ファイルのレコード長は 14 バイト(10 + 4 バイト アドレス)になります。
形式
BUTIL -INDEX sourceFile indexFile descriptionFile [/O<owner | *>]
[/O<owner | *>] [/UIDuname /PWDpword [/DBdbname]]
/Oowner
/UID<name>
/UIDuname
/PWD<word>
/PWDpword
uname で識別されるユーザーのパスワードを指定します。uname が指定された場合、pword は必ず指定する必要があります。
/DB<name>
/DBdbname
備考
INDEX コマンドは、外部インデックス ファイルを作成し、インデックスが設定されたレコードの数を表示します。外部インデックス ファイルを使用して、データ ファイルのレコードを読み込む場合は、SAVE コマンドを使用します。
INDEX コマンドで使用するディスクリプション ファイルの例
以下のディスクリプション ファイルでは、1 つのセグメントを含む新しいキーを定義します。キーは、レコードの 30 バイト目から始まり、10 バイトの長さを持ちます。また、重複と変更が可能な STRING 型で、オルタネート コレーティング シーケンスを使用しません。
図 35 INDEX コマンドで使用するディスクリプション ファイルの例
以下のコマンドは、データ ファイル COURSE.MKD を使用し、外部インデックス ファイル NEWCRS.IDX を作成します。COURSE.MKD ファイルには、オーナー ネームは必要ありません。新しいキーの定義を含むディスクリプション ファイルは、NEWCRS.DES という名前です。
butil -index course.mkd newcrs.idx newcrs.des
SETOWNER
SETOWNER コマンドは、データ ファイルのオーナー ネームを設定します。
形式
BUTIL -SETOWNER sourceFile /O<owner | *> level [/L] [/UIDuname /PWDpword [/DBdbname]]
/Oowner
level は /O パラメーターの直後に置く必要があります。
/UID<name>
/UIDuname
/PWD<word>
/PWDpword
uname で識別されるユーザーのパスワードを指定します。uname が指定された場合、pword は必ず指定する必要があります。
/DB<name>
/DBdbname
以下の例では、course.mkd データ ファイルの短いネームのオーナーを作成します。オーナー ネーム Sandy に制限レベル 1 を設定します。
butil -setowner course.mkd /OSandy 1
以下の例では、billing.mkd データ ファイル用の長いオーナー ネームを作成し、そのオーナー ネームとファイルを暗号化し、すべてのアクセス モードを制限します。
butil -setowner billing.mkd /Ohr#Admin$945k7YY%svr 2 /L
SINDEX
SINDEX コマンドは、既存 MicroKernel ファイルに追加インデックスを作成します。デフォルトでは、新規インデックスのキー番号は、データ ファイルでそれまで最大だったキー番号より 1 つ大きな番号になりますが、キー番号を指定することも可能です。例外として、DROP コマンドでインデックスを削除し、残りキー番号の調整を行わなかった場合は、未使用のキー番号が存在するため、新しいインデックスに最初の未使用番号が割り当てられます。
キー番号オプションを使用することにより、新規インデックスのキー番号を指定できます。指定するキー番号は、ファイルで使用されていない有効なキー番号でなければなりません。無効なキー番号を指定した場合は、ステータス コード 6 が返されます。
このコマンドで SYSKEY オプションを使用しない場合は、SINDEX コマンドを使用する前に、インデックスのキー仕様を定義するディスクリプション ファイルを作成する必要があります。ディスクリプション ファイルの詳細については、ディスクリプション ファイルを参照してください。
形式
BUTIL -SINDEX sourceFile <descriptionFile | SYSKEY> [keyNumber]
[/O<owner | *>] [/O<owner | *>] [/UIDuname /PWDpword [/DBdbname]]
/Oowner
/UID<name>
/UIDuname
/PWD<word>
/PWDpword
uname で識別されるユーザーのパスワードを指定します。uname が指定された場合、pword は必ず指定する必要があります。
/DB<name>
/DBdbname
以下の例では、COURSE.MKD にインデックスを追加します。ディスクリプション ファイルの名前は、NEWIDX.DES です。
butil -sindex course.mkd newidx.des
以下の例では、システム定義キーが削除された COURSE.MKD にシステム定義キーを追加します。
butil -sindex course.mkd syskey
Btrieve データ ファイルのコンパクト化
BUTIL では、複数のコマンド(CLONERECOVERLOAD)を使用してデータ ファイルの未使用スペースを削除し、ファイル サイズを縮小することができます。
1
データ ファイルの名前を変更し、CLONE オプションを使用して元のファイルと同名の空のデータ ファイルを作成します。
2
RECOVER を使用し、複製したファイルのデータを、シーケンシャル テキスト ファイルに保存します。
3
LOAD を使用し、回復されたデータを複製ファイルにロードします。
空のレコード以外のデータを含むすべてのレコードは、新しく作成したデータ ファイルにロードされます。この処理は、対話型 Maintenance ユーティリティを使用して実行することもできます。
ファイルのページ キャッシュの管理
パフォーマンスを向上させるために、butil で cache コマンドと purge コマンドを使用してファイルのページ キャッシュを管理することができます。
注記
butil -cache および butil -purge コマンドがクライアント キャッシュ エンジンやレポート エンジンから実行される場合、そのコマンド アクションが適用されるのはローカル キャッシュにあるファイルのみです。
ファイルがクライアント キャッシュに残るようにするには、以下のいずれかの状況になっていなければなりません。
クライアント キャッシュ エンジンがアプリケーションとしてインストールされている場合は、シャットダウンしてクライアントがすべてのファイルを閉じた直後にキャッシュを空にします。これは、サービスとしてインストールされているクライアント キャッシュ エンジンやレポート エンジンの場合には問題になりません。
CACHE
CACHE コマンドは、ファイルのページをキャッシュへ事前ロードします。ただし、ファイルが完全にキャッシュされているか、またはキャッシュがいっぱいの場合にはロードされません(コマンド プロンプに戻ります)。
形式
BUTIL -cache <sourceFile>
PURGE
PURGE コマンドは、ファイルの不要なキャッシュ ページをすべて消去します。ファイルがオープン ハンドルを持つ場合は消去されません(ただちにコマンド プロンプトに戻ります)。
形式
BUTIL -purge <sourceFile>
データ ファイル情報の表示
このトピックでは、STAT を使用してデータ ファイルの特性や統計情報に関するレポートを生成する方法を説明します。
STAT
STAT コマンドは、定義されているデータ ファイルの特性、およびファイルの内容に関する情報を含むレポートを作成します。このコマンドを使用し、データベース エンジンがトランザクション一貫性保持機能を使ってファイルの情報を記録できるかどうかを判断できます。STAT コマンドでは、Create Supplemental Index オペレーション(Btrieve 6.0 以降)および Create オペレーションのいずれで作成されたかに関わらず、同じインデックスが表示されます。
形式
BUTIL -STAT <sourceFile> [/O<owner | *>] [/O<owner | *>] [/UIDuname /PWDpword [/DBdbname]]
/Oowner
/UID<name>
/UIDuname
/PWD<word>
/PWDpword
uname で識別されるユーザーのパスワードを指定します。uname が指定された場合、pword は必ず指定する必要があります。
/DB<name>
/DBdbname
以下の例では、PATIENTS.DTA のファイル情報を表示します。データ ファイルには、オーナー ネームは含まれません。
butil -stat patients.dta
以下は、結果レポートの例です。
**************************************************
File Statistics for PATIENTS.DTA
 
File Version = 8.00
Page Size = 2048
Page Preallocation = No
Key Only = No
Extended = No
 
Total Number of Records = 16
Record Length = 104
Record Compression = No
Variable Records = No
 
Available Linked Duplicate Keys = 0
Balanced Key = No
Log Key = 1
System Data = No
Total Number of Keys = 3
Total Number of Segments = 4
 
Key  Segment Position Length  Type  Flags Null Values*  Unique  ACS Values
0    1       21       20      String MD   --            16       0
0    2        7       12      String MD   --            16       0
1    1        1        6      String M    --            16       0
2    1       83       10      String MD   --            7        0

Alternate Collating Sequence (ACS) List:
0 UPPER
 
凡例:
< = Descending Order
D = Duplicates Allowed
I = Case Insensitive
M = Modifiable
R = Repeat Duplicate
A = Any Segment (Manual)
L = All Segments (Null)
* = The values in this column are hexadecimal.
?? = Unknown
-- = Not Specified
この例では、ファイル PATIENTS.DTA が、8.0 形式のファイルであることを表しています(バージョン番号は、そのファイル形式を読むことができる Btrieve の一番古いバージョン)。ファイルには、2,048 バイトのページ サイズが指定されており、プリアロケート ページはありません。これは、キー オンリー ファイルでも拡張ファイルでもありません。
このファイルには 16 件のレコードが挿入されています。また、104 バイトのレコード長が定義されており、レコード圧縮は使用せず、可変長レコードも許可されていません。
このファイルには、リンク可能な重複キーは存在せず、インデックス バランスも使用しません。キー 1 を使用したログが実行され、ファイルには、システム定義のデータも存在しません。また、4 つのキー セグメントから構成される 3 つのキーが存在します。
メモ: SINDEX で作成したインデックスには、「予約重複ポインター」要素を指定しない限り、デフォルトで R が割り当てられます。
STAT レポートには、特定のキーに関する情報も表示されます。たとえば、キー 0 が、重複可能、変更可能であり、2 つのセグメントから構成されることが、レポートに表示されます。
キー 1 は、このファイルのログに使用されるキーです。キー 1 は、1 つのセグメントで構成されます。ポジション 1 から始まり、長さが 6 バイト、重複不可、変更可能、そして STRING 型として保存されます。16 個の重複しないキー値が、このキーに挿入されています。このキーでは、オルタネート コレーティング シーケンス ファイル upper.alt が使用されます。
キー 2 は、1 つのセグメントで構成されます。ポジション 83 から始まり、長さが 10 バイト、重複可能、変更可能、そして STRING 型として保存されます。7 個の重複しないキー値が、このキーに挿入されています。このキーでは、オルタネート コレーティング シーケンス ファイル upper.alt が使用されます。
ファイル バージョンに関する注意
ファイル形式のバージョンをレポートする際、データベース エンジンは指定したファイルを読むことのできる最も古いエンジンのバージョンを出力します。たとえば、Btrieve 5.x 形式で作成されたファイルがあっても、4.x と 5.x の機能を一切使用していないのであれば、レポートにはバージョン 3.x ファイルと出力されます。6.x 形式で始めるには、ファイル自体にバージョン スタンプを含める必要があります。6.x より前のバージョンでは、ファイル バージョンを調べる唯一の方法は、ファイルが使用している機能を調べることです。バージョン 5.x 以前のファイルで、使用されているかどうかによってレポートに出力されるバージョンを決定する機能を次の表に示します。
MicroKernel エンジンのバージョンの表示
このセクションでは、VER コマンドを使用した、MicroKernel エンジンのバージョンの表示に関して説明します。
VER
VER コマンドは、MicroKernel エンジンおよびリクエスター(アクセス モジュール)の両方のバージョン番号を表示します。
形式
BUTIL -VER
備考
VER コマンドを実行した場合、以下のようなメッセージが表示されます(Windows NT)。
Btrieve リクエスターのバージョンは 11.00 です。
Btrieve のバージョンは 11.00 で、xxx 版です。
MicroKernel エンジンとリクエスターのアンロード(DOS のみ)
STOP
STOP コマンドは、MicroKernel エンジンおよびリクエスターをアンロードします。
形式
butil -stop
Continuous オペレーションの実行
Continuous オペレーションに関連するコマンド startbu および endbu については、ログ、バックアップおよび復元で説明しています。
アーカイブ ロギングの実行
Maintenance ユーティリティ(GUI またはコマンド ラインの BUTIL)は、アーカイブ ログ ファイルをデータ ファイルにロール フォワードする手段を提供します。ログ、バックアップおよび復元を参照してください。
BUTIL ROLLFWD コマンドは、最後のバックアップからシステム エラーが発生する間に行った、データ ファイルへの変更を回復します。システム エラーが発生した場合は、データ ファイルのバックアップ コピーを復元した後、BUTIL ROLLFWD コマンドを使用し、ログに保存されているすべての変更を復元したデータ ファイルに適用します。バックアップからデータ ファイルを復元しない限り、このコマンドを使用しないでください。
メモ: ROLLFWD コマンドを利用するには、MicroKernel の[選択ファイルのアーカイブ ロギング]オプションを有効にし、システム エラー発生前にファイルのバックアップを行う必要があります。
また、ROLLFWD コマンドを使用し、ログ オペレーションの出力ファイルを作成することも可能です。ROLLFWD コマンドでは、ロール フォワード前、またはロール フォワードと同時に出力ファイルを作成できます。
単一のファイルをロール フォワードすることもできますし、ボリューム上のすべてのデータ ファイル、ドライブ上のすべてのデータ ファイル、もしくは、ファイル、ボリュームおよび/またはドライブのリストをロール フォワードすることもできます。
GUI の使用
1
オペレーティング システムの[スタート]メニューまたはアプリ画面から、あるいは PSQL Control Center の[ツール]メニューから Maintenance ユーティリティにアクセスします。
2
Maintenance]ウィンドウで、[データ]>[ロール フォワード]を選択します。[ロール フォワード]ダイアログ ボックスが表示されます。
図 36 [ロール フォワード]ダイアログ
3
4
デフォルトでは、このファイルは作成されません。ファイルを作成する場合は、[ダンプ ファイルを作成する]チェック ボックスをオンにします。以下のオプションも設定可能です。
これには、円記号(\)またはスラッシュで始まるダンプ ファイル名が含まれ、ドライブ文字、サーバー名またはボリューム名は含まれません。
 
5
実行]をクリックし、ダンプ ファイルの作成やロール フォワードを実行します。データが有効な場合は、[ロール フォーワード ステータス]ダイアログ ボックスが表示されます。
図 37 [ロール フォワード ステータス]ダイアログ ボックス
処理されたファイルは、リスト ボックスに追加され、ファイル名、およびロール フォワード オペレーションから返される PSQL ステータス コードが表示されます。
処理中にエラーが発生した場合は、エラー時のロール フォワード続行を指定できるダイアログ ボックスが表示されます。このダイアログ ボックスでは、このダイアログを再表示することなく処理を継続するか、処理を継続して必要な場合にこのダイアログを再表示するか、またはファイル処理の中断を選択できます。
メモ: 実行する Btrieve オペレーションに対して、キー バッファーまたはデータ バッファーが入力パラメーターでない場合、ダンプ ファイルには何も書き込まれません。
図 38 エラー時のロール フォワード続行を指定するダイアログ ボックス
コマンド ラインの使用
このセクションでは、ロール フォワードをコマンド ラインで使用する構文を説明します。
BUTIL -ROLLFWD <sourceFile | drive | @listFile>
[</L[dumpFile] | /W[dumpFile]> [/T<dataLength>]
[/E<keyLength>] [/H] [/V] [/O<ownerList | owner>|*]]
[/A] [/UID<name> <PWD<word>> [DB<name>]]
変更をロール フォワードするドライブ文字。ボリューム名の最後には、円記号(\)またはスラッシュ(/)を使用します(例:F:\F:/)。
/LdumpFile
/WdumpFile
ログ オペレーションが書き込まれる出力ファイルの名前。デフォルトは \BLOG\BROLL.LST で、物理ドライブのルートに関連付けられます。ファイル名は、スラッシュ(/)または円記号(\)で始まり、ドライブ文字やボリューム名は使用しません。ファイルは、BLOG.CFG と同じボリュームに配置されます。
/TdataLength
/EkeyLength
/UID<name>
/UIDuname
/PWD<word>
/PWDpword
uname で識別されるユーザーのパスワードを指定します。uname が指定された場合、pword は必ず指定する必要があります。
/DB<name>
/DBdbname
メモ: 実行する Btrieve オペレーションに対して、キー バッファーまたはデータ バッファーが入力パラメーターでない場合、ダンプ ファイルには何も書き込まれません。
例 A 次の例は、CLASS.MKD ファイルに、デフォルトのアーカイブ ログおよびログ ロケーションから変更を回復します。
butil -rollfwd <file_path>\PSQL\Demodata\class.mkd
(PSQL ファイルのデフォルトの保存場所については、『Getting Started with PSQL』の PSQL ファイルはどこにインストールされますか?を参照してください。)
例 B この例では変更を回復し、それらを以下のオプションを使用して d:\ ボリュームのすべてのファイルに出力します。
butil -rollfwd d:\/W /H /T32 /E4
例 C 以下の例では、ロール フォワードは実行されず、以下のダンプ オプションに従って、files.txt にリストされているファイルへの変更が出力されます。
d:\temp\files.lst をダンプ ファイルとして使用
butil -rollfwd d:\temp\files.txt /L\temp\files.lst /V /Oown123,own321