InterBase - Embarcadero

操作ガイド
InterBase 2009
®
www.embarcadero.com
© 2008 Embarcadero Technologies, Inc. Embarcadero、Embarcadero Technologies ロゴ、およびその他の Embarcadero
Technologies 製品名またはサービス名はすべて、Embarcadero Technologies, Inc. の商標または登録商標です。その他の
商標はすべて、個々の権利の所有者に帰属します。
目次
目次
表
図
第3章
1-i
IBConsole:InterBase
ix
インターフェイス
IBConsole の起動 . . . . . . . . . . . . .
IBConsole のメニュー . . . . . . . . .
コンテキスト メニュー . . . . . . .
IBConsole ツール バー . . . . . . .
ツリー ペイン . . . . . . . . . . . . . .
ワーク ペイン . . . . . . . . . . . . . .
標準テキスト表示ウィンドウ . . . . . .
IBConsole ウィンドウの切り替え . . .
IBConsole でのカスタム ツールの管理
データベース パフォーマンスの監視 . .
パフォーマンス モニタの表示 . . . .
xi
第1章
はじめに
対象読者 . . . . . . . . . . . . . . . . . . . . 1-1
このガイドの内容 . . . . . . . . . . . . . . . 1-1
必要なシステムとサーバー構成 . . . . . . . . 1-2
InterBase の主な機能 . . . . . . . . . . . . . 1-2
SQL サポート . . . . . . . . . . . . . . . . 1-4
複数のユーザーによるデータベースアクセス
. . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
isql . . . . . . . . . . . . . . . . . . . .
gbak . . . . . . . . . . . . . . . . . . . .
gfix . . . . . . . . . . . . . . . . . . . .
gsec . . . . . . . . . . . . . . . . . . . .
gstat . . . . . . . . . . . . . . . . . . . .
iblockpr (gds_lock_print) . . . . . . . .
ibmgr . . . . . . . . . . . . . . . . . . .
トランザクション管理 . . . . . . . . .
マルチジェネレーションアーキテクチャ
行レベルのオプティミスティックロック
データベース管理 . . . . . . . . . . . .
サーバーセキュリティの管理 . . . .
データベースのバックアップと復元 .
データベースの保守 . . . . . . . . .
状態の表示 . . . . . . . . . . . . . .
InterBase SuperServer アーキテクチャ .
コマンドラインツールの概要 . . . . . . .
. 1-4
. 1-5
. 1-5
. 1-5
. 1-6
. 1-6
. 1-6
. 1-7
. 1-7
. 1-7
. 1-7
. 1-8
. 1-8
. 1-8
. 1-9
. 1-9
. 1-9
. 1-9
.
.
.
.
.
.
.
.
.
.
.
. 3-2
. 3-2
. 3-3
. 3-4
. 3-5
. 3-7
. 3-7
. 3-8
. 3-8
3-10
3-10
第4章
サーバーの環境設定
サーバーの環境設定 . . . .
[一般]タブ . . . . . . .
[エイリアス]タブ . . .
マルチインスタンス . . . .
Windows サーバーの設定
. 4-1
. 4-2
. 4-3
. 4-3
. 4-4
リモートデータベースへのアクセス
. 4-4
クライアント側の設定 . . . .
. 4-4
リモートサーバー . . . . . .
. 4-4
ローカルデータベースへのアクセス
. 4-5
データベースの自動再ルーティング
. 4-6
サーバー側の設定 . . . . . .
. 4-6
クライアント側の設定 . . . .
. 4-7
起動パラメータ . . . . . . . . .
. 4-7
. 4-8
SMP サポート . . . . . . . . . . .
プロセッサ制御の拡張:CPU_AFFINITY . 4-8
ibconfig パラメータ: MAX_THREADS . . 4-9
Intel プロセッサにおけるハイパースレッディング
のサポート . . . . . . . . . . . . . . . . . . 4-9
InterBase Manager での InterBase の起動と停止
. . . . . . . . . . . . . . . . . . . . . . . . 4-9
UNIX での InterBase Server の起動と停止 4-10
ibmgr でのサーバーの起動と停止 . . . . 4-10
サーバーの起動 . . . . . . . . . . . . . . 4-11
サーバーの停止 . . . . . . . . . . . . . . 4-12
サーバーの自動起動 . . . . . . . . . . . 4-12
接続管理 . . . . . . . . . . . . . . . . . . . 4-15
環境変数の使い方 . . . . . . . . . . . . . . 4-15
ISC_USER および ISC_PASSWORD . . . 4-16
環境変数 InterBase . . . . . . . . . . . . 4-16
第2章
ライセンス管理
InterBase 2009 のライセンス オプション . . . 2-1
Server Edition . . . . . . . . . . . . . . . 2-2
Developer Edition . . . . . . . . . . . . . 2-3
Desktop Edition . . . . . . . . . . . . . . 2-3
Desktop Edition で利用可能なアドオン
. . . . . . . . . . . . . . . . . . . . . 2-3
ToGo Edition . . . . . . . . . . . . . . . . 2-3
[ ライセンス マネージャ ] の使用 . . . . . . . 2-4
[ ライセンス マネージャ ] へのアクセス . 2-4
i
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
環境変数 TMP . . . . . . . . . . . . .
UNIX と Linux のホストの信頼関係 .
一時ファイルの管理 . . . . . . . . . . .
履歴ファイルの設定 . . . . . . . . . .
ソートファイルの設定 . . . . . . . .
ibconfig の設定パラメータ . . . . . . . .
サーバーのログファイルの表示 . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
サーバーは InterBase ポートを認識できま
すか ? . . . . . . . . . . . . . . . . . 5-19
「サービス」ファイルがクライアントとサー
バーに設定されていますか ? . . . . . 5-19
接続拒否エラー . . . . . . . . . . . . . . 5-19
データベースへの正しいパスがわかっていま
すか ? . . . . . . . . . . . . . . . . . 5-19
UNIX ホストの信頼関係が確立されていま
すか ? . . . . . . . . . . . . . . . . . 5-20
データベースはネットワークファイルシステ
ム上にありますか ? . . . . . . . . . 5-20
ユーザーとパスワードは正しいですか ?
4-17
4-17
4-17
4-17
4-18
4-19
4-22
第5章
ネットワーク設定
ネットワークプロトコル . . . . . . . . . . . . 5-1
サーバーとデータベースへの接続 . . . . . . . 5-2
サーバーの登録 . . . . . . . . . . . . . . . 5-2
サーバーへのログイン . . . . . . . . . . . 5-4
サーバーからのログアウト . . . . . . . . . 5-5
サーバーの登録解除 . . . . . . . . . . . . . 5-5
データベースの登録 . . . . . . . . . . . . . 5-5
データベースへの接続 . . . . . . . . . . . 5-7
接続 . . . . . . . . . . . . . . . . . . . 5-7
指定したユーザーでのデータベース接続 5-7
データベースの接続解除 . . . . . . . . . . 5-8
データベースの登録解除 . . . . . . . . . . 5-9
接続の指定例 . . . . . . . . . . . . . . . . 5-9
ネットワーク通信の暗号化 . . . . . . . . . . 5-10
要件と制約 . . . . . . . . . . . . . . . 5-10
OTW 暗号の設定 . . . . . . . . . . . . . 5-10
セキュリティ証明書の生成 . . . . . . 5-10
クライアント サイドの設定 . . . . . . 5-11
サーバー サイドの設定 . . . . . . . . . . 5-13
OTW のサンプル設定 . . . . . . . . . . . 5-15
サンプル 1:クライアントとサーバーの設定
(サーバーでクライアントを検証しない場
合) . . . . . . . . . . . . . . . . . . 5-15
サンプル 2:クライアントとサーバーの設定
(クライアントを検証する場合) . . . 5-16
接続のトラブルシューティング . . . . . . . 5-17
接続不能エラー . . . . . . . . . . . . . . 5-17
クライアントとサーバーの間に低レベルの
ネットワークアクセスがありますか ? 5-17
クライアントはサーバーのホスト名を解析で
きますか ? . . . . . . . . . . . . . . 5-18
サーバーはファイアウォールの後ろにありま
すか ? . . . . . . . . . . . . . . . . . 5-18
クライアントとサーバーは異なるサブネット
にありますか ? . . . . . . . . . . . . 5-18
データベースにローカル接続できますか ?
. . . . . . . . . . . . . . . . . . . . 5-20
サーバーはデータベースファイルに対する許
可を得ていますか ? . . . . . . . . . 5-20
サーバーは InterBase のインストールディ
レクトリにファイルを作成する権限を得て
いますか ? . . . . . . . . . . . . . . 5-20
インターネット自動ダイヤルアップの無効化
. . . . . . . . . . . . . . . . . . . . . . 5-20
ネットワークアダプタのバインディング順序
の変更 . . . . . . . . . . . . . . . . 5-21
レジストリでの自動ダイヤルアップの無効化
. . . . . . . . . . . . . . . . . . . . 5-21
ローカルネットワーク動作に対して RAS が
ダイヤルするのを抑制する . . . . . 5-21
その他のエラー . . . . . . . . . . . . . . 5-22
Unknown Win32 error 10061 . . . . 5-22
ホストへのネットワークリクエストを確立で
きない . . . . . . . . . . . . . . . . 5-22
コミュニケーションの診断 . . . . . . . . . 5-23
[DB 接続]タブ . . . . . . . . . . . . . 5-23
DB 接続テストを実行するには . . . . 5-23
出力例(ローカル接続) . . . . . . . . 5-24
[TCP/IP]タブ . . . . . . . . . . . . . 5-24
[NetBEUI]タブ . . . . . . . . . . . . . 5-26
第6章
データベース ユーザー管理
セキュリティモデル . . . . . . . . . . . . . . 6-1
SYSDBA ユーザー . . . . . . . . . . . . . . 6-2
他のユーザー . . . . . . . . . . . . . . . . 6-2
UNIX ユーザー . . . . . . . . . . . . . . . 6-2
InterBase セキュリティデータベース . . . . . 6-3
埋め込みユーザー認証の有効化 . . . . . . . . 6-4
iSQL を使った EUA の有効化 . . . . . . . 6-4
IBConsole を使った EUA の有効化 . . . . 6-5
ユーザーの追加と変更(EUA 有効化データ
ベース) . . . . . . . . . . . . . . . . . . 6-6
システムテーブルのセキュリティ . . . . . . . 6-6
. . . . . . . . . . . . . . . . . . . . 5-18
データベースループバックに接続できます
か ? . . . . . . . . . . . . . . . . . . 5-18
ii
古いデータベース . . . . . . . . . . . . . . 6-6
データベースセキュリティを変更するためのス
クリプト . . . . . . . . . . . . . . . . . . 6-7
移行における問題 . . . . . . . . . . . . . . 6-7
SQL 特権 . . . . . . . . . . . . . . . . . . . . 6-8
ユーザーグループ . . . . . . . . . . . . . . . 6-8
SQL ロール . . . . . . . . . . . . . . . . . 6-8
UNIX グループ . . . . . . . . . . . . . . . 6-9
その他のセキュリティ . . . . . . . . . . . . . 6-9
InterBase ツール使用についての制限 . . . 6-9
データベースの保護 . . . . . . . . . . . . . 6-9
IBConsole でのユーザー管理 . . . . . . . . 6-10
[ユーザー情報]ダイアログの表示 . . . . 6-10
ユーザーの追加 . . . . . . . . . . . . . . 6-11
ユーザー設定の変更 . . . . . . . . . . . . 6-12
ユーザーの削除 . . . . . . . . . . . . . . 6-13
InterBase API でのユーザー管理 . . . . . . 6-13
gsec によるセキュリティの管理 . . . . . . . 6-14
リモートでの gsec の実行 . . . . . . . . 6-14
埋め込みデータベースユーザー認証と組み合わ
せた gsec の実行 . . . . . . . . . . . . 6-14
gsec のコマンドの使い方 . . . . . . . . . 6-15
セキュリティデータベースの表示 . . . 6-15
セキュリティデータベースへのエントリの追
加 . . . . . . . . . . . . . . . . . . . 6-15
セキュリティデータベースの変更 . . . 6-17
セキュリティデータベースのユーザー項目の
削除 . . . . . . . . . . . . . . . . . . 6-17
Windows コマンドプロンプトからの gsec の
使用 . . . . . . . . . . . . . . . . . . . 6-17
gsec によるデータベースエイリアスの管理 . 6-17
gsec エラーメッセージ . . . . . . . . . . . . 6-18
ファイルの最大数 . . . . . . . . . . . . 7-6
アプリケーションからの操作 . . . . . . 7-6
ファイル割り当ての変更 . . . . . . . . 7-6
ネットワークファイルシステム . . . . . . 7-7
オンディスク構造体(ODS) . . . . . . . . . 7-7
読み取り / 書き込みデータベースと読み取り専用
データベース . . . . . . . . . . . . . . . . . 7-7
読み取り / 書き込みデータベース . . . . . 7-8
読み取り専用データベース . . . . . . . . . 7-8
読み取り専用データベースのプロパティ 7-8
データベースを読み取り専用にする . . 7-9
InterBase の旧バージョンでの読み取り専用
. . . . . . . . . . . . . . . . . . . . . 7-9
データベースの作成 . . . . . . . . . . . . . . 7-9
データベースオプション . . . . . . . . . 7-11
Page size . . . . . . . .
[Default character set]
SQL ダイアレクト . . . .
データベースの削除 . . . . . .
.
.
.
.
バックアップファイルのプロパティ .
データベースの環境設定と保守
GSTAT . . . . . . . . .
API の DPB パラメータ
外部ファイル . . . . . . .
一時ファイル . . . . . . .
ファイルの命名規則 . . . .
一次ファイル指定 . . .
二次ファイル指定 . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
マルチファイルデータベース .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
データベースファイルの追加 .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
データベースファイルのサイズ変更 .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7-11
7-11
7-11
7-12
7-12
7-13
7-14
7-14
7-14
7-15
7-15
7-16
7-16
7-17
7-18
7-18
7-19
7-19
7-19
7-20
7-20
7-22
7-22
7-22
7-22
7-23
7-23
7-23
7-24
7-24
データベースバックアップファイルの削除
シャドウイング . . . . . . . . . . . . . .
シャドウイングのための作業 . . . . . .
シャドウイングの利点 . . . . . . . . .
シャドウイングの制限 . . . . . . . . .
シャドウファイルの作成 . . . . . . . .
単一ファイルシャドウの作成 . . . .
マルチファイルシャドウの作成 . . .
自動モードと手動モード . . . . . .
条件付きシャドウ . . . . . . . . . .
シャドウの起動 . . . . . . . . . . . . .
シャドウの削除 . . . . . . . . . . . . .
シャドウファイルの追加 . . . . . . . .
データベースプロパティの設定 . . . . . .
[エイリアス]タブ . . . . . . . . .
[一般]タブ . . . . . . . . . . . . .
スイープ間隔と自動保守 . . . . . . . . . .
スイープの概要 . . . . . . . . . . . . .
ガベージコレクション . . . . . . . .
自動保守 . . . . . . . . . . . . . . .
スイープの設定 . . . . . . . . . . .
スイープ間隔の設定 . . . . . . . . . .
自動スイープの抑止 . . . . . . . . . .
データベースの即時スイープ処理 . . .
データベースキャッシュの設定 . . . . . .
データベースごとのデフォルトキャッシュサイ
ズ . . . . . . . . . . . . . . . . . . . . 7-25
isql 接続ごとのデフォルトのキャッシュサイズ
第7章
データベースファイル . . . . . . . . . . . .
データベースファイルのサイズ . . . . . .
動的なファイルサイズの変更 . . . . . . .
データベース ファイルの事前割り当て
isql -extract PREALLOCATE 句 . .
.
.
.
.
. 7-1
. 7-2
. 7-2
. 7-2
. 7-3
. 7-3
. 7-3
. 7-3
. 7-4
. 7-4
. 7-4
. 7-5
. 7-5
. 7-5
. 7-5
. . . . . . . . . . . . . . . . . . . . . . 7-25
iii
アプリケーションのキャッシュサイズの設定
GBAK でのデータベース領域の事前割り当て
. . . . . . . . . . . . . . . . . . . . . . 8-12
スイッチ -PR(EALLOCTE) の引数の使用
. . . . . . . . . . . . . . . . . . . . 8-12
gbak によるデータベースの復元 . . . . . 8-13
InterBase Service Manager での gbak の使用
. . . . . . . . . . . . . . . . . . . . . . 8-16
ユーザー名とパスワード . . . . . . . . . 8-17
バックアップと復元の例 . . . . . . . . . 8-17
データベースのバックアップの例 . . . 8-17
データベースの復元例 . . . . . . . . . 8-18
gbak のエラーメッセージ . . . . . . . . . . 8-19
IBConsole コマンドを使用したバックアップと復
元 . . . . . . . . . . . . . . . . . . . . . . 8-23
IBConsole を使用したフル バックアップの実
行 . . . . . . . . . . . . . . . . . . . . 8-23
IBConsole のバックアップ オプションについ
て . . . . . . . . . . . . . . . . . . . . 8-25
形式 . . . . . . . . . . . . . . . . . . 8-26
メタデータのみ . . . . . . . . . . . . 8-26
ガベージ コレクション . . . . . . . . 8-26
Limbo でのトランザクション . . . . 8-27
チェックサム . . . . . . . . . . . . . 8-27
テーブルへの変換 . . . . . . . . . . . 8-28
詳細出力 . . . . . . . . . . . . . . . . 8-28
. . . . . . . . . . . . . . . . . . . . . . 7-25
サーバーごとのデフォルトキャッシュサイズ
. . . . . . . . . . . . . . . . . . . . . . 7-26
キャッシュサイズの確認 . . . . . . . . . 7-26
強制書き込みとバッファ書き込み . . . . . . 7-26
検査と修復 . . . . . . . . . . . . . . . . . . 7-27
データベースの検証 . . . . . . . . . . . . 7-27
gfix を使用したデータベースの検証 . 7-27
IBConsole を使用したデータベースの検証
. . . . . . . . . . . . . . . . . . . . 7-28
破損したデータベースの修復 . . . . . . . 7-30
データベースのシャットダウンと再起動 . . 7-31
データベースのシャットダウン . . . . . . 7-31
シャットダウンのタイムアウトオプション
. . . . . . . . . . . . . . .
シャットダウンオプション .
データベースの再起動 . . . . .
limbo トランザクション . . . . . .
トランザクションのリカバリ . .
[トランザクション]タブ . .
[詳細情報]タブ . . . . . . .
管理ログの表示 . . . . . . . . . . .
gfix コマンドラインツール . . . .
gfix のエラーメッセージ . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7-32
7-32
7-34
7-34
7-34
7-35
7-36
7-36
7-37
7-40
別のオペレーティングシステムで動作するサー
バーへのデータベースの転送 . . . . . . 8-28
IBConsole を使用したインクリメンタル バッ
クアップの実行 . . . . . . . . . . . . . 8-29
IBConsole でのデータベースの復元 . . . . 8-30
復元オプション . . . . . . . . . . . . . . 8-32
ページ サイズ . . . . . . . . . . . . . 8-32
上書き . . . . . . . . . . . . . . . . . 8-33
各テーブル後にコミット . . . . . . . 8-33
シャドウ ファイルの作成 . . . . . . . 8-33
インデックスの非アクティブ化 . . . . 8-34
妥当性条件 . . . . . . . . . . . . . . . 8-34
全スペースの使用 . . . . . . . . . . . 8-34
詳細出力 . . . . . . . . . . . . . . . . 8-35
第8章
データベースのバックアップと復
元
InterBase バックアップと復元オプションについ
て . . . . . . . . . . . . . . . . . . . . . . . 8-1
InterBase バックアップと復元ツール . . 8-2
論理バックアップと物理バックアップの違い
. . . . . . . . . . . . . . . . . . . . . . . 8-2
データベースの所有権 . . . . . . . . . . . 8-3
ODS の復元 . . . . . . . . . . . . . . . 8-4
gbak コマンドを使用したバックアップと復元 8-4
gbak 使用のための一般的ガイドライン . . 8-4
マルチファイルと単一ファイルのバックアップ
の初期化 . . . . . . . . . . . . . . . . . . 8-5
インクリメンタル バックアップの作成 . . . 8-7
インクリメンタル バックアップのガイドラ
イン . . . . . . . . . . . . . . . . . . . 8-7
インクリメンタル バックアップの実行 . 8-8
インクリメンタル バックアップの上書き
第9章
ジャーナル機能と障害復旧
ジャーナル、ジャーナル ファイルとジャーナル
アーカイブについて . . . . . . . . . . . . . 9-1
ジャーナル機能のしくみ . . . . . . . . 9-2
ジャーナル アーカイブ機能のしくみ . . 9-2
ジャーナル機能とジャーナル アーカイブ機能を
使用するためのシステムの設定 . . . . . . 9-2
他の注意事項 . . . . . . . . . . . . . . 9-3
. . . . . . . . . . . . . . . . . . . . . 8-9
タイムスタンプの変更点 . . . . . . . . 8-10
インクリメンタル バックアップで使用され
るデータベース パラメータ ブロック 8-11
ページ付録ファイル . . . . . . . . . . . . 8-11
iv
ジャーナル機能の有効化とジャーナル ファイルの
作成 . . . . . . . . . . . . . . . . . . . . . . 9-3
事前割り当てジャーナル領域について . 9-5
ジャーナルの切り替え間隔を決定するための
ヒント . . . . . . . . . . . . . . . . . 9-5
チェックポイントの間隔を計算するためのヒ
ント . . . . . . . . . . . . . . . . . . . 9-6
ジャーナル情報の表示 . . . . . . . . . . 9-7
IBConsole を使用したジャーナル機能の起動
システムリレーション . . . . . . . .
IBConsole によるクライアント接続の監視
gstat コマンドラインツール . . . . . . . .
ロック状態の表示 . . . . . . . . . . . . .
api_database_info() による統計情報の取得
第 11 章
対話型クエリー
IBConsole isql ウィンドウ
SQL 入力領域 . . . . . .
SQL 出力領域 . . . . . .
ステータスバー . . . . .
isql メニュー . . . . . .
.
.
.
.
.
[ファイル]メニュー .
[編集]メニュー . . . .
[クエリー]メニュー .
.
.
.
.
.
.
.
.
[データベース]メニュー .
.
.
.
.
.
.
.
.
.
[トランザクション]メニュー
.
[ウィンドウ]メニュー . . . . .
isql ツールバー . . . . . . . . . . .
isql の一時ファイルの管理 . . . . . .
SQL 文の実行 . . . . . . . . . . . . .
対話形式での SQL の実行 . . . . .
SQL 文の準備 . . . . . . . . . . . .
有効な SQL 文 . . . . . . . . . .
SQL スクリプトファイルの実行 .
. . . . . . . . . . . . . . . . . . . . . . . 9-7
ジャーナル ファイルの無効化 . . . . . . . . 9-8
ジャーナル アーカイブ機能の使用 . . . . . . . 9-8
ジャーナル アーカイブ機能を有効化するコ
マンド . . . . . . . . . . . . . . . . . 9-8
ジャーナル ファイルのアーカイブを作成す
るコマンド . . . . . . . . . . . . . . . 9-9
後続のアーカイブ ダンプを実行するコマン
ド . . . . . . . . . . . . . . . . . . . . 9-9
ジャーナル ファイルのアーカイブを作成する頻
度は ? . . . . . . . . . . . . . . . . . . . 9-9
ジャーナル アーカイブの無効化 . . . . . 9-10
ジャーナル アーカイブでデータベースを復旧する
. . . . . . . . . . . . . . . . . . . . . . . . 9-10
アーカイブ サイズの管理 . . . . . . . . . . . 9-10
アーカイブ シーケンス番号とアーカイブの
スイープについて . . . . . . . . . . 9-11
アーカイブ状態の追跡 . . . . . . . . . 9-11
ジャーナル機能のヒントとベスト プラクティス
.
.
.
.
インデックスページ .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11-1
11-2
11-2
11-2
11-3
11-3
11-3
11-4
11-5
11-5
11-5
11-6
11-7
11-7
11-7
11-8
11-8
11-8
. . . . . . . . . . . . . . . . . . . . . . 11-11
.11-12
.11-12
.11-12
.11-12
.11-13
.11-15
.11-16
.11-16
.11-17
.11-18
.11-19
.11-20
.11-21
.11-21
.11-23
.11-23
.11-24
.11-24
.11-24
データベース統計情報および接続
の監視
All Options . . . .
Data Pages . . . .
データベースログ .
ヘッダーページ . .
.
.
.
.
.
.
.
.
.
結果のファイルへの保存 . . . . . . . .
SQL 入力の保存 . . . . . . . . . . .
SQL 出力の保存 . . . . . . . . . . .
isql 設定の変更 . . . . . . . . . . . . . .
[基本設定]タブ . . . . . . . . . . . .
[拡張設定]タブ . . . . . . . . . . . .
データベースオブジェクトのインスペクト
オブジェクトプロパティの表示 . . . .
メタデータの表示 . . . . . . . . . . . .
メタデータの抽出 . . . . . . . . . .
メタデータの抽出 . . . . . . . . . . . .
コマンドライン isql ツール . . . . . . . .
isql の起動 . . . . . . . . . . . . . . .
コマンドラインオプション . . . . .
警告の使用 . . . . . . . . . . . . . .
例 . . . . . . . . . . . . . . . . . .
isql の終了 . . . . . . . . . . . . . .
データベースへの接続 . . . . . . . .
isql クライアントのダイアレクトの設定
第 10 章
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
バッチ更新を使用した複数のステートメントの送
信 . . . . . . . . . . . . . . . . . . . . . . 11-9
isql でのバッチ更新関数の使用 . . . . . 11-11
トランザクションのコミットとロールバック
. . . . . . . . . . . . . . . . . . . . . . . . 9-12
最小設定の設計 . . . . . . . . . . . . 9-12
サンプル ジャーナル アーカイブの作成 9-13
一時システムテーブルを使用した監視 . .
一時システムテーブルへの問い合わせ
一時テーブルの更新 . . . . . . . .
一時テーブルのリスト . . . . . . .
セキュリティ . . . . . . . . . . . .
例 . . . . . . . . . . . . . . . . . .
一時システムテーブルの更新 . . . . .
グローバルな変更 . . . . . . . . .
IBConsole での状態の表示 . . . . . . .
データベース状態オプション . . . . .
.10-11
.10-11
.10-12
.10-16
.10-17
. 10-1
. 10-2
. 10-2
. 10-2
. 10-3
. 10-3
. 10-4
. 10-4
. 10-5
. 10-6
. 10-6
. 10-6
. 10-7
. 10-8
10-10
v
isql におけるトランザクションの動作 . 11-25
メタデータの抽出 . . . . . . . . . . . . 11-26
isql コマンド . . . . . . . . . . . . . . 11-27
SHOW コマンド . . . . . . . . . . . 11-27
SET(設定)コマンド . . . . . . . . 11-27
その他の isql コマンド . . . . . . . . 11-28
isql の終了 . . . . . . . . . . . . . . 11-28
エラー処理 . . . . . . . . . . . . . . . 11-28
isql コマンドリファレンス . . . . . . . . . 11-28
BLOBDUMP . . . . . . . . . . . . . . 11-29
EDIT . . . . . . . . . . . . . . . . . . 11-30
EXIT . . . . . . . . . . . . . . . . . . . 11-31
HELP . . . . . . . . . . . . . . . . . . 11-31
INPUT . . . . . . . . . . . . . . . . . 11-31
OUTPUT . . . . . . . . . . . . . . . . 11-32
QUIT . . . . . . . . . . . . . . . . . . 11-33
SET . . . . . . . . . . . . . . . . . . . 11-33
SET AUTODDL . . . . . . . . . . . . 11-35
SET BLOBDISPLAY . . . . . . . . . . 11-36
SET COUNT . . . . . . . . . . . . . . 11-38
SET ECHO . . . . . . . . . . . . . . . 11-38
SET LIST . . . . . . . . . . . . . . . . 11-39
SET NAMES . . . . . . . . . . . . . . 11-40
SET PLAN . . . . . . . . . . . . . . . 11-41
SET STATS . . . . . . . . . . . . . . . 11-42
SET TIME . . . . . . . . . . . . . . . 11-43
SHELL . . . . . . . . . . . . . . . . . 11-44
SHOW CHECK . . . . . . . . . . . . 11-44
SHOW DATABASE . . . . . . . . . . 11-45
SHOW DOMAINS . . . . . . . . . . 11-46
SHOW EXCEPTIONS . . . . . . . . . 11-46
SHOW FILTERS . . . . . . . . . . . . 11-47
SHOW FUNCTIONS . . . . . . . . . 11-48
SHOW GENERATORS . . . . . . . . 11-48
SHOW GRANT . . . . . . . . . . . . 11-49
SHOW INDEX . . . . . . . . . . . . . 11-50
SHOW PROCEDURES . . . . . . . . 11-50
SHOW ROLES . . . . . . . . . . . . . 11-52
SHOW SYSTEM . . . . . . . . . . . . 11-52
SHOW TABLES . . . . . . . . . . . . 11-53
SHOW TRIGGERS . . . . . . . . . . 11-53
SHOW VERSION . . . . . . . . . . . 11-54
SHOW VIEWS . . . . . . . . . . . . . 11-55
SQL スクリプトの使用 . . . . . . . . . . . 11-55
isql スクリプトの作成 . . . . . . . . . 11-55
SQL スクリプトの実行 . . . . . . . . . 11-56
IBConsole による SQL スクリプトの実行
. . . . . . . . . . . . . . . . . . . 11-56
コマンドライン isql ツールによる SQL スク
リプトの実行 . . . . . . . . . . . . 11-57
SQL スクリプトの作業のコミット . . . .11-57
isql スクリプトでのコメントの追加 . . .11-57
第 12 章
データベースとサーバーのパ
フォーマンス
はじめに . . . . . . . . . . . . . . . . . . . 12-1
ハードウェア構成 . . . . . . . . . . . . . . 12-2
プロセッサ速度の選択 . . . . . . . . . . 12-2
メモリのサイズ変更 . . . . . . . . . . . 12-2
パフォーマンスの高い I/O サブシステムの使
用 . . . . . . . . . . . . . . . . . . . . 12-3
I/O の分散 . . . . . . . . . . . . . . . . 12-4
RAID の使用 . . . . . . . . . . . . . 12-4
データベースファイルの複数ディスクの使用
. . . . . . . . . . . . . . . . . . . . 12-4
複数のディスクコントローラの使用 . 12-5
専用ドライブの作成 . . . . . . . . . . 12-5
広帯域ネットワークシステムの使用 . . . 12-5
高速なバスの使用 . . . . . . . . . . . . . 12-6
リンク集 . . . . . . . . . . . . . . . . . 12-7
オペレーティングシステムの環境設定 . . . 12-7
スクリーンセーバーの無効化 . . . . . . . 12-8
コンソールのログイン . . . . . . . . . . 12-8
一時ディレクトリのサイズ変更 . . . . . 12-9
専用サーバーの使用 . . . . . . . . . . . 12-9
ネットワークアプリケーション用の Windows
の最適化 . . . . . . . . . . . . . . . . . 12-9
Windows サーバーの注意点 . . . . . . .12-10
ネットワーク設定 . . . . . . . . . . . . . .12-10
ネットワークプロトコルの選択 . . . . .12-10
NetBEUI . . . . . . . . . .
TCP/IP . . . . . . . . . . .
ホスト名ルックアップの設定 . .
データベースプロパティ . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
データベースのページサイズの選択 .
データページフィルの割合の設定 . .
.
.
.
.
.
.
.12-11
.12-11
.12-11
.12-12
.12-12
.12-13
データベースキャッシュバッファのサイズ変更
. . . . . . . . . . . . . . . . . . . . . .12-13
.12-15
.12-15
.12-15
.12-16
.12-16
.12-16
.12-17
.12-17
.12-17
.12-17
.12-18
データベース書き込みのバッファ . . .
データベース設計の基本 . . . . . . . . . .
インデックスの定義 . . . . . . . . . .
インデックスとは . . . . . . . . . .
インデックスを使用するクエリー . .
インデックスを使用しないクエリー
双方向インデックス . . . . . . . . .
データベースの正規化 . . . . . . . . .
BLOB のセグメントサイズの選択 . . .
データベースのチューニングタスク . . . .
インデックスのチューニング . . . . . .
vi
インデックスの再構築 . . . . . . . .
インデックスの選択度の再計算 . . .
定期的なバックアップの実行 . . . . . .
バックアップのパフォーマンスの改善
復元のパフォーマンスの改善 . . . .
ガベージコレクションの促進 . . . . . .
アプリケーションの設計テクニック . . . .
トランザクション排他モードの使用 . .
相関サブクエリーの使用 . . . . . . . .
パラメータ付きクエリーの準備 . . . . .
クエリー最適化プランの設計 . . . . . .
インデックス更新の保留 . . . . . . . .
アプリケーション開発ツール . . . . . . .
InterBase Express™(IBX) . . . . . .
IB オブジェクト . . . . . . . . . . . . .
Borland Database Engine
BDE ドライバフラグ .
SQL パススルーモード
SQL クエリーモード . .
ビジュアルコンポーネント
FETCH ALL 処理 . . .
TQuery . . . . . . . .
TTable . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
EXTRACT() 関数 . . . . . . . . . . . .A-8
SQL 警告 . . . . . . . . . . . . . . . .A-8
サービス API、インストール API、ライセ
ンス API . . . . . . . . . . . . . . . .A-8
gbak の新しい機能 . . . . . . . . . . .A-8
InterBase Express™(IBX) . . . . . .A-8
ダイアレクト 3 のデータベースでのみ使用でき
る機能 . . . . . . . . . . . . . . . . . . .A-8
区切り付き識別子 . . . . . . . . . . . .A-8
INT64 データの格納 . . . . . . . . . .A-9
DATE データ型と TIME データ型 . . .A-9
InterBase の新しいキーワード . . . . . . .A-9
区切り付き識別子 . . . . . . . . . . . . . A-10
二重引用符の変更点 . . . . . . . . . . A-10
DATE、TIME、TIMESTAMP データ型 . . A-11
TIMESTAMP 列の DATE または TIME へ
の変換 . . . . . . . . . . . . . . . . A-12
日付 / 時刻データ型のキャスト . . . . A-13
日付 / 時刻データ型の加算と減算 . . A-14
日付 / 時刻データ型に集計関数を使用する
. . . . . . . . . . . . . . . . . . . . A-16
デフォルト句 . . . . . . . . . . . . . A-16
日付時刻情報の取り出し . . . . . . . A-16
12-18
12-18
12-18
12-18
12-18
12-19
12-19
12-19
12-20
12-20
12-21
12-22
12-22
12-22
12-22
12-23
12-23
12-23
12-24
12-24
12-24
12-25
12-25
DECIMAL データ型と NUMERIC データ型
付録 A
. . . . . . . . . . . . . . . . . . . . . . A-17
InterBase の移行
コンパイル済みオブジェクト . . . . . . . A-18
ジェネレータ . . . . . . . . . . . . . . . A-19
その他の問題 . . . . . . . . . . . . . . . A-19
サーバーとデータベースの移行 . . . . . . . A-20
サーバーのインプレース移行 . . . . . . . A-20
新しいサーバーへの移行 . . . . . . . . . A-21
InterBase 6 のダイアレクト 1 データベースに
ついて . . . . . . . . . . . . . . . . . . A-22
ダイアレクト 3 へのデータベースの移行 . . A-23
概要 . . . . . . . . . . . . . . . . . . . . A-23
方法 1:インプレース移行 . . . . . . . . A-24
列デフォルトと列制約 . . . . . . . . . A-26
名前なしテーブル制約 . . . . . . . . . A-27
NUMERIC と DECIMAL のデータ型につい
て . . . . . . . . . . . . . . . . . . . A-28
方法 2:新しいデータベースへの移行 . . A-29
古いデータベースの移行 . . . . . . . . . A-30
クライアントの移行 . . . . . . . . . . . . . A-31
他の DBMS 製品からの移行 . . . . . . . . . A-32
移行のプロセス . . . . . . . . . . . . . . . . A-1
サーバーとデータベースの移行 . . . . . . A-1
クライアントの移行 . . . . . . . . . . . . A-2
移行における問題 . . . . . . . . . . . . . . A-2
InterBase SQL ダイアレクト . . . . . . . A-2
クライアントおよびデータベース . . . . A-3
識別子として使用されたキーワード . . . A-3
SQL ダイアレクトを理解する . . . . . . A-4
ダイアレクト 1 のクライアントとデータ
ベース . . . . . . . . . . . . . . . . A-4
ダイアレクト 2 のクライアント . . . . A-4
ダイアレクト 3 のクライアントとデータ
ベース . . . . . . . . . . . . . . . . A-4
SQL ダイアレクトの設定 . . . . . . . . . . A-5
isql クライアントのダイアレクトの設定 . A-5
gpre ダイアレクトの設定 . . . . . . . . . A-6
データベースダイアレクトの設定 . . . . A-7
機能とダイアレクト . . . . . . . . . . . . . A-7
すべてのダイアレクトで使用できる機能 . A-7
IBConsole:InterBase のグラフィックイン
ターフェイス . . . . . . . . . . . . . A-7
読み取り専用データベース . . . . . . A-7
列定義の変更 . . . . . . . . . . . . . . A-7
ドメイン定義の変更 . . . . . . . . . . A-7
付録 B
InterBase の制限
InterBase の制限 . . . . . . . . . . . . . . . B-2
索引
vii
I-1
viii
表
1.1
3.1
3.2
3.3
3.4
4.1
4.2
4.3
4.4
5.1
5.2
5.3
InterBase の機能 . . . . . . . . . . . 1-3
IBConsole のサーバー アイコンのコンテキ
スト メニュー . . . . . . . . . . . . . 3-3
IBConsole の接続されたデータベース アイ
コンのコンテキスト メニュー . . . . . 3-4
IBConsole 標準ツールバー . . . . . . 3-5
サーバー / データベース ツリーのコマンド
. . . . . . . . . . . . . . . . . . . . . 3-6
DB_ROUTE テーブル . . . . . . . . . 4-6
DB_ROUTE テーブル . . . . . . . . . 4-7
. . . . . . . . . . . . . . . . . . . . . 4-10
ibconfig の内容 . . . . . . . . . . . . . 4-19
サポートされる接続プロトコル . . . . 5-2
クライアント サイドの OTW オプション
. . . . . . . . . . . . . . . . . . . . . 5-11
8.7
9.1
9.2
バックアップと復元に関する gbak のエラー
メッセージ . . . . . . . . . . . . . . . 8-19
CREATE JOURNAL のオプション . . 9-4
RDB$JOURNAL_ARCHIVES テーブル
. . . . . . . . . . . . . . . . . . . . . 9-11
InterBase の一時システムテーブル . . 10-2
データページ情報 . . . . . . . . . . . 10-7
ヘッダーページ情報 . . . . . . . . . . 10-8
インデックスページ情報 . . . . . . 10-10
gstat のオプション . . . . . . . . . 10-13
iblockpr/gds_lock_print のオプション
. . . . . . . . . . . . . . . . . . . . 10-16
10.7 データベースの I/O 統計情報項目 . 10-17
11.1 SQL 文を実行するためのツールバーボタン
. . . . . . . . . . . . . . . . . . . . . 11-6
11.2 [WISQL の設定]ダイアログの[基本設定]
タブ . . . . . . . . . . . . . . . . . 11-13
11.3 [WISQL の設定]ダイアログの[拡張設定]
タブ . . . . . . . . . . . . . . . . . 11-15
11.4 オブジェクトインスペクタのツールバーボタ
ン . . . . . . . . . . . . . . . . . . 11-17
11.5 メタデータ情報の項目 . . . . . . . . 11-18
11.6 メタデータ抽出の制約 . . . . . . . . 11-18
11.7 メタデータの抽出順序 . . . . . . . . 11-19
11.8 isql コマンドラインオプション . . . 11-22
11.9 isql のメタデータ抽出の引数 . . . . 11-26
11.10 SQLCODE とメッセージの概要 . . 11-28
11.11 isql のコマンド . . . . . . . . . . . 11-29
11.12 SET 文 . . . . . . . . . . . . . . . . 11-34
12.1 BDE ドライバのフラグ値 . . . . . . 12-23
A.1 isql のダイアレクトの優先順位 . . . . A-5
A.2 日付 / 時刻データ型からのキャストの結果
. . . . . . . . . . . . . . . . . . . . . A-13
A.3 日付 / 時刻データ型からのキャストの結果
. . . . . . . . . . . . . . . . . . . . . A-14
A.4 日付 / 時刻データ型の加算と減算 . . A-15
A.5 日付時刻情報の取り出し . . . . . . . A-16
A.6 文字列内部の引用符の処理 . . . . . . A-25
A.7 クライアントの移行:まとめ . . . . . A-31
B.1 InterBase の仕様 . . . . . . . . . . . B-2
10.1
10.2
10.3
10.4
10.5
10.6
クライアント サーバー検証のパラメータ
. . . . . . . . . . . . . . . . . . . . . 5-12
5.4 サーバー サイド設定パラメータ . . . . 5-14
5.5 [コミュニケーションの診断]による接続の
問題の診断 . . . . . . . . . . . . . . . 5-26
6.1 InterBase セキュリティデータベースの形式
. . . . . . . . . . . . . . . . . . . . . 6-4
6.2 gsec コマンドの概要 . . . . . . . . . . 6-15
6.3 gsec のオプション . . . . . . . . . . . 6-16
6.4 gsec のセキュリティエラーメッセージ 6-18
7.1 自動シャドウと手動シャドウ . . . . . 7-17
7.2 一般オプション . . . . . . . . . . . . 7-21
7.3 検証オプション . . . . . . . . . . . . 7-29
7.4 gfix のオプション . . . . . . . . . . . 7-38
7.5 gfix データベース保守のエラーメッセージ
. . . . . . . . . . . . . . . . . . . . . 7-40
8.1 gbak の引数 . . . . . . . . . . . . . . 8-5
8.2 gbak のバックアップオプション . . . 8-6
8.3 データベース パラメータ ブロック(DPB)
. . . . . . . . . . . . . . . . . . . . . 8-11
8.4 gbak を使用したデータベースの復元:オプ
ション . . . . . . . . . . . . . . . . . 8-14
8.5 gbak の復元オプション . . . . . . . . 8-14
8.6 gbak で Service Manager を呼び出す
host_service の構文 . . . . . . . . . . 8-16
ix
x
図
2.1 [ ライセンス マネージャ ] の選択 . . . . . 2-5
2.2 [CodeGear 製品ライセンス マネージャ ]
ウィンドウ . . . . . . . . . . . . . . . . 2-5
3.1 IBConsole ウィンドウ . . . . . . . . . . 3-2
3.2 IBConsole ツールバー . . . . . . . . . . 3-4
3.3 IBConsole ツリー ペイン . . . . . . . . 3-6
3.4 [ 現在のウィンドウ ] ダイアログ . . . . . 3-8
3.5 [ ツール ] ダイアログ . . . . . . . . . . . 3-9
3.6 [ ツールプロパティ ] ダイアログ . . . . . 3-9
3.7 [ パフォーマンス モニタ ] の [ データベース ]
タブ . . . . . . . . . . . . . . . . . . . 3-11
4.1 [Server Log]ダイアログ . . . . . . . 4-23
5.1 [Register Server and Connect]ダイアロ
グ . . . . . . . . . . . . . . . . . . . . . 5-3
5.2 [サーバーログイン]ダイアログ . . . . . 5-4
5.3 [データベースエイリアスの登録]ダイアロ
グ . . . . . . . . . . . . . . . . . . . . . 5-6
5.4 [コミュニケーションの診断]ダイアログ:
DB 接続 . . . . . . . . . . . . . . . . . 5-23
5.5 [コミュニケーションの診断]ダイアログ:
TCP/IP . . . . . . . . . . . . . . . . . 5-25
5.6 [コミュニケーションの診断]ダイアログ:
NetBEUI . . . . . . . . . . . . . . . . 5-26
6.1 [ データベースの作成 ] ダイアログ . . . . 6-5
6.2 [ユーザー情報]ダイアログ . . . . . . 6-11
7.1 [データベースの作成]ダイアログ . . . 7-10
7.2 [バックアップエイリアスのプロパティ]ダ
イアログ . . . . . . . . . . . . . . . . 7-13
7.3 [データベースのプロパティ]:[エイリアス]
タブ . . . . . . . . . . . . . . . . . . . 7-20
7.4 [データベースのプロパティ]:[一般]タブ
. . . . . . . . . . . . . . . . . . . . . . 7-21
7.5 [データベースの検証]ダイアログ . . . 7-28
7.6 [検査レポート]ダイアログ . . . . . . 7-30
7.7 [データベースのシャットダウン]ダイアロ
グ . . . . . . . . . . . . . . . . . . . . 7-31
7.8 トランザクションリカバリ:limbo トランザ
クション . . . . . . . . . . . . . . . . 7-35
7.9 トランザクションリカバリ:詳細 . . . 7-36
7.10[管理ログ]ダイアログ . . . . . . . . 7-37
8.1 [ データベースのバックアップ ] ダイアログ
. . . . . . . . . . . . . . . . . . . . . 8-24
8.2 データベースバックアップオプション . 8-26
8.3 [データベースのバックアップ]の処理経過
出力 . . . . . . . . . . . . . . . . . . . 8-28
8.4 インクリメンタル バックアップの指定 8-29
8.5 [データベースの復元]ダイアログ . . 8-30
8.6 データベース復元オプション . . . . . 8-32
8.7 [データベースの復元]の処理経過の出力
. . . . . . . . . . . . . . . . . . . . . 8-35
9.1 [ ジャーナルの作成 ] ダイアログ . . . . . 9-7
10.1[データベース統計情報]オプション . 10-5
10.2[Database Statistics]ダイアログ . . 10-6
10.3[データベース接続]ダイアログ . . . .10-12
11.1 IBConsole の対話型 SQL エディタ . . 11-2
11.2 バッチ更新を使わない INSERT . . . .11-10
11.3 バッチ更新を使用した INSERT . . . .11-10
11.4[WISQL の設定]ダイアログの[基本設定]
タブ . . . . . . . . . . . . . . . . . . .11-13
11.5[WISQL の設定]ダイアログの[拡張設定]
タブ . . . . . . . . . . . . . . . . . . .11-15
11.6 オブジェクトインスペクタ . . . . . . .11-16
12.1 ディスク I/O インターフェイスの外部転送
レートの比較 . . . . . . . . . . . . . . 12-3
12.2 ネットワークインスタンスの帯域幅の比較
. . . . . . . . . . . . . . . . . . . . . 12-6
12.3 バステクノロジのスループットの比較 . 12-7
xi
xii
第
章
はじめに
第1章
『InterBase 操作ガイド』では、InterBase Server Edition、または Desktop Edition のインス
トール、設定、保守の手順について、タスク別に説明しています。
この章では、このガイドの対象読者と、InterBase 製品および利用できるツールの概要につ
いて説明します。
対象読者
『InterBase 操作ガイド』は、InterBase データベースサーバーの操作や保守に責任のある
データベース管理者およびシステム管理者を対象としています。また、InterBase テクノロ
ジについてさらに理解したいと考えているアプリケーション開発者にも役立ちます。この
ガイドは、次の知識があることを前提としています。
• Windows、Linux、および UNIX 用のサーバーオペレーティングシステム
• ネットワークおよびネットワークプロトコル
• アプリケーションプログラミング
このガイドの内容
• InterBase 機能の概要
• IBConsole の使用
• サーバーの環境設定、起動と終了
• ネットワークの構成およびトラブルシューティングのガイドライン
• InterBase サーバー、データベース、およびデータのセキュリティ構成:セキュリティ構成
ツールのリファレンス
第 1 章 はじめに
1-1
必要なシステムとサーバー構成
• データベース構成および保守のオプション:保守ツールのリファレンス
• ライセンス管理: ライセンス登録ツール、有効なソフトウェアライセンス、InterBase ライ
センスファイルの内容
• データベースのバックアップと復元:バックアップツールのリファレンス
• データベース統計情報の追跡および接続の監視
• 対話型クエリーのプロファイル:対話型クエリーツールのリファレンス
• パフォーマンスのトラブルシューティングおよびチューニングのガイドライン
• 移行および InterBase の特性の数的制限に関する 2 つの付録
必要なシステムとサーバー構成
InterBase は、Microsoft Windows サーバープラットフォーム、Linux、およびいくつかの
UNIX オペレーティングシステムを含む各種プラットフォームで動作します。
InterBase のサーバーソフトウェアはサーバーノードのシステムリソースを効率的に使用し
ます。サーバープロセスは、メモリを約 1.9MB 使用します。また、サーバーへのクライアン
ト接続ごとに、メモリを約 115KB 使用します。メモリ使用量は、クライアントアプリケー
ションの内容およびデータベース設計に基づいて多少前後します。数字は比較のための基
準値です。
最小のソフトウェアだけをインストールする場合は、プラットフォームによって 9 ~ 12MB
のディスク容量が必要です。操作中には、InterBase のソート機能の作業領域として追加の
ディスク領域が必要になります。使用するスペースは、ボリュームおよびサーバーがソート
に要求したデータの種類によって異なります。
InterBase クライアントは次に示す各種オペレーティングシステム上で動作します。また、
InterBase はデータベース接続に対して JDBC 準拠の InterClient Java クライアントインター
フェイスを提供します。そのため、InterBase がサポートしていないプラットフォーム間で
も、クライアントプラットフォームが Java をサポートしていれば、Java で記述されたクラ
イアントアプリケーションを実行できます。たとえば、組み込み Java 機能を搭載した
Macintosh やインターネットを含みます。
このマニュアルセットでは、
「Windows サーバー
プラットフォーム」および「Windows 非サーバープラットフォーム」という用語が使用さ
れています。Windows サーバープラットフォームは、WindowsNT、2000、XP Professional、
および 2003 Server を指します。Windows 非サーバープラットフォームは、Windows 98SE、
ME、および XP Home を指します。
用語: Windows サーバープラットフォーム
InterBase の主な機能
InterBase は、フル装備された RDBMS の利点のすべてを備えています。次の表は InterBase
の主要な機能を一覧にしたものです。
1-2 操 作 ガ イ ド
InterBase の主な機能
表 1.1
InterBase の機能
機能
説明
ネットワークプロトコルのサ
ポート
• InterBase のすべてのプラットフォームは TCP/IP をサポートします。
• Windows 用の InterBase サーバーとクライアントは NetBEUI/ 名前付
きパイプをサポートします。
SQL-92 エントリレベルに準拠
ANSI 標準 SQL。
対話型 SQL ツールおよび CodeGear デスクトップアプリ
ケーションから利用できます。
複数のデータベースへの同時
アクセス
1 つのアプリケーションから同時に複数のデータベースをアクセスでき
マルチジェネレーション
アーキテクチャ
トランザクションに対するデータの一貫性のために、サーバーはレコー
ドの古いバージョンを保持しています。
行レベルのオプティミス
ティックロック
サーバーは、データベースのページ全体ではなく、クライアントが更新
した個々のレコードだけをロックします。
クエリーの最適化
サーバーは自動的にクエリーを最適化します。ユーザーがクエリープラ
ンを手動で指定することもできます。
BLOB データ型と BLOB フィル
動的にサイズ変更可能なデータ型で、グラフィックやテキストなどの書
式化されていないデータを保持できます。
タ
ます。
参照整合性の宣言
テーブル間(FOREIGN と PRIMARY KEY)のリレーションを自動的に保
守します。
ストアドプロシージャ
高度なクエリー、およびデータ操作のためのデータベース中のプログラ
ム要素。
トリガー
特定のテーブルのデータが挿入、更新、または削除されたときに起動さ
れる独立型プログラムモジュール。
イベントアラータ
データベースからアプリケーションへ渡されるメッセージ。アプリケー
ションはこれによってデータベース変更を非同期で知ることができま
す。
更新可能なビュー
データ変更に伴って、その変更がビューに反映されます。
ユーザー定義関数(UDF)
サーバーで実行するプログラムモジュール。
外部結合
2 つのテーブル間を関連付けて、複雑な操作を可能にします。
明示的なトランザクション
管理
指定したトランザクションを含めて、トランザクションの起動、コミッ
ト、およびロールバック。
複数アプリケーションによる
データへの同時アクセス
あるクライアントがアクセス中のテーブルに他のクライアントも同時
にアクセスできます。
多次元配列
要素に添字が付いた配列データ型。
自動 2 相コミット
マルチデータベーストランザクションは、コミットする前にすべての
。
データベースに対する変更をチェックします(InterBase サーバーのみ)
InterBase API
アプリケーションが InterBase エンジンに直接 SQL/DSQL 文を作成し、
結果を受け取ることを可能にする API 関数。
第 1 章 はじめに
1-3
InterBase の主な機能
表 1.1
InterBase の機能 ( 続き )
機能
説明
gpre
埋め込み SQL/DSQL 文と変数をホスト言語コンパイラが読み取れる
フォーマットに変換するためのプリプロセッサ。InterBase サーバーライ
センスに付属しています。
IBConsole
データ定義、クエリー、データベースのバックアップと復元、保守、お
よびセキュリティの管理を行う Windows ツール。
isql
InterBase の対話型 SQL のコマンドラインバージョン。IBConsole のかわ
りに対話型クエリーで使用できます。
コマンドライン DBA
ユーティリティ
InterBase のデータベース管理ツールのコマンドラインバージョン。
IBConsole のかわりに使用できます。
ヘッダーファイル
InterBase のデータ型および関数呼び出しを定義する、アプリケーション
プログラムの先頭でインクルードされるファイル。
メイクファイルの例
InterBase アプリケーションをコンパイルおよびリンクするためにメイ
クファイルの呼び出し方を示すファイル。
サンプルプログラム
コンパイルとリンクのための C プログラム。サーバー上の標準 InterBase
のサンプルデータベースに問い合わせるために使用できます。
メッセージファイル
InterBase.msg。ユーザーへのメッセージを含んでいます。
SQL サポート
InterBase は、エントリレベル SQL-92 規格に準拠し、カスケード操作、更新可能ビュー、お
よび外部結合を使って参照整合性宣言をサポートしています。InterBase サーバーは、埋め
込み SQL および DSQL クライアントアプリケーションをサポートするライブラリを提供し
ています。すべての InterBase プラットフォーム上で、クライアントアプリケーションに関
数ライブラリの InterBase API を記述して、サーバーに対してデータベース操作の要求を送
ることができます。
また、InterBase は拡張 SQL 機能をサポートしており、それらのいくつかは SQL 標準の
SQL99 拡張を使用します。これらにはストアドプロシージャ、トリガー、SQL ロール、およ
びセグメント化 BLOB サポートが含まれます。
SQL の詳細は、
『言語リファレンス』を参照してください。
複数のユーザーによるデータベースアクセス
InterBase は、複数のクライアントアプリケーションから同時に 1 つのデータベースにアク
セスすることを可能にしています。また、1 つのクライアントアプリケーションから複数の
データベースにアクセスすることもできます。挿入や削除のような特定のデータベースイ
ベントが発生したときに、SQL トリガーはクライアントアプリケーションに知らせること
ができます。
1-4 操 作 ガ イ ド
InterBase の主な機能
ユーザーは、ユーザー定義関数(UDF)を作成して InterBase データベースに保存すること
ができます。これらの関数は、データベースにアクセスするすべてのクライアントアプリ
ケーションからアクセスすることができます。
トランザクション管理
クライアントアプリケーションでは複数のトランザクションを同時に起動することができ
ます。InterBase には、トランザクションを起動、コミット、およびロールバックするため
の完全で明示的なトランザクション制御が用意されています。トランザクションの起動を
制御する文と関数は、トランザクションの動作も制御できます。
InterBase のトランザクションは、同時に実行している他のトランザクションによる変更か
ら分離することができます。トランザクションが有効である間、そのトランザクション自体
で行う変更以外は、データベースは変更されていないように見えます。他のトランザクショ
ンによって削除されたレコードは存在し、新しく保存されたレコードは存在しないように
見え、更新されたレコードは元の状態のままになっています。
トランザクション管理の詳細は、『埋め込み SQL ガイド』を参照してください。
マルチジェネレーションアーキテクチャ
InterBase は、クエリーと更新の混在使用環境におけるデータの同時性と一貫性のサポート
によって、時間が重要な意味を持つトランザクションを適切に処理します。InterBase はマ
ルチジェネレーションアーキテクチャを使用して、各データレコードの複数バージョンを
作成して保存します。レコードの新しいバージョンを作成することによって、他のユーザー
がそのレコードを変更している場合でも、InterBase はすべてのクライアントが任意の時間
に任意のレコードの新しいバージョンを読み出すことを可能にしています。また InterBase
は、トランザクションを使ってデータベースのグループを他が行う変更から影響されない
ようにします。
行レベルのオプティミスティックロック
オプティミスティックロックはトランザクションの先頭ではなく、クライアントが実際に
データを更新する場合にのみ適用されます。InterBase はオプティミスティックロックを使
用して、クライアントのためにより高度なデータベース操作の処理能力を提供しています。
InterBase は真の行レベルのロックを実現しており、クライアントが変更するデータベース
のレコードだけに変更を許可します。この行レベルロックはページレベルロックとは異な
ります。ページレベルロックは、データベースの中で物理的に近くに保存されている任意
のデータの変更を制限します。行レベルロックによって、複数のクライアントが競合せずに
同じテーブルにあるデータを更新できます。これにより、性能が高く、待機時間の少ない
データベース操作が可能になります。
InterBase には、テーブルレベルのペシミスティックロックのためのオプションもあります。
詳細は、『埋め込み SQL ガイド』を参照してください。
第 1 章 はじめに
1-5
InterBase の主な機能
データベース管理
InterBase では、データベースおよびサーバーを管理するために、GUI とコマンドラインの
両方のツールを提供しています。IBConsole を使用して、Local InterBase または InterBase
サーバー上にあるデータベースに対してデータベース管理を実行することができます。ま
た、サーバー上ではコマンドラインのデータベース管理ユーティリティを使用することが
できます。
IBConsole とコマンドラインツールによって、以下のデータベース管理を行うことができま
す。
• サーバーセキュリティの管理
• データベースのバックアップと復元
• データベースの保守
• データベースとロックマネージャの状態表示
サーバーセキュリティについては、この章の後半で詳しく説明しています。また、以降の
章で IBConsole とコマンドラインツールを使って実行できる各作業について説明していま
す。
サーバーセキュリティの管理
InterBase は、セキュリティデータベースにユーザー名とパスワードのリストを保持してい
ます。クライアントが入力したユーザー名とパスワードがサーバー上の InterBase セキュリ
ティデータベース(デフォルトでは admin.ib)にある有効なユーザー名とパスワードに一致
すれば、クライアントはサーバー上の InterBase データベースに接続できます。
データベース管理者は、ユーザー名の追加および削除、パスワードやユーザー ID などの
ユーザーパラメータを変更できます。
サーバーセキュリティの管理の詳細は、第 6 章「データベース ユーザー管理」を参照して
ください。
データベースのバックアップと復元
IBConsole またはコマンドラインの gbak を使用して、データベースをバックアップまたは
復元できます。バックアップはデータベースへの排他的なアクセスを必要としないので、そ
のデータベースにアクセスする他の処理と並列して実行可能です。
また、データベースのバックアップと復元は次の目的にも使用できます。
• 不要なデータベースレコードを削除する
• データベースのページサイズを変更する
• データベースを単一ファイルから複数ファイルに変更する
• データベースをあるオペレーティングシステムから他のオペレーティングシステムに移行
する
• データベースのメタデータだけをバックアップし、空のデータベースを再作成する
データベースのバックアップおよび復元の詳細は、第 8 章「データベースのバックアップ
と復元」を参照してください。
1-6 操 作 ガ イ ド
InterBase SuperServer アーキテクチャ
データベースの保守
IBConsole またはコマンドラインユーティリティを使用して、シャットダウン可能な状態の
データベースを準備したり、データベースの保守を行うことができます。データベースにオ
ペレーティングシステムの書き込みエラーなどの小さな問題が発生した場合、データベー
スをオフラインにしないで、これらのツールを使ってデータベースのスイープを行うこと
ができます。
データベースの保守作業の一部を以下に示します。
• データベースのスイープ
• データベースへの排他的アクセスを行うためのデータベースのシャットダウン
• テーブルの断片化の検査
• バックアップ用のデータベースの準備
• 2 相コミットでの limbo トランザクションの解消
• データベース構造の検査および修復
データベースの保守の詳細は、第 7 章「データベースの環境設定と保守」を参照してくだ
さい。
状態の表示
データベースヘッダーページの状態を確認したり、テーブルやインデックスを分析して、
データベースの状態を監視することができます。詳細は、第 10 章「データベース統計情報
および接続の監視」を参照してください。
InterBase SuperServer アーキテクチャ
InterBase は SuperServer ア ーキテクチャを使用しています。このアーキテクチャは、
InterBase サーバープロセスのマルチクライアント、マルチスレッド実装を行います。
SuperServer は、前のバージョンの InterBase で使用していた Classic 実装を置き換えていま
す。SuperServer は、クライアントごとに別のサーバープロセスを使用するかわりにスレッ
ドを使用して、同時に複数のクライアントを提供するようになりました。複数のスレッド
は、単一のサーバープロセスに共通してアクセスします。
コマンドラインツールの概要
IBConsole で実行可能なタスクには、コマンドラインツールが対応しており、コマンドウィ
ンドウまたはコンソールから対応するタスクを実行することができます。
InterBase の UNIX 版には、すべてのコマンドラインツールがサポートされています。ほと
んどのコマンドを Windows 上で使用し、UNIX サーバーにある InterBase データベースに接
続し、そのデータベースを操作することができます。
第 1 章 はじめに
1-7
コマンドラインツールの概要
非対話型のコマンドラインツールが有利な点は、共通のデータベース操作を実行するため
に、バッチファイルまたはスクリプトでそれらのツールを実行できるからです。使用してい
るオペレーティングシステムのスケジュール機能(UNIX の cron、または Windows の AT)
を使用して、スクリプトを自動的に実行することができます。グラフィックツールを自動的
に実行するのはたいへん困難です。
isql
isql はシェル型の対話型プログラムで、ユーザーはこれを使って迅速かつ容易に SQL 文を
入力してデータベース操作を行うことができます。InterBase の動的 SQL 機構を使ってサー
バーに SQL 文を発行、準備、実行し、出力を伴う文でデータを取り出します(たとえば、
SELECT または EXECUTE PROCEDURE から)。isql はトランザクションの管理、メタデー
タの表示、および SQL 文を含んだスクリプトを生成して実行することができます。
isql と、IBConsole からの isql の使い方については、第 11 章「対話型クエリー」を参照し
てください。
gbak
gbak ツールを使用すると、ローカルまたはリモートのデータベース上でデータベースバッ
クアップと復元を実行することができます。gbak では、複数のファイルをバックアップお
よび復元できるようになり、古い gsplit コマンドを使用する必要はなくなりました。データ
ベースをバックアップできるユーザーは、SYSDBA またはデータベースの所有者だけです。
サーバー上に定義されているユーザーはデータベースを復元することができますが、既存
のデータベースに上書きで復元できるユーザーは、SYSDBA またはデータベースの所有者
だけです。
メモ
Windows プラットフォームで IBConsole からデータベースのバックアップと復元を行う際
は、IBConsole のインターフェースを通じて同じ gbak ツールを使用します。
gbak の使い方の詳細は、第 8 章「データベースのバックアップと復元」を参照してくださ
い。
gfix
gfix を使ってデータベースのいくつかのプロパティを設定することができます。
• データベース使用またはシャットダウン状態
• クライアントのためのデフォルトキャッシュの割り当て
• スイープ間隔および手動スイープ
• 同期または非同期書き込み
• ある種のデータベースの不具合を検出
• 未解決の分散トランザクションのリカバリ
1-8 操 作 ガ イ ド
コマンドラインツールの概要
IBConsole のグラフィックインターフェイスを使用して、gfix のすべての機能を実行するこ
とができます。データベースに対して gfix を実行できるのは、SYSDBA またはデータベー
スの所有者だけです。
これらのプロパティと gfix ツールの詳細は、第 7 章「データベースの環境設定と保守」を
参照してください。
gsec
gsec を使用して、InterBase サーバーおよびデータベースにアクセスするために承認ユー
ザーを構成することができます。IBConsole でも、セキュリティデータベースに対して同じ
操作を行うことができます。
詳細は、第 6 章「データベース ユーザー管理」を参照してください。
gstat
gstat を使用して、トランザクションインベントリ(管理情報)
、データベース内のデータ分
布、およびインデックス効率に関連したデータベースの状態を表示することができます。同
じ情報は IBConsole でも見ることができます。データベースのステータス情報を見ること
ができるのは、SYSDBA またはデータベースの所有者だけです。
データベースの検索や分析の詳細は、第 10 章「データベース統計情報および接続の監視」
を参照してください。
iblockpr (gds_lock_print)
InterBase サーバーのロックマネージャから状態を表示して、ロック要求のスループットを
監視したり、デッドロックの原因を特定することができます。まれに InterBase ロックマ
ネージャに問題がある場合があります。このユーティリティは、UNIX プラットフォームで
は gds_lockprint、Windows プラットフォームでは iblockpr と呼ばれます。
ロック状態の検索および解析の詳細は、第 10 章「データベース統計情報および接続の監
視」を参照してください。
ibmgr
UNIX サーバーでは、ibmgr ユーティリティを使って InterBase サーバープロセスの起動と
終了を行います。このユーティリティの使い方については、4-10 ページの「ibmgr での
サーバーの起動と停止」を参照してください。
第 1 章 はじめに
1-9
1-10 操 作 ガ イ ド
第
章
ライセンス管理
第2章
この章では、ライセンス条項と InterBase 製品で利用できるアドオンの概要について説明し
ます。この章のライセンス情報が、購入時に受けとったライセンス契約の詳細情報に優先さ
れることはありません。この章では、一般的なライセンス用語とオプションの概要を説明し
ます。
InterBase 製品を有効化し、使用するには、インストール時に、または後から製品を登録す
る必要があります。InterBase 製品のインストール方法の詳細については、購入時に受け
取った IBsetup.html ファイルを参照してください。
さらに、この章では、InterBase License Manager を使用する方法の基本手順(購入し
た製品の既存のライセンス情報を表示する、実行していない場合に製品を登録する、追加
のアドオン ライセンスを表示する)について説明します。
InterBase 2009 のライセンス オプション
このセクションでは、ライセンス条項と InterBase の各製品で利用できるアドオン オプショ
ンの概要について説明します。この章では、" アドオン " は、すでに購入した InterBase 製品
に " 追加 " するために購入できる InterBase 機能(オプション)を指します。アドオンそれぞ
れには専用のライセンス契約が付属しています。InterBase アドオンを購入するには、
CodeGear の Web サイトにアクセスしてください。
利用可能な InterBase アドオンとライセンスを表示するには、製品とともにインストールさ
れる InterBase License Manager を使用できます。詳細については、2-4 ページの「[ ライセ
ンス マネージャ ] の使用」を参照してください。
メモ
InterBase ソフトウェアを作成したソフトウェア アプリケーションにバンドルして、または
ハードウェアにインストールして、サード パーティに配布するには、Embarcadero
Technologies と OEM(Original Equipment Manager)ライセンス契約を締結する必要があ
ります。
第 2 章 ライセンス管理
2-1
InterBase 2009 のライセンス オプション
Server Edition
InterBase Server Edition ソフトウェアには、強力な完全対称マルチプロセスをサポートす
る、堅牢なデータベースとサーバー監視機能が用意されています。
InterBase Server Edition のライセンスではユーザーは次の事項を実行できます。
• Server Edition ソフトウェアを 1 台のコンピュータにインストールする。
• サーバー ソフトウェアが動作しているコンピュータに最大 4 つの接続を確立する。
• 各サーバー ライセンスの条項は、サーバー ソフトウェアのライセンスが付与されている 1
台のコンピュータに限定されます。たとえば、それぞれに 20 ユーザー接続を許可された 2
つのサーバー ライセンスを購入した場合、1 台のコンピュータで、ライセンス ユーザー数
を 40 に拡張できません。
メモ
バックアップを目的にして、2 台目のコンピュータに Server Edition ソフトウェアを同じシ
リアル番号でインストールし登録できます。ただし 1 台目のコンピュータと同時には使用
できません。
Server Edition で利用可能なアドオン
次のアドオンが Server Edition で利用可能です。
• InterBase 高度暗号化ライセンス
InterBase 高度暗号化ライセンスにより、高度な暗号化(AES)が Desktop、Server およ
び ToGo の各エディションで有効になります。高度暗号化ライセンスは、高度な暗号化
を利用するインストールごとに必要となります。高度暗号化ライセンスが登録されてい
ない場合、InterBase は、デフォルトで標準のデータ暗号化(DES)を使用します。
InterBase の暗号化の使用についての詳細は、
『InterBase データ定義ガイド』を参照し
てください。
• InterBase 同時接続ユーザー ライセンス
Server Edition ソフトウェアに任意のユーザーが接続するには、対象サーバーに同時に
接続するユーザーと同数の「同時接続ユーザー ライセンス」を購入する必要がありま
す。たとえば、サーバーに接続するソフトウェアのコピーを 10 台のコンピュータにイ
ンストールするには、最初に 10 の同時接続ユーザー ライセンスを購入する必要があり
ます。それぞれの同時接続ユーザー ライセンスでは、単一のユーザーがサーバー ソフ
トウェアに最大 4 つの接続を確立できます。
• InterBase 無制限ユーザー ライセンス
このライセンスでは、ソフトウェアにアクセスできるユーザー数に制限がありません。
アクセスに制限のないインターネット アプリケーションでエンド ユーザーが Server
Edition ソフトウェアに接続できるようにするには、無制限ユーザー ライセンスを購入
する必要があります。
• InterBase 追加 CPU ライセンス
1 サーバーライセンスには最大 8 個の CPU ライセンスが含まれます。追加 CPU ライセ
ンスは、システム上、最大 32 まで コア /CPU を利用できます。
2-2 操 作 ガ イ ド
InterBase 2009 のライセンス オプション
Developer Edition
Developer Edition ライセンスでは、Server Edition を開発目的だけに使用できます。サーバー
と同じ、単一のコンピュータで実行されたクライアント アプリケーションのみを使用でき
ます。このライセンスでは実稼動環境で使用する権利が許可されません。
Developer Server Edition で利用可能なアドオンはありません。
Desktop Edition
InterBase Desktop Edition はスタンドアロン環境で、単一のエンド ユーザーが実行するため
に設計された InterBase データベース サーバーです。Desktop Edition をデスクトップ、ラッ
プトップ またはモバイル コンピュータに展開できます(配布の場合は、それぞれのコン
ピューターごとにライセンスが必要となります)。
InterBase Desktop Edition のライセンスではユーザーは次の事項を実行できます。
• 内部のデータ処理のためにのみ、Desktop Edition を 1 台のコンピュータにインストールす
る。
• ソフトウェアが動作している同じコンピュータにログインして、InterBase Desktop Edition
ソフトウェアに最大 4 つの接続を確立する。
Desktop Edition で利用可能なアドオン
次のアドオンが Desktop Edition で利用可能です。
• InterBase 高度暗号化ライセンス
InterBase 高度暗号化ライセンスにより、高度な暗号化(AES)が Desktop、Server およ
び ToGo の各エディションで有効になります。高度暗号化ライセンスは、高度な暗号化
を利用するインストールごとに必要となります。高度暗号化ライセンスが登録されてい
ない場合、InterBase は、デフォルトで標準のデータ暗号化(DES)を使用します。
InterBase の暗号化の使用についての詳細は、
『InterBase データ定義ガイド』を参照し
てください。
ToGo Edition
InterBase ToGo Edition は、Desktop Edition の小規模、ポータブル版で、スタンドアロン環
境で実行するために設計されています。ToGo Edition は、Windows のみで利用可能で、
Desktop Edition で利用できる IBConsole など、すべてのオプションが含まれる訳ではあり
ません。
InterBase ToGo ライセンスでは、購入ユーザーに次の事項の許可を与えます。
• InterBase ToGo エンジン(DLL)が組み込まれたアプリケーションの配置。
• 単一のエンド ユーザーがスタンドアロン コンピュータで使用する ToGo Edition ソフト
ウェアの配布(1 台のコンピュータに対し、1 つの ToGo Edition のライセンスが必要です)
。
ToGo Edition ではリモートからの接続が許可されません。
第 2 章 ライセンス管理
2-3
[ ライセンス マネージャ ] の使用
ToGo で利用可能なアドオン
次のアドオンが ToGo Edition で利用可能です。
• InterBase 高度暗号化ライセンス
InterBase 高度暗号化ライセンスにより、高度な暗号化(AES)が Desktop、Server およ
び ToGo の各エディションで有効になります。高度暗号化ライセンスは、高度な暗号化
を利用するインストールごとに必要となります。高度暗号化ライセンスが登録されてい
ない場合、InterBase は、デフォルトで標準のデータ暗号化(DES)を使用します。
InterBase の暗号化の使用についての詳細は、
『InterBase データ定義ガイド』を参照し
てください。
[ ライセンス マネージャ ] の使用
個別の [ ライセンス マネージャ ] ツールは Desktop、ToGo および Server の各エディション
でインスールされます。このツールでは、購入した製品の既存ライセンス情報の表示、実
行していない場合の製品の登録、追加アドオン ライセンスの表示を行います。
Linux や Solaris 環境で、GUI インストーラがサポートされていない場合は、コマンドライ
ン ツールで追加のオプションやライセンスを登録できます。登録方法の詳細については、
IBsetup.html ファイルを参照してください。
重要
InterBase の 2007 より前のバージョンでは、IBConsole から古いバージョンの License
Manager にアクセスできます。IBConsole 版の License Manager には最新のライセンス情報
やオプション(アドオンを含む)が含まれないので、個別の InterBase License Manager
ツールのみを使用して新しいライセンスを購入することをお勧めします。
[ ライセンス マネージャ ] へのアクセス
個別の InterBase License Manager ツールにアクセスするには、次のとおりに実行します。
1
2-4 操 作 ガ イ ド
[ スタート ] メニューから、[ プログラム| CodeGear InterBase 2009 |ライセンス マ
ネージャ ] を選択します(図 2.1 を参照)。
[ ライセンス マネージャ ] の使用
図 2.1
[ ライセンス マネージャ ] の選択
[CodeGear 製品ライセンス マネージャ ] ウィンドウが 図 2.2 のように表示されます。
図 2.2
[CodeGear 製品ライセンス マネージャ ] ウィンドウ
2
使用している InterBase 製品で利用できるアドオンを表示し、選択するには、[Serial
No.] メニューをクリックし、[ 追加 ] を選択します。
3
[Serial Number の追加 ] ダイアログが表示されます。シリアル番号を入力し、[OK] をク
リックします。[CodeGear 製品ライセンス マネージャ ] にライセンス情報が表示され、
登録をまだ実行していない場合は、購入した製品を登録できます。
第 2 章 ライセンス管理
2-5
[ ライセンス マネージャ ] の使用
2-6 操 作 ガ イ ド
第
第3章
章
IBConsole:InterBase
インターフェイス
InterBase には、IBConsole という直感的なグラフィカル ユーザー インターフェイスがあり
ます。このインターフェイスを使用すれば、InterBase のサーバーの設定と保守、サーバー
上のデータベースの作成と管理、対話型 SQL(isql)の実行に必要なすべての操作を行うこ
とができます。IBConsole を使用すると、以下の操作を行うことができます。
• サーバー セキュリティの管理
• データベースのバックアップと復元
• データベース パフォーマンスの監視
• サーバーの状態表示
• データベース管理の実行
• データベースの整合性の検査
• データベースのスイープ
• "limbo" トランザクションの回復
IBConsole は Windows 上で動作しますが、ローカル ネットワーク上のすべてのサーバーに
あるデータベースを管理できます。
第 3 章 IBConsole:InterBase インターフェイス
3-1
IBConsole の起動
IBConsole の起動
IBConsole を起動するには、[ スタート|すべてのプログラム| InterBase] メニューから
[IBConsole] を選択します。IBConsole ウィンドウが開きます。
図 3.1
IBConsole ウィンドウ
メニュー バー
ツール バー
ステータス バー
ツリー ペイン
ワーク ペイン
IBConsole ダイアログの構成要素:
• メニュー バー:データベース管理タスクを実行するためのコマンドです。
• ツール バー:メニュー コマンドのショートカット ボタンです。
• ツリー ペイン:登録済みサーバーとデータベースの階層を表示します。
• ワーク ペイン:ツリー ペインで現在選択されている項目に従った、特定の情報を表示また
はアクティビティを実行します。
• ステータス バー:現在のサーバー、ユーザー ログイン、および選択データベースを表示
します。
IBConsole のメニュー
IBConsole のメニューから、IBConsole の基本タスクを実行します。メニューには 7 つのド
ロップダウン メニューがあります。
• [ コンソール ] メニュー:IBConsole を終了します。
• [ 表示 ] メニュー:IBConsole のシステム、一時テーブル、依存関係の表示と非表示の切り
替え、およびワーク ペインに表示されている項目の表示方式を変更します。
3-2 操 作 ガ イ ド
IBConsole の起動
• [ サーバー ] メニュー:サーバーのログインとログアウト、サーバー接続問題の診断、ユー
ザー セキュリティの管理、サーバー ログ ファイルの表示、サーバー プロパティの表示を
行います。詳細については、5-2 ページの「サーバーとデータベースへの接続」を参照し
てください。
• [ データベース ] メニュー:データベースの接続と切断、データベースの作成と削除、デー
タベースのメタデータの表示、データベースのパフォーマンスとアクティビティの監視、
データベースに接続しているユーザー リストの表示、データベース プロパティの表示と設
定、データベース保守、検査、トランザクション リカバリを行います。詳細については、
5-2 ページの「サーバーとデータベースへの接続」を参照してください。
• [ ツール ] メニュー:カスタム ツールを [ ツール ] メニューに追加して、対話型 SQL ウィ
ンドウを起動します。対話型 SQL ウィンドウには、専用のメニュー セットがあります。
メニュー セットの詳細については、第 11 章「対話型クエリー」を参照してください。こ
のメニューには、[ ライセンス マネージャ ] があり、サーバーの登録に使用で
きます。
メモ
IBConsole から古いデータベースに初めてライセンスを追加する場合、[ ライセン
スの追加 ...] ポップアップ メニューが表示されます。これによって、古いスタイル
のライセンスが追加されます。ただし、InterBase 2007 以降では、ライセンス情報
は表示されません。つまり、サーバー バージョンを識別し、表示の有無を判断し
ます。
• [ ウィンドウ ] メニュー:アクティブな IBConsole ウィンドウのリストを表示し、管理でき
ます。詳細については、3-8 ページの「IBConsole ウィンドウの切り替え」を参照してく
ださい。
• [ ヘルプ ] メニュー:IBConsole のオンライン ヘルプと InterBase のオンライン ヘルプの両
方にアクセスできます。
コンテキスト メニュー
IBConsole では、コンテキスト メニュー(状況で変わるポップアップ メニュー)でタスク
を実行できます。表 3.1 と 3.2 は、コンテキスト メニューの例です。
サーバー アイコンを右クリックすると、選択しているサーバーに対して実行可能な操作が
リストされたコンテキスト メニューが表示されます。
表 3.1
IBConsole のサーバー ア イ コ ンの コ ン テキス ト メ ニ ュ ー
ポップアップ メニュー
説明
[ ログイン ...]
選択しているサーバーにログインします。
[ ログアウト ]
現在のサーバーからログアウトします。
[ ライセンスの追加 ...]
古いデータベースに接続されているサーバーに Certificate ID と
Certificate Key を追加します (新しいデータベースの [ ライセンス マ
。
ネージャ ] を使用)
[ ユーザー セキュリティ ...]
現在のサーバーに対してユーザーを承認します。
[ ライセンス マネージャ ]
ライセンス情報を追加、編集、検証します。[ ツール ] メニューから
[ ライセンス マネージャ ] を起動することもできます。
第 3 章 IBConsole:InterBase インターフェイス
3-3
IBConsole の起動
表 3.1
IBConsole のサーバー ア イ コ ンの コ ン テキス ト メ ニ ュ ー (続き)
ポップアップ メニュー
説明
[ サーバーログファイルの参照 ]
現在のサーバーのサーバー ログを表示します。
[ 接続設定の診断 ]
データベースとネットワーク プロトコルの通信診断を表示します。
[ データベース・エイリアス ]
データベースのエイリアスを追加または削除します。
[ プロパティ ]
現在のサーバーのサーバー情報を表示および更新します。
接続されたデータベース アイコンを右クリックすると、そのデータベースについて実行可
能なアクションを一覧したコンテキスト メニューが表示されます。
表 3.2
IBConsole の接続 さ れたデー タ ベース ア イ コ ンの コ ン テキス ト メ ニ ュ ー
ポップアップ メニュー
説明
[ 切断 ]
現在のデータベースの接続を解除します。
[ 保守 ]
データベース統計情報の表示、シャットダウン、データベースの再起
動、スイープ、トランザクション回復を含む保守作業を実行します。
[ バックアップ / 復元 ]
データベースをデバイスやファイルにバックアップする、またはバッ
クアップ ファイルから復元します。
[ コピー・データベース ]
データベースを別のデータベースやサーバーにコピーします。
[ パフォーマンス モニタ ]
データベース アクティビティ(クエリー、トランザクション、トリ
ガー アクション、表、メモリのステータスなど)を表示します。詳細
については、3-10 ページの「データベース パフォーマンスの監視」を
参照してください。
[ メタデータの表示 ]
選択データベースのメタデータを表示します。
[ 接続ユーザー情報 ...]
データベースに接続しているユーザーのリストを表示します。
[ プロパティ ]
データベース情報を表示、データベース スイープ間隔の調整、SQL ダ
イアレクトとアクセス モードの設定、強制書き込みの有効化を行い
ます。
[ データベースの暗号解除 ]
SYSDO でこのオプションを使用してデータベース パスワードを暗号
化できます。
IBConsole ツール バー
ツール バーはボタンが 1 列に並んだもので、メニュー コマンドのショートカット機能を
持っています。次の表では、各ツール バー ボタンの詳細について説明します。
図 3.2
3-4 操 作 ガ イ ド
IBConsole ツールバー
IBConsole の起動
表 3.3
ボタン
IBConsole 標準ツールバー
説明
新しい InterBase サーバーを登録する:[ サーバーの登録と接続 ] ダイアログを表示し
て、ローカル サーバーやリモート サーバーを登録、ローカル サーバーやリモート サー
バーにログインできます。詳細については、5-2 ページの「サーバーの登録」を参照し
てください。
InterBase サーバーの登録を取り消す:ローカル サーバーまたはリモート サーバーの
接続を解除できます。自動的にサーバー上のデータベースを接続解除してサーバーか
らログアウトします。詳細については、5-5 ページの「サーバーの登録解除」を参照し
てください。
データベースに接続します:現在のサーバー接続のユーザー名とパスワードを使用し
て、強調表示されているデータベースに接続します。詳細については、5-7 ページの
「データベースへの接続」を参照してください。
現在のデータベースから切断:現在のサーバー上にあるデータベースを接続解除でき
ます。詳細については、5-8 ページの「データベースの接続解除」を参照してください。
対話型 SQL:対話型 SQL ウィンドウを表示します。対話型 SQL ウィンドウの詳細につ
いては、第 11 章「対話型クエリー」を参照してください。
ツリー ペイン
ウィンドウを開いてツリー ペインに表示するには、ローカル サーバーまたはリモート サー
バーを登録してログインしてから、サーバーのデータベースを登録して接続しなければな
りません。サーバーとデータベースの登録方法および接続方法については、5-2 ページの
「サーバーとデータベースへの接続」を参照してください。
第 3 章 IBConsole:InterBase インターフェイス
3-5
IBConsole の起動
図 3.3
IBConsole ツリー ペイン
現在の
サーバー
現在のデータ
ベースを展開し
て、テーブル、
ビュー、プロ
シージャ、関数、
およびその他の
データベース機
能の階層を表示
します。
現在の
データベース
サーバー / データベースの階層を移動するには、詳細情報や属性があるノードやブランチ
を展開、または折りたたみます。複数の操作方法があり、概略を表 3.4 に示します。
サーバー / データベース ツリーをツリー ペインで展開または折りたたむには:
表 3.4
サーバー / データベース ツリーのコマンド
タスク
コマンド
サーバーのデータベースの表示
• サーバー アイコンの左にある+(プラス)をクリックしま
す
• サーバー アイコンをダブルクリックします
• +(プラス)キーを押します。
• 右方向キー(→)を押します。
サーバーのデータベースの非表示
• サーバー アイコンの左にある-(マイナス)をクリックし
ます。
• サーバー アイコンをダブルクリックします。
• -(マイナス)キーを押します。
• 左方向キー(←)を押します。
3-6 操 作 ガ イ ド
IBConsole の起動
展開されたツリーで、データベース名をクリックするとその名前が強調表示されます。強
調表示されたデータベースは、IBConsole の操作対象データベースとなり、現在のデータ
ベースと呼ばれます。現在のデータベースが存在するサーバーが現在のサーバーとなりま
す。
図 3.3 のツリー ペインで表示されている階層は、完全に展開されたツリーの例です。
• [InterBase Servers] を展開すると、登録サーバーのリストが表示されます。
• 接続サーバーを展開すると、データベース名、バックアップ、ユーザー、サーバー ログな
どのサーバー属性のリストが表示されます。
• [Databases] をクリックすると、現在のサーバー上にある登録データベースのリストが表示
されます。
• [Server Log] をクリックすると、ワーク ペインに [ ログの表示 ] アクションが表示されます。
• 接続データベースを展開すると、ドメイン名、テーブル、ビュー、ストアド プロシージャ、
外部関数、ジェネレータ、例外、BLOB フィルタ、SQL ロールなどのデータベース属性のリ
ストが表示されます。
• [Backup] を展開すると、バックアップ エイリアスのリストが表示されます。
ワーク ペイン
ツリー ペインで選択された項目に従って、ワーク ペインに表示される情報および実行可能
なタスクは異なります。
現在のサーバーのバックアップ エイリアスのリストを表示するには、[Backup] アイコンを
クリックします。
サーバーに定義されているユーザーのリストを表示するには、[Users] アイコンをクリック
します。
データベースの属性についての情報を表示するには、データベース属性アイコンをクリッ
クします。
データベース オブジェクトについての情報をビューアに表示するには、オブジェクトの
ワーク ペイン アイコン(テーブル名など)をクリックします。
詳細については、11-17 ページの「メタデータの表示」を参照してください。
標準テキスト表示ウィンドウ
標準テキスト表示ウィンドウは、データベースのバックアップや復元を監視し、データベー
スの状態を表示してサーバーと管理ログを表示するために使用されます。
標準テキスト表示ウィンドウには、メニュー バー、使用頻度の高いメニュー コマンドのた
めのアイコン付きツール バー、およびスクロール テキスト領域があります。8-28 ページ
の 図 8.3 「[データベースのバックアップ]の処理経過出力」は、標準テキスト表示ウィ
ンドウの例です。
第 3 章 IBConsole:InterBase インターフェイス
3-7
IBConsole の起動
標準テキスト表示ウィンドウの構成要素
• メニュー バー: [ ファイル ] メニューでは、ウィンドウの内容の保存およびウィンドウの
終了を行うことができます。[ 編集 ] メニューでは、ウィンドウ内の選択テキストのクリッ
プボードへのコピー、ウィンドウ内の全テキスト選択、テキストの切り取りや貼り付け、
表示テキスト内での指定した語の検索を行うことができます。
• ツールバー:[ 保存 ] ツール バー ボタンと [ コピー ] ツール バー ボタンを使用すると、テ
キスト表示ウィンドウの選択テキストをクリップボードにコピーして、内容を保存できま
す。
• ステータス バー:テキスト表示ウィンドウ内でのカーソル位置を行と列で示します。
IBConsole ウィンドウの切り替え
IBConsole ウィンドウを切り替える、または特定のウィンドウを閉じるには、[ 現在のウィ
ンドウ ] ダイアログを使用します。[ 現在のウィンドウ ] ダイアログを表示するには、[ ウィ
ンドウ ] メニューをクリックします。ダイアログが表示されます。
図 3.4
[ 現在のウィンドウ ] ダイアログ
• 別の IBConsole ウィンドウに切り替えるには、対象ウィンドウを選択して [ 切り替え ...] ボ
タンをクリックします。
• ウィンドウを閉じるには、対象ウィンドウを選択して [ ウィンドウを閉じる ] ボタンをク
リックします。
IBConsole でのカスタム ツールの管理
ツール ダイアログでは、IBConsole インターフェイスに対するカスタム ツールの追加、編
集、削除を行うことができます。ツール ダイアログを表示するには、IBConsole メニューで
[ ツール|ツールの設定 ...] を選択します。[ ツール ] ダイアログが表示されます。
3-8 操 作 ガ イ ド
IBConsole の起動
図 3.5
[ ツール ] ダイアログ
• ツールを削除するには、対象ツールを選択して [ 削除 ] をクリックします。
• ツールを変更するには、対象ツールを選択して [ 編集 ] をクリックします。[ ツールプロパ
ティ ] ダイアログの関連項目も変更します。
• ツールを追加するには、[ 追加 ] をクリックします。[ ツールプロパティ ] ダイアログが表示
されます。
図 3.6
[ ツールプロパティ ] ダイアログ
カスタム ツールを追加するには:
• ユーティリティの名前を [ タイトル ] フィールドに入力します。この名前で、[ ツール ] メ
ニュー上に表示されます。メニュー項目にアクセラレータ キーを指定するには、キーに指
定するアルファベットの前に & 記号を付けます。アクセラレータ キーの重複は自動的に解
決されます。アクセラレータ キーを指定しない場合は、自動的にキーが選択されます。
• 起動する実行可能形式ファイルとパスを [ プログラム ] フィールドに入力します。
• ユーティリティの作業ディレクトリを [ 作業ディレクトリ ] フィールドに入力します。作業
ディレクトリを指定しない場合、現在のディレクトリが作業ディレクトリになります。
第 3 章 IBConsole:InterBase インターフェイス
3-9
• ユーティリティを実行する際に必要なその他のパラメータを [ パラメータ ] フィールドに入
力します。
データベース パフォーマンスの監視
IBConsole のパフォーマンス モニタでデータベースの次のステータスやアクティビティを
表示できます。
• データベース スレッド、プロシージャ、トランザクションおよびメモリの使用状況の概要
• グラフによるメモリの使用状況、プールやヒープ
• データベースにあるすべてのテーブルとビューの一覧
• すべて(最近)のトランザクションのリスト
• すべて(最近)のプロシージャとトリガーのリスト
• InterBase ログ ファイルと統計情報リスト
パフォーマンス モニタの表示
パフォーマンス モニタを表示するには:
1
左ペインで、データベース名を右クリックして、コンテキスト メニューから [ パ
フォーマンス モニタ ] を選択します。[ パフォーマンス モニタ ] が表示されます。
2
[ パフォーマンス モニタ ] には各種タブ([ 接続ユーザー ]、[ データベース ]、[ メモリ
]、[ プロシージャ ]、[ ステートメント ]、[ テーブルおよびビュー ]、[ トランザクショ
ン ]、および [ トリガー ])があります。タブをクリックすると、そのタブの表示される
情報を確認できます。
図 3.7 に [ データベース ] タブを示します。オプション([ 書き込みキャッシュのフラッ
シュ ]、[ メモリの再要求 ] など)がタブ名の上に表示されることに注意してください。
オプションをクリックすると、データベースに対して該当の処理を実行できます。それ
ぞれのタブには異なるオプションが表示されます。
3-10 操 作 ガ イ ド
IBConsole の起動
図 3.7
[ パフォーマンス モニタ ] の [ データベース ] タブ
第 3 章 IBConsole:InterBase インターフェイス
3-11
IBConsole の起動
3-12 操 作 ガ イ ド
第
章
サーバーの環境設定
第4章
この章では、InterBase サーバープロセスの操作と設定について、以下の事項を説明します。
•
•
•
•
•
•
•
•
サーバーの環境設定
InterBase Manager での InterBase の起動と停止
UNIX での InterBase Server の起動と停止
Linux 上での初期化スクリプトの例
環境変数の使い方
一時ファイルの管理
ibconfig の設定パラメータ
サーバーのログファイルの表示
サーバーの環境設定
InterBase Manager を使用して、クライアントマップサイズのデータベースキャッシュサイ
ズを変更できます。InterBase Guardian サーバープロパティダイアログで、これらのサー
バー設定を表示して設定できます。InterBase Guardian にアクセスするには、システムトレ
イの[InterBase Guardian]アイコンを右クリックします。InterBase プロパティを選択して、
[サーバー環境設定]ダイアログを表示します。
• ツリーペインで接続データベースまたはデータベース階層で任意のブランチを選択して、
[サーバー|サーバープロパティ]を選択します。
• ツリーペインでサーバーを選択して、ワークペインの[サーバープロパティ]をクリック
します。
• ツリーペインでサーバーを右クリックして、コンテキストメニューから[サーバープロパ
ティ]を選択します。
サーバーのプロパティダイアログには、
[エイリアス]と[一般]という 2 つのタブがあり
ます。
第 4 章 サーバーの環境設定
4-1
サーバーの環境設定
[一般]タブ
[サーバーのプロパティ]ダイアログボックスの[一般]タブには、バージョン、機能、デー
タベース数、接続数などのサーバー設定が表示されます。このタブで情報を編集することは
できません。
次のサーバーのプロパティが表示されます。
• バージョン:InterBase Server のバージョン番号を表示します。
• 機能:InterBase Server でサポートされている機能を表示します。
• 接続中のデータベース:接続中の各データベースのパスとファイル名を表示します。
• データベースの数:InterBase Server に接続されているデータベースの総数を表示します。
• 接続の数:InterBase Server への接続の総数を表示します。
[一般]タブに表示される情報を更新することはできませんが、[更新]をクリックすると
現在のサーバー設定情報をいつでも検索できます。サーバー設定の表示または変更を行う
場合は、[IB 設定]タブをクリックします。
4-2 操 作 ガ イ ド
マルチインスタンス
[エイリアス]タブ
[エイリアス]タブで、サーバーのホスト名とネットワークプロトコルを調べることができ
ます。また、エイリアス名とその説明を調べたり、変更することができます。
• エイリアス名:ツリーペインに表示されるサーバーの名前です。この設定は編集できます。
• ホスト名:ホストサーバーの名前です。これは、サーバー接続を作成する際に決定されるた
め、このダイアログでは変更できません。
• ネットワークプロトコル: サーバーが通信に使用するプロトコルです。これは、サーバー接
続を作成する際に決定されるため、このダイアログでは変更できません。
• 説明:サーバーに関する追加情報です。このフィールドの入力は任意で、編集できます。
マルチインスタンス
InterBase 2007(バージョン 8.0 と同等)では、InterBase サーバーの複数のインスタンスを
同時に実行できるようになりました。7.1 以前のバージョンでは、InterBase サーバーの複数
のインスタンスを同じマシンで実行することはできませんでした。これら以前のバージョ
ンは、あるアプリケーションが 1 つのバージョンの InterBase を使用している場合、別の
バージョンの InterBase を使用するアプリケーションを実行することはできませんでした。
InberBase 7.5 以降のバージョンでは、新しいバージョンを稼動中に InterBase 6.x などの旧
バージョン(メジャー リリース)の InterBase を 1 つ同時に実行することができます。
第 4 章 サーバーの環境設定
4-3
マルチインスタンス
Windows サーバーの設定
Windows マシンで、次のスイッチを使用して、サーバーをアプリケーションとして起動し
ます。
ibserver -a -p service_name -i InterBase_env_variable
service_name は services ファイルに含まれるエントリです。このエントリは、InterBase サー
バーの接続先のポート番号を指定します。次の例は、<system directory>¥drivers¥etc¥services
ファイルの一部です。
gds_db 3050/tcp #default InterBase port number
ib_var_a 3051/tcp #VAR A's InterBase port number
ローカル接続には、InterBase 環境変数または -i スイッチを使用します。これらの値により、
同じマシン上のクライアントが接続する InterBase サーバーが決定します。接続を正しく確
立するには、クライアントの InterBase 環境変数とサーバーの -i スイッチを一致させる必要
があります。次の設定で InterBase サーバーを起動するとします。
ibserver -a -p ib_var_a -i C:¥Program Files¥InterBase8.0
サービス ib_var_a がポート 3051 に設定されているため、InterBase サーバーは、TCP/IP ポー
ト番号 3051 でリモート接続を受け入れます。ローカル接続は、InterBase の環境変数が
C:¥Program Files¥InterBase8.0 に設定されている同じマシン上のクライアントから受け入れ
られます。
デフォルト設定を使用して、旧バージョン(7.1 以前)の InterBase サーバーを実行できま
す。7.1 以前の InterBase サーバーは、TCP/IP ポート番号 3050 でリモート接続を受け入れま
す。ローカル接続は、クライアントが 7.1 以前の InterBase クライアントライブラリを使用
している場合に受け入れられます。
サーバーのローカル InterBase 変数を設定する場合は、-i スイッチを使用することをお勧め
します。InterBase サーバーは、コマンドライン引数「i」、InterBase 環境変数の設定、InterBase
レジストリキーの設定、サーバーの現在のディレクトリの順に、InterBase 環境変数を探し
ます。
リモートデータベースへのアクセス
クライアント側の設定
マシン上の特定の InterBase サーバーに接続するには、接続先のサーバーを特定する必要が
あります。
リモートサーバー
ディレクトリ database_dir にあるデータベース database_name.ib にアクセスするとします。
リモー
トマシン remote_host は、クライアントマシン上の service_name で指定されたポート番号で接続
を受け入れます。isql、クライアント API、または InterBase ドライバで指定されるデータベース名
は、
remote_host/service_name:/database_dir/database_name.ib の形式になります。
4-4 操 作 ガ イ ド
マルチインスタンス
リモートクライアントアプリケーションが、remote_host という名前のマシンで実行されて
いる Windows サーバーにアクセスするとします。また、この remote_host では、上記のよ
うに設定された 2 つのサーバーが実行されています。クライアントマシンには、サーバーと
同じサービス名が設定されている必要があります。このため、services ファイルには次のエ
ントリが必要です。
gds_db 3050/tcp #default InterBase port number
ib_var_a 3051/tcp #VAR A's InterBase port number
ポート番号 3051 で実行されている InterBase 8.0 サーバーにアクセスするには、
(isql または API で)
デー
タベース接続文字列 remote_host/ib_var_a:c:¥database_dir¥ib80test.ib を使用します。
旧バージョンのクライアントでは、旧バージョンのサーバーが監視しているポート番号に接続
されているサービス名を指定します。たとえば、remote_host/gds_db:c:¥database_dir¥ib71test.ib
です。
ローカルデータベースへのアクセス
メモ
Windows プラットフォームのみの機能です。
ローカルの InterBase サーバーにあるデータベースにアクセスする場合は、InterBase 環境変
数の有無によって接続先のサーバーが特定されます。InterBase の環境変数設定があるサー
バーが実行されていない場合は、実行中の 7.1 以前の InterBase サーバーに接続されます。
旧バージョンのサーバーにアクセスする場合は、アプリケーションで旧バージョンの
gds32.dll が使用されていることを確認してください。7.5 の InterBase クライアントライブ
ラリを使って旧バージョンのサーバーにアクセスするには、InterBase の環境変数を空の文
字列 "" に設定します。
また、アプリケーションは、接続先の InterBase サーバーに関する情報を InterBase データ
ベースパラメータブロック(isc_dpb パラメータ)の一部として渡すことができます。使用
する InterBase サーバーを指定するには、isc_dpb_client_InterBase_var の後に文字列の長さ
と InterBase サ ー バ ー の 場 所を設定します。 次のコードは、InterBase の環境変数が
「c:/InterBase」に設定されて実行されている InterBase サーバーに接続するために、クライ
アント側で dpb パラメータを設定する方法を示しています。
#include <ibase.h>
…
char dpb_buffer[256], dpb;
short dpb_length;
char *ib_server = "c:/InterBase";
char *str = "employee.ib";
isc_db_handle db1;
ISC_STATUS status_vector[20];
/* 接続先の IB サーバーを指定する dpb を構築します */
dpb = dpb_buffer;
*dpb++ = isc_dbp_version;
*dpb++ = isc_dpb_client_InterBase_var;
*dpb++ = strlen(ib_server);
strcpy (dpb, ib_server);
/* 他の dpb パラメータを設定します */
第 4 章 サーバーの環境設定
4-5
マルチインスタンス
…
/* dpb_length を設定します */
dpb_length = dpb - dpb_buffer;
/* 最後に isc_attach を呼び出すか、dpb パラメータで作成します */
isc_attach_database(status_vector, strlen(str), str, &db1, dpb_length,
dpb_buffer);
データベースの自動再ルーティング
InterBase サーバーの複数のインスタンスを 1 台のマシンで同時に実行している場合は、こ
の機能を使用して、一部のデータベース接続を別の InterBase サーバーに再ルーティングす
るように設定できます。このとき、InterBase の別のインスタンスをアプリケーションまた
はサービスとして手動で起動する必要があります。
サーバー側の設定
1 台のマシンで複数の InterBase サーバーを同時に実行するには、前述の手順にしたがって設
定します。このようにマシンを設定して起動したら、次の手順にしたがって、ADMIN.IB の
DB_ROUTE データベーステーブルを設定して使用します。
DB_ROUTE テーブルの構造は次のとおりです。
表 4.1
DB_ROUTE テーブル
列名
データ型
長さ
説明
DB_NAME
VARCHAR
1024
サーバー上のデータベースのパスを付け
て、再ルーティング先のデータベースの名
前を入力します。
例:c:/database_dir/employee.ib
SERVICE_NAME
VARCHAR
30
services ファイルで、再ルーティング先の
ポート番号をルックアップするためのサー
ビス名です。ルックアップはサーバー側で
実行されます。クライアントはポート番号
だけを知ればよく、サービス名は不要です。
例:ib_var_a
ACTIVATE_ROUTE
BOOLEAN
この再ルーティングを有効にする場合は
true に、無効にする場合は false に設定しま
す。
DB_ROUTE テーブルに入力されるサービス名が services ファイルに存在する必要がありま
す。
gds_db 3050/tcp #default InterBase port number
ib_var_a 3051/tcp #VAR A’s InterBase port number
4-6 操 作 ガ イ ド
マルチインスタンス
クライアント側の設定
クライアント側の設定は必要ありません。 ディレクトリ database_dir にあるデータベース
database_name.ib にアクセスするとします。リモートマシン remote_host は、デフォルトのポート番号
で接続を受け入れます。クライアント API または InterBase ドライバで指定されるデータベース名は、
remote_host:/database_dir/database_name.ib の形式になります。
データベース c:/smistry/employee.ib への着信接続をサービス ib_var_a によって指定され
たポート番号で実行されている旧バージョンのサーバーに再ルーティングするようにデー
タベースサーバー AGNI を設定するとします。サーバー AGNI の ADMIN.IB データベース
には、DB_ROUTE テーブルに次の情報を含む行が必要です。
表 4.2
DB_ROUTE テーブル
DB_ROUTE の列名
値
DB_NAME
c:/database_dir/employee.ib
SERVICE_NAME
ib_var_a
ACTIVATE_ROUTE
TRUE
DB_ROUTE は、ADMIN.IB データベース内の標準の InterBase テーブルなので、標準の SQL
を使用して、データベース接続の再ルーティングを指定、変更、および削除できます。
起動パラメータ
同じマシンで InterBase の複数のインスタンスを実行するために、InterBase Guardian と
InterBase Server では、サービス名にラベル名を付加するようになりました。
• InterBase 8.0 %Service Name% Guardian(例:InterBase 8.0 server1 Guardian)
• InterBase 8.0 (%Service Name%) Server(例:InterBase 8.0 server1 Server)
InterBase Server と InterBase Guardian には、次の 2 つのコマンドライン引数が追加されまし
た。
-i %InterBase_INSTALL_DIR% -p %SERVICE NAME%
アプリケーションの起動に関連するコマンドライン引数は、起動パラメータと呼ばれます。
Microsoft の自動実行レジストリキーエントリに書き込む場合は、
¥Software¥Microsoft¥Windows¥CurrentVersion¥Run レジストリキー設定にも同じ内容を書
き込む必要があります。
現在のレジストリキーは InterBaseGuardian です。
これを InterBaseGuardian%SERVICE NAME% に変更します。
このレジストリキーの現在の値は
%InterBase_INSTALL_DIR%/bin/ibguard -a です。
これを %InterBase_INSTALL_DIR%/bin/ibguard -a -i
%InterBase_INSTALL_DIR% -p %SERVICE NAME% に変更します。
第 4 章 サーバーの環境設定
4-7
SMP サポート
SMP サポート
InterBase は、クライアントとサーバーの両方で SMP(対称型マルチプロセッサ)をサポー
トしています。古いバージョンの InterBase は、InterBase コンポーネント内で一度に 1 つの
プロセッサだけを実行することで、SMP システムで安全に実行されていました。このバー
ジョンの InterBase では、スループットとパフォーマンスを向上させるために、SMP ハード
ウェアを活用して、InterBase のスレッドをすべてのプロセッサで同時に実行できるような
りました。
重要
1 つのサーバーライセンスを購入すると、1 つのプロセッサを使用する権利を得ることがで
きます。使用するプロセッサの数に応じて、ライセンスを購入する必要があります。
Windows プラットフォームでは、ibconfig 設定ファイル内の CPU_AFFINITY 設定で、InterBase
が使用するマルチプロセッサシステムのプロセッサを指定します。CPU_AFFINITY がコメン
トアウトされている場合は、デフォルト設定が有効になり、購入したライセンスと同じ数の
プロセッサが使用されます。使用するプロセッサのサブセットを指定する方法については、
次の「プロセッサ制御の拡張:CPU_AFFINITY」を参照してください。
プロセッサ制御の拡張:CPU_AFFINITY
Windows のマルチプロセッサプラットフォームでは、
ibconfig ファイルに CPU_AFFINITY パ
ラメータを追加することで、InterBase が使用するプロセッサを指定できます。この設定は、
ライセンスによって使用が許可されたプロセッサ数が実際のプロセッサ数より少ない場合
に便利です。
重要
1 つのサーバーライセンスを購入すると、1 つのプロセッサを使用する権利を得ることがで
きます。使用するプロセッサの数に応じて、ライセンスを購入する必要があります。
CPU_AFFINITY パラメータはビットベクターを表します。その各ビットが、スレッドで実
行できるシステム上のプロセッサに対応します。プロセッサの最大数はオペレーティング
システムによって異なります。使用するプロセッサを指定するには、目的のマシンに対応す
るビットを設定して得られたバイナリ値を 10 進値に直して CPU_AFFINITY に指定します。
たとえば、プロセッサ 2 と 3 を使用するには、CPU_AFFINITY を 6 に設定します。
CPU_AFFINITY6
使用するプロセッサ
CPU_AFFINITY の値
配列
1
1
001
2
2
010
1と2
3
011
3
4
100
2と3
6
110
1、2、3
7
111
4-8 操 作 ガ イ ド
Intel プロセッサにおけるハイパースレッディングのサポート
ibconfig パラメータ:MAX_THREADS
ibconfig コントロールで MAX_THREADS パラメータを設定することで、InterBase エンジン
内で一度にアクティブにできるスレッドの最大数を制御できます。デフォルト設定は 100
です。
MAX_THREADS100
この設定パラメータは、エンジン内のアクティブなスレッドの数を制御します。この数値の
最適な設定は、クライアントで実行されているタスクの性質によって部分的に異なります。
似たタスクを実行しているクライアントが多い場合は、MAX_THREADS 設定値を小さくし
て、競合を減らすことができます。その一方、同時にさまざまなタスクを実行する場合は、
高い値を設定するとスループットが向上します。
この設定は、InterBase サーバーによって作成されるスレッドの最大数には影響しないこと
に注意してください。これは、エンジン内で一度にアクティブにできるスレッド数を決定
するだけです。
Intel プロセッサにおけるハイパースレッディングのサポート
InterBase は、Intel のハイパースレッディング技術を使って論理プロセッサをサポートする
Intel プロセッサに対して、ハイパースレッディングをサポートします。InterBase サーバー
でこの機能を有効にするには、InterBase 設定ファイル ibconfig で設定を行う必要がありま
す。ハイパースレッドプロセッサを搭載したマシンで InterBase サーバーを実行している場
合は、設定ファイルの ENABLE_HYPERTHREADING パラメータを編集します。デフォルト
では、このパラメータは 0 に設定されています。InterBase サーバーでハイパースレッドプ
ロセッサを使用するには、この値に 1 を設定します。
InterBase Manager での InterBase の起動と停止
InterBase Server と InterBase Guardian は、データベース接続を有効化する前に開始する必要
があります。Windows プラットフォームでは、InterBase Manager を使用して、InterBase
Server と InterBase Guardian を開始および停止できます。前のバージョンの InterBase では、
InterBase Manager は Windows のコントロールパネルアプレットでした。このバージョンの
InterBase Manager は、インストールされた InterBase Server ごとにインストールされるアプ
リケーションになりました。InterBase Manager を開始するには、
[スタート|プログラム|
<InterBase のインストールディレクトリ >]を選択します。InterBase Manager を使用して、
次の操作を行うことができます。
• サーバーの起動モード。InterBase サーバーをマニュアルで起動するか、
システムのブート時
に自動的に起動するかを指定します。
• サーバーのパスの変更。 [変更]オプションをクリックすると、別のディレクトリを参照
して選択できます。
第 4 章 サーバーの環境設定
4-9
UNIX での InterBase Server の起動と停止
• InterBase Server の動作の変更。Windows サーバープラットフォームでは、
InterBase はデフォ
ルトでサービスとして自動的に実行されますが、アプリケーションとして実行することも
できます(非推奨)。Windows 非サーバープラットフォームでは、InterBase はアプリケー
ションとしてのみ実行できます。
メモ
InterBase Server をコマンドプロンプトまたはバッチファイルでアプリケーションとして起
動するには、次のオプションを付けて InterBase Guardian を起動します。
ibguard -a -p service_name -i InterBase_env_variable
オプション
コマンドは次のとおりです。
表 4.3
コマンド / オプ
ション
説明
-a
アプリケーションとして起動します。
-i
環境変数。サーバーにローカルに接続するクライアントのためにサー
バーの位置を特定します。
-p
ポート番号。service_name は services ファイル内のエントリです。これ
は、InterBase Server がクライアントからの接続要求を監視するポート
番号を指します。
InterBase Guardian がサーバーを起動して、システムトレイにアイコンを配置します。
• [起動/停止]
ボタンで InterBase Server と InterBase Guardian を起動します。InterBase Manager
のステータス領域で[起動]をクリックして、InterBase Server(および InterBase Guardian)
を起動します。サーバーのステータスが変わると、InterBase Guardian アイコンがシステム
トレイに現れます。InterBase Server を起動すると、InterBase Manager を終了できます。その
とき、InterBase Server および InterBase Guardian はともに引き続き動作し続けます。InterBase
Guardian アイコンはサーバーが停止されるまでシステムトレイに残ります。
• [起動/停止]
ボタンで InterBase Server と InterBase Guardian を停止します。InterBase Manager
のステータス領域で[停止]をクリックして、InterBase Server(および InterBase Guardian)
を停止します。または、システムトレイで InterBase Guardian アイコンを右クリックして
[InterBase シャットダウン]を選択します。
UNIX での InterBase Server の起動と停止
UNIX で InterBase サーバーを起動および停止する方法について説明します。
ibmgr でのサーバーの起動と停止
UNIX 上では、InterBase サーバープロセス ibserver は 1 つのデーモンとして実行されます。
ibmgr を使用して、サーバープロセスの起動と停止を行います。ibmgr を使用するには、
サーバーマシンにログオンしなければなりません。
4-10 操 作 ガ イ ド
UNIX での InterBase Server の起動と停止
構文
ibmgr -command [-option [parameter] ...]
または
ibmgr u
IBMGR> command [-option [parameter]]
説明
UNIX 上では、InterBase サーバープロセスは 1 つのデーモンとして実行されます。デーモン
は、UNIX システムのコンソールまたはターミナルにログインしているユーザーがいないと
きでも実行されます。
ibmgr は UNIX システム上で、InterBase サーバープロセスを管理するためのユーティリ
ティです。ibmgr を使用するには、サーバー実行されているマシンにログインしなければな
りません。
メモ
Windows インストールで使用される ibmgr32.exe は古いクライアント側ユーティリティで、
その機能は UNIX 上の ibmgr とはまったく異なります。名前が偶然に一致しているだけで
す。
オプション
start [-once|-forever]
サーバーを起動します。-forever スイッチはサーバーが停止したときに
サーバーを再起動します。デフォルトは -forever です。
shut
現在のトランザクションをロールバックし、クライアント接続を終了し
て、サーバーをただちにシャットダウンします。
show
ホスト、ポート、およびユーザーを表示します。
user user_name
SYSDBA を入力します。
password password
SYSDBA パスワードを入力します。
ヘルプ
ヘルプテキストをプリントします。
quit
プロンプトモードを終了します。
サーバーの起動
InterBase Server を起動するには、root ユーザーまたは InterBase ユーザーとしてログインし
ます。interbas は InterBase と同等で、9 文字のアカウント名をサポートしていないオペレー
ティングシステムで使用できます。たとえば、次のコマンドで InterBase を起動します。
ibmgr -start -p service_name
メモ
root などの 1 つのログイン名を使って ibserver を起動すると、作成されるオブジェクトは、すべてその
ログイン名に属することになります。その後、interbas または InterBase として ibserver を起動しても、こ
れらのオブジェクトにはアクセスできません。InterBase Server は、
InterBase として起動することを強くお
勧めします。-p オプションが指定されない場合は、デフォルトの gds_db が使用されます。
InterBase Classic は、inetd プロセスを使ってリクエストを処理します。明示的にサーバーを
起動する必要はありません。inetd はプロセスを振り分けてリクエストを処理します。通常、
inetd は自動的にサーバーを起動します。
第 4 章 サーバーの環境設定
4-11
UNIX での InterBase Server の起動と停止
サーバーの停止
メモ
安全のために、サーバーを停止する前に、すべてのデータベースが接続解除されているこ
とを確認してください。
コマンドスイッチ -user と -password は、-start や -shut のようなコマンドのオプションス
イッチとして使用できます。たとえば、次のいずれかの方法で、サーバーをシャットダウン
できます。
ibmgr -shut -password password
または
ibmgr u
IBMGR> shut -password password
または
imbgr u
IBMGR> password password
IBMGR> shut
メモ
現在、-shut コマンドは現在のすべてのトランザクションをロールバックして、サーバーを
ただちにシャットダウンします。クライアントの作業が終わるまで待って接続を切る必要
がある場合は、データベースを個別にシャットダウンします。7-31 ページの「データベー
スのシャットダウンと再起動」を参照してください。
サーバーの自動起動
サーバーホストの起動時に、InterBase サーバーが自動的に起動するように UNIX サーバー
を設定するには、rc 初期化スクリプトが実行できるスクリプトをインストールする必要が
あります。起動時に UNIX がスクリプトを実行する方法については、/etc/init.d/README を
参照してください。
初期化スクリプトの例
#!/bin/sh
# ibserver.sh script - Start/stop the InterBase daemon
# Set these environment variables if and only if they are not set.
: ${InterBase:=/usr/InterBase}
# WARNING:in a real-world installation, you should not put the
# SYSDBA password in a publicly-readable file. To protect it:
# chmod 700 ibserver.sh; chown root ibserver.sh
export InterBase
ibserver_start() {
# This example assumes the InterBase server is
# being started as UNIX user ’InterBase’.
echo '$InterBase/bin/ibmgr -start -forever' | su InterBase
}
4-12 操 作 ガ イ ド
UNIX での InterBase Server の起動と停止
ibserver_stop() {
# No need to su.
$InterBase/bin/ibmgr -shut -user SYSDBA -password password
}
case $1 in
’start’) ibserver_start ;;
’start_msg’) echo 'InterBase Server starting...\c' ;;
’stop’) ibserver_stop ;;
’stop_msg’) echo 'InterBase Server stopping...\c' ;;
*) echo 'Usage:$0 { start | stop }' ; exit 1 ;;
esac
exit 0
Solaris への初期化スクリプトのインストール例
1
root としてログインします。
$ su
2
上記のスクリプトの例を初期化スクリプトディレクトリに入力します。
# vi /etc/init.d/ibserver.sh
3
4
テキストを入力します。
InterBase Server の起動と停止を行うために、該当する実行レベルの rc ディレクトリに
初期化スクリプトをリンクします。
# ln /etc/init.d/ibserver.sh /etc/rc0.d/K30ibserver
# ln /etc/init.d/ibserver.sh /etc/rc2.d/S85ibserver
Linux 上での初期化スクリプトの例
5
root としてログインします。
$ su
6
次に示す Linux スクリプト例を初期化スクリプトディレクトリに入力します。
# cp ibserver.sh /etc/rc.d/init.d/ibserver.sh
# chmod 700 /etc/rc.d/init.d/ibserver.sh
7
初期化スクリプトを InterBase サーバーの起動に対する適切な実行レベルの rc ディレク
トリにリンクします。
# ln -s /etc/rc.d/init.d/ibserver.sh /etc/rc.d/rc0.d/S85ibserver
8
初期化スクリプトを InterBase サーバーの停止に対する適切な実行レベルの rc ディレク
トリにリンクします。
# ln -s /etc/rc.d/init.d/ibserver.sh /etc/rc.d/rc0.d/K30ibserver
9
ホストの信頼関係がある必要があります。
# touch /etc/gds_hosts.equiv
# echo “+” >> /etc/gds_hosts.equiv
10 InterBase Classic に対する inetd エントリがないことを確認します。
# echo -e “/gds_db/s/^/#/\nwq” | ed /etc/inetd.conf
# killall -HUP inetd
第 4 章 サーバーの環境設定
4-13
UNIX での InterBase Server の起動と停止
Linux 初期化スクリプトの例
#!/bin/sh
# ibserver.sh script - Start/stop the InterBase daemon
# Set these environment variables if and only if they are not set.
: ${InterBase:=/usr/InterBase}
# WARNING:in a real-world installation, you should not put the
# SYSDBA password in a publicly-readable file. To protect it:
# chmod 700 ibserver.sh; chown root ibserver.sh
export InterBase
ibserver_start() {
# This example assumes the InterBase server is
# being started as user “InterBase”.
su - InterBase -c “$InterBase/bin/ibmgr -start -forever”
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/ibserver
}
ibserver_stop() {
# No need to su.
$InterBase/bin/ibmgr -shut -user SYSDBA -password password
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/ibserver
}
if [ ! -d “$InterBase” ] ; then
echo “$0: cannot find InterBase installed at $InterBase” >&2
exit 1
fi
if [ ! -x “$InterBase/bin/ibmgr” ] ; then
echo “$0: cannot find the InterBase SuperServer manager as
$InterBase/bin/ibmgr” >&2
if [ ! -x “$InterBase/bin/gds_inet_server” ] ; then
echo “$0: this is InterBase Classic; use inetd instead of
ibserver daemon” >&2
fi
exit1
fi
case $1 in
’start’)
ibserver_start ;
echo “InterBase started” ;;
’start_msg’)
echo 'InterBase Server starting...\c' ;;
4-14 操 作 ガ イ ド
接続管理
’stop’)
ibserver_stop ;
echo “InterBase stopped” ;;
’stop_msg’)
echo 'InterBase Server stopping...\c' ;;
’restart’)
ibserver_stop ; ibserver_start
echo “InterBase restarted” ;;
’restart_msg’)
echo 'InterBase Server restarting...\c' ;;
*) echo “Usage: $0 { start | stop | restart }” ; exit 1 ;;
esac
exit 0
接続管理
InterBase Server には、
サーバーへの接続数を調整する接続管理があります。ライセンスファ
イルの USERS フィールドの値を 4 倍して、同時接続可能な数を決定します。
データベースの作成または接続が成功するたびに、現在の接続数は増えます。ローカル接続
とリモート接続の数が接続数の対象になります。同時接続の最大数に達するまで、接続は許
可されます。データベースからの接続解除が行われると、現在の接続数は減ります。
接 続 数 が 上 限 値 に 達 す る と、サ ー バ ー は 次 の メ ッ セ ー ジ に 対 応 す る エ ラ ー 定 数
isc_max_att_exceeded(ibase.h で定義されている)を返します。
Maximum user count exceeded. Contact your database administrator.
環境変数の使い方
ここでは、InterBase が認識する環境変数について説明します。環境変数を定義したら、こ
れらの規則を常に注意しておいてください。
• 環境変数は ibserver プロセスのスコープになければなりません。
• Windows では、
[コントロールパネル|システム]を選択して[環境変数]ダイアログでシ
ステム変数として環境変数を定義します。
• UNIX で環境変数を定義する最も簡単な方法は、環境変数定義をシステムのデフォルトの
シェルプロファイルに追加します。
第 4 章 サーバーの環境設定
4-15
環境変数の使い方
ISC_USER および ISC_PASSWORD
データベースに接続する場合や gbak、gstat、gfix のようなユーティリティを実行する場合
に ユ ー ザ ー 名 と パ ス ワ ー ド を提供しないときは、InterBase は環境変数 ISC_USER と
ISC_PASSWORD が設定されているかどうかを確認し、設定されていればそのユーザー名と
パスワードを InterBase ユーザーのものとして使用します。
これらの環境変数を設定すると便利ですが、セキュリティが問題になる場合には使用しな
いでください。
環境変数 InterBase
InterBase
InterBase 変数はインストール時および実行時の両方に使用されます。インストール時に、
こ の 変 数 は InterBase 製品がインストールされる パスを定義します。 このパスが
/usr/InterBase と異なる場合は、すべてのユーザーは実行時に正しいパスを設定しなければな
りません。実行時は、InterBase ホームディレクトリを設定するためにこの InterBase 変数を
使用します。環境変数 InterBase は、Windows でローカル接続に使用されます。環境変数
InterBase は、クライアントが接続先の InterBase Server のローカルインスタンスを特定する
際に使用されます。
InterBase_TMP
InterBase_TMP 変数はサーバー上の InterBase のソートファイルの場所を設定するために使
用されます。これらのファイルを定義するために他のオプションがあります。4-18 ページ
の「ソートファイルの設定」を参照してください。
InterBase_LOCK、InterBase_MSG
InterBase_LOCK 変数は InterBase のロックファイルの場所を、
InterBase_MSG は InterBase の
メッセージファイルの場所をそれぞれ定義します。この 2 つの変数は互いに独立しており、
別の場所に設定することができます。
IB_PROTOCOL
IB_PROTOCOL は、実行時に InterBase Server が使用するポートを指定する際に使用されま
す。また、InterBase Manager が管理対象の InterBase Server を特定する際も使用されます。
InterBase クライアントは、この変数を使用して、接続先の InterBase サーバーのインスタン
スを特定します。
重要
環境変数は ibserver プロセスのスコープになければなりません。Windows プラットフォー
ムでは、コントロールパネルの[システム|環境]ダイアログでシステム変数として変数
を定義します。UNIX では、変数定義をシステム全体のデフォルトのシェルプロファイルに
追加するのが最も簡単な方法です。
4-16 操 作 ガ イ ド
一時ファイルの管理
環境変数 TMP
環境変数 TMP は、InterBase_TMP 変数が定義されていない場合に、InterBase が一時ファイ
ルを保存する場所を定義します。
UNIX と Linux のホストの信頼関係
UNIX マシンと Linux マシンでは、ローカル接続も TCP/IP を介して行うために、localhost
にホストの信頼関係を提供する必要があります。それには、etc/hosts ファイルに次の行を追
加します。
127.0.0.1 localhost
ローカルマシンに他の名前を付けている場合は、それらの名前も行に入れます。
127.0.0.1 localhost mymacnine_hame
一時ファイルの管理
InterBase は 2 種類の一時ファイル (ソートファイルとヒストリリストファイル)を作成し
ます。
InterBase Server は、内部ソートバッファのサイズがソートの実行に十分でない場合、ソー
トファイルを作成します。各リクエスト(CONNECT または CREATE DATABASE など)は、
同じ一時ファイルディレクトリリストを受け取ったり共有します。各リクエストはそれ自
身の一時ファイルを作成します(それぞれ個別に I/O ファイルハンドルを持つ)。ソート
ファイルはソートが完了してリクエストが解放されたときに解放されます。特定のディレ
クトリで空き容量がなくなった場合、InterBase はディレクトリリストで次のディレクトリ
に新しい一時ファイルを作成します。ディレクトリリストにエントリが残っていない場合
は、エラーメッセージを表示して現在のリクエストの処理を停止します。
InterBase の isql クライアントは、ヒストリリストファイルを作成して、入力コマンドの状
況を監視しています。各インスタンスは自分の一時ファイルを作成します。このファイルの
サイズは、ディスク容量がなくなるまで大きくなります。一時ファイル管理は、クライアン
ト間の同期は取りません。クライアントが終了すると、一時ファイルは解放されます。
履歴ファイルの設定
履歴ファイルの場所を設定するには、クライアントマシン上に環境変数 TMP を定義しま
す。これは、履歴ファイルを定義する唯一の方法です。環境変数 TMP を定義することに
よって履歴ファイルの場所を設定しなかったときは、InterBase クライアントがローカルシ
ステムのために定義された一時ディレクトリを使用します。一時ファイルが定義されてい
ない場合は、UNIX システムでは /tmp を、Windows システムでは C:¥temp を使用します。
第 4 章 サーバーの環境設定
4-17
一時ファイルの管理
ソートファイルの設定
一時的なソート処理で使用することができる空き領域を大量に確保しておくことが必要で
す。InterBase が必要とする一時領域の最大量は、場合によってはデータベース自身より大
きくなることもあります。
通常、一時的なソートファイルはデータベースが存在するサーバーに作成されます。一時
ディレクトリは、マッピングされたドライブやネットワークにマウントされたファイルシ
ステムではなく、サーバーが物理的に存在するディスクドライブのものを指定してくださ
い。
ソートファイルのディレクトリを指定する方法は 2 つあります。
• ソートファイルのためのディレクトリと容量の定義を有効にするために、$InterBase/ibconfig
ファイルにエントリを追加できます。その構文は次のとおりです。
TMP_DIRECTORY size “pathname”
重要:パス名は二重引用符で囲まなければなりません。そうしないと、設定ファイルが
機能しません。
これで、各ソートディレクトリの最大サイズをバイト単位で定義されます。いくつかの
ディレクトリを一覧でき、一覧された各ディレクトリにはディレクトリのサイズ仕様が
あります。1 つのディレクトリに対して個別のサイズ設定で複数回サイズを指定するこ
とができます。InterBase は、次の定義に進む前に各仕様の空き容量を使用していきま
す。
たとえば、dir1 に 5,000,000 バイト、dir2 に 10,000,000 バイトの大きさを指定し、その後
に dir1 に 2,000,000 バイトを指定した場合、InterBase は 5,000,000 バイトになるまで dir1
を、dir2 を 10,000,000 バイトまで使用して、さらに 2,000,000 バイトが利用できる dir1 に
戻ります。これを指定する ibconfig のエントリは次のとおりです。
TMP_DIRECTORY 5000000 “C:¥dir1”
TMP_DIRECTORY 10000000 “D:¥dir2”
TMP_DIRECTORY 2000000 “C:¥dir1”
• 環境変数 InterBase_TMP と TMP を使用して、一時ファイルの場所を定義することができま
す。
一時ディレクトリを ibconfig で指定した場合、サーバーはソートファイルのためにこれらの
値を使用し、サーバーの環境変数値は無視します。一時ディレクトリを ibconfig で指定して
いない場合は、サーバーは次のアルゴリズムに基づいてソートファイルのための場所を選
択します。
1
2
環境変数 InterBase_TMP で定義されたディレクトリを使用する
InterBase_TMP が定義されていない場合は、環境変数 TMP で定義されているディレク
トリを使用する
3
TMP が定義されていない場合は、デフォルトの /tmp(UNIX)または C:¥temp
(Windows)を使用する
4-18 操 作 ガ イ ド
ibconfig の設定パラメータ
ibconfig の設定パラメータ
設定ファイル ibconfig にパラメータの名前と値を入力して、InterBase Server の設定パラメー
タを指定します。エントリは次の形式になります。
parameter <whitespace> value
• parameter はスペースを含まない文字列で、設定対象のサーバーのプロパティの名前になり
ます。
• value は数字または文字列で各プロパティの特定の設定を示します。
ibconfig の各行は、パラメータ名とスペースを含めて最大 80 文字までです。
パラメータに 0 以下の値を指定した場合、サーバーは設定を無視し、そのパラメータのデ
フォルト値を使用します。ただし、これらのパラメータに適用される上限はありません。
サーバーは、起動時にこれらのパラメータの値を InterBase.log ファイルに報告します。
ibconfig ファイルでパラメータがコメントアウトされている場合、サーバーはデフォルト値
を使用します。
次に、ibconfig に入力できるエントリの概要を示します。
表 4.4
ibconfig の内容
パラメータ
説明
ADMIN_DB
• InterBase セキュリティデータベースの名前
• セキュリティデータベース名が admin.ib ではない場合に
限り必要です
• 必ず、InterBase のホームディレクトリになければなりま
せん
ANY_EVENT_MEM_SIZE
• イベントマネージャに割り当てられる共有メモリのバイ
ト数
• デフォルトは 32768
ANY_LOCK_MEM_SIZE
• ロックマネージャに割り当てられる共有メモリのバイト
数
• デフォルトは 98304
ANY_LOCK_SEM_COUNT
• プロセス間通信のためのセマフォの数(Classic アーキテ
クチャのみ)
• デフォルトは 32
ANY_LOCK_SIGNAL
• プロセス間通信のために使用される UNIX 信号(Classic
アーキテクチャのみ)
• デフォルトは 16
CPU_AFFINITY
•(Windows のみ)SMP システムで、使用するプロセッサ
を設定します
• デフォルトでは、すべてのプロセッサを使用します(エ
ントリはコメントアウトされる)
第 4 章 サーバーの環境設定
4-19
ibconfig の設定パラメータ
表 4.4
ibconfig の内容 ( 続き )
パラメータ
説明
CONNECTION_TIMEOUT
• 接続が失敗と判断されるまでの待ち時間(秒)
• デフォルトは 180
DATABASE_CACHE_PAGES
• データベースごとにメモリに割り当てるデータベース
ページ数のサーバーレベルのデフォルト値
• クライアントが上書きできます
• 詳細は、7-24 ページの「データベースキャッシュの設
定」を参照してください
• デフォルト:2048
DEADLOCK_TIMEOUT
• 未承認ロックによってデッドロックをチェックするため
のスキャンが始まるまでの時間(秒)
• デフォルトは 10
DUMMY_PACKET_INTERVAL
• サーバーが応答を要求するためにダミーのパケットを送
信するまでの無応答クライアント接続の待ち時間(秒)
• デフォルトは 60
ENABLE_HYPERTHREADING
• 論理プロセッサをサポートする Intel プロセッサで、ハ
イパースレッディングを有効化するかどうかを指定し
ます
• 有効な値は次のとおりです。1(有効)または 0(無効)
• デフォルトは 0
EXTERNAL_FILE_DIRECTORY
• 外部データベースファイルが <interbase_home>/ext にない
場合に、その場所を指定します
• セキュリティ上の理由から、このディレクトリには他の
ファイルを保存しないでください
EXTERNAL_FUNCTION_DIRECTORY
• UDF ライブラリが <interbase_home>/UDF にない場合に、
その場所を指定します。
• セキュリティ上の理由から、このディレクトリには他の
ファイルを保存しないでください
LOCK_ACQUIRE_SPINS
• ロックテーブルミューテックス待ちでビジーの間のスピ
ンの数
• SMP マシンだけに関係があります
• デフォルトは 0
LOCK_HASH_SLOTS
• ロックハッシュリストの調整。ハッシュスロットが多い
ほどハッシュチェーンは短くなります
• 非常に負荷が大きい場合を除けば必要ありません
• 素数値が推奨されます
• デフォルトは 101
MAX_THREADS
• InterBase エンジン内で一度にアクティブにできるス
レッドの最大数を制御します
• デフォルトは 100
4-20 操 作 ガ イ ド
ibconfig の設定パラメータ
表 4.4
ibconfig の内容 ( 続き )
パラメータ
説明
SERVER_CLIENT_MAPPING
• プロセス間通信に使用されるメモリマップファイルのク
ライアント側のサイズ(バイト数)
• デフォルトは 4096
SERVER_PRIORITY_CLASS
• Windows サーバープラットフォームでの InterBase サービ
スの優先順位
• 1 は優先順位が低く、2 は優先順位が高くなります
• Windows サーバープラットフォームでのみ指定できます
• デフォルトは 1
SERVER_WORKING_SIZE_MAX
• OS がすべてのメモリをスワップアウトするように要求さ
れる上限のしきい値
• Windows サーバープラットフォームでのみ指定できます
• デフォルト:0(システムで決定)
SERVER_WORKING_SIZE_MIN
• OS がメモリのスワップをまったく要求されない下限のし
きい値。
• Windows サーバープラットフォームでのみ指定できます
• デフォルト:0(システムで決定)
SORTMEM_BUFFER_SIZE
• メモリ内のソート バッファのサイズを指定します。こ
の値を高く設定すると、大規模なソートマージ クエ
リーのパフォーマンスが向上します。
• デフォルトは 1048500 です。
SWEEP_QUANTUM
• 作業スレッドに制御が戻るまでに、ガベージコレクタ
スレッドまたはスイーパスレッドが処理できるレコー
ドの最大数
• SWEEP_QUANTUM を増やす場合は、
SWEEP_YIELD_TIME も増やすことを検討してください
• デフォルトは 10
SWEEP_YIELD_TIME
• スイーパスレッドまたはガベージコレクタスレッドが
スリープする時間(ミリ秒)
• 作業スレッドには影響しません
• SWEEP_YIELD_TIME を増やす場合は、
SWEEP_QUANTUM も増やすことを検討してください
• デフォルトは 1 ミリ秒
TMP_DIRECTORY
• すべての一時ファイルが使用するディレクトリ
• ディレクトリで使用できるバイト数とディレクトリのパ
スを指定します
• 1 行に 1 エントリずつ複数のエントリを一覧できます。各
ディレクトリは、指定された順番にしたがって使用され
ます
• デフォルト:環境変数 INTERBASE_TMP の値。そうでな
い場合は、UNIX では /tmp、Windows では C:¥temp
第 4 章 サーバーの環境設定
4-21
サーバーのログファイルの表示
表 4.4
ibconfig の内容 ( 続き )
パラメータ
説明
USER_QUANTUM
• 他のスレッドに制御が戻るまでに、作業スレッド
(ユーザークエリーを実行するスレッド)が処理できる
レコードの最大数
• デフォルトは 250
V4_EVENT_MEMSIZE
• イベントマネージャに割り当てられる共有メモリのバイ
ト数
• デフォルトは 32768
• ANY_EVENT_MEMSIZE によって上書きされます
V4_LOCK_GRANT_ORDER
• 1 は最初に到着したものが最初にロックサービスを受け
られることを意味します
• 0 は InterBase V3.3 の動作のエミュレーションを意味しま
す。V3.3 の動作では利用可能になり次第、ロックが許可
され、ロック要求不足が発生する場合があります
• デフォルトは 1
V4_LOCK_MEM_SIZE
• ロックマネージャに割り当てられる共有メモリのバイト
数
• デフォルトは 98304
• ANY_LOCK_MEM_SIZE によって上書きされます
V4_LOCK_SEM_COUNT
• プロセス間通信のためのセマフォの数(Classic アーキテ
クチャのみ)
• デフォルトは 32
• ANY_LOCK_SEM_COUNT によって上書きされます
V4_LOCK_SIGNAL
• プロセス間通信のために使用される UNIX 信号(Classic
アーキテクチャのみ)
• デフォルトは 16
• ANY_LOCK_SIGNAL によって上書きされます
V4_SOLARIS_STALL_VALUE
• ロックテーブルミューテックスの取得を再試行するまで
にサーバープロセスが待つ時間(秒)
• Solaris だけに関係します
• デフォルトは 60
サーバーのログファイルの表示
InterBase Server は、InterBase インストールディレクトリのファイル InterBase.log に診断メッ
セージを記録します。ibserver によって生成されたすべてのメッセージはこのファイルに
送られます。サーバーに設定上の問題がある場合に、これは重要な診断情報源になります。
このファイルの中のエラーメッセージの一覧については、
『言語リファレンス』を参照して
ください。
4-22 操 作 ガ イ ド
サーバーのログファイルの表示
IBConsole は、
このログファイルを標準テキスト表示ウィンドウに表示します。
[Server Log]
ダイアログを表示する方法は次のとおりです。
• サーバーを選択して展開されていない場合にはそのサーバーを展開します。
[Server Log]を
クリックしてから、ワークペインの[サーバーログファイルの参照]をダブルクリックし
ます。
• ツリーペインでサーバーを右クリックして、コンテキストメニューから[サーバーログファ
イルの参照]を選択します。
• サーバーを選択してから、
[サーバー]メニューから[サーバーログファイルの参照]を選
択します。
図 4.1 [Server Log]ダイアログ
標準テキスト表示ウィンドウで特定のテキストを検索して、そのテキストをファイルに保
存したり印刷することができます。標準テキスト表示ウィンドウの使い方については、3-7
ページの「標準テキスト表示ウィンドウ」を参照してください。
第 4 章 サーバーの環境設定
4-23
4-24 操 作 ガ イ ド
第
章
ネットワーク設定
第5章
この章では、ネットワークのクライアント / サーバー環境で InterBase を設定するときの問
題について詳しく説明します。トピックには、InterBase でサポートされるネットワーク プ
ロトコル、リモート接続識別子、サーバー間で転送されるデータの暗号化、ネットワーク
トラブルシューティングのヒントがあります。
ネットワークプロトコル
InterBase は、クライアント / サーバープラットフォームのあらゆる組み合わせに対して
TCP/IP を サ ポー ト しま す。さらに、Windows サーバープラットフォームとすべての
Windows クライアントに対して NetBEUI を、Windows クライアントに対してローカル接
続モード(プロセス間通信を含み、ネットワークインターフェイスを含まない)をサポー
トします。
InterBase は、あるオペレーティングシステムで実行されているクライアントが、別のプラッ
トフォームとオペレーティングシステムで実行されている InterBase サーバーにアクセス
できるように設計されています。
次の表で、Windows サーバープラットフォームは、WindowsNT、2000、XP Professional、
2003 Server を指します。Windows 非サーバープラットフォームは、Windows 98SE、ME、お
よび XP Home を指します。
第 5 章 ネットワーク設定
5-1
サーバーとデータベースへの接続
表 5.1
サポートされる接続プロトコル
InterBase サーバープラットフォーム
クライアントプラットフォー
ム
Windows 非サー
Windows
バー
サーバー
UNIX
Windows 非サーバー
TCP/IP、
TCP/IP、NetBEUI
TCP/IP
TCP/IP、
TCP/IP
ローカル
Windows サーバー
TCP/IP
NetBEUI、ローカル
UNIX/Linux
TCP/IP
TCP/IP
TCP/IP
サーバーとデータベースへの接続
データベース管理作業を実行する前に、サーバーへログインしなければなりません。ログイ
ンすると、サーバー上のデータベースへの登録と接続を行うことができます。IBConsole の
ツリーペインで目的のデータベースを選択すれば、他のデータベースにコンテキストを切
り替えることができます。ツリーペインで選択しているデータベースを現在のデータベー
スと言います。選択しているサーバーまたは現在のデータベースが存在しているサーバー
を、現在のサーバーと言います。
サーバーの登録
次に示すいずれかの方法で、IBConsole の[Register Server and Connect]ダイアログを表示
できます。
• [サーバー|サーバーの登録]を選択するか、
[サーバーの登録]ボタンをクリックします。
• ツリーペインの[InterBase Servers]をダブルクリックします。
• [InterBase Servers]を右クリックするか、ツリーペインの任意のサーバーを右クリックして
から、コンテキストメニューの[サーバーの登録]を選択します。
5-2 操 作 ガ イ ド
サーバーとデータベースへの接続
図 5.1 [Register Server and Connect]ダイアログ
ローカルサーバーまたはリモートサーバーを登録するには
1 [ローカルサーバー]オプションまたは[リモートサーバー]オプションのいずれかを
選択します。
2 [ローカルサーバー]を選択した場合、[サーバー]、[ネットワークプロトコル]の情報
は必要ありません。これらのテキストフィールドは入力できなくなります。手順 5 に進
んでください。
3 [リモートサーバー]を選択した場合、[サーバー]テキストフィールドにサーバーの名
前を入力して、ネットワークプロトコルをドロップダウンリストから選択し、[エイリ
アス名]テキストフィールドにサーバーのエイリアス名を入力します。Windows レジ
ストリにサーバーのエイリアス名を保存するには、
[接続情報をエイリアスとして保管
する]チェックボックスをオンにします。
InterBase サーバー名はデータベースサーバーマシンの名前です。InterBase サーバープロ
セスそのものに対する特別な名前はありません。たとえば、サーバーが NT サーバー
“venus” 上で実行されている場合は[サーバー]テキストフィールドにこの名前を入力
します。
どのプラットフォームでも、TCP/IP をネットワークプロトコルとして指定できます。
Windows では、NetBEUI またはローカルを指定することもできます。クライアントと
サーバーの両方がサポートしている場合にのみ、そのプロトコルは有効になります。
4
5
オプションで、サーバーの記述名を入力します。
この時点で、サーバーにログインせずに登録だけを行うことや、サーバーの登録と接続
を同時に行うことを選択できます。
• サーバーの登録だけを行いたい場合は、
[接続情報]を無視して[OK]をクリック
します。
• サーバーの登録と接続を同時に行う場合は、ユーザー名とパスワードをそれぞれ対
応するテキストフィールドに入力して[OK]をクリックします。
第 5 章 ネットワーク設定
5-3
サーバーとデータベースへの接続
ユーザー名とパスワードは、サーバー上の InterBase セキュリティデータベース(デ
フォルトでは admin.ib)に保存されている InterBase のユーザー名とパスワードでなけれ
ばなりません。
サーバーが登録されると、IBConsole はサーバーをツリーペインに表示します。
サーバーへのログイン
次のいずれかの方法で、IBConsole のサーバーログインダイアログを表示します。
• ツリーペインで、ログインされていない登録サーバーを選択します。
[サーバー|サーバー
へログイン]を選択するか、ワークペインで[サーバーへログイン]をダブルクリックし
ます。
• ツリーペインで、ログインされていない登録サーバーをダブルクリックします。
• ツリーペインで、ログインされていない登録サーバーを右クリックしてコンテキストメ
ニューから[サーバーへログイン]を選択します。
[サーバーログイン]ダイアログが表示されます。
図 5.2 [サーバーログイン]ダイアログ
サーバーにログインするには
1 [サーバー]フィールドに表示されているサーバーが正しいかどうかを確認します。
2 ユーザー名とパスワードをそれぞれ対応するテキストフィールドに入力します。
IBConsole は、ログインに最後に使用されたユーザー名(ログインに成功したかどうか
は無関係)を表示します。
ユーザー名とパスワードは、サーバー上の InterBase セキュリティデータベース(デ
フォルトでは admin.ib)に保存されている InterBase のユーザー名とパスワードでなけれ
ばなりません。
ユーザー名は 31 文字まで有効で、大文字と小文字は区別されません。パスワードは 8 文
字まで有効で、大文字と小文字が区別されます。
サーバーへログインするには、必ずユーザー名とパスワードを入力しなければなりませ
ん。パスワードはネットワークに送信されるため暗号化されます。ユーザー名とパス
ワードはセキュリティデータベースのレコードと比較されます。一致するレコードが見
つかるとログインできます。
3 [ログイン]ボタンをクリックしてサーバーにログインします。
5-4 操 作 ガ イ ド
サーバーとデータベースへの接続
重要
最初は、どのサーバーでも承認ユーザーはユーザー名 SYSDBA だけです。SYSDBA でログイ
ンして、他のユーザーを追加しなければなりません。新しいユーザーを追加する方法の詳細
は、6-10 ページの「IBConsole でのユーザー管理」を参照してください。
サーバーからのログアウト
サーバーからログアウトすると、すべてのデータベースは自動的に接続解除されますが、登
録は解除されません。
次のいずれかの方法で、IBConsole からサーバーのログアウトを行うことができます。
• ツリーペインで接続サーバーを選択するか、サーバー階層下の任意のブランチを選択して、
[サーバー|サーバーからログアウト]を選択します。
• ツリーペインで接続サーバーを選択して、ワークペインで[サーバーからログアウト]を
ダブルクリックします。
• ツリーペインで接続サーバーを右クリックして、コンテキストメニューから[サーバーか
らログアウト]を選択します。
選択サーバーへの接続を閉じることを確認する、確認ダイアログが表示されます。サーバー
からログアウトする場合は[はい]をクリック、ログアウトしない場合には[いいえ]を
クリックします。
サーバーの登録解除
次のいずれかの方法で、IBConsole から接続解除されているサーバーの登録解除を行うこと
ができます。
• ツリーペインでサーバーを選択して、
[サーバー|サーバーの削除]を選択するかツール
バーの[サーバーの削除]ボタンをクリックします。
• ツリーペインでサーバーを選択して、ワークペインで[サーバーの削除]をダブルクリッ
クします。
• ツリーペインでサーバーを右クリックして、コンテキストメニューから[サーバーの削除]
を選択します。
選択サーバーの登録解除を確認する、確認ダイアログが表示されます。サーバーを登録解除
する場合は[はい]をクリック、解除しない場合には[いいえ]をクリックします。
メモ
サーバーを登録解除すると、ツリーペインからそのサーバーが削除されて、そのサーバー
上のデータベースは接続解除および登録解除され、現在のサーバーから自動的にログアウ
トします。
データベースの登録
次のいずれかの方法で、IBConsole の[データベースエイリアスの登録]ダイアログを表示
できます。
• [データベース|データベースエイリアスの登録]を選択します。
第 5 章 ネットワーク設定
5-5
サーバーとデータベースへの接続
• 接続サーバーのブランチを展開します。ツリーペインの Databases を右クリックして、コン
テキストメニューの[データベースエイリアスの登録]を選択します。
• ツリーペインで接続解除されているデータベースを選択して、ワークペインで[データベー
スエイリアスの登録]をダブルクリックします。または、ツリーペインでデータベースを
右クリックして、コンテキストメニューから[データベースエイリアスの登録]を選択し
ます。
[データベースエイリアスの登録]ダイアログが表示されます。
図 5.3 [データベースエイリアスの登録]ダイアログ
データベースを登録するには
1 [サーバー]フィールドに表示されているサーバーが正しいかどうかを確認します。
2 データベースのファイル名をパスを含めた形式で[ファイル]テキストフィールドに入
力します。ローカルサーバーに存在するデータベースの場合、[参照]ボタン をク
リックして対象ファイルを指定することもできます。リモートサーバーの場合は、[参
照]ボタンは使用できません。
3
データベースのエイリアス名を[エイリアス名]テキストフィールドに入力します。こ
の名前で IBConsole ウィンドウに表示されます。エイリアスを指定しない場合、エイリ
アスは手順 2 で選択したファイル名になります。
4
データベースを永久に登録する場合は、[接続情報をエイリアスとして保管する]
チェックボックスをオンにします。これにより、データベースのエイリアス名は
Windows レジストリに保存されます。
5
この時点で、データベースに接続せずに登録だけを行うことや、データベースの登録と
接続を同時に行うことが選択できます。
5-6 操 作 ガ イ ド
サーバーとデータベースへの接続
データベースの登録だけを行いたい場合は、[接続情報]を無視して[OK]をクリック
します。
6
データベースの登録と接続を同時に行う場合は、ユーザー名、パスワード、およびデー
タベースのオプションのロールとデフォルトのキャラクタセットをそれぞれ対応するテ
キストフィールドに入力して[OK]をクリックします。
ロールを使って接続する場合は、
[ロール]テキストフィールドにロールを指定します。
この操作はオプションです。事前に GRANT 文によってロールが割り当てられている場
合は、ロールを使って接続することにより、そのロールのすべての特権が与えられま
す。ロールの詳細は、6-8 ページの「SQL ロール」を参照してください。
データベースが登録されると、ツリーペインに表示されます。
データベースへの接続
IBConsole には、データベースに接続する方法が 2 つあります。1 つは、即座にデータベー
スに接続するために、サーバーへのログインで指定したユーザー名とパスワードを使用す
る簡単な接続方法です。もう 1 つの方法は、[データベース接続]ダイアログでサーバーロ
グインとは異なるユーザー名とパスワードを使ってデータベースに接続する方法です。
接続
データベースに即座に接続するためにサーバーログイン用のユーザー名とパスワードを
使って自動接続を行う場合、次に示す方法のいずれかを行います。
• ツリーペインで接続解除されているデータベースを選択します。 [データベース|データ
ベースへの接続]を選択して、ワークペインで[データベースへの接続]選択するか、ま
たはツールバーの[データベースへの接続]ボタンをクリックします。
• ツリーペインで接続解除されているデータベースを右クリックして、コンテキストメ
ニューから[データベースへの接続]を選択します。
• ツリーペインで、接続解除されているデータベースをダブルクリックします。
データベースが接続されると、データベースツリーはデータベース階層を展開します。
指定したユーザーでのデータベース接続
IBConsole の[データベース接続]ダイアログを利用して、サーバーログインで使用した
ユーザー名とパスワードとは異なるユーザー名とパスワードを使ってデータベースに接続
するには、次に示す方法のいずれかを行います。
• ツリーペインで接続解除されているデータベースを選択します。 [データベース|指定し
たユーザーでのデータベース接続]を選択するか、ワークペインで[指定したユーザーで
のデータベース接続]を選択します。
• ツリーペインで接続解除されているデータベースを右クリックして、コンテキストメ
ニューから[指定したユーザーでのデータベース接続]を選択します。[データベース接
続]ダイアログが表示されます。
第 5 章 ネットワーク設定
5-7
サーバーとデータベースへの接続
データベースに接続するには
1 [データベース]フィールドに表示されているデータベースが正しいかどうかを確認し
ます。
2
データベース用のユーザー名とパスワードをそれぞれ[ユーザー名]と[パスワード]
テキストフィールドに入力します。
3
ロールとして接続する場合は、[ロール]テキストフィールドでロールを指定します。
この情報は省略できます。事前に GRANT 文によってロールが割り当てられている場合
は、ロールを使って接続することにより、そのロールのすべての特権が与えられます。
[ロール]フィールドに文字を入力すると、[Role 名]フィールドが有効になります。
サーバーでロール名の大文字と小文字を区別する場合は、このボックスをオンにしま
す。デフォルトでは、ロール名の大文字と小文字は区別されません。
ロールの詳細は、6-8 ページの「SQL ロール」を参照してください。
4
SQL クライアントのダイアレクトを選択します。データベース接続のダイアレクトは、
クライアントやサーバーの優先順位の低い方のデフォルトになります。SQL ダイアレク
トの詳細は、A-4 ページの「SQL ダイアレクトを理解する」を参照してください。
5
また、使用するキャラクタセットを選択することもできます。ここで選択しないと、
サーバーは、作成時に指定されたデフォルトのキャラクタセットを使用します。
6 [接続]をクリックします。
データベースが接続されると、データベースツリーはデータベース階層を展開します。
データベースの接続解除
次のいずれかの方法で、IBConsole からデータベースを接続解除できます。
• ツリーペインで接続されているデータベースを選択するか、データベース階層下の任意の
ブランチを選択して、
[データベース|データベースからの切断]を選択するか、ツール
バーの[データベースからの切断]ボタンをクリックします。
• ツリーペインで接続されているデータベースを選択して、ワークペインで[ツールバー]
をダブルクリックします。
5-8 操 作 ガ イ ド
サーバーとデータベースへの接続
• ツリーペインで接続されているデータベースを右クリックして、コンテキストメニューか
ら[データベースからの切断]を選択します。
選択データベースへの接続を閉じることを確認する、確認ダイアログが表示されます。デー
タベースを接続解除する場合は[はい]をクリックし、それ以外の場合は[いいえ]をク
リックします。
データベースの登録解除
データベースを登録解除すると、ツリーペインからそのデータベースが削除されて、現在
のデータベースを自動的に接続解除します。
次のいずれかの方法で、IBConsole から接続解除されているサーバーの登録解除を行うこと
ができます。
• ツリーペインでデータベースを選択するか、データベース階層下の任意のブランチを選択
して、
[データベース|データベースエイリアスの削除]を選択します。
• ツリーペインでデータベースを選択して、ワークペインで[データベースエイリアスの削
除]をダブルクリックします。
• ツリーペインでデータベースを右クリックして、コンテキストメニューから[データベー
スエイリアスの削除]を選択します。
データベースの登録解除を確認する、確認ダイアログが表示されます。データベースを登録
解除する場合は[はい]をクリックし、それ以外の場合は[いいえ]をクリックします。
接続の指定例
以下に、さまざまなサーバー上のデータベースへの接続例をいくつか挙げます。
• Windows サーバーの場合は、データベースのパス名に適切なドライブ文字が入っていなけ
ればなりません。次の例では、ローカルデータベースに接続します。
D:¥users¥accting¥fin¥accred.ib
• 次の例は、TCP/IP プロトコルを使ってリモートサーバーのデータベースに接続します。
ntserver:D:¥users¥accting¥fin¥accred.ib
• NetBEUI で接続するには(Windows サーバープラットフォームのみ)、UNC 記法を使用し
ます。
¥¥ntserver¥D:¥users¥accting¥fin¥accred.ib
• UNIX または Linux サーバーの場合は、データベースの完全な絶対ディレクトリパスを入力
しなければなりません。次に例を示します。
server:/usr/accting/fin/accred.ib
第 5 章 ネットワーク設定
5-9
ネットワーク通信の暗号化
ネットワーク通信の暗号化
リモート InterBase クライアントにデータベース サーバーから送信される情報は、送信処理
中に暗号が解除されます。送信前にデータが暗号化されていたときでも同様です。これによ
りセキュリティが侵害される機会が生まれます。これを保護するために、InterBase の OTW
(通信時)暗号機能を使用して、通信処理中にデータを暗号化できます。
InterBase でデータベース テーブルのデータベースや個別の列を暗号化することもできま
す。方法の詳細については、『データ定義ガイド』を参照してください。
メモ
OTW 機能は、InterBase データベースのユーザー名とパスワードとともに使うように設計さ
れています。置き換えられるということではありません。
要件と制約
InterBase の OTW 暗号は SSL v3 と TLS v1 セキュリティ プロトコルで実現されています。
SSL では X.509 標準を PKI (公開鍵基盤)に使用します。InterBase クライアントとサーバー
の両方で、
OTW 暗号を使用するために X.509 ファイルをインストールする必要があります。
クライアント サイドとサーバー サイドの両方で、InterBase では次の規約を使います。
• すべての X.509 PKI(公開鍵基盤)ファイル(証明書ファイルと CA ファイルを含む)は
PEM(Privacy Enhanced Mail)形式である必要があります。
• CERTFILE と IBSSL_SERVER_CERTFILE ではじまるパラメータは、常に PEM 形式ファイル(CA
署名証明書と私有鍵(private key)
)を参照します。これらのファイルは配布できません。
• CA ではじまるパラメータ、つまりクライアントでの CAPATH や CAFILE、サーバーでの
IBSSL_SERVER_CAFILE や IBSSL_SERVER_CAPATH は、常に公開鍵証明書を参照します。
• InterBase 2009 では、標準のデータ暗号化(DES)の使用をサポートします。高度暗号化(AES)
を使用するには、米国の輸出規制のため、InterBase から高度暗号化ライセンスを取得し、
サーバー コンピュータにインストールする必要があります。
メモ
InterBase JDBC ドライバでは、現在のところ OTW 機能をサポートしていません。
OTW 暗号の設定
InterBase OTW 暗号は 2 つの部分(サーバー サイドとクライアント サイド)で構成され、
サーバーをセキュリティで保護するために機能します。次のセクションでは、サーバー サ
イドとクライアント サイドでの OTW の設定方法について説明します。サンプルの OTW
設定では次の手順を実行します。
サーバー サイドまたはクライアント サイドで OTW 暗号を設定する前に、CA(認証局)ベ
ンダーから必要なセキュリティ証明書を入手する必要があります。InterBase ではこれらの
証明書を使用して ID 情報を検証します。
セキュリティ証明書の生成
OTW では次の証明書の生成と使用が必要です。
• サーバー用公開鍵証明書。たとえば、ibserverCAfile.pem です。
• サーバーの私有鍵とサーバー証明書。たとえば、ibserver.pem です。
5-10 操 作 ガ イ ド
ネットワーク通信の暗号化
任意の SSL ツールでこれらの証明書を生成できます。また IT 部門または CA ベンダーから
入手してください。OpenSSL で SSL 証明書を作成する方法については、次の Web サイトを
確認してください。
• http://www.openssl.org/docs/apps/openssl.html
クライアント サイドの設定
クライアント アプリケーションは、OTW 暗号を実行するために必要な InterBase クライア
ント ライブラリを接続文字列で指定します。接続文字列には、次の構文で指定するとおり、
データベース パス / 名の前に OTW パラメータが含まれます。
構文
クライアント サイドで OTW を有効化するには、データベース接続文字列で次の構文を使
用します。
<secure server host name>[/secure server port name | secure server port
number]?OTWENABLE[?CAFILE=CA ファイルのフルパス | ?CAPATH= CA 証明書を含むディレ
クトリ名 |?CERTFILE= クライアント証明書ファイルの名前 ][?PASSPHRASEFILE= パスフ
レーズ ファイル名 |?PASSPHRASE= パスフレーズ ]??:<database path>/<database name>
'?OTWENABLE' ではじまり、'??' で終わることが必要です。OTW 暗号パラメータの区切りと
して機能します。構文サンプルで使用したオプションの詳細については、表 5.2 を参照し
てください。
表 5.2
クライアント サイドの OTW オプション
オプション
説明
secure server host
name
セキュア InterBase サーバーをホストするコンピュータの完全修飾ドメイン名
のホスト名、または IP アドレスです。コンピュータに複数のネットワーク イ
ンターフェイス カードがある場合は、InterBase サーバーにより使用されるイ
ンターフェイスのホスト名または IP を定義します。
secure server port
name
リモート サーバーのソケット ポートに関連付けられたローカル サービス名
がある場合は、ここにその名前を指定します。Unix では /etc/services ファイ
ルに、Windows では <windows system directory>/drivers/etc/services で一般
に定義されています。クライアント ライブラリにより、これは接続時にソケッ
ト ポート番号に自動的に変換されます。
secure server port
number
リモート サーバーがセキュア接続リクエストをリスンするソケット ポート番
号。ここか、前のポート名のいずれかを指定します。両方は必要ありません。
第 5 章 ネットワーク設定
5-11
ネットワーク通信の暗号化
表 5.2
クライアント サイドの OTW オプション
オプション
説明
OTWENABLE
これは、他の OTW パラメータを指定するためと接続をセキュリティで保護する
ために設定する必要があります。
CAFILE
証明書ファイルの場所。デフォルトでは、InterBase は ibserverCAfile.pem を
ユーザーのホーム ディレクトリを検索します。CAFILE と CAPATH(次に定義)
は標準 SSL 要件のように PEM 形式に従う必要があります。クライアントでは
このファイルを作成する必要はありません。このファイルは、接続先のサー
バーのデータベース管理者により作成されます。ユーザー自身がこのファイ
ルを生成した場合は、公開証明書ファイルがサーバーの DNS に証明書がバイ
ンドされて作成されていることを確認してください。この DNS は、クライア
ントで使用された <secure server host name> に一致する必要があります。
CAPATH
CAPATH を使用する場合は、ディレクトリの各ファイルは、単一の CA 証明書の
みを含む必要があり、ファイルに、サブジェクト名のハッシュと ".0" 拡張子
が付いている必要があります。このオプションにデフォルト値はありません。
CAPATH ではなく CAFILE を使用することをお勧めします。両方指定した場合は、
CAFILE が使用されます。サーバーをホストする組織から、CA ファイルを入手
します。このファイルは、正規で、検証済みのサーバーに対する接続であるこ
とを確認するために使用します。使用する CA を参照していることを確認する
必要があります。詳細については、5-13 ページの「"c_rehash" コマンドにつ
いて」を参照してください。
さらに、クライアントによるサーバーの検証を有効にする必要がある場合は、表 5.3 に説
明があるパラメータを使用できます。例を表の後に示します。
表 5.3
クライアント サーバー検証のパラメータ
パラメータ名
説明
CERTFILE
クライアント証明書ファイルの場所と名前。この証明書は、SSL 接続フェー
ズ中にサーバーに送信されます。CERTFILE は PEM 形式であり、クライアント
証明書と私有鍵を含む必要があります。
PASSPHRASEFILE
クライアントの私有鍵のパスフレーズを含むテキスト ファイルの名前と場
所です。PASSPHRASEFILE パラメータまたは PASSPHRASE パラメータのいずれか
を使用できます。
PASSPHRASE
私有鍵のパスフレーズを指定します。PASSPHRASEFILE パラメータまたは
PASSPHRASE パラメータのいずれかを使用できます。
次にこれらのパラメータを isql コマンドで使用する方法のサンプルを示します。
isql> connect 'localhost/gds_ssl?OTWENABLE?PASSPHRASE=clientkey?
CERTFILE=c:\\ib_builds\\InterBase\\secureserver\\client\\client.pem?
CAFILE=c:\\ib_builds\\InterBase\\secureserver\\client\\
serverCAfile.pem??:c:/foo.ib'
5-12 操 作 ガ イ ド
ネットワーク通信の暗号化
"c_rehash" コマンドについて
同等の CAFILE パラメータではなく CAPATH パラメータ(サーバーとクライアント両方)を使
用する場合にこのコマンドを使用します。CAPATH を使用しない、さらにディレクトリを設
定する方法に関する詳細情報が必要な場合は、OpenSSL の Web サイトにアクセスしてくだ
さい。
"c_rehash" は OpenSSL のコマンドです。このスクリプトにより、証明書のディレクトリに
シンボリック リンクが自動的に作成されます。たとえば、some/where/certs というディレ
クトリがあり、複数の CA 証明書が含まれている、さらに CAPATH ディレクトリとしてこの
ディレクトリを準備することを考えます。この場合、次のコマンドを使用できます。
cd /some/where/certs
c_rehash .
サーバー サイドの設定
クライアント サイドで OTW を有効化した後に、SSL 設定ファイル "ibss.config" の設定パ
ラ メ ー タ を 変 更 す る 必 要 が あります。 このファイルは "<install_directory>\secure\
server" ディレクトリにあります。この設定ファイルには、サーバーで必要な情報が含まれ
ます。このファイルを設定する方法についての手順を次に示します。
さらに、InterBase サーバーでは 2 種類の DH(Diffie-Hellman)パラメータ ファイルが動作
するために必要です。DH パラメータ ファイルの詳細については、5-15 ページの「DH パラ
メータ ファイルの生成」を参照してください。
ibss.config ファイルの変更
次にサンプルの ibss.config ファイルを示します。
IBSSL_SERVER_HOST_NAME=localhost
IBSSL_SERVER_PORT_NO=3065
IBSSL_SERVER_PASSPHRASE=serverkey
IBSSL_SERVER_CERTFILE=<install_directory>/secure/server/ibserver.pem
#IBSSL_SERVER_PASSPHRASEFILE=c:/secure/pass.txt
#example comment line
#only needed for client verification
#IBSSL_SERVER_VERIFY_CLIENT
#IBSSL_SERVER_CAFILE=<install_directory>/secure/server/root.pem
第 5 章 ネットワーク設定
5-13
ネットワーク通信の暗号化
表 5.4 では前に示したサンプルの各パラメータについて説明します。
表 5.4
サーバー サイド設定パラメータ
パラメータ
説明
IBSSL_SERVER_PORT_NO と
IBSSL_SERVER_HOST_NAME
InterBase サーバーのポート名とホスト名。つまり InterBase サー
バーが動作している SSL コンピュータ名(localhost も使用可能)と
SSL ポート名です。デフォルト値は、'localhost' と '3065' です。
IBSSL_SERVER_CERTFILE
ファイルに格納された私有鍵の場所です。このファイルはサー
バーで暗号化のために使用されます (デフォルトの場所とファ
。
イル名は、<install_directory>/secure/server/ibserver.pem)
CERTFILE は PEM 形式であり、証明書と私有鍵を含む必要があり
ます。
IBSSL_SERVER_PASSPHRASEFILE
パスフレーズを含むファイルの場所です。これはセキュリティで
保護することが必要です。このファイルに正しいアクセス権が設
定されていることを確認し、起動中にこのファイルへの読み取り
アクセスのみが、サーバーに必要です。ログ ファイルにはパスフ
レーズがロードされていないというメッセージが記録されます。
つまり、リムーバブル メディアにパスフレーズを格納でき、一度
サーバーを起動した後に、そのメディア(つまりパスフレーズ)
を安全に取り外すことができます。
IBSSL_SERVER_PASSPHRASE
サーバー証明書ファイルとともに使用されるサーバー パスフ
レーズを指定します。IBSSL_SERVER_PASSPHRASEFILE の代わりにこ
れを使用します。両方が設定されている場合に、
IBSSL_SERVER_PASSPHRASE が IBSSL_SERVER_PASSPHRASEFILE ではな
く使用されます。両方が設定されていない場合に、InterBase では
私有鍵にパスフレーズが含まれないと想定します。
IBSSL_SERVER_VERIFY_CLIENT
このパラメータが設定されている場合は、クライアントが証明書
を送信したことをサーバーが確認します。この証明書は
IBSSL_SERVER_CAFILE で指定したファイル(または
IBSSL_SERVER_CAPATH で指定されたディレクトリ)に対して検証さ
れます。
IBSSL_SERVER_CAFILE
CA ファイルを含むファイルの場所で、クライアント証明書を検
証するために使用できます。このファイルにデフォルト値はあり
ません。ただし、<install_directory>/secure/server/ にファイル
を配置し、ibrootcert.pem という名前を付けることをお勧めしま
す。このファイルは PEM 形式であり、IBSSL_SERVER_VERIFY_CLIENT
フラグが設定されている場合にのみ必要です。
IBSSL_SERVER_CAPATH
IBSSL_SERVER_CAFILE と同じ目的で使用されます。ただし、この場
合、パラメータは PEM 形式の CA 証明書に含まれるディレクトリ
を指しています。これらのファイルはそれぞれ 1 つの CA 証明書
を含み、IBSSL_SERVER_VERIFY_CLIENT フラグが設定されている場合
にのみ必要です。これらのファイルは CA サブジェクト名のハッ
シュ値で検索されます。この名前は設定されている必要がありま
す。このコマンド(複数の PEM ファイルを CAPATH でアクセスでき
るディレクトリに変換するために使用できる)の詳細については、
5-13 ページの「"c_rehash" コマンドについて」を参照してくだ
さい。
さらに、InterBase の ibss_config ファイルでは次の条件があります。
5-14 操 作 ガ イ ド
ネットワーク通信の暗号化
• このファイルの一般的な形式は、<parameter_name>=value です。
• "#" ではじまる行は、コメントです。
• 1 行に 1,023 文字以上ある行は、1,023 文字に切り詰められます。
• 行の末尾にあるスペースは、名前や数値の一部と見なされます。したがって、行の末尾に
スペースを入れないでください。ファイル名の場合、ファイル名を引用符で囲むと、行の
末尾にある非表示のスペース文字での問題を回避します。
DH パラメータ ファイルの生成
前に説明したとおり、OTW を使うには、サーバーでは 2 種類の DH(Diffie-Hellman)パラ
メ ー タ フ ァ イ ル も 必 要 です。<install_directory>/secure/server に配置されている
dh512.pem と dh1024.pem というファイルです。InterBase では DH 鍵交換プロトコル(DSA
ベースまたは RSA ベース)で SSL 接続を確立します。また、InterBase では短期モードを使っ
て PFS(public-key forward secrecy)を保証します。
これらのファイルがインストールしたソフトウェアに固有であるようにする場合は、独自
の DH パラメータ ファイルを生成します。独自のファイルを生成しない場合は、InterBase で
用意されているデフォルトのファイルが使用されます。InterBase サーバーで正常に SSL 接
続できるように、これらのファイルが必要です。
DH パラメータ ファイルを作成するには、次の構文を使用します。
openssl dhparam -check -text -5 512 -out dh512.pem
openssl dhparam -check -text -5 1024 -out dh1024.pem
これらのファイルを生成した後は、<install_directory>/secure/server ディレクトリにコ
ピーします。
OTW のサンプル設定
次のサンプル設定は、ユーザーのネットワークで OTW を効果的に有効化し実装するように
設計されています。
サンプル 1:クライアントとサーバーの設定(サーバーでクライアント
を検証しない場合)
これは多くの InterBase のユーザーが使用する設定です。この設定では、サーバーの ID が
サーバー証明書に記載されます。これによりクライアントがサーバーが正しい接続先であ
ることを検証します。またクライアントはクライアントにある CA ファイルに基づいて
サーバー証明書を認証します。このセットアップでは、取得したライセンスに基づいて、
AES(ライセンスが有効)または DES (デフォルト)で、クライアントとサーバーが通信
するように設定します。
サンプル 1:サーバーの設定
サンプル サーバーで OTW を設定するには、次の手順を実行します。
1 ibserverCAfile.pem と ibserver.pem ファイルを作成します。
2 ibserver.pem ファイルを <install_directory>/secure/server/ にコピーします。
第 5 章 ネットワーク設定
5-15
ネットワーク通信の暗号化
3 <install_directory>/secure/server/
ディレクトリに ibss_config を ibss_config デ
フォルト ファイルからコピーまたは作成します。
4
ユーザーの組織で固有のファイルが必要な場合は、
<install_directory>/secure/server ディレクトリに 2 つの dhparam ファイルを作成し、
設定します。
5
サーバーを起動します。SSL 接続をポート 3065(デフォルト)で受信するように設定さ
れています。
サンプル 1:クライアントの設定
サンプル クライアントで OTW を設定するには、次の手順を実行します。
1
サーバーの DBA から入手した ibserverCAfile.pem をユーザーのホーム ディレクトリに
コピーします。
2 isql を使用して、URL として次の値を使用して接続します。サーバーとクライアント
が同じコンピュータにあり、ホスト名が "localhost" であることを仮定します。
isql> connect "localhost/3065?OTWENABLE??:c:/foo.ib";
OTW を使用するための設定が完了しました。この例では、使用するすべての証明書と CA
ファイルに対してデフォルトの場所を使用しました。デフォルト値を使用しないで、サー
バー ファイルの場所を変更することを決定した場合は、ibss_config ファイルの
IBSSL_SERVER_CERTFILE パラメータを PEM 形式の証明書(私有鍵を含む)ファイルを指す
ように変更する必要があります。
ホーム ディレクトリ以外のディレクトリに(クライアント コンピュータで)CA ファイル
がある場合は、接続に次のコマンドを使用します。
isql> connect "localhost/3065?OTWENABLE?CAFILE=<CA ファイルの場所と
名前 >??:c:/foo.ib";
サンプル 2:クライアントとサーバーの設定(クライアントを検証する
場合)
InterBase でクライアント サイド検証を設定するには、サーバーとクライアントの設定でサ
ンプル 1 のすべての手順を最初に実行する必要があります。この例では、InterBase が C:\
InterBase にインストールされていると仮定します。
サンプル 2:サーバーの設定
サンプル サーバーを設定するには:
1 ibrootcert.pem
ファイルを <install_directory>/secure/server ディレクトリにコ
ピーします。これはサーバーでクライアントを識別するために使用する公開鍵証明書で
す。
2 ibss_config ファイルをサーバーでクライアント検証が有効であることと、公開鍵証明
書の場所を示すように変更する必要があります。次の値を
<install_directory>/secure/server/ibss_config ファイルに追加することによって実
行します。
IBSSL_SERVER_VERIFY_CLIENT
5-16 操 作 ガ イ ド
接続のトラブルシューティング
IBSSL_SERVER_CAFILE=c:\InterBase\secure\server\ibrootcert.pem
サンプル 2:クライアントの設定
サンプル クライアントを設定するには:
1 ibclient.pem ファイル(PEM 形式ファイル、クライアント証明書と私有鍵を含む)を
クライアントの HOME ディレクトリにコピーします。HOME ディレクトリは C:\smistry を
仮定します。したがって、ファイルの完全パスは c:/smistry/ibclient.pem です。
2
接続 URL にユーザーのクライアント証明書と私有鍵の場所を指定します。たとえば、
isql で c:/foo.ib に接続する場合は、コマンドは次のようになります。
isql> connect "localhost/3065?OTWENABLE?CERTFILE=C:\smistry\
ibclient.pem??:c:/foo.ib";
接続のトラブルシューティング
ここでは、ネットワーク構成とクライアント / サーバー接続に関連する問題のトラブル
シューティングのガイドラインを説明します。ネットワーク上でサーバーへのクライアン
ト接続に問題がある場合は、その原因を診断するために次の手順を参照してください。
Windows では、
[コミュニケーションの診断]ダイアログを使用して、これらのテストを行
うことができます。詳細は、5-23 ページの「コミュニケーションの診断」を参照してくだ
さい。
接続不能エラー
クライアントがサーバーホストにまったくアクセスできない場合、または gdb_db サービス
の応答がない場合は「接続不能」エラーになります。このエラーの原因を診断するために、
以下のチェックリストを利用してください。
クライアントとサーバーの間に低レベルのネットワークアクセスがあ
りますか ?
ping コマンドを使用すると、クライアントがサーバーにアクセスできないのは、物理的に
ネットワークが切断されているからなのか、またはネットワークの設定が問題なのかをす
ばやくテストできます。次のように使用します。
ping servername
ping が返すエラーメッセージは、ネットワーク障害があることを示します。ネットワーク
コネクタが接続されているか、ネットワークワイヤーに損傷がないか、クライアントとサー
バーのソフトウェアが適切に設定されているかなどをチェックしてください。
問題のクライアントから他のサーバーへの接続テストを行います。成功した場合は、クラ
イアント上のネットワーク設定は正しく行われています。
他のクライアントから InterBase のサーバーホストへの接続をテストします。成功した場合
は、サーバー上のネットワーク設定は正しく行われています。
第 5 章 ネットワーク設定
5-17
接続のトラブルシューティング
クライアントはサーバーのホスト名を解析できますか ?
InterBase クライアントは、一部の Linux ディストリビューションを除いて、IP アドレスで
なく名前でサーバーを指定します。したがって、クライアントはサーバーのホスト名を解析
できなければなりません。TCP/IP では、ホスト名を IP アドレスにマッピングする hosts
ファイルをクライアント上に保持するか、またはこのマップを解析するために DNS サー
バーまたは WINS サーバーに問い合わせます。問題のサーバーホストの正しいエントリが
ネームサーバーにあるかどうかを確認してください。
サーバーはファイアウォールの後ろにありますか ?
データベースサーバーがソフトウェアまたはハードウェアのファイアウォールの後ろにあ
る場合は、すべてのネットワーク通信は制限されて、クライアントはサーバーに到達でき
なくなります。ファイアウォールによっては、クライアントが接続しようとするポートに
よってトラフィックを許可したり制限するものがあります。このため、特定のサービスが
サーバーに到達できるかどうかは明確でありません。IP アドレスが解析できても、接続で
きるということではなく、単に InterBase サーバーホストの名前を解析するネームサーバー
にクライアントが到達できるということを示すだけです。
クライアントがファイアウォールでサーバーから分離されている場合、クライアントは接
続することができません。
クライアントとサーバーは異なるサブネットにありますか ?
NetBEUI はサブネット間でネットワーク通信を転送することはできません。他のプロトコ
ルは、サブネット間でトラフィックを制限するように構成することができます。クライアン
トとサーバーが複数のサブネットを持った複雑なネットワーク上にある場合は、そのネッ
トワーク環境で、特定のプロトコルを使ってクライアントと問題のサーバー間でネット
ワーク通信を転送できるかどうかをネットワーク管理者にたずねてください。
データベースにローカル接続できますか ?
ibserver プロセスがサーバー上にあり、データベースに接続できるかどうかを確認するため
に、ローカルデータベース接続を行ってみてください。
1
データベースサーバーホストのコンソールにログインします。そして、コマンドライン
isql などのアプリケーションを実行します。
2
ホスト名を指定しないでデータベースに接続してみます。パスだけを指定してくださ
い。
[コミュニケーションの診断]ダイアログでも、ローカルデータベース接続テストを行うこ
とができます。詳細は、「5-23 ページの「[DB 接続]タブ」」を参照してください。
メモ
ローカル接続モードは UNIX サーバーでは使用できません。
データベースループバックに接続できますか ?
クライアント / サーバー接続をシミュレートします。クライアントの環境設定に変数を追
加しないで、ネットワークを介さずにループバックモードで接続して、サーバーの環境設
定をテストすることができます。
1
データベースサーバーホストのコンソールにログインします。コマンドライン isql や
IBConsole isql などのアプリケーションを実行します。
5-18 操 作 ガ イ ド
接続のトラブルシューティング
2
データベースサーバーホストがクライアントホストになるわけですが、あえてリモート
接続を指定してデータベースに接続してみます。
このテストが成功してもしなくても、これによって焦点を絞っていくことができます。成功
しなかった場合、サーバーの設定に問題のあることが予測できます。また、成功すれば、
サーバーに問題はないことが予測でき、クライアントのテストに絞ることができます。
サーバーは InterBase ポートを認識できますか ?
サーバー上の ibserver プロセスが起動していなかった場合、gds_db サービスに接続しよう
としても応答はありません(ポート 3050)。
サ ーバ ー で ibserver プロ セスを起動します。UNIX では ibmgr -start を、Windows では
InterBase Manager を使用します。詳細は、第 4 章「サーバーの環境設定」を参照してくだ
さい。
「サービス」ファイルがクライアントとサーバーに設定されていますか ?
サービスファイルには、指定されたサービス gds_db に対応したポート番号を示す正しいエ
ントリがなければなりません。このファイルには、サーバー上だけでなく、クライアント上
でもアクセスできなければなりません。
gds_db
3050/tcp
# InterBase Server
このファイルは次の場所にあります。
Windows サーバープラットフォーム:C:¥WINNT¥system32¥drivers¥etc¥services
Windows 非サーバープラットフォーム:C:¥windows¥services
UNIX:/etc/services
NIS を持つ UNIX 環境では、NIS サーバーがすべての UNIX ワークステーション上の NIS ク
ライアントにサービスファイルを提供するように設定できます。
接続拒否エラー
クライアントがサーバーホストに達した結果、gds_db サービスは応答するがデータベース
に接続できない場合は、
「接続拒否」エラーになります。このエラーの原因を診断するため
のチェックリストを以下に示します。
データベースへの正しいパスがわかっていますか ?
データベースへの正しいパスを指定したかどうかを確認します。次の点に注意してくださ
い。
• NT/2000 では、パスとともにドライブ文字を指定する必要があります。
• UNIX では、パスは大文字と小文字が区別されます。
• C または C++ コードの中の文字列で 2 つの円記号(バックスラッシュ)を使用する必要が
ない場合は、スラッシュ(/)と円記号(¥)はどちらを使用してもかまいません。
第 5 章 ネットワーク設定
5-19
UNIX ホストの信頼関係が確立されていますか ?
UNIX のユーザー信頼機能を使用するには、クライアントとサーバーの間に「信頼ホスト」
の関係がなければなりません。6-2 ページの「UNIX ユーザー」を参照してください。
データベースはネットワークファイルシステム上にありますか ?
データベースファイルは NFS ファイルシステムまたはマップドライブにあってはなりませ
ん。ibserver プロセスが接続を拒否するか、または接続要求をファイルサーバー上で実行さ
れている InterBase サービスに移します。詳細は、7-7 ページの「ネットワークファイルシ
ステム」を参照してください。
このようなときは、データベースサーバーのローカルなハードディスクのファイルシステ
ム上にデータベースを移動してください。
ユーザーとパスワードは正しいですか ?
InterBase セキュリティデータベース(デフォルトでは admin.ib)にあるエントリと一致する
有効なユーザーとパスワードを使用しない限り、クライアントアプリケーションを使用す
ることはできません。
サーバーはデータベースファイルに対する許可を得ていますか ?
ibserver プロセスは、オペレーティングシステムレベルでデータベースファイルを読んだり
書いたりするための権限を得ている必要があります。データベースファイル上のその権限
と ibserver プロセスの uid をチェックしてください (UNIX 上では、ユーザー名 InterBase、
つまり非スーパーユーザーの uid で ibserver を実行するオプションを選択できる)。
ユーザーとパスワードが登録されている InterBase セキュリティデータベース(デフォルト
では admin.ib)は、ibserver プロセスによって書き込み可能でなければなりません。
サーバーは InterBase のインストールディレクトリにファイルを作成す
る権限を得ていますか ?
ibserver プロセスは、InterBase ディレクトリ(デフォルトでは、UNIX 上の /usr/InterBase、
Windows 上の C:¥CodeGear¥InterBase)の書き込み許可を得ていなければなりません。サー
バープロセスはファイル InterBase.log とその他の一時ファイルに書き込みおよび作成でき
なければなりません。
インターネット自動ダイヤルアップの無効化
Microsoft Windows オペレーティングシステムは、モデムを使ってインターネットに接続す
るユーザーに便利なネットワーク機能を提供しています。システムで発生した TCP/IP リ
クエストは、自動的なダイヤルアッププログラムをアクティブにします。これは、Web ブ
ラウザや電子メールクライアントアプリケーションを起動させたときに即座に接続したい
ユーザーに効果的です。
この便利な機能は、クライアント / サーバーアプリケーションを使ってローカルネットワー
ク上の InterBase サーバーにアクセスするシステムでは必要ありません。クライアントが呼
び出す TCP/IP サービスリクエストは、Windows の自動ダイヤラーをトリガーします。これ
は、クライアントからサーバーへのすばやいネットワーク接続の妨げになります。
5-20 操 作 ガ イ ド
接続のトラブルシューティング
ここでは、Windows オペレーティングシステムの自動ダイヤルアップ機能を抑制する方法
について説明します。いずれかの方法を行えば、必要なネットワーク設定を行うことができ
ます。
ネットワークアダプタのバインディング順序の変更
ダイヤルアップアダプタとローカルネットワーク用のイーサネットアダプタの両方がある
ことがあります。この場合、Windows では、この 2 つのアダプタのバインディング順序を
反対にして、ダイヤルアップアダプタの前にイーサネットアダプタが TCP/IP リクエストを
処理するように設定できます。それには、コントロールパネルで[ネットワーク|バインド
|すべてのアダプタ|下へ]を選択します。
ローカルなイーサネットアダプタは、ローカルで処理できる TCP/IP リクエストを処理し、
インターネットリクエストのようなローカルで処理できないリクエストについては、リス
ト上の次のアダプタであるダイヤルアップアダプタに渡します。
レジストリでの自動ダイヤルアップの無効化
次のことを行います。
1
2
レジストリエディタ regedit.exe を起動します。
レジストリキー
HKEY_LOCAL_MACHINE¥Software¥Microsoft¥Windows¥CurrentVersion¥Internet Setti
ngs: EnableAutoDial に移動します。
3
値を 0 から 1 に変更します。
ローカルネットワーク動作に対して RAS がダイヤルするのを抑制する
Windows NT RAS を使用している場合、次のことを行います。
1
2
regedit.exe で、レジストリエディタを起動します。
レジストリキー HKEY_CURRENT_USER¥{Software¥{Microsoft¥{RAS Autodial¥{
Addresses に移動します。
コマンドプロンプトで rasautou -s を入力すると、より簡単です。
3
サブキーでローカルアドレスと名前を探します。キーを選択して、[編集]メニューか
ら[削除]を選択します。
4
レジストリエディタを閉じます。
アドレスを無効リストに追加したい場合があります。
5
6
regedit.exe ではなく、regedt32.exe でレジストリエディタを起動します。
レジストリキー HKEY_CURRENT_USER¥{Software¥{Microsoft¥{RAS Autodial¥{
Control に移動します。
7 [Disabled Addresses]をダブルクリックして、アドレスを新しい行に追加します。追加
作業が終了したら、[OK]をクリックします。
8
レジストリエディタを閉じます。
以上の作業が終了したら、マシンを再起動してください。
第 5 章 ネットワーク設定
5-21
接続のトラブルシューティング
その他のエラー
Unknown Win32 error 10061
このエラーがよく発生するのは、サーバーホスト上の InterBase ソフトウェアにサーバーア
クセスライセンスがない場合です。クライアントがネットワーク上からアクセスできるよ
うに、InterBase サーバーがライセンスされていることを確認します。
ホストへのネットワークリクエストを確立できない
このエラーは、InterBase クライアントがサーバーホストへのネットワーク接続を確立でき
ない場合に発生します。このエラーの原因は、多種多様です。以下に一般的な原因を示しま
す。
• BDE Administrator では、InterBase 接続文字列が SERVER
NAME エイリアスプロパティに指定
されている必要があります。このプロパティを使用して、PATH エイリアスプロパティを使
用しないようにしなければなりません。そうしないと、ネットワークエラーのメッセージ
を受け取ることになります。
• InterBase クライアントは、gethostbyname() を呼び出して接続文字列のサーバー部分を IP
アドレスに変換しようとします。IP アドレスを提供すると、gethostbyname() はそれを解
析しようとしてエラーになります。Winsock 2 や Linux TCP/IP を含めた、最近の一部の
TCP/IP ドライバは、IP アドレスに見える文字列も解析します。Windows の場合、名前でホ
ストを指定するか、TCP/IP ドライバを Winsock 2 にアップグレードします。
• InterBase クライアントは、InterBase ネットワークサービスを名前で調べなければなりませ
ん。クライアントがサービスファイルで gds_db 用のエントリを見つけられない場合、サー
バーへの接続は失敗してネットワークエラーが発生することがあります。サービスファイ
ルのエントリをマニュアルで作成したり、InterBase を再インストールしてこのタスクを実
行することができます。
• 指定するサーバーは、使用するネットワーク上で動作していなければなりません。 ネット
ワークの中断のためにアクセスできないホストにホスト名が対応している(ホストが動作
していない)場合、接続要求はネットワークエラーで失敗します。
接続文字列の構文はクライアントがサーバーホストに接続するために使用する
ネットワークプロトコルによって決まります。5-9 ページの「接続の指定例」を参照して
ください。サーバープラットフォームが異なると、サポートするネットワークプロトコル
のサブセットも違ってきます。サーバーが接続文字列で示されたプロトコルをサポートし
ない場合、ネットワークエラーで接続は失敗します。 たとえば、NetBEUI 接続構文
(¥¥server¥C:¥path¥database.ib)は、サーバーが Windows XP Professional、または Windows2003
Server のときだけ機能します。サーバーが UNIX または Linux の場合にはこの構文は意味を
持ちません。
• InterBase
• ネットワーク接続要求は、InterBase のサーバーがインストールされていてサーバーホスト
上でアクティブな場合で、その InterBase のサーバーがリモート接続要求を受信するように
ライセンスされている場合にのみ、成功します。接続要求のリスニング処理がない場合、ク
ライアントの接続要求はネットワークエラーになります。InterBase のサーバーがサーバー
上にインストールされている(動作している)こと、およびライセンスにサーバー機能が
含まれていることを確認してください。
5-22 操 作 ガ イ ド
コミュニケーションの診断
コミュニケーションの診断
クライアント / サーバーシステムのネットワーク構成には、いくつかの異なったソフトウェ
アとハードウェアの層、およびこれらの層の適切な構成が含まれています。1 つ以上の層の
構成に誤りがある場合に、どこに問題があるのかいつも明らかにわかるとは限りません。
InterBase コミュニケーション診断は、既存または潜在的なネットワーク関連の問題につい
て各層を順番にテストすることで、問題の原因特定を手助けします。
次に示すいずれかの方法で、[コミュニケーションの診断]ダイアログを表示できます。
• ツリーペインで、接続解除されているサーバーを選択します。 [サーバー|接続設定の診
断]を選択します。
• [InterBase Servers]を右クリックするか、ツリーペインで接続解除されている任意のサー
バーを右クリックしてから、コンテキストメニューの[接続設定の診断]を選択します。
• ツリーペインで接続解除されているサーバーを選択して、ワークペインで[接続設定の診
断]をダブルクリックします。
実行可能な診断タイプは 4 つあります。[コミュニケーションの診断]ダイアログには診断
タイプごとに個別のタブがあります。
[DB 接続]タブ
このテストでは、InterBase クライアントライブラリを使って InterBase データベースへの接
続を行います。これは InterBase 操作の最も基本的なテストで、一般に基礎となるネット
ワークが正しく機能していることを確認した後で使用します。
図 5.4 [コミュニケーションの診断]ダイアログ:DB 接続
DB 接続テストを実行するには
1 [ローカルサーバー]オプションまたは[リモートサーバー]オプションのいずれかを
選択します。
第 5 章 ネットワーク設定
5-23
コミュニケーションの診断
2 [ローカルサーバー]を選択した場合、[サーバー]および[ネットワークプロトコル]、
および[エイリアス名]の情報は必要ありません。これらのテキストフィールドは入力
できなくなります。手順 5 に進んでください。
3 [リモートサーバー]を選択した場合、[サーバー]テキストフィールドにサーバーの名
前を入力します。
InterBase サーバー名はデータベースサーバーマシンの名前です。InterBase サーバープロ
セスそのものに対する特別な名前はありません。たとえば、サーバーが NT サーバー
“venus” 上で実行されている場合は[サーバー]テキストフィールドにこの名前を入力
します。
4
リモートサーバーを選択した場合は、ネットワークプロトコルを TCP/IP、NetBEUI、
名前付きパイプ、またはローカルから選択します。クライアントとサーバーの両方がサ
ポートしている場合にのみ、そのプロトコルは有効になります。
5
データベースのファイル名をパスを含めた形式で[データベース]テキストフィールド
に入力します。手順 1 で[ローカルサーバー]オプションを選択した場合、[参照]ボ
タン をクリックして対象ファイルを指定することもできます。[リモートサーバー]
オプションを選択した場合は、[参照]ボタンは使用できません。
6
データベース用のユーザー名とパスワードをそれぞれ[ユーザー名]と[パスワード]
テキストフィールドに入力します。
7 [テスト]をクリックして、結果ウィンドウの出力を調べます。
出力例(ローカル接続)
Attempting to attach to:
C:¥CodeGear¥InterBase¥examples¥Database¥employee.ib
Attaching ...Passed!
Detaching ...Passed!
InterBase Communication Test Passed!
[TCP/IP]タブ
このプロパティシートを使用して、Winsock TCP/IP 接続をテストします。
5-24 操 作 ガ イ ド
コミュニケーションの診断
図 5.5 [コミュニケーションの診断]ダイアログ:TCP/IP
Winsock テストを実行するには
1 [ホスト]テキストフィールドにネットワークホスト名または IP アドレスのいずれかを
入力します。
2 [サービス]ドロップダウンリストからサービス名または番号を選択します。たとえば、
21、Ping、3050、ftp、gds_db などを選択できます。
[サービス]ドロップダウンリストから[Ping]を選択して、往復の回数とパケット喪
失の統計概要を表示します。
3 [テスト]をクリックして、結果ウィンドウの出力を調べます。
出力例(ftp)
Initialized Winsock.
Attempting connection to DBSERVE.
Socket for connection obtained.
Found service ‘FTP’ at port ‘21’.
Connection established to host ‘DBSERVE’ on port 21.
TCP/IP Communication Test Passed!
出力例(ping)
Pinging DBSERVE [200.34.4.5] with 32 bytes of data.
Reply from 200.34.4.5: bytes=32 time=1ms TTL=128
Reply from 200.34.4.5: bytes=32 time=1ms TTL=128
Reply from 200.34.4.5: bytes=32 time=1ms TTL=128
Reply from 200.34.4.5: bytes=32 time=0ms TTL=128
Ping statistics for 200.34.4.5:
Packets:Send = 4, Received = 4, Lost = 0 (0%),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 1ms, Average = 0ms
第 5 章 ネットワーク設定
5-25
コミュニケーションの診断
表 5.5 [コミュニケーションの診断]による接続の問題の診断
エラーメッセージ
チェック項目
Failed to fond named port(指定さ
gds_db のエントリが gds_db 3050/tcp の形式でサービスファイルに
れたポートが見つからない)
あるか
(ホストに
Failed to connect to host
• ホスト名、ポート 3050
接続できない)
• InterBase Server が正しくインストールされているか、起動して
いるか、TCP/IP が設定できているか
Failed to resolve hostname
(ホスト
• ホスト名
名を解決できない)
• サーバーのエントリが hosts ファイルまたは DNS にあるか
• IP アドレスでなくホスト名を使用しているか
Unavailable database(データベー
スを使用できない)
InterBase サーバーが実行されているか:データベース接続を行う前
にサーバーを起動していなければなりません
[NetBEUI]タブ
NetBEUI はすべての Windows クライアントでサポートされますが、NetBEUI をサーバーと
してサポートするのは Windows サーバープラットフォームだけです。
このプロパティシートを使用して、クライアントとサーバー間の NetBEUI 接続をテストし
ます。
図 5.6 [コミュニケーションの診断]ダイアログ:NetBEUI
NetBEUI 接続をテストするには
1 [サーバー]ドロップダウンリストから、InterBase がインストールされている Windows
サーバーを選択します。テストするサーバーがこのリストに表示されない場合は、ド
ロップダウンリストのエディットボックス部分にサーバー名を入力できます。
2 [テスト]をクリックして、結果ウィンドウの出力を調べます。
5-26 操 作 ガ イ ド
コミュニケーションの診断
出力例(NetBEUI 接続)
Attempting to attach to DBSERVE using
the following named pipe:
¥¥dbserve¥pipe¥interbas¥server¥qds.db.
NetBEUI Communication Test Passed!
Microsoft Windows ネットワークがクライアントのデフォルトネットワークでない場合は、
接続できません。正しいユーザー名とパスワードで Windows ネットワークにログインして
ください。
第 5 章 ネットワーク設定
5-27
コミュニケーションの診断
5-28 操 作 ガ イ ド
第
章
データベース ユーザー管理
第6章
InterBase には、データベースへのアクセス方法および使用方法を制御することで、セキュ
リティの設定と強化を行うためのいくつかの方法があります。サーバーセキュリティには
次の機能があります。
• セキュリティデータベースへのユーザーの追加
• セキュリティデータベースからのユーザーの削除
• セキュリティデータベースのユーザー情報の変更
• セキュリティデータベースのユーザーリストの表示
• 埋め込みユーザー認証の有効化
• データベースエイリアスの作成
• データベースエイリアスの削除
• すべてのデータベースエイリアスの表示
この章では、これらのオプションの概要を説明します。ここでは、ユーザー管理ツールを取
り上げますが、特権を設定するための SQL 文は他の InterBase マニュアルに記載されていま
す。これらの内容は、該当箇所で参照してください。
セキュリティモデル
InterBase のセキュリティは、各サーバーホストの中核であるセキュリティデータベースに
依存します。このデータベース(デフォルトでは admin.ib)には、ホスト上のデータベース
と InterBase サービスへの接続を許可された正当な各ユーザーのレコードが含まれていま
す。各レコードには、ユーザーのログイン名と暗号化されたパスワードが含まれます。この
セキュリティデータベース内のエントリは、サーバーホスト上のすべてのデータベースに
適用されます。
ユーザー名は最大 31 文字で大文字と小文字の区別はありません。パスワードは 8 文字で大
文字と小文字が区別されます。
第 6 章 データベース ユーザー管理
6-1
セキュリティモデル
データベース管理作業を実行する前に、サーバーにログインしなければなりません。サー
バーにログインした後、サーバーにあるデータベースに接続することができます。
すべてのユーザーは、サーバーにログインするためにユーザー名とパスワードを入力しな
ければなりません。パスワードは、ネットワーク全体に送信されるために暗号化されます。
ユーザー名とパスワードはセキュリティデータベースの中のレコードと比較されます。一
致するレコードが見つかった場合にログインが成功します。
SYSDBA ユーザー
すべての InterBase サーバーは、デフォルトパスワード「masterkey」の SYSDBA ユーザーを
持っています。SYSDBA は特別なユーザーアカウントで、通常の SQL セキュリティを無視
してデータベースのバックアップやシャットダウンなどのタスクを実行できます。
SYSDBA はサーバー上で唯一の承認ユーザーです。SYSDBA はサーバー上の他のすべての
ユーザーを認定しなければなりません。ユーザー設定を追加、削除、変更してセキュリティ
データベースを更新できるのは SYSDBA ユーザーだけです。SYSDBA は、ツール gsec また
は IBConsole 使用して、セキュリティデータベースにユーザー名とパスワードを割り当て、
新しいユーザーを認定することができます。
重要
InterBase をインストールしたらできるだけ早く SYSDBA のパスワードを必ず変更してくだ
さい。SYSDBA パスワードを変更しない場合は、未承認ユーザーが簡単にアクセスできるの
で、データベースは安全でなくなります。
他のユーザー
SYSDBA アカウントでは、サーバーごとに他のユーザーを生成できます。gsec または
IBConsole を使ってセキュリティデータベース admin.ib にユーザーを登録、変更、削除でき
ます。これらのユーザーは、そのデータベースサーバーホスト上のすべてのデータベースへ
の接続が許可されます。サーバー上のデータベースを使用する各ユーザーのために、別個の
InterBase ユーザーを生成するのが一般的な設計方法です。しかし他の方法も可能です。次
に例を示します。
• パスワードの管理を簡単にするために、グループ全体が使用するための 1 つの InterBase
ユーザーを生成します。たとえば、FINANCE ユーザーは財務分析チームのすべてのスタッ
フのためのアクセス要求を受けることができます。このチームは、1 つのパスワードだけを
覚えればよいことになります。
• 個別の特権設定要求で保証されるので、1 つのグループに 1 つの InterBase ユーザーを生成
します。たとえば、Erin と Manuel がデータベースの中のデータへ同じアクセスを行う場合
は、彼女らは同じ InterBase ユーザーアカウントを簡単に使用できます。
UNIX ユーザー
クライアントとサーバーの両方が UNIX の場合、クライアントホストを「信頼されたホス
ト」としてサーバーホストが扱うように設定することによって、UNIX ユーザーがデータ
ベースにアクセスできるようになります。
6-2 操 作 ガ イ ド
InterBase セキュリティデータベース
2 つ の ホ ス ト の 間 に 信 頼 されたホスト関 係を確立するには、1 つのエントリを /etc/
hosts.equiv または /etc/gds_hosts.equiv に追加します。前者のファイルには、すべてのサービ
ス(rlogin、rsh、rcp など)に対して信頼されたホストステータスを設定します。後者の
ファイルには、InterBase クライアント / サーバー接続だけに対して信頼されるホストステー
タスを設定します。両方のファイルの中のエントリのフォーマットは同じです。hosts.equiv
の詳細は、使用しているオペレーティングシステムのマニュアルを参照してください。
クライアントのログインはサーバー上でなければなりません。信頼されたホストを設定す
る方法は、hosts.equiv 以外に、クライアントのアカウントと同じサーバー上のアカウントの
ホームディレクトリの .rhosts を使用することもできます。
InterBase クライアントライブラリは、クライアントが以下のいずれかの方法でユーザー名
を指定しない場合に、InterBase ログインとして現在のクライアントの UNIX ログインを使
用します。
• データベースパラメータバッファ(dpb)のパラメータ:
『API ガイド』を参照
• コマンドラインオプション:たとえば、isql などのユーティリティの -usr オプション
• 環境変数:4-16 ページ の 「ISC_USER および ISC_PASSWORD」を参照。
注意
• Windows は UNIX のような「信頼されたホスト」のメカニズムを持っていないので、この
機能は Windows サーバーには実装されていません。
• Windows クライアントは、UNIX サーバーで信頼されたホストとして扱われません。
InterBase セキュリティデータベース
InterBase サーバーは、InterBase ホームディレクトリに置かれた特別なセキュリティデータ
ベースに承認ユーザーのユーザー名とパスワードを保存します。このデータベースのデ
フォルト名は admin.ib です。
セキュリティデータベースに別の名前を付けることもできます。この名前を変更する場合
は、ADMIN_DB を新しい名前に設定するエントリを ibconfig ファイルに追加する必要がありま
す。
ADMIN_DB newname.ib
メモ
旧バージョンの InterBase では、セキュリティデータベースの名前は isc4.gdb でした。WindowsME、
WindowsXP、Windows2003 Server では、gdb 拡張子を持つファイルが変更されるたびに自動的に
バックアップされるため、この拡張子を使用すると効率が低下します。そのため、InterBase で
は、データベース名に別の拡張子を使用することをお勧めします。
InterBase サーバーのすべてのユーザーは、InterBase セキュリティデータベースへのエント
リを必要とします。gsec セキュリティユーティリティを使用して、セキュリティデータベー
スの中の情報を表示、追加、修正、または削除することができます。IBConsole には同じ機
能のグラフィックインターフェイスがあります。次の表にセキュリティデータベースの内
容を示します。
第 6 章 データベース ユーザー管理
6-3
埋め込みユーザー認証の有効化
表 6.1
InterBase セキュリティデータベースの形式
列
必須かどうか
説明
ユーザー名
はい
ログインするときにユーザーが入力する名前。最大 31 文字
パスワード
はい
ユーザーのパスワード
• 大文字と小文字を区別
• 最初の 8 文字までが有効
• 長さの最大値:32 文字
UID
いいえ
ユーザー ID を指定する整数
GID
いいえ
グループ ID を指定する整数
Full name
いいえ
ユーザーの実際の名前(ログイン名とは別)
埋め込みユーザー認証の有効化
EUA(埋め込みユーザー認証)は、データベース ユーザー名とパスワード情報を直接デー
タベースに格納します。ユーザー認証情報がデータベースに埋め込まれると、外部から探索
に対してデータベースのメタデータ IP の保護が強化されます。EUA により移行可能なデー
タベースがさらに安全になります。
データベース所有者だけが、EUA の管理を許可されます。一般のユーザーは自分のユー
ザー アカウントのパスワードを変更できます。
EUA で SYSDBA ユーザー アカウントを使用することはオプションです。SYSDBA アカウン
トがある場合は、このアカウントには、このアカウントが埋め込まれたデータベースに対
して、任意の admin.ib とほとんど同じ特権があります。唯一の例外は、別のユーザーによっ
て実装された場合は、SYSDBA で EUA を管理制御できないことです。
重要
InterBase の暗号機能を使用するために、EUA を有効にする必要があります。この機能では
データベース ページと列の暗号が利用できます。暗号化されたデータベースや列へのアク
セス権は、EUA を有効にしたときに指定ユーザーに付与できます。InterBase 暗号機能の詳
細については、『InterBase データ定義ガイド』を参照してください。
iSQL を使った EUA の有効化
次のコマンドで EUA を有効化できます。
• 新しいデータベースを作成するときは、次の構文を使用します。
CREATE DATABASE < データベース名 > [WITH ADMIN OPTION]
ADMIN 句によりデータベースの RDB$USERS システム テーブルに、ユーザーの名前とパス
ワード情報が自動的に挿入されます。
• 既存のデータベースを変更するときは、次の構文を使用します。
ALTER DATABASE < データベース名 > [ADD ADMIN OPTION]
6-4 操 作 ガ イ ド
埋め込みユーザー認証の有効化
別の方法として、gsec コマンドライン ユーティリティに新しいオプション
-user_database [database_name] があります。これにより EUA が有効であるデータベース
のユーザー アカウントを管理するためにこのツールを使用できます。
EUA を無効にするには、次の構文を使用します。
ALTER DATABASE < データベース名 > [DROP ADMIN OPTION]
一度 EUA を無効にすると、サーバーの集中ユーザー認証データベース ADMIN.IB で、デー
タベースへのアクセスが認証されます。
IBConsole を使った EUA の有効化
IBConsole インターフェイスで新しいデータベースを作成するとき、IBConsole を使って
EUA を有効化できます。
IBConsole から EUA を有効化するには:
1
[Databases] を右クリックして、コンテキスト メニューから [ データベースの作成 ] を選
択します。
2
[ データベースの作成 ] (図 6.1 を参照)にある、[ 埋め込みユーザー認証 ] フィールド
で、デフォルト値 [No] を [Yes] に変更します。
図 6.1
[ データベースの作成 ] ダイアログ
[Yes] に変更して EUA
を有効にします。
3
必要に応じて、別の設定を変更して、[OK] を選択してデータベースを作成します。こ
れで EUA が有効になりました。
第 6 章 データベース ユーザー管理
6-5
システムテーブルのセキュリティ
ユーザーの追加と変更(EUA 有効化データベース)
EUA が有効なデータベースでユーザーを追加するには、isc_spb_user_dbname SPB(サービ
ス パラメータ ブロック)を isc_action_svc_add_user サービス アクションで使用します。
許可されているサービス アクションは isc_action_svc_xxx_user で、xxx は該当するアク
ションごとに add/modify/delete/display で置き換えます。
次のコード サンプルでは、EUA が有効なデータベースにユーザーを追加するため、この
SPB を使用する方法について説明します。
#ifdef EUA_DATABASE
*thd++ = isc_spb_user_dbname;
ADD_SPB_LENGTH (thd, strlen(target_db));
for (x = target_db; *x;)
*thd++ = *x++;
#endif
SPB やサービス アクションの使用の詳細については、
『InterBase API ガイド』を参照し
てください。
システムテーブルのセキュリティ
InterBase は、データベースメタデータを複数のシステムテーブルに保存します。これらの
テーブル間には複雑な依存関係があるため、十分な知識なしに書き込みを行うと、データ
ベースが破損する危険があります。このため、システムテーブルには、次のようなデフォ
ルトのセキュリティアクセス権が適用されています。
• デフォルトでは、PUBLIC ユーザーは、システムテーブルの SELECT 特権だけを持つ。
• データベースの所有者、SYSDBA ユーザー、およびオペレーティングシステム管理者(UNIX
の root または Windows サーバープラットフォームの Administrator)は、システムテーブル
に対して書き込み権を含むすべての権限を持ちます。これらのユーザーは、必要に応じて
GRANT 文を使用して、書き込み特権を個別のユーザーまたは PUBLIC に割り当てること
ができる。
古いデータベース
InterBase は、可能な限り、このデフォルトのセキュリティ(PUBLIC には書き込みアクセ
ス権がない)を古いデータベースにも適用します。
• データベースが ODS 10.1(InterBase 6.5 以降)に復元された場合は、gbak バックアップ / 復
元ユーティリティによって、そのデータベースにデフォルトのセキュリティが適用されま
す。
• バージョン 6.5 以降の InterBase サーバーが古いデータベースに接続し、古いデータベース
にデフォルトの特権がない場合は、ODS 10.0 以前のデータベースであっても、デフォルト
の特権が適用されます。
6-6 操 作 ガ イ ド
システムテーブルのセキュリティ
データベースセキュリティを変更するためのスクリプト
<ib_install>/examples/security ディレクトリに 3 つの SQL スクリプト (readmeta.sql、writemeta.sql、
blindmeta.sql)があります。isql を使用して、これらのスクリプトをデータベースに対して実行す
ると、システムテーブルのアクセス権を一度に変更できます。ただし、セキュリティ上の理由
により、rdb$users は変更できません。
• readmeta.sql は、デフォルトの PUBLIC アクセス権を適用します。PUBLIC 権限では、システ
ムテーブルから選択できるだけです。ただし、データベースの所有者、システム管理者、
および SYSDBA ユーザーはフルアクセス権を持ちます。このスクリプトを使用して、カス
タマイズされたシステムテーブル特権を持つデータベースをデフォルトに戻すことができ
ます。
• writemeta.sql は、すべてのシステムテーブル権限を PUBLIC に与えます。これは、InterBase
6.0 以前の動作と同じです。
• blindmeta.sql は、PUBLIC が持つすべてのシステムテーブル権限を無効にします。これによ
り、PUBLIC ユーザーはシステムテーブルに問い合わせできなくなります。PUBLIC ユー
ザーによって実行される InterBase やサードパーティのユーティリティも同様です。たとえ
ば、gstat、gbak、QLI、および IBConsole がシステムメタデータを問い合わせできなくなり
ます。開発者は、このスクリプトを使用して、テーブル、ストアドプロシージャ、トリガー
などを一般ユーザーや他の開発者から隠蔽することで、自分の知的所有権を保護できます。
ブラインドアクセスによって、一般のユーザーがデータベースに対するアドホックなクエ
リーを生成することを不可能でないにしても難しくすることは可能です。
データベースをブラインドアクセスにしても、ユーザーが InterBase データ定義言語
(DDL)を使って新しいデータベースオブジェクトを定義できなくなるわけではありま
せん。ブラインドアクセスは、ユーザーがシステムテーブルを直接問い合わせたり、そ
れに書き込むことを禁止するだけです。
isc_blob_lookup_desc() および isc_array_lookup_bounds() 2 つのクライアント側 API
isc_blob_lookup_desc() と isc_array_lookup_bounds() は、SELECT メタデータ権限がないと実
行できません。これらの API は直接 InterBase システムテーブルに問い合わせるためで
す。したがって、blindmeta.sql を実行したデータベースに対しては、所有者、システム
管理者、および SYSDBA 以外のユーザーがこれらの API を実行することはできません。
以前の InterBase クライアント InterBase 6.0 以前の InterBase キットは、システムテーブル
にアクセス権のないユーザーにかわってデータベースにアクセスすることができません
でした。したがって、InterBase データベースに対して blindmeta.sql を実行する InterBase
開発者は、ユーザーがそのデータベースにアクセスできない限り、InterBase 6.0 以前の
ランタイムキットを使用するユーザーにそのデータベースを提供できません。開発者
は、データベースのコピーに対して readmeta.sql を実行し、古い InterBase ランタイムを
所有するユーザーにそのコピーを提供する必要があります。
移行における問題
InterBase エンジンは、ODS 10.0 以前のデータベースにアタッチする際に、自動的にシステ
ムテーブルに対するデフォルトの SQL 権限(SELECT のみ)を PUBLIC に設定します。そ
のため、すべてのユーザーがデータベースのメタデータに書き込むことができるようにす
る場合は、writemeta.sql を各データベースに実行して、動作を復元する必要があります。
第 6 章 データベース ユーザー管理
6-7
SQL 特権
SQL 特権
ただデータベースに接続しただけでは、そのデータベースに保存されているデータを修正
はもちろん表示することもできません。権限が明確に認定されている必要があります。ユー
ザーは、権限が認定されるまで、どのようなデータベースオブジェクトにもアクセスする
ことができません。PUBLIC に与えられた権限は、すべてのユーザーに適用されます。
SQL 特権の構文の詳細は、
『データ定義ガイド』および『言語リファレンス』の「GRANT」
および「ROLE」を参照してください。
ユーザーグループ
InterBase には、ユーザーのグループに SQL 権限を割り当てる機能があります。SQL ロール
はデータベースごとに実装されます。UNIX グループは、UNIX のグループ機能を使用して、
サーバーレベルで実装されます。
SQL ロール
InterBase は『ISO-ANSI Working Draft for Database Language』に記述されているとおりに SQL グ
ループレベルセキュリティをサポートしています。SQL ロールの構文の詳細は、
『言語リファ
レンス』と『データ定義ガイド』を参照してください。
ロールは、次の 4 つのステップで実装されます。
1
CREATE ROLE でロールを宣言します。
CREATE ROLE sales;
2
GRANT 文で、特定のテーブルと列の特権をそのロールに割り当てます。
GRANT UPDATE ON table1 TO sales;
3
再度 GRANT 文を使用して、このロールをユーザーに割り当てます。
GRANT sales TO user1, user2, user3;
4
最後に、ロールに割り当てられた特権を得るには、データベースへの接続時にそのロー
ルを指定する必要があります。
CONNECT 'foo.ib' USER 'user1' PASSWORD 'peanuts' ROLE sales;
これで User1 は、接続中は TABLE1 について UPDATE 特権を持つことになります。
ユーザーはデータベースへの接続ごとに 1 つのロールにのみ属することができ、接続後に
ロールを変更することはできません。ロールを変更するには、ユーザーは接続を解除し、別
のロール名を指定して再度接続を行う必要があります。
データベースへの接続時にロールを採用するには、次のいずれかの方法で行います。
• IBColsole isql からデータベースに接続するときにロールを指定するには、
データベース接続
ダイアログを表示し、
[ロール]フィールドにロール名を入力します。
• 接続時に InterBase API を使って自動的にロールを指定するには、dpb パラメータの
isc_dpb_sql_role_name を使用します。『API ガイド』を参照してください。
6-8 操 作 ガ イ ド
その他のセキュリティ
• 埋め込み SQL アプリケーション、または isql セッションによる接続時にロールを指定するには、
CONNECT 文の ROLE rolename 句を使用します。『言語リファレンス』の CONNECT の項
目を参照してください。
メモ
BDE バージョン 5.02 以降を使用するアプリケーション(Delphi、JBuilder、C++Builder な
ど)には、ロール名を指定できるプロパティがあります。また、現在 InterBase に付属して
いる ODBC ドライバもロールを認識します。
UNIX グループ
UNIX ユーザーが InterBase セキュリティデータベースにユーザーを自動的に追加するのと
同様に、オペレーティングシステムレベルグループは UNIX 上の InterBase セキュリティに
自動的に追加されます。InterBase セキュリティで UNIX グループを使用する方法と構文の
詳細は、『言語リファレンス』および『データ定義ガイド』を参照してください。
メモ
UNIX グループとデータベースセキュリティの統合は、SQL 標準の機能ではありません。
その他のセキュリティ
InterBase は、セキュリティを高めるために InterBase ツールの使用についていくつかの制限
を設けています。また、データベースをセキュリティ違反から保護するためにオプションが
用意されています。ここでは、これらのオプションについて説明します。
InterBase ツール使用についての制限
セキュリティの指標の 1 つとして、InterBase はデータベースの所有者または SYSDBA だけ
が、gbak、gstat、および gfix を実行できるようにしています。
• データベースの所有者または SYSDBA だけが、gbak を使ってデータベースのバックアップ
を行うことができます。バックアップファイルについては InterBase ユーザーの概念は適用
されないので、データベースの復元は誰でも行うことができます。しかし、既存のデータ
ベースを上書きするようなデータベースの復元は、所有者または SYSDBA しか行うことは
できません。セキュリティを目的とする場合、バックアップファイルは安全な場所に格納
されなければなりません。これにより、権限のないユーザーがデータベースを復元してア
クセスすることを防止します。
• UNIX プラットフォームでは、gstat についてさらに厳しい制約があります。gstat を実行す
るには、データベースファイルに対してシステムレベルの読み取りアクセスを持っている
必要があります。gstat でデータベースにアクセスするには、InterBase サーバーを実行して
いるアカウント(InterBase または root)でログインするか、グループへの読み取り許可を
与えるためデータベースファイルに対するパーミッションを変更する必要があります。
データベースの保護
データベースとシステム上のその他のファイルに対するセキュリティを高めるには、いく
つかの手順があります。
第 6 章 データベース ユーザー管理
6-9
IBConsole でのユーザー管理
• UNIX/Linux システム:InterBase サーバーを起動する前に、root ではなくユーザー InterBase
(ユーザー名が 8 文字までの場合は interbas)でログインします。このユーザーだけがサー
バーを起動できます。これは、他のユーザーが誤ってまたは故意に、パスワードファイル
などの重要なファイルにアクセスまたは上書きする可能性を減らすためです。ユーザー
InterBase でログオンしたら、InterBase サーバーを起動します。
• Windows サーバープラットフォーム:InterBase サーバーがサービスとして動作している場
合、InterBase 以外の認証されていないアクセス(copy コマンドなど)からデータベースを
保護することができます。これは、システムアカウントでデータベースファイルを読み取
り専用として作成して行います。ただし、システムアカウントでデータベースファイルを
読み取り専用として作成すると、データベースへのリモートアクセスには NetBEUI ではな
く TCP/IP を使用しなければなりません。
• バックアップされたデータベースは誰でも復元できるので、アクセスが制限されている
ディレクトリにバックアップファイルを保管しておくとよいでしょう。Windows 98SE/ME
プラットフォームでは、バックアップファイルをテープや高密度リムーバブルドライブの
ような物理的な媒体に移動して安全に保管するか、バックアップファイルをディレクトリ
アクセスが制限されているシステムに移動することができます。UNIX では、バックアップ
ファイルがあるディレクトリではなくてバックアップファイルだけに対して承認されてい
ないユーザーによる読み取りから保護するアクセス許可が必要です。
たとえば、次のことがすべて揃っているとします。
• バックアップファイルのアクセス許可が 600(rw-------)または 640(rw-r-----)
• グループには信頼できる人しかいない
• ディレクトリのアクセス許可が rwxr-xr-x
信頼のある所有者とグループ以外の人はバックアップファイルがそこにあることはわかり
ますが、ファイルにアクセスすることはできません。ユーザーやバックアップスクリプトが
gbak を実行する前にコマンド umask 077(または 027)を実行する場合、ディレクトリのア
クセス許可に何が指定されているかにかかわらず、承認されていないユーザーはバック
アップファイルにアクセスすることはできません。ディレクトリは “other” からの書き込み
を不可にしておきます。これは、別の人がバックアップファイルを削除することを許可し
ます。
IBConsole でのユーザー管理
ユーザー管理は、
[ユーザー情報]ダイアログでユーザーの追加、変更、表示、および削除
を指定して行います。ユーザー管理は、サーバーにログインした後でのみ、実行できます。
[ユーザー情報]ダイアログの表示
次のいずれかの方法で、[ユーザー情報]ダイアログを表示します。
• ツリーペインでログインしたサーバーを選択するか、登録サーバーのリストからサーバー
階層下の任意のブランチを選択して、
[サーバー|ユーザー管理]を選択します。
6-10 操 作 ガ イ ド
IBConsole でのユーザー管理
• ツリーペインで登録サーバーのリストからログインしたサーバーを選択します。 ワークペ
インで[ユーザー管理]をダブルクリックするか、選択サーバーを右クリックしてコンテ
キストメニューから[ユーザー管理]を選択します。
• ツリーペインで対象サーバーの下の[Users]を選択して、ワークペインに有効なユーザー
の一覧を表示します。ユーザー名をダブルクリックして、
[ユーザー情報]ダイアログを表
示します。
図 6.2 [ユーザー情報]ダイアログ
ユーザーの追加
[ユーザー情報]ダイアログで、新しいユーザーを追加します。このダイアログを表示する
には、6-10 ページの「[ユーザー情報]ダイアログの表示」で説明した方法のいずれかを行
います。
新しいユーザーを追加するには
1
次のいずれかの方法で、
[ユーザー情報]ダイアログを表示します。
• ツリーペインでログインしたサーバーを選択するか、登録サーバーのリストから
サーバー階層下の任意のブランチを選択して、[サーバー|ユーザー管理]を選択し
ます。
• ツリーペインで登録サーバーのリストからログインしたサーバーを選択します。
ワークペインで[ユーザー管理]をダブルクリックするか、選択サーバーを右ク
リックしてコンテキストメニューから[ユーザー管理]を選択します。
• ツリーペインで対象サーバーの下の[Users]を選択して、ワークペインに有効な
ユーザーの一覧を表示します。ユーザー名をダブルクリックして、[ユーザー情報]
ダイアログを表示します。
2 [新規]をクリックします。[新規]ボタンと[削除]ボタンは淡色表示になり、[閉じ
る]ボタンは[キャンセル]ボタンに変わります。
3
新しいユーザー名を[ユーザー名]テキストフィールドに入力します。
第 6 章 データベース ユーザー管理
6-11
IBConsole でのユーザー管理
4
ユーザーのパスワードを[パスワード]および[パスワード確認]テキストフィールド
の両方に入力します。
5
対応するテキストフィールドにオプション情報を追加します。オプションの各テキスト
フィールドには、32 文字まで入力できます。
6 [適用]をクリックして、新しいユーザーをセキュリティデータベースに追加します。
または、[キャンセル]をクリックして変更を破棄します。
メモ
ユーザー名は 31 文字までです。大文字と小文字は区別されません。パスワードは大文字と
小文字が区別され、最初の 8 文字だけが有効です。ユーザー名やパスワードにスペースを
含めることはできません。
ユーザー設定の変更
[ユーザー情報]ダイアログで、ユーザー設定を変更します。このダイアログを表示するに
は、6-10 ページの「[ユーザー情報]ダイアログの表示」で説明した方法のいずれかを行
います。
ユーザーの詳細設定を変更するには
1
次のいずれかの方法で、
[ユーザー情報]ダイアログを表示します。
• ツリーペインでログインしたサーバーを選択するか、登録サーバーのリストから
サーバー階層下の任意のブランチを選択します。[サーバー|ユーザー管理]を選択
して、[ユーザー情報]ダイアログを表示します。
• ツリーペインで登録サーバーのリストからログインしたサーバーを選択します。
ワークペインで[ユーザー管理]をダブルクリックするか、選択サーバーを右ク
リックしてコンテキストメニューから[ユーザー管理]を選択します。
• ツリーペインで対象サーバーの下の[Users]を選択して、ワークペインに有効な
ユーザーの一覧を表示します。ユーザー名をダブルクリックして、[ユーザー情報]
ダイアログを表示します。
2 [ユーザー名]ドロップダウンリストから設定を変更するユーザー名を選択します。
ユーザー設定の詳細が表示されます。[ユーザー名]ドロップダウンリストで目的の
ユーザー名の最初の文字を入力すると、その文字から始まるユーザー名にすばやくスク
ロールすることもできます。同じ文字の入力を繰り返すことにより、その文字で始まる
すべてのユーザー名にわたってスクロールできます。
3
ユーザー名以外のいずれかのテキストフィールドを変更します。パスワードを変更する
場合は、
[パスワード]と[パスワード確認]テキストフィールドに同じパスワードを
入力しなければなりません。
4
最後に[適用]ボタンをクリックして変更を保存します。
ユーザー名は変更できません。ユーザー名を変更する場合は、ユーザー名を削除し、新しい
名前を追加する方法しかありません。
6-12 操 作 ガ イ ド
InterBase API でのユーザー管理
ユーザーの削除
[ユーザー情報]ダイアログで、セキュリティデータベースのユーザーを削除します。この
ダイアログを表示するには、6-10 ページの「[ユーザー情報]ダイアログの表示」で説明
した方法のいずれかを行います。
1
次のいずれかの方法で、
[ユーザー情報]ダイアログを表示します。
• ツリーペインでログインしたサーバーを選択するか、登録サーバーのリストから
サーバー階層下の任意のブランチを選択して、[サーバー|ユーザー管理]を選択し
ます。
• ツリーペインで登録サーバーのリストからログインしたサーバーを選択します。
ワークペインで[ユーザー管理]をダブルクリックするか、選択サーバーを右ク
リックしてコンテキストメニューから[ユーザー管理]を選択します。
2 [ユーザー名]ドロップダウンリストから削除するユーザー名を選択します。ユーザー
設定の詳細が表示されます。[ユーザー名]ドロップダウンリストで、目的のユーザー
名の最初の文字を入力すると、その文字から始まるユーザー名にすばやくスクロールす
ることもできます。同じ文字の入力を繰り返すことにより、その文字で始まるすべての
ユーザー名にわたってスクロールできます。
3 [削除]をクリックします。[ユーザー Username を削除しますか?]という確認ダイア
ログが表示されます。[OK]を選択すると、ユーザーは削除され、現在のサーバー上の
データベースにアクセスする権限がなくなります。
重要
SYSDBA はユーザー SYSDBA を削除できますが、SYSDBA を削除すると、新しいユーザー
をデータベースに追加できなくなり、既存のユーザー設定も変更できなくなります。ユー
ザー SYSDBA は削除しないようにしてください。SYSDBA を削除してしまった場合は、
InterBase を再インストールして、InterBase セキュリティデータベース(デフォルトでは
admin.ib)を復元してください。
InterBase API でのユーザー管理
InterBase アプリケーションの作成者は、
3 つの API 関数、つまり isc_add_user( ), isc_delete_user( )、
および isc_modifiy_user( ) を使用して、ユーザーの追加、削除、変更を行うことができます。た
だし、これらの関数は InterBase サービス API の関数で置き換えられているので、InterBase 6
以降では重要ではなくなっています。
InterBase サービス API には、セキュリティデータベース内のユーザーをプログラムによっ
て管理するために、より広範囲で強力なツールが用意されています。サービス API 関数の
使い方に関する詳細と実例は、
『API ガイド』の第 12 章「サービスの操作」を参照してく
ださい。
Delphi または C++Builder を使用する開発者の場合、ユーザー管理用には IBX コンポーネン
トと高度なコンポーネントが用意されています。IBX コンポーネントの使い方については、
『開発者ガイド』を参照してください。
第 6 章 データベース ユーザー管理
6-13
gsec によるセキュリティの管理
gsec によるセキュリティの管理
InterBase コマンドラインのセキュリティユーティリティは gsec です。このユーティリティ
は、InterBase セキュリティデータベース(デフォルトでは admin.ib)を操作して、InterBase
の ユ ー ザ ー 名 と パ ス ワ ー ドを管理するために使用します。 このユーティリティは、
IBConsole for Windows の[サーバー|ユーザー管理]と同等の機能を持っています。
セキュリティデータベースは InterBase インストールディレクトリにあります。データベー
スをサーバーに接続するには、ユーザーはユーザー名とパスワードを指定する必要があり
ます。そして、これらはセキュリティデータベースに保存されている情報と比較されます。
一致した場合に接続が成功します。
重要
gsec を実行できるのは SYSDBA だけです。これには次のいずれかの方法を使用します。
• 次のようにコマンドを起動する。
gsec -user sysdba -password masterkey
• コマンドを起動する前に、SYSDBA のための ISC_USER および ISC_PASSWORD 環境変数
を定義する
• UNIX では root、Windows では Administrator としてログインしているときに gsec を実行す
る
gsec を対話型で使用するには、コマンドプロンプトで gsec と入力します。プロンプトが
GSEC> に変わり、対話型モードに入ったことを示します。対話型セッションを終了するには
QUIT と入力します。
リモートでの gsec の実行
リモートサーバー上のセキュリティデータベースでユーザーを管理するために、クライア
ントホストで gsec を使用することができます。リモートデータベース設定で -database オ
プションを使ってリモート InterBase セキュリティデータベースに接続します。次に例を示
します。
gsec -database jupiter:/usr/InterBase/admin.ib
埋め込みデータベースユーザー認証と組み合わせた gsec の実
行
埋め込みユーザー認証されるデータベースに gsec を使用できます。
-user_database オプションと埋め込みユーザー認証データベースを指定して、埋め込みユー
ザー認証されるデータベースに接続します。
次に例を示します。
gsec -user_database jupiter:/usr/InterBase/employee.ib
6-14 操 作 ガ イ ド
gsec によるセキュリティの管理
gsec のコマンドの使い方
gsec コマンドを次の表にまとめます。各コマンドの先頭部分は必須です。ブラケット([ ])
内はオプションです。
表 6.2
gsec コマンドの概要
コマンド
説明
di[splay]
InterBase セキュリティデータベース(デフォルトでは、admin.ib)
のすべての行を表示します。
di[splay] name
ユーザー name の情報だけを表示します。
a[dd] name -pw
password
[option argument]
[option argument ...]
ユーザー name をパスワード string とともに、セキュリティデータ
ベースに追加します。各 option と argument でユーザーに関連す
る他のデータを指定します。表 6.3「gsec のオプション」を参照。
mo[dify] name [options]
セキュリティデータベース内の既存の name は
add と同様ですが、
除きます。
de[lete] name
セキュリティデータベースからユーザー name を削除します。
alias_add path name
データベースエイリアスを追加します。path はデータベースの場
所、name はエイリアスの名前です。
alias_del name
セキュリティデータベースからデータベースエイリアス name を
削除します。
alias_dis
すべてのデータベースエイリアスを表示します。
alias_dis name
エイリアス name の情報だけを表示します。
h[elp] または ?
gsec のコマンドと構文を表示します。
q[uit]
対話形式を終了します。
セキュリティデータベースの表示
InterBase セキュリティデータベースの内容を表示するには、GSEC> プロンプトで DISPLAY
コマンドを入力します。セキュリティデータベースのすべての行が表示されます。
GSEC> display
user nameuid gidfull name
---------------------------------------------JOHN
123 345John Doe
JANE
124 345Jane Doe
RICH
125 345Richard Roe
パスワードが表示されることはありません。
セキュリティデータベースへのエントリの追加
ユーザーをセキュリティデータベースに追加するには、add コマンドを使用します。
a[dd] name -pw password [options]
第 6 章 データベース ユーザー管理
6-15
gsec によるセキュリティの管理
続けてユーザー名、-pw オプション、パスワードを、さらに次の表に示されている他のオ
プションを続けます。パスワードは大文字と小文字が区別されます。それ以外のパラメー
タは大文字と小文字が区別されません。
各オプションの先頭の数文字は必須で、ブラケット([ ])で囲まれた部分は任意です。各
オプションの後に、対応する引数として、InterBase セキュリティデータベース(デフォル
トでは admin.ib)の指定された列に入力するデータを指定する文字列を続ける必要がありま
す。
表 6.3
メモ
gsec のオプション
オプション
意味
-password または -pa 文字列
変更を行うユーザーのパスワード
-user 文字列
変更を行うユーザー
-pw 文字列
ターゲットユーザーのパスワード
-uid 整数
ターゲットユーザーの ID
-gid 整数
ターゲットユーザーのグループ ID
-fname 文字列
ターゲットユーザーのフルネーム
-mname 文字列
ターゲットユーザーのミドルネーム
-lname 文字列
ターゲットユーザーの姓
-user_database 文字列
ユーザーデータベースの名前
-database 文字列
リモートセキュリティデータベースの名前
-pa スイッチはルートまたは SYSDBA パスワードを指定します。-pw は追加または修正され
るユーザーのパスワードを指定します。
たとえば、ユーザー jones を追加してパスワード welcome を割り当てるためには次のコマ
ンドを入力します。
GSEC> add jones -pw welcome
display を使用して、この入力内容を確認します。割り当てられていない UID または GID は
デフォルトの 0 になります。
GSEC> display
user name
uid
gid
full name
---------------------------------------------JONES
0
0
たとえば、ユーザー名 cbrown とパスワード coffee2go でユーザー名 Cindi Brown の認定を
追加するには、次の gsec コマンドを使用します。
GSEC> add cbrown -pw coffee2go -fname cindi -lname brown
この入力を確認するには、セキュリティデータベースの内容を表示します。
GSEC> display
user name
uid
6-16 操 作 ガ イ ド
gid
full name
gsec によるデータベースエイリアスの管理
---------------------------------------------JONES
0
0
CBROWN
0
0
CINDI BROWN
gsec は、入力方法にかかわりなく、大文字でユーザー名を認識します。
セキュリティデータベースの変更
セキュリティデータベースの既存の項目を変更するには、modify コマンドを使用します。
項目を変更するユーザー名と、オプション、変更後の値を続けて入力します。
たとえば、ユーザー cbrown のユーザー ID を 8 にセットしてファーストネームを Cindy に
変更するには、次のように入力します。
GSEC> modify cbrown -uid 8 -fname cindy
変更した行を確認するには、display の後にユーザー名を続けて入力します。
GSEC> display cbrown
user name
uid gid full name
--------------------------------------------CBROWN
8
0
CINDY BROWN
メモ
ユーザー名を変更するには、まずセキュリティデータベース中の該当項目を削除してから、
新しい名前を入力してその他の情報を再入力します。
セキュリティデータベースのユーザー項目の削除
セキュリティデータベースからユーザーのエントリを削除するには、delete の後にユー
ザー名を指定します。
GSEC> delete cbrown
display コマンドを使用して、エントリが削除されたことを確認できます。
Windows コマンドプロンプトからの gsec の使用
Windows のコマンドプロンプトから gsec を使用するには、各コマンドの前に gsec を置き、
各 gsec コマンドにハイフン(-)を付けます。たとえば、ユーザー aladdin を追加し、パス
ワード sesame を設定するには、コマンドラインで次のように入力します。
C:>gsec -add aladdin -pw sesame
InterBase セキュリティデータベースの内容を表示するには、次のように入力します。
C:> gsec -display
gsec によるデータベースエイリアスの管理
データベースエイリアスを使用すれば、データベースファイルの正確な位置がわからなく
ても、クライアントアプリケーションがエイリアスによってデータベースを参照できます。
セキュリティデータベースへのエントリの追加
第 6 章 データベース ユーザー管理
6-17
gsec エラーメッセージ
データベースエイリアスをセキュリティデータベースに追加するには、alias_add コマンド
を使用します。
alias_add path name
path はデータベースの場所、name はエイリアス名です。
たとえば、
“C:¥CodeGear¥InterBase¥examples¥database¥employee.ib” のデータベースエイリアス emp
を追加するには、次のように入力します。
GSEC> alias_add “C:¥CodeGear¥InterBase¥examples¥database¥employee.ib” emp
メモ
スペースを含むパスには引用符が必要です。
エントリの確認には、alias_dis を使用します。
GSEC> alias_dis emp C:¥CodeGear¥InterBase¥examples¥database¥employee.ib
セキュリティデータベースからのエントリの削除
セキュリティデータベースからデータベースエイリアスを削除するには、alias_del コマン
ド使用します。
alias_del name
たとえば、データベースエイリアス emp を削除するには、次のように入力します。
GSEC> alias_del emp
gsec エラーメッセージ
表 6.4
gsec のセキュリティエラーメッセージ
エラーメッセージ
原因と対応
Add record error
add コマンドで既存のユーザーを指定した、不正な構文を使
用した、または gsec を実行する適切な特権がないのに add コ
マンドを呼び出しました。ユーザー名を変更するか、既存の
ユーザーに対して modify を使用してください。
(追加レコードエラー)
<string> already specified
(<string> はすでに指定されている)
Ambiguous switch specified
add または modify を行っているときに、同じ列に対して複数
回データを指定しました。コマンドを再度入力してくださ
い。
コマンドが正しい操作を一意に指定していませんでした。
(あいまいなスイッチの指定)
Delete record error
(削除レコードエラー)
Error in switch specifications
(スイッチ指定
のエラー)
Find/delete record error
(検索 / 削除レコードエラー)
6-18 操 作 ガ イ ド
delete コマンドを使用できません。gsec を使用する適切な特
権を持っているかをチェックしてください。
このメッセージには他のエラーメッセージが一緒に表示され
ます。不正な構文が使用されたことを示します。他のエラー
メッセージをチェックして原因を調べてください。
delete コマンドで指定されたユーザーを見つけられなかった
か、gsec を使用する適切な特権を持っていませんでした。
gsec エラーメッセージ
表 6.4
gsec のセキュリティエラーメッセージ ( 続き )
エラーメッセージ
原因と対応
Find/display record error
display コマンドで指定されたユーザーを見つけられなかっ
たか、gsec を使用する適切な特権を持っていませんでした。
(検索 / 削除レコードエラー)
Find/modify record error
(検索 / 修正レコードエラー)
Incompatible switches specified
modify コマンドで指定されたユーザーを見つけられなかっ
たか、gsec を使用する適切な特権を持っていませんでした。
構文を正しく直して再度試みてください。
(非互換性スイッチの指定)
引数を指定しないで値を指定しました。
Invalid parameter、no switch defined
(無効なパラメータ、未定義のスイッチ)
Invalid switch specified
(無効スイッチの指定)
Modify record error
(レコードの修正エラー)
認識できないオプションを使用しました。修正して再実行し
てください。
modify コマンドの構文が不正です。修正して再実行してくだ
さい。
また、gsec を使用するための適切な特権を持っているかを
チェックしてください。
No user name specified
(ユーザー名の指定がない)
Record not found for user: <string>(ユー
ザー <string> のレコードが見つからな
い)
Unable to open database
(データベースを開けない)
add、modify、または delete の後にユーザー名を指定してく
ださい。
指定されたユーザーのためのエントリが見つかりませんでし
た。display ですべてのユーザーを表示して確認し、再度試み
てください。
InterBase セキュリティデータベースが存在しないか、または
オペレーティングシステムで見つけられません。
第 6 章 データベース ユーザー管理
6-19
gsec エラーメッセージ
6-20 操 作 ガ イ ド
第
章
データベースの環境設定と保守
第7章
この章では、データベースの構成と保守について、以下の事項を説明します。
•
•
•
•
•
•
•
•
•
•
•
•
•
•
データベースファイル
オンディスク構造体(ODS)
読み取り / 書き込みデータベースと読み取り専用データベース
データベースの作成
バックアップファイルのプロパティ
シャドウイング
データベースプロパティの設定
スイープ間隔と自動保守
データベースキャッシュの設定
強制書き込みとバッファ書き込み
検査と修復
データベースのシャットダウンと再起動
limbo トランザクション
gfix コマンドラインツール
データベースファイル
ほとんどの場合、InterBase データベースファイルは自己完結型です。すべてのデータとイ
ンデックスは、1 種類のファイルにデータ構造として保持されます。トランザクションログ
もこのファイルに保持されます。
開発用に選択した言語でコンパイルされた関数のライブラリを作成することによって、
InterBase データベースのメタデータで使用できる関数を拡張することができます。関数の
動的ライブラリ(Windows では DLL、UNIX では共有ライブラリ)を作成しておけば、ク
エリー、ストアドプロシージャ、トリガー、ビューなどで使用することができます。
第 7 章 データベースの環境設定と保守
7-1
データベースファイル
データベースファイルのサイズ
InterBase のデータベースファイルのサイズは、データベースのページ数にページサイズを
乗算した大きさになります。最小ページサイズは 1KB、デフォルトのページサイズは 4KB、
最大ページサイズは 16KB です。1 つのページに格納できるのは、1 つのテーブルのレコー
ドだけです。データベースのページサイズは、データベース作成時に CREATE DATABASE
文の PAGE SIZE 節で指定するか、IBConsole を使って指定します。データベースのページサ
イズの変更は、gbak や IBConsole を使ってデータベースを復元する際に行うことができま
す。
InterBase は 64 ビットファイル I/O をサポートしています。したがって、データベースファ
イルのサイズは、事実上オペレーティングシステムによって制限されます。
メモ
gbak の使用は、一次データベースファイルのサイズを削減する唯一の方法です。データベー
スを復元する際は、元のファイルサイズとは無関係に複数ファイルを指定することができ
ます。
動的なファイルサイズの変更
InterBase は、データベース内の最後のファイルを必要であれば動的に拡張します。この機
能は、単一ファイルデータベースと、マルチファイルデータベースの最後のファイルに適
用されます。これらのファイルに LENGTH を指定しても無視されます。
データベース ファイルの事前割り当て
InterBase SQL 文の CREATE DATABASE に事前割り当て用の句があり、新しいデータベー
スに割り当てられる予備のデータベース領域を指定できます。この領域が実際に割り当て
られるのは、CREATE DATABASE 文で確立された接続をユーザーが切断したときです。
データベース事前割り当て機能では、セカンダリ データベース ファイルをサポートしてい
ます。つまり、すべてのセカンダリ ファイルに、ファイル サイズ指定に従って事前割り当
てが適用されます。
事前割り当てを指定するには、次の構文を使用します。
例
... [[NO] PREALLOCATE [=] int [PAGES]]
デフォルトでは、データベースを作成しても追加のデータベース ページは事前に割り当て
られません。NO PREALLOCATE を指定したことと同じです。この構文が用意されているの
は、事前割り当てが指定されていないことを DDL スクリプトで明示できるようにするため
です。データベースの事前割り当ては、関連する他の特性(つまりシャドウ セットやセカ
ンダリ データベース ファイルの長さ)との整合性を保つために、常にデータベース ページ
単位で指定されます。
重要
事前割り当て量が利用可能なディスク容量を超える場合、デバイスが一杯になった時点で
書き込み要求を出している IB スレッドは、I/O が完了するのを 1 分間待ってからタイムア
ウトします。さらに I/O を 4 回試み、そのたびに 1 分間待って、書き込みを完了しようとし
ます(結果は InterBase ログに書き込まれます)。ディスク領域が解放されて事前割り当て操
作を続行できるようにならない限り、要求された領域は割り当てられません。
7-2 操 作 ガ イ ド
データベースファイル
isql -extract PREALLOCATE 句
CREATE DATABASE コマンドでは、データベースの事前割り当て値がゼロではない場合に、
CREATE DATABASE 文を抽出し所定の形式で表示する isql -extract PREALLOCATE 句が利用で
きます。この isql extract 操作は -a|-x オプションで呼び出すことができます。
GSTAT
GSTAT を実行すると、データベースの事前割り当て情報が表示されます。この情報はデー
タベースのヘッダー ページに格納されています。GSTAT -H コマンドの実行結果の一部を
以下に示します。
例
Variable header data:
Preallocate pages: 5000
Sweep interval: 25000
*END*
API の DPB パラメータ
InterBase API レベルでは、DPB パラメータである isc_dpb_preallocate があります。これ
は、データベース事前割り当てを指定する 4 バイト整数を値に取ります。これは
isc_create_database() でのみ認識され処理されます。isc_attach_database() では、
isc_dpb_preallocate は警告なしに無視されます。データベース情報パラメータ
isc_info_db_preallocate で、データベース ヘッダー ページに格納されているデータベース
事前割り当て情報を要求できます。
InterBase サービス API では、アクション isc_action_svc_backup、isc_action_svc_restore はそ
れぞれ新しいパラメータ isc_svc_bkp_preallocate、isc_svc_rst_preallocate を取ります。どち
らのパラメータも 4 バイトの引数を取り、データベース事前割り当てをデータベース ペー
ジ単位で指定します。これらのサービス パラメータは同じ数値になりますが、2 つのシンボ
ル定数が用意されているのは、ソース コードをわかりやすくして処理の意図を正しく伝え
るためです。
メモ
DPB パラメータについて詳細は、
『API ガイド』の第 4 章を参照してください。
外部ファイル
InterBase では、外部ファイルは外部テーブルとして使用されます。外部テーブルは、次の
ように機能面で制限があります。
• 読み取り / 書き込みモードのデータベースでは、外部テーブルに対して行うことができる
操作は SELECT と INSERT だけです。読み取り専用データベースでは、外部テーブルに対し
て行うことができる操作は SELECT だけです。
• 外部テーブルのインデックスは定義できません。外部データは、マルチジェネレーション
アーキテクチャでは制御されません。
第 7 章 データベースの環境設定と保守
7-3
データベースファイル
外部ファイルのデフォルトの場所は、<InterBase_home>/ext です。このディレクトリに保存された
外部ファイルは、InterBase によって必ず検索されます。これ以外の場所にファイルを保存する
には、ibconfig 設定ファイルの EXTERNAL_FILE_DIRECTORY エントリを使用して、その場所を
指定する必要があります。
Important セキュリティ上の理由から、機密情報を含むファイルは、外部テーブルと同じ
ディレクトリに保存しないことが非常に重要です。
移行に関する注意点:InterBase 6.x 以前のバージョンから InterBase 7.x 以降のバージョンに
移行する際、データベースに外部テーブルのファイルがある場合は、これらのファイルを
<InterBase_home>/ext に移動するか、ibconfig の EXTERNAL_FILE_DIRECTORY エントリを
使ってファイルの位置を指定する必要があります。
一時ファイル
InterBase は、大量のデータをソートする際に、作業領域として一時ファイル領域に動的に
ファイルを作成します。一時ファイルの詳細は、4-17 ページの「一時ファイルの管理」を
参照してください。
ファイルの命名規則
旧バージョンでは、InterBase データベースファイルに gdb ファイル拡張子を付ける規約が
ありましたが、現在 InterBase は、データベースの拡張子として gdb の使用をお勧めしなく
なりました。WindowsME、WindowsXP、Windows2003 では、この拡張子付きのファイル
が、変更されるたびに System Restore 機能によって自動的にバックアップされるためです。
この 2 つのプラットフォームでは、データベース名に gdb 拡張子を付けると、パフォーマン
スが大幅に低下する可能性があります。Linux と Solaris では、影響はありません。InterBase
では、データベース名の拡張子として新しく ib を使用することをお勧めします。
InterBase は、多様なプラットフォームで使用できます。ほとんどの場合、異なるネットワー
ク環境のユーザーは、目的のプラットフォームのファイル命名規則を知っていれば、クラ
イアントとサーバーマシンのプラットフォームの違いに関係なく、InterBase データベース
ファイルにアクセスすることができます。
一般に、InterBase は、ノードやパス名を含めて、各プラットフォームのファイル命名規則
を全面的にサポートしています。ただし、複数のファイル名を受け付けるコマンドと文の中
では、2 種類のファイル指定が認識されます。1 つは一次ファイル指定と呼ばれます。もう 1
つは二次ファイル指定と呼ばれます。コマンドや文の中には、二次ファイル指定でノード名
の使用が制限されるものがあります。構文の表記では、ファイル指定は「filespec」のように
表されます。
一次ファイル指定
一次ファイル指定では、オプションのノード名とフルパスを含め、常にフルファイル名の
指定がサポートされています。たとえば、CREATE DATABASE の構文は次のようになりま
す。
CREATE {DATABASE | SCHEMA} 'filespec'
[USER 'username' [PASSWORD 'password']]
7-4 操 作 ガ イ ド
データベースファイル
[PAGE_SIZE [=] int]
[LENGTH [=] int [PAGE[S]]]
[DEFAULT CHARACTER SET charset]
この構文で、CREATE DATABASE の後の filespec は、プラットフォーム固有のドライブまた
はボリューム指定を含めた、ノード名とパス指定をサポートしています。
二次ファイル指定
CREATE DATABASE のような、複数のファイル指定をサポートする InterBase 構文では、一
次ファイル指定以降のファイル指定は、すべての二次ファイル指定になります。二次ファイ
ル指定は、ノード名を含むことはできませんが、フルパス名は指定できます。
マルチファイルデータベース
InterBase は、複数のファイルと複数のファイルシステムにわたるデータベースをサポート
します。オフラインにしないで、別のファイルをデータベースに追加することができます。
IBConsole と gbak コマンドラインユーティリティのデータベース復元タスクによってマル
チファイルデータベースを作成することができます。既存のデータベースのファイルサイ
ズを変更するには、データベースファイルをバックアップしてからそれを復元する方法し
かありません。
データベースファイルの追加
二次ファイルのサイズを指定するオプションは 2 つあります。各二次ファイルが始まる
ページを指定するか、または各ファイルのデータベースページの長さを指定します。
LENGTH キーワードでサイズを指定する場合、最後のファイルの長さを指定しないでくだ
さい。InterBase は、必要に応じて最後のファイルサイズを動的に変更します。
次の isql の例では、STARTING AT 構文を使ってファイルを追加しています。
CONNECT ‘first.ib’;
ALTER DATABASE
ADD FILE 'second.ib' STARTING AT 50000;
データベースファイルのサイズ変更
既存データベースファイルを分割するために、ALTER DATABASE を使用することはできま
せん。たとえば、既存のデータベースが 80,000 ページで、上記に示したコマンドを発行する
と、InterBase はページ 80,001 から新しいデータベースファイルを作成します。既存のデー
タベースファイルを小さなファイルに分割するには、データベースファイルをバックアッ
プしてからそれを復元する方法しかありません。データベースを復元する際は、元のファイ
ルサイズを無視して二次ファイルのサイズを指定することができます。
次の isql の例では、LENGTH 構文を使ってファイルを追加しています。second.ib は、first.ib
の最終ページの次のページから始まり、50,000 データベースページの大きさになります。次
に、InterBase は third.ib に書き込みを開始して、必要に応じてサイズを動的に増やしていき
ます。
CONNECT 'first.ib';
第 7 章 データベースの環境設定と保守
7-5
データベースファイル
ALTER DATABASE ADD FILE 'second.ib' LENGTH 50000
ADD FILE 'third.ib';
InterBase は、second.ib ファイルがいっぱいになってからでないと、third.ib にデータの書き
込みを始めません。上記の例では、second.ib は 50,000 ページの大きさで、元のファイルの後
から開始されています。InterBase は、second.ib が 50,000 ページに達してから、third.ib ファイ
ルに書き込みを開始します。デフォルトで、それぞれのデータベースページは 4KB、最大サ
イズは 8KB になります。
特定のテーブルが完全に 1 つのファイルに含まれるとは限りません。InterBase のレコード
は、データベースファイル内の使用可能な空き領域に保存されます。時間がたつと、特定の
テーブルのレコードは、マルチファイルデータベースのすべてのファイルにわたって分散
される傾向にあります。
ファイルの最大数
InterBase は、シャドウファイルを含めて最大 65,536 個のデータベースファイルを扱えます。
使用するオペレーティングシステムで同時に開けるファイルの数は、ibserver プロセスで開
ける数より少ない場合があります。
アプリケーションからの操作
マルチファイルデータベースは、単一ファイルデータベースが複数あるのとは異なります。
どのテーブルも同じデータベースの一部ですが、各テーブルは複数のファイルにまたがっ
て保存されることもあります。アプリケーションから見れば、どのテーブルも同じデータ
ベースの一部であり、単一ファイルデータベースとまったく同じ方法でアクセスできます。
アプリケーションには、最初の 1 ファイルが認識できれば、その他のファイルについて知
る必要はありません。データベース操作で二次ファイルのデータにアクセスまたは書き込
みを行う場合、アプリケーション側で特別なプログラミングを行わなくても、InterBase ソ
フトウェアがこれを実行します。データベースの最初のファイルパスを指定すれば、アプリ
ケーションはそのデータベースに接続されます。アプリケーションを変更する必要はあり
ません。
ファイル割り当ての変更
gbak でデータベースを復元するときに、マルチファイルデータベースのファイルのサイズ
を変更することができます。マルチファイルデータベースを別のディスクやディレクトリ
に移動する必要がある場合は、gbak を使ってデータベースをバックアップしてから、デー
タベースを復元するときにすべての二次ファイルの新しい位置を指定します。詳細につい
ては、8-4 ページの「gbak コマンドを使用したバックアップと復元」を参照してください。
ヒント
データベースの開発段階では、たとえ現在のデータベースのサイズがマルチファイルデー
タベースを必要としない場合でも、少なくとも 1 つの二次ファイルを定義する必要があり
ます。データは際限なく蓄積される傾向があり、将来的にはデータベースがファイルシステ
ムのサイズ、またはオペレーティングシステムの最大ファイルサイズを超えるかもしれま
せん。二次ファイルを定義することによって、データベースがこれらの制限を超えた場合の
InterBase の動作を定義できます。これにより、データベースがファイルサイズの限界に近
くなったときでも、データベース管理者はデータベースの監視から解放されます。
7-6 操 作 ガ イ ド
オ ン デ ィ ス ク 構 造 体( O D S )
ネットワークファイルシステム
InterBase のデータベースは、それにアクセスするサーバーソフトウェアのあるディスク上
になければなりません。データベースファイル(二次ファイルとシャドウファイルを含め
て)は、ネットワークまたはリモートファイルシステム(Windows ではマップドライブ、
UNIX では NFS ファイルシステムと呼ばれる)上にあってはなりません。外部テーブルと
UDF ライブラリはネットワークファイルシステム上に置くことができます。ただし、ネッ
トワークファイルシステムは連続して使用できない場合があり得るので、この方法はお勧
めできません。
UNIX では、InterBase ソフトウェアはデータベースファイルが NFS ファイルシステムにあ
ることを検出します。この場合は、リモートアクセスメソッドが呼び出され、そのファイル
システムをエクスポートしたホスト上で実行されている InterBase サーバープロセスと通
信します。そのノードで実行されている InterBase サーバーソフトウェアがない場合は、
データベースへの接続が失敗します。
オンディスク構造体(ODS)
InterBase は、リリースごとに内部ファイル形式の特徴が異なります。ファイルの形式を区
別するため、データベースファイルにはオンディスク構造体(ODS)番号が記録されます。
通常、メジャー ODS バージョン(更新ごとに小数点の左側の数値が増加)は、以前の ODS
バージョンと互換性がない機能の追加を表します。InterBase 2007 のフォーマットは ODS 12
ですが、既存データベース ODS 11.x(11.0、11.1、11.2)もサポート対象です。InterBase 7.5
は ODS 11.2、InterBase 7.1 は ODS 11.1、InterBase 7 は ODS 11.0 です。
InterBase 7.5 サーバーが InterBase 7.0 ODS 11.0 データベースまたは InterBase 7.1 ODS 11.1
データベースにアタッチした場合、これらのデータベースは自動的に ODS 11.2 にアップグ
レードされます。InterBase 7.x は ODS バージョン 10.x もサポートしています。ただし、ODS
11 の新機能は、以前のソフトウェアには認識されません。
新しいデータベースを作成したり InterBase の現在のバージョンでバックアップファイル
を復元する場合は、現在の ODS バージョンでデータベースファイルが作成されます。
重要
古いデータベースの ODS をアップグレードするには、既存のデータベースのバージョン用
のバックアップユーティリティを使用してそのデータベースをバックアップしてから、
InterBase の現在のバージョンを使用してそれを復元しなければなりません。
読み取り / 書き込みデータベースと読み取り専用データベース
InterBase データベースには、読み取り専用と読み取り / 書き込みの 2 つのモードがありま
す。作成時のデータベースはすべて、読み取りと書き込みを行うことができます。これらを
読み取り / 書き込みモードであると言います。
第 7 章 データベースの環境設定と保守
7-7
読み取り / 書き込みデータベースと読み取り専用データベース
読み取り / 書き込みデータベース
読み取り / 書き込みモードにするには、データベースが書き込み可能な媒体にある必要が
あります。また、ibserver プロセスはデータベースファイルに対して書き込み可能でなけれ
ばなりません。読み取り / 書き込みモードのデータベースの場合、読み取り専用の操作でし
かデータベースを使用しなくても、この条件を満たす必要があります。これは、トランザ
クションの状態は .gdb ファイル内の内部インベントリ(管理情報)データ構造に保持され
るためです。したがって、データベースに対するすべてのトランザクションは、トランザク
ションインベントリに書き込み可能でなければなりません。
Windows と UNIX では、ibserver プロセス用のユーザー ID が読み取り / 書き込みデータ
ベースファイルに書き込める必要があります。ただし、使用している環境またはファイルシ
ステムのデフォルトで、ファイル許可を制限するように設定されているかもしれません。
データベースに接続しようとして、
「データベースを使用できない」というエラーが出たと
きは、まずデータベースファイルが ibserver プロセスのユーザー ID による書き込み許可を
持っているかをチェックしてください。
読み取り専用データベース
InterBase のデータベースは読み取り専用モードに変更できます。これにより、偶発的な更
新や悪意のある更新からデータベースを保護してセキュリティを向上させることができる
ようになり、CD-ROM のような読み取り専用メディアで配布することも可能になりました。
データベースは、作成時に常に読み取り / 書き込みモードに設定されます。この機能はダイ
アレクトとは関係ありません。ODS 10 以降のデータベースは、読み取り専用モードに設定
できます。
gbak、gfix、IBConsole を使用して、データベースを読み取り専用モードに変更できます。
詳細は、この後の「データベースを読み取り専用にする」を参照してください。
読み取り専用データベースのプロパティ
• 読み取り専用モードでは、データベースを読み取り / 書き込みファイルシステムだけでな
く、CD-ROM や読み取り専用のファイルシステムに置くことができます。
• 読み取り専用データベースに対して INSERT、UPDATE、DELETE 操作を行おうとすると、
エラーが発生します。詳細は、
『言語リファレンス』の「エラーコードとメッセージ」の章
を参照してください。
• 読み取り専用データベースでは、メタデータを変更できません。
• 読み取り専用データベースのジェネレータはインクリメントせず、現在値を返すためにし
か使用できません。たとえば、読み取り専用データベースでは次の文はうまく動作します。
SELECT GEN_ID(generator_name, 0) FROM table_name;
次の文では、「attempted update on read-only database.」エラーが起こります。
SELECT GEN_ID(generator_name, 1) FROM table_name;
• 読み取り専用データベースを介してアクセスされた外部ファイルはファイルシステムレベ
ルでのファイルアクセス許可とは無関係に、読み取り専用モードで開かれます。
7-8 操 作 ガ イ ド
データベースの作成
データベースを読み取り専用にする
データベースのモードを読み取りと読み取り / 書き込み専用に変更するには、ユーザーが
データベースの所有者または SYSDBA で、かつ、そのデータベースに対して排他アクセス
権を持っていなければなりません。
InterBase で読み取り / 書き込みデータベースを読み取り専用モードに変更するには、次の
いずれかを行います。
• IBConsole で、データベースを選択して、そのプロパティを表示し、モードを変更します。
詳細は、7-19 ページの「データベースプロパティの設定」を参照してください。
• gbak を使用して、データベースをバックアップして読み取り専用モードで復元します。
gbak -create -mode read_only foo.ibk foo.ib
• gfix を使用して、モードを読み取り専用に変更します。
gfix -mode read_only foo.ib
重要
BDE、ODBC、または JDBC を使用する任意のアプリケーションからデータベースを読み取
り専用モードに設定するには、InterBase Services API の isc_action_svc_properties() 関数を使用
します。
ヒント
読み取り / 書き込みデータベースを CD-ROM で配布するには、データベースをバックアッ
プして CD-ROM の database.ibk ファイルに入れます。インストールの一部として、データ
ベースをユーザーのハードディスクに復元します。
InterBase の旧バージョンでの読み取り専用
• InterBase 6 以前のバージョンのクライアントは、SELECT を実行すると読み取り専用デー
タベースにアクセスできます。その他の操作を行うことはできません。
• 現在の InterBase のクライアントがバージョン 6 より前のデータベースを読み取り専用モー
ドに設定しようとすると、サーバーはその要求を無視します。古いデータベースを読み取り
専用にすることはできません。アップグレードが必要です。
データベースの作成
IBConsole の[データベースの作成]ダイアログを使ってローカルサーバーとリモートサー
バー上にデータベースを作成できます。
次のいずれかの方法で、[データベースの作成]ダイアログを表示します。
• ツリーペインでサーバーを選択するか、対象サーバー階層下の任意のブランチを選択して、
[データベース|データベースの作成]を選択します。
• ツリーペインで、対象サーバー下の[Databases]ブランチを右クリックして、コンテキス
トメニューから[データベースの作成]を選択します。
第 7 章 データベースの環境設定と保守
7-9
データベースの作成
図 7.1 [データベースの作成]ダイアログ
データベースを作成するには
1
指定されたサーバーが正しいことを確認します。サーバーが正しくない場合、このダイ
アログをキャンセルして正しいサーバーからこのダイアログを再度起動します。
2
新しいデータベースのエイリアス名を[エイリアス]テキストフィールドに入力しま
す。
3
データベースを構成するファイル名を入力します。[ 複数のファイルを使用する ]
チェックボックスを使うことによって、複数のファイルを使用することもできます。
ファイルを現在の作業ディレクトリに保存しない場合は、ファイル名を入力する際に、
ファイルパスを含めることに注意してください。
データベースファイルはローカルドライブ上になければなりません。
メモ
4
有効な値を入力するか、オプションの値をクリックしてドロップダウンリストから新し
い値を選択するか、またはオプションの値をダブルクリックして値をリスト内の次の値
にすることによって、作成オプションを指定できます。詳細は、この後の「データベー
スオプション」を参照してください。
オプションを指定しないで基本データベースを作成するには、すべてのオプションを空
白のままにします。
5 [OK]をクリックして指定したデータベースを作成します。
重要
データベース作成時に指定するエイリアス名は、データベースに関連する必須のデータ
ベースファイル情報に参照付けられます。データベースの環境設定と保守を行う場合、実際
のデータベースファイル名ではなく、エイリアス名の指定だけが必要になります。データ
ベースが複数ファイルにわたる場合、サーバーは各ファイルのヘッダーページを使って追
加ファイルを検索します。
7-10 操 作 ガ イ ド
データベースの作成
データベースオプション
設定できるデータベースオプションは、
[Page Size]、
[Default Character Set]、および[SQL
dialect]です。
Page size
InterBase は、1024、2048、4096、8192、および 16384 バイトのデータベースページサイズを
サポートします。デフォルトは 4096 バイトです。
[Default character set]
キャラクタセットについては、表 9.2 の「Character Set」に詳しい説明があります。
データベースの作成については、
『言語リファレンス』を参照してください。キャラクタセッ
トの詳細は、『言語リファレンス』を参照してください。
SQL ダイアレクト
InterBase データベース SQL ダイアレクトは、二重引用符、大きな有効桁数を持つ高精度数
値、および SQL DATE、TIME、TIMESTAMP などのデータ型をどのように解釈するかを決
定します。ほとんどの場合、現在の InterBase 機能すべてにアクセスするにはダイアレクト
3 でデータベースを作成する必要があります。
データベースのダイアレクトを 1 から 3 に変更する際は、注意が必要になる場合がありま
す。データベースが DATE データ型、有効桁数が 9 を超える DECIMAL または NUMERIC
データ型、および単引用符ではなく二重引用符で囲まれた文字列を含んでいる場合です。ダ
イアレクトの詳細は、操作ガイドの移行に関する付録にある「SQL ダイアレクトを理解す
る」を参照してください。
データベースダイアレクトを変更するには
1
ツリーペインでデータベースを強調表示し、次のいずれかの操作を行います。
• [データベース|プロパティ]を選択します。
• 右クリックし、コンテキストメニューから[プロパティ]を選択します。
• ワークペインの[プロパティ]をダブルクリックします。
2 [一般]タブをクリックし、[オプション]フィールドで SQL ダイアレクトを変更しま
す。
ヒント
IBConsole のシステムテーブルの表示を抑制するには、
[表示]メニューの[システムデー
タ]を選択解除します。
第 7 章 データベースの環境設定と保守
7-11
データベースの削除
データベースの削除
IBConsole でデータベースを削除できます。データベースの削除により、現在のデータベー
スとデータベースエイリアスとともに、データとメタデータも削除します。
データベースを削除できるのは、データベースの作成者または SYSDBA だけです。
データベースを削除するには
1 ツリーペインで削除するデータベースを選択します。
2 [データベース|データベースの削除]を選択するか、ワークペインで[データベース
の削除]を選択します。
3
重要
データベースをほんとうに削除するかどうかを確認するダイアログが表示されます。選
択データベースを削除する場合は[はい]をクリック、削除しない場合は[いいえ]を
クリックします。
データベースの削除によって、データベースのデータおよびメタデータがすべて削除され
ます。
バックアップファイルのプロパティ
IBConsole でバックアップファイル情報を表示して変更するには、
[バックアップエイリア
スのプロパティ]ダイアログを使用します。次のどちらかの方法で、このダイアログを表
示できます。
• ツリーペインで[Backup]を展開して、バックアップエイリアスを選択し、ワークペイン
で[バックアップエイリアスの修正]をダブルクリックします。
• ツリーペインでバックアップエイリアスを右クリックして、コンテキストメニューから
[バックアップエイリアスの修正]を選択します。
7-12 操 作 ガ イ ド
データベースバックアップファイルの削除
図 7.2 [バックアップエイリアスのプロパティ]ダイアログ
バックアップファイルのプロパティを変更するには
1
新しいバックアップエイリアス名を[エイリアス名]テキストフィールドに入力しま
す。
2
バックアップファイル名と対応するバックアップ関連ファイルのサイズの追加、削除、
変更をバックアップファイルテーブルで行います。ファイル名を指定する際は、ファイ
ルがあるパスも含めて指定してください。
3 [ターゲットデータベースサーバー]ドロップダウンリストからサーバーを選択します。
ドロップダウンリストのエディットボックス部分にサーバー名を入力することもできま
す。
4 [ターゲットデータベースエイリアス]ドロップダウンリストからデータベースエイリ
アスを選択します。ドロップダウンリストのエディットボックス部分にエイリアス名を
入力することもできます。
5 [適用]をクリックして、変更内容を保存します。
データベースバックアップファイルの削除
IBConsole でデータベースバックアップファイルを削除するには、次の方法のどちらかを使
用します。
• ツリーペインで[Backup]を展開して、バックアップエイリアスを選択し、ワークペイン
で[バックアップエイリアスの削除]をダブルクリックします。
• ツリーペインでバックアップエイリアスを右クリックして、コンテキストメニューから
[バックアップエイリアスの削除]を選択します。
第 7 章 データベースの環境設定と保守
7-13
シャドウイング
選択バックアップファイルをほんとうに削除するかどうかを確認するダイアログが表示さ
れます。バックアップファイルを削除する場合は[はい]をクリック、削除しない場合は
[いいえ]をクリックします。
シャドウイング
InterBase では、ディスク障害、ネットワーク障害、誤ったデータベースの削除などの場合
に、データベースを復元できます。この復元方法は、ディスクシャドウイング、または単に
シャドウイングと呼ばれます。ここでは、シャドウイングを設定して利用する方法について
説明します。さらに、シャドウイングに関連するさまざまな作業と、シャドウイングの利
点と制限についても説明します。
シャドウイングのための作業
シャドウイングをセットアップして保守する主な作業は以下のとおりです。
1
シャドウファイルの作成
シャドウイングは、まずシャドウの作成で始まります。シャドウとは、データベースの
物理コピーで、データベースと同じものです。データベースにシャドウを定義した場
合、データベースへの変更は、そのシャドウに同時に書き込まれます。このように、
シャドウはデータベースの現状を常に反映します。シャドウのさまざまな定義方法の詳
細は、7-15 ページの「シャドウファイルの作成」を参照してください。
2
シャドウファイルの有効化
シャドウは、データベースが使用できなくなった場合に起動されます。シャドウが起動
するとは、シャドウがデータベースを引き継いで、メインのデータベースとしてユー
ザーに利用されるようになるということです。シャドウは、その定義に基づいて、自動
的またはデータベース管理者(DBA)によって起動されます。シャドウの起動の詳細
は、7-18 ページの「シャドウの起動」を参照してください。
3
シャドウファイルの削除
シャドウイングが必要なくなれば、シャドウを削除することによってシャドウイングを
終了できます。シャドウを削除する方法の詳細は、7-19 ページの「シャドウの削除」
を参照してください。
4
シャドウファイルの追加
1 つのシャドウは、複数のファイルから構成することができます。シャドウのサイズが
大きくなれば、増えた領域に対応するため、いくつかのファイルを追加できます。シャ
ドウファイルの追加の詳細は、7-19 ページの「シャドウファイルの追加」を参照して
ください。
シャドウイングの利点
シャドウイングにはいくつかの利点があります。
• 復旧が早く、シャドウの起動と同時に利用できます。
7-14 操 作 ガ イ ド
シャドウイング
• シャドウを作成する際に、データベースへの排他アクセスは必要ありません。
• シャドウファイルはデータベースと同じ大きさのディスク領域を使用します。一方、ログ
ファイルはデータベースのサイズ以上に大きくなる可能性があります。
• ディスク容量の割り当てを制御できます。 シャドウは複数のディスク上の複数のファイル
に分けて保存できます。
• シャドウイングは別のプロセスを使用しません。 データベースプロセスがシャドウへの書
き込みを処理します。
• シャドウイングはバックグラウンドで実行でき、ほとんど保守する必要がありません。
シャドウイングの制限
シャドウイングには次の制限があります。
• シャドウイングは、レプリケーションを行うわけではありません。 シャドウイングは、マ
スターデータベースへのすべての書き込み操作を一方的に複製するだけです。クライアン
トアプリケーションからシャドウファイルに直接アクセスすることはできません。
• シャドウイングは、ハードウェア障害や誤ったデータベースの削除から復元する場合にの
み有効です。データベースを壊すようなユーザーエラーやソフトウェア障害は、シャドウ
に対しても反映されます。
• 特定の時点への復元はできません。 シャドウを起動すれば、データベースの複製として引
き継がれます。シャドウイングでは、部分的な復元はできません。
• シャドウイングは、ローカルディスク上でしか実行できません。NFS ファイルシステムや
マップドライブへのシャドウイングはサポートされていません。テープやその他の媒体へ
のシャドウイングもサポートされていません。
シャドウファイルの作成
シャドウファイルは、SQL の CREATE SHADOW 文を使って作成します。排他アクセスを必
要としないので、他のユーザーに影響を与えずに実行できます。CREATE SHADOW の詳細
は、『言語リファレンス』を参照してください。
シャドウを作成する前に、以下の点を考慮してください。
• シャドウの場所
シャドウは、メインデータベースのあるディスクとは異なるディスク上に作成する必要
があります。シャドウイングはディスク障害の場合の復元方法として考えられたものな
ので、データベースとそのシャドウを同じディスク上に置くことは、シャドウイングの
目的に反することになります。
• シャドウの分散
シャドウは、シャドウファイルと呼ばれる単一のファイル、またはシャドウセットと呼
ばれる複数のファイルとして作成できます。領域の割り当てとディスク I/O を向上させ
るために、シャドウセットの各ファイルを異なるディスクに置くことができます。
• データベースへのユーザーアクセス
第 7 章 データベースの環境設定と保守
7-15
シャドウイング
シャドウが使用不可になったときに、シャドウイングが再開されるまでデータベースへ
のユーザーアクセスを禁止するか、データベースの変更がシャドウに反映されなくても
アクセス可能にするのいずれかを選択できます。必要な動作によって、データベース管
理者は自動モードか手動モードのどちらかでシャドウを作成します。シャドウ作成の
モードの詳細は、7-17 ページの「自動モードと手動モード」を参照してください。
• 自動シャドウファイル作成
シャドウが新しく自動的に作成されることを確認するために、条件付きシャドウを作成して
ください。詳細は、この章の「条件付きシャドウ」を参照してください。
以下の節で、シャドウ作成時の次のようなオプションを説明します。
• 単一ファイルまたはマルチファイルのシャドウ
• 自動または手動のシャドウ
• 条件付きシャドウ
これらの選択は互いに排他的ではありません。たとえば、手動モードで単一ファイルの条件
付きシャドウを作成することができます。
単一ファイルシャドウの作成
データベース employee.ib のための単一ファイルシャドウを作成するには、次のように入力
します。
SQL> CREATE SHADOW 1 '/usr/InterBase/examples/employee.shd';
シャドウファイルの名前は employee.shd で、番号 1 で識別されます。isql コマンド SHOW
DATABASE を使ってシャドウファイルが作成されたことを確認してください。
SQL> SHOW DATABASE;
Database: employee.ib
Shadow 1:'/usr/InterBase/examples/employee.shd' auto
PAGE_SIZE 4096
Number of DB pages allocated = 392
Sweep interval = 20000
シャドウのページサイズは、データベースのページサイズと同じです。
マルチファイルシャドウの作成
データベースのサイズが大きい場合、マルチファイルシャドウにシャドウイングでき、複
数のディスクにシャドウファイルを分散します。マルチファイルシャドウを作成するには、
シャドウセットの各ファイルの名前とサイズを指定します。マルチファイルデータベース
の場合と同じで、二次ファイルのサイズを指定するオプションには次の 2 つの方法があり
ます。各二次ファイルの開始ページを指定するか、二次ファイルのページ長を指定します。
LENGTH キーワードでサイズを指定する場合、最終ファイルの長さは指定しないでくださ
い。InterBase は、必要に応じて最終ファイルのサイズを動的に変更します。
たとえば、次の例は 3 つのファイルからなるシャドウセットを作成します。一次ファイル
employee.shd の大きさは 10,000 データベースページです。二次ファイルは 20,000 データベー
スページで、最終ファイルは必要に応じてサイズが大きくなります。
SQL> CREATE SHADOW 1 'employee.shd' LENGTH 10000
7-16 操 作 ガ イ ド
シャドウイング
CON> FILE 'emp2.shd' LENGTH 20000
CON> FILE 'emp3.shd';
二次ファイルのページ長を指定するかわりに、それらの開始ページを指定することができ
ます。次の例は、前の例と同じシャドウを作成します。
SQL> CREATE SHADOW 1 'employee.shd'
CON> FILE 'emp1.shd' STARTING AT 10000
CON> FILE 'emp2.shd' STARTING AT 30000;
どの場合も、SHOW DATABASE を使用して、作成されたシャドウのファイル名、ページ長、
および開始ページを確認できます。
SQL> SHOW DATABASE;
Database: employee.ib
Shadow 1:'/usr/InterBase/examples/employee.shd' auto length 10000
file /usr/InterBase/examples/emp1.shd length 2000 starting 10000
file /usr/InterBase/examples/emp2.shd length 2000 starting 30000
PAGE_SIZE 4096
Number of DB pages allocated = 392
Sweep interval = 20000
二次シャドウファイルに割り当てたページ長は、データベースの二次ファイルのページ長
と同じでなくてもかまいません。データベースが大きくなり、最初のシャドウファイルの容
量が限界になると、データベースの更新時に自動的に次のシャドウファイルにオーバーフ
ローします。
自動モードと手動モード
シャドウは、データベースが使用できなくなるのと同じ理由(ディスク障害、ネットワー
ク障害、または誤った削除)で使用できなくなります。自動モードで作成されたシャドウが
使用できなくなった場合、データベース操作はシャドウイングせずに自動的に継続されま
す。手動モードで作成されたシャドウが使用できなくなった場合は、その後のデータベース
アクセスはデータベース管理者が措置をとるまで禁止されます。次の表は、自動モードと手
動モードの利点を比較したものです。
表 7.1
自動シャドウと手動シャドウ
モード
利点
欠点
自動
データベースの操作が中断されない
一時的にシャドウイングが行われなくなる。
データベースがシャドウなしで操作されてい
ることをデータベース管理者が知らない可能
性がある。
手動
データベースがシャドウなしで動作する
のを防止する
問題が解決するまでデータベース操作は停止
される。
データベース管理者の関与が必要になる。
AUTO モード
CREATE SHADOW 文に AUTO キーワードを加えると、自動モードでシャドウが作成され
ます。
第 7 章 データベースの環境設定と保守
7-17
シャドウイング
SQL> CREATE SHADOW 1 AUTO 'employee.shd';
AUTO モードがデフォルト設定なので、AUTO キーワードは省略しても同じです。
AUTO モードでは、シャドウがなくてもデータベース操作は中断されません。シャドウイン
グを再開するには新しいシャドウを作成する必要があります。元のシャドウが条件付き
シャドウとして作成されていた場合は、新しいシャドウが自動的に作成されます。条件付き
シャドウの詳細は、7-18 ページの「条件付きシャドウ」を参照してください。
MANUAL モード
シャドウを MANUAL モードで作成するには、CREATE SHADOW 文で MANUAL キーワー
ドを指定します。
SQL> CREATE SHADOW 1 MANUAL 'employee.shd';
手動モードは、シャドウイングの継続がデータベース操作の継続より重要なときに役立ち
ます。手動モードのシャドウが使用できなくなると、それ以降はデータベースに接続できな
くなります。データベース接続を再度できるようにするには、データベースの所有者または
SYSDBA が次のコマンドを入力する必要があります。
gfix -kill database
このコマンドは、指定したデータベースに対応する使用不能シャドウへのメタデータ参照
を削除します。参照を削除した後でシャドウイングを再開すれば、新しいシャドウを作成で
きます。
条件付きシャドウ
シャドウファイルがデータベースに置き換わるときに、自動的に新しいシャドウファイル
が生成され、シャドウイングが中断しないように定義できます。この方法で定義されたシャ
ドウファイルは、条件付きシャドウと呼ばれます。
条件付きシャドウを作成するには、CREATE SHADOW 文で CONDITIONAL キーワードを
指定します。次に例を示します。
SQL> CREATE SHADOW 3 CONDITIONAL 'atlas.shd';
条件付きファイルを作成しておくと、次のいずれかが起こったときに、新しいシャドウが自
動的に作成されます。
• データベースまたはそのシャドウファイルが使用できなくなった。
• ハードウェア障害のためにシャドウがデータベースに置き換わった。
シャドウの起動
データベースが使用できなくなったときは、シャドウを起動にすることによってデータ
ベース操作を再開できます。シャドウを起動するには、SYSDBA またはデータベースの所
有者としてログインして、-active オプションで gfix を実行します。
重要
シャドウを起動する前に、メインデータベースが使用できないことをチェックします。メイ
ンデータベースが使用可能なときにシャドウを起動すると、メインデータベースへの接続
によって、そのシャドウが壊れることがあります。
7-18 操 作 ガ イ ド
データベースプロパティの設定
シャドウを起動するには、その一次ファイルのパス名を指定してください。たとえば、デー
タベース employee.ib がシャドウ employee.shd を持っている場合、次のように入力します。
gfix -activate employee.shd
シャドウが起動した後、その名前を元のデータベース名に変更してください。シャドウイン
グを継続する必要があり、別のドライブを使用できる場合は、新しいシャドウが作成され
ます。
シャドウの削除
シャドウイングを停止するには、DROP SHADOW 文の引数としてシャドウ番号を指定しま
す。次に例を示します。
SQL> DROP SHADOW 1
シャドウ番号を調べる場合は、isql の SHOW DATABASE コマンドを使用します。
重要
DROP SHADOW はデータベースのメタデータからシャドウの参照を削除するとともに、
ディスク上の物理的なシャドウファイルも削除します。いったんファイルがディスクから
削除されると、それらを復元する方法はありません。しかし、シャドウは単に既存のデータ
ベースをコピーしたものなので、新しいシャドウは削除されたシャドウと同じものになり
ます。
シャドウファイルの追加
データベースが大きくなると考えられる場合は、シャドウにファイルを追加することを考
えてください。シャドウファイルを追加するには、最初に DROP SHADOW を使って既存の
シャドウを削除します。その後 CREATE SHADOW を使ってマルチファイルシャドウを作
成します。
二次シャドウファイルに割り当てたページ長は、データベースの二次ファイルのページ長
と同じでなくてもかまいません。データベースが大きくなり、最初のシャドウファイルの容
量が限界になると、データベースの更新時に自動的に次のシャドウファイルにオーバーフ
ローします。
データベースプロパティの設定
[データベースのプロパティ]ダイアログを使用すると、データベース設定を表示して設定
できます。このダイアログを表示するには、次に示すいずれかの方法を行います。
• ツリーペインで接続データベースまたはデータベース階層で任意のブランチを選択して、
[データベース|データベースのプロパティ]を選択します。
• ツリーペインで接続データベースを選択して、ワークペインで[データベースのプロパ
ティ]をダブルクリックします。
• ツリーペインで接続データベースを右クリックして、コンテキストメニューから[データ
ベースのプロパティ]を選択します。
第 7 章 データベースの環境設定と保守
7-19
データベースプロパティの設定
[データベースのプロパティ]ダイアログには、[エイリアス]と[一般]という 2 つのタ
ブがあります。
[エイリアス]タブ
[データベースのプロパティ]ダイアログの[エイリアス]タブでは、データベースのエイ
リアス名および選択データベースのファイルパスとファイル名を指定できます。
図 7.3 [データベースのプロパティ]:
[エイリアス]タブ
データベースエイリアス設定を変更するには
1
2
データベースのエイリアス名を[エイリアス名]テキストフィールドに入力します。
データベースファイル名をパスを含めて[ファイル]テキストフィールドに入力しま
す。[参照]ボタン をクリックして対象ファイルの位置を指定することもできます。
データベースファイル名を変更する場合は、[データベースのプロパティ]ダイアログ
を開く前に、そのデータベースへの接続を切断する必要があります。
3
一般的なデータベース設定を表示して設定する必要がある場合は、[一般]タブをク
リックして、次に説明する「[一般]タブ」を参照してください。
4
データベースプロパティへの変更を終了して、変更内容を保存するには[適用]をク
リックします。それ以外の場合は、[キャンセル]をクリックします。
[一般]タブ
[データベースのプロパティ]ダイアログの[一般]タブでは、データベースの所有者、二
次ファイルとその開始ページ、割り当てられたデータベースページ数とページサイズのよ
うなデータベース設定を表示できます。[強制書き込み]、
[スイープ間隔]、
[データベース
ダイアレクト]
、[読み取り専用]などのオプションを設定することもできます。
7-20 操 作 ガ イ ド
データベースプロパティの設定
図 7.4 [データベースのプロパティ]:
[一般]タブ
データベースの一般的なオプションを変更するには
1 [オプション]テーブルのオプション値を選択します。オプション値をクリックするか、
新しい値を入力するか、ドロップダウンリストから新しい値を選択するか、またはオプ
ションの値をダブルクリックして値をリスト内の次の値にして、オプション値を指定で
きます。
2
データベースエイリアス設定を表示または設定する必要がある場合、[エイリアス]タ
ブをクリックして上記の「[エイリアス]タブ」を参照してください。
3
データベースプロパティへの変更を終了して、変更内容を保存するには[適用]をク
リックします。それ以外の場合は、[キャンセル]をクリックします。
表 7.2
一般オプション
オプション
値
強制書き込み
オプション値は[有効]と[無効]。強制書き込みの詳細は、7-26 ページの
「強制書き込みとバッファ書き込み」を参照
スイープ間隔
スイープ間隔とは、自動データベーススイープが起こるまでに発生するトラ
ンザクション数。スイープ間隔に対しては任意の正の数を入力できる。自動ス
イープを無効にするには 0 を指定する。スイープ間隔の設定の詳細は、7-22
ページの「スイープ間隔と自動保守」を参照
データベース ダイアレ
クト
InterBase データベース SQL ダイアレクトは、二重引用符、大きな有効桁数を
持つ高精度数値、およびデータ型 SQL DATE、TIME、TIMESTAMP をどのよ
うに解釈するかを決定する。ほとんどの場合、現在の InterBase 機能すべてに
アクセスするにはダイアレクト 3 を選択する
読み取り専用
オプションの値は、
[はい]または[いいえ]
。データベースを読み取り専用に
設定するには、
[読み取り専用]オプションを[はい]に設定する。これによ
り、ユーザーによる DML 実行やデータベースの更新が禁止される。このオプ
ションのデフォルト設定は[いいえ]
。詳細は、7-9 ページの「データベース
を読み取り専用にする」を参照
第 7 章 データベースの環境設定と保守
7-21
スイープ間隔と自動保守
スイープ間隔と自動保守
データベースのスイープは、古いレコードを削除するためのシステマチックな方法です。定
期的にスイープを実行することによって、データベースが大きくなりすぎるのを防ぐこと
ができます。ただし、スイープがシステムの性能を落とすこともあります。
データベース管理者は、ユーザーのニーズを最大限満足させるために、データベースのス
イープを調整して、その利点と欠点のバランスをとる必要があります。
スイープの概要
InterBase は、マルチジェネレーションアーキテクチャを採用しています。これはデータレコー
ドの複数バージョンがデータページに直接保存されるという意味です。あるレコードを更新し
たり削除すると、以前のレコードのコピーを保存して、新しいバージョンを作成します。これ
により、データベースのサイズが大きくなります。
ガベージコレクション
データベースの拡大を押さえるために、InterBase はデータベースをスイープすることによ
りガベージコレクションを実行します。この処理により、古いバージョンのレコードに割り
当てられていた領域が解放されます。トランザクションがレコードにアクセスするとき、そ
のレコードの古いバージョンがガベージコレクションの対象になります。ロールバックさ
れたレコードはガベージコレクションの対象にはなりません。ロールバックされたレコー
ドも含めて、すべてのレコードをガベージコレクションするために、InterBase は定期的に
データベースをスイープします。
自動保守
アクティブな(未解決)状態のトランザクションを「懸案の」トランザクションと言いま
す。データベースのトランザクションインベントリで、
「コミット済み」以外のステータス
を持つ最初のトランザクションを OIT(最も古い懸案のトランザクション)と言います。自
動保守は、OIT と OAT(最も古いアクティブトランザクション)の差がスイープ間隔より
大きくなったときに実行されます。このスイープ間隔はデフォルトでは 20,000 ですが、変更
することもできます(7-23 ページの「スイープ間隔の設定」を参照)。
メモ
20,000 トランザクションごとに自動的にスイープされるとは限らない、ということは微妙
ですが重要な特徴です。OIT と OAT の差 がしきい値に達するときにのみスイープされま
す。データベースに対するすべてのトランザクションがすぐにコミットされる場合、この差
は自動的なスイープの引き金となるほど大きくはありません。
InterBase サーバープロセスは、特別なスレッドを起動して、このスイープを不定期にコミッ
トします。その結果、クライアントプロセスは機能し続けることができ、スイープによる
作業量には影響されません。
7-22 操 作 ガ イ ド
スイープ間隔と自動保守
ヒント
システマチックにガベージコレクションを行う方法は、データベースのスイープ以外にも
あります。InterBase サーバーがすべてのレコードを読み込むという点では、データベース
のバックアップも同じ効果があります。したがって、定期的にデータベースをバックアップ
すれば、スイープの必要性を減らすことができます。これにより、アプリケーションの効率
を良好に保つことができます。バックアップと復元の詳細は、8-1 ページの「InterBase
バックアップと復元オプションについて」を参照してください。
スイープの設定
データベースのスイープに関して以下のことを制御できます。
• 自動的にスイープ間隔を変更する
• 自動的なスイープを無効にする
• データベースを即時にスイープする
最初の 2 つの機能は[データベースのプロパティ]ダイアログで実行できます。最後の機能
はスイープメニューコマンドで実行できます(7-24 ページの「データベースの即時スイー
プ処理」を参照)。
スイープ間隔の設定
自動的なスイープの間隔を設定するには、次のように指定します。n はスイープ間のトラン
ザクション数です。
gfix -h n
データベースにロールバックされたトランザクションがある場合は、データベースのス
イープはトランザクションの起動に影響します。最後にスイープしてからの時間が長けれ
ば、トランザクションの起動時間も長くなります。スイープ間隔を短くすれば、トランザク
ションの起動時間も短くできます。
一方、頻繁にデータベースのスイープを実行すると、アプリケーションの性能を下げるこ
とになります。スイープ間隔を長くすれば、全体の能力を向上させるために有効です。デー
タベース管理者は、影響を受けるアプリケーションの問題点を推測し、そのスイープ間隔
によって必要なデータベース性能を得ているかを判断する必要があります。
IBConsole でのスイープ間隔の設定については、7-19 ページの「データベースプロパティ
の設定」を参照してください。
ヒント
ロールバックされたトランザクションがデータベースにたくさん含まれていなければ、ス
イープ間隔を変えてもデータベースのサイズにはほとんど影響しません。したがって、デー
タベース管理者は、自動的にスイープしないように設定し、特定の時間にスイープを実行
することによってデータベースをチューニングするのが最も一般的です。これらの方法に
ついては、以降の 2 つの節で説明します。
自動スイープの抑止
自動的なスイープが行われないようにするには、スイープ間隔を 0 に設定します。次のよう
な場合に、自動スイープの抑止が有効です。
第 7 章 データベースの環境設定と保守
7-23
データベースキャッシュの設定
• 最大スループットが重要な場合。 スイープによってトランザクションが遅延することはあ
りません。
• 任意にスイープを実行する場合。 データベースを手動でスイープすることができます。 ク
ライアントと資源の取り合いをしないで済むように、データベースサーバー上のアクティ
ビティが少ないときにスイープをするようにするのが一般的です。
IBConsole での自動スイープの抑止については、7-19 ページの「データベースプロパティ
の設定」を参照してください。
データベースの即時スイープ処理
次の方法を使用すると、その時点でデータベーススイープを行うことができます。
• ツリーペインで接続しているデータベースを右クリックし、コンテキストメニューから[保
守|スイープ]を選択します。
• ツリーペインで接続しているデータベースを選択し、ワークペインで[スイープ]をダブ
ルクリックします。
• 次のコマンドを入力します。
gfix -sweep
この操作によって、ただちにデータベースのスイープが実行され、ロールバックされたレ
コードと古いバージョンレコードによって占められている領域が解放されます。スイープ
は、自動的に指定された間隔でも実行されます。
データベースのスイープの際に、データベースをシャットダウンする必要はありません。ス
イープはいつでも実行できますが、システムのパフォーマンスに影響を与えるので、ユー
ザーが少ないときに実行する必要があります。
スイープがデータベースで排他的に実行される場合は、さらにいくつかのチューニングが
実行されます。アクティブなトランザクションが残っていない場合、スイープはデータレ
コードの状態と過去のトランザクションのインベントリ状態を更新します。コミットされ
ていないトランザクションは、最終的には破棄され、データベースバージョンのスナップ
ショットを保持するために内部のデータ構造を記録することはありません。この利点は、メ
モリの使用量が減って、パフォーマンスが向上することです。
データベースキャッシュの設定
データベースキャッシュは、同時にメモリで保持するデータベースページ数(バッファ)で
す。データベースキャッシュサイズは、データベースのページ数です。データベースキャッ
シュのデフォルトサイズは 3 つのレベルで設定できます。
• サーバーレベル:すべてのデータベースに適用
• データベースレベル:1 つのデータベースに対してだけ適用(gfix を使って特定のデータ
ベースのサイズを設定)
• 接続レベル:特定の isql 接続にのみ適用
7-24 操 作 ガ イ ド
データベースキャッシュの設定
InterBase では、サーバーレベルではなく、データベースレベルでキャッシュサイズを設定
することをお勧めします。これにより、データベースキャッシュサイズを削減できます。
SuperServer インストール(Windows、Linux、または UNIX)の場合、サーバー上のすべて
のデータベースはキャッシュサイズ(データベースページ数)にページサイズを乗算した
ものと RAM が同じ大きさでなければなりません。デフォルトでは、キャッシュサイズは
データベースごとに 2048 ページで、ページサイズは 4KB です。つまり、デフォルト設定で
動作する単一データベースでは 8MB のメモリが必要で、3 つのデータベースならば 24MB
のメモリが必要になります。
従来のインストールでは、データベースで必要なメモリの総量はクライアント接続の数に
依存します。各クライアントは、75 キャッシュページで割り当てられるので、メモリの使
い方は計算できます。
cache size × number of attachments × 75
データベースごとのデフォルトキャッシュサイズ
ユーティリティ gfix の buffers パラメータで特定のデータベースのデフォルトキャッシュ
ページ数を設定します。
gfix -buffers n database_name
これで、2048 ページのデフォルト値を変更して、特定のデータベースのキャッシュページ
数を n に設定します。
gfix を実行できるのは、SYSDBA またはデータベースの所有者だけです。
isql 接続ごとのデフォルトのキャッシュサイズ
isql 接続中のキャッシュページ数を設定するには、isql を次のオプションで実行します。
isql -c n database_name
ここで、n はそのセッションのデフォルトで使用されるキャッシュページ数です。n は
DATABASE_CACHE_PAGE または gfix で設定されている値をすべて解除します。n は 9 以
上でなければなりません。
isql クエリーに入力された CONNECT 文は引数 CACHE n をとります(CONNECT 関数の
詳細は、『言語リファレンス』の「CONNECT」を参照)。次に例を示します。
isql> CONNECT database_name CACHE n;
値 n は、データベースページ数を表す任意の正整数です。データベースに他の接続があり、
データベースキャッシュがすでに存在する場合は、n が現在のキャッシュサイズより大きい
ときにのみ、キャッシュサイズが大きくなります。
アプリケーションのキャッシュサイズの設定
InterBase API の場合:パラメータ isc_dpb_num_buffers を使ってデータベースパラメータバッ
ファ(DPB)のキャッシュサイズを設定します。
第 7 章 データベースの環境設定と保守
7-25
強制書き込みとバッファ書き込み
IBX の場合:num_buffers パラメータを使って TIBDatabase のパラメータリストでキャッシュ
サイズを設定します。たとえば、num_buffers=250 のように指定します。パラメータを正し
く解析させるには、等号(=)の前後にスペースを入れてはなりません。
サーバーごとのデフォルトキャッシュサイズ
スーパーサーバーインストールの場合、データベースキャッシュで使用するデフォルトのペー
ジ数を設定できます。デフォルトでは、データベースキャッシュサイズはデータベースごとに
2048 ページです。このデフォルトは、ibconfig 設定ファイルの DATABASE_CACHE_PAGES 値
を変えることによって、変更できます。この設定を変更する場合、サーバー上のアクティブな
サーバーすべてに適用されます。
gfix ユーティリティで、各データベースのデフォルトのキャッシュサイズを設定できます。
この方法は柔軟性が高く、メモリが過度に使用されたり、キャッシュが不足する危険も減
ります。
キャッシュサイズの設定には、DATABASE_CACHE_PAGES ではなく、gfix を使用するこ
とを強くお勧めします。
キャッシュサイズの確認
現在使用されているデータベースキャッシュのサイズを確認するには、isql で以下のコマ
ンドを実行します。
isql> CONNECT database_name;
isql> SET STATS ON;
isql> COMMIT;
Current memory = 415768
Delta memory = -2048
Max memory = 419840
Elapsed time = 0.03 sec
Buffers = 2048
Reads = 0
Writes 2
Fetches = 2
isql> QUIT;
空の COMMIT コマンドは、isql にメモリとバッファの使用状況を表示するように指示しま
す。「Buffers」の行はデータベースのキャッシュサイズを指定します。
強制書き込みとバッファ書き込み
強制書き込み(同期書き込みとも呼ばれる)とは、データベースが 1 つの(内部)書き込
み操作を実行するときに、データが物理的にディスクに書き込まれることです。
7-26 操 作 ガ イ ド
検査と修復
強制書き込みが無効の場合は、オペレーティングシステムがバッファに書き込むため、
InterBase が書き込みを実行してもデータは物理的にディスクには書き込まれません。デー
タがディスクに書き込まれる前にシステム障害が発生すると、その情報は失われます。
強制書き込みはデータの整合性と安全性を保証します。しかし、パフォーマンスは低下し
ます。特に、データ変更を含む操作は遅くなります。
強制書き込みは、
[データベースのプロパティ]ダイアログで有効または無効に設定できま
す。詳細は、7-19 ページの「データベースプロパティの設定」を参照してください。
検査と修復
日常の操作では、データベース構造に対して小さな問題を引き起こす出来事が発生するも
のです。以下のようなことが起こります。
• データベースアプリケーションの異常終了。 これはデータベースの整合性には影響しませ
ん。アプリケーションが終了するとき、コミットされたデータは保存されますがコミット
されていない変更はロールバックされます。実行されていない変更のために 1 つのデータ
ページをすでに割り当てている場合は、そのページは孤立ページと考えることができます。
孤立ページは空き領域に戻される未割り当てのディスク領域です。
• オペレーティングシステムまたはハードウェアでの書き込みエラー。 これらは通常、デー
タの整合性の問題を引き起こします。書き込みエラーは、データベースページやインデッ
クスなどのデータ構造が壊れたり失われる原因となります。これらのデータベース構造の
破損によって、コミットされたデータは修復不能になります。
データベースの検証
以下のようなときは、データベースを検査する必要があります。
• データベースのバックアップが成功しないとき
• アプリケーションでデータベース破損エラーが発生するとき
• データ構造の破損、または割り当ての不適切な領域を定期的に点検するとき
• データ破損の疑いがあるとき
データベースを検査するときは、データベースに排他的にアクセスする必要があります。排
他アクセスするには、データベースをシャットダウンしてください。データベースに排他ア
クセスできない場合は、エラーメッセージが表示されます。
OBJECT database_name IS IN USE
データベースをシャットダウンするには、7-31 ページの「データベースのシャットダウン」
の指示を参照してください。
gfix を使用したデータベースの検証
gfix を使ってデータベースを検証するには、次の手順にしたがいます。
1
次のコマンドを入力します。
gfix -v
第 7 章 データベースの環境設定と保守
7-27
検査と修復
2
使用しているデータベースが壊れている可能性がある場合、OS のコマンドを使って
データベースのコピーを作成してください(gbak は壊れたデータはバックアップしま
せん)。
3
gfix コマンドを使用して、コピーしたデータベースの壊れた構造にマークを付けます。
gfix -mend
4
gfix がチェックサムエラーを報告したら、チェックサムエラーを無視して、データベー
スをもう一度有効にして修正を行います。
gfix -validate -ignore
メモ:本来のチェックサムは ODS 8 以前の InterBase でのみサポートされます。
場合によっては、データベースを複数回有効にしてすべてのエラーを修正する必要があり
ます。
IBConsole を使用したデータベースの検証
IBConsole でデータベースを検証するには、次に示すいずれかの方法で[データベースの検
証]ダイアログを表示します。
• ツリーペインで接続解除されているデータベースを選択して、ワークツリーから[データ
検証]をダブルクリックします。
• ツリーペインで接続解除されているデータベースを右クリックして、コンテキストメ
ニューから[データ検証]を選択します。
• [データベース|保守|データ検証]を選択します。
図 7.5 [データベースの検証]ダイアログ
データベースを検査するには
1
指定されたデータベースが間違っていないかどうかを検査します。間違っている場合、
このダイアログをキャンセルして[データベースの検証]ダイアログを適切なデータ
ベースの下から再度表示します。
2
右側の列をクリックし、ドロップダウンリストから[はい]または[いいえ]を選択す
ることで、検査オプションを指定します。各オプションの詳細は、表 7.3「検証オプ
ション」を参照してください。
3
検査を行う場合は[OK]を、それ以外の場合には[キャンセル]をクリックします。
7-28 操 作 ガ イ ド
検査と修復
IBConsole によるデータベースの検査では、データベース構造の整合性を検査します。特に、
以下のことが行われます。
• 破損データ構造をレポートする
• 割り当ての不正なデータページをレポートする
• 孤立ページを空き領域に戻す
表 7.3
検証オプション
オプション
値
レコード断片の検証
オプション値は、[ はい ] または [ いいえ ] です。デフォルトでは、データ
[レコード断
ベースの検査はページ構造だけをレポートして解放します。
片の検証]オプションを [ はい ] に設定した場合、ページ構造とレコード
構造をレポートして解放します。
読み取り専用検証
オプション値は、[ はい ] または [ いいえ ] です。デフォルトでは、データ
ベースの検査で、必要に応じてデータベースが更新されます。更新しない
場合は、
[読み取り専用検証]オプションを [ はい ] に設定します。
チェックサム エラーの無
視
オプション値は、[ はい ] または [ いいえ ] です。チェックサムは、ページ
ごとにデータを解析してデータの整合性を検査するものです。不良
チェックサムとは、システム障害などでデータベースページがランダム
に上書きされている状態を言います。
チェックサムエラーはデータが壊れていることを表します。チェックサ
ムエラーが発生したデータベースを修復するには、
[チェックサム エラー
の無視]オプションを [ はい ] に設定します。これにより、IBConsole は、
データベースの検査でチェックサムを無視します。チェックサムを無視
することによって、壊れているデータベースを正しく検査することがで
きます。ただし、壊れているデータは失われます。
メモ:本来のチェックサムは ODS 8 以前の InterBase でのみサポートされ
ます。
第 7 章 データベースの環境設定と保守
7-29
検査と修復
破損したデータベースの修復
データベースにエラーがある場合は、次のようなダイアログが表示されます。
図 7.6 [検査レポート]ダイアログ
発生したエラーは、ダイアログのテキスト表示領域にまとめて表示されます。データベース
検査ダイアログで選択した修復オプションがこのダイアログでも選択されます。
データベースを修復するには、
[修復]を選択します。これにより、レコードを壊した問題
点を修復して、壊れている構造体をマークします。次の操作(バックアップなど)では、
マークされたレコードは無視されます。
破損がかなりひどい場合は、IBConsole では修復できません。領域割り当てページなどの重
要な構造の破損などがそれに当たります。InterBase と関係しないランダムなある種の
チェックサムエラーなども修復できません。
メモ
解放ページはレポートされず、壊れたレコードがマークされます。修復中にマークされたす
べてのレコードは、データベースのバックアップ時には無視されます。
データベースが破損している恐れがある場合は、次の操作を行います。
1
オペレーティングシステムのコマンドを使用して、データベースのコピーをとります。
データベースに壊れたデータがある場合は、バックアップできないので、IBConsole の
バックアップユーティリティや gbak コマンドは使用しないでください。コピーした
データベースを修復して、壊れた構造体をマークします。IBConsole がチェックサムエ
ラーをレポートしていれば、[Ignore Checksum Errors]オプションを[True]に設定し
てデータベースを再度検査し、修復してください。メモ:本来のチェックサムは ODS 8
以前の InterBase でのみサポートされます。
2
すべてのチェックサムエラーを修復するために、複数回のデータベース検査が必要な場
合もあります。[Read Only Validation]オプションを[True]に設定して、データベー
スを再度検査します。
7-30 操 作 ガ イ ド
データベースのシャットダウンと再起動
3
修正されたデータベースを IBConsole または gbak でバックアップします。このとき、
損傷したレコードはバックアップに含まれなかったために失われます。データベース
バックアップの詳細は、第 8 章「データベースのバックアップと復元」を参照してく
ださい。
4
インデックスとその他のデータベース構造を再作成するためにデータベースを復元しま
す。復元されたデータベースには、壊れたところはありません。
5
復元されたデータベースを読み取り専用検査オプション[True]で検査し、データベー
スの復元によって問題点が解決していることを確認してください。
データベースのシャットダウンと再起動
データベースの保守ではデータベースのシャットダウンが必要な場合があります。データ
ベースをシャットダウンできるのは、SYSDBA またはデータベースの所有者(作成者)だ
けです。データベースをシャットダウンするユーザーは、データベースを排他的にアクセス
できます。
以下のような場合は、データベースを排他的にアクセスする必要があります。
• データベースを検査して修復する
• データベース内のテーブル上の外部キーを追加または削除する
• 二次データベースファイルを追加する
データベースをシャットダウンした後でも、データベースの所有者と SYSDBA はデータ
ベースへ接続できます。それ以外のユーザーがデータベースへ接続しようとすると、デー
タベースがシャットダウンしていることを示すエラーメッセージが表示されます。
データベースのシャットダウン
データベースをシャットダウンするには、ツリーペインから接続されたデータベースを選
択してワークペインで[シャットダウン]をダブルクリックするか、
[データベース|保守
|シャットダウン]を選択します。
[データベースのシャットダウン]ダイアログが表示さ
れます。
図 7.7 [データベースのシャットダウン]ダイアログ
第 7 章 データベースの環境設定と保守
7-31
データベースのシャットダウンと再起動
シャットダウンのタイムアウトオプション
ドロップダウンリストから新しい値を選択するか、ドロップダウンリストのエディット
ボックス部分に値を入力することで、タイムアウト値を指定できます。タイムアウト値は、
1 ~ 500 分の範囲内で指定できます。
シャットダウンオプション
ドロップダウンリストから新しい値を選択して、シャットダウンオプションを指定できま
す。シャットダウンオプションの値には、[待機中は新しい接続は拒否されます]、
[待機中
は新しいトランザクションは拒否されます]、[タイムアウト後に強制的にシャットダウン
されます]があります。
[ 待機中は新しい接続は拒否されます ]
このオプションによって、既存のすべてのデータベース接続は影響を受けずに完了するこ
とができます。すべてのプロセスがデータベースから接続解除されてから、IBConsole は
データベースをシャットダウンします。タイムアウトになるところで、まだアクティブな接
続がある場合は、データベースはシャットダウンされません。
これは、タイムアウト時間内にデータベースに新規接続できないようにします。これによ
り、他のユーザーは新しい作業が始められないので、現在のユーザーは作業を完了するこ
とができます。
たとえば、SYSDBA は、日常の保守業務のため、1 日の終わりに(今から 5 時間後)データ
ベース order.ib をシャットダウンする必要があるとします。マーケティング部門は現在重
要なセールスレポートを作成するために、そのデータベースを使用しています。
このような場合、SYSDBA は次のようなパラメータを使って orders.ib をシャットダウンする
ことになります。
• 新しい接続を拒否する
• タイムアウトを 300 分(5 時間)にする
このようにパラメータを指定すると、データベースの新規接続が拒否され、5 時間以内にア
クティブな接続がなくなった時点でデータベースがシャットダウンされます。
すでにそのデータベースに接続しているユーザーは、セールスレポートの処理を完了でき
ますが、新規接続は拒否されます。タイムアウト時間内において、データベース管理者は午
後 6 時までに仕事を終えるようにユーザーに繰り返し同報メッセージを送信します。
すべてのユーザーが接続解除した後、そのデータベースはシャットダウンされます。5 時間
が経過してもすべてのユーザーが接続解除していなければ、データベースはシャットダウ
ンされません。シャットダウンは危険なので強制的に行われません。
レポートの作成にはいくつかのトランザクションが必要なので、新しいトランザクション
を拒否するのは適切ではありません。また必要なトランザクションを完了する前に、ある
ユーザーはデータベースを接続解除するかもしれません。ユーザーの作業に支障が出るた
め、強制的なシャットダウンすることも適切ではありません。
7-32 操 作 ガ イ ド
データベースのシャットダウンと再起動
[ 待機中は新しいトランザクションは拒否されます ]
このオプションによって、既存のトランザクションは、正常に完了することができます。ト
ランザクション処理が完了したら、IBConsole はデータベースをシャットダウンします。新
しいトランザクションを拒否しているので、新しいデータベース接続は拒否されます。タイ
ムアウトになるところで、まだアクティブなトランザクションがある場合は、データベー
スはシャットダウンされません。
これは、データベースに対する新規トランザクションの起動を拒否する、最も制限が強い
シャットダウンです。このオプションは、新規接続も拒否します。
SYSDBA は、データベース orders.ib のシャットダウンを必要とする重要な操作の必要がある
と仮定してください。このデータベースは、たくさんのカスタマーサービス担当者によっ
て、新しい注文の入力や既存の注文を問い合わせるために 1 日中使用されます。
午後 5 時に、SYSDBA は次のパラメータを使用して orders.ib のシャットダウンを設定しま
す。
• 新しいトランザクションを拒否する
• タイムアウト時間を 60 分にする
このようにパラメータを指定すると、次の 1 時間は新しいトランザクションが拒否されま
す。この時間内にユーザーはデータベースにアクセスし、現在のトランザクションを完了す
ることができます。ユーザーがデータベースから接続解除するまでシャットダウンを待て
ないので、単に新しい接続を拒否するだけでは不十分です。
この間に SYSDBA は、午後 6 時にシャットダウンすることをユーザーに警告する同報メッ
セージを繰り返し送信します。すべてのトランザクションの完了後、データベースはシャッ
トダウンされます。
1 時間後、まだアクティブなトランザクションが残っている場合、IBConsole はシャットダ
ウンをキャンセルします。SYSDBA はデータベースの保守を行う必要があり、シャットダウ
ンの警告を送信したので、強制的にシャットダウンを行うしかありません。
[ タイムアウト後に強制的にシャットダウンされます ]
このオプションでは、データベースのトランザクションや接続に何の制約もありません。
データベースへの操作や接続がなくなると同時に、IBConsole はデータベースをシャットダ
ウンします。タイムアウトになるところで、まだアクティブな接続がある場合は、IBConsole
はコミットされていないトランザクションをロールバックし、すべてのユーザーを接続解
除して、データベースをシャットダウンします。
緊急なデータベース保守のためにデータベースをシャットダウンする必要があり、さらに
アクティブなトランザクションが残っている場合に、SYSDBA は強制的にシャットダウン
を実行できます。シャットダウンの同報メッセージをユーザーに送った場合にのみ実行で
きます。繰り返されるメッセージにユーザーが注意を払わずに、アクティブのままであった
場合、その作業はロールバックされます。
このオプションは、タイムアウト時間内での新規トランザクションや接続を拒否しません。
このタイムアウト時間内にデータベースへの接続がなくなれば、IBConsole はそのデータ
ベースをシャットダウンします。
第 7 章 データベースの環境設定と保守
7-33
limbo トランザクション
重要
強制的にデータベースのシャットダウンを行うと、正常なデータベース操作に支障が出る
ことがあります。したがって、事前にユーザーに該当する同報通知をした後で使用するよ
うにしてください。
データベースの再起動
データベースをシャットダウンしたときは、ユーザーがデータベースにアクセスする前に
データベースを再起動(オンラインに戻す)しなければなりません。
データベースを再起動するには、ツリーペインから以前にシャットダウンしたデータベー
スを選択して[データベース|保守|データベースの再起動]を選択するか、ワークペイ
ンで[データベースの再起動]をダブルクリックします。現在選択されているデータベース
がすぐにオンラインに戻されます。
limbo トランザクション
複数のデータベースにまたがるトランザクションをコミットするとき、InterBase は自動的
に 2 相コミットを実行します。2 相コミットは、トランザクションがすべてのデータベース
を更新するか、または 1 つも更新しないかのどちらかであることを保証します。データベー
スの一部だけを更新することはできません。
メモ
BDE(Borland Database Engine)の現在のバージョンは 5 で、2 相コミットまたは InterBase
の分散トランザクション機能を実行できません。したがって、BDE を使用しているアプリ
ケーションでは、limbo トランザクションを生成できません。
2 相コミットの第 1 フェーズで、
InterBase は各サブトランザクションによる変更を書き込む
ことによって、それぞれのデータベースをトランザクションのコミットのために準備しま
す。サブトランザクションはマルチデータベーストランザクションの一部であり、データ
ベースを 1 つだけ含みます。第 2 フェーズでは、各サブトランザクションを準備された順番
にコミット済みというマークを付けます。
2 相コミットが第 2 フェーズで失敗した場合、あるサブトランザクションはコミットされ、
他はコミットされなかったりします。ネットワークの中断またはディスククラッシュに
よって、1 つ以上のデータベースが使用できなくなった場合、2 相コミットは失敗に終わり
ます。2 相コミットの失敗は、コミットかロールバックかをサーバーが判断できないトラン
ザクション、つまり limbo トランザクションの原因となります。
データベース内の一部のレコードが、limbo 状態のトランザクションと関連付けられている
ためにアクセスできなくなる場合があります。これを修正するには、IBConsole を使ってト
ランザクションをリカバリする必要があります。limbo トランザクションの回復とは、コ
ミットするか、またはロールバックするという意味です。トランザクションのリカバリには
gfix を使用します。
トランザクションのリカバリ
次のいずれかの方法でトランザクションをリカバリできます。
7-34 操 作 ガ イ ド
limbo トランザクション
• ツリーペインで接続されたデータベースを選択してワークペインで[トランザクション回
復]をダブルクリックするか、
[データベース|保守|トランザクション回復]を選択しま
す。
• ツリーペインで接続されたデータベースを右クリックして、コンテキストメニューから[保
守|トランザクション回復]を選択します。
[トランザクション回復]ダイアログには、
[トランザクション]と[詳細情報]の 2 つのタ
ブがあります。[トランザクション]タブにはリカバリ(コミットまたはロールバック)可
能な limbo トランザクションのリストが表示されます。推奨リカバリ動作を検索して、選択
した limbo トランザクションに対して実行する現在のアクションを設定することもできま
す。[詳細情報]タブには、選択したトランザクションの詳細情報が表示されます。
[トランザクション]タブ
データベースで中断中のすべてのトランザクションが[トランザクション]タブのテキス
ト領域に表示されます。このようなトランザクションに対してロールバック、コミット、ま
たは 2 相コミットを実行できます。
図 7.8
トランザクションリカバリ:limbo トランザクション
limbo トランザクションをリカバリするには
1 テーブルで limbo トランザクションを選択します。
2 [接続情報]テキストフィールドは、マルチデータベーストランザクションならば、選
択トランザクションのデータベースファイルのカレントパスを表示します。必要なら
ば、カレントパスを上書きして、ターゲットのデータベースパスを変更できます。
データベースのパス情報は、クライアントアプリケーションがコミットを行ったときに
保存されたものです。そのマシンからのパスとネットワークプロトコルは、IBConsole
を実行しているクライアントからはうまくいかない可能性があります。すべてのトラン
ザクションのロールバックやコミットの前に、含まれているデータベースすべてのパス
が正しいことを確認します。
第 7 章 データベースの環境設定と保守
7-35
管理ログの表示
カレントパスを入力する場合、サーバー名とコミュニケーションプロトコルを示すセパ
レータを付けます。TCP/IP を使用する場合は、サーバーとディレクトリパスをコロン
(:)で分離します。NetBEUI を使用する場合は、2 つの円記号(¥¥)または 2 つのスラッ
シュ(//)をサーバー名の前に付けます。また、サーバー名とディレクトリパスを円
記号またはスラッシュで分離します。
3
トランザクションのリカバリ処理を続行する場合は、修復オプションを選択して[修
復]をクリックします。それ以外の場合には[キャンセル]をクリックします。推奨対
処法を決定するには、トランザクションをクリックして[詳細情報]タブを選択しま
す。トランザクションリカバリの推奨については、次の「[詳細情報]タブ」を参照して
ください。
[詳細情報]タブ
[詳細情報]タブは、ホストサーバー、リモートサーバー、データベースパス、推奨対処法
(コミットまたはロールバック)を表示します。トランザクションのリカバリ処理を続行す
る場合は、修復オプションを選択して[修復]をクリックします。それ以外の場合には[キャ
ンセル]をクリックします。
図 7.9
トランザクションリカバリ:詳細
管理ログの表示
IBConsole は、管理ログを標準テキスト表示ウィンドウである[管理ログ]ダイアログに表
示します。このダイアログは、次のいずれかの方法で表示できます。
• ツリーペインで接続データベースまたはデータベース階層で任意のブランチを選択して、
[サーバー|サーバーログファイルの参照]を選択します。
• ツリーペインで任意のサーバーを右クリックして、コンテキストメニューから[サーバー
ログファイルの参照]を選択します。
• 任意のサーバーで、ツリーペインから[サーバーログ]を選択し、ワークペインで[サー
バーログファイルの参照]をダブルクリックします。
7-36 操 作 ガ イ ド
gfix コマンドラインツール
図 7.10 [管理ログ]ダイアログ
標準テキスト表示ウィンドウで特定のテキストを検索して、そのテキストをファイルに保
存したり印刷することができます。標準テキスト表示ウィンドウの使い方については、3-7
ページの「標準テキスト表示ウィンドウ」を参照してください。
gfix コマンドラインツール
gfix ツールを使用して、次のようなさまざまなデータベース保守作業を実行できます。
• データベースをシャットダウンする
• データベースモードを読み取り専用と読み取り / 書き込みで変更する
• データベースのダイアレクトを変更する
• データベースレベルでキャッシュサイズを設定する
• limbo トランザクションをコミットする
• データベースと小さなデータを修復する
• データベースをスイープする
• limbo トランザクションの表示、コミット、リカバリを行う
gfix を実行するには、SYSDBA またはデータベースの所有者のいずれかとして接続しなけ
ればなりません。これらの処理の大半は、IBConsole でも実行できます。
構文
オプション
gfix [options] db_name
次の表のオプション欄では、ブラケット([ ])の外側の文字だけが必須です。その他の文
字を追加して完全なオプション名を指定することもできます。同じような機能のオプショ
ンを識別するために、オプションと関係ある操作をタスク欄に示します。
第 7 章 データベースの環境設定と保守
7-37
gfix コマンドラインツール
表 7.4
gfix のオプション
オプション
タスク
説明
-ac[tivate]
シャドウの有効化
データベースが使用不能になったときにシャドウを
(データベー
有効にします。メモ:構文は gfix -ac です
ス名は指定しません)
。
-at[tach] n
シャットダウン
n 秒のタイムアウト時間内に新規データベースを接
続できないようにするために -shut と一緒に使用さ
れます。n 秒後に接続されたプロセスが残っている場
合は、シャットダウンはキャンセルされます。
-b[uffers] n
キャッシュバッ
ファ
データベースに対してデフォルトのキャッシュバッ
ファを n ページに設定します。
-c[ommit] {ID | all}
トランザクション
リカバリ
ID で指定された limbo トランザクションをコミット
します。または、すべての limbo トランザクション
をコミットします。
-force n
シャットダウン
n 秒後にデータベースを強制的にシャットダウンす
るために、-shut と一緒に使用されます。これは思い
切った解決方法なので注意して使用してください。
-fu[ll]
データ修復
レコードとページ構造をチェックするために、-v と
一緒に使用されます。未割り当ての断片は解放しま
す。
-h[ousekeeping] n
スイープ
自動スイープ間隔のトランザクション数を n に変更
します。
• n を 0 にセットすると、スイープを使用不可にし
ます。
• デフォルトの間隔は 20,000 です(7-22 ページの
「スイープの概要」を参照)
。
• 排他的アクセスの必要はありません。
-i[gnore]
データ修復
検証またはスイープ中のチェックサムエラーを無視
します。本来のチェックサムは ODS 8 以前の
InterBase でのみサポートされます。
-k[ill]
シャドウの削除
• 使用できないシャドウを削除します。
• 構文は gfix -k です(データベース名は指定しま
せん)
。
-l[ist]
トランザクション
リカバリ
各 limbo トランザクションの ID を表示します。-t と
ともに使用すると、自動 2 相復元の結果を示します。
-m[end]
データ修復
破損レコードを使用不可としてマークします。マー
クされたレコードは(バックアップ時などには)無
視されます。
-mo[de]
[read_write|
read_only}
アクセスモードの
設定
• データベースのモードを読み取り専用または読
み書き用に設定します。
• デフォルトのテーブルモードは読み書き用です。
• データベースへの排他的アクセスが必要です。
7-38 操 作 ガ イ ド
gfix コマンドラインツール
表 7.4
gfix のオプション ( 続き )
オプション
タスク
説明
-n[o_update]
データ修復
破損または割り当て漏れの構造体を検査するために
-v と一緒に使用します。構造体はレポートされます
が修復はされません。
-o[nline]
シャットダウン
予定されている -shut 操作をキャンセルします。また
は、現在有効なシャットダウンを無効にします。
-pa[ssword] text
リモートアクセス
データベースにアクセスする前にパスワード text を
チェックします。
-pr[ompt]
トランザクション
リカバリ
トランザクションのリカバリ中にアクションを求め
るために -l と一緒に使用されます。
-r[ollback] {ID | all}
トランザクション
リカバリ
ID で指定された limbo トランザクション、またはす
べての limbo トランザクションをロールバックしま
す。
-sh[ut]
シャットダウン
• データベースをシャットダウンします。
• -attach、-force、-tran のいずれかと一緒に指定し
なければなりません。
-sq[l_dialect] n
データベースのダイアレクトを n に変更します。
Database
dialect
• ダイアレクト 1 = InterBase 5.5 と互換
• ダイアレクト 3 = 現在の InterBase の SQL92 機能
に対応
-sw[eep]
スイープ
データベースを即時スイープします。
• 自動的なスイープを使用できないときに役立ち
ます。
• 排他的アクセスは必要ありません。
-tr[an] n
シャットダウン
n 秒のタイムアウトの間、新規のトランザクションを
起動できないようにするために、-shut と一緒に使用
されます。n 秒後にまだアクティブなトランザクショ
ンがある場合は、シャットダウンはキャンセルされ
ます。
-tw[o_phase]
{ID | all}
トランザクション
リカバリ
ID で指定した limbo トランザクション、またはすべ
ての limbo トランザクションに対して自動 2 相復元
を実行します。
-user name
リモートアクセス
リモートデータベースをアクセスする前にユーザー
名をチェックします。
第 7 章 データベースの環境設定と保守
7-39
表 7.4
gfix のオプション ( 続き )
オプション
タスク
説明
-v[alidate]
データ修復
割り当てられているが、データ構造に実際に使用さ
れていないページを検索して解放します。破損デー
タベースをレポートします。
-w[rite]
{sync | async}
データベース
強制的(同期)書き込みを有効または無効にします。
writes
sync は強制的書き込みを使用可能に、async はバッ
ファ書き込みを使用可能にします。
gfix と InterBase エンジンのバージョンを表示しま
す。
-z
例
次の例は、customer.ib データベースのダイアレクトを 3 に変更します。
gfix -sql 3 customer.ib
次の例は、customer.ib データベースを読み取り専用モードに変更します。
gfix -mo read-only customer.ib
gfix のエラーメッセージ
表 7.5
gfix データベース保守のエラーメッセージ
エラーメッセージ
原因と対応
Database file name <string> already given
オプションの頭にハイフン(-)またはスラッシュ(/)が付
いていないために、コマンドラインオプションはデータ
ベースファイルと解釈された。正しい構文を使用してくだ
さい。
(データベースファイル名 <string> はす
でに指定されている)
Invalid switch(無効なスイッチ)
コマンドラインオプションは認められない。
Incompatible switch combinations(矛盾す
同時に指定できないオプションを 2 つ以上指定した。または
他のオプションと一緒でなければ意味がないオプションを
1 つだけ指定した。
るスイッチの組み合わせ)
More limbo transactions than fit. Try again.
(limbo トランザクションが多すぎる。再
実行してください)
データベースに、gfix が 1 セッションで扱える以上の limbo
トランザクションが含まれている。いくつかの limbo トラン
ザクションをコミットまたはロールバックして、再実行し
てください。
(数値が必要)
-housekeeping オプションには、スイープごとにトランザク
ション数を示す 1 つの負でない整数の引数が必要。
Please retry、specifying <string>
(<string> を指定して再試行)
ファイル名と 1 つ以上のオプションを指定しなければなら
ない。
Numeric value required
7-40 操 作 ガ イ ド
gfix のエラーメッセージ
表 7.5
gfix データベース保守のエラーメッセージ ( 続き )
エラーメッセージ
原因と対応
Transaction number or "all" required(トラ
ンザクション番号または all の指定が必
two_phase を指定した。
必要な引数を指定せずに -commit、-rollback、または -
要)
-mode read_only or read_write(-mode
read_only または
read_write)
-mode オプションに、パラメータとして read_only または
read_write 以外のものが指定された。
"read_only" or "read_write"
required(read_only または
read_write が必要)
-mode オプションには、read_only または
read_write のどちらかを指定しなければならない。
第 7 章 データベースの環境設定と保守
7-41
gfix のエラーメッセージ
7-42 操 作 ガ イ ド
第
章
データベースのバックアップと復元
第8章
データベースのバックアップの目的はデータベースやコンピュータが故障した場合にデー
タを保護し、失われないようにすることです。データベースの復元ではバックアップ ファ
イルを使用してデータベースを再び作成します。
データベースのバックアップはハード ディスクまたは他のストレージ メディアにファイ
ルとしてデータベースを保存します。InterBase にはフル バックアップとインクリメンタル
バックアップの機能が用意されています。各種シナリオに適合するようにユーザーのバッ
クアップを調整できるような多くのオプションもあります。
電源障害、ディスク クラッシュ、他のデータ損失の可能性がある問題からユーザーのデー
タベースを最も効果的に保護するには、定期的にバックアップを実行します。さらに安全
性を高める場合は、データベース サーバーと物理的に異なる場所にバックアップ ファイル
を格納します。
この章では InterBase コンピュータでフル バックアップとインクリメンタル バックアップ
を実行する方法について説明します。InterBase データベースの復元方法も合わせて説明し
ます。
InterBase バックアップと復元オプションについて
InterBase を使用して次の場所にデータのバックアップを作成できます。
• InterBase サーバーに接続された 2 台目のドライブ。
• ローカル ネットワークにある別のコンピュータ。
• 離れた場所にあるコンピュータ(VPN または WAN 経由)
。
InterBase バックアップは他のユーザーがデータベースを使用している間でも同時に実行で
きます。バックアップを実行するためにデータベースをシャットダウンする必要はありま
せん。ただし、バックアップが開始された後にクライアントがデータベースにコミットし
たすべてのデータ変更はバックアップ ファイルには記録されません。
第 8 章 データベースのバックアップと復元
8-1
InterBase バックアップと復元オプションについて
InterBase バックアップと復元ツール
InterBase データベースをバックアップと復元するために次の InterBase ツールのいずれか
を使用できます。
• gbak コマンドライン ツール
InterBase gbak コマンドを使用して Windows や Unix コマンド ラインからバックアップ
や復元操作を指定し、実行します。isql(SQL の InterBase バージョン)の使用経験があ
る場合には、isql をお勧めします。異なる状況や環境に適合したバックアップや復元を
設定するのに役に立つ多くのオプションが isql に用意されています。
• IBConsole
IBConsole の直感的に使用できるユーザー インターフェイスではマウス、コンテキスト
メニュー、ダイアログ ボックスで実行する復元やバックアップのタイプを指定できま
す。gbak で利用できるバックアップと復元のオプションは IBConsole の UI からも利用
できます。IBConsole を使用するために SQL や isql、コマンドライン 操作について詳細
に理解する必要はありません。
この章では両方のツールを使用してバックアップと復元を実行する方法について説明しま
す。
論理バックアップと物理バックアップの違い
InterBase は gbak コマンドライン ツールを使用してバックアップを実行します。gbak コマ
ンドではバックアップのタイプで次の違いがあります。
• 論理バックアップ
gbak で一般に実行するフル バックアップは " 論理 " バックアップです。データベース
のすべてのレコードを抽出し、異なる形式でレコードを格納します。したがって、デー
タベース ファイルの正確な複製ではありません。論理バックアップは削除されたレ
コードが占有していた領域を再利用します。したがってデータベース サイズが縮小し
ます。
gbak クライアントによって実行される論理バックアップはターゲットのバックアップ
ファイルをネットワーク上に保存します。InterBase サーバーをクライアント マシン上
に配置する必要はありません。サービス API を使用してバックアップを実行する場合、
バックアップ ファイルは、サーバーにアクセスできるファイル システムにのみ保存さ
れます(サーバーがバックアップ操作を実行しているため)。
gbak で論理バックアップを実行するときは、次の構文を使用します。
gbak [-b] [options] database target
IBConsole で [ バックアップ ...] を選択する場合には、この論理バックアップのタイプが
InterBase により実行されます。
論理バックアップから復元するとき、データベース ページ サイズの変更や複数のファ
イルやディスク間でデータベースを分散して配置する設定を選択できます。
• 物理バックアップ
8-2 操 作 ガ イ ド
InterBase バックアップと復元オプションについて
InterBase の物理バックアップ(別名、オンライン ダンプ)はページ レベルでデータ
ベースをコピーし、元の形式で保存します。したがって、物理バックアップはバック
アップ処理中のデータベースの正確な複製を作成します。複製を読み書き可能なデータ
ベースに変換できますが、変換すると元のデータベースから複製へのダンプができなく
なります。
物理バックアップを実行するには、次の構文を使用します。
gbak [-d] [options] database target
論理バックアップで指定した -b スイッチではなく、物理バックアップでは -d スイッチ
を使用することに注意してください。
インクリメンタル バックアップは最後にフル バックアップを実行したあとのデータ
ベースにコミットされたすべての変更をコピーします。インクリメンタル バックアッ
プは物理バックアップであり、-d スイッチを使用します。gbak の -d スイッチを最初
に使用したときは、InterBase はフル物理バックアップ(オンライン ダンプ)を実行し
ます。最初のフル ダンプを実行したあとは、-d スイッチを使用したそれ以降の各バッ
クアップはインクリメンタル バックアップを実行し、最後のフル バックアップの後に
コミットされたすべてのトランザクションをコピーし保存します。
IBConsole で [ インクリメンタル・バックアップ ] を選択する場合には、-d スイッチを
使用して初期のフル オンライン ダンプを InterBase が実行します。-d スイッチを使用し
た以降のすべてのバックアップはインクリメンタルです。
重要
データベースの保護レベルを向上させるには、ジャーナル ファイルとジャーナル アーカイ
ブを使用します。ジャーナル ファイルは各データベース トランザクションを、その発生時
に記録します。バックアップが実行中である場合にも記録します。ジャーナル アーカイブ
は現在のジャーナル ファイルを格納します。ジャーナル アーカイブを使用して、特定時点
の状態にデータを復旧できます。ジャーナル機能とジャーナル アーカイブについて詳細は、
第 9 章「ジャーナル機能と障害復旧」を参照してください。
データベースの所有権
データベースのバックアップは、そのデータベースの所有者または SYSDA 以外が行うこと
はできませんが、データベースの復元は既存のデータベースを上書きしない限り、すべて
のユーザーが行うことができます。論理バックアップから復元されたデータベース ファイ
ルは、復元を行ったユーザーのユーザー ID に属するようになります。つまり、データベー
スのバックアップと復元はデータベースの所有権を変更するためのメカニズムになりま
す。また、未承認ユーザーでも SYSDA パスワードを知っているマシンにバックアップファ
イルを復元することでデータベースを「盗む」ことができることになります。そのため、
バックアップファイルを認証されていないアクセスから確実に保護することが重要になり
ます。
既存のデータベースを上書きしてデータベースを復元するには、SYSDBA または既存の
データベースの所有者でなければなりません。
第 8 章 データベースのバックアップと復元
8-3
gbak コマンドを使用したバックアップと復元
ODS の復元
InterBase は自動的にデータベースを最新の ODS(オンディスク構造体)に復元します。デー
タベースが以前の ODS を使用している場合には、エラーが発生することもあります。エ
ラーが発生しないようにするには、ODS の最新バージョンを使用して、ユーザーのデータ
ベースを更新します。
既存のデータベースを新しい ODS にアップグレードするには、次の手順を実行します。
1
新しいバージョンの InterBase をインストールする前に、古いバージョンを使用して
データベースのバックアップを作成します。
2
3
InterBase サーバーをインストールします。
新しいサーバーをインストールしたら、データベースを復元します。
最新バージョンの InterBase への移行について詳細は、付録 A 「InterBase の移行」を参照
してください。
gbak コマンドを使用したバックアップと復元
gbak コマンドライン ツールを使用してデータベースのバックアップと復元を実行できま
す。異なるオプションを使用すると異なる結果が得られます。IBConsole を使用してバック
アップや復元を実行する方法について詳細は、この章の後にある 「IBConsole コマンド
を使用したバックアップと復元」を参照してください。
メモ
gbak コマンドを使用してバックアップ ファイルを暗号化したり、暗号化されたバックアッ
プ ファイルを復元する方法の詳細については、『データ定義ガイド』の第 13 章「データの
暗号化」を参照してください。
gbak 使用のための一般的ガイドライン
データベースのバックアップ時には、次の事項に注意してください。
• -service オプションが指定されていない限り、gbak はデータベースがあるサーバーではな
く、動作しているマシンの現在のディレクトリにバックアップファイルを書き込みます。
バックアップファイルの位置を指定する場合、gbak が実行されるマシンに関連した場所に
なります。ローカルマシンまたはそのマシンにマッピングされているドライブに対してだ
け、バックアップファイルを書き込むことができます。-service スイッチはこの動作を変え
るので注意してください。
(8-16 ページの「InterBase Service Manager での gbak の
使用」を参照)
。
• マルチファイルデータベースをバックアップする場合、バックアップコマンドには最初の
ファイルだけを指定します。それ以降のデータベースファイルを指定しないでください。
これらは、バックアップファイル名として解釈されてしまいます。
• バックアップファイルのデフォルトの単位はバイトです。 バイトのかわりに、キロバイト
(k)、メガバイト(m)、またはギガバイト(g)を指定することもできます。復元するデー
タベースファイルは、データベースページでのみ指定できます。
8-4 操 作 ガ イ ド
gbak コマンドを使用したバックアップと復元
• マルチプラットフォーム環境で操作している場合は、-transportable スイッチを使用します。
このスイッチは、元々あったプラットフォーム以外のプラットフォームにデータベースを
復元できるようにします。マルチプラットフォーム環境の場合は、このオプションを一般
に使用することは有効です。
• 元のデータベースを保持しているサーバーと同じサーバーにバックアップする場合は、
-service スイッチを使用します。このオプションは、サーバーホスト上に InterBase Service
Manager を呼び出して、時間とネットワーク通信量を節約します。
メモ
バックアップファイルを作成したら、それをシステムレベルで読み取り専用に変更すると、
セキュリティ上有効です。これにより、予期しない上書きを防ぐことができます。さらに、
バックアップファイルをアクセス制限付きのディレクトリに置いておくことで、UNIX と
Windows NT/2000 上でデータベースの盗難を予防できます。
マルチファイルと単一ファイルのバックアップの初期化
マルチファイルのデータベースをバックアップする場合、そのデータベースの最初のファ
イル名だけを指定します。
構文
単一ファイルにバックアップする場合
gbak [-b] [options] database target
マルチファイルにバックアップする場合
gbak [-b] [options] database target1 size1[k|m|g] target2 [size2[k|m|g] target3
表 8.1
gbak の引数
引数
説明
database
• バックアップするデータベースの名前。
• マルチファイルデータベースの場合、最初のデータベースファイルの名前だ
けを指定する。
target
バックアップする記憶装置またはバックアップファイルの名前。
• UNIX では stdout でも、その場合、gbak は標準出力(通常はパイプ)に出力
を書き込む。
• 通常、データベースは必要に応じて利用可能な領域を拡張していくので、単
一ファイルに復元する場合は、サイズを指定する必要はない。
size
バックアップファイルまたは復元するデータベースファイルの大きさ。
• 復元するデータベースファイルの許容単位はデータベースページのみ。最小
値は 200。
• バックアップファイルのデフォルト単位はバイト。
• バックアップファイルのサイズは、キロバイト、メガバイト、ギガバイトで
指定することも可能。
• 最後のバックアップファイルまたはデータベースファイルのサイズは指定し
てはいけない。通常、最後のファイルは必要に応じて使用可能な領域すべて
を使って拡張される。
オプション
以下の表のオプション欄では、ブラケット([ ])の外側の文字だけが必須です。
第 8 章 データベースのバックアップと復元
8-5
gbak コマンドを使用したバックアップと復元
表 8.2 に、バックアップの作成で使用できる gbak のオプションを示します。
表 8.2
gbak のバックアップオプション
オプション
説明
-b[ackup_database]
データベースをファイルまたはデバイスにバックアップする。
-co[nvert]
外部ファイルを内部ファイルに変換する。
-d[ump]
-d スイッチを最初に使用すると、フル物理バックアップを実行す
る。その後は、インクリメンタル バックアップが実行される。
-e[xpand]
圧縮されたバックアップを作成しない。
-fa[ctor] n
テープデバイスに対してブロックサイズの単位 n を使用する。
-g[arbage_collect]
サーバーが処理したすべてのレコードについてガベージ コレク
ションを行わないようにする。これにより、サーバーによるレコー
ドの取得が迅速になり、gbak クライアントにレコードを送信して
アーカイブできる。
-ig[nore]
バックアップでチェックサムを無視する。メモ:本来のチェックサ
ムは ODS 8 以前の InterBase でのみサポートされます。
-l[imbo]
バックアップで limbo トランザクションを無視する。
-m[etadata]
メタデータだけをバックアップする、データはバックアップしな
い。
-nt
非移行可能形式でバックアップする。
-ol[d_descriptions]
古いフォーマットでメタデータをバックアップする。
-pas[sword] text
データベースにアクセスする前にパスワード text をチェックしま
す。
-role name
ロール name として接続する
-se[rvice] servicename
• InterBase の Service Manager を使用して、オリジナルのデータ
ベースファイルがあるホスト上にバックアップファイルを作
成。
• servicename はサーバーホスト上の Service Manager を呼び出す。
構文は使用するネットワークプロトコルによって異なる。
TCP/IP
hostname:service_mgr
名前付きパイプ
¥¥hostname¥service_mgr
ローカル
service_mgr
-t[ransportable]
移行可能なバックアップを作成する(デフォルト)
。
-user name
リモートデータベースにアクセスする前にユーザー名 name を
チェックする。
8-6 操 作 ガ イ ド
gbak コマンドを使用したバックアップと復元
表 8.2
gbak のバックアップオプション ( 続き )
オプション
説明
-v[erbose]
gbak のステータスを表示する。
-y
[file | suppress_output]
ステータスメッセージを file に出力する。file は既存のファイルで
あってはならない。suppress_output のときはメッセージを出力し
ない。
-z
gbak と InterBase エンジンのバージョンを表示する。
インクリメンタル バックアップの作成
インクリメンタル バックアップは最後にフル バックアップまたはインクリメンタル バッ
クアップを実行したあとのデータベースへのすべての変更をコピーします。gbak の -d ス
イッチを最初に使用したときは、InterBase はフル物理バックアップ(オンライン ダンプ)
を実行します。最初のフル ダンプを実行したあとは、-d スイッチを使用してインクリメン
タル バックアップを実行し、最後のフル バックアップの後にコミットされたすべてのトラ
ンザクションをコピーし保存します。
インクリメンタル バックアップのガイドライン
インクリメンタル バックアップを指定したときは、次の事項に留意してください。
• インクリメンタル オンライン ダンプを実行する場合でも、ソース データベースのフル ス
キャンが必要になります。
• オンライン ダンプに書き込むページ数を制限することによって、パフォーマンスが向上し
ます。特に、これらのファイルがリモートのファイル サーバー上にある場合に効果があり
ます。
• 同じデータベース、または異なるデータベースの複数のオンライン ダンプを同時に実行す
ることができます。ただし、パフォーマンスの理由から、このような運用はお勧めしません。
• アクティブなオンライン ダンプは、
InterBase パフォーマンス モニターを使用するか、
GBAK
プロセスを停止することによって、キャンセルできます。
• 外部テーブルは、オンライン ダンプではバックアップされません。
• 読み取り専用データベースとしてオンライン ダンプに接続している場合は、外部テーブル
にはアクセスできません。オンライン ダンプの場所から外部ファイルのパス名にアクセス
できない場合は、ダンプを読み書き可能なデータベースに変換する以外に、ダンプのメタ
データを変更する方法はありません。ダンプを読み書き可能なデータベースに変換した場
合は、再びオンライン ダンプのターゲットにはできません。
• オンライン ダンプは物理的なバックアップなので、オンライン ダンプ ファイルを他のハー
ドウェア プラットフォームに移植できません。バックアップを移植可能にするには、-t ス
イッチを指定して gbak の従来の論理バックアップを使用します。
• CREATE JOURNAL ARCHIVE 文を実行するときは、InterBase はオンライン ダンプ機能を使
用してデータベースをジャーナル アーカイブ ディレクトリにコピーします。ジャーナル
ファイルとジャーナル アーカイブについて詳細は、第 9 章「ジャーナル機能と障害復旧」
を参照してください。
第 8 章 データベースのバックアップと復元
8-7
gbak コマンドを使用したバックアップと復元
インクリメンタル バックアップの実行
インクリメンタル バックアップを実行するには、次の構文を使用します。
GBAK {-D} dbname
file [size] add_file1 [size1] add_file2 [size2] ...
リスト内の最初のダンプ ファイルは、マルチファイル データベース内の最初のデータベー
ス ファイルと同様です。それは、既存のオンライン ダンプへのリファレンスとして使われ
るファイルです。GBAK コマンドラインに、追加のダンプ ファイルが列挙されている場合
は、これらのファイルが、オンライン ダンプのファイル セットに追加されます。
例
次の例は、最初のインクリメンタル オンライン ダンプを作る一例です。
[E:/EMPLOYEE] gbak -d EMPLOYEE.gdb EMPLOYEE.gdmp EMPLOYEE.gdmp.1
gbak: WARNING: Dumped 46270 pages of a total 46270 database pages
gbak: WARNING:
Dumped 1 pages to page appendix file
[E:/EMPLOYEE] gbak -d EMPLOYEE.gdb EMPLOYEE.gdmp EMPLOYEE.gdmp.1
gbak: ERROR: I/O error for file "E:\EMPLOYEE\EMPLOYEE.GDMP.1"
gbak: ERROR:
Error while trying to create file
gbak: ERROR:
The file exists.
gbak: Exiting before completion due to errors
[E:/EMPLOYEE] gbak -d EMPLOYEE.gdb EMPLOYEE.gdmp EMPLOYEE.gdmp.2
gbak: WARNING: Dumped 2 pages of a total 46270 database pages
gbak: WARNING:
Dumped 0 pages to page appendix file
上の例では、フル データベース ダンプの中に EMPLOYEE.gdmp.1 が追加されました。
同じコマンドを再度実行するとエラーが発生します。これは、EMPLOYEE.gdmp.1 を再度追加
しようとして、ファイル作成エラーが発生するからです。最後のコマンドでは、新しいファ
イル EMPLOYEE.gdmp.2 が正常に追加されます。
オンライン ダンプ ファイルは、InterBase サーバーによる書き込みが可能なローカルまたは
リモート のファイル システム上に置くことができます。オンライン ダンプはサーバー側の
操作のみです。オンライン ダンプ ファイルは、任意のファイルシステム上に置くことがで
きますが、ページ付録ファイルは、常にローカルのファイル システム上に存在します。こ
のファイルは、オンライン ダンプ用のページ イメージの状態を保持する必要がある場合
に、クライアント リクエストを同時に処理している複数のサーバー スレッドによって書き
出されます。これは、InterBase のマルチジェネレーション アーキテクチャ(MGA)に似て
います。MGA では、トランザクションのスナップショットを保持するために、行の更新中
に以前のバージョンの行が保存されます。ページ付録ファイルは、オンライン ダンプの物
理的なページ スナップショットを維持するのに役立ちます。これは、オンライン ダンプが
終了したら削除される一時的なファイルです。
[size] パラメータは、ファイルのサイズを、データベースのページ サイズを使用してペー
ジ単位で表したもので、省略可能です。[size] パラメータが省略されている場合、ダンプ
ファイルのサイズは、データベース内でそれと同じ順番に位置するファイルによって決ま
ります。ダンプ ファイルの順番が、どのデータベース ファイルの順番よりも大きい場合は、
その前のダンプ ファイルと同じサイズになります。
8-8 操 作 ガ イ ド
gbak コマンドを使用したバックアップと復元
既存のオンライン ダンプに対して GBAK -D を実行すると、インクリメンタル ダンプが作成
されます。
[E:/EMPLOYEE] gbak -d EMPLOYEE.gdb EMPLOYEE.gdmp
gbak: WARNING: Dumped 46270 pages of a total 46270 database pages
gbak: WARNING:
Dumped 23 pages to page appendix file
[E:/EMPLOYEE] gbak -d EMPLOYEE.gdb EMPLOYEE.gdmp
gbak: WARNING: Dumped 2 pages of a total 46270 database pages
gbak: WARNING:
Dumped 0 pages to page appendix file
これによって、オンライン ダンプは、最新のダンプ以降に変更されたページのみが更新さ
れます。インクリメンタル ダンプに失敗した場合は、いつでも再実行できます。フル オン
ライン ダンプに失敗した場合は、失敗の前に書き出されたオンライン ダンプ ファイルは削
除されます。失敗したために、InterBase がこれらのファイルにアクセスできない場合は、
これらのオンライン ダンプ ファイルを手動で削除する必要があります。
インクリメンタル バックアップの上書き
上書きスイッチ -OV を使用すると、オンライン ダンプの現在のファイル セットが削除され、
フル データベース ダンプが起動されます。
[E:/tpc_c] gbak -d tpc_c.gdb tpc_c.gdmp
gbak: WARNING: Dumped 2 pages of a total 46270 database pages
gbak: WARNING:
Dumped 1 pages to page appendix file
[E:/tpc_c] gbak -d -ov tpc_c.gdb tpc_c.gdmp
gbak: WARNING: Dumped 46270 pages of a total 46270 database pages
gbak: WARNING:
Dumped 7 pages to page appendix file
オンライン ダンプ ファイルは、読み取り専用の InterBase データベースとして扱われます。
つまり、オンライン ダンプ ファイルは、読み取り専用のデータベース アプリケーションか
らアクセスできます。ダンプ ファイルがインクリメンタルに更新されている間に、このよ
うなデータベース アプリケーションが、オンライン ダンプ " データベース " にアクセスす
ると、どのような振る舞いをするかは未定義です。オンライン ダンプが読み書き可能に変
換された場合は、それはオンライン ダンプではなくなり、スタンドアロンのデータベース
になります。このようなファイルにオンライン ダンプを実行しようとすると失敗します。
[E:/tpc_c] gfix tpc_c.gdmp -mode read_write
[E:/tpc_c] gbak -d tpc_c.gdb tpc_c.gdmp
gbak: ERROR: online dump failure: dump file has no dump timestamp
gbak: Exiting before completion due to errors
[E:/tpc_c] gfix tpc_c.gdmp -mode read_only
[E:/tpc_c] gbak -d tpc_c.gdb tpc_c.gdmp
gbak: ERROR: online dump failure: dump file has no dump timestamp
gbak: Exiting before completion due to errors
第 8 章 データベースのバックアップと復元
8-9
gbak コマンドを使用したバックアップと復元
オンライン ダンプは、gfix _mode read_write コマンドを使用して読み書き可能なデータ
ベースに変換できますが、適切に使用する必要があります。現在の場所がデータベース処
理のために不便な場合は、これらのダンプ ファイルに対してオンライン ダンプを実行し
て、ローカルまたはリモートの別の場所にコピーすることができます。これは、一般的な
コピー メカニズムです。これによって、マルチファイル データベースがコピーされ、その
内部のセカンダリ ファイル名のリンクは、コピー先用に自動的に更新されます。
オンライン ダンプはデータベースなので、データベースの検証(GFIX-V)を実行すること
ができます。オンライン ダンプに対して、追加の検証チェックを実行して、オンライン ダ
ンプのタイムスタンプより新しい書き込みタイムスタンプを持つデータベース ページがな
いことをチェックできます。オンライン ダンプのタイムスタンプは、フル ダンプまたはイ
ンクリメンタル ダンプが成功した最新の日時を表します。
[E:/tpc_c] gfix -v -n tpc_c.gdmp
Summary of validation errors
Number of database page errors : 1
and in the InterBase log file:.
IBSMP (Server)
Sat Jun 24 14:41:36 2006
Database: E:\TPC_C\TPC_C.GDMP
Page 155 has timestamp 1151170444 greater than dump timestamp 1151170438
タイムスタンプの変更点
GSTAT -H は、データベース作成日エントリの後に、オンライン ダンプのタイムスタンプを
出力するように変更されました。データベース作成日とは、ソース データベースの作成日
で、オンライン ダンプの作成日ではありません。
[E:/tpc_c] gstat -h tpc_c.gdmp
Database "tpc_c.gdmp"
Database header page information:
Flags
0
Checksum
12345
Write timestamp
Jun 28, 2006 19:57:41
Page size
4096
ODS version
12.0
Oldest transaction
72
Oldest active
73
Oldest snapshot
73
Next transaction
74
Sequence number
0
Next attachment ID
0
Implementation ID
16
Shadow count
0
Page buffers
0
Next header page
0
Clumplet End
102
Database dialect
3
Creation date
Jun 25, 2006 13:22:10
Online dump timestamp Jun 28, 2006 19:59:16
Attributes
read only
Variable header data:
Dump file length:
*END*
8-10 操 作 ガ イ ド
20000
gbak コマンドを使用したバックアップと復元
データベース パラメータ ブロックの文字列を isc_attach_database() API に渡すことに
よって、オンライン ダンプを要求できます。
インクリメンタル バックアップで使用されるデータベース パラメータ
ブロック
データベース パラメータ ブロック(DPB)を使用した、インクリメンタル バックアップの
サポートが、gbak ユーティリティに追加されました。次の表は、この機能にアクセスする
ために使われる DPB の名前と値を一覧表示したものです。ここでも、『InterBase API ガ
イド』に記載されている DPB 作成のための一般的な要件と制限が適用されます。
表 8.3
データベース パラメータ ブロック(DPB)
パラメータ名
目的
長さ
値
isc_dpb_online_dump
オンライン ダンプを起動するための命令
1
0 または 1
isc_dpb_old_overwrite
現在のオンライン ダンプ ファイルを削除
し、フル データベース ダンプを実行する
(省略可能)ことを指定します。
1
0 または 1
isc_dpb_old_file_name
オンライン ダンプ ファイルの名前を指定
する文字列。最大 255 文字。
文字列の
バイト数
ダンプ
ファイル名
の文字列
isc_dpb_old_file_size
オンライン ダンプ ファイルのページ数
(省略可能)
長 さ を 表 ダンプ長を
す バ イ ト 表すページ
数(1、2、4) 数
オンライン ダンプに成功すると、ダンプ情報ステータスを渡すために、次のような警告ス
テータス ベクトルが返ります。
status
status
status
status
status
status
status
status
status
status
status
status
status
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
=
=
=
=
=
=
=
=
=
=
=
=
=
isc_arg_gds
isc_arg_success
isc_arg_warning
isc_old_dump_stats
isc_arg_number
<no. of dumped pages>
isc_arg_number
<total no. of DB pages>
isc_arg_gds
isc_old_appendix_stats
isc_arg_number
<no. pages written to appendix>
isc_arg_end
ページ付録ファイル
オンライン ダンプの実行中は、クライアントのワーカー スレッドがオンライン ダンプ
ファイルへ書き込みをすることはできません。したがって、ネットワーク経由でリモート
ファイル システムに書き込むことによるパフォーマンスの低下はありません。ただし、ダ
ンプの物理的および時間的な一貫性を維持するために、クライアントのワーカー スレッド
が、ページを "ib_dump_" という接頭辞付きのローカル一時ファイルに書き込む場合があり
第 8 章 データベースのバックアップと復元
8-11
gbak コマンドを使用したバックアップと復元
ます。どのデータベース ページも、少なくとも一度は、この一時ファイルに書き込まれる
ことになっています。この一時ファイルは、ダンプ(ページ)付録ファイルと呼ばれてい
ます。
頻繁に更新される非常に大規模なデータベースの場合は、ページ付録ファイルのサイズも
非常に大きくなります。一時ディレクトリには、このストレージ要求を処理するために十
分なスペースが必要です。スペースがないと、オンライン ダンプに失敗します。GBAK で
返されるダンプ情報に含まれる、ページ付録ファイルに書き込まれたページ数は、この一
時ファイルのスペースを設定するために役立ちます。
GBAK でのデータベース領域の事前割り当て
GBAK は、データベースの事前割り当て情報のバックアップと復元を行うものです。この機
能に対応していない旧バージョンの製品では、この事前割り当て情報は警告なしに無視さ
れます。-gbak には、データベースまたはバックアップ ファイルに格納されている事前割り
当てを変更するスイッチが追加されています。
例
/D/testbed>isql
CONNECT または CREATE DATABASE でデータベースを指定します。
SQL> create database 'pr.ib' preallocate 500;
SQL> commit;
SQL> quit;
/D/testbed>ls -l pr.ib
-rwxrwxrwx 1 Administrators None 2048000 Jul 2 18:09
pr.ib /* サイズは 2MB です。500 個のデータベース ページのサイズがそれぞれ
4KB であるためです */
/D/testbed>isql -a pr.ib
SET SQL DIALECT 3;
/* CREATE DATABASE 'pr.ib' PREALLOCATE 500
PAGE_SIZE 4096
*/
/* このデータベースへのアクセス許可を付与します。*/
/D/testbed>isql -a pr.ib
SET SQL DIALECT 3;
/* CREATE DATABASE 'pr.ib' PREALLOCATE 500 PAGE_SIZE 4096
*/
/* このデータベースへのアクセス許可を付与します。*/
/D/testbed>
スイッチ -PR(EALLOCTE) の引数の使用
-PR(EALLOCTE) スイッチは整数の引数を取ります。これは事前割り当てページ数を表しま
す。このスイッチは、バックアップにも復元にもコマンドライン オプションとして使用で
きます。バックアップの場合は、事前割り当てスイッチを指定すると、バックアップ対象の
データベースに指定されている値ではなく、このスイッチの引数がバックアップ ファイル
に保存されます。復元の場合は、バックアップ ファイルに保存されている値ではなく、事
前割り当てスイッチの引数が、復元されるデータベースの事前割り当て値に使用されます。
8-12 操 作 ガ イ ド
gbak コマンドを使用したバックアップと復元
GBAK で事前割り当てスイッチの値に 0(ゼロ)を指定すると、バックアップ ファイルや
復元されたデータベースでのデータベース事前割り当てが事実上無効になります。GBAK
の詳細モードでは、データベース事前割り当てのログがコンソールに出力されます。詳細
モードでのデータベース バックアップの例を以下に示します。データベース復元の場合に
も、同様のメッセージがログとして出力されます。
例
gbak -v foo.gdb foo.gbk -pr 5000
...
gbak: readied database foo.gdb for backup
gbak: creating file foo.gbk
gbak: starting transaction
gbak: database foo.gdb has a page size of 4096 bytes.
gbak: database preallocation 5000 pages
データベース復元によってページ サイズが減少する場合、データベース事前割り当てペー
ジ数が自動的に増加して、データベース事前割り当てサイズ(バイト単位)が一定に保た
れます。逆に、復元されたページ サイズが増加する場合は、データベース事前割り当てペー
ジ数がそれに応じて減少し、同様の "Reducing ..." メッセージがコンソールに出力されます。
GBAK で -PREALLOCATE スイッチを指定した場合は、ページ サイズが変化しても、データ
ベース事前割り当てページ数は自動的に増減しません。つまり、-PREALLOCATE スイッチが優
先されます。
例
gbak -v foo.gdb foo.gbk -page_size 2048
...
Reducing the database page size from 4096 bytes to 2048 bytes
Increasing database preallocation from 5000 pages to 10000 pages
created database foo1.gdb, page_size 2048 bytes
database preallocation 10000 pages
gbak によるデータベースの復元
次の構文を使用して、データベースを復元します。
構文
復元する場合:
gbak {-c|-r} [options] source dbfile
マルチファイルに復元する場合:
gbak {-c|-r} [options] source dbfile1 size1 dbfile2 [size2 dbfile3 …]
マルチファイルを復元する場合:
gbak {-c|-r} [options] source1 source2 [source3 …] dbfile
次の構文を使用すると、マルチファイルをマルチファイルに復元できます。
gbak {-c|-r} [options] source1 source2 [source3 …] dbfile1 size1
dbfile2 [size2 dbfile3 …]
第 8 章 データベースのバックアップと復元
8-13
gbak コマンドを使用したバックアップと復元
表 8.4
gbak を使用したデータベースの復元:オプション
引数
説明
source
復元する記憶装置またはバックアップファイル名。
UNIX では stdin(標準入力、通常はパイプ)から入力を読み取る。
dbfile
復元するデータベースファイルの名前。
size
バックアップファイルまたは復元するデータベースファイルの大
きさ。
• 復元するデータベースファイルの許容単位はデータベースペー
ジのみ。最小値は 200。
• バックアップファイルのデフォルト単位はバイト。
• バックアップファイルのサイズは、キロバイト、メガバイト、
ギガバイトで指定することも可能。
• 最後のバックアップファイルまたはデータベースファイルのサ
イズは指定してはいけない。通常、最後のファイルは必要に応
じて使用可能な領域すべてを使って拡張される。
表 8.5 に、データベースの復元で使用できる gbak のオプションを示します。
表 8.5
gbak の復元オプション
オプション
説明
-c[reate_database]
データベースを新しいファイルに復元する。
-bu[ffers]
復元されるデータベースのキャッシュサイズ。
-i[nactive]
復元時にインデックスを無効にする。
-k[ill]
以前に定義されていたシャドウファイルを作成しない。
-mo[de]
[read_write | read_only]
復元されるデータベースを書き込み可能にするかどうかを指定す
る。
• 指定できる値は read_only または read_write
• デフォルトは read_write
-n[o_validity]
復元されたメタデータから制約を削除する。制約に適合しないデー
タの復元を可能にする。
-o[ne_at_a_time]
テーブルごとに復元する。データベースが損傷データを含んでいる
場合の部分的復元に有用。
-p[age_size] n
ページサイズを n バイト(1024、2048、4196、8192、または 16384)
に変更する。デフォルトは 4096。
-pas[sword] text
データベースにアクセスする前にパスワード text をチェックしま
す。
-r[eplace_database]
データベースを新しいファイルに復元する、または既存ファイルに
上書きする。
8-14 操 作 ガ イ ド
gbak コマンドを使用したバックアップと復元
表 8.5
gbak の復元オプション ( 続き )
オプション
説明
-se[rvice] servicename
• InterBase の Service Manager を使用して、バックアップファイル
があるホスト上にデータベースを復元する。
• servicename はサーバーホスト上の Service Manager を呼び出す。
構文は使用するネットワークプロトコルによって異なる。
TCP/IP
hostname:service_mgr
NetBEUI
¥¥hostname¥service_mgr
ローカル
service_mgr
-user name
データベースにアクセスする前にユーザー名 name をチェックしま
す。
-use_[all_space]
データベースの各データ ページを 100 % の充填率で復元します。デ
フォルトでは、UPDATE や DELETE で旧バージョンを格納するため
にデータ ページで各行に対して領域が確保されています。圧縮行
のサイズに従って、比率は任意のパーセンテージに変換されます。
-v[erbose]
gbak のステータスを表示する。
-va[lidate]
データベースの復元時にデータベースを検証する。
-y
[file | suppress_output]
-v と一緒に使用する場合は、ステータスメッセージを file; に出力す
る。-v がなく、file の指定もない場合は、メッセージを出力しない。
-z
gbak と InterBase エンジンのバージョンを表示する。
データベースの復元時には、次の事項に注意してください。
• データベースの復元は誰でも行うことができます。 ただし、既存のデータベースに対して
データベースを復元するには、データベースの所有者または SYSDBA でなければなりませ
ん。
• 現在使用中のデータベースを上書きするような、バックアップの復元はしないでください
データベースを損傷する原因になります。
• マルチファイルバックアップから復元する場合、バックアップファイルすべてを任意の順
序で指定します。
• 復元するデータベースの最後の(または唯一の)ファイルのファイルサイズを指定しない
でください。エラーにはなりませんが、
InterBase は必要に応じて最後のファイルを拡張しま
す。この動的なサイズ変更は InterBase 特有の機能です。
• 復元するデータベースのサイズを、データベースページで指定します。 データベースファ
イルのデフォルトサイズは 200 ページです。デフォルトのデータベースのページサイズは
4KB なので、ページサイズが変更されないならば、デフォルトのデータベースサイズは
800KB になります。このサイズは小さなデータベースに対しては十分な大きさです。データ
ベースページのサイズを変更するには、復元時に -p[age_size] オプションを使用します。
第 8 章 データベースのバックアップと復元
8-15
gbak コマンドを使用したバックアップと復元
ヒント
バックアップファイルを保持しているサーバーと同じサーバーに復元する場合は、-service
スイッチを使用します。このオプションは、サーバーホスト上に InterBase Service Manager
を呼び出して、時間とネットワーク通信量を節約します。
メモ
少量のデータで複数のターゲットデータベースファイルを指定する場合、ターゲットファ
イルが最初に作成されるときは、かなり小さくなります(最初のファイルが約 800KB、以
降のファイルが約 4KB)。データを追加する際に、データベースは指定されたサイズにした
がって拡張されます。
InterBase Service Manager での gbak の使用
-service スイッチを指定して gbak を実行する場合、gbak はデータベースが存在するサー
バーにある InterBase の Service Manager のバックアップおよび復元機能を呼び出します。
-service スイッチを指定しないで実行すると、gbak が呼び出されたマシン上(通常はクラ
イアント)で gbak が実行され、バックアップ ファイルはそのマシン(または関連するマシ
ン)に保存されます。-service スイッチを使用して Service Manager を呼び出すと、データ
ベースが存在するのと同じホスト上にバックアップを作成する場合には、かかる時間や
ネットワーク トラフィックを大幅に削減できます。サービス API を使用する場合は、サー
バーがデータベースおよびバックアップ ファイルの両方にアクセスできる必要がありま
す。
-service スイッチを使用する場合、ホスト名に続けて文字列「service_mgr」を指定します。
これに使用する構文は使用するネットワークプロトコルによって異なります。この節で述
べる構文では、これらのコンポーネントを「host_service」と呼びます。
表 8.6
gbak で Service Manager を呼び出す host_service の構文
ネットワークプロトコル
構文
TCP/IP
hostname:service_mgr
NetBEUI
¥¥hostname¥ervice_mgr
ローカル
service_mgr
右側の列の構文は、host_service として gbak 構文内に入ります。
「local」の場合、Windows NT 上での効果は取るにたらないくらいしかありません。ローカ
ルデータベースをバックアップする場合、時間とネットワーク通信量についての結果は、実
際の処理では多少の差がでますが、-service スイッチを使用してもしなくてもほとんど同じ
です。UNIX システムでは、「local」の場合でも localhost:service_mgr(TCP/IP の場合)を
指定した場合と同じになり、時間もネットワーク通信量も軽減されます。
構文
Service Manager を使用したバックアップ
gbak -b [options] -se[rvice] host_service database filename
構文
Service Manager を使用した復元
gbak {-c|-r} [options] -se[rvice] host_service filename database
Service Manager を使用して、マルチファイルをバックアップしたり、マルチファイルを復
元することができます。
8-16 操 作 ガ イ ド
gbak コマンドを使用したバックアップと復元
重要
UNIX システムでは、Service Manager を使ってバックアップされたデータベースを復元す
るには、Service Manager を使用するか、バックアップを作成したときに InterBase を実行し
ていたユーザー(root または interbase)としてシステムにログオンしなければなりません。
これは、InterBase ユーザー(root または interbase)が Service Manager を呼び出した時点の
システムレベルでのバックアップファイルの所有者になるからです。バックアップファイ
ルはそのユーザーだけが読み込み可能になります。-service オプションを指定しないで
gbak を使ってデータベースをバックアップすると、システムレベルでのバックアップファ
イルの所有者は gbak を実行したログインユーザーになります。Windows プラットフォー
ムでは、システムレベルの制約は適用されません。
ユーザー名とパスワード
InterBase がユーザーが実行する gbak が承認されるかどうかをチェックする場合、次に示す
順序にしたがってユーザーが決められます。
• gbak コマンドの一部として、-user が正しいパスワードとともに指定されている。
• ユーザーとパスワードが環境変数 ISC_USER と ISC_PASSWORD に指定されており、環境
変数が InterBase セキュリティデータベースに指定されている (これらの環境変数の設定
は、セキュリティの問題があるので、お勧めしません)
。
• UNIX のみ。前のレベルでユーザーがまったく指定されていない場合、ユーザーがサーバー
または信頼ホスト上で動作しているならば InterBase は UNIX ログインを使用する。
バックアップと復元の例
メモ
次に示す例では、スラッシュだけを使用しています。 InterBase では、Windows プラット
フォーム上のパスを示す場合にはスラッシュまたはバックスラッシュのいずれかを受け付
けます。
データベースのバックアップの例
次の例では、サーバー jupiter にある foo.ib をバックアップして、バックアップファイルを
gbak を実行するクライアントマシンの現在のディレクトリに作成します。foo.ib は、単一
ファイルデータベースまたはマルチファイルデータベースの最初のファイル名のどちらで
もかまいません。-se スイッチを使用しないこの構文の使用により、ネットを越えて大量の
データをコピーします。
gbak -b -user joe -password blurf@ jupiter:/foo.ib foo.ibk
次の例では、サーバー jupiter にある foo.ib をバックアップして、バックアップファイルを
gbak を実行するクライアントマシンの C:¥archive ディレクトリに作成します。前の例と同
様に、foo.ib は、単一ファイルデータベースまたはマルチファイルデータベースの最初のファ
イル名のどちらでもかまいません。この構文は、最初の例と同じくらいのネットワーク通信
量になります。
gbak -b -user joe -password blurf@ jupiter:/foo.ib C:¥archive¥foo.ibk
第 8 章 データベースのバックアップと復元
8-17
gbak コマンドを使用したバックアップと復元
次の例では、jupiter 上の同じデータベースをバックアップしますが、-se[rvice] スイッチを
使って jupiter 上の Service Manager を呼び出し、バックアップを jupiter の \backup ディレク
トリに作成します。このコマンドでは、ネットワーク通信量は少ないので、-se スイッチ
(-service)なしの同じタスクより処理が早くなります。jupiter:service_mgr という構文は
TCP/IP 接続を示しています。
gbak -b -user joe -password blurf@ -se jupiter:service_mgr /foo.ib /backup/foo.ibk
次 の例 で は、Service Manager を使用して、サーバー jupiter にある foo1.ib を jupiter 上の
/backup ディレクトリにマルチファイルでバックアップします。この構文は、単一ファイル
またはマルチファイルのデータベースをバックアップして、時間とネットワーク通信量を
最小にします。外部ファイルを内部テーブルとして変換して、バックアップを移行可能形
式で作成します。これにより、InterBase をサポートするプラットフォームならどこでも
バックアップを復元できます。マルチファイルデータベースをバックアップするには、バッ
クアップコマンドに指定するのは最初のファイルだけにしてください。この例では、最初の
2 つのバックアップファイルが 500K に制限されています。最後のファイルは、必要に応じ
て拡張されます。
gbak -b -user joe -pass blurf@ -co -t -se jupiter:service_mgr
/foo1.ib/backup/backup1.ibk 500k /backup/backup2.ibk 500k
/backup/lastBackup.ibk
データベースの復元例
最初の例は、gbak を実行するマシン上の /archive ディレクトリにあるデータベースを
jupiter に復元して、非アクティブな既存のデータベースを上書きします。
gbak -r -user joe -pass blurf@ C:\archive\foo.ibk jupiter:/foo.ib
次の例では、jupiter の /backup ディレクトリからマルチファイルデータベースを jupiter の
/companydb ディレクトリに復元します。このコマンドは、Service Manager 呼び出しによっ
てサーバー上で実行されます。つまり、時間とネットワーク通信量を節約します。この例で
は、復元するデータベースの最初の 2 つのファイルは 500 ページのサイズで、最後のファ
イルは必要に応じて拡張されます。
gbak -r user -joe -pass blurf@ -se jupiter:service_mgr /backup/foo1.ibk
/backup/foo2.ibk /backup/fooLast.ibk /companydb/foo1.ib 500
/companydb/foo2.ib 500 /companydb/fooLast.ib
次の例は、Service Manager を使ってサーバー Jupiter で実行され、Jupiter 上のバックアップ
を Pluto という別のサーバーに復元します。
gbak -r user -joe -pass blurf@ -se jupiter:service_mgr
/backup/foo.ibk pluto:/companydb/foo.ib
8-18 操 作 ガ イ ド
gbak のエラーメッセージ
gbak のエラーメッセージ
表 8.7
バックアップと復元に関する gbak のエラーメッセージ
エラーメッセージ
原因と対応
Array dimension for column <string> is invalid
バックアップの前に配列定義を修正してください。
Bad attribute for RDB$CHARACTER_SETS
非互換キャラクタセットが使用されています。
Bad attribute for RDB$COLLATIONS
指定されたシステムテーブルの属性を修正してください。
Bad attribute for table constraint
整合性条件をチェックしてください。復元の場合、制約を削除
するには no_validity オプションを使用してください。
Blocking factor parameter missing
-factor オプションに数値引数を指定してください。
Cannot commit files
• データベースに損傷データがあるか、メタデータが整合性
条件に不適合です。
• -one_at_a_time オプションを使ってテーブルを復元してく
ださい。または、-no_validity オプションを使って制約を
削除してください。
Cannot commit index <string>
• データが定義済みのインデックスと競合しています。
• インデックスを作り直さないようにするために -inactive オ
プションを使って復元してください。
Cannot find column for BLOB
Cannot find table <string>
Cannot open backup file <string>
ファイル名を修正して再実行してください。
Cannot open status and error output file <string>
• 無効なファイルにメッセージが出力されようとしていま
す。
• ファイルの形式、または出力ディレクトリのアクセス許可
をチェックしてください。
Commit failed on table <string>
• 特定のテーブルでデータ損傷または整合性条件違反があり
ます。
• メタデータをチェックするか、または -one_at_a_time オプ
ションを使ってテーブルごとに復元してください。
Conflicting switches for backup/restore
バックアップ用と復元用オプションが同じ操作で使用されま
した。コマンドを修正して再度実行してください。
Could not open file name <string>
ファイル名を修正してコマンドを再実行してください。
Could not read from file <string>
ファイル名を修正してコマンドを再実行してください。
Could not write to file <string>
ファイル名を修正してコマンドを再実行してください。
Datatype n not understood
不正なデータ型が指定されています。
第 8 章 データベースのバックアップと復元
8-19
gbak のエラーメッセージ
表 8.7
バックアップと復元に関する gbak のエラーメッセージ ( 続き )
エラーメッセージ
原因と対応
Database format n is too old to restore to
• 使用している gbak のバージョンと InterBase のバージョン
との互換性がありません。
• 復元する前に -expand または -old オプションを使用して、
データベースをバックアップする必要があります。
Database <string> already exists. To
replace it, use the -R switch
• バックアップファイルを復元するのに -create を使用した
が、ターゲットデータベースがすでに存在しています。
• ターゲットデータベースの名前を変更するか、または
-replace を使用してください。
Could not drop database <string>
(database might be in use).
• 既存データベースにファイルを復元するのに -replace を使
用したが、そのデータベースは使用されています。
• ターゲットデータベースの名前を変更するか、または使用
されなくなるまで待ってください。
Device type not specified
-device オプション(Apollo のみ)の後に ct または mt を続けて
ください。InterBase V3.3 までの古い機能です。
Device type <string> not known
-device オプション(Apollo のみ)の使い方が間違っています。
InterBase V3.3 までの古い機能です。
Do not recognize record type n
Do not recognize <string> attribute n -continuing
Do not understand BLOB INFO item n
Error accessing BLOB column <string> -continuing
ERROR: Backup incomplete
• ターゲットデバイスまたはファイルシステムにはバック
アップできませんでした。
• スペースが足りないか、ハードウェアの書き込み障害、ま
たはデータ損傷が考えられます。
Error committing metadata for table <string>
• データベースのテーブルが壊れています。
• データベースを復元している場合は、テーブルを切り離す
ために -one_at_a_time を使用してください。
Exiting before completion due to errors
• このメッセージには他のメッセージとともに表示され、
バックアップまたは復元が実行できなかったことを示しま
す。
• 他のエラーメッセージをチェックして、原因を調べてくだ
さい。
Expected array dimension n but instead found m
問題の配列を再定義してください。
Expected array version number n but instead found m
問題の配列を再定義してください。
Expected backup database <string>、found <string>
復元中のバックアップファイルの名前をチェックしてくださ
い。
Expected backup description record
8-20 操 作 ガ イ ド
gbak のエラーメッセージ
表 8.7
バックアップと復元に関する gbak のエラーメッセージ ( 続き )
エラーメッセージ
原因と対応
Expected backup start time <string>、found <string>
Expected backup version 1, 2, or 3. Found n
Expected blocking factor、encountered <string>
-factor オプションには数値引数が必要です。
Expected data attribute
Expected database description record
Expected number of bytes to be skipped、encountered
<string>
Expected page size、encountered <string>
-page_size オプションには数値引数が必要です。
Expected record length
Expected volume number n、found volume n
複数のテープを使ってバックアップまたは復元する場合は、正
しいボリューム番号を指定してください。
Expected XDR record length
Failed in put_blr_gen_id
Failed in store_blr_gen_id
Failed to create database <string>
指定されたターゲットデータベースは無効です。すでに存在し
ている可能性があります。
column <string> used in index <string> seems to have
vanished
• 存在しない列を参照しているインデックスがあります。
Found unknown switch
gbak のオプションが不正です。
• インデックス定義か列定義をチェックしてください。
Index <string> omitted because n of the expected m keys
were found
Input and output have the same name. Disallowed.
バックアップファイルとデータベースの名前は一意でなけれ
ばなりません。名前を修正して再度実行してください。
Length given for initial file (n) is less than minimum (m)
• データベースを複数ファイルに復元するとき、一次ファイ
ルに十分なスペースがありませんでした。
• InterBase は自動的にページ数を最小値まで増やします。
• 何もする必要はありません。
Missing parameter for the number of bytes to be skipped
Multiple sources or destinations specified
ソースまたはターゲットには 1 つのデバイスしか指定できま
せん。
No table name for data
• データベースはテーブルに割り当てられていないデータを
含んでいます。
• gfix を使用して、データベースを検証または修復してくだ
さい。
第 8 章 データベースのバックアップと復元
8-21
gbak のエラーメッセージ
表 8.7
バックアップと復元に関する gbak のエラーメッセージ ( 続き )
エラーメッセージ
原因と対応
Page size is allowed only on restore or create
-page_size オプションが復元でなくバックアップで使用されま
した。
Page size parameter missing
-page_size オプションには数値引数が必要です。
Page size specified (n bytes) rounded up to m bytes
無効なページサイズには 1024、2048、4096、8192、または 16384
の最も近い値に切り上げられます。
Page size specified (n) greater than limit
ページサイズには、1024、2048、8192、または 16384 を指定し
てください。デフォルトは、4096 バイトです。
Password parameter missing
• バックアップまたは復元でリモートマシンをアクセスして
います。
• -password を使ってパスワードを指定してください。
Protection is not there yet
まだ実現されていないオプション -unprotected を使用しまし
た。
Redirect location for output is not specified
InterBase で将来使用のために予約してあるオプションを指定
しました。
REPLACE specified、but the first file <string> is a database
-replace オプションの後のファイル名は、データベースでなく
バックアップファイルであることをチェックしてください。
Requires both input and output file names
バックアップまたは復元のときは、ソースとターゲット両方を
指定してください。
RESTORE:decompression length error
• バックアップのために使用している gbak と復元のために
使用している gbak に互換性がない可能性があります。
• バックアップのときに -expand が必要かどうかをチェック
してください。
Restore failed for record in table <string>
指定されたテーブルにデータ損傷の可能性があります。
Skipped n bytes after reading a bad attribute n
Skipped n bytes looking for next valid attribute、
encountered attribute m
Trigger <string> is invalid
Unexpected end of file on backup file
• バックアップファイルの復元が失敗しました。バックアッ
プファイルを作成したバックアッププロシージャが異常終
了した可能性があります。
• 可能であれば、新しいバックアップファイルを作成して
データベースを復元してください。
Unexpected I/O error while <string> backup file
バックアップまたは復元中に、ディスクエラーまたはその他の
ハードウェアエラーが発生しました。
Unknown switch <string>
gbak のオプションが不正です。
User name parameter missing
• バックアップまたは復元でリモートマシンにアクセスして
います。
• -user オプションでユーザー名を指定してください。
8-22 操 作 ガ イ ド
IBConsole コマンドを使用したバックアップと復元
表 8.7
バックアップと復元に関する gbak のエラーメッセージ ( 続き )
エラーメッセージ
原因と対応
Validation error on column in table <string>
• 整合性条件に合わないデータを含んでいるため、データ
ベースが復元できません。
• -no_validity オプションを指定してメタデータから条件を
削除してください。
Warning -- record could not be restored
指定されたデータが壊れている可能性があります。
Wrong length record、expected n encountered n
IBConsole コマンドを使用したバックアップと復元
このセクションでは、IBConsole を使用したデータベースのバックアップと復元方法の手順
について説明します。IBConsole を使用してフル バックアップとインクリメンタル バック
ア ッ プ の 両 方 を 指 定 で き ま す。 各タイプの概要については、この章の最初にある
「InterBase バックアップと復元オプションについて」を参照してください。
IBConsole を使用したフル バックアップの実行
IBConsole からフル論理バックアップを実行するには、次の手順を実行します。
1
ツリー ペインで、データベースを右クリックして、コンテキスト メニューから [ バッ
クアップ / 復元 ] を選択します。
2
コンテキスト メニューを展開してバックアップと復元オプションを表示し、[ バック
アップ ...] を選択します。[ データベースのバックアップ ] ダイアログが 図 8.1 のように
表示されます。
第 8 章 データベースのバックアップと復元
8-23
IBConsole コマンドを使用したバックアップと復元
図 8.1
[ データベースのバックアップ ] ダイアログ
3
指定したデータベースサーバーが正しいかチェックします。違っている場合は、このダ
イアログをキャンセルして正しいサーバーから[データベースのバックアップ]ダイア
ログを再度表示します。
4
データベースエイリアスから[データベースのバックアップ]ダイアログを表示した場
合は、自動的に[エイリアス]フィールドが割り当てられます。データベースメニュー
から[データベースのバックアップ]ダイアログを表示した場合は、データベースエイ
リアスの一覧からエイリアスを選択しなければなりません。
データベースエイリアスは、対応するデータベースファイル名を参照します。そのた
め、バックアップするデータベースを指定する際は、エイリアス名だけを指定します。
実際のデータベースファイル名を指定する必要はありません。データベースが複数の
ファイルにまたがっている場合、サーバーは各ファイルのヘッダーページを使って追加
ファイルの位置を特定します。これにより、エイリアスファイル名に基づいてデータ
ベース全体をバックアップできます。
5 [サーバー]ドロップダウンリストの登録サーバー一覧から転送先サーバーを選択しま
す。
6
転送先サーバーを選択すると、バックアップファイルエイリアスのリストを[エイリア
ス]ドロップダウンリストで使用できるようになります。既存のバックアップファイル
を上書きする場合、ドロップダウンリストから適切なファイルを選択します。新しい
バックアップファイルを作成する場合は、[エイリアス]フィールドに新しいエイリア
ス名を入力します。
7
[ ファイル名 ] にバックアップを保存するファイル名を指定します。
ファイルを現在の作業ディレクトリに保存しない場合は、ファイル名を入力する際に、
ファイルパスを含めることに注意してください。
8-24 操 作 ガ イ ド
IBConsole コマンドを使用したバックアップと復元
既存のバックアップエイリアスを選択した場合は、そのエイリアスに対応するすべての
ファイル名とファイルサイズがテーブルに表示されます。このテーブル内の情報は変更
できます。別のファイルをバックアップファイル一覧に追加するには、テーブルの最後
に新しいファイル名を入力します。バックアップファイル一覧からファイルを削除する
には、テーブル内の値を削除します。
8
バックアップオプションを指定するには、有効な値を入力するか、オプションの値をク
リックしてドロップダウンリストから新しい値を選択するか、オプションの値をダブル
クリックして値をリスト内の次の値に変更します。詳細は、次の節 「IBConsole の
バックアップ オプションについて」を参照してください。
9 [OK]をクリックして指定したバックアップを開始します。
メモ
データベースファイルとバックアップファイルには、オペレーティングシステムで有効な
任意の名前を付けることができます。ファイル拡張子の .gdb と .gbk は InterBase での規約に
すぎません。WindowsME、WindowsXP、および Windows 2003 Server では、gdb 拡張子を
持つファイルが変更されるたびに自動的にバックアップされるため、InterBase のデータ
ベースファイルには ib 拡張子、バックアップファイルには ibk 拡張子の使用をお勧めしま
す。
バックアップファイルには現在のバージョンのデータだけが含まれ、データ保存のための
オーバーヘッドが少なくなるため、通常はデータベースよりスペースを消費しません。ま
た、バックアップファイルにはインデックスデータ構造体は含まれず、インデックスの定
義だけが含まれます。
既存のバックアップファイルを指定した場合、IBConsole はそれを上書きします。上書きを
防ぐには、重複しない名前を指定してください。
IBConsole のバックアップ オプションについて
バックアップオプションは、
[データベースのバックアップ]ダイアログの右側にあります。
値を入力するか、オプションの値をクリックしてドロップダウンリストから新しい値を選
択するか、またはオプションの値をダブルクリックして値をリスト内の次の値にして、バッ
クアップオプションを指定できます。
第 8 章 データベースのバックアップと復元
8-25
IBConsole コマンドを使用したバックアップと復元
図 8.2
データベースバックアップオプション
形式
オプションの値は、[移行可能]または[移行不可能]です。
バックアップを実行したマシンから別のオペレーティングシステムのマシンにデータベー
スを移動するには、
[形式]オプションを[移行可能]に設定します。このオプションを使
用すると、データが汎用形式で出力され、InterBase をサポートするすべてのマシンに移動
できます。
重要
データベースを別の場所にコピーしないでください。 データベースをバックアップしてか
ら、新しい場所に復元してください。
メタデータのみ
オプションの値は、[True]または[False]です。
データベースをバックアップするときに、データを除いて、メタデータだけを保存するこ
とができます。これは、次の目的のために行います。
• 変更される前のメタデータのレコードを保存する。
• データベースの空のコピーを作成する。 メタデータは同じですが、別のデータを入力でき
ます。
メタデータだけをバックアップするには[メタデータのみ]オプションを[True]に設定
します。
ヒント
isql を使用して、データベースのメタデータを抽出することもできます。isql は、SQL コー
ドを含む SQL データ定義テキストファイルを生成します。IBConsole の[メタデータのみ]
のバックアップでは、メタデータだけを含むバックアップファイルが作成されます。
この機能は、gbak の -metadata オプションに相当します。
ガベージ コレクション
オプションの値は、[True]または[False]です。
8-26 操 作 ガ イ ド
IBConsole コマンドを使用したバックアップと復元
デフォルトでは、IBConsole はバックアップ中にガベージ コレクションを実行します。バッ
クアップ中にガベージ コレクションを行わないようにするには、[ ガベージ コレクション ]
オプション値を [False] に設定します。
ガベージ コレクションにより、旧バージョンのデータ レコードによって使用されている領
域に印が付けられて、再利用のために解放されます。一般には、IBConsole がバックアップ
中にガベージ コレクションを実行するようにします。
ヒント
バックアップ処理中のガベージ コレクションを無効にすると、バックアップのパフォーマ
ンスが向上します。ガベージ コレクションが必要である場合は、gfix を使用して別のス
イープ操作を実行します。さらに、旧バージョンのレコードにデータ損傷があり、バック
アップ中にこれらのレコードにアクセスすることを避ける場合には、ガベージ コレクショ
ンを行わないようにします。
この機能は、gbak の -garbage_collect オプションに相当します。
Limbo でのトランザクション
オプションの値は、[プロセス]または[無視]です。
バックアップで limbo トランザクションを無視するには、[Limbo でのトランザクション]
オプションを[無視]に設定します。
IBConsole がバックアップで limbo トランザクションを無視すると、limbo トランザクショ
ンで作成されたすべてのレコードが無視され、最後にコミットされたレコードのバージョ
ンが検索され、そのバージョンがバックアップされます。
limbo トランザクションは 2 相コミットが失敗したときに作成されます。システム障害や単
一データベーストランザクションが準備されたときにも作成されます。
limbo トランザクションを含んでいるデータベースをバックアップする前に、データベース
保守ウィンドウの[データベース|保守|トランザクション回復]を選択して、トランザ
クションのリカバリを行ってください。詳細は、7-34 ページの「トランザクションのリカ
バリ」を参照してください。
この機能は、gbak の -limbo オプションに相当します。
チェックサム
メモ
パフォーマンス上の理由から、本来のチェックサムは ODS 8 以前の InterBase でのみサポー
トされます。ODS 9 以降では、チェックサム値として常に文字列 “12345” が生成されます。
これにより、旧バージョンとの互換性が保たれます。
オプションの値は、[プロセス]または[無視]です。
バックアップでチェックサムを無視するには、
[チェックサム]オプションを[無視]に設
定します。
チェックサムは、ページごとにデータを解析してデータの整合性を検査するものです。不良
チェックサムとは、システム障害などでデータページがランダムに上書きされている状態
を言います。
チェックサムエラーは、データに損傷があることを示します。不良チェックサムが検索さ
れた場合、通常はデータベースのバックアップは行われません。次回データベースを復元す
るときに、データを調べてください。
第 8 章 データベースのバックアップと復元
8-27
IBConsole コマンドを使用したバックアップと復元
この機能は、gbak の -ignore オプションに相当します。
テーブルへの変換
外部ファイルを内部テーブルに変換するには、[テーブルへの変換]オプションを[True]
に設定します。
この機能は、gbak の -convert オプションに相当します。
詳細出力
オプションの値は、[なし]
、[画面へ]、[ファイルへ]です。
バックアップ処理を動作中に監視するには、
[詳細出力]オプション値を[画面へ]に設定
します。これを選択すると、標準テキスト表示ウィンドウが開き、バックアップ処理動作中
にステータスメッセージが表示されます。次に例を示します。
図 8.3 [データベースのバックアップ]の処理経過出力
標準テキスト表示ウィンドウで特定のテキストを検索して、そのテキストをファイルに保
存したり印刷することができます。標準テキスト表示ウィンドウの使い方については、3-7
ページの「標準テキスト表示ウィンドウ」を参照してください。
この機能は、gbak の -verbose オプションに相当します。
別のオペレーティングシステムで動作するサーバーへのデー
タベースの転送
1 [データベースのバックアップ]ダイアログの[形式]オプションを[移行可能]に設
定します。
8-28 操 作 ガ イ ド
IBConsole コマンドを使用したバックアップと復元
2
3
4
データベースをバックアップします。
リムーバブルの媒体へバックアップする場合は、ステップ 4 に進んでください。ディス
クにバックアップファイルを作成した場合、オペレーティングシステムのコマンドを
使ってファイルをテープなどのリムーバブルの媒体にコピーします。次に、媒体の内容
を別のマシンに読み込むか、ネットワークを介して別のマシンにコピーします。
転送先のマシンで、バックアップファイルを復元します。テープなどのリムーバブルの
媒体から復元する場合は、バックアップファイル名のかわりにデバイス名を指定しま
す。
IBConsole を使用したインクリメンタル バックアップの実行
インクリメンタル バックアップは最後にフル バックアップを実行したあとのデータベー
スにコミットされたすべての変更をコピーします。IBConsole から [ インクリメンタル・バッ
クアップ ] を最初に選択したときは、InterBase はフル物理バックアップ(オンライン ダン
プ)を実行します。最初のフル ダンプを実行したあとは、以降の各バックアップはインク
リメンタル バックアップを実行し、最後のフル バックアップの後にコミットされたすべて
のトランザクションをコピーし保存します。
IBConsole を使用してインクリメンタル バックアップを開始するには、次の手順を実行しま
す。
1
ツリー ペインで、インクリメンタル バックアップを実行するデータベースを右クリッ
クして、コンテキスト メニューから [ バックアップ / 復元 ] を選択します。
2
コンテキスト メニューを展開してバックアップと復元オプションを表示し、[ インクリ
メンタル・バックアップ ] を選択します。[ インクリメンタル・バックアップ ] ダイアロ
グが 図 8.4 のように表示されます。
図 8.4
3
インクリメンタル バックアップの指定
[ ファイル名 ] にバックアップを格納するファイル名を入力します。
第 8 章 データベースのバックアップと復元
8-29
IBConsole でのデータベースの復元
• [ 複数のファイルを使用する ] チェックボックスをオンにすることによって、複数の
ファイルにバックアップすることもできます。ファイル名を入力するとき、ファイ
ル パスが含まれていることを確認します。ただし現在の作業ディレクトリにファイ
ルを書き込む場合を除きます。
4
以前のインクリメンタル バックアップに上書きするには、[ 上書き ] の値を True に変更
します。インクリメンタル バックアップに上書きしたときに発生する問題について詳細
は、
「インクリメンタル バックアップの上書き」を参照してください。
5 [OK] を選択してバックアップを開始します。
IBConsole でのデータベースの復元
[データベースの復元]ダイアログでデータベースを復元します。このダイアログを表示す
るには、ツリーペインに表示されている指定可能なサーバーのリストからサーバーを選択
して、次に示すいずれかの方法を実行します。
• [Databases]階層からデータベースを選択して、
[データベース|保守|バックアップ / 復
元|復元]を選択します。
• [Backup]階層からバックアップエイリアス名をダブルクリックします。
• [Backup]または[Backup]階層のバックアップエイリアス名を右クリックして、コンテキ
ストメニューで[復元]を選択します。
• [Backup]からバックアップエイリアス名を選択して、ワークペインで[復元]をクリック
します。
[データベースの復元]ダイアログが表示されます。
図 8.5 [データベースの復元]ダイアログ
重要
現在使用中のデータベースを置き換えるようなデータベースの復元はしないでください。
8-30 操 作 ガ イ ド
IBConsole でのデータベースの復元
データベースを復元するには:
1 [バックアップファイルのサーバー]が指定したサーバーかどうかをチェックします。
違っている場合は、このダイアログをキャンセルして正しいサーバーから[データベー
スの復元]ダイアログを再度表示します。
2
バックアップエイリアスで[データベースの復元]ダイアログを表示すると、自動的に
[エイリアス]フィールドが割り当てられます。[Backup]で[データベースの復元]
ダイアログを表示した場合は、バックアップエイリアスの一覧からエイリアスを選択し
なければなりません。
メモ バックアップエイリアスは、対応するバックアップファイル名を参照します。その
ため、復元するバックアップを指定する際は、エイリアス名だけを指定します。実際の
バックアップファイル名を指定する必要はありません。バックアップが複数のファイル
にまたがっている場合、サーバーは各ファイルのヘッダーページを使って追加ファイル
の位置を特定します。これにより、エイリアスファイル名に基づいてバックアップ全体
を復元できます。
3
バックアップファイルエイリアスを選択すると、[バックアップファイル]テーブルに、
対応するバックアップファイルが表示されます。バックアップファイルエイリアスを指
定しない場合は、バックアップファイル名を手動で入力するか、[エイリアス]ドロッ
プダウンリストから[ファイル]を選択してファイルを指定します。ファイル名を入力
する場合は、フルパスを指定します。復元に関連するすべてのファイル名を指定する必
要があります。
4 [データベースのサーバー]ドロップダウンリストの登録サーバー一覧から転送先サー
バーを選択します。
5
既存のデータベースに復元する場合は、そのエイリアスを[エイリアス]ドロップダウ
ンリストから選択します。新しいデータベースに復元する場合は、新しいエイリアス名
を[エイリアス]フィールドに入力します。
6
[ ファイル名 ] に、復元するデータベースのファイル名を指定します。現在の作業ディ
レクトリ以外のファイルを指定する場合は、フルパスを指定します。
システムリソースをより柔軟に割り当てられるように、複数のディスクにデータベース
を分散し、複数のファイルにデータベースを復元することが考えられます。
既存のデータベースエイリアスを選択すると、[データベース]テーブルは対応するす
べてのファイル名とページ数を表示します。このテーブル内のすべての情報は変更でき
ます。テーブルの最後に新しいファイル名を入力して、別のファイルをデータベース
ファイル一覧に追加することもできます。テーブル内の値を削除すると、ファイル一覧
からファイルを削除できます。
メモ:データベースをネットワークファイルシステム(マップドライブ)に復元するこ
とはできません。
7
復元のオプションを指定するには、有効な値を入力するか、オプションの値をクリック
してドロップダウンリストから新しい値を選択するか、オプションの値をダブルクリッ
クして値をリスト内の次の値に変更します。詳細は、次の節 「復元オプション」を参照
してください。
8 [OK]をクリックして復元を開始します。
第 8 章 データベースのバックアップと復元
8-31
IBConsole でのデータベースの復元
一般に、復元されたデータベースのディスク容量はバックアップされる前より小さくな
ります。しかし、ODS のバージョンが変われば、必要なディスク容量は変化します。
ODS の詳細は、8-4 ページの「ODS の復元」を参照してください。
メモ
InterBase の復元ユーティリティを使用すると、なんらかの理由で復元処理によってデータ
ベースのインデックスが再作成されない場合でも、データベースの復元は成功します。たと
えば、一時ディスク容量の不足で、復元中にインデックスを作成するために必要なソート
処理を実行できない場合が考えられます。このような場合、データベースは復元されて使用
できますが、インデックスはアクティブになりません。復元処理の完了後に、ALTER INDEX
を使ってインデックスをアクティブにします。
復元オプション
復元オプションは、
[データベースの復元]ダイアログの右側にあります。値を入力するか、
オプションの値をクリックしてドロップダウンリストから新しい値を選択するか、または
オプションの値をダブルクリックして値をリスト内の次の値にして、バックアップオプ
ションを指定できます。
図 8.6
データベース復元オプション
ページ サイズ
InterBase は、1024、2048、4096、8192、および 16384 バイトのデータベースページサイズを
サポートします。デフォルトは 4096 バイトです。ページサイズを変更するには、データベー
スをバックアップし、
[データベースの復元]ダイアログの[ページ サイズ]オプションの
値を変更してからデータベースを復元します。
次のような理由から、ページサイズを変更することによってパフォーマンスを向上させる
ことができます。
• BLOB 全体が 1 つのデータベースページに相当するとき、BLOB データの格納と検索は最も
効率がよくなります。アプリケーションで 4KB より大きな BLOB を多く保存する場合は、
よ
り大きなページサイズを使用すれば BLOB データアクセスの時間を短縮できます。
8-32 操 作 ガ イ ド
IBConsole でのデータベースの復元
• 行が複数ページにまたがる場合、InterBase の実行効率が低下します。長い行のデータを含
んでいる場合は、ページサイズを拡大してください。
• データベースのインデックスサイズが大きい場合は、データベースページサイズを大きく
すればインデックスツリーのレベル数は少なくできます。ツリーレベルの数が最小に維持
されればインデックス操作の速度が高まります。[データベース|保守|データベース統
計情報]を選択してインデックスの状態を表示し、頻繁に使用されるインデックスの深さ
が 2 レベルより深い場合は、ページサイズを大きくしてみてください。
• ほとんどのトランザクションが数行のデータしか含んでいない場合は、データの移動がな
く、ディスクキャッシュでのメモリ使用も少ないため、ページサイズを小さくします。
この機能は、gbak の -page_size オプションに相当します。
上書き
オプションの値は、[True]または[False]です。
[上書き]オプションが[True]に設定されていないと、IBConsole は既存のデータベース
ファイルを上書きできません。既存のデータベース名で復元しようとしても、このオプショ
ンが[False]に設定されていると、復元は先に進みません。
既存のデータベースを上書きしてデータベースを復元するには、既存のデータベースの所
有者または SYSDBA でなければなりません。
重要
クライアントが操作している間は、既存のデータベースへの上書きは行わないでください。
既存のファイル名で復元する場合は、安全のため、既存のデータベース名を変更し、その
データベースを復元してから必要に応じて古いデータベースを削除するかまたはアーカイ
ブします。
この機能は、gbak の -replace オプションに相当します。
各テーブル後にコミット
オプションの値は、[True]または[False]です。
通常 IBConsole では、データが復元される前に、すべてのメタデータが復元されます。[各
テーブル後にコミット]オプションを[True]に設定すると、IBConsole は各テーブルのメ
タデータとデータを同時に復元し、テーブルごとにコミットします。
バックアップファイルの復元中にトラブルが発生した場合に、このオプションを使用しま
す。たとえば、データの損傷や整合性制約違反が発生した場合です。
バックアップファイルに問題がある場合に、データベーステーブルを復元すると、データ
のいくつかを元に戻せます。不良データより前にあるテーブルだけを復元できます。不良
データが見つかった時点で、復元は失敗に終わります。
この機能は、gbak の -one_at_a_time オプションに相当します。
シャドウ ファイルの作成
シャドウファイルとは、データベース内のデータベースファイルとまったく同じ内容の物
理的な複製です。バックアップ時に保存されたシャドウファイルを再作成するには、
[シャ
ドウ ファイルの作成]オプションを[True]に設定します。シャドウイングの詳細は、7-14
ページの「シャドウイング」を参照してください。
第 8 章 データベースのバックアップと復元
8-33
IBConsole でのデータベースの復元
インデックスの非アクティブ化
オプションの値は、[True]または[False]です。
通常、データベースが復元されるときにインデックスは再作成されます。データベースが
バックアップされるときに、インデックスに重複した値が含まれていた場合、復元は失敗
に終わります。インデックスが一時的に無効にされた場合(たとえば、多くのレコードを挿
入したり、インデックスを再調整した場合)、重複した値がデータベースに取り込まれるこ
とがあります。
このような場合に復元を成功させるには、
[インデックスの非アクティブ化]オプションを
[True]に設定します。これによってインデックスを無効にし、インデックスを再作成でき
ないようにします。重複しているインデックス値を削除し、isql で ALTER INDEX を使って
インデックスを再度有効にします。
一意なインデックスは、ALTER INDEX 文を使ってアクティブにすることはできません。一
意なインデックスは、いったん削除してから再作成しなければなりません。インデックス
の有効化 / 無効化の詳細は、『言語リファレンス』を参照してください。
ヒント [インデックスの非アクティブ化]オプションは、データベースをより早くオンラインに切
り替えるときにも役立ちます。インデックスが再作成されるまで、データアクセスは遅くな
りますが、データベースは使用できます。データベースの復元後、インデックスが有効にな
るまでの間もデータベースにアクセスできます。
この機能は、gbak の -inactive オプションに相当します。
妥当性条件
オプションの値は、[復元]または[無視]です。
データがすでに入力されているデータベースで制約を再定義した場合、データが制約を満
たさなくなっていることがあります。これは、データベースを復元するときに無効データの
エラーが出るまで発見できない場合があります。
重要
制約を再定義する前にメタデータを必ずコピーしてください。たとえば、isql を使ってメ
タデータを抽出できます。
無効データを含んでいるデータベースを復元するには、
[妥当性条件]オプションを[無視]
に設定します。このオプションは、メタデータから制約を削除します。データベースが復元
された後、新しい整合性制約にしたがってそのデータを正しく変更します。そして、削除さ
れた条件を元に戻します。
このオプションは、データベースを復元した後で制約を再定義する場合にも使用できます。
制約を再定義する場合は、その後すべてのデータをテストしてください。
この機能は、gbak の -no_validity オプションに相当します。
全スペースの使用
オプションの値、は [True] または [False] です。
各データ ページで 100 % の充填率でデータベースを復元するには、[ 全スペースの使用 ] に
[True] を設定します。デフォルトでは、UPDATE や DELETE で旧バージョンを格納するた
めにデータ ページで各行に対して領域が確保されています。圧縮行のサイズに従って、比
率は任意のパーセンテージに変換されます。
8-34 操 作 ガ イ ド
IBConsole でのデータベースの復元
この機能は、-use_all_space オプションを gbak で指定した場合に対応します。
詳細出力
オプションの値は、[なし]
、[画面へ]、[ファイルへ]です。
復元処理を動作中に監視するには、
[詳細出力]オプションを[画面へ]に設定します。こ
れを選択すると、標準テキスト表示ウィンドウが開き、復元処理動作中にステータスメッ
セージが表示されます。次に例を示します。
図 8.7 [データベースの復元]の処理経過の出力
標準テキスト表示ウィンドウで特定のテキストを検索して、そのテキストをファイルに保
存したり印刷することができます。標準テキスト表示ウィンドウの使い方については、3-7
ページの「標準テキスト表示ウィンドウ」を参照してください。
この機能は、gbak の -verbose オプションに相当します。
第 8 章 データベースのバックアップと復元
8-35
IBConsole でのデータベースの復元
8-36 操 作 ガ イ ド
第
章
ジャーナル機能と障害復旧
第9章
ジャーナル機能により、強制書き込み(同期書き込み)の保護に対するパフォーマンスが
さらに向上し、ジャーナル アーカイブ機能により、向上した障害復旧もサポートします。
有効な場合は、ジャーナル アーカイブ機能により、特定時点の状態、または障害発生時か
ら数分以内に InterBase サーバー コンピュータのデータベースを完全なデータ損失から復
旧できます。
この章では、ジャーナル、ジャーナル ファイル、ジャーナル アーカイブなどの主な用語の
定義を示し、データベースでこれらの機能を使用し、実行する方法について説明します。
メモ
ジャーナル機能は InterBase Server Edition(バージョン 2007 以降)で利用できます。Desktop
Edition ではサポートされていません。
ジャーナル、ジャーナル ファイルとジャーナル アーカイブに
ついて
ジャーナルは 1 つまたは複数のジャーナル ファイルで構成されます。ジャーナル ファイル
は、各データベース トランザクションを発生時に記録します。これにより、ジャーナルは
常にデータベース トランザクションの最新レコードになります。ジャーナル機能は WAL
(write-ahead logging :ログ先行書き込み)を表すこともあります。
ジャーナル アーカイブとは、フル データベース ダンプとそのダンプの作成以降に完了した
すべてのジャーナル ファイルを含むディレクトリです。ジャーナル アーカイブを使用し
て、直近にアーカイブが作成されたジャーナル ファイルに記録された最後のトランザク
ションに復旧できます。アーカイブのジャーナル ファイルを使用して、特定時点の状態に
データを復旧することもできます。特定時点の復旧では、ファイルの各トランザクションで
記録された内部のタイムスタンプを使用します。必要な場合、これにより特定の日時の状
態に復旧できます。
第 9 章 ジャーナル機能と障害復旧
9-1
ジャーナル、ジャーナル ファイルとジャーナル アーカイブについて
ジャーナル機能のしくみ
ジャーナル機能ではハード ドライブへの強制書き込みが無効になり、代わりにジャーナル
ファイルに更新が同期して書き込まれます。ジャーナル ファイルの書き込みはランダムで
はなく順次実行であるため、ディスク ヘッドの移動がなく、データベースのパフォーマン
スが向上します。
データベース キャッシュにある変更ページをハード ディスクに保存するには、自動的に実
行されるジャーナル機能のチェックポイントを設定します。チェックポイントでは、データ
ベース キャッシュのすべての変更ページが InterBase によりデータベース ファイルに保存
される時間を指定します。チェックポイントに到達した後は、ジャーナル ファイルのデー
タが必要なくなり、ファイルを再利用できます。パフォーマンスを最大にするには、専用
ハード ドライブにジャーナル ファイルを配置します。ジャーナル ファイルはデータベー
ス サーバー コンピュータに配置する必要があります。
ジャーナル機能では、OS やハードウェアのキャッシュ機能が無効である限り、トランザク
ションがコミット済みとマークされる前に、すべての変更がディスク上にあることを保証
します。
ジャーナル機能とジャーナル ファイルを使用するためにジャーナル アーカイブ機能を使
用する必要はありません。ただし、ジャーナル アーカイブ機能では、データベース サーバー
を完全に破壊する障害から復旧できます。
ジャーナル アーカイブ機能のしくみ
ジャーナル アーカイブ機能の目的は、効率的で効果的な障害復旧を実行することです。前
の説明のとおり、ジャーナル アーカイブとは、フル データベース ダンプとそのダンプの作
成以降に完了したすべてのジャーナル ファイルを含むディレクトリです。つまり、ジャー
ナル アーカイブにより、直近にアーカイブが作成され、完了されたジャーナル ファイルで
最後にコミットされたトランザクションに復旧できます。
重要
障害復旧の目的で、ジャーナル アーカイブは、常に、データベース サーバーと異なる(理
想的には、離れた場所にある)コンピュータ上に配置する必要があります。
完了済みジャーナル ファイルだけが、アーカイブ ディレクトリにアーカイブが作成されま
す。つまり、現在のアクティブで、アーカイブが作成されていないジャーナル ファイルを
含むハード ドライブでデータ損失がないときは、最新の状態まで復旧が可能です。ただし、
アクティブ(未完)のジャーナル ファイルを含むハード ドライブが障害により破壊された
場合は、このファイル上のデータも失われます。
メモ
ジャーナル機能を有効にしてから、ジャーナル アーカイブ機能を有効にする必要がありま
す。方法の詳細については、9-3 ページの「ジャーナル機能の有効化とジャーナル ファ
イルの作成」を参照してください。ジャーナル アーカイブ機能の有効化方法の手順につい
ては、9-8 ページの「ジャーナル アーカイブ機能の使用」を参照してください。
ジャーナル機能とジャーナル アーカイブ機能を使用するため
のシステムの設定
次の基準でシステムでのジャーナル機能の最適設定を決定します。
• ジャーナル ファイルを作成するデバイスの I/O 速度
9-2 操 作 ガ イ ド
ジャーナル機能の有効化とジャーナル ファイルの作成
• 新規のジャーナル ファイルを複数同時に作成する速度
• ハードウェア要件とセットアップのしやすさ
ジャーナル アーカイブのストレージに使用するコンピュータには、InterBase をインストー
ルして実行する必要はありません。
他の注意事項
• ジャーナル アーカイブはプラットフォームに固有です。たとえば、Windows 用の InterBase
を使用して作成されたアーカイブを、別のプラットフォームの InterBase データベースの復
元に直接使用できません。その代わりに、アーカイブ データベース ダンプを、移植可能な
形式で論理的にバックアップすれば、他のプラットフォームでも論理的に復元できます。
• アーカイブに作成されるのは、フル ダンプだけです。データベースのインクリメンタル ダ
ンプのアーカイブを作成できません。gbak -archive_database コマンドはフル物理バック
アップを開始します。InterBase のバックアップ オプションの詳細については、第 8 章
「データベースのバックアップと復元」を参照してください。
• ジャーナルとジャーナル アーカイブは、1 つのディレクトリに制限されます。アーカイブを
作成可能なアイテムの数は、対象ファイル システムで 1 つのディレクトリに許されるファ
イル数に制限されます。
ジャーナル機能の有効化とジャーナル ファイルの作成
ジャーナル ファイルを作成し、ジャーナル機能を有効にするには、次の DDL 構文を使用し
ます。
構文
CREATE JOURNAL [<journal-file-spec>] [LENGTH <number-of-pages> [PAGES]]
[CHECKPOINT LENGTH <number-of-pages> [PAGES]]
[CHECKPOINT INTERVAL <number-of-seconds> [SECONDS]]
[PAGE SIZE <number-of-bytes> [BYTES]]
[PAGE CACHE <number-of-buffers> [BUFFERS]]
[[NO] TIMESTAMP NAME]
[[NO] PREALLOCATE <number-of-pages> [PAGES]];
メモ
現時点で、InterBase ではすべてのジャーナル ファイルが同じディレクトリに格納されてい
ることが必要です。
CREATE JOURNAL のすべての句は省略可能です。表 9.1 で各オプションの機能とデフォルト値
について説明します。
第 9 章 ジャーナル機能と障害復旧
9-3
ジャーナル機能の有効化とジャーナル ファイルの作成
表 9.1
CREATE JOURNAL のオプション
オプション
説明
デフォルト値
<Journal_file_spec>
引用符で囲まれた文字列で、ジャーナル ファイルのフル
パスとベースのファイル名を表します。ベースのジャー
ナル ファイル名は、実際に作成されるジャーナル ファイ
ル名のテンプレートとして使われます。
データベースのフ
ル パスとファイル
名
LENGTH
新規のジャーナル ファイルへの切り替えを行うまでに、 4,000 ページ(最大:
ジャーナル ファイルに書き込まれるページ数を指定しま 2 GB)
す。この数値の計算方法のヒントについては、9-5 ページ
の「ジャーナルの切り替え間隔を決定するためのヒント」
を参照してください。
CHECKPOINT LENGTH
この句では、チェックポイントが発生するまでにジャー 500
ナル ファイルに書き込み可能なページ数を指定します。
チェックポイントの長さの計算方法のヒントについて
は、9-5 ページの「ジャーナルの切り替え間隔を決定する
ためのヒント」を参照してください。
CHECKPOINT INTERVAL
データベースのチェックポイントの間隔を秒数で指定し
サーバー クラッシュ
ます。チェックポイントの間隔では、
後に復旧するのにかかる時間を決定します。
0
メモ:CHECKPOINT LENGTH と CHECKPOINT INTERVAL の両
方を指定した場合は、
この 2 つのうちの先に発生したイベ
ントによって、データベースのチェックポイントが開始
されます。チェックポイントの間隔の計算方法のヒント
については 9-6 ページの「チェックポイントの間隔を計算
するためのヒント」を参照してください。
PAGE SIZE
ジャーナル ページのサイズをバイト数で指定します。 データベース ペー
ジャーナル ページ サイズは、少なくともデータベース ジ サイズの 2 倍
ページ サイズの 2 倍は必要です。2 倍より小さいジャーナ
ル ページ サイズを指定した場合は、ジャーナル ページ サ
イズがデータベース ページ サイズの 2 倍まで切り上げら
れて、警告が返されます。ジャーナル ページ サイズを 2
のべき乗にする必要はありません。
PAGE CACHE
メモリにキャッシャが作成されるジャーナル ページの数
を指定します。この数値は、キャッシュ ライターが他の
バッファに書き込むときに、ワーカー スレッドがバッ
ファに書き込めるように十分大きい必要があります。数
値が小さすぎる場合は、ワーカー スレッドは待機し、パ
フォーマンスが低下します。
100 バッファ
[NO] TIMESTAMP NAME
ベースのジャーナル ファイル名に、ファイル作成時のタ
イムスタンプを付加するかどうかを指定します。
オン
使用すると、ベースのジャーナル ファイル名に、次の形
式のタイムスタンプが付加されます。
YYYY_MM_DDTHH_MM_SSZ.sequence_number.journal
[NO] PREALLOCATE
9-4 操 作 ガ イ ド
ジャーナル ファイル用に事前に割り当てるディスク領域
の容量を指定します。PREALLOCATE 句の使用の詳細につい
ては、9-5 ページの「事前割り当てジャーナル領域につい
て」を参照してください。
なし
ジャーナル機能の有効化とジャーナル ファイルの作成
CREATE JOURNAL 文を実行すると、その後のデータベースへの書き込み操作は、すべて非同期
に実行されます。ジャーナル ファイルの I/O は常に非同期で、これを変更できません。す
べてのトランザクションの変更は、トランザクションがコミットされる前に、永続ストレー
ジに安全に記録されます。これにより、トランザクションの ACID プロパティ(アトミック
性(Atomicity)、一貫性(Consistency)、独立性(Isolation)、および永続性(Durability)に
対するデータベース業界標準)が保証されます。
データベース書き込みに非同期の I/O を使用することによって、オペレーティング システ
ムは、ファイル I/O を最適化できます。たとえば、連続したページを一緒に書き込む方法
や、連続したページを不連続なページ バッファに書き込む Scatter/Gather 技術などが使用
できます。ジャーナル ファイルの I/O は、InterBase の緻密な書き込み戦略を使用して実行
されます。このため、データベース ページの変更がジャーナルに保存された後、そのデー
タベース ページを任意の順序でデータベースに書き戻すことができます。
データベース チェックポイント処理中に、非同期にバッファされていたすべてのデータ
ベース ページ書き込みは、チェックポイント完了の合図が来る前に、ディスクにフラッシュ
されます。データベース チェックポイントが完了する前にフラッシュ処理が必要ない、
データベースへの同期書き込みを再び有効にできます。ただし、これを実行すると、パ
フォーマンスが低下します。
事前割り当てジャーナル領域について
前に示したとおり、パフォーマンスを最大にするには、専用ハード ドライブにジャーナル
ファイルを配置する必要があります。専用ドライブに配置されていない場合は、ドライブに
ある他のファイルにアクセスすると、ディスク ヘッドがジャーナル ファイルから移動しま
す。これにより新しいページを書き込む前に、ジャーナル ファイルの位置にシークで戻る
必要があります。さらに、ジャーナル ファイルが専用ドライブにある場合でも、ジャーナ
ル ファイルのサイズが拡大するたびに、オペレーティング システムがディレクトリ情報を
更新できるように、ディスク ヘッドがシーク時にジャーナル ファイルから離れます。常に
ディスク ヘッドが最新のジャーナル ファイルの位置にあるようにするために、PREALLOCATE
句を使用できます。PREALLOCATE 句により、通常の操作中に存在できるジャーナル ファイル
の最大数に、CREATE JOURNAL 文の LENGTH 句に指定したジャーナル ファイルの長さをかけた
値に等しい領域を割り当てできます。
ジャーナルが専用ドライブにない場合は、存在可能な最大数のジャーナル ファイルのサイ
ズに等しい領域を PREALLOCATE 句で割り当てできます。これにより、ジャーナルに必要な領
域が他のファイルで、消費されないことを保証します。ジャーナル アーカイブ機能が有効
であり、リモート コンピュータにアーカイブを作成する場合は、リモート コンピュータへ
の接続が失われ、一定時間、ジャーナル ファイルのアーカイブを作成できないときに、累
積したジャーナル ファイルを保存するのに十分な領域を割り当てます。
ジャーナルの切り替え間隔を決定するためのヒント
ジャーナル ファイルの切り替えは時間のかかる処理です。切り替えが頻繁に発生しすぎる
場合は、パフォーマンスが悪化します。ただし、ジャーナル アーカイブ機能を使用してい
る場合は、完了したジャーナル ファイルのアーカイブが適切に作成できるように、できる
限り多く、ジャーナル ファイルの切り替えを実行します。これにより、障害によりデータ
ベース サーバーが破壊された場合に失われるトランザクション数を最小限に抑えられま
す。一番効果的な切り替え間隔を決定するには、処理のバランスを保つことで、最適な解は
それぞれにインストールした InterBase で異なります。
第 9 章 ジャーナル機能と障害復旧
9-5
ジャーナル機能の有効化とジャーナル ファイルの作成
次の式を使うと、ユーザーのジャーナル ファイルに対する一番効果的な切り替え間隔の決
定に役に立ちます。 CREATE JOURNAL 文の LENGTH 句に計算した数値を入力できます。これ
はジャーナル ファイルの最後に到達する時点を指定します。ファイルの最後に到達したと
き、ジャーナル機能は新しいファイルで再開されます。ジャーナル ファイルが完了(最後
に到達)したとき、アーカイブ ディレクトリに保存できます。
間隔(バイト)を決定するには、次の式を使用します。
(ジャーナル ファイルの長さ X ジャーナルのページ サイズ)= 切り替えが発生するま
でのバイト数
切り替え間隔を決定するには、次の式のいずれかを使用できます。
(ジャーナル ファイルの長さ X ジャーナルのページ サイズ)/ (データベースのペー
ジ サイズ X 分あたりの書き込み)= 切り替え間隔(分)
前の式では、指定したジャーナル ファイルの長さに対して、発生する切り替えの頻度を確
認できます。次の式では、指定した切り替え間隔が得られるジャーナルの長さを計算しま
す。
(切り替え間隔 X データベースのページ サイズ X 分あたりの書き込み)/ ジャーナル
のページ サイズ = ジャーナル ファイルの長さ
チェックポイントの間隔を計算するためのヒント
InterBase ではチェックポイントの間隔で、サーバー クラッシュ後に InterBase が復旧するの
にかかる時間を決定します。サーバーがクラッシュした場合は、キャッシュにあるすべての
変更は失われます。これは問題ありません。変更はジャーナルに同期して書き込まれている
(データベースではなく、ディスクに格納)からです。サーバーを再起動したとき、データ
ベース ファイルを最新状態にするため、すべてのジャーナル ファイルを読み込み、ジャー
ナルの変更をデータベースにコピーする必要があります。ジャーナル ファイルが多いほ
ど、この処理に時間がかかります。頻繁にチェックポイントを実行することは、そのたびに
キャッシュにある変更をデータベースに書き込むことです。つまり、ジャーナルに残って
いる変更は少なくなります。したがって、必要なジャーナル ファイルは少数で、復旧にか
かる時間は少なくなるということです。
次の式を使うと、ユーザーのシステムに対する一番効果的なチェックポイント間隔の決定
に役に立ちます。
(チェックポイントの長さ X ジャーナルのページ サイズ)/ (データベースのページ
サイズ X 分あたりの書き込み)= チェックポイント間隔(分)
システムで復旧に必要な時間を決定するには、次の式を使用します。
(チェックポイントの長さ X ジャーナルのページ サイズ)/ 1,048,576 = クラッシュ
後に復旧するための最大時間
メモ
この式では、クラッシュの復旧中にジャーナル ファイルは 1 MB / 秒 で処理されることを
仮定します。一般に、ジャーナル ファイルは 1 ~ 2 MB / 秒で処理されます。
指定した復旧時間に対するチェックポイントの長さを決定するには、次の式を使用します。
9-6 操 作 ガ イ ド
ジャーナル機能の有効化とジャーナル ファイルの作成
(復旧時間の秒数 X 1,048,576)/ ジャーナルのページ サイズ = チェックポイントの
長さ
ジャーナル情報の表示
データベースのジャーナル機能の情報を表示するには、次のコマンドを使用します。
gstat <a_database> -l
このスイッチは小文字の L で、数字の 1 ではありません。
IBConsole を使用したジャーナル機能の起動
IBConsole のダイアログ ボックスには、前の表 9.1 で説明したオプションと同じジャーナ
ル機能が用意されています。IBConsole を使用してジャーナル アーカイブは作成できませ
ん。
IBConsole からジャーナル機能を起動するには、次の手順を実行します。
1
ツリー ペインで、ジャーナル機能を起動するデータベースを右クリックして、コンテ
キスト メニューから [ バックアップ / 復元 ] を選択します。
2
[ バックアップ / 復元 ] メニューのオプションが表示されたら、[ ジャーナルの作成 ] を
選択します。[ ジャーナルの作成 ] ダイアログが 図 9.1 のように表示されます。
図 9.1
3
[ ジャーナルの作成 ] ダイアログ
[ ジャーナルの作成 ] ダイアログで、使用するオプションを指定し、[OK ] を選択して
ジャーナル機能を開始します。各オプションの詳細については、表 9.1 を参照してくだ
さい。
第 9 章 ジャーナル機能と障害復旧
9-7
ジャーナル アーカイブ機能の使用
ジャーナル ファイルの無効化
DROP JOURNAL 文を実行すると、ログの先行書き込みは中断され、すべてのジャーナル ファ
イルが削除されます。この操作によって、ジャーナル アーカイブ内のジャーナル ファイル
は削除されませんが、ジャーナル アーカイブの保守は継続されません。ジャーナルの無効
化には、データベースへの排他的アクセス権が必要です。
構文
ジャーナル機能を無効にするには、次の構文を使用します。
DROP JOURNAL
ジャーナル アーカイブ機能の使用
前に説明したとおり、ジャーナル アーカイブとは、フル データベース ダンプとそのダンプ
の作成以降に完了したすべてのジャーナル ファイルを含むディレクトリです。InterBase で
は次の 2 つの手順でアーカイブ コンテンツ(ダンプとジャーナル ファイル)を作成し、更
新することが必要です。
1
2
データベースのアーカイブを作成する
ジャーナル ファイルのアーカイブを作成する
各タスクを実行するために使用するコマンドについて次に説明します。
メモ
ジャーナル アーカイブの作成には、データベースの排他的アクセス権は必要ありません。
ジャーナル アーカイブ機能を有効化するコマンド
CREATE JOURNAL ARCHIVE コマンドは次の 2 つの機能を実行します。InterBase データベース
でジャーナル アーカイブ機能を有効化します。さらにデータベースの初期の、フル物理ダ
ンプを自動的に実行します。InterBase は CREATE 文に指定したジャーナル アーカイブの
ディレクトリにダンプを格納します。
次のコマンドはジャーナル機能を有効化するために使用します。
構文
CREATE JOURNAL ARCHIVE <journal archive directory>
ここで、<journal archive directory> は InterBase がジャーナル アーカイブを格納する場
所です。指定のディレクトリが存在しない、またはそのディレクトリにアクセスできない場
合は、InterBase は、エラーを返します。UNC パス(基本のファイル API が使用してファイ
ルをオープンできる場合のみ)、マップしたドライブ、ローカル ドライブとしてディレクト
リ パスを指定できます。CREATE JOURNAL ARCHIVE 文でジャーナル アーカイブのディレクトリ
を指定しない場合は、InterBase は CREATE JOURNAL 文で作成されたジャーナル ディレクトリ
を使用します。
ジャーナル アーカイブ機能を有効化していないとき、現在のジャーナル ファイルは、
チェックポイントによりハード ドライブにジャーナル ファイルのレコードが書き込まれ
た後に、再利用されます。
9-8 操 作 ガ イ ド
ジャーナル アーカイブ機能の使用
重要
データベースでジャーナル アーカイブ機能を開始するには、CREATE JOURNAL ARCHIVE コマ
ンドのみを使用します。一度アーカイブ機能を開始して、InterBase が最初のダンプを実行
すると、次に説明する gbak -archive_databas コマンドを使用して以降のダンプを実行し
ます。ジャーナル アーカイブ機能を無効化し、再開する場合は、CREATE JOURNAL ARCHIVE
を使用します。
ジャーナル ファイルのアーカイブを作成するコマンド
gbak -archive_journals コマンドは完了したジャーナル ファイルをジャーナル アーカイ
ブ ディレクトリにコピーするように InterBase に指示します。アーカイブに直近に完了した
ジャーナル ファイルが必ず含まれるようにするには、定期的にこのコマンドを発行する必
要があります。
完了したジャーナル ファイルをアーカイブ ディレクトリにコピーするには、次の構文を使
用します。
構文
gbak -archive_journals <dbname>
ここで、<dbname> にはアーカイブが作成されるデータベースを指定します。ジャーナル
アーカイブの格納サイズは、直近に完了したジャーナル ファイルのアーカイブが引続き作
成されることにしたがって、拡大します。アーカイブ サイズの管理方法の詳細については、
9-10 ページの「アーカイブ サイズの管理」を参照してください。
後続のアーカイブ ダンプを実行するコマンド
CREATE JOURNAL ARCHIVE コマンドで、初期のダンプを作成した後に、次の構文を使用して、
以降のダンプを実行します。
構文
gbak -archive_database <dbname>
このコマンドでは、アーカイブ ディレクトリへのフル物理ダンプを実行します。これは格
納する必要があるジャーナル ファイルの数を削減するのに役に立ちます。ダンプが古いほ
ど、アーカイブを最新状態に維持するのに InterBase で必要なジャーナル ファイル数が増加
します。
ジャーナル ファイルのアーカイブを作成する頻度は ?
次の事項を検討すると、ジャーナル ファイルのアーカイブの作成頻度を決定するのに役に
立ちます。
• InterBase サーバーがクラッシュした場合に、喪失が許容されるデータ量は ?
• ジャーナルの切り替え間隔は ? ジャーナル切り替え間隔よりも短い間隔でジャーナル ファ
イルのアーカイブを作成する必要はありません。
• 頻繁なジャーナル切り替えと頻繁なジャーナル アーカイブの作成を実行すると、データ喪
失を最小限に抑えられます。ただし、限度を超えてジャーナルの切り替えとジャーナル
アーカイブの作成を実行すると、パフォーマンスが低下します。ユーザーのシステムに対
する最良のバランスは ?
第 9 章 ジャーナル機能と障害復旧
9-9
ジャーナル アーカイブでデータベースを復旧する
ジャーナル アーカイブの無効化
DROP JOURNAL ARCHIVE 文は、データベースに対するジャーナル アーカイブ機能を無効にし
ます。これによって、すべてのジャーナル ファイルとデータベース ファイル ダンプが、す
べてのジャーナル アーカイブ ディレクトリから削除されます。ファイル システムのディ
レクトリ自体は削除されません。
ジャーナル アーカイブ機能を無効にしても、データベースのジャーナル機能(ジャーナル
ファイルの作成)は無効になりません。データベースは、データベースの変更をジャーナル
にコミットするために、先行書き込み(Write-Ahead)プロトコルを使用し続けます。ジャー
ナル機能も無効化する場合は、別の DROP JOURNAL 文を実行する必要があります(9-8 ペー
ジの「ジャーナル ファイルの無効化」を参照)。
ジャーナル アーカイブ機能を無効にするには、次の構文を使用します。
構文
DROP JOURNAL ARCHIVE
ジャーナル アーカイブでデータベースを復旧する
ジャーナル アーカイブからデータベースを復旧するには、次の構文を使用します。
構文
gbak -archive_recover [-until <timestamp>] <archive_dbname> <local_dbname>
-UNTIL スイッチを使用しない場合は、InterBase は、直近にアーカイブが作成されたジャー
ナル ファイルの最後にコミットされたトランザクションに、または最新の、アクティブな
ジャーナル ファイルにアクセスできる場合は、最新のアクティブなジャーナル ファイルで
最 後 に コ ミ ッ ト さ れ た ト ラ ン ザ ク シ ョ ン に、デ ー タ ベ ー ス を 復 旧 し ま す。-until
<timestamp> では、指定した日時までのトランザクションを復旧するように InterBase に指
示します。
復旧が成功した直後に新しいアーカイブの作成を開始することをお勧めします。新しい
アーカイブは、gbak -archive_database と gbak -archive_journals コマンドを発行して、
作成できます。
アーカイブ サイズの管理
ジャーナル ファイルのアーカイブ数が増加するにつれて、復旧時間も増加します。アーカ
イブが大きくなりすぎないように維持するには、次のオプションのいずれかを使用できま
す。
• gbak -archive_database コマンドを実行して、新しいダンプを作成します。これにより
アーカイブを最新状態に維持するのに InterBase で必要なジャーナル ファイル数が減りま
す。
• gfix コマンドを実行して、アーカイブで許可されるダンプの最大数を設定します。
gfix -archive_dumps <number> db_name
9-10 操 作 ガ イ ド
アーカイブ サイズの管理
アーカイブ内のデータベース ダンプ数が、指定した <number> を超えると、古いダンプ
とジャーナルが削除されます。
• gfix -archive_sweep コマンドを実行して、手動でアーカイブ サイズを制御します(次に説
明)
。
アーカイブ シーケンス番号とアーカイブのスイープについて
すべてのアーカイブ アイテムは、アーカイブ シーケンス番号で識別できます。アーカイブ
シーケンス番号は、そのアイテムがアーカイブ内に作成された順番に対応しています。
指定した番号より小さいシーケンス番号のすべてのファイルをアーカイブから削除するに
は、次の構文を使用します。
構文
gfix -archive_sweep <archive_sequence_no> [-force] db_name
アーカイブ アイテムのスイープ(ガベージ コレクション)ができない場合は、スイープは
停止し、エラー ステータスが返ります。それより小さいシーケンス番号のすべてのアイテ
ムが削除されるとは限らない場合もあります。たとえば、データベース ダンプが、復旧の
スタート時点とするために、シーケンス番号の小さいジャーナル ファイルに依存している
場合です。この場合は、InterBase が与えられたシーケンス番号を小さい番号に自動的に調
節するので、このような依存関係は失われません。
アーカイブ状態の追跡
アーカイブの状態を追跡するには、RDB$JOURNAL_ARCHIVES システム テーブルを使用します。
gbak コマンドと gfix コマンドは、このシステム テーブルを使用して、コマンドのター
ゲットになるアーカイブ アイテムを決定します。
表 9.2 では、RDB$JOURNAL_ARCHIVES に対するデータ型と列情報について説明します。
表 9.2
RDB$JOURNAL_ARCHIVES テーブル
フィールド名
データ型
長さ
説明
RDB$ARCHIVE_NAME
VARCHAR
1024
アーカイブ アイテムの名前
RDB$ARCHIVE_TYPE
CHAR
1
アーカイブ アイテムのタイプ。'D' はデータ
ベース ダンプを表します。'S' はデータベー
ス ダンプのセカンダリ データベース ファイ
ルを表します。'J' はジャーナル ファイルを
表します。
RDB$ARCHIVE_LENGTH
INT64
8
アーカイブ アイテムの長さを表すバイト数。
RDB$ARCHIVE_SEQUENCE
INTEGER
4
アーカイブ アイテムのシーケンス番号。
第 9 章 ジャーナル機能と障害復旧
9-11
ジャーナル機能のヒントとベスト プラクティス
表 9.2
RDB$JOURNAL_ARCHIVES テーブル
フィールド名
データ型
長さ
説明
RDB$ARCHIVE_TIMESTAMP
TIMESTAMP
8
アイテムがアーカイブに保存されたときの
タイムスタンプ。
RDB$DEPENDED_ON_SEQUENCE
INTEGER
4
このアイテムが依存するアーカイブ アイテ
ムのシーケンス番号。アーカイブ タイプが
'S' の場合は、プライマリ データベース ダ
ンプ ファイル 'D' のシーケンス番号になり
ます。アーカイブ タイプが 'D' の場合は、
アーカイブからの復元を行うときの最初の
ジャーナル ファイルのシーケンス番号にな
ります。
RDB$DEPENDED_ON_TIMESTAMP
TIMESTAMP
8
前述のとおり、このアイテムが依存するアー
カイブ アイテムのアーカイブ タイムスタン
プ。
ジャーナル機能のヒントとベスト プラクティス
次の例では、InterBase に付属している EMPLOYEE サンプル データベースを使用します。こ
れはジャーナル ファイルとアーカイブの作成および管理の " ベスト プラクティス " を示す
ことが目的です。この設定は、ジャーナル ファイルの切り替えを最小にし、ジャーナル バッ
ファの待ち状態の確率を低く抑えます。サンプル ジャーナル サブシステムのデフォルトの
プロパティ値は、ローエンドのマシンでも利用できるように設計された最小の設定です。こ
れは、InterBase のデフォルトのページ バッファ キャッシュが 2048 であることに似ていま
す。
最小設定の設計
開始するには、次のパラメータを設定します。
CREATE JOURNAL 'e:\database\test'
LENGTH 65000
CHECKPOINT LENGTH 10000
PAGE CACHE 2500;
8 KB のページ サイズであるデータベースでは、ジャーナルの PAGE SIZE は、デフォルトの
16 KB (2 x 8 KB)に設定されます。したがって、LENGTH パラメータ(65000)によって、1
GB(65000 x 16 KB)ごとに新規ジャーナル ファイルに切り替えられます。LENGTH が 500 で
ある場合は、システムでは 8 MB ごとに新規ジャーナル ファイルへの切り替えが発生しま
す。これは、かなりの高頻度です。この処理中にはパフォーマンスが低下します。LENGTH 値
を大きくすると、切り替えの頻度は少なくなります(65000/500 つまり 130 倍)。
CHECKPOINT LENGTH パラメータの 10000 は、データベースのチェックポイントが、160 MB
(10000 x 16 KB)ごとに発生することを意味します。代わりに CHECKPOINT LENGTH に 500 を設
定する場合は、システムで、チェックポイントが 8 MB (500 x 16 KB)ごとに発生します。
CHECKPOINT LENGTH は、システム クラッシュの後でジャーナル ファイルからデータベース
に適用する必要がある最大バイト数を表します。この例では、ジャーナル ファイルの復元
9-12 操 作 ガ イ ド
ジャーナル機能のヒントとベスト プラクティス
が 1 MB から 2 MB/ 秒の間の平均値で処理されると考えます。したがって、ここで提案して
いる 160 MB のチェックポイント長の場合、コンピュータによっては、復元に最大で約 2 分
はかかります。オンラインでのデータベース チェックポイント処理の頻度を最小にするた
めに、ユーザーの組織で、復旧時間の延長が許される場合は、CHECKPOINT LENGTH を増やす
ことができます。
PAGE CACHE パラメータを大きくすると、ジャーナル バッファの待ち状態が発生する確率を
低下できます。常に、ジャーナル キャッシュのライター スレッドは、ディスク上のジャー
ナル ファイルに対応する複数のジャーナル バッファと同期しています。その間、データ
ベース ページのジャーナル変更をジャーナル バッファに移す必要がある場合の書き込み
用に、ワーカー スレッドには十分な量の予備のジャーナル バッファを設定します。
たとえば、ジャーナル キャッシュ ライターがディスクに対して 500 個のジャーナル バッ
ファを利用しているとします。ジャーナル バッファを 2500 に設定すると、ワーカー スレッ
ドがジャーナル変更をダンプするために、2000 個の予備のバッファが残っていることにな
ります。PAGE CACHE のデフォルト値の 100 では、ジャーナル バッファの待ち状態が頻繁に発
生して、ワーカー スレッドは停止します。
最後に、ミラー化された SAN キャッシュを使用すると、InterBase のジャーナル サブシス
テムは、ジャーナル機能を使用していない InterBase データベースよりも、常にパフォーマ
ンスが低くなります。これは、2 倍のデータ量がジャーナル サブシステムによって書き込ま
れるからです。1 回はジャーナル ファイルへ、もう 1 回はデータベース ファイルへの書き
込みです。さらに、InterBase サーバー内のジャーナル キャッシュの管理に CPU コストも
余分にかかります。
直接接続されたストレージの場合でも、オンディスク書き込みキャッシュの有効化には注
意を払う必要があります。新しいコンピュータでは、オンディスク書き込みキャッシュが有
効になっている場合があります。これは、データベースやジャーナルへの同期書き込みが、
ディスクへの書き込みと実際には同期していないことを意味します。書き込みキャッシュ
(SAN または直接)が無効ではない、またはバッテリー バックアップがない場合は、デー
タベース コミットの耐久性は保証されません。
InterBase のジャーナル機能は、ディスクの入出力がライトスルー(すべてのデータベース
書き込みがオンディスク キャッシュではなく、ディスク自体に)の場合にのみ、パフォー
マンスが向上します。
適切に設定されると、前述の CREATE JOURNAL 文によって、このコストが最小になります。
ただし、最終目標は CREATE JOURNAL ARCHIVE 文を使用して、時間的に一貫性のあるデータ
ベース ダンプとジャーナル ファイルを保存することによって、ある時点までの障害復旧を
可能にすることです。
サンプル ジャーナル アーカイブの作成
実行するには、次のコマンドを発行します。
CREATE JOURNAL ARCHIVE <journal archive directory>
これによりジャーナル アーカイブ機能が有効化され、最初のデータベース ダンプが実行さ
れます。
つづいて、次の構文で、完了したジャーナル ファイルをアーカイブ ディレクトリにコピー
します。
gbak -archive_journals <dbname>
第 9 章 ジャーナル機能と障害復旧
9-13
ジャーナル機能のヒントとベスト プラクティス
以下のアーカイブ ディレクトリ リストでは、データベース ダンプ
EMPLOYEE.2006-08-21T15-48-17Z.1.DATABASE に、2006-08-21 15:48:17 以降に行われたデー
タベースの変更は含まれていません。ダンプ中や、ダンプの完了後に、メイン データベー
スにどのような更新が行われているかは関係ありません。これには、チェックポイント処
理が含まれます。
24 Aug 21 15:45 IB_JOURNAL
24 Aug 21 15:45 IB_JOURNAL_ARCHIVE
130399832 Aug 21 16:00 EMPLOYEE.2006-08-21T15-45-11Z.1.JOURNAL
979562496 Aug 21 16:00 EMPLOYEE.2006-08-21T15-48-17Z.1.DATABASE
130397262 Aug 21 16:00 EMPLOYEE.2006-08-21T15-51-51Z.2.JOURNAL
130399932 Aug 22 18:13 EMPLOYEE.2006-08-21T15-57-03Z.3.JOURNAL
130398336 Aug 22 18:13 EMPLOYEE.2006-08-22T18-06-19Z.4.JOURNAL
130397418 Aug 22 18:14 EMPLOYEE.2006-08-22T18-10-52Z.5.JOURNAL
35392721 Aug 23 00:27 EMPLOYEE.2006-08-22T18-14-47Z.6.JOURNAL
gstat -L EMPLOYEE.2006-08-21T15-48-17Z.1.DATABASE コマンドで、次の概要情報を生成し
ます。
Database log page information:
Creation date Aug 21, 2006 15:45:11
Log flags: 1
Recovery required
Next log page: 0
Variable log data:
Control Point 1:
File name: E:\EMPLOYEE_JOURNALS_AND_ARCHIVES\ EMPLOYEE.2006-08-21T15-45-11Z.1.JOURNAL
Partition offset: 0 Seqno: 1 Offset: 5694
これは、メイン データベースのログ ページが、正確に 2006-08-21 15:48:17 の時点で、ど
のような状態であったかを表しています。このデータベース ダンプを使用して復旧を試み
る場合は、次のように、ジャーナル ファイル EMPLOYEE.2006-08-21T15-45-11Z.1.JOURNAL の
オフセット 5694 から開始して、最後のジャーナル ファイル、または -UNTIL 句(オプショ
ン)で指定したタイムスタンプまで復旧を続けます。
GBAK -ARCHIVE_R E:\EMPLOYEE_JOURNALS_AND_ARCHIVES\
EMPLOYEE.2006-08-21T15-48-17Z.1.DATABASE E:\EMPLOYEE_RECOVER\EMPLOYEE.GDB -UNTIL "2006-08-21
18:08:15"
InterBase.LOG には、以下のように記録されます。
IBSMP (Server) Tue Aug 22 22:49:08 2006
Database: E:\EMPLOYEE_RECOVER\EMPLOYEE.GDB
Long term recovery until "2006-08-21 18:08:15" begin
IBSMP (Server) Tue Aug 22 22:49:09 2006
Database: E:\EMPLOYEE_RECOVER\EMPLOYEE.GDB
Applying journal file:
9-14 操 作 ガ イ ド
ジャーナル機能のヒントとベスト プラクティス
E:\EMPLOYEE_JOURNALS_AND_ARCHIVES\EMPLOYEE.2006-08-21T15-45-11Z.1.JOURNAL
IBSMP (Server) Tue Aug 22 22:51:38 2006
Database: E:\EMPLOYEE_RECOVER\EMPLOYEE.GDB
Applying journal file:
E:\EMPLOYEE_JOURNALS_AND_ARCHIVES\EMPLOYEE.2006-08-21T15-51-51Z.2.JOURNAL
IBSMP (Server) Tue Aug 22 22:53:24 2006
Database: E:\EMPLOYEE_RECOVER\EMPLOYEE.GDB
Applying journal file:
E:\EMPLOYEE_JOURNALS_AND_ARCHIVES\EMPLOYEE.2006-08-21T15-57-03Z.3.JOURNAL
IBSMP (Server) Tue Aug 22 22:55:44 2006
Database: E:\EMPLOYEE_RECOVER\EMPLOYEE.GDB
Applying journal file:
E:\EMPLOYEE_JOURNALS_AND_ARCHIVES\EMPLOYEE.2006-08-22T18-06-19Z.4.JOURNAL
IBSMP (Server) Tue Aug 22 22:55:57 2006
Database: E:\EMPLOYEE_RECOVER\EMPLOYEE.GDB
Long term recovery end
GBAK -A(db ダンプのアーカイブの作成)は何もロックしません。アーカイブ管理の制約は、
アーカイブ操作がシリアライズされることだけです。同じデータベースに対して、同時に複
数の GBAK/GFIX 操作を実行することはできません。ここで重要なのは、メイン データベー
スには、常にフル アクセスが可能なことです。
GBAK -ARCHIVE_J(OURNALS) <my_database> を使用すると、データベース全体をダンプしない
場合に、アーカイブされていないジャーナル ファイルがアーカイブにコピーされます(ま
たは、前述のようにアーカイブ済みの印が付加)。この場合も、アーカイブに作成された
ジャーナル ファイルごとに、1 行が RDB$JOURNAL_ARCHIVES に登録されます。
GBAK -ARCHIVE_S(WEEP) <sequence no.> <my_database> を使用すると、指定したシーケンス
番号より小さい RDB$ARCHIVE_SEQUENCE を持つ RDB$JOURNAL_ARCHIVES 内のすべてのファイ
ルが削除されます。
GBAK -ARCHIVE_DU(MPS) <number> <my_database> は、アーカイブ内に許可するデータベース
ダンプの最大数を設定します。GBAK -ARCHIVE_DATABASE の実行後に、新しいデータベース ダ
ンプの追加によって、ダンプの上限を超えた場合は、アーカイブ管理により、自動的に最
も古いアーカイブ データベース ダンプと以前のすべてのジャーナル ファイルが削除され
ます。
GBAK -ARCHIVE_R(ECOVER) <archive_directory/archive_database> <new_database> [-UNTIL
<timestamp>] は、アーカイブにあるジャーナル ファイルからデータベースを復元します。
<archive_directory> は、復元を実行するマシン上に、読み込みアクセス用にマウントされ
ていなければなりません。
アーカイブ ディレクトリは、InterBase サーバー、またはパッシブのファイル サーバーなど
に置くことできます。アーカイブ ファイルは、InterBase サーバーからではなく、クライア
ントから直接開きます。アーカイブ データベース ダンプは封印されているので、データ
ベース検証(通常、排他的アクセス権が必要)と論理的な GBAK を同時に実行できます。
第 9 章 ジャーナル機能と障害復旧
9-15
ジャーナル機能のヒントとベスト プラクティス
また、ネットワーク上の複数の同じプラットフォームのコンピュータからデータベースに
接続して、読み取り専用クエリーを実行することもできます。これは、ネットワーク経由
でページ I/O が高レベルになります。
アーカイブにない最新のジャーナル ファイルに、復元を実行中のコンピュータからアクセ
スできる場合は、復元処理は、-UNTIL 句(オプション)に関係なく、これらのジャーナル
ファイルにジャンプして、最新のコミット済みのトランザクションを復元します。復元され
たデータベースは、すべてのジャーナルまたはジャーナル アーカイブから分離されます。
したがって、必要であれば、それらを再定義する必要があります。
ただし、復元したデータベースを、長期の復元用として永続状態にしておくと、さらに役
立ちます。つまり、最初に GBAK -ARCHIVE_RECOVER を実行した後に常に、その後の GBAK
-ARCHIVE_RECOVER 文は、インクリメンタルなジャーナル変更を適用します。これは、以下に
示すように、オンライン ダンプ機能に対応する形式です。
GBAK
GBAK
GBAK
...
GFIX
-DUMP <main_database> <dump_database> -- Full online dump
-DUMP <main_database> <dump_database> -- Incremental dump
-DUMP <main_database> <dump_database> -- Incremental dump
GBAK
GBAK
GBAK
...
GFIX
-ARCHIVE_R <main_database> <recv_database> -- Full recover dump
-ARCHIVE_R <main_database> <recv_database> -- Incremental recover
-ARCHIVE_R <main_database> <recv_database> -- Incremental recover
-MODE READ_WRITE <dump_database> -- Divorce from main DB
-MODE READ_WRITE <recv_database> -- Divorce from main DB
この機能変更はさらに効率的です。フル アーカイブ復元には、ジャーナルの変更量に応じ
て数時間かかる場合があります。
データベースから分離している場合は、GFIX -MODE READ_WRITE と入力する必要がないので
1 秒節約できます。ただし、最新のコピーが必要な場合は、また別のフル復元を作成する必
要があります(最大数時間)。分離のために GFIX -MODE READ_WRITE を実行する必要があり
ますが、最後の GBAK -ARCHIVE_RECOVER 以降のインクリメンタルなジャーナル変更を取得
できるので、数時間の効率化が可能です。これは、メイン データベースが失われた場合に、
復元データベースをより早く配置できることを意味します。これをクエリーやレポート用
の、読み取り専用の最新データベースとして動作させることもできます。
最後に、ジャーナル アーカイブは、DROP DATABASE や DROP JOURNAL の実行時に暗黙に削
除 さ れ る こ と は あ り ま せ ん。DROP DATABASE を実行する前に、明示的に DROP JOURNAL
ARCHIVE 文を実行する必要があります。ジャーナル アーカイブは、削除されたデータベース
内容の最新の情報源になるので、意図的には削除しにくいものです。
9-16 操 作 ガ イ ド
第
章
データベース統計情報および接続
の監視
第 10 章
InterBase では、いくつかの方法で、データベースの動作に関する統計情報を表示したり、
その動作を制御することができます。この章では、InterBase の以下の機能について説明し
ます。
• 一時システムテーブルを使用した監視
• IBConsole での状態の表示
• gstat コマンドラインツール
• ロック状態の表示
• api_database_info() による統計情報の取得
一時システムテーブルを使用した監視
InterBase Server は、常に動作状況に関するさまざまな統計情報を保持していますが、それ
らの情報の表示は簡単ではなく、必ずしも可能ではありませんでした。InterBase では、そ
れらの情報を取得し、グローバルな一時システムテーブルセットとして使用できるように
しました。これらのテーブルには、データベースの実行時の動作が記述されます。また、こ
れらのテーブルから、データベースをある程度制御することもできます。
これまでも、現在データベースに接続しているユーザーのリストを表示できましたが、そ
の他の情報を入手できるようになりました。たとえば、各ユーザーの接続時間、実行中のア
プリケーション、各接続で使用されているデータ I/O の総量などです。
『言語リファレン
ス』に一覧されている一時テーブルのメタデータを見るだけで、これらのテーブルの利用
範囲がたいへん広いことがわかります。
また、これらのテーブルを更新して、データベースの状態をある程度制御できます。詳細
は、10-4 ページの「一時システムテーブルの更新」を参照してください。
第 10 章 データベース統計情報および接続の監視
10-1
一時システムテーブルを使用した監視
これらの一時システムテーブルは、各データベース接続専用のテーブルです。また、これ
らのテーブルを表示できるのは、SYSDBA ユーザーとデータベースの所有者だけです。その
ため、これらのテーブルに一意な名前を付ける必要はありません。また、接続間で競合が
発生する危険もありません。各テーブルには、クライアントがテーブルに問い合わせを行っ
た時点でのみ情報が格納されます。
次の一時システムテーブルがあります。これらの構造については、
『言語リファレンス』で
説明しています。
表 10.1 InterBase の一時システムテーブル
テーブルの名前
説明
TMP$ATTACHMENTS
データベースへの接続ごとに 1 行
TMP$DATABASE
接続したデータベースごとに 1 行
TMP$POOL_BLOCKS
各プール内のメモリブロックごとに 1 行
TMP$POOLS
現在のメモリプールごとに 1 行
TMP$PROCEDURES
現在の接続が開始されてから、実行されたプロシージャごとに 1 行
TMP$RELATIONS
現在の接続が開始されてから、参照されたリレーションごとに 1 行
TMP$STATEMENTS
現在の接続で、これまでに実行された文ごとに 1 行
TMP$TRANSACTIONS
アクティブ状態または limbo 状態のトランザクションごとに 1 行
一時システムテーブルへの問い合わせ
クライアントは、他のテーブルをクエリーする場合とまったく同様に、SELECT 文を使って
これらのテーブルをクエリーできます。これらのテーブルに問い合わせることで、サーバー
のパフォーマンスとユーザー操作に関する重要なデータを得ることができます。
一時テーブルを作成したり、再定義することはできません。
ヒント
頻繁に監視を行う場合は、トランザクションを READ_COMMITTED、READ_ONLY として開
始すると、制御に最適です。次に、COMMIT_RETAINING でコミットを行います。こうする
と、システムに及ぼす影響が最も少なくなります。
一時テーブルの更新
一時テーブルの行を更新するには、トランザクションをコミットし、一時テーブルに対し
て再度 SELECT を実行します。InterBase は、コミット時に、一時テーブルに保存されてい
る行を自動的に削除します。
一時テーブルのリスト
これら一時テーブルのリストを表示するには、isql の次のコマンドを発行します。
SHOW SYSTEM
10-2 操 作 ガ イ ド
一時システムテーブルを使用した監視
一時テーブルは、システムテーブルの最後に示されます。特定のテーブルのメタデータを
表示するには、次のコマンドを発行します。
SHOW TABLE tablename
メモ
SHOW SYSTEM コマンドは、コマンドライン isql でのみ使用できます。InterBase Windows
isql では使用できません。
セキュリティ
PUBLIC ユーザーは、システムテーブルには SELECT によってデフォルトでアクセスできま
すが、一時テーブルにはデフォルトでアクセスできません。この実行時の情報を表示および
操作できるのは、SYSDBA とデータベースの所有者だけです。これらのユーザーは、GRANT
文を使用して、他のユーザーにアクセスを許可することができます。この文で与えること
ができる特権は、SELECT だけです。
例
これらの一時テーブルから得られるさまざまな情報を紹介するために、次に問い合わせの
例を示します。
最も頻繁に実行された SQL 文上位 10
SELECT a.tmp$user, s.tmp$timestamp, s.tmp$sql, s.tmp$quantum
FROM TMP$STATEMENTS s, TMP$ATTACHMENTS a
WHERE a.TMP$ATTACHMENT_ID = s.TMP$ATTACHMENT_ID
ORDER BY s.TMP$QUANTUM DESC ROWS 10;
最も古いトランザクションスナップショット上位 10
SELECT a.TMP$USER, t.TMP$TIMESTAMP, t.TMP$TRANSACTION_ID, t.TMP$SNAPSHOT
FROM TMP$ATTACHMENTS a, TMP$TRANSACTIONS t
WHERE a.TMP$ATTACHMENT_ID = t.TMP$ATTACHMENT_ID
ORDER BY t.TMP$SNAPSHOT ROWS 10;
クリーンアップするガベージが最も多いテーブル上位 10
SELECT TMP$RELATION_NAME, TMP$GARBAGE_COLLECT_PAGES
FROM TMP$RELATIONS
ORDER BY TMP$GARBAGE_COLLECT_PAGES DESC ROWS 10;
最も頻繁に実行されたストアドプロシージャ上位 10
SELECT TMP$PROCEDURE_NAME, TMP$INVOCATIONS
FROM TMP$PROCEDURES
ORDER BY TMP$INVOCATIONS DESC ROWS 10;
スイープがアクティブなデータベースとその進捗状況
SELECT TMP$SWEEP_RELATION, TMP$SWEEP_RECORDS
FROM TMP$DATABASE
WHERE TMP$SWEEP_ACTIVE = 'Y';
プールの種類ごとのプールメモリ割り当て
SELECT TMP$TYPE, SUM(TMP$POOL_MEMORY) TMP$TOTAL_MEMORY,
SUM(TMP$FREE_MEMORY) TMP$TOTAL_FREE
FROM TMP$POOLS
第 10 章 データベース統計情報および接続の監視
10-3
一時システムテーブルを使用した監視
GROUP BY TMP$TYPE
ORDER BY 2 DESC;
一時システムテーブルの更新
場合によっては、データベースの状態に関する情報を取得した後で、適切な処置を行う必
要があります。たとえば、想定外に数時間も開いたままのトランザクションを検出した場合
や、他の処理に必要なリソースを消費しているトランザクションがある場合などです。特
定の一時テーブルの TMP$STATE 列を更新することで、次の更新処理を実行できます。
• アクティブ状態または limbo 状態のトランザクションをロールバックする
• limbo 状態のトランザクションをコミットする
• 接続による実行操作を取り消す
• 現在の接続を解除する
• 実行中の文を停止する
アクティブなトランザクションをロールバックするには
UPDATE TMP$TRANSACTIONS SET TMP$STATE = 'ROLLBACK' WHERE TMP$TRANSACTION_ID=123;
limbo 状態のトランザクションをロールバックするには
UPDATE TMP$TRANSACTIONS SET TMP$STATE = 'ROLLBACK' WHERE TMP$TRANSACTION_ID=123;
limbo 状態のトランザクションをコミットするには
UPDATE TMP$TRANSACTIONS SET TMP$STATE = 'COMMIT' WHERE TMP$TRANSACTION_ID=123;
接続によって現在実行されている操作を取り消すには
UPDATE TMP$ATTACHMENTS SET TMP$STATE = 'CANCEL' WHERE TMP$ATTACHMENT_ID=123;
現在の接続を解除するには
UPDATE TMP$ATTACHMENTS SET TMP$STATE = 'SHUTDOWN' WHERE TMP$ATTACHMENT_ID=123;
接続を解除すると、ユーザーがデータベースから引き離され、サーバーとのローカル接続
またはネットワーク接続が終了します。
実行中の文を停止するには
UPDATE TMP$STATEMENTS SET TMP$STATE = 'CANCEL' WHERE TMP$STATEMENT_ID=123;
グローバルな変更
前述の更新は、1 つの接続またはトランザクションに対して実行されます。さらにグローバ
ルな変更を行うこともできます。次に例を示します。
アクティブなトランザクションをすべてロールバックするには
UPDATE TMP$TRANSACTIONS SET TMP$STATE = 'ROLLBACK' WHERE TMP$STATE ='ACTIVE';
10-4 操 作 ガ イ ド
IBConsole での状態の表示
limbo 状態のトランザクションをすべてロールバックするには
UPDATE TMP$TRANSACTIONS SET TMP$STATE = 'ROLLBACK' WHERE TMP$STATE ='LIMBO';
limbo 状態のトランザクションをすべてコミットするには
UPDATE TMP$TRANSACTIONS SET TMP$STATE = 'COMMIT' WHERE TMP$STATE ='LIMBO';
IBConsole での状態の表示
データベースの状態を表示するには、次に示すいずれかの方法で[データベース統計情報]
ダイアログを表示します。
• ツリーペインで接続データベースを選択して、
[データベース|保守|データベース統計情
報]を選択します。
• ツリーペインで接続データベースを選択して、ワークペインで[データベース統計情報]
をダブルクリックします。
• ツリーペインで接続データベースを右クリックして、コンテキストメニューから[保守|
データベース統計情報]を選択します。
[データベース統計情報]ダイアログが表示され、表示する情報を選択できます。
図 10.1 [データベース統計情報]オプション
データベースの状態を表示するには
1 [オプション]リストから作成する状態データを選択します。
値を入力するか、オプションの値をクリックしてドロップダウンリストから新しい値を
選択するか、またはオプションの値をダブルクリックして値をリスト内の次の値にする
ことによって、オプションを指定できます。
2 [OK]をクリックして、データベースの状態を作成します。
メモ
中には、大きなデータベースの状態を表示するのに長い時間がかかることがあります。こ
れは、レポートする情報として何を選択したかにより、これらの状態の作成はデータベー
ス内のすべてのテーブルとインデックスを解析することになる場合があるからです。
第 10 章 データベース統計情報および接続の監視
10-5
IBConsole での状態の表示
図 10.2 [Database Statistics]ダイアログ
[Database Statistics]レポートダイアログは、標準テキスト表示ウィンドウで、データベー
スの概要とデータベースの解析情報の状態を表示します。標準テキスト表示ウィンドウの
使い方の詳細は、3-7 ページの「標準テキスト表示ウィンドウ」を参照してください。
データベース状態オプション
状態オプションを要求すると、InterBase はそのデータベースの状態に対する情報を作成し
て表示します。使用可能な状態オプション値は、[All Options]、[Data Pages]、[Database
、[Header Pages]、[Index Pages]、[System Relations]です。
Log]
メモ
レポート対象として選択した統計情報に関係なく、選択した状態に加えて、ヘッダーペー
ジ情報が表示されます。
[Header Pages]がオプション値として選択されていた場合は、ヘッ
ダーページ情報だけが表示されます。
All Options
[Data Pages]、[Database Log]、[Header Pages]、[Index Pages]、[System Relations]を含
めた、すべてのオプションの統計情報を表示します。
この機能は、gstat の -all オプションに相当します。
Data Pages
データベースの概要のデータページ情報を表示します。ここでは、データベース情報の例を
示し、各項目について説明します。
COUNTRY (31)
10-6 操 作 ガ イ ド
IBConsole での状態の表示
Primary pointer page:246, Index root page: 247
Data pages:1, data page slots: 1, average fill: 59%
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 1
60 - 79% = 0
80 - 99% = 0
最初の行にはデータベーステーブル名が表示されます。残りの行にはテーブル内の項目情
報が表示されます。次の項目があります。
表 10.2 データページ情報
項目
説明
Primary pointer page
テーブルの最初のポインタページ数。
Index root page
インデックスの最初のポインタページのページ番号。
Data pages
データの総ページ数。
Data page slots
データベースページまでのポインタ数。ページがデータベース内にあるか
どうかを示します。
Average fill
データページ内でデータが満たす割合の平均パーセンテージ。
Fill distribution
指定のパーセンテージで満たされたデータページ数を示す度数分布図。
データベースログ
データベースの概要にデータベースログを表示します。次の例は、データベースログ情報の
例です。
この機能は、gstat の -log オプションに相当します。
Database log page information:
Creation date Dec 20, 1998 11:38:19
Log flags:2
No write ahead log
Next log page:0
Variable log data:
Control Point 1:
File name:
Partition offset: 0 Seqno: 0 Offset: 0
Control Point 2:
File name:
Partition offset: 0 Seqno: 0 Offset: 0
Current File:
File name:
Partition offset: 0 Seqno: 0 Offset: 0
第 10 章 データベース統計情報および接続の監視
10-7
IBConsole での状態の表示
ヘッダーページ
データベースの概要にヘッダーページを表示します。ここでは、データベース概要のヘッ
ダーページ情報の例を示し、各項目について説明します。
この機能は、gstat の -header オプションに相当します。
Database "C:¥Program Files¥Borland¥InterBase¥examples¥Database¥employee.ib"
Database header page information:
Flags
0
Checksum
12345
Generation
41
Page size
4096
ODS version
12.0
Oldest transaction
29
Oldest active
30
Oldest snapshot
30
Next transaction
34
Bumped transaction
1
Sequence number
0
Next attachment ID
0
Implementation ID
16
Shadow count
0
Page buffers
0
Next header page
0
Database dialect
1
Creation date
Aug 26, 2006 17:05:03
Variable header data:
Sweep interval:
*END*
20000
Service ended at 9/3/2006 4:59:05 PM
最初の行には、データベースの一次ファイルの名前と位置が表示されます。残りの行には、
データベースのヘッダーページ上の情報が表示されます。次の項目があります。
表 10.3 ヘッダーページ情報
項目
説明
Checksum
本来のチェックサムは ODS 8 以前の InterBase でのみサポートされます。ODS
9 以降では、チェックサム値は常に “12345” です。
Generation
ヘッダーページが書き込まれるたびに増加するカウンタ。
Page size
現在のデータベースのページサイズ(バイト)
。
ODS version
データベースのオンディスク構造体のバージョン。
10-8 操 作 ガ イ ド
IBConsole での状態の表示
表 10.3 ヘッダーページ情報 ( 続き )
項目
説明
Oldest transaction
最も古い未確定の(コミットされずに、有効、limbo またはロールバック状態
の)トランザクションのトランザクション ID 番号。
Oldest active
最も古い有効トランザクションのトランザクション ID 番号。
Next transaction
次のトランザクションに割り当てられたトランザクション ID 番号。
最古のトランザクションと次のトランザクションの違いは、データベースのス
イープ処理が行われたときに決まります。たとえば、違いがこの違い(デフォ
ルトで 20,000)より大きい場合、InterBase はデータベースのスイープ処理を初
期化します。7-22 ページの「スイープの概要」を参照してください。
Sequence number
ヘッダーページのシーケンス番号(たとえば、最初のページには 0、次のペー
。
ジには 1 が使用される)
Next connection ID
次のデータベース接続の ID 番号。
Implementation ID
データベースが作成されたシステムのアーキテクチャ。この ID 定義は、マク
ロクラス CLASS の #define ディレクティブで定義され、プラットフォームに依
存します。
• 1:HP Apollo Domain OS
• 2:Sun Solaris SPARC、HP9000 s300、Xenix、Motorola IMP UNIX、
UnixWare、NCR UNIX、NeXT、Data General DG-UX Intel
• 3:Sun Solaris x86
• 4:VMS
• 5:VAX Ultrix
• 6:MIPS Ultrix
• 7 HP9000 s700/s800
• 8:Novell NetWare
• 9:Apple Macintosh 680x0
• 10:IBM AIX POWER シリーズ、IBM AIX PowerPC
• 11:Data General DG-UX 88K
• 12:HP MPE/xl
• 13:SGI IRIX
• 14:Cray
• 15:SF/1
• 16:Microsoft Windows 32 ビット
• 17:IBM OS/2
• 18:Microsoft Windows 16 ビット
• 19:Linux Intel
• 20:Linux SPARC
Shadow count
データベースに定義されたシャドウファイルの数。
Number of cache buffers
データベースキャッシュ内のページバッファ数。
Next header page
次のヘッダーページの ID。
Database dialect
データベースの SQL ダイアレクト。
第 10 章 データベース統計情報および接続の監視
10-9
IBConsole での状態の表示
表 10.3 ヘッダーページ情報 ( 続き )
項目
説明
Creation date
データベースが作成された日付。
Attributes
• force write:データベースへの強制書き込みが許可されていることを示し
ます。
• no_reserve:各ページの領域が古い世代のデータのために確保されていな
いことを示します。これにより、各ページ上にデータをより綿密に格納で
きるため、データベースの容量が小さくなります。
• shutdown:データベースが終了したことを示します。
• スイープ間隔
Variable header data
• 二次ファイル情報
インデックスページ
データベースの概要にインデックスページを表示します。ここでは、インデックスページ情
報の例を示し、各項目について説明します。
Index CUSTNAMEX (2)
Depth: 2, leaf buckets: 2, nodes: 27
Average data length: 45.00, total dup: 0, max dup: 0
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 1
60 - 79% = 0
80 - 99% = 1
表 10.4 インデックスページ情報
項目
説明
Index
インデックスの名前。
Depth
インデックスのページツリーのレベル数。インデックスのページツリー
の深さが 3 より大きくなると、ソート処理の効率が低下します。インデッ
クスのページツリーの深さを減らすには、インデックスのページサイズを
拡大します。ページサイズを拡大しても深さが減らない場合は、元のペー
ジサイズに戻してください。
Leaf buckets
インデックスページツリーのリーフ(最下位レベル)ページ数。
Nodes
ツリー内のインデックスの総ページ数。
Average data length
各キーの平均バイト数。
Total dup
重複インデックスを含む行の総数。
Max dup
重複インデックスの最大数。
Fill
distribution
指定のパーセンテージで満たされたインデックスのページ数を示す度数
分布図。
10-10 操 作 ガ イ ド
IBConsole によるクライアント接続の監視
システムリレーション
データベース内のシステムテーブルの情報を表示します。
RDB$CHECK_CONSTRAINTS (24)
Primary pointer page:54, Index root page: 55
Data pages:5, data page slots: 5, average fill: 59%
Fill distribution:
0 - 19% = 0
20 - 39% = 1
40 - 59% = 0
60 - 79% = 4
80 - 99% = 0
Index RDB$INDEX_14 (0)
Depth: 1, leaf buckets: 1, nodes: 68
Average data length: 0.00, total dup: 14, max dup: 1
Fill distribution:
0 - 19% = 0
20 - 39% = 0
40 - 59% = 1
60 - 79% = 0
80 - 99% = 0
ここで表示する状態は、データページやインデックスページの情報に似ています。これらの
情報の詳細は、「Data Pages」および「インデックスページ」を参照してください。
IBConsole によるクライアント接続の監視
IBConsole で、特定のデータベースに現在接続しているユーザーのリストを表示するには、
[データベース接続]ダイアログを使用します。次に示すいずれかの方法で、このダイアロ
グを表示できます。
• ツリーペインで、データベースまたはデータベース階層下の任意のブランチを選択し、
[データベース|接続ユーザー情報]を選択します。
• ツリーペインでデータベースを選択し、ワークペインの[アクション]列にある[接続ユー
ザー情報]をダブルクリックします。
• ツリーペインでデータベースを右クリックして、コンテキストメニューから[接続ユーザー
情報]を選択します。
第 10 章 データベース統計情報および接続の監視
10-11
gstat コマンドラインツール
図 10.3 [データベース接続]ダイアログ
メモ
InterBase の一時システムテーブルは、データベースのアクティビティを詳細に監視するた
めのリソースを提供します。詳細は、この章の 10-1 ページの「一時システムテーブルを使
用した監視」を参照してください。
gstat コマンドラインツール
構文
gstat [options] database
説明
gstat プログラムは、
データベースの状態を検索し、レポートするためのコマンドラインツー
ルです。この機能はこの章の前半にある IBConsole についての説明と同じです。
gstat を実行するには、SYSDA またはデータベースの所有者でなければなりません。UNIX
プラットフォーム上では、さらに制限があります。gstat を実行するには、データベースファ
イルへのシステムレベルでの読み取りアクセス権が必要です。これを取得するには、
InterBase サーバーを実行しているアカウントと同じアカウント(InterBase または root)で
ログインするか、グループに対して読み取り許可を含めたデータベースファイルについて
のシステムレベルのパーミッションを設定します。gstat は InterBase サーバーではなく、シ
ステムレベルのデータベースファイルにアクセスするため、UNIX プラットフォームにこの
ような制限があります。
メモ
オプション
gstat は、
ローカルデータベースでのみ実行できます。gstat はサーバーホストで実行します。
表 10.5 に、gstat に指定できるオプションを示します。
10-12 操 作 ガ イ ド
gstat コマンドラインツール
表 10.5 gstat のオプション
例
オプション
説明
-all
-index および -data の指定と同じです。-index、-data、または -all のいずれも
。
指定しないと、-all が指定されます(デフォルト)
-data
データベースのデータテーブルの状態を検索および表示します。
-header
ヘッダーページの情報をレポートしてから状態レポートを停止します。
-index
データベースのインデックスの状態を検索および表示します。
-log
ログページの情報をレポートしてから状態レポートを停止します。
-pa[ssword] text
データベースにアクセスする前にパスワード text をチェックします。
-r[ecord]
-t と一緒に使用します。レコードとバージョンの平均の長さを示す
-system
ユーザーテーブルとインデックスに加えて、システムテーブルとインデックス
の状態を検索します。
-t[able]
データベースのヘッダー、ファイル、およびログの統計情報とともに、要求し
たテーブルのインデックスと情報が出力されます。テーブル名は、大文字と小
文字が区別されます。
-user name
データベースにアクセスする前にユーザー名 name をチェックします。
-z
gstat の製品バージョンを出力します。
行をテーブルの情報に追加します。
次のコマンドは、employee.ib のテーブル統計情報を要求します。JOB テーブルのレコード
とバージョンの長さも含まれます。
gstat -user SYSDBA -pa masterkey employee.ib -t JOB -r
このコマンドを実行すると、次のように出力されます。
Database "employee.ib"
Database header page information:
Flags
0
Checksum
12345
Generation
26
Page size
4096
ODS version
12.0
Oldest transaction
19
Oldest active
20
Oldest snapshot
20
Next transaction
21
Bumped transaction
1
Sequence number
0
Next attachment ID
0
Implementation ID
16
Shadow count
0
第 10 章 データベース統計情報および接続の監視
10-13
gstat コマンドラインツール
Page buffers
Next header page
Database dialect
Creation date
Variable header data:
Sweep interval:
*END*
0
0
1
Sep 25, 2006 10:06:33
20000
Database file sequence:
File employee.ib is the only file
Database log page information:
Creation date
Log flags:
2
No write ahead log
Next log page: 0
Variable log data:
Control Point 1:
File name:
Partition offset: 0
Control Point 2:
File name:
Partition offset: 0
Current File:
File name:
Partition offset: 0
*END*
Seqno: 0
Offset: 0
Seqno: 0
Offset: 0
Seqno: 0
Offset: 0
Analyzing database pages ...
JOB (129)
Primary pointer page:178, Index root page: 179
Average record length: 64.87, total records: 31
Average version length: 0.00, total versions: 0, max versions: 0
Data pages:3, data page slots: 3, average fill: 72%
Fill distribution:
0 - 19% = 0
20 - 39% = 1
40 - 59% = 0
60 - 79% = 0
80 - 99% = 2
10-14 操 作 ガ イ ド
gstat コマンドラインツール
Index MAXSALX (2)
Depth: 1, leaf buckets: 1, nodes: 31
Average data length: 4.00, total dup: 5, max dup: 1
Fill distribution:
0 - 19% = 1
20 - 39% = 0
40 - 59% = 0
60 - 79% = 0
80 - 99% = 0
Index MINSALX (1)
Depth: 1, leaf buckets: 1, nodes: 31
Average data length: 4.00, total dup: 7, max dup: 2
Fill distribution:
0 - 19% = 1
20 - 39% = 0
40 - 59% = 0
60 - 79% = 0
80 - 99% = 0
Index RDB$FOREIGN3 (3)
Depth: 1, leaf buckets: 1, nodes: 31
Average data length: 1.00, total dup: 24, max dup: 20
Fill distribution:
0 - 19% = 1
20 - 39% = 0
40 - 59% = 0
60 - 79% = 0
80 - 99% = 0
Index RDB$PRIMARY2 (0)
Depth: 1, leaf buckets: 1, nodes: 31
Average data length: 10.00, total dup: 0, max dup: 0
Fill distribution:
0 - 19% = 1
20 - 39% = 0
40 - 59% = 0
60 - 79% = 0
80 - 99% = 0
[c:¥program files¥borland¥InterBase¥examples¥database]
第 10 章 データベース統計情報および接続の監視
10-15
ロック状態の表示
ロック状態の表示
ロック処理は、InterBase がデータベースに複数のユーザーがアクセスしたときにデータ
ベースの一貫性を管理するためのメカニズムの 1 つです。ロックマネージャは、ロック処理
を同調させる ibserver 処理のスレッドです。
ロックマネージャは、ロックテーブルを使用して、データベースに接続された ibserver 処
理のクライアントスレッド間で共有するリソースを調整します。ロックテーブルには、シス
テム内のすべてのロックおよびその状態の情報が含まれています。グローバルヘッダー情
報には、ロックテーブルのサイズ、フリーロック数、無効ロック数など、有益な総計情報
が含まれています。ロックが許可されているか、待機しているかなどを示す処理情報もあり
ます。この情報は、デッドロックを解消するときに役立ちます。
構文
iblockpr [a,o,w](Windows)または gds_lock_print [a,o,w](UNIX)
iblockpr [-i{a,o,w}] [t n]
説明
iblockpr は、ロック要求をチェックすることによってパフォーマンスを監視します。
上記の最初の構文では、瞬時にロック状態のレポートを検索します。次の構文では、一定の
間隔でサンプルを収集して動作を監視します。
オプションにより、ロックテーブル内の現在のアクティビティに関する対話情報が表示さ
れます。このユーティリティは、各サンプリングに対して秒単位でイベントを出力し、各
列の最後に平均値を出力します。
表 10.6 iblockpr/gds_lock_print のオプション
オプション
説明
[none]
-o と同じ。
-a
ロックテーブルの内容の静的なビューを出力します。
-o
静的なロックテーブルの要約とブロックを所有するすべての対象物の一覧を出
力します。
-w
-o フラグによって提供されるすべての情報と待機状況を、各オーナーごとに出
力します。どのオーナーの要求がロックテーブル内の他の要求を妨げているの
を見つけるときに役立ちます。
以下のオプションでは、要求された項目の対話的状態(イベント / 秒)を指定します。t 秒ごとに n
回サンプリングが行われ、各サンプルごとに 1 行が出力されます。サンプルの平均値が各列の最後に
出力されます。n と t に値を指定しないときは、デフォルトで n=1 が設定されます。
-i
すべての状態を出力します。-ia、-io、-iw を指定すると、出力が読みやすくな
ります。
-ia
ロックテーブルへのアクセスを試行する秒単位のスレッド数を出力します。
-io
ロックの要求、変換、ダウングレード、リリースなど、秒単位の操作状態を出
力します。
10-16 操 作 ガ イ ド
api_database_info() による統計情報の取得
表 10.6 iblockpr/gds_lock_print のオプション ( 続き )
例
オプション
説明
-iw
秒単位のロック取得数、待機要求数、待機率、および再試行数を出力します。
t
サンプリングの間隔を秒で指定します。
n
以降のサンプル数を指定します
次の文は、3 秒ごとにサンプリングを 10 回まで行い、取得状態(ロックテーブルへのアク
セス:acquire/s、acqwait/s、%acqwait、および rtrysuc/s)を出力します。
gds_lock_print -ia 3 10
api_database_info() による統計情報の取得
InterBase には、動作タイミングとデータベース操作の状態の集合プログラミング機構があ
ります。
API 関数 isc_database_info( ) を使用する、要求バッファ項目の 1 つ以上を指定して状態を検
索できます。要求バッファ項目を次に示します。
表 10.7 データベースの I/O 統計情報項目
要求バッファ項目
結果バッファの内容
isc_info_fetches
メモリバッファキャッシュからの読み込み数。InterBase サーバーの
起動時から計算されます。
isc_info_marks
メモリバッファキャッシュへの書き出し数。InterBase サーバーの起
動時から計算されます。
isc_info_reads
読み込みページ数。InterBase サーバーの起動時から計算されます。
isc_info_writes
書き出しページ数。InterBase サーバーの起動時から計算されます。
isc_info_backout_count
テーブルごとのレコードバージョンの削除数。現在のデータベース
接続の開始後から計算されます。
isc_info_delete_count
行の削除数。
• テーブルごとにレポートされます。
• 現在のデータベース接続の開始後から計算されます。
isc_info_expunge_count
削除がコミットされているレコードおよびそのすべての親の削除回
数
• テーブルごとにレポートされます。
• 現在のデータベース接続の開始後から計算されます。
isc_info_insert_count
データベースへの挿入数。
• テーブルごとにレポートされます。
• 現在のデータベース接続の開始後から計算されます。
第 10 章 データベース統計情報および接続の監視
10-17
api_database_info() による統計情報の取得
表 10.7 データベースの I/O 統計情報項目 ( 続き )
要求バッファ項目
結果バッファの内容
isc_info_purge_count
発達したレコード(古いバージョンを必要としないコミットされた
レコード)の古いバージョンの削除数。
• テーブルごとにレポートされます。
• 現在のデータベース接続の開始後から計算されます。
isc_info_read_idx_count
インデックスを介して実行された読み込み数。
• テーブルごとにレポートされます。
• 現在のデータベース接続の開始後から計算されます。
isc_info_read_seq_count
連続したデータベースの読み込み数。つまり、連続したテーブルス
キャン数(行読み込み)
。
• テーブルごとにレポートされます。
• 現在のデータベース接続の開始後から計算されます。
isc_info_read_update_count
行の更新数。
• テーブルごとにレポートされます。
• 現在のデータベース接続の開始後から計算されます。
要求バッファおよび API 呼び出しの詳細は、『API ガイド』を参照してください。
10-18 操 作 ガ イ ド
第
章
対話型クエリー
第 11 章
この章では、InterBase の IBConsole 対話型 SQL(isql)とコマンドライン isql ユーティリ
ティについて解説します。これらのツールでは、InterBase の動的 SQL インタプリタへのイ
ンターフェイスを提供します。データ定義を行ったり、アプリケーションに実装する前にプ
ロトタイプのクエリーを実行したり、データベースのデータについて特別な検査を実行す
るような場合に、クエリーツールを使用できます。
この章では次の項目について説明します。
•
•
•
•
•
•
•
•
IBConsole isql ウィンドウ
SQL 文の実行
トランザクションのコミットとロールバック
結果のファイルへの保存
isql 設定の変更
メタデータの抽出
コマンドライン isql ツール
バッチ更新を使用した複数のステートメントの送信
IBConsole isql ウィンドウ
IBConsole isql ウィンドウを使用すると、SQL スクリプトの読み込み、保存、印刷、切り取
り、貼り付け、コピーだけでなく、InterBase サーバーに対して DDL と DML コマンドを実
行して、その結果を表示できます。
isql ウィンドウを表示するには、次のいずれかの方法を行います。
• 対話型 SQL のツールバーボタン
をクリックします。
• [ツール|対話型 SQL]を選択します。
第 11 章 対話型クエリー
11-1
IBConsole isql ウィンドウ
図 11.1 IBConsole の対話型 SQL エディタ
SQL 入力領域
isql
ステータスバー
SQL 出力領域
SQL 入力領域
SQL 入力領域は、実行のための SQL 文またはスクリプトを入力する領域です。この領域は、
上下(縦)にスクロールします。
SQL 出力領域
SQL 出力領域は、SQL 文またはスクリプトの結果を表示する領域です。この領域は、上下
および左右(横)のどちらの方向にもスクロールします。SQL 出力領域には 2 つのタブがあ
ります。
• [データ]タブは、SQL 出力から返されたデータをグリッド形式で表示します。
• [実行計画]タブは、SQL 文または SQL スクリプトのプランを表示します。
• [統計情報]タブは、実行時間、準備時間、開始メモリ、デルタメモリ、現在のメモリ、
バッファ数、読み取り数、書き込み数、プラン、取り出されたレコード数などの SQL 出力
の状態を表示します。
ステータスバー
SQL 入力領域の最も下にあるステータスバーには、カーソル位置、入力ステータス、クライア
ントダイアレクト、トランザクションステータスのような、SQL 入力に関連する情報が表示さ
れます。ステータスバーを右クリックすると、クライアントダイアレクトを変更できます。
11-2 操 作 ガ イ ド
IBConsole isql ウィンドウ
isql メニュー
IBConsole の対話型 SQL ウィンドウ(SQL エディタとも呼びます)には、
[ファイル]、
[編
集]、[クエリー]、[データベース]、[トランザクション]、[Windows]の各メニューがあ
ります。
[ファイル]メニュー
[ファイル]メニューには次のエントリがあります。
• 印刷:SQL 入力領域の現在の内容を印刷します。
• 保存:現在のセッションの SQL コマンドをファイルに保存します。
• Load:保存されている SQL の履歴ファイルをロードします。
• 閉じる:SQL エディタを閉じます。
[編集]メニュー
[編集]メニューには次のエントリがあります。
• 元に戻す、切り取り、貼り付け:SQL 入力領域でのみ使用されます。[編集]メニューの
[元に戻す]は、データベースの変更を元に戻す機能ではありません。データベースの変更
を取り消すには、
[トランザクション|ロールバック]を指定します。
• コピー、すべて選択、検索:入力領域と出力領域の両方で使用します。
• フォント:入力領域で使用するフォントを指定します。
• オプション:11-13 ページの表 11.2 で説明しています。
[オプション]では、クエリープラ
ン、Auto Commit、Blob、およびターミネータに関する設定を行います。
• 強調表示オプション:入力領域内のテキストの外観を設定できます。
第 11 章 対話型クエリー
11-3
IBConsole isql ウィンドウ
[クエリー]メニュー
[クエリー]メニューには次のエントリがあります。
• スクリプトのロード:SQL スクリプトファイルをロードします。
• スクリプトの保存:SQL スクリプトファイルを保存します。
• 次:
[前]コマンドを使ってスタック内の前の文を表示した後で、次の SQL 文に進みます。
• 前:入力領域に入力した前の文を表示します。このコマンドを繰り返し使用して、現在の
対話型 SQL セッション内で入力した文を自由に表示できます。
• 実行:入力領域に現在表示されている SQL 文を実行します。
• すべて取り出し:サブクエリーの一部ではなくすべての行を強制的に取り出します。
IBConsole は、出力領域を下にスクロールするたびに結果を取り出すため、このコマンドを
使用することはまれです。
• 準備:SQL 出力領域に、最適化プランを表示します。
• 出力の保存:出力領域の内容をテキストファイルに保存します。
11-4 操 作 ガ イ ド
IBConsole isql ウィンドウ
[データベース]メニュー
[データベース]メニューには次のエントリがあります。
• 指定したユーザーでのデータベース接続:別のユーザーとしてデータベースに接続できま
す。
• 新規コネクション:データベースに接続していない場合にのみアクティブになります。
[データベース接続]ダイアログが表示されます。
• データベースの作成、データベースの削除:IBConsole のメイン[データベース]メニュー
にあるコマンドと同じです。これらのコマンドは、便宜上、SQL エディタの[データベー
ス]に配置されています。
[トランザクション]メニュー
[トランザクション]メニューを使用して、トランザクションをコミットまたはロールバッ
クできます。
[ウィンドウ]メニュー
[ウィンドウ]メニューをクリックすると、現在開いているウィンドウの一覧が表示されま
す。ウィンドウを表示するには、リストからウィンドウの 1 つを選択して[切り替え]を
クリックするか、エントリをダブルクリックします。
第 11 章 対話型クエリー
11-5
IBConsole isql ウィンドウ
isql ツールバー
IBConsole SQL エディタのツールバーには、次のボタンがあります。
表 11.1 SQL 文を実行するためのツールバーボタン
ボタン
説明
入力領域に入力した直前の文を表示します。このボタンを繰り返し使用して、現在の対話
型 SQL セッション内で入力した文を自由に表示できます。アクセラレータキーは〔w-P〕
です。ボタンの横にある下矢印をクリックすると、使用できる文のリストが表示されます。
リスト内の文をクリックすると、それが入力領域に表示されます。
(
[クエリー|前]と同じ)
[前]コマンドを使ってスタック内の前の文を表示した後で、次の SQL 文に進みます。アク
セラレータキーは w +〔N〕です。ボタンの横にある下矢印をクリックすると、使用でき
る文のリストが表示されます。リスト内の文をクリックすると、それが入力領域に表示さ
[クエリー|次]と同じ)
れます。(
現在 SQL 入力領域にある文またはスクリプトを実行します。出力は SQL 出力領域に表示さ
(
[クエリー|実行]と同じ)
れます。アクセラレータキーは〔w-E〕です。
現在のクエリーのクエリープランを SQL 出力領域に表示します。
(
[クエリー|準備]と同じ)
サブクエリーの一部ではなくすべての行を強制的に取り出します。IBConsole は、出力領域を
下にスクロールするたびに結果を取り出すため、このコマンドを使用することはまれです。
(
[クエリー|すべて取り出し]と同じ)
SQL 文で指定されたトランザクションをデータベースにコミットします。(
[トランザクショ
ン|コミット]と同じ)
最後のコミット移行にデータベースに対して行われたすべての変更をロールバックします。
(
[トランザクション|コミット]と同じ)
SQL 実行用スクリプトを SQL 入力領域に読み込みます。([クエリー|スクリプトの読み込
み]と同じ)
SQL 入力領域に入力された SQL 文をファイルに保存します。([クエリー|スクリプトの保
存]と同じ)
SQL 入力領域内のテキストを検索します。(
[編集|検索]と同じ)
11-6 操 作 ガ イ ド
isql の一時ファイルの管理
表 11.1 SQL 文を実行するためのツールバーボタン ( 続き )
ボタン
説明
現在開いているウィンドウの一覧を表示します。ウィンドウを表示するには、リストから
ウィンドウの 1 つを選択して[切り替え]をクリックするか、エントリをダブルクリック
します。
また、下矢印をクリックし、ドロップダウンリストからウィンドウの 1 つを選択して切り
替えることもできます。
SQL 入力領域の内容を印刷します。
isql の一時ファイルの管理
isql は、コマンドのヒストリや出力ファイル名などの情報を復元するために、セッション中
に使用される一時ファイルを作成します。これらのファイルは、isql_aa.xx の形式で名前が付
けられます。これらのファイルが格納される場所は、TMP 環境変数によって指定される
ディレクトリか、それが定義されていない場合には作業ディレクトリ、またはそれが定義
されていない場合は Windows または WINNT ディレクトリになります。
一時ファイルのために Windows または WINNT ディレクトリが混乱しないように、TMP 環
境変数を定義して一時ファイル用に別のディレクトリを指定してください。
終了時に、isql がこれらの一時ファイルを削除します。isql が異常終了した場合は、これらの
ファイルが残りますが、削除しても問題はありません。isql の実行中は、現在のセッションで
使用されている可能性があるため、これらの一時ファイルを削除してはなりません。
SQL 文の実行
isql では、次の 2 つの方法で SQL 文を実行できます。
• 対話形式で、一度に 1 文を実行
• 複数の SQL 文を含むスクリプトから実行
対話形式での SQL の実行
SQL を対話形式で実行するには、次の手順にしたがいます。
1
SQL 入力領域に SQL 文を 1 つ入力します。他の文はコメントアウトしてください。/* と
*/ で囲まれた文はコメントです。
SQL 文が SQL 入力領域にすでにある場合は、実行する文以外のすべての文がコメントに
なっているか確認します。実行中は、SQL 入力領域にあるコメント文は無視されます。
第 11 章 対話型クエリー
11-7
SQL 文の実行
2 [クエリー|実行]を選択するか、〔Ctrl〕+〔E〕を入力するか、[実行]ツールバーボ
タンをクリックします。
複数の文が指定されている場合は、各文を順番に実行します。
ヒント
他の Windows アプリケーション(「メモ帳」や「ワードパッド」などのテキストエディタ)
からテキストをコピーして、SQL 入力領域にそれを貼り付けられます。また isql 出力領域か
ら文をコピーし、SQL 入力領域にそれを貼り付けることもできます。このコピー / 貼り付
けは、オンラインヘルプにあるオンラインの SQL チュートリアルを使用するときにも便利
です。
SQL 文を実行すると、実行が成功するかどうかにかかわらず、isql のコマンドヒストリ、つ
まり現在のセッションで入力された SQL 文のシーケンシャルリストに記録されます。
SQL 文の準備
実行用の SQL 文を準備して、クエリープランを表示するには、
[Prepare]ツールボタンを
使用するか、
[クエリー| Prepare]を選択します。[Prepare]はサーバー上でクエリープ
ランをコンパイルして、SQL 出力領域の[実行計画]タブに表示します。[Prepare]を使
用すると、SQL スクリプトの実行を待たずに、SQL スクリプトの形式が正しいかどうかが
判断できます。
有効な SQL 文
• 『言語リファレンス』に「DSQL で使用できる」と記載されている SQL 文は、すべて対話形
式で実行することができます。『言語リファレンス』に iSQL 文として特に記載されている
文は使用できません。このような文については、機能的に相当するメニュー項目が isql に
あります。
たとえば、SET NAMES 文は SQL 入力領域に入力できません。アクティブなキャラクタ
セットを変更するには、[編集| WISQL の設定]を選択し、[基本設定]ダイアログで
必要なキャラクタセットのオプション値を選択します。
• SQL スクリプトファイルには、対話形式では入力できない文も含めることができます。た
とえば、SET LIST などの SET 文もスクリプトでは使用できます。
• トランザクション名は、SET TRANSACTION 文で使用できません。
• SQL 入力領域は、同時に 1 つの文しか実行できませんが、複数の文を指定することはでき
ます。SQL 入力領域に入力される文は、セミコロン(;)で終了しなければなりません。SQL
入力領域には複数の文を入力できますが、同時に実行できる文は 1 つだけです。マウスカー
ソルがあるコメント以外の文が現在の文です。
SQL スクリプトファイルの実行
SQL 文を含む SQL スクリプトファイルを実行するには、次の手順にしたがいます。
1 [クエリー|スクリプトの読み込み]を選択するか、ツールバーの[スクリプトの読み
込み]ボタンをクリックします。
2
ファイルを開くダイアログで読み込むスクリプトファイルを指定して、[開く]をク
リックしてスクリプトファイルの文を SQL 入力領域に表示します。
11-8 操 作 ガ イ ド
バッチ更新を使用した複数のステートメントの送信
3
4
目的のデータベースに接続していることを確認します。
データベースに接続したら、CONNECT または CREATE DATABASE 文をコメントアウ
トします。
5 [クエリー|実行]を選択するか、ツールバーの[実行]ボタンをクリックして、スク
リプト全体を 1 文ごとに実行します。
メモ
スクリプトファイルで実行される文は、コマンドヒストリに記録されません。
バッチ更新を使用した複数のステートメントの送信
バッチ更新を利用すると、ひとまとまりの SQL 文をサーバーに一単位で送信できます。SQL
文をバッチにまとめることによって、クライアントとデータベース サーバー間のネット
ワーク トラフィックを削減できます。その結果、特に LAN や WAN 環境ではパフォーマン
スが向上します。
メモ
バッチ更新は、InterBase 2007 クライアント ライブラリと InterClient JDBC ドライバを使用
している場合にのみ動作します。
バッチ更新を使用して、複数の INSERT 文、UPDATE 文、および DELETE 文をサーバーに送
信できます。それに応答して、サーバーは、ステートメントごとの更新行数を表す ULONG
値の配列を返します。
バッチ更新では、SELECT や CREATE DATABASE のような SQL 文はサポートされていませ
ん。SQL DDL はサポートされています。
図 11.2 は、従来の InterBase クライアント API を使用して、いくつかの INSERT 文を実行
したときの、クライアントとサーバー間の通信フローを表しています。この図の通信フロー
は、UPDATE 文や DELETE 文にも適用できます。
第 11 章 対話型クエリー
11-9
バッチ更新を使用した複数のステートメントの送信
図 11.2 バッチ更新を使わない INSERT
図 11.3 は、バッチ更新を使用した場合の通信フローです。ネットワーク トラフィックが
減った結果、パフォーマンスが向上していることがわかります。
図 11.3 バッチ更新を使用した INSERT
11-10 操 作 ガ イ ド
バッチ更新を使用した複数のステートメントの送信
isql でのバッチ更新関数の使用
isql では、バッチ モードで実行する SQL 文を、新たに追加された BATCH START コマンドと
BATCH EXEXCUTE コマンドで囲む必要があります。たとえば、以下のようにします。
BATCH START;
...
(DDL/DML 文を使用 )
...
BATCH EXECUTE;
BATCH EXECUTE コマンドは、BATCH START と BATCH EXECUTE の間にあるステートメントを
サーバーに送信します。別のバッチ操作を開始するには、別の BATCH START コマンドを実
行しなければなりません。
次は、isql でバッチ モードを使用する特殊な例です。
BATCH START;
INSERT INTO t1(f1, f2) VALUES (0,1);
UPDATE t1 SET f1=1 WHERE f2=1;
BATCH EXECUTE;
この例の中の最初の SQL 文は、テーブル t1 に、新しい行を挿入します。2 番目のステート
メントは、新たに挿入した行を新しい値で更新します。これら両方のステートメントは、1
つの API 呼び出しで実行されます。
batch_excute 関数および batch_execute_immed 関数の使用についての詳細は、
『API ガイド』
の第 15 章を参照してください。
メモ
isql の AUTOCOMMITDDL モードは、バッチ更新を使用するために無効にしておく必要がありま
す。
トランザクションのコミットとロールバック
たとえば、CREATE、ALTER などのデータ定義(DDL)文によるデータベースの変更は、
デフォルトで、自動的にコミットされます。DDL の自動コミットをオフにする場合、
[編集
|オプション]を選択し、
[SQL オプション]ダイアログで[Auto Commit DDL]オプショ
ンを[False]に設定します。
INSERT 文や UPDATE 文などのデータ操作(DML)文によるデータベースの変更は、コミッ
トされない限り一時的な変更のままになっています。[トランザクション|コミット]を選
択するか、ツールバーの[コミット]ボタンをクリックすると、変更がコミットされます。
最後のコミット後に、DML 文によって変更された内容をすべて取り消すには、[トランザ
クション|ロールバック]を選択するか、ツールバーの[ロールバック]ボタンをクリッ
クします。
第 11 章 対話型クエリー
11-11
isql 設定の変更
結果のファイルへの保存
以下のものをファイルに保存できます。
• 現在のセッションで SQL 入力領域に入力された SQL 文
• 実行された最後の SQL 文の出力
SQL 入力の保存
現在のセッションで SQL 入力領域に入力された SQL 文をテキストファイルに保存するに
は、次の手順にしたがいます。
1
SQL エディタで、
[クエリー| SQL スクリプトの保存]を選択するか、ツールバーの
[SQL スクリプトの保存]ボタンをクリックします。
2
新しいファイルの位置とファイル名を[名前を付けて保存]ダイアログに入力して、
[保存]をクリックします。
ファイルの位置を含めるには、[ファイル名]テキスト領域にファイルパスおよびファ
イル名を入力するか、ファイルを保存するフォルダに移動してファイル名だけを入力し
ます。
指定したファイルに保存されるのは、現在のセッションで入力された SQL 文だけで、出力
は保存されません。
SQL 出力の保存
最後に実行した SQL 文の結果をファイルに保存するには
1 SQL エディタで、[クエリー|出力の保存]を選択します。
2 [出力の保存]ダイアログに新しいファイルの格納場所含むファイル名を入力し、[保
存]をクリックします。
ファイルの格納場所を含めるには、[ファイル名]テキスト領域にファイルパスとファ
イル名を入力するか、ファイルを保存するフォルダに移動してファイル名だけを入力し
ます。
[データ]タブ内の、最後に成功した実行文の結果出力が、指定されたファイルに保存され
ます。
SQL スクリプトを実行してから結果の保存を選択すると、スクリプトファイルのすべての
コマンドとそれらの実行結果が出力ファイルに保存されます。SET ECHO OFF によってス
クリプトのコマンド表示がオフになっている場合は、スクリプト内の SQL 文はファイルに
保存されません。
isql 設定の変更
[WISQL の設定]ダイアログを使用して、isql セッション設定を表示して変更したり、
IBConsole のメインウィンドウが isql ウィンドウに指定された文によって更新されるかど
うかを決めたり、isql ウィンドウを閉じたときに開かれているトランザクションの処理方法
を指定できます。
11-12 操 作 ガ イ ド
isql 設定の変更
[対話型 SQL]ウィンドウで[編集| WISQL の設定]を選択して、
[WISQL の設定]ダイ
アログを表示します。
[WISQL の設定]ダイアログには、[基本設定]と[拡張設定]の 2 つのタブがあります。
[基本設定]タブ
[基本設定]タブを使用して、isql セッション設定を表示して変更します。オプションの値
をクリックしてドロップダウンリストから新しい値を選択するか、またはオプションの値
をダブルクリックして値をリスト内の次の値にして、オプションを指定できます。
図 11.4 [WISQL の設定]ダイアログの[基本設定]タブ
次の表は、[基本設定]タブで指定可能な isql セッション設定をまとめたものです。
表 11.2 [WISQL の設定]ダイアログの[基本設定]タブ
設定
説明
Show Query Plan
値:True(デフォルト)または False
この設定が True の場合、SELECT が入力されると、オプティマイザによって
選択されたクエリープランが IBConsole に表示されます。オプティマイザの
プランを変更するには、SQLSELECT 文の PLAN オプションを使用します。
詳細は、11-41 ページの「SET PLAN」を参照してください。
第 11 章 対話型クエリー
11-13
isql 設定の変更
表 11.2 [WISQL の設定]ダイアログの[基本設定]タブ ( 続き )
設定
説明
Auto Commit DDL
値:True(デフォルト)または False
• この設定が True の場合、IBConsole は文が入力されるたびに、自動的に
DDL(データ定義)文をコミットします。
• この設定が False の場合は、DDL 文を持続的なものにするには、
[トラ
ンザクション|コミット]で DDL 文を明示的にコミットする必要があ
ります。
詳細は、11-35 ページの「SET AUTODDL」を参照してください。
Character Set
データベースとの次の接続のための文字列に対するアクティブなキャラク
タセットを決定します。この設定によって、データベースに対するデフォ
ルトのキャラクタセットは無効になります。
• キャラクタセットを指定するデータベースへの接続前に、そのキャラク
タセットを指定してください。InterBase が認識するキャラクタセットの
完全なリストについては、
『言語リファレンス』を参照してください。
• キャラクタセットを選択することによって、想定される照合順序はすべ
ての利用可能な照合順序のサブセットに制限されます。キャラクタセッ
トが指定されると、列でデータを選択、挿入、または更新するときに、
照合順序を指定できます。
• SET NAMES コマンドによって SQL スクリプトで同じ関数を実行でき
ます。SET NAMES は、指定するキャラクタセットのデータベースに
接続する前に実行してください。
詳細は、11-40 ページの「SET NAMES」を参照してください。
BLOB Display
• 値:Enabled(デフォルト)
、Disabled、Restrict
この設定によって IBConsole の BLOB データの表示が決定します。SELECT
は、常に BLOB データ型の列に対して BLOB ID を表示します。またデフォル
トで SELECT は、関連する行の下にテキストサブタイプの実際の BLOB
データも表示します。
• この設定が Enabled の場合、IBConsole は全サブタイプの BLOB データ
を表示します。
• この設定が Disabled の場合、IBConsole は BLOB 列の内容を表示しません。
この設定が Restrict の場合、IBConsole は指定されたサブタイプについてだけ
BLOB 列の内容を表示します。
Terminator
SQL クエリーで使用する文の終端を示すシンボルです。
Clear input window on
success
このボックスをチェックすると、SQL 文の正常終了後に、SQL 入力ウィン
ドウをクリアします。
11-14 操 作 ガ イ ド
isql 設定の変更
[拡張設定]タブ
[拡張設定]タブは、IBConsole のメインウィンドウが isql ウィンドウに指定された文にし
たがって更新されるかどうかを決定します。
図 11.5 [WISQL の設定]ダイアログの[拡張設定]タブ
次の表は、[拡張設定]タブで指定可能な設定をまとめたものです。
表 11.3 [WISQL の設定]ダイアログの[拡張設定]タブ
設定
説明
接続時の IBConsole の更新
IBConsole ウィンドウの接続データベースを更新しません。ただし、
IBConsole ウィンドウは、isql ウィンドウで実行された文を反映して
更新されます。
作成時の IBConsole の更新
現在選択されているサーバーがアクティブな場合は、メインウィン
ドウを更新します。isql ウィンドウで作成されたデータベースは自
動的に登録され、エイリアスが作成されます。
終了時にコミット
isql ウィンドウを閉じる際に、アクティブなトランザクションをコ
ミットします。
終了時にロールバック
isql ウィンドウを閉じる際に、アクティブなトランザクションを
ロールバックします。
第 11 章 対話型クエリー
11-15
データベースオブジェクトのインスペクト
データベースオブジェクトのインスペクト
オブジェクトインスペクタを使用して、プロパティ、メタデータ、パーミッション、デー
タ、およびデータベース全体の依存関係または特定のテーブル、ビュー、関数、プロシー
ジャ、その他のツリーペインに表示されるデータベース属性を表示します。
オブジェクトインスペクタを表示するには、ワークペインのデータベースオブジェクトを
ダブルクリックします。オブジェクトインスペクタが表示されます。
図 11.6 オブジェクトインスペクタ
オブジェクトインスペクタには、選択したデータベースオブジェクトにしたがって、[プロ
パティ]、[メタデータ]、[権限]、[データ]、[依存関係]のタブの一部または全部が表示
されます。これらについて説明していきます。
オブジェクトプロパティの表示
[プロパティ]タブは、テーブルの表示とデータベースオブジェクトの表示の際に利用可能
になります。オブジェクトインスペクタの[プロパティ]タブは、データベースオブジェク
トのプロパティを表示します。プロパティには、列、トリガー、CHECK 制約、インデック
ス、一意制約、関連制約があります。[プロパティ]タブにはさまざまなオブジェクトプロ
パティを表示するための 5 つのツールバーボタンがあります。
11-16 操 作 ガ イ ド
データベースオブジェクトのインスペクト
表 11.4 オブジェクトインスペクタのツールバーボタン
ボタン
説明
列の表示:名前、タイプ、照合順序、キャラクタセット、デフォルト値、列内のすべての
行でヌルを許可するかどうかを表示します。アクセラレータキーは〔Ctrl〕+〔Alt〕+〔C〕
です。列の詳細は、
『データ定義ガイド』の「列の定義」を参照してください。
トリガーの表示:各トリガーの名前とタイプ、およびアクティブかどうかを表示します。
また、SQL トリガー文も表示します。アクセラレータキーは〔Ctrl〕+〔Alt〕+〔T〕です。
トリガーの詳細は、
『データ定義ガイド』の「トリガーの操作」を参照してください。
CHECK 制約の表示:制約名、制約が保留できるかどうか、最初に保留されているかどう
かを表示します。また、SQL の CHECK 制約文を表示します。アクセラレータキーは〔Ctrl〕
+〔Alt〕+〔H〕です。CHECK 制約の詳細は、
『データ定義ガイド』の「CHECK 制約の定
義」を参照してください。
インデックスの表示:インデックスキーの名前、および一意なのか、降順なのか、アク
ティブなのかどうかを表示します。アクセラレータキーは〔Ctrl〕+〔Alt〕+〔R〕です。イ
ンデックスの詳細は、
『データ定義ガイド』の「インデックスの操作」を参照してください。
一意制約の表示:制約名、制約が保留できるかどうか、最初に保留されているかどうか、
およびインデックスキーを表示します。アクセラレータキーは〔Ctrl〕+〔Alt〕+〔U〕です。
関連制約の表示:制約名、制約が保留できるかどうか、最初に保留されているかどうか、
更新ルール、削除ルール、インデックス、および参照テーブルを表示します。アクセラ
レータキーは〔Ctrl〕+〔Alt〕+〔R〕です。
メタデータの表示
オブジェクトインスペクタの[メタデータ]タブに表示されるメタデータは、ツリーペイ
ンで選択されているデータベースまたはワークペインで選択されている項目によって異な
ります。
データベース全体のメタデータを表示するには、ツリーペインで接続データベースを選択
してから、ワークペインで[メタデータの表示]をダブルクリックします。テキストウィン
ドウにメタデータが表示されます。
特定のデータベースオブジェクトのメタデータを表示するには、次のいずれかの操作を行います。
• ツリーペインに表示されている階層からデータベース要素を選択し、ワークペインでオブ
ジェクトをダブルクリックして、
[プロパティ]ダイアログを表示します。
[メタデータ]
タブをクリックすると、オブジェクトのメタデータが表示されます。
• ツリーペインに表示されている階層からデータベース要素を選択し、ワークペインでその
要素に関連するデータベースオブジェクトを右クリックし、コンテキストメニューで[抽
出]を選択します。
たとえば、ドメインのメタデータだけが必要な場合は、目的のデータベース階層を展開し
(まだ展開されていない場合)、
[ドメイン]を選択し、ワークペインでドメインの 1 つを右
クリックし、[プロパティ]ダイアログボックスの[メタデータ]タブを選択します。
第 11 章 対話型クエリー
11-17
データベースオブジェクトのインスペクト
ダイアログの上部にあるドロップダウンリストを使用して、データベース要素に関連する
別のオブジェクトを選択します。
次の表は、オブジェクトインスペクタで関連オブジェクトの表示可能なメタデータの項目
を示しています。
表 11.5 メタデータ情報の項目
項目
表示
BLOB フィルタ
BLOB フィルタの定義
ドメイン
メタデータスクリプト、依存関係、データ型、記述、CHECK 制約、デフォ
ルト値
例外
記述、例外番号、例外メッセージ、メタデータスクリプト、依存関係
外部関数
UDF 定義
ジェネレータ
ジェネレータ ID、現在の値、メタデータスクリプト、依存関係
ストアドプロシージャ
メタデータスクリプト、プロシージャ本体、入力パラメータ、出力パラメー
タ、アクセス許可、データ、依存関係
ロール
ロール定義
テーブル
列、データ型、トリガー、インデックス、一意制約、関連制約、CHECK 制
約、メタデータスクリプト、アクセス許可、データ、依存関係
ビュー
メタデータスクリプト、アクセス許可、データ、依存関係
メタデータの抽出
メタデータを表示して、ツールバーの[SQL スクリプトの保存]ボタンをクリックすると、
メタデータスクリプトを抽出することができます。
データベース全体から抽出するとメタデータが特定の順序でエクスポートされ、結果のス
クリプトを、データベースを再作成するための入力として使用できます。
表 11.6 メタデータ抽出の制約
Metadata(メタデータ)
コメント
1. データベース
デフォルトのキャラクタセットと PAGE_SIZE でデータベースを抽出
する。
2. ドメイン
ドメインを参照するテーブルの前になければならない。
3. テーブル
ドメインの後でなければならない。
4. 添字
テーブルの後でなければならない。
5. FOREIGN KEY 制約
作成される前にテーブルが参照されないように、テーブルの後でな
ければならない。
6. ビュー
テーブルの後でなければならない。
7. CHECK 制約
テーブルの後でなければならない。
11-18 操 作 ガ イ ド
データベースオブジェクトのインスペクト
表 11.6 メタデータ抽出の制約 ( 続き )
Metadata(メタデータ)
コメント
8. 例外
例外を発行するコードを含むトリガーおよびストアドプロシージャ
の前に抽出されなければならない。
9. ストアドプロシージャ
ストアドプロシージャは、CREATE PROCEDURE で本体なしで表示さ
れ、次に ALTER PROCEDURE でプロシージャ本体のテキストが追加
される。これにより、循環または再帰的なプロシージャの参照が可
能になる。
10. トリガー
テーブルの後でなければならない。
トリガーコードがプロシージャを参照できるように、ストアドプロ
シージャの後でなければならない。
CHECK 制約からトリガーを抽出しない。
11. ロール
GRANT 権限の前でなければならない。
12. GRANTs
テーブル、ビュー、ストアドプロシージャ、トリガー、およびロー
ルの後でなければならない。
以下の項目は抽出されません。
• 外部関数またはフィルタのコード。このコードはデータベースの一部ではないからです。
データベースに対する宣言(DECLARE EXTERNAL FUNCTION および DECLARE FILTER
による宣言)は抽出されます。
• システムテーブル、システムビュー、システムトリガー。
• DDL 文にはオブジェクトの所有権への参照は含まれないので、抽出されたファイルにも所
有権は含まれません。出力ファイルには、定義されていれば所有者およびオブジェクト名
がコメントとして含まれます。オブジェクトをその元の所有者に割り当てる方法はありま
せん。
メタデータの抽出
メタデータを表示して、ツールバーの[SQL スクリプトの保存]ボタンをクリックすると、
メタデータスクリプトを抽出することができます。
データベース全体から抽出するとメタデータが特定の順序でエクスポートされ、結果のス
クリプトを、データベースを再作成するための入力として使用できます。
表 11.7 メタデータの抽出順序
Metadata(メタデータ)
コメント
1. データベース
デフォルトのキャラクタセットと PAGE_SIZE でデータベースを抽出
する。
2. ドメイン
ドメインを参照するテーブルの前になければならない。
3. テーブル
ドメインの後でなければならない。
4. 添字
テーブルの後でなければならない。
第 11 章 対話型クエリー
11-19
コマンドライン isql ツール
表 11.7 メタデータの抽出順序 ( 続き )
Metadata(メタデータ)
コメント
5. FOREIGN KEY 制約
作成される前にテーブルが参照されないように、テーブルの後でな
ければならない。
6. ビュー
テーブルの後でなければならない。
7. CHECK 制約
テーブルの後でなければならない。
8. 例外
例外を発行するコードを含むトリガーおよびストアドプロシージャ
の前に抽出されなければならない。
9. ストアドプロシージャ
ストアドプロシージャは、CREATE PROCEDURE で本体なしで表示さ
れ、次に ALTER PROCEDURE でプロシージャ本体のテキストが追加
される。これにより、循環または再帰的なプロシージャの参照が可
能になる。
10. トリガー
テーブルの後でなければならない。
トリガーコードがプロシージャを参照できるように、ストアドプロ
シージャの後でなければならない。
CHECK 制約からトリガーを抽出しない。
11. ロール
GRANT 権限の前でなければならない。
12. GRANTs
テーブル、ビュー、ストアドプロシージャ、トリガー、およびロー
ルの後でなければならない。
以下の項目は抽出されません。
• 外部関数またはフィルタのコード。このコードはデータベースの一部ではないからです。
データベースに対する宣言(DECLARE EXTERNAL FUNCTION および DECLARE FILTER
による宣言)は抽出されます。
• システムテーブル、システムビュー、システムトリガー。
• DDL 文にはオブジェクトの所有権への参照は含まれないので、抽出されたファイルにも所
有権は含まれません。出力ファイルには、定義されていれば所有者およびオブジェクト名
がコメントとして含まれます。オブジェクトをその元の所有者に割り当てる方法はありま
せん。
コマンドライン isql ツール
コマンドライン isql は、対話入力またはソースファイルで指定された SQL データ定義文
(DDL)とデータ操作文(DML)を処理するユーティリティです。このユーティリティを使
用して、メタデータの作成および表示、データの変更、ユーザーへの権限の付与、クエリー
のテスト、データベース管理作業などを実行できます。
この節では、isql の使い方について説明します。isql で使用できる標準 SQL コマンドについ
ては、『言語リファレンス』を参照してください。isql 固有のコマンドについては、11-28
ページの「isql コマンドリファレンス」を参照してください。
isql は、次のいずれかの方法で使用します。
11-20 操 作 ガ イ ド
コマンドライン isql ツール
• isql プロンプトで文を入力することによって、SQL 文を対話的に処理する
• ファイルで SQL 文を非対話的に処理する
isql の起動
isql ユーティリティを起動するには、UNIX のシェルプロンプトまたは Windows コンソー
ルプロンプトで次のコマンドラインを入力します。
isql [options] [database_name]
options にはコマンドラインのオプションを指定し、database_name には接続するデータベー
ス名(ディスクおよびディレクトリパスを含む)を指定します。
オプションを指定しないと、isql は対話型セッションを開始します。またデータベースを指
定しない場合は、既存データベースに接続するか、新規データベースを作成しなければな
りません。データベースを指定した場合、isql は指定されたデータベースに接続して対話型
セッションを開始します。
オプションを指定した場合、isql はオプションにしたがって対話的または非対話的に起動
します。たとえば、入力ファイルの読み込みや出力ファイルへの書き出しは、非対話的な
タスクであり、-input または -output オプションを指定すると対話型セッションは開始さ
れません。これ以外の非対話型オプションとして、
-a、-database、-extract、-x があります。これらは DDL 文を抽出する際に使用されます。
isql を対話的に使用する場合、次のプロンプトが表示されます。
SQL>
各コマンドはターミネータ(終端文字)で終了しなければなりません。デフォルトのターミ
ネータはセミコロン(;)です。ターミネータをなんらかの文字または文字の集合に変更す
ることもできます。これは、SET TERMINATOR コマンドか -terminator コマンドラインオ
プションで行います。ターミネータを省略すると継続プロンプトが表示されます(CON>)。
メモ
わかりやすくするために、この章で扱うコマンドおよび例示はすべて、ターミネータにデ
フォルトのセミコロンを使用しています。
コマンドラインオプション
オプションは、最初の数文字だけが必須です。完全なオプション名としてブラケット([ ])
で囲まれたテキストを入力することもできます。たとえば、-n、-no、
-noauto はすべて同じ作用になります。
第 11 章 対話型クエリー
11-21
コマンドライン isql ツール
表 11.8 isql コマンドラインオプション
オプション
説明
-a
指定したデータベースに対してすべての DDL を抽出します。
-c[ache]
データベースへの接続に使用するキャッシュバッファの数を設定します。詳細
は、7-25 ページの「isql 接続ごとのデフォルトのキャッシュサイズ」を参照し
てください。
-d
[atabase] name
ファイルに抽出される CREATE DATABASE 文を変更しま
-x とともに使用します。
す。
• -d がない場合、CREATE DATABASE は、C 形式のコメントとして表示され、
isql コマンドラインで指定されたデータベース名を使用します。
• -d を指定した場合、isql は、コメントではない CREATE DATABASE を抽出
し、そのデータベース引数を name に置き換えます。
-e[cho]
各文の実行前に、それを表示(エコー)します。
-ex[tract]
-x と同じ。
-i[nput] file
標準入力からではなく、SQL スクリプトファイルなどの入力ファイルからコマ
ンドを読み取ります。
• 入力ファイルに -input コマンドを入れて他のファイルを呼び出すようにす
ると、実行を分岐して戻ることが可能になります。
• isql は、最初のファイルの終わりに達したときに(コミットして)終了しま
す。
• 対話型セッションでは、-input を使ってファイルからコマンドを読み取りま
す。
-m[erge_stderr]
• stderr 出力を stdout にマージします。
• シェルスクリプトまたはバッチファイルから isql を実行する場合に、出力
とエラーを 1 つのファイルにまとめるのに便利です
-n[oauto]
DDL 文の自動コミットをオフにします。デフォルトでは、DDL 文は個別のトラ
ンザクションに自動的にコミットされます。
-nowarnings
エラーが発生した場合にのみ、警告メッセージを表示します。デフォルトでは、
isql は、エラーが発生していない場合でも、返されたメッセージをステータスベ
クターに表示します。
-o[utput] file
標準出力ではなく出力ファイルに結果を書き込みます。対話型セッションでは、
-output を使ってファイルに結果を書き出します。
-pas[sword]
password
-user とともに使用します。
• リモートサーバーに接続する際のパスワードを指定します。
• アクセスするには、セキュリティデータベースに有効な password と user が登
録されている必要があります。
-page[length] n
列ヘッダーを、デフォルトの 20 行ごとではなく n 行ごとに出力します。
-q[uiet]
-r
[ole] rolename
11-22 操 作 ガ イ ド
データベースへの接続に関して rolename の特権を user に与えます。
コマンドライン isql ツール
表 11.8 isql コマンドラインオプション ( 続き )
オプション
説明
-s[qldialect] n
セッションの終了または SET SQL DIALECT 文でダイアレクトが変更されるまで、
ダイアレクト n として以降のコマンドを解釈します。
• n = 1 の場合、コマンドは InterBase 5 以前のものとして処理されます。
• n = 2 の場合、ダイアレクト 1 とダイアレクト 3 で異なる解釈を持つ要素につ
いてすべて警告またはエラーが報告され、データベースをダイアレクト 3 に
移行するときに役立ちます。
• n = 3 の場合、すべての文は現在の InterBase SQL セマンティクスとして解釈
されます。二重引用符は区切り付き識別子で、DATE データ型は SQL DATE
で、9 桁を超える有効桁数を持つ高精度数値は INT64 として格納されます。
-t[erminator] x
文のターミネータ(終端文字)をデフォルトのセミコロン(;)から x に変更し
ます。x は、単一文字または文字のシーケンスになります。
-u[ser] user
-password とともに使用します。リモートサーバーに接続する際のユーザー名を
指定します。サーバーにアクセスするには、password と user は、セキュリティ
データベースに登録されている有効な組み合わせでなければなりません。
• アクセスするには、セキュリティデータベースに有効な password と user が登
録されている必要があります。
-x
指定されたデータベースに対して DDL を抽出します。ファイルにリダイレクト
されない限り、画面に DDL を表示します。
-z
isql のソフトウェアバージョンを表示します。
警告の使用
警告は次のような状態のときに表示されます。
• 何も処理が発生しない SQL 文の場合
• SQL 式で、InterBase 5 と InterBase 6 以降で異なる結果が生成される場合
• API 呼び出しが将来のバージョンで変更される予定の場合
• データベースのシャットダウンが一時停止中の場合
例
• createdb.sql に、データベースを作成するための DDL 文が含まれているとします。文を実行
するには、次のように入力します。
isql -input createdb.sql
• 次の例では、リモートデータベースとの対話的接続を開始します。 リモートサーバーの
jupiter は、指定されたユーザーとパスワードの組み合わせを、ロール「staff」に割り当てら
れた特権とともに認識します。
isql -user sales -password mycode -role 'staff''jupiter:/usr/customer.ib'
• 次の例では、対話型セッションが開始されますが、データベースには接続しません。isql コ
マンドが表示され、クエリーの結果によって列ヘッダーが 30 行ごとに印刷されます。
isql -echo -page 30
第 11 章 対話型クエリー
11-23
コマンドライン isql ツール
isql の終了
isql を終了して、コミットされていないすべての作業をロールバックするには、次のよう
に入力します。
QUIT;
isql を終了して、すべての作業をコミットするには、次のように入力します。
EXIT;
データベースへの接続
isql の起動時にコマンドラインでデータベースを指定しなかった場合は、既存のデータ
ベースに接続するか、新規データベースを作成します。データベースに接続するに C は
CONNECT、データベースの作成には CREATE DATABASE を使用します。CONNECT と
CREATE DATABASE の構文については、
『言語リファレンス』を参照してください。
ローカルまたはリモートのデータベースに接続できます。この 2 つの場合で構文は少し異
なります。
ローカルデータベースに接続する場合(Windows プラットフォーム)引数としてデータベース
のフルパス名を指定して、CONNECT コマンドを使用します。次に例を示します。
SQL> CONNECT 'C:¥Borland/InterBase¥Database¥examples¥employee.ib' role 'staff';
リモートデータベースに接続する場合(Windows または UNIX サーバー。TCP/IP 使用)引数
としてデータベースのフルノード名とフルパス名を指定して、CONNECT コマンドを使用
します。ノード名とデータベースパスはコロンで区切ります。
リモートデータベースに接続する例
UNIX プラットフォーム上のデータベース jupiter に接続する場合は、次のようになります。
SQL> CONNECT 'jupiter:/usr/InterBase/examples/employee.ib';
Windows プラットフォーム上のデータベース venus に接続する場合は、次のようになりま
す。
SQL> CONNECT 'venus:c:/InterBase/InterBase/examples/database/employee.ib';
メモ
ノード名と共有ディスクは、どちらもコロンで区切られて指定されているので、混同しな
いように注意してください。ディスクドライブに対して単一文字を指定した場合、それは
ノード名ではなくドライブだと見なすことができます。
ヒント
ディレクトリの区切り文字には、スラッシュ( / )または円記号(バックスラッシュ)の
どちらかを使用できます。InterBase では、必要に応じてサーバーのオペレーティングシス
テムに適切な記号に自動的に変換されます。
isql クライアントのダイアレクトの設定
isql を使って特定のダイアレクトでデータベースを作成するには、最初に isql を目的のダ
イアレクトに設定してから、データベースを作成します。isql ダイアレクトの設定方法は
次のとおりです。
• コマンドラインで、オプション -sql_dialect n を指定して isql を起動します。ここで、n は
1、2、または 3 のいずれかです。
11-24 操 作 ガ イ ド
コマンドライン isql ツール
isql -sql_dialect n
• isql セッションまたは SQL スクリプト内に、次の文を含めます。
SET SQL DIALECT n;
isql で使用されるダイアレクトは、次の優先順位で決まります。
• 最低:接続しているバージョン 6 以降のデータベースのダイアレクト
• 低い:コマンドラインで指定されたダイアレクト
• 高い:セッション内で指定されたダイアレクト
• 最高:接続しているバージョン 5 データベースのダイアレクト
InterBase では、isql はダイアレクトに関して次のように動作します。
• isql を起動してダイアレクトを指定せずにデータベースに接続した場合、isql はデータベー
スのダイアレクトを使用します。
• isql を起動するときにコマンドラインでダイアレクトを指定した場合、isql は、ダイアレク
トを明示的に変更しない限り、接続後もそのダイアレクトを使用し続けます。
• SET SQL DIALECT n を使ってセッション中にダイアレクトを変更する場合、
isql はダイアレ
クトが明示的に変更されない限り、そのダイアレクトで動作を続けます。
• isql を使ってデータベースを作成する場合、データベースは isql クライアントのダイアレ
クトを使用します。たとえば、isql がダイアレクト 1 に設定されているときにデータベース
を作成すると、データベースはダイアレクト 1 のデータベースとなります。
• 最初に isql クライアントのダイアレクトを指定せずにデータベースを作成した場合、また
は既存のデータベースに接続する前にデータベースを作成した場合、isql はそのデータ
ベースのダイアレクトを 3 に設定します。
上 記 の 説 明 は、isql を コ マ ンドラインユーティリティとして実行する場合、または
IBConsole から実行する場合に当てはまります。
重要
バージョン 5 のデータベースに接続する InterBase の isql クライアントは、すべてダイアレ
クト 1 にリセットされます。
isql におけるトランザクションの動作
isql を起動すると、InterBase はトランザクションを開始します。トランザクションが開始し
ても、COMMIT または ROLLBACK 文を実行しない限り影響はありません。トランザクショ
ンを終了するには、COMMIT または ROLLBACK 文を実行します。どちらかの文を実行する
と新規のトランザクションが自動的に開始します。または SET TRANSACTION 文を使って
トランザクションを開始させることもできます。
isql は DDL 文には別のトランザクションを使用します。DDL 文が SQL > プロンプトで発行
されると、完了後ただちに自動的にコミットされます。DDL スクリプトでは、CREATE 文
ごとに COMMIT を発行して、CREATE 文に依存する以降の文で、新規のデータベースオブ
ジェクトが確実に利用できるようにしなければなりません。DDL 文の詳細は、
『データ定義
ガイド』を参照してください。
第 11 章 対話型クエリー
11-25
コマンドライン isql ツール
メタデータの抽出
データベースのメタデータを定義している DDL 文を出力ファイルに抽出するには、-extract
オプションを使用します。-output フラグを追加すると、指定したファイルに抽出されます。
次の構文を使用します。
isql [[-extract | -x][-a] [[-output | -o] outputfile]] database;
-x オプションは -extract の省略形です。-a フラグを使用すると、isql はすべてのデータベー
スオブジェクトを抽出します。出力ファイル指定 outputfile は -output フラグの後ろに指定
しなければなりません。このとき、抽出されるデータベースの名前はコマンドの終わりに
置くことができます。
表 11.9 isql のメタデータ抽出の引数
オプション
説明
database
メタデータが抽出されるデータベースのファイル指定。
outputfile
抽出される文を受け取るテキストファイルのファイル指定。省略すると、isql は
情報を画面に出力します。
結果が出力されるテキストファイルは、次の目的に使用できます。
• データベースのシステムテーブルの現在の状態を、それに代わるものを計画する前に検査
する。またはデータベースが作成されてから後に重要なデータベース変更があったときに、
それを検査する。
• テキストエディタを使用して、データベースの定義を変更したり、新規データベースソー
スファイルを作成する。
UDF コードと BLOB フィルタはデータベースの一部ではないため、-extract オプションでは
抽出されません。データベースに対する宣言(DECLARE EXTERNAL FUNCTION および
DECLARE FILTER による宣言)は抽出されます。
-extract オプションでは、システムテーブル、システムビュー、およびシステムトリガーも
抽出されません。
DDL 文にはオブジェクトの所有権への参照は含まれないので、抽出されたファイルにも所
有権は含まれません。出力ファイルには、定義されていれば所有者およびオブジェクト名が
コメントとして含まれます。オブジェクトをその元の所有者に割り当てる方法はありませ
ん。
メタデータオブジェクトの抽出順序については、11-19 ページの「メタデータの抽出」を
参照してください。たとえば、次の文は、データベース employee.ib から employee.sql という
ファイルにシステムカタログを抽出します。
isql -extract -output employee.sql employee.ib;
各コマンドセットの後の -commit によって出力スクリプトが作成されるので、後続の定義
でテーブルを参照することが可能になります。このコマンドは、可能な場合はキーワードお
よびオブジェクト名をすべて大文字で抽出します(国によって大文字のないメタデータも
ある)。
11-26 操 作 ガ イ ド
コマンドライン isql ツール
DDL 文をデータベース employee.ib から抽出して、employee.sql というファイルに保存するに
は、次のように入力します。
isql -a employee.ib -output employee.sql
次の例では、データベース dev.ib から DDL 文を抽出します。
isql -x dev.ib
次の例では、-extract および -outoput オプションを組み合わせて、データベース dev.ib から
dev.out というファイルに DDL 文を抽出します。出力データベース名は、-output の後に続け
て入力します。
isql -extract -output dev.out dev.ib
isql コマンド
SQL> プロンプトでは、次の 3 種類のコマンドが入力できます。
• CREATE、ATLTER、DROP、GRANT、REVOKE などの SQL データ定義(DDL)文。これ
らの文はメタデータやオブジェクトの作成、変更、削除を行い、
(特権を使って)データ
ベースへのユーザーアクセスを制御します。DDL の詳細は、
『データ定義ガイド』を参照
してください。
• SELECT、INSERT、UPDATE、DELETE などの SQL データ操作(DML)文。この 4 種類の
データ操作は、データベース内のデータに影響し、データの取得、変更、追加、削除を行
います。DML 文の詳細は、
『言語リファレンス』を参照してください。
• isql コマンド。isql コマンドは、以下の 3 つの主要なカテゴリに分類できます。
• SHOW コマンド(メタデータやその他のデータベース情報を表示する)
• SET コマンド(isql 環境を変更する)
• その他のコマンド(たとえば、入力ファイルを読み込むコマンド、出力ファイルに
書き込むコマンド、isql セッションを終了するコマンドなど)
isql コマンドの中には、多くのオプションを備えているものもあります。詳細は、11-28
ページの「isql コマンドリファレンス」を参照してください。
SHOW コマンド
SHOW コマンドは、テーブル、インデックス、プロシージャ、およびトリガーを含むメタ
データを表示する際に使用します。
SHOW コマンドは、指定されたオブジェクトをすべて一覧します。または、name とともに
使用された場合は、特定のオブジェクトに関する情報を提供します。
SHOW コマンドは、ユーザー文に含まれる個別のトランザクションに作用します。このコ
マンドは READ COMMITTED のバックグラウンド文として動作し、すべてのメタデータの
変更を即座に認識します。
SET(設定)コマンド
SET コマンドによって、isql 環境を表示および変更することができます。
第 11 章 対話型クエリー
11-27
isql コマンドリファレンス
その他の isql コマンド
その他の isql コマンドは、SQL ファイルの読み込み、シェルコマンドの実行、isql の終了
などのさまざまなタスクを実行します。このような isql コマンドには、BLOBDUMP、EDIT、
EXIT、HELP、INPUT、OOUTPUT、QUIT、および SHELL があります。
isql の終了
isql ユーティリティを終了して、コミットされていないすべての作業をロールバックする
には、次のように入力します。
SQL> QUIT;
isql ユーティリティを終了してすべての作業をコミットするには、次のように入力します。
SQL> EXIT;
エラー処理
IntetBase は、isql および DSQL のエラーを同じ方法で処理します。エラーの原因を示すため
に、isql は SQLCODE 変数および InterBase ステータス配列を使用します。
次の表は、SQLCODE に返される値の一覧です。
表 11.10 SQLCODE とメッセージの概要
SQLCODE
メッセージ
意味
<0
SQLERROR
エラーが発生。文は実行されませんでした
0
SUCCESS
実行完了
+1–99
SQLWARNING
システムの警告メッセージまたは情報メッセージ
+100
NOT FOUND
対応する行が見つかりません。または、現在のアクティブ
な行セットの終わりに達しました
エラー処理の詳細は、『埋め込み SQL ガイド』を参照してください。また、SQLCODE と
InterBase ステータス配列コードの詳細は、
『言語リファレンス』を参照してください。
isql コマンドリファレンス
この章では、InterBase isql(対話型 SQL)だけで使用可能なコマンドの構文と使い方につ
いて説明します。これらのコマンドは、SQL スクリプトでも使用できます。isql で利用可能
な標準 DSQL コマンドに関する説明は、『言語リファレンス』を参照してください。
コマンドライン isql は、次のような特定のコマンドをサポートしています。
11-28 操 作 ガ イ ド
isql コマンドリファレンス
表 11.11 isql のコマンド
BLOBDUMP
SET BLOBDISPLAY
SHELL
SHOW INDEX
EDIT
SET COUNT
SHOW CHECK
SHOW INDICES
EXIT
SET ECHO
SHOW DATABASE
SHOW PROCEDURES
HELP
SET LIST
SHOW DOMAINS
SHOW ROLES
INPUT
SET NAMES
SHOW EXCEPTIONS
SHOW SYSTEM
OUTPUT
SET PLAN
SHOW FILTERS
SHOW TABLES
QUIT
SET STATS
SHOW FUNCTIONS
SHOW TRIGGERS
SET
SET TERM
SHOW GENERATORS
SHOW VERSION
SET AUTODDL
SET TIME
SHOW GRANT
SHOW VIEWS
BLOBDUMP
読み取りまたは書き込み用に、指定したファイルに BLOB 列の内容を出力します。
構文
BLOBDUMP blob_id filename;
引数
説明
blob_id
システム指定の 16 進の識別子。コロン(:)で区切られた 2 つの 16 進数で構成
されています。
• 最初の数字は BLOB 列を含むテーブルの ID です。
• 2 つ目の数字は、BLOB データの特定のインスタンスを識別する連続番号で
す。
filename
説明
BLOB の内容が出力されるファイル名。
BLOBDUMP は、blob_id で識別される BLOB データを filename で指定されたファイルに格
納します。バイナリファイルは表示できないので、BLOBDUMP はバイナリデータの表示ま
たは編集に有効です。また BLOBDUMP は、テキスト(BLOB データ)のブロックをファイ
ルに保存する場合にも有効です。
BLOBDUMP 文で指定する blob_id を決定するには、BLOB データの列を選択する SELECT
文を実行します。テーブルの列が表示されると、BLOB 列に 16 進の BLOB ID があります。
BLOB 出力の表示は、SET BLOBDISPLAY を使って制御できます。
例
たとえば、58:c59 の BLOB ID が JPEG 形式のグラフィックデータを参照するとします。この
BLOB データを picture.jpg というグラフィックファイルに出力するには、次のように入力し
ます。
参照
BLOBDUMP 58:c59 picture.jpg;
SET BLOBDISPLAY
第 11 章 対話型クエリー
11-29
isql コマンドリファレンス
EDIT
isql コマンドの編集および再実行を行います。
構文
説明
EDIT [filename];
引数
説明
filename
編集するファイル名
EDIT コマンドを使用して、以下に含まれるコマンドを編集できます。
• ソースファイル。エディタを終了すると同時にコマンドが実行されます。
• 現在の isql セッション。再実行されます。
Windows プラットフォームでは、EDIT は EDITOR 環境変数で指定されたテキストエディ
タを呼び出します。この環境変数が定義されていない場合、EDIT は Microsoft notepad エ
ディタ(メモ帳)を使用します。
UNIX では、EDIT は VISUAL または EDITOR 環境変数のどちらかで指定されたテキストエ
ディタをその順番で呼び出します。どちらの変数も定義されていない場合、EDIT は vi エ
ディタを使用します。
引数に filename を指定すると、EDIT は filename の内容をバッファに入れます。ファイル名
が指定されていないと、EDIT は現在の isql セッションでのコマンドをバッファに入れま
す。
エディタを終了すると、isql は自動的にバッファにあるコマンドを実行します。
スペースを含むファイル名:二重引用符または単引用符でファイル名を囲むと、EDIT 文で
スペースを含むファイル名を使用できます。
例
start.sql というファイルのコマンドを編集して、編集が終了したらそのコマンドを実行する
場合、次のように入力します。
EDIT START.SQL;
次の例で、ユーザーは対話的に「SELECT DISTINCT JOB_CODE, JOB_TITLE FROM JOB;」と
入力しようとしましたが、誤って DISTINCT キーワードが抜けてしまいました。EDIT コマ
ンドを実行すると、エディタにこの文が開かれ、編集された文が編集後に実行されます。
参照
SELECT JOB_CODE, JOB_TITLE FROM JOB;
EDIT;
INPUT, OUTPUT, SHELL
11-30 操 作 ガ イ ド
isql コマンドリファレンス
EXIT
現在のトランザクションをコミットし、データベースを閉じて、isql セッションを終了し
ます。
構文
EXIT;
説明
EXIT と QUIT はどちらもデータベースを閉じて isql セッションを終了します。EXIT は、最
後の COMMIT または ROLLBACK 以降に行ったすべての変更をコミットし、QUIT はそれ
らをロールバックします。
EXIT はファイル終端文字と同等です(ファイル終端文字はシステムによって異なる)
。
重要
EXIT は、再確認なしで変更をコミットします。EXIT を使用する前に、ロールバックの必要
なトランザクションがないことを確認してください。
参照
QUIT, SET AUTODDL
HELP
isql コマンドの一覧と簡単な説明を表示します。
構文
HELP;
説明
HELP は、組み込みの各 isql コマンドを簡単な説明とともにリストにします。
例
HELP 画面を、isqlhelp.lst ファイルに保存するには、次のように入力します。
OUTPUT isqlhelp.lst;
HELP;
OUTPUT;
HELP コマンドを実行した後、OUTPUT を使って出力を画面にリダイレクトします。
INPUT
指定されたファイルからコマンドを読み出して実行します。
構文
説明
INPUT filename;
引数
説明
filename
SQL 文および SQL コマンドを含んだファイルの名前
INPUT は filename から読み取ったコマンドを 1 ブロックとして実行します。この方法で、
INPUT は確認なしでコマンドを実行できます。filename には、SQL 文または isql コマンド
が含まれていなければなりません。
入力ファイル自体に INPUT コマンドを含めることができます。INPUT コマンドをネスト
すると、isql で複数のファイルを処理できます。あるファイルの全コマンドを実行してファ
イルの終わりに達すると、処理は前のファイルに戻ります。
第 11 章 対話型クエリー
11-31
isql コマンドリファレンス
INPUT コマンドは、非対話型での使用を想定しています。したがって、入力ファイルでは
EDIT コマンドは動作しません。
isql セッション内から INPUT filename を使用すると、
コマンドラインから -input filename を
使用するのと同じ効果があります。
OUTPUT を使って出力をリダイレクトしない限り、filename を実行して返される結果はす
べて画面に表示されます。
二重引用符または単引用符でファイル名を囲めば、INPUT 文でスペースを含むファイル名
を使用できます。
例
ファイル ADD.LST に次の INSERT 文が含まれているとします。
INSERT INTO COUNTRY (COUNTRY, CURRENCY)
VALUES ('Mexico', 'Peso');
add.lst に格納されているコマンドを実行するには、次のように入力します。
INPUT add.lst;
次の例では、ファイル TABLE.LST に次の SHOW コマンドが含まれているとします。
SHOW
SHOW
SHOW
SHOW
SHOW
SHOW
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
COUNTRY;
CUSTOMER;
DEPARTMENT;
EMPLOYEE;
EMPLOYEE_PROJECT;
JOB;
これらのコマンドを実行するには、次のように入力します。
INPUT table.lst;
各コマンドを記録して、その結果を table.out という名前のファイルに保存するには、次のよ
うに入力します。
参照
SET ECHO ON;
OUTPUT table.out;
INPUT table.lst;
OUTPUT;
OUTPUT
OUTPUT
指定された名前のファイルまたは標準出力に出力をリダイレクトします。
構文
OUTPUT [filename];
引数
説明
filename
出力を保存するファイル名。ファイル名が指定されない場合、結果は標準出力
に出力されます。
11-32 操 作 ガ イ ド
isql コマンドリファレンス
説明
OUTPUT は、isql コマンドの結果が表示される場所を決定します。デフォルトでは、結果は
標準出力(通常は画面)に表示されます。ファイルに結果を保存する場合、引数の filename
を指定してください。デフォルトモードに戻して、再び標準出力に結果を表示するには、
ファイル名を指定せずに OUTPUT を使用します。
デフォルトでは、データだけがリダイレクトされます。SET ECHO が機能していない限り、
対話型コマンドはリダイレクトされません。SET ECHO が設定されていると、isql は各コマ
ンドを実行前に表示します。この方法では、isql は結果とそれを生成したコマンドの両方を
確保します。SET ECHO は、クエリーのテキストを結果の直前に表示する場合に有効です。
メモ
エラーメッセージは出力ファイルにリダイレクトできません。
isql セッション内から OUTPUT filename を使用すると、コマンドラインからオプション output filename を使用するのと同じ効果があります。
二重引用符または単引用符でファイル名を囲めば、OUTPUT 文でスペースを含むファイル
名を使用できます。
例
参照
次の例では、1 つの SELECT 文の結果をファイル SALES.OUT に格納します。SELECT 文の
実行後、通常の出力処理に戻ります。
OUTPUT sales.out;
SELECT * FROM SALES;
OUTPUT;
INPUT, SET ECHO
QUIT
現在のトランザクションをロールバックしてデータベースを閉じ、isql セッションを終了
します。
構文
QUIT;
説明
EXIT と QUIT はどちらもデータベースを閉じて isql セッションを終了します。QUIT は、最
後の COMMIT または ROLLBACK 以降に行ったすべての変更をロールバックし、EXIT はそ
れらをコミットします。
重要
QUIT は、確認なしで、コミットされていない変更をロールバックします。QUIT を使用す
る前に、コミットする必要がある変更はすべてコミットされていることを確認してくださ
い。たとえば、SET AUTODDL がオフになっている場合、DDL 文は明示的にコミットしな
ければなりません。
参照
EXIT, SET AUTODDL
SET
isql セッションを制御する機能のステータスを表示します。
構文
SET;
説明
データの表示方法または他のコマンドの処理方法を指定するために、isql ではいくつかの
SET コマンドが用意されています。
第 11 章 対話型クエリー
11-33
isql コマンドリファレンス
SET コマンドそれ自体は、どの機能が現在設定されているかを検証します。SET コマンドの
いくつかは、機能をオンまたはオフにします。また値の割り当てを実行する SET コマンド
もあります。
isql の SET コマンドの多くは、類似または同一の機能を提供する対応の SQL 文があります。
また、SET コマンドによって制御される isql 機能のいくつかは、isql コマンドラインオプ
ションを使って制御することもできます。SET 文は、スクリプトファイルから isql 環境を構
成するために使用されます。スクリプトの SET 文によるセッション設定の変更は、スクリ
プトを実行している間だけセッションに影響します。スクリプトの完了後、スクリプトの実
行に先立ってセッション設定が復元されます。
isql の SET 文は次のとおりです。
表 11.12 SET 文
文
説明
デフォルト
SET AUTODDL
DDL 文に対するコミット機能を切り替えます。
ON
SET BLOBDISPLAY n
BLOB サブタイプ n の表示をオンにします。
パラメータ n は、 OFF
BLOB サブタイプを表示するために必要です。
SET COUNT
選択された行の行数の表示のオン / オフを切り替えます。
OFF
SET ECHO
各コマンドの表示のオン / オフを切り替えます。
OFF
SET LIST string
垂直または水平に列を表示します。
OFF
SET NAMES
アクティブなキャラクタセットを指定します。
OFF
SET PLAN
オプティマイザのクエリープランの表示のオン / オフを切
り替えます。
OFF
SET STATS
パフォーマンス状態の表示のオン / オフを切り替えます。
OFF
SET TERM string
ターミネータ文字を変更できます(InterBase 7 では非推奨)
。 ;
SET TIME
DATE 値の時間の表示を切り替えます。
ON
デフォルトでは、AUTODDL、TIME、ターミネータ(;)を除き、すべて OFF に設定されて
います。isql セッションの起動時または isql スクリプトファイルの実行時は、必ず設定がデ
フォルト値で開始されます。
SET 文を使用すると、isql 環境をスクリプトファイルから設定できます。スクリプト内の
SET 文から変更するセッションの内容は、スクリプトの実行中にのみセッションに影響し
ます。スクリプトが完了すると、スクリプトの実行前のセッション設定が復元されます。対
話形式で設定を修正し、isql スクリプト内で必要に応じて変更できます。スクリプト実行
後、それらの変更は自動的に以前の設定に戻ります。
注意
• IBConsole の SQL 文領域に対話的に isql の SET 文を入力することはできません。同じ機能
をメニュー項目で実行できます。
• SET GENERATOR と SET TRANSACTION(トランザクション名はなし)は DSQL 文であ
り、IBConsole isql または isql で対話的に入力できます。これらの文は、isql 専用ではないの
で、この章には記載されていません。詳細は、
『言語リファレンス』を参照してください。
11-34 操 作 ガ イ ド
isql コマンドリファレンス
• SET DATABASE は埋め込み SQL でしか使用できない文です。詳細は、
『言語リファレンス』
および『埋め込み SQL ガイド』を参照してください。
例
現在設定されている isql 機能を表示するには、次のように入力します。
SET;
Print statistics:OFF
Echo commands:OFF
List format: OFF
Row count:
OFF
Autocommit DDL:OFF
Access plan: OFF
Display BLOB type:1
Terminator: ;
Time:
OFF
この出力から、isql はコマンドをエコーしない、BLOB データはサブタイプ 1(テキスト)
のとき表示される、DDL 文を自動的にコミットする、セミコロン(;)を文のターミネータ
として認識することがわかります。
参照
SET AUTODDL, SET BLOBDISPLAY, SET COUNT, SET ECHO, SET LIST,
SET NAMES, SET PLAN, SET STATS, SET TIME
SET AUTODDL
実行後に DDL 文を自動的にコミットするか、または明示的な COMMIT の後だけコミット
するかを指定します。
構文
説明
SET AUTODDL [ON | OFF];
引数
説明
ON
DDL の自動コミットをオンにする(デフォルト)
OFF
DDL の自動コミットをオフにする
SET AUTODDL は、データ定義言語(DDL)文の自動コミットのオン / オフを設定します。
デフォルトでは、DDL 文は実行後すぐに別個のトランザクションに自動的にコミットされ
ます。これが推奨される動作です。
OFF キーワードを指定すると、DDL の自動コミットはオフになります。OFF モードでは、
DDL 文はユーザーのトランザクションを介して、明示されたときだけコミットできます。
OFF モードは、データベースのプロトタイプの作成に有効です。コミットされていない変
更をロールバックすることによって、容易に復元できるからです。
SET AUTODDL の短縮形は SET AUTO で、両者は同じものです。
ヒント
ON および OFF キーワードはオプションなので省略できます。省略すると、SET AUTO は一
方のモードからもう一方のモードに切り替わります。オプションのキーワードを省略して
入力を保存することも可能ですが、混乱を避けるためキーワードを付けることをお勧めし
ます。
第 11 章 対話型クエリー
11-35
isql コマンドリファレンス
例
次の例は isql スクリプトの一部です。ここでは AUTODDL をオフにして、TEMP という名
前のテーブルを作成し、作業をロールバックします。
. . .
SET AUTO OFF;
CREATE TABLE TEMP (a INT, b INT);
ROLLBACK;
. . .
このスクリプトは、TEMP を作成してから、文をロールバックします。作成がロールバック
されるので、テーブルは作成されません。
次のスクリプトは、デフォルトの AUTODDL ON を使用します。このスクリプトは、テー
ブルの TEMP を作成してロールバックを実行します。
. . .
CREATE TABLE TEMP (a INT, b INT);
ROLLBACK;
. . .
DDL は自動的にコミットされるので、ロールバックは TEMP の作成に影響しません。
参照
EXIT, QUIT
SET BLOBDISPLAY
表示する BLOB データのサブタイプを指定します。
構文
SET BLOBDISPLAY [n | ALL | OFF];
引数
説明
n
表示する BLOB サブタイプを指定する整数。
• 0 は BLOB データの未知のサブタイプに使用します。
• 1(デフォルト)はテキストサブタイプの BLOB データに
使用します。
• その他の整数値は他のサブタイプに使用します。
説明
ALL
全サブタイプの BLOB データを表示します。
OFF
全サブタイプの BLOB データの表示をオフにします。
SET BLOBDISPLAY は、以下のように使用します。
• 特定のサブタイプの BLOB データを表示する場合、SET BLOBDISPLAY n を使用します。デ
フォルトで、isql はテキストサブタイプ(n = 1)の BLOB データを表示します。
• 全サブタイプの BLOB データを表示する場合、SET BLOBDISPLAY ALL を使用します。
• BLOB データを表示しないようにするには、SET BLOBDISPLAY OFF を使用します。OFF
キーワードを省略しても同じです。出力を読みやすくするには BLOB 表示をオフにします。
11-36 操 作 ガ イ ド
isql コマンドリファレンス
BLOB データを含む列では、実際のデータは列に表示されず、データを表す BLOB ID が表
示されます。SET BLOBDISPLAY がオンの場合、BLOB ID に関連付けられているデータが
BLOB ID を含む行の下に表示されます。SET BLOBDISPLAY がオフの場合、BLOB ID と結び
付くデータが表示されていなくても、BLOB ID は表示されます。
SET BLOBDISPLAY の短縮形は SET BLOB で、両者は同じものです。
BLOB 列のサブタイプを調べるには、SHOW TABLE を使用してください。
例
以下の例では、同じ SELECT 文から出力を表示します。出力の表示方法に影響を与えるため
に、それぞれの例で異なる SET BLOB コマンドを使用しています。最初の例は BLOB 表示を
オフにします。
SET BLOB OFF;
SELECT PROJ_NAME, PROJ_DESC FROM PROJECT;
BLOBDISPLAY OFF を使用して、以下のように BLOB ID だけを表示します。
PROJ_NAME
PROJ_DESC
==================== =================
Video Database
24:6
DigiPizza
24:8
AutoMap
24:a
MapBrowser port
24:c
Translator upgrade 24:3b
Marketing project 3 24:3d
次の例は、BLOBDISPLAY をサブタイプ 1(テキスト)に設定して、デフォルトに戻します。
SET BLOB 1;
SELECT PROJ_NAME, PROJ_DESC FROM PROJECT;
これで BLOB の内容が、次のように各 BLOB ID の下に表示されます。
参照
PROJ_NAME
PROJ_DESC
=====================================
Video Database 24:6
==============================================================
PROJ_DESC:
Design a video data base management system for
controlling on-demand video distribution.
PROJ_NAME
PROJ_DESC
=====================================
DigiPizza
24:8
==============================================================
PROJ_DESC:
Develop second generation digital pizza maker
with flash-bake heating element and
digital ingredient measuring system.
. . .
BLOBDUMP
第 11 章 対話型クエリー
11-37
isql コマンドリファレンス
SET COUNT
クエリーによって検索される行数を表示するかどうかを指定します。
構文
説明
SET COUNT [ON | OFF];
引数
説明
ON
"rows returned" メッセージの表示をオンにする
OFF
"rows returned" メッセージの表示をオフにする(デフォルト)
デフォルトでは、クエリーから SELECT 文で行を検索する際、検索された行数を示すメッ
セージは表示されません。
デフォルトの動作を変更してメッセージを表示する場合、SET COUNT ON を使用してくだ
さい。デフォルトの動作に戻す場合は、SET COUNT OFF を使用します。
ヒント
ON および OFF キーワードはオプションなので省略できます。省略すると、SET COUNT は
一方のモードからもう一方のモードに切り替わります。オプションのキーワードを省略し
て入力を保存することも可能ですが、混乱を避けるためキーワードを付けることをお勧め
します。
例
次の例では、それに続く全クエリーで返される行数を表示するために COUNT ON を設定
します。
SET COUNT ON;
SELECT * FROM COUNTRY
WHERE CURRENCY LIKE '%FRANC%';
表示される出力は次のようになります。
COUNTRY
CURRENCY
=============== ==========
SWITZERLAND SFRANC
FRANCE
FFRANC
BELGIUM
BFRANC
3 rows returned
SET ECHO
コマンドの実行前に isql 出力領域にコマンドを表示するかどうかを指定します。
構文
SET ECHO [ON | OFF];
引数
説明
ON
コマンドの表示をオンにする(デフォルト)
OFF
コマンドの表示をオフにする
11-38 操 作 ガ イ ド
isql コマンドリファレンス
説明
デフォルトでは、スクリプトファイルのコマンドは、実行前に isql 出力領域に表示(エ
コー)されます。デフォルトの動作を変更してコマンドの表示を止める場合、SET ECHO
OFF を使用します。これはスクリプトの出力をファイル送る際に有効であり、出力ファイル
に文自体は必要なく、スクリプトの結果だけが欲しいときなどに役立ちます。
コマンドのエコーは、isql 出力領域にコマンドと結果の両方を表示する場合に有効です。
ヒント
ON および OFF キーワードはオプションなので省略できます。省略すると、SET ECHO は一
方のモードからもう一方のモードに切り替わります。オプションのキーワードを省略して
入力を保存することも可能ですが、混乱を避けるためキーワードを付けることをお勧めし
ます。
例
以下のスクリプトを IBConsole isql から実行します。
. . .
SET ECHO
SELECT *
SET ECHO
SELECT *
EXIT;
OFF;
FROM COUNTRY;
ON;
FROM COUNTRY;
出力(ファイルまたは isql 出力領域)は次のようになります。
. . .
SET ECHO OFF;
COUNTRY
CURRENCY
===================
USA
Dollar
England
Pound
. . .
SELECT * FROM COUNTRY;
COUNTRY
CURRENCY
===================
USA
Dollar
England
Pound
. . .
ECHO は OFF になっているため、最初の SELECT 文は表示されません。また、SET ECHO
ON 文自体も表示されないことに注意してください。この文が実行されるとき、ECHO はま
だ OFF になっているからです。ただし、この文の実行後、2 番めの SELECT 文は表示されま
す。
参照
INPUT, OUTPUT
SET LIST
表形式とリスト形式のどちらで表示するかを指定します。
構文
SET LIST [ON | OFF];
第 11 章 対話型クエリー
11-39
isql コマンドリファレンス
説明
引数
説明
ON
リスト形式の出力表示をオンにする
OFF
リスト形式の出力表示をオフにする(デフォルト)
デフォルトでは、クエリーからの SELECT 文で行を受け取ると、データが行と列の形式に
編成されて、表形式で出力が表示されます。
デフォルトの動作を変更して出力をリスト形式で表示する場合は、SET LIST ON を使用し
てください。リスト形式では、データは 1 行に 1 つの値を表示し、列ヘッダーがラベルとし
て表示されます。リスト形式は、列の出力が画面に収まらないほど広がってしまう場合に有
効です。
ヒント
ON および OFF キーワードはオプションなので省略できます。省略すると、SET LIST は一
方のモードからもう一方のモードに切り替わります。オプションのキーワードを省略して
入力を保存することも可能ですが、混乱を避けるためキーワードを付けることをお勧めし
ます。
例
スクリプトファイルの次の文を実行することを想定します。
SELECT JOB_CODE, JOB_GRADE, JOB_COUNTRY, JOB_TITLE FROM JOB
WHERE JOB_COUNTRY = 'Italy';
出力は次のとおりです。
JOB_CODE
========
SRep
JOB_GRADE
=========
4
JOB_COUNTRY
===========
Italy
JOB_TITLE
====================
Sales Representative
ここで以下のように SELECT の前に SET LIST ON を追加します。
SET LIST ON;
SELECT JOB_CODE, JOB_GRADE, JOB_COUNTRY, JOB_TITLE FROM JOB
WHERE JOB_COUNTRY = 'Italy';
出力は次のとおりです。
JOB_CODE
JOB_GRADE
JOB_COUNTRY
JOB_TITLE
SRep
4
Italy
Sales Representative
SET NAMES
データベーストランザクションで使用するアクティブなキャラクタセットを指定します。
構文
SET NAMES [charset];
引数
説明
charset
アクティブなキャラクタセットの名前。デフォルトは NONE(なし)
。
11-40 操 作 ガ イ ド
isql コマンドリファレンス
説明
SET NAMES は、isql で後続のデータベース接続に使用するキャラクタセットを指定しま
す。これは、そのデータベースのデフォルトのキャラクタセットより優先します。デフォル
トのキャラクタセットに戻すには、SET NAMES を引数なしで指定します。
キャラクタセットが指定されるデータベースに接続する前に、SET NAMES を使用してくだ
さい。InterBase によって認識されるキャラクタセットの詳細は、
『言語リファレンス』を参
照してください。
キャラクタセットを選択すると、使用できる照合順序が限られます。キャラクタセットを指
定した場合は、列データの選択、挿入、更新を行うときに照合順序を指定することができ
ます。
例
次の文はスクリプトファイルの初めにあり、次のデータベース接続のためにアクティブな
キャラクタセットを ISO8859_1 に設定しています。
SET NAMES ISO8859_1;
CONNECT 'jupiter:/usr/InterBase/examples/employee.ib';
. . .
SET PLAN
オプティマイザのクエリープランを表示するかどうかを指定します。
構文
説明
SET PLAN [ON | OFF];
引数
説明
ON
オプティマイザのクエリープランの表示をオンにする
OFF
オプティマイザのクエリープランの表示をオフにする(デフォルト)
デフォルトでは、クエリーから SELECT 文で行を検索するとき、isql はデータの検索に使
用されるクエリープランを表示しません。
デフォルトの動作を変更してオプティマイザのクエリープランを表示する場合、SET PLAN
ON を使用します。デフォルトの動作に戻すには、SET PLAN OFF を使用してください。
オプティマイザのクエリープランを変更するには、SELECT 文で PLAN 句を使用します。
ヒント
ON および OFF キーワードはオプションなので省略できます。省略すると、SET PLAN は一
方のモードからもう一方のモードに切り替わります。オプションのキーワードを省略して
入力を保存することも可能ですが、混乱を避けるためキーワードを付けることをお勧めし
ます。
例
次の例は、PLAN ON を設定するスクリプトの一部を表しています。
SET PLAN ON;
SELECT JOB_COUNTRY, MIN_SALARY FROM JOB
WHERE MIN_SALARY > 50000
AND JOB_COUNTRY = 'France';
出力には、クエリーの結果とともにデータを検索するために使用されたオプティマイザの
クエリープランも含まれ、次のようになります。
第 11 章 対話型クエリー
11-41
isql コマンドリファレンス
PLAN (JOB INDEX (RDB$FOREIGN3,MINSALX,MAXSALX))
JOB_COUNTRY MIN_SALARY
=============== ======================
France
118200.00
SET STATS
クエリーの結果の後にパフォーマンス状態を表示するかどうかを指定します。
構文
説明
SET STATS [ON | OFF];
引数
説明
ON
パフォーマンス状態の表示をオンにする
OFF
パフォーマンス状態の表示をオフにする(デフォルト)
デフォルトでは、SELECT 文がクエリーから行を検索するとき、isql は結果の後にパフォー
マンス状態を表示しません。デフォルトの動作を変更してパフォーマンス状態を表示する
場合、SET STATS ON を使用します。デフォルトの動作に戻すには、SET STATS OFF を使用
してください。パフォーマンス状態には次のようなものがあります。
• 現在使用可能なメモリ(バイト)
• 使用可能なメモリでの変更(バイト)
• 使用可能な最大メモリ(バイト)
• 操作の経過時間
• 操作の CPU 時間
• 要求された読み取り回数
• 要求された書き込み回数
• 書き込み要求数
• 実行された取り出し回数
パフォーマンス状態は、システムリソース、データベースリソース、またはクエリーの最
適化に変更が必要かどうかを決める際の手助けになります。
ヒント
ON および OFF キーワードはオプションなので省略できます。省略すると、SET STATS は一
方のモードからもう一方のモードに切り替わります。オプションのキーワードを省略して
入力を保存することも可能ですが、混乱を避けるためキーワードを付けることをお勧めし
ます。
SET STATS と SQL 文の SET STATISTICS を混同しないでください。SET STATISTICS は、イ
ンデックスの選択度を再計算します。
例
次の例はスクリプトファイルの一部です。状態の表示をオンにし、クエリーを実行しま
す。
SET STATS ON;
SELECT JOB_COUNTRY, MIN_SALARY FROM JOB
11-42 操 作 ガ イ ド
isql コマンドリファレンス
WHERE MIN_SALARY > 50000
AND JOB_COUNTRY = 'France';
出力では、SELECT 文の結果および操作のパフォーマンス状態が以下のように表示されま
す。
JOB_COUNTRY MIN_SALARY
=============== ======================
France
118200.00
参照
Current memory = 407552
Delta memory = 0
Max memory = 412672
Elapsed time= 0.49 sec
Cpu = 0.06 sec
Buffers = 75
Reads = 3
Writes = 2
Fetches = 441
SHOW DATABASE
SET TIME
DATE 値の時刻部分を表示するかどうかを指定します。
構文
説明
SET TIME [ON | OFF];
引数
説明
ON
DATE 値における時刻表示をオンにする
OFF
DATE 値における時刻表示をオフにする(デフォルト)
InterBase の DATE データは、日付部分(日、月、年が含まれる)と時刻部分(時間、分、
秒)からなります。
デフォルトでは、isql は DATE 値の日付部分のみ表示します。SET TIME ON を使用すると、
時刻値の表示がオンになります。SET TIME OFF は、時刻値の表示をオフにします。
ヒント
例
ON および OFF キーワードはオプションなので省略できます。これらを省略すると、コマン
ドは時刻表示を ON から OFF または OFF から ON に切り替えます。
次の例は、DATE データ型のデフォルト表示を示します。ここでは、日、月、および年が
表示されます。
SELECT HIRE_DATE FROM EMPLOYEE WHERE EMP_NO = 145;
HIRE_DATE
------------------2-MAY-1994
次の例では、SET TIME ON を使って表示します。これによって時間、分、秒も表示されます。
第 11 章 対話型クエリー
11-43
isql コマンドリファレンス
SET TIME ON;
SELECT HIRE_DATE FROM EMPLOYEE WHERE EMP_NO = 145;
HIRE_DATE
------------------2-MAY-1994 12:25:00
SHELL
オペレーティングシステムのコマンドの実行、またはオペレーティングシステムのシェル
への一時アクセスを実現します。
構文
説明
SHELL [os_command];
引数
説明
os_command
オペレーティングシステムのコマンド。コマンドが何も指定されていな
い場合、isql はオペレーティングシステムへの対話型アクセスを提供し
ます。
SHELL コマンドは、isql セッションでオペレーティングシステムのコマンドへの一時アク
セスを提供します。現在の isql セッションを終了しないでオペレーティングシステムのコ
マンドを実行するには、SHELL を使用してください。
os_command が指定されている場合、オペレーティングシステムはコマンドを実行して、完
了すると isql に戻します。
コマンドが指定されていない場合、オペレーティングシステムのシェルプロンプトが表示
され、コマンドのシーケンスを実行できます。isql に戻るには、exit と入力します。たとえ
ば、SHELL を使って入力ファイルを編集して、後でそれを実行することができます。一方、
EDIT コマンドを使って入力ファイルを編集する場合、編集セッションが終了すると同時に
入力ファイルが実行されます。
SHELL を使用する場合、シェルが呼び出される前にトランザクションがコミットされるこ
とはありません。
この iSQL 文に相当する機能は IBConsole isql にはありません。
例
参照
次の例では、SHELL を使って現在のディレクトリの内容を表示します。
SHELL DIR;
EDIT
SHOW CHECK
指定したテーブルに対して定義されているすべての CHECK 制約を表示します。
構文
SHOW CHECK table;
11-44 操 作 ガ イ ド
isql コマンドリファレンス
説明
引数
説明
table
現在のデータベースにある既存のテーブル名
SHOW CHECK は、現在のデータベースにある指定されたテーブルに対する CHECK 制約を
表示します。ユーザー定義のメタデータだけが表示されます。既存テーブルの一覧を参照
するには、SHOW TABLE を使用してください。
例
次の例では、JOB というテーブルに対して定義される CHECK 制約を表示します。使用可能な
テーブルの一覧を表示するために、SHOW TABLES コマンドを使用します。
SHOW TABLES;
COUNTRY
CUSTOMER
DEPARTMENT
EMPLOYEE
EMPLOYEE_PROJECTJOB
PHONE_LIST
PROJECT
PROJ_DEPT_BUDGETSALARY_HISTORY
SALES
参照
SHOW CHECK JOB;
CHECK (min_salary < max_salary)
SHOW TABLES
SHOW DATABASE
現在のデータベースに関する情報を表示します。
構文
SHOW [DATABASE | DB];
説明
SHOW DATABASE は、現在のデータベースのファイル名、ページサイズ、アロケーショ
ン、およびスイープ間隔を表示します。
SHOW DATABASE の出力は、データ定義の検証やデータベースの管理に使用されます。た
とえば、バックアップおよびリストアのユーティリティを使用して、ページサイズの変更
や複数のファイル間でのページの再割り当てを行ったり、データベースのセキュリティ
ユーティリティを使ってスイープ間隔を変更します。
SHOW DATABASE には短縮形 SHOW DB があります。
例
次の例では、データベースに接続してそれに関する情報を表示しています。
CONNECT 'employee.ib';
Database: employee.ib
SHOW DB;
Database: employee.ib
Owner:SYSDBA
PAGE_SIZE 4096
Number of DB pages allocated = 422
第 11 章 対話型クエリー
11-45
isql コマンドリファレンス
Sweep interval = 20000
SHOW DOMAINS
すべてのドメインを一覧したり、指定されたドメインに関する情報を表示します。
構文
SHOW {DOMAINS | DOMAIN name};
引数
説明
name
現在のデータベースにおける既存ドメイン名
オプション
既存ドメインの一覧を表示するには、ドメイン名を指定しないで SHOW DOMAINS を使
用します。SHOW DOMAIN name は、現在のデータベースにでの指定されたドメイン情報
を表示します。出力には、ドメインのデータ型、デフォルト値、および定義済みの CHECK
制約が含まれます。表示されるのは、ユーザー定義のメタデータだけです。
例
次の例では、すべてのドメインを一覧してから、SALARY というドメインの定義を表示し
ます。
SHOW DOMAINS;
FIRSTNAME
PHONENUMBER
ADDRESSLINE
DEPTNO
CUSTNO
JOBGRADE
BUDGET
PONUMBER
LASTNAME
COUNTRYNAME
EMPNO
PROJNO
JOBCODE
SALARY
PRODTYPE
SHOW DOMAIN SALARY;
SALARY
NUMERIC(15, 2) Nullable
DEFAULT 0
CHECK (VALUE > 0)
SHOW EXCEPTIONS
すべての例外を一覧したり、指定された例外のテキストを表示します。
構文
説明
SHOW {EXCEPTIONS | EXCEPTION name};
引数
説明
name
現在のデータベースにおける既存の例外の名前
SHOW EXCEPTION は、例外の一覧をアルファベット順に表示します。 また、SHOW
EXCEPTION name は、指定した例外のテキストを表示します。
11-46 操 作 ガ イ ド
isql コマンドリファレンス
例
現在のデータベースに対して定義されているすべての例外を一覧するには、次のように入
力します。
SHOW EXCEPTIONS;
Exception Name Used by, Type
================== ========================================
UNKNOWN_EMP_ID ADD_EMP_PROJ, Stored procedure
Invalid employee number or project ID.
. . .
特定の例外に対するメッセージおよびそれを使用するプロシージャまたはトリガーを一覧
にするには、次のように例外名を入力します。
SHOW EXCEPTION CUSTOMER_CHECK;
Exception Name
Used by, Type
=========================== =======================================
CUSTOMER_CHECK
SHIP_ORDER, Stored procedure
Overdue balance -- can’t ship.
SHOW FILTERS
BLOB フィルタのすべてを一覧するか、または指定されたフィルタについての情報を表示し
ます。
構文
オプション
例
SHOW {FILTERS | FILTER name};
引数
説明
name
現在のデータベースにある既存 BLOB フィルタの名前
既存フィルタの一覧を表示するには SHOW FILTERS を使用します。SHOW FILTER name
は、現在のデータベースにおける指定のフィルタについての情報を表示します。出力には、
事前に DECLARE FILTER 文で定義されている情報を始め、入力サブタイプ、出力サブタ
イプ、モジュール(またはライブラリ)名、およびエントリポイント名が含まれます。
次の例では、すべてのフィルタを一覧して、次に DESC_FILTER というフィルタの定義を
表示しています。
SHOW FILTERS;
DESC_FILTER
SHOW FILTER DESC_FILTER;
BLOB Filter:DESC_FILTER
Input subtype: 1 Output subtype -4
Filter library is: desc_filter
Entry point is: FILTERLIB
第 11 章 対話型クエリー
11-47
isql コマンドリファレンス
SHOW FUNCTIONS
データベース内で定義されているすべてのユーザー定義関数(UDF)を一覧するか、また
は指定された UDF についての情報を表示します。
構文
SHOW {FUNCTIONS | FUNCTION name};
引数
説明
name
現在のデータベースにおける既存 UDF の名前
オプション
データベースで定義されている関数の一覧を表示するには、SHOW FUNCTIONS を使用し
ます。現在のデータベースにある特定の関数についての情報を表示するには、SHOW
FUNCTION function_name を使用します。DECLARE EXTERNAL FUNCTION 文で以前に定
義された情報 (関数と関数ライブラリの名前、エントリポイントの名前、戻り値と入力引
数のデータ型)が出力されます。
例
次の UNIX の例では、すべての UDF を表示してから、MAXNUM() という関数の定義を表
示しています。
SHOW FUNCTIONS;
ABS
MAXNUM
TIME
UPPER_NON_C
UPPER
SHOW FUNCTION maxnum;
Function MAXNUM:
Function library is /usr/InterBase/lib/gdsfunc.so
Entry point is FN_MAX
Returns BY VALUE DOUBLE PRECISION
Argument 1: DOUBLE PRECISION
Argument 2: DOUBLE PRECISION
SHOW GENERATORS
すべてのジェネレータを一覧するか、または指定されたジェネレータについての情報を表
示します。
構文
説明
SHOW {GENERATORS | GENERATOR name};
引数
説明
name
現在のデータベースにおける既存ジェネレータの名前
既存のジェネレータを一覧するには、SHOW
GENERATORS
を使用します。 SHOW
GENERATOR name を使用すると、現在のデータベースにおける指定のジェネレータについての
情報が表示されます。出力にはジェネレータの名前とその次の値が含まれます。
11-48 操 作 ガ イ ド
isql コマンドリファレンス
SHOW GENERATOR の短縮形は SHOW GEN で、両者は同じものです。
例
次の例では、すべてのジェネレータを一覧してから、さらに EMP_NO_GEN についての情
報を表示します。
SHOW GENERATORS;
Generator EMP_NO_GEN, Next value: 146
Generator CUST_NO_GEN, Next value: 1016
SHOW GENERATOR EMP_NO_GEN;
Generator EMP_NO_GEN, Next value: 146
SHOW GRANT
データベースオブジェクトの権限を表示します。
構文
説明
SHOW GRANT object;
引数
説明
object
現在のデータベースにおける既存のテーブル、ビュー、またはプロシージャの
名前
SHOW GRANT は、指定されたテーブル、ビュー、またはプロシージャに対して定義され
ている権限を表示します。許可されている権限としては、DELETE、EXECUTE、INSERT、
SELECT、UPDATE、ALL があります。権限を変更するには、SQL 文の GRANT または
REVOKE を使用します。
SHOW GRANT を使用する前に、使用可能なデータベースオブジェクトを一覧で確認でき
ます。既存のプロシージャを一覧するには SHOW PROCEDURES、既存のテーブルを一覧す
るには SHOW TABLES、既存のビューを一覧するには SHOW VIEWS をそれぞれ使用してく
ださい。
例
テーブル JOB の GRANT 特権を表示するには、次のように入力します。
SHOW GRANT JOB;
GRANT SELECT ON JOB TO ALL
GRANT DELETE, INSERT, SELECT, UPDATE ON JOB TO MANAGER
また SHOW GRANT は、ロールのメンバーを表示することもできます。
参照
SHOW GRANT DOITALL;
GRANT DOITALL TO SOCKS
SHOW PROCEDURES, SHOW TABLES, SHOW VIEWS
第 11 章 対話型クエリー
11-49
isql コマンドリファレンス
SHOW INDEX
指定のインデックス、指定のテーブル、または現在のデータベースにおけるすべてのテー
ブルに対するインデックス情報を表示します。
構文
説明
SHOW {INDICES | INDEX {index | table} };
引数
説明
index
現在のデータベースにおける既存のインデックス名
table
現在のデータベースにある既存のテーブル名
SHOW INDEX は、インデックス名、インデックスタイプ(たとえば、UNIQUE や DESC な
ど)、およびインデックスが定義されている列を表示します。
引数 index を指定すると、SHOW INDEX はそのインデックスに対する情報だけを表示しま
す。また table を指定すると、SHOW INDEX は指定されたテーブル内の全インデックスに対
する情報を表示します。既存のテーブルを表示するには、SHOW TABLES を使用してくだ
さい。引数が何も指定されていないときは、SHOW INDEX は現在のデータベースにおける
全インデックスの情報を表示します。
SHOW INDEX には短縮形 SHOW IND があります。SHOW INDICES も SHOW INDEX と同
じ意味です。SHOW INDEXES はサポートされていません。
例
employee.ib というデータベースのインデックスを表示するには、次のように入力します。
SHOW INDEX;
RDB$PRIMARY1 UNIQUE INDEX ON COUNTRY(COUNTRY)
CUSTNAMEX INDEX ON CUSTOMER(CUSTOMER)
CUSTREGION INDEX ON CUSTOMER(COUNTRY, CITY)
RDB$FOREIGN23 INDEX ON CUSTOMER(COUNTRY)
. . .
SALES というテーブルのインデックス情報を表示するには、次のように入力します。
参照
SHOW IND SALES;
NEEDX INDEX ON SALES(DATE_NEEDED)
QTYX DESCENDING INDEX ON SALES(ITEM_TYPE, QTY_ORDERED)
RDB$FOREIGN25 INDEX ON SALES(CUST_NO)
RDB$FOREIGN26 INDEX ON SALES(SALES_REP)
RDB$PRIMARY24 UNIQUE INDEX ON SALES(PO_NUMBER)
SALESTATX INDEX ON SALES(ORDER_STATUS, PAID)
SHOW TABLES
SHOW PROCEDURES
全プロシージャを一覧するか、指定のプロシージャのテキストを表示します。
構文
SHOW {PROCEDURES | PROCEDURE name};
11-50 操 作 ガ イ ド
isql コマンドリファレンス
説明
引数
説明
name
現在のデータベースにおける既存プロシージャの名前
SHOW PROCEDURES は、アルファベット順にプロシージャを一覧します。プロシージャ
が依存するデータベースオブジェクトも一緒に表示されます。依存しているプロシージャ
を持ったデータベースオブジェクトを削除することはできません。isql エラーを避けるた
めに、データベースオブジェクトを削除する前に DROP PROCEDURE を使ってプロシー
ジャを削除してください。
SHOW PROCEDURE name は、指定のプロシージャのテキストとパラメータを表示します。
SHOW PROCEDURE の短縮形は SHOW PROC で、両者は同じものです。
例
現在のデータベースに対して定義されている全プロシージャを一覧するには、次のように
入力します。
SHOW PROCEDURES;
Procedure Name
Dependency
Type
================= ==================== =======
ADD_EMP_PROJ
EMPLOYEE_PROJECT
Table
UNKNOWN_EMP_ID
Exception
DELETE_EMPLOYEE
DEPARTMENT
Table
EMPLOYEE
Table
EMPLOYEE_PROJECT
Table
PROJECT
Table
REASSIGN_SALES
Exception
SALARY_HISTORY
Table
SALES
Table
DEPT_BUDGET
DEPARTMENT
Table
DEPT_BUDGET
Procedure
. . .
ADD_EMP_PROJ というプロシージャのテキストを表示するには、次のように入力します。
SHOW PROC ADD_EMP_PROJ;
Procedure text:
=================================================================
BEGIN
BEGIN
INSERT INTO EMPLOYEE_PROJECT (EMP_NO, PROJ_ID) VALUES (:emp_no,
:proj_id);
WHEN SQLCODE -530 DO
EXCEPTION UNKNOWN_EMP_ID;
END
RETURN;
END
=================================================================
第 11 章 対話型クエリー
11-51
isql コマンドリファレンス
Parameters:
EMP_NO INPUT SMALLINT
PROJ_ID INPUT CHAR(5)
SHOW ROLES
現在のデータベース対する SQL ロールの名前を表示します。
構文
SHOW {ROLES | ROLE}
説明
SHOW ROLES は現在のデータベースに対して定義されているすべてのロール名を表示し
ます。ロールのメンバーユーザーを表示するには、SHOW GRANT rolename を使用します。
例
参照
SHOW ROLES;
DOITALL
DONOTHING
DOONETHING DOSOMETHING
SHOW GRANT
SHOW SYSTEM
現在のデータベースのシステムテーブルおよびシステムビューの名前を表示します。
構文
SHOW SYSTEM [TABLES];
説明
SHOW SYSTEM は、現在のデータベースにおけるシステムテーブルおよびシステムビュー
を一覧します。SHOW SYSTEM は、オプションのキーワード TABLES を受け付けます。こ
のキーワードは、コマンドの動作には影響しません。
SHOW SYSTEM の短縮形は SHOW SYS で、両者は同じものです。
例
現在のデータベースのシステムテーブルおよびシステムビューを一覧するには、次のよう
に入力します。
SHOW SYS;
RDB$CHARACTER_SETS
RDB$CHECK_CONSTRAINTS
RDB$COLLATIONS
RDB$DATABASE
RDB$DEPENDENCIES
RDB$EXCEPTIONS
RDB$FIELDS
RDB$FIELD_DIMENSIONS
RDB$FILES
RDB$FILTERS
RDB$FORMATS
RDB$FUNCTIONS
RDB$FUNCTION_ARGUMENTS RDB$GENERATORS
RDB$INDEX_SEGMENTS
RDB$INDICES
RDB$LOG_FILES
RDB$PAGES
RDB$PROCEDURES
RDB$PROCEDURE_PARAMETERS
RDB$REF_CONSTRAINTS
RDB$RELATIONS
RDB$RELATION_CONSTRAINTS RDB$RELATION_FIELDS
RDB$ROLES
RDB$SECURITY_CLASSES
RDB$TRANSACTIONS
RDB$TRIGGERS
11-52 操 作 ガ イ ド
isql コマンドリファレンス
RDB$TRIGGER_MESSAGES
RDB$USER_PRIVILEGES
参照
RDB$TYPES
RDB$VIEW_RELATIONS
システムテーブルの詳細は、『言語リファレンス』を参照してください。
SHOW TABLES
テーブルまたはビューのすべてを一覧するか、指定されたテーブルまたはビューについて
の情報を表示します。
構文
説明
SHOW {TABLES | TABLE name};
引数
説明
name
現在のデータベースにおける既存テーブルまたは既存ビューの名前
SHOW TABLES は、現在のデータベースにおけるテーブルとビューをアルファベット順に
一覧します。一覧されるオブジェクトのどれがテーブルではなく、ビューなのかを知るに
は、SHOW VIEWS を使用してください。
SHOW TABLE name は、指定されたオブジェクトについての情報を表示します。オブジェク
トがテーブルの場合、コマンド出力は列名と定義、PRIMARY KEY(主キー)、FOREIGN
、CHECK 制約、トリガーを一覧します。オブジェクトがビューの場合、コ
KEY(外部キー)
マンド出力は列名と定義、およびビューが基づいている SELECT 文を一覧します。
例
現在のデータベースに対して定義されているすべてのテーブルまたはビューを一覧するに
は、次のように入力します。
SHOW TABLES;
COUNTRY
CUSTOMER
DEPARTMENT
EMPLOYEE
EMPLOYEE_PROJECT JOB
PHONE_LIST
PROJECT
PROJ_DEPT_BUDGET SALARY_HISTORY
SALES
COUNTRY というテーブルの定義を表示するには、次のように入力します。
参照
SHOW TABLE COUNTRY;
COUNTRY (COUNTRYNAME) VARCHAR(15) NOT NULL
CURRENCY VARCHAR(10) NOT NULL
PRIMARY KEY (COUNTRY)
SHOW VIEWS
SHOW TRIGGERS
全トリガーを一覧するか、または指定されたトリガーについての情報を表示します。
構文
SHOW {TRIGGERS | TRIGGER name};
第 11 章 対話型クエリー
11-53
isql コマンドリファレンス
説明
引数
説明
name
現在のデータベースにおける既存トリガーの名前
SHOW TRIGGERS は、データベースにおける全トリガーを表示します。これらのトリガー
が依存しているテーブルも一緒に表示されます。SHOW TRIGGER name は、指定されたト
リガーの名前、シーケンス、タイプ、起動状態、および定義を表示します。
SHOW TRIGGER の短縮形は SHOW TRIG で、両者は同じものです。
依存しているトリガーを持ったテーブルを削除することはできません。isql エラーを避け
るために、テーブルを削除する前に(DROP TRIGGER を使って)トリガーを削除してくだ
さい。
例
現在のデータベースに対して定義されている全トリガーを一覧するには、次のように入力
します。
SHOW TRIGGERS;
Table name
===========
EMPLOYEE
EMPLOYEE
CUSTOMER
SALES
Trigger name
============
SET_EMP_NO
SAVE_SALARY_CHANGE
SET_CUST_NO
POST_NEW_ORDER
SET_CUST_NO というトリガーについての情報を表示するには、次のように入力します。
SHOW TRIG SET_CUST_NO;
Triggers:
SET_CUST_NO, Sequence: 0, Type: BEFORE INSERT, Active
AS
BEGIN
new.cust_no = gen_id(cust_no_gen, 1);
END
SHOW VERSION
ソフトウェアのバージョンについての情報を表示します。
構文
SHOW VERSION;
説明
SHOW VERSION は、isql、InterBase エンジン、およびセッションが接続しているデータ
ベースのオンディスク構造体(ODS)のバージョンを表示します。
ある種のタスクは、InterBase の旧バージョンを使って作成されたデータベースで実行する
と、予想どおりに動作しない場合があります。実行中のソフトウェアのバージョンを調べる
には、SHOW VERSION を使用してください。
SHOW VERSION の短縮形は SHOW VER で、両者は同じものです。
例
ソフトウェアバージョンを表示するには、次のように入力します。
11-54 操 作 ガ イ ド
SQL スクリプトの使用
参照
SQL> SHOW VERSION;
isql Version: WI-V7.0.0.168
InterBase/x86/Windows NT (access method), version "WI-V7.0.0.168"
on disk structure version 11.0
SHOW DATABASE
SHOW VIEWS
すべてのビューを一覧するか、または指定されたビューについての情報を表示します。
構文
説明
例
参照
SHOW {VIEWS | VIEW name};
引数
説明
name
現在のデータベースにおける既存ビューの名前
SHOW VIEWS は、現在のデータベースにおけるすべてのビューをアルファベット順に一覧
します。SHOW VIEW name は、指定されたビューについての情報を表示します。
現在のデータベースに対して定義されているすべてのビューを一覧するには、次のように
入力します。
SHOW VIEWS;
PHONE_LIST
SHOW TABLES
SQL スクリプトの使用
スクリプトファイルを使用する基本的な手順は次のとおりです。
1
2
3
テキストエディタを使ってスクリプトファイルを作成する
isql または IBConsole でファイルを実行する
出力結果を表示し、データベースの変更を確認する
isql スクリプトの作成
最終ファイル形式が「書式なしテキスト」
(ASCII)であれば、SQL スクリプトファイルの
作成にテキストエディタを使用できます。
各 SQL スクリプトファイルの先頭には、スクリプトの操作対象となるデータベースを指定
する CREATE DATABASE 文または CONNECT 文(ユーザー名とパスワードを含む)がな
ければなりません。CONNECT 文または CREATE 文には、完全なデータベースファイル名
とディレクトリパスが含まれていなければなりません。
メモ
CREATE DATABASE 文にはダイアレクトを設定できません。ダイアレクト 3 のデータベー
スを作成するには、オプション -r 3 で isql を実行します。
第 11 章 対話型クエリー
11-55
SQL スクリプトには、次のどの項目を含めることもできます。
• 『言語リファレンス』に記述されている SQL 文
• この章に記述されている isql の SET コマンド
• コメント
スクリプト内の各 SQL 文は、ターミネータで終了する必要があります。
メモ
ターミネータに続いて同一の行にテキストがある場合は SQL 文はエラーとなりますが、エ
ラーの表示は行われません。スペースとコメントはターミネータの後にあってもかまいま
せんが、他の文があってはなりません。
各 SQL スクリプトファイルは、最後の COMMIT 以降に加えられたデータベース変更をコ
ミットする場合は EXIT、スクリプトによる変更をロールバックする場合は QUIT のどちら
かで終了します。何も指定しないと、デフォルトでは、データベースに加えた変更はコミッ
トされます。
CONNECT および CREATE DATABASE の構文の詳細は、
『言語リファレンス』を参照して
ください。
SQL スクリプトの実行
次の手順にしたがうと、指定されたスクリプトファイル内の SQL 文すべてを実行します。
スクリプトの内容は SQL 入力領域には表示されません。
IBConsole による SQL スクリプトの実行
1
SQL ウィンドウを表示していない場合は、
[対話型 SQL の起動]ツールバーボタンをク
リックするか、[ツール|対話型 SQL]を選択します。
2
SQL スクリプトを現在接続しているデータベース上で実行しない場合は、コメントに
なっていない有効な CONNECT または CREATE DATABASE 文でスクリプトファイルが
開始されていることを確認します。
3 [クエリー| SQL スクリプトの読み込み]を選択します。
4 ファイルを開くダイアログで実行するスクリプトファイル名を入力または選択して、
[開く]をクリックしてスクリプトファイルを SQL 入力領域に読み込みます。
5 [実行]ツールバーボタンをクリックするか、[クエリー|実行]を選択します。
IBConsole でエラーが発生すると、エラー内容を示した情報ダイアログが表示されます。
IBConsole がスクリプトの実行を終了すると、
スクリプトの結果は SQL 出力ウィンドウに表
示されます。
スクリプトの実行後、isql セッションのすべての設定は前のデータベース接続(もしあれ
ば)とともにスクリプト実行前の状態に復元されます。つまり、スクリプト内の isql の SET
コマンドは、スクリプトの実行中、その isql セッションだけに影響します。
11-56 操 作 ガ イ ド
SQL スクリプトの使用
コマンドライン isql ツールによる SQL スクリプトの実行
isql の -input オプションを使用して、任意のコンソールプロンプトからスクリプトを実行
でき ま す。フル パ スと フ ァイル名を指定します。次の例では、スクリプトに CREATE
DATABASE 文がありません。これは既存のデータベースに対して実行されます。
isql database_name -input filename
次の例は、データベースを作成するスクリプトを実行します。
isql -input filename
すでにデータベースに接続しているアクティブな isql セッションの間に、INPUT コマンド
を使用して、そのデータベースに SQL スクリプトを実行します。
SQL> INPUT filename
isql の実行の詳細は、11-21 ページの「isql の起動」を参照してください。
SQL スクリプトの作業のコミット
CREATE 文や ALTER 文などのデータ定義(DDL)文によるデータベース変更は、デフォル
トで自動的にコミットされます。これは、各 DDL 文が実行されると同時にデータベースの
他ユーザーから変更後のデータが見えることを意味します。スクリプトの DDL 自動コミッ
トをオフにするには、SET AUTODDL OFF を使用するか、[WISQL の設定]ダイアログで
設定します。詳細は、4-9 ページの「InterBase Manager での InterBase の起動と停
止」を参照してください。
メモ
AUTODDL OFF の状態でテーブルなどのデータベースオブジェクトを作成する場合は、
SQL スクリプト内の各 CREATE 文または関連する文のまとまりの後に COMMIT 文を置く
ことをお勧めします。これにより、データベースを使用する他のユーザーがオブジェクト
をすぐに表示できます。
INSERT や UPDATE などのデータ操作文(DML)によるデータベースの変更は、コミット
されるまでは確定しません。スクリプト内で COMMIT を使って変更をコミットします。最
後の COMMIT 以降にデータベースに加えられたすべての変更を元に戻すには、ROLLBACK
を使用します。COMMIT および ROLLBACK の構文については、
『言語リファレンス』を参
照してください。
isql スクリプトでのコメントの追加
isql スクリプトでは、以下のように C プログラムとまったく同じようにコメントを記述で
きます。
/* コメント */
コメントは、SQL 文または isql コマンドと同一の行に置くこともでき、コメントの長さに
制限はありません。必ずコメントの最初は /* で始め、最後に */ で閉じます。
第 11 章 対話型クエリー
11-57
SQL スクリプトの使用
11-58 操 作 ガ イ ド
第
章
データベースとサーバーのパ
フォーマンス
第 12 章
この章では、高速で最も効率がよくなる InterBase クライアント / サーバーシステムの設計
と操作に関するテクニックを説明します。
この章で説明することは次のとおりです。
• ハードウェア構成
• オペレーティングシステムの環境設定
• ネットワーク設定
• データベースプロパティ
• データベース設計の基本
• データベースのチューニングタスク
• アプリケーションの設計テクニック
• アプリケーション開発ツール
はじめに
データベースがアプリケーションの一部として機能するために最も重要な条件の 1 つは、
できる限り速くデータを格納して検索することです。その他のソフトウェア開発テクニッ
クと同様に、指定されたソフトウェアソリューションを実行するには、いくつかの方法が
あります。最も効率的に動作して高いパフォーマンスを得られるような設計を選択するに
は、知識と経験が重要になります。
プロジェクトごとに問題があり、特定のソリューションが必要になってきます。この章では
ユーザー独自のソフトウェア技術の習得について説明します。これには、特定のプロジェ
クトに対する最善の設計を実現するための注意深い解析、テスト、実験が含まれます。
第 12 章 データベースとサーバーのパフォーマンス
12-1
ハードウェア構成
ハードウェア構成
ここでは、プラットフォームのハードウェアサイズのガイドラインを示します。推奨事項
は、主にサーバープラットフォームの必須条件に関連したものです。
プロセッサ速度の選択
データベースシステムのパフォーマンスは、本質的には I/O の帯域やネットワークの帯域
に関係します。アプリケーションは、計算を集中的に行うかわりに、I/O やネットワーク動
作で待ちが発生します。速い CPU クロック速度は一定のパフォーマンス向上効果はありま
すが、CPU クロック速度が 10% 増すよりもサーバーパフォーマンスに関しては、RAM 環
境設定、I/O システム、またはネットワークハードウェアのようなその他のハードウェア
要因の方が重要です。
クライアントプラットフォームに関しては CPU クロック速度は重要です。データを使用す
るアプリケーションは、CPU を多く消費するデータ計算解析を実行したり、手間のかかる
計算であるデータの複雑な視覚化のレンダリングを行ったりするからです。
サーバーに対して特定の CPU クロック速度を推奨することは、このマニュアルを読むころ
には情報が最新のものではなくなってしまうことがあるため、適切ではありません。最新の
CPU ハードウェアでは値段とパフォーマンスの曲線は急カーブを描くので、少しでも速い
CPU を手に入れる利点を検討してください。
メモリのサイズ変更
高いパフォーマンスを得るには、十分な量の物理メモリをサーバーに装備しておくことが
重要です。
ほとんどのオペレーティングシステムで最小である RAM 32MB を持つハードウェア構成
ならば InterBase は機能することができますが、サーバーシステムでは少なくとも 64MB の
RAM を用意することをお勧めします。大きな負荷を持つデータベースサーバーは、RAM の
影響を受けます。
ibserver 実行形式と各接続ユーザーの基本的な RAM 要求は低く、約 1500KB で、各クライ
アントごとに 28KB 増加します。ibserver は接続先の各データベース用のメタデータとデー
タをキャッシュします。一時的なソートのようなユーザー操作は、メモリをさらに消費しま
す。同時クエリーを実行する多くのクライアントを持つ、負荷の大きいサーバーの場合は、
最大で RAM が 256MB 必要です。
Windows では、タスクマネージャ、パフォーマンスモニタ、およびその他のツールを使っ
て ibserver のリソースの使用を監視できます。UNIX と Linux サーバーにも、同じようなリ
ソース消費レポートツールがあります。ページ違反が多く発生しているシステムには、
RAM を追加することを検討してください。
12-2 操 作 ガ イ ド
ハードウェア構成
パフォーマンスの高い I/O サブシステムの使用
特に、最近の記憶装置コストの低下を考慮すると、複数のユーザーが使用するデータベー
スサーバーのハードディスクドライブは、節約すべき場所ではありません。比較的ハイエン
ドの I/O システムを構成することは、パフォーマンス向上の面で費用効率の高い方法です。
パフォーマンスが高いサーバーマシンでも、ディスクサブシステムの速度が低いと、それ
がサーバーシステムの弱点となる場合がよくあります。最高速の CPU と最大容量のメモリ
はパフォーマンスに大きく寄与します。ただし、安価なディスク I/O インターフェイスに
よってデータ転送レートが制限されてしまうと、高価なコンポーネントに費やしたコスト
が無駄になってしまいます。
このマニュアルで特定の構成を推奨するのは適切ではありません。技術の進歩は速いので、
ここで推奨事項を記述しても古い情報となってしまうこともあります。サーバープラット
フォームのマシンを決定するときに、使用可能な最善のハードウェアソリューションを探
してください。
基本的なガイドラインを以下に示します。
• アドバンスド SCSI 技術は高い I/O スループットを提供します。次のグラフは、異なるディ
スクインターフェイスの相対的な最大スループットを示しています。
図 12.1 ディスク I/O インターフェイスの外部転送レートの比較
Ultra3 SCSI 160MB/sec
Ultra2 SCSI 80MB/sec
Ultra Wide SCSI 40MB/sec
Ultra ATA (DMA-33) 33MB/sec
Fast Wide/Ultra SCSI 20MB/sec
ATA PIO mode 4 (EIDE) 16.6MB/sec
ATA PIO mode 3 (EIDE) 11.1MB/sec
Fast/Wide SCSI-2 10MB/sec
ATA PIO mode 2 8.3MB/sec
SCSI-2 5MB/sec
IDE 2.5MB/sec
• 通常、外部インターフェイスのキャパシティは、個々のデバイスの内部または継続的な転
大容量 I/O インターフェ
送レートを超えます。複数のディスクを使用するシステムだけが、
イスを十分に利用できます。
• バスマスター I/O コントローラは CPU リソースの使用が少なくて済みます。これは、I/O
が集中するサーバーマシンでは特に重要です。一般に SCSI はバスマスター I/O で、新しい
PCI EIDE インターフェイスもバスマスター I/O です。IDE はバスマスター I/O ではありま
せん。
第 12 章 データベースとサーバーのパフォーマンス
12-3
ハードウェア構成
• ビルトインキャッシュメモリを持つディスクコントローラを使用します。 コントローラの
キャッシュにより、オペレーティングシステムがディスクキャッシュ用にシステムの RAM
を使用する必要が軽減されます。
• 指定サイズのすべてのディスクが同じように動作するとは見なさないでください。個別の
テストラボでパフォーマンスレートを調べてください。
I/O の分散
ディスクデバイス I/O は、物理的なメモリアクセスや CPU サイクルより処理が遅くなりま
す。ディスクデバイスが要求されたデータをシークするときに遅れが生じます。アプリ
ケーションが要求したデータがディスクデバイスから取り出されるのを待つ時間を、アプ
リケーションがその他のタスクを実行する時間にすれば効率的です。これを行う適切な方
法の 1 つは、複数デバイスにわたって複数のデータ要求を出すことです。あるディスクが
データを返す準備を行っている間に、アプリケーションは別のディスクに別のデータセッ
トのシークを開始するように要求します。これを、分散 I/O またはパラレル I/O と言いま
す。
ここでは、InterBase に複数のディスクデバイスで I/O を分散させる方法について説明しま
す。
RAID の使用
RAID を使用すると、パフォーマンスの改善が 10 倍まで達成されることがあります。
RAID(redundant array of inexpensive disks)は、物理的に複数のディスクデバイスを使っ
てデータを格納することでパフォーマンスと信頼性を高めることを目的として設計された
ハードウェア設計です。RAID はオペレーティングシステムまたはハードウェアのレベル
で実装されているため、RAID の使用はソフトウェアアプリケーションからは透過的です。
InterBase はオペレーティングシステム I/O インターフェイスを使用するので、その他のア
プリケーションソフトウェアと同じように RAID をサポートします。
ディスクストライピング(Disk Striping、RAID レベル 0、3、5 を含む)は、複数のディス
クにわたって I/O を分散させることでパフォーマンスを向上させます。
ハードウェア RAID は、ソフトウェア RAID やソフトウェアディスクのミラーリングより速
度が速くなります。ソフトウェアで実装された RAID は、ハードディスク損傷の保護機能だ
けを提供しています。実際の処理は、RAID が実装されていない場合より遅くなります。
データベースファイルの複数ディスクの使用
RAID と同様に、マルチファイルの InterBase データベースのファイルを物理的に複数の
ディスクドライブに分散できます。
たとえば、物理的に 4 つのディスク(C:、D:、E:、F:)を持つサーバーで 10GB のデータベー
スの場合、次のデータベース作成文を使ってパラレル I/O の利点を活かしたデータベース
を作成できます。
CREATE DATABASE 'C:¥data¥bigdata1.ib' PAGE_SIZE 4096
FILE 'D:¥data¥bigdata2.ib' STARTING AT PAGE 1000000
FILE 'E:¥data¥bigdata3.ib' STARTING AT PAGE 2000000
12-4 操 作 ガ イ ド
ハードウェア構成
FILE 'F:¥data¥bigdata4.ib' STARTING AT PAGE 3000000;
複数のディスクコントローラの使用
I/O バスがいっぱいになるくらい複数のディスク上でディスクアクティビティがある場合
は、サーバーにディスクコントローラを複数装備させ、複数のドライバをできる限り均等
にコントローラに接続します。
たとえば、データベースファイルを持つディスクドライブが 16 あるとします。この場合は、
4 つのディスクコントローラを使用して、各コントローラに 4 つのディスクを接続すると有
効です。
専用ドライブの作成
データベースサーバーは、オペレーティングシステムの仮想メモリページファイルと一時
ディスク領域の両方を頻繁に使用します。可能ならば、サーバーに複数のディスクを装備し
て、仮想メモリファイル、一時ディレクトリ、データベースファイルを物理的に異なるディ
スクデバイス上に設定します。これにより、パラレル I/O を使用でき、最も効率的な運用
が可能になります。
たとえば Windows では、オペレーティングシステムのファイルと pagefile.sys をドライブ C:、
一時ディレクトリと頻繁に使用しないファイルをドライブ D:、データベースファイルをド
ライブ E: から先に配置できます。
仮想メモリファイルの位置は、
[コントロールパネル|システム|パフォーマンス|仮想メ
モリ]で変更します。
InterBase 一時ディレクトリの位置を変更するには、システム環境変数 InterBase_TMP を指定する
か、ibconfig ファイルを変更して TMP_DIRECTORY エントリの値として適切なディレクトリパスを
指定します(4-18 ページの「ソートファイルの設定」を参照)
。
広帯域ネットワークシステムの使用
クライアント / サーバーシステムの場合、広帯域ネットワークをサポートするハードウェ
アは I/O キャパシティと同じくらい重要です。多数のユーザーが同時にネットワークを使
用する場合は、ネットワークの速度がパフォーマンスのボトルネックになることがありま
す。
安価な 10 Base-T イーサネットが一般的ですが、この技術は最小限の LAN 設定でしかあり
ません。高速なネットワークのためには、少なくとも 100 Base-T の使用をお勧めします。次
のグラフは、さまざまなネットワークインターフェイス技術の相対的な帯域幅の比較を示
しています。
第 12 章 データベースとサーバーのパフォーマンス
12-5
ハードウェア構成
図 12.2 ネットワークインスタンスの帯域幅の比較
ギガビットイーサネット 1000Mbps
Fast イーサネット 100Mbps
T-3 (DS3) 43Mbps
DSL 32Mbps(downstream)/1Mbps(upstream)
イーサネット 10 Base-T 10Mbps
T-1 1.544Mbps
ISDN 128Kbps
アナログ回線 PPP 53Kbps
ギガビットイーサネットの最大帯域幅は、上のグラフのスケールを超えています。
このマニュアルの作成時点では、ほとんどのギガビットイーサネットネットワークのイン
ターフェイスカード(NIC)は、600 ~ 700Mbpa の帯域幅しか提供しません。スイッチ、ルー
タ、およびリピータの容量も制限されています。この技術は今後引き続き改善されていくで
しょう。
レビューと実験を行って環境内のすべてのネットワークハードウェアの実際のスループッ
トを把握することをお勧めします。最も遅いコンポーネントが実際のスループットを決め
ています。
ヒント
意外にもネットワークケーブルが欠点を大きくしていることがあります。その結果、パケッ
トの喪失がときどき発生します。オペレーティングシステムは、自動的にパケットを再度
送信することでこれを補います。これは、不可解なネットワークパフォーマンスの悪化の原
因となります。ネットワークケーブルを定期的に検査してください。欠陥のあるケーブル
の交換は、ネットワークの効率的な動作を維持していくための、手間のかからない方法の
1 つです。
高速なバスの使用
バスは、I/O コントローラおよびネットワークインターフェイスハードウェアの両方でと
ても重要です。
12-6 操 作 ガ イ ド
オペレーティングシステムの環境設定
図 12.3 バステクノロジのスループットの比較
PCI 264Mbps
Microchannel 150+ Mbps
EISA 60+ Mbps
ISA 10Mbps
32 ビット全二重 PCI バスは最大 264Mbps のケーブルですが、実際の PCI カードの範囲は 40
~ 130Mbps です。
ヒント
統合 PCI ローカルバス上でコントローラを使用すると、マザーボードに差し込まれたペリ
フェラルカードより速くなります。
リンク集
• T10 Committee のホームページ
http://www.symbios.com/t10/
さまざまな記憶装置のインターフェイス技術についての情報を得るために便利です。
• PC Guide の Hard disk interface & configuration
http://www.pcguide.com/ref/hdd/if/index.htm
• The SCSI Trade Association
http://www.scsita.org
SCSI 技術と製品についてのニュースとベンダー情報が掲載されています。
• Gigabit Ethernet のホームページ
http://www.gigabit-ethernet.org/
• Fibre Channel のホームページ
http://www.fibrechannel.com/
Fibre Channel(FC-AL)は、ネットワーク、記憶装置、ビデオ伝送、クラスタリングに対す
る拡張バス機能です。
オペレーティングシステムの環境設定
サーバーのハードウェアを適切に設定できたら、サーバーパフォーマンスを上げるために
オペレーティングシステムの調整を行います。
第 12 章 データベースとサーバーのパフォーマンス
12-7
オペレーティングシステムの環境設定
スクリーンセーバーの無効化
スクリーンセーバーは、サーバーのパフォーマンスに重大な影響を与えます。通常、サー
バーはマシンルームに置かれますが、スクリーンセーバーのパフォーマンスへの影響は見
落とされがちです。スクリーンセーバーは、動作するために驚くほどの CPU リソースを必
要とし、これらのプログラムを 1 日中実行し続けるのです。
スクリーンセーバーは、データベース管理者がコンソールにログインして不可思議なパ
フォーマンスの低下を診断するときは、その性質上消え去ってしまいます。データベース管
理者がサーバーに接続するとサーバーはすぐに応答しますが、管理者がサーバーを離れる
と再び速度は低下します。
すべてのスクリーンセーバーが同じようにパフォーマンスを下げるとは限りません。
Windows の OpenGL スクリーンセーバーは、3 次元の影付きの形状をリアルタイムで描画
するため、浮動小数点計算を絶え間なく続けてます。このスクリーンセーバーは、システム
の CPU を 90% まで要求して、InterBase やその他のサービスの速度を通常の 1/10 にまで落
とす原因になる場合があります。
Windows の Marquee スクリーンセーバーは、ダメージを最小限に抑える方法の 1 つです。
特に、テキストがゆっくりと画面を通り抜けるように設定されている場合は、リソースの
使用が抑えられます。一部のシステム管理者は、マシンルームのすべての画面に Marquee を
設定して、各マシンのホスト名を表示するようにしています。これは画面上のマシン名のラ
ベルになります。
スクリーンセーバーは楽しみでもありますが、リソースはワークステーションのために
とっておくべきものです。マシンルームにあるサーバーは、ワークステーションとして使用
すべきものではありません。
アクセスしないことで起こるモニタの焼き付きを防ぐ必要がある場合は、省電力モードを
持つモニタである Energy Star を使用するとよいでしょう。設定された時間内にアクセスが
ない場合、省電力モードは画面を黒くします。このモードは焼き付けを防ぐだけでなく、電
力消費の節約にもなります。これは単純な黒のスクリーンセーバーのようですが、モニタは
ソフトウェアではなく、ハードウェアで処理されています。
最善の方法としては、使用しないときは単純にモニタの電源を切ることです。電源を切れ
ば、焼き付きを防ぎ、電力消費を抑え、マシンルームの熱を下げることができます。
コンソールのログイン
Windows データベースサーバー上では、コンソールにログインしたままの状態にしないで
ください。デスクトップがアイドリング状態でも、インターフェイスを維持するためだけに
マシンの CPU リソースを最大 30% まで使用することがあります。コンソールを使用しない
場合は、サーバーのコンソールからログアウトしてください。IBConsole を使用すると、サー
バーのコンソールにログインせずに、ほとんどの InterBase 保守とタスク監視を別のワーク
ステーションから行うことができます。
12-8 操 作 ガ イ ド
オペレーティングシステムの環境設定
一時ディレクトリのサイズ変更
一時ディレクトリ(4-17 ページの「一時ファイルの管理」を参照)を設定する場合、ディ
スクの空き領域が多い場所を選択します。インデックスの作成のような一部の処理では、
ソート処理用に多くの領域を使用することがあります。データベースの 2 倍の大きさの領
域を使用することさえあります。
仮想メモリページ違反を含む、一時領域が足りないことを、スラッシングといい、劇的な
速度低下の原因となる場合があります。その他の原因としては、サーバー上の InterBase.log
ファイルに書き込むメッセージに関連した一連の「I/O エラー」が考えられます。
専用サーバーの使用
ワークグループファイルとプリントサービスの両方に対して 1 つのサーバーをデータベー
スサーバーとして使用することは、ワークステーション上で他のユーザーにビデオゲーム
をさせるようなものです。これは、マシン本来の使用目的ではない上に、ワークステーショ
ンの速度を低下させます。
ファイルサーバーおよびプリントサーバーとして 1 つのセカンダリサーバーを使用して、
データベースサーバーには新しいマシンを使用します。これらのタスクの相対的なプライ
オリティにしたがって、交互に InterBase 用のセカンダリサーバーを使用します。データ
ベースサーバーは専用マシンが最速モデルではなくても、専用マシンを持つことで効率が
上がります。最も重要なサービスには、専用のハードウェアとして最高のマシンを指定して
ください。
パフォーマンスのプライオリティが高い場合、別の競合するサービスを供給するマシンに
RAM のようなリソースを増強するのではなく、専用マシンを購入する方が効率的です。
ハードウェアのコストと最速でマシンを使用できないことを比べてみてください。
同様に、データベースを専用ドライブに置くことは最善の方法です。専用ドライブに置け
ば、データベース I/O はオペレーティングシステムの仮想メモリページファイルやその他
のオペレーティングシステムの I/O と競合することはありません。詳細は、12-5 ページの
「専用ドライブの作成」を参照してください。
ネットワークアプリケーション用の Windows の最適化
Windows サーバーをネットワークアプリケーション向けに最適化することをお勧めしま
す。この設定を行わないと、毎分数秒ずつ InterBase の CPU 使用率にピークが現れます。
InterBase サーバーは、デフォルトではファイル共有サービスを優先するように設定されて
います。このサーバーの設定は、コントロールパネルの[ネットワーク|サービス|サー
バー]で変更できます。[最適化]パネルで、
[ネットワークアプリケーションのスループッ
トを最大にする]を選択します。
この変更により、その他のサービスだけでなく、InterBase のパフォーマンスも劇的に改善
されます。
第 12 章 データベースとサーバーのパフォーマンス
12-9
ネットワーク設定
Windows サーバーの注意点
Windows サーバーは、SMP マシンでのプロセスの分散を独特な方法で行います。プロセス
が一方の CPU で実行され、もう一方の CPU が比較的空いている場合、Windows NT は、負
荷が小さい CPU にプロセスのコンテキストを切り替えようとします。専用のデータベース
サーバーの場合は、ibserver プロセスだけが CPU リソースの主要な使用者になることが普
通です。このような場合でも、Windows は、プロセスのコンテキストをもう一方の CPU に
再割り当てしようとします。Windows が ibserver プロセスを空いている CPU に移すと、最
初の CPU の負荷が減ります。Windows サーバーはこれを検出して、ibserver をまた最初の
CPU に移そうとします。これで、2 番めの CPU の負荷が減ります。このような動作が繰り
返し行われて、CPU 間でプロセスを切り替えることによるオーバーヘッドがパフォーマン
スを低下させます。
解決策はいくつかあります。
• 別の CPU を使用するようなその他のタスクがある SMP サーバー上で ibserver を実行する。
• ibserver を単一 CPU マシンでのみ実行する。
• CPU アフィニティを ibserver プロセスに割り当てる。
a
b
c
タスクマネージャを起動します。
ibserver プロセスを強調表示します。
右クリックして、[関係の設定]をクリックし、[プロセッサの関係]ウィンドウを
表示します。
この方法は、ibserver をサービスではなく、アプリケーションとして実行する場合にのみ有
効です。InterBase をサービスとして実行する場合は、Windows API を使って ibserver プロ
セスの CPU アフィニティをプログラムで設定しなければなりません。
一部のオペレーティングシステムでは、RAM ディスクの使用により頻繁に使用されるファ
イルは強制的にメモリに格納されますが、その他のファイルのようにオープン / クローズ
はできます。Windows 上で RAM ディスクを使用することを考えている場合、Microsoft
Windows 用の RAM ディスクユーティリティは、ページングされたメモリを使って RAM
ディスクを割り当てるので注意してください。RAM ディスク自身は RAM からページアウ
トして、物理ディスク pagefile.sys に格納することができます。Windows 上で RAM ディスク
を使って高速のファイルシステムを構築することはできません。
ネットワーク設定
ここでは、ネットワーク設定を行う際に知っておくべきパフォーマンスについての事柄を
説明します。
ネットワークプロトコルの選択
InterBase は 2 つのプロトコルをサポートしています。TCP/IP は任意のサーバーへの接続に
使用され、NetBEUI は Windows サーバーへの接続に使用されます。詳細は、5-1 ページの
「ネットワークプロトコル」を参照してください。
12-10 操 作 ガ イ ド
ネットワーク設定
NetBEUI
ユーザー数が 20 より少ないネットワークでは、NetBEUI を使用しても大きなパフォーマン
スの損失はありません。さらに多くのユーザーが同時にネットワークにアクセスする場合
は、TCP/IP を使用します。
NetBEUI は、小さなローカルエリアネットワークで使用するために設計されたネットワー
クプロトコルです。通常は、ファイル共有サービスで使用されます。NetBEUI はコネクショ
ンレス型プロトコルで、パケットをネットワーク全体に配信します。これは、LAN 上の「ノ
イズ」の量を増やす原因にもなります。ノイズとは、特定のホストから見て、そのホストを
対象としていないネットワーク通信量のことです。多くのホストが存在する LAN では、
NetBEUI を有効にすると、ネットワークが混雑し、使用できる帯域幅が減る原因になりま
す。IT 専門家は、ほとんどの企業ネットワークで NetBEUI の使用を勧めていません。
TCP/IP
TCP/IP は、コネクション型プロトコルで、意図する受信者に経路を決めてパケットを送信
します。これにより、ネットワークの集中と各ホストへの負荷が軽減されます。すべてのホ
ストで効率的に帯域を使用でき、パフォーマンスに対する不利な条件が少ない状況で、多
くのホストが同じネットワークを共有できます。
ホスト名ルックアップの設定
TCP/IP ネットワーク上の各ホストは IP アドレスで表され、TCP/IP トラフィックはアドレ
スによってホストへの経路を決定します。TCP/IP では、クライアントがホスト名を数値ア
ドレスに変換するためのメカニズムが必要です。各クライアントホストは、ホスト名 / アド
レスの関係を hosts という名前のファイルに格納できます。また、この情報を中央のサー
バーに格納し、クライアントが DNS というプロトコルを使用してこの情報を検索すること
もできます。クライアントは DNS サーバーにホスト名の解決を要求し、サーバーは対応す
る IP アドレスを返します。クライアントは、その IP アドレスを使用して、相手と直接通信
を行うことができます。この構成では、クライアントがローカルに保持する IP アドレスは、
DNS サーバーホストのアドレスの 1 つだけです。
ネットワークの負荷と DNS サーバー自身の負荷のために、ホスト名の解決に数秒かかるこ
とがあります。ネットワークに接続する場合は、これがそのまま遅延になります。Web ブラ
ウザに、「ホスト ... を検索しています」に続いて「ホスト ... に接続しています」といった
メッセージが表示されることがあります。これは、DNS サーバーがホスト名を解決してい
るときの遅延を示しています。
ホスト名の解決時間を短縮するには、データベースサーバーのホスト名 / アドレスマッピ
ングをクライアントコンピュータの hosts ファイルに追加します。クライアントはホスト名
をアドレスにすばやく変換でき、ネットワークを介して別のホストのサービスを問い合わ
せるのではなく、ローカルファイルを検索するので信頼性も高まります。これにより、ロー
カルの hosts ファイルに一覧されたホストへの接続を開始する場合は、ホスト名の解決の遅
延が軽減されます。
第 12 章 データベースとサーバーのパフォーマンス
12-11
データベースプロパティ
メモ
この技術を使用して、データベースサーバーのアドレスを後で変更する場合は、各クライ
アントワークステーションの hosts ファイルをマニュアルで更新しなければなりません。社
内のワークステーション数にもよりますが、これは退屈で時間のかかる作業です。この作業
のために、TCP/IP アドレスを中央で管理する DNS が開発されました。ローカルファイルに
データベースサーバーのアドレスを保持するのは接続パフォーマンスを向上させるためで
すが、必須となる管理作業の負荷も考慮する必要があります。
ヒント
TCP/IP の使用で必須となる一般的な IP アドレス管理作業が処理できない場合は、
DHCP を
使ってネットワーク上の各ホストの IP アドレスの割り当てとトラッキングのタスクを単純
化することも考えられます。クライアントアプリケーションが InterBase 接続を要求したと
きに、クライアントホストがサーバーの IP アドレスを正しく解析できる限り、InterBase は
DHCP 環境でも動作します。
データベースプロパティ
データベースプロパティを変更すると、データベースの設計を変更することなく、パフォー
マンスが向上することがあります。アプリケーションの記述や設計を変更する必要はあり
ません。プロパティの変更は、クライアントとデータベース設計に対して透過的です。
データベースのページサイズの選択
デフォルトで、InterBase のページは 4KB です。InterBase が作成する典型的なデータベース
では、4KB より小さなページサイズと比較すると、このページサイズを使用することで 25
~ 30% 速くなります。このページサイズがよいパフォーマンスを得るのには、次のような
理由があります。
• レコードが複数のページにわたって分割されることが少ない。
レコードが 1 ページより大きくなることは一般にあることです。このような場合、
InterBase はレコードを分割してそれらを複数のページに格納します。指定されたレコー
ドのクエリーでは、データベースの複数のページを読み取る必要があります。
ページサイズを増やすと、複数ページの数を減らして、レコードを連続して格納するこ
とができます。
• インデックスの B ツリーが浅くて済む。
インデックスは、特定のインデックス付けされた値のインスタンスを含むデータページ
を指すポインタの B ツリーです。インデックス B ツリーが 1 ページより大きい場合、
InterBase はインデックスツリー用に追加のデータベースページを割り当てます。イン
デックスページが大きければ、ポインタを格納するためのページ追加は最小限に抑えら
れます。B ツリー全体をメモリに格納するためにデータベースキャッシュを使用すると
簡単で、インデックス付けされたルックアップはさらに速くなります。
• I/O が連続する。
テーブル内の連続したレコードを要求するクエリーに適しています。たとえば、テーブ
ルスキャンや、テーブル内のすべてのレコードを返したり集めたりするクエリーがこれ
に当たります。InterBase はファイル内で互いが近い場所に格納されるようにするより
12-12 操 作 ガ イ ド
データベースプロパティ
も、未使用の最初のページにレコードを格納します。テーブルスキャンを行うと、潜在
的にデータベース全体にわたってシークを行って、データを検索する必要があります。
データ読み取りに時間がかかるように、シークにも時間がかかります。
指定されたページには、1 つのテーブルからしかレコードを格納できません。これは、
大きなページは同じテーブルからでもデータを多く取り込むことができるので、その
ページの読み込みは関連データを多く返せることを意味しています。
• デフォルトのキャッシュバッファの数はメモリの量が大きいほどよい。
InterBase は、データベースキャッシュを固定バイト数ではなく、複数のページに割り
当てます。そのため、大きなページサイズにするとキャッシュサイズも増えることにな
ります。キャッシュが大きいと、小さいキャッシュよりもヒット率が上がります。
• ほとんどのオペレーティングシステムは 4096 バイトブロックの低レベル I/O を処理する。
InterBase は、データベースのページサイズにかかわりなく、OS レベルで 4096 バイトず
つ読み込んで、ページの読み取りや書き込みを行います。つまり、4096 のページサイズ
でデータベースを定義すると、データベース I/O が低レベル I/O と一致するので、
ページの読み取り / 書き込みの効率が上がります。
4KB はほとんどのデータベースで最適なサイズと思われますが、最適なサイズは特定のメ
タデータの構造とアプリケーションがデータにアクセスする方法に依存します。このため、
4KB ページサイズが万全な数値であると考えてはなりません。そのかわりに、アプリケー
ションとデータベースをいくつかのページサイズでテストして、最善のパフォーマンスに
なる構成をチェックしてください。
データページフィルの割合の設定
アプリケーションがデータを更新するため、データページはデータレコードの複数のバー
ジョンを格納します。データベースを復元する際、gbak ユーティリティは各ページの 80%
までデータを入れ、元のレコードと同じページに新しいレコードバージョンが格納できる
ように、領域を残します。ただし、データベースの使用としてはデータの更新よりデータの
読み取りがほとんどを占めている場合、アプリケーションにとっては 80% フィルであるこ
とに利点はありません。この場合、各ページの 100% までデータを復元する方が合理的で
す。各ページにさらに 25% 格納すると、レコードの総量を削減して 1 ページの読み取りで
返されるデータ量は増えます。オプションを指定すれば、データベース復元時にすべての
ページの全領域を使ってデータを復元できます。
gbak -c -use_all_space backup_file.ibk database_file.ib
データベースキャッシュバッファのサイズ変更
InterBase は、現在使用しているデータベースページのサーバーの RAM のキャッシュを保
持します。かなりアクティブなデータベースの場合、デフォルトキャッシュをデフォルトの
2048 データベースページから増やすとパフォーマンスが向上します。どのようなキャッ
シュシステムでも、あるポイントでパフォーマンスが減速することがあります。特別なアプ
リケーションとデータベースで検証すると、そのポイントが判別できます。
サーバーキャッシュ設定の詳細は、7-24 ページの「データベースキャッシュの設定」を参
照してください。
第 12 章 データベースとサーバーのパフォーマンス
12-13
データベースプロパティ
InterBase サーバー上で動作する ibserver プロセスは、最近使用されたデータとインデック
スページのメモリ内キャッシュを保持します。他のキャッシュシステムと同様に、指定ペー
ジ上のデータが繰り返し使用されるかどうかにより、その後のアクセス速度が変わります。
InterBase SuperServer の実装では、キャッシュはデータベースに接続するすべてのクライア
ントで共有されます。
デフォルトでは、InterBase はデータベースごとに 2048 ページに対して十分なメモリを割り
当てます。現在のデータベースのページサイズが 4KB の場合、ibserver はメモリを 8MB 使
用します。ページサイズが 8KB の場合、ibserver はキャッシュ用 RAM を 16MB 使用します。
InterBase API は、クライアントごとにメソッドを提供して、キャッシュのサイズが大きく
なるように要求します。個々のデータベースプロパティを設定して、クライアントがその
データベースに接続する際、異なるデフォルトのキャッシュサイズを使用することもでき
ます。
gfix -buffers 5000 database.ib
デフォルトの 2048 は、サーバーがデータベースごとに 8MB の RAM を割り当てるのに十分
なメモリ設定を持っていることを前提としています。メモリがサーバーで不足する場合ま
たは同時アクセスが発生するデータベースがたくさんある場合、キャッシュバッファのデ
フォルトを減らす必要があるかもしれません。
メモリに余裕があるならば、データベースのキャッシュサイズを拡大することを強くお勧
めします。次の点を考慮してください。
• キャッシュサイズを拡大しすぎると、ibserver が使用するメモリが仮想メモリにページング
されます。この場合、ディスクからメモリにデータをキャッシュする際の利点が無効にな
ります。
• キャッシュサイズをデータベースのページ数より大きくしても意味がありません。データ
ベースのページ数は、IBConsole のデータベース統計情報または gstat コマンドラインで表
示できます。ディスクから指定されたページは 1 ページ分しかキャッシュに入れられず、重
複させることもできないので、効果はありません。
• データベースごとにメモリの 1 ブロックがキャッシュ用に割り当てられます。1 つのサー
バー上の 2 つのデータベースに接続する 1 つのクライアントの場合、ibserver プロセスはメ
モリの異なる 2 つのキャッシュ領域を保持します。たとえば、database1.ib のデフォルト
キャッシュサイズが 4KB の 8,000 ページ、database2.ib のデフォルトキャッシュサイズが 2KB
の 10,000 ページで、両方のデータベースとも少なくとも 1 つの接続がある場合、ibserver は
32MB + 20MB の RAM を割り当てます。
キャッシュサイズを大きくしながら、パフォーマンスの改善の程度を分析してください。あ
る時点で、パフォーマンスがあまり向上しなくなることがわかります。一般的なアプリケー
ションでは、適切なキャッシュサイズに変更すると、パフォーマンスを 30% まで改善でき
ます。
InterBase サーバーは 1 つのデータベースに対して 512MB を超えるキャッシュを使用しま
せん。そのため、これを超えるような大きなサイズのキャッシュバッファの数を設定すべ
きではありません。
12-14 操 作 ガ イ ド
データベース設計の基本
データベース書き込みのバッファ
Windows プラットフォームの InterBase は、デフォルトでライトバックキャッシュを実装し
ます。キャッシュ内のページへの書き込み処理ごとに、キャッシュを持つオペレーティング
システムのディスク I/O に書き込みが行われます。
対照的に、ライトバックキャッシュは、指定キャッシュページの内容のフラッシュを保留
します。ディスクに書き込む前に、RAM のキャッシュページに複数の書き込みを行います。
これにより、書き込み処理の大部分で応答時間が改善されます。ライトバックキャッシュは
I/O を効率的に集約するので、ライトスルーキャッシュより高速になります。
InterBase は、UNIX と Linux ではライトバックキャッシュをデフォルトとして、Windows
のプラットフォームではオプションとして提供しています。gfix -write async を使用する
か、または IBConsole でデータベースに対して強制的な書き込みを無効にして([データベー
スのプロパティ|全体]タブの[オプション])、データベースレベルでこれを設定するこ
とができます。
非同期書き込み(ライトバックキャッシュ)使用のほんとうの利点は、通常の場合よりパ
フォーマンスが約 4 倍になることです。あるユーザーは、書き込み処理(INSERT、UPDATE、
DELETE)を頻繁に行うアプリケーションにおいて、非同期書き込みを設定して 20 倍もパ
フォーマンスが改善されました。データベースに書き込みを多く行うアプリケーション(ト
リガーによって発生する書き込み処理を含む)ほど、利点は多くなります。
非同期書き込みのリスクは、サーバーでパワーロスが起きたり、何かの原因で ibserver が
異常終了した場合、キャッシュのデータが損失する恐れがあることです。ライトスルー
キャッシュはデータ損失から保護されます。サーバーホストとクライアント/サーバーアプ
リケーションを十分にテストしてクラッシュしにくい場合に、非同期書き込みの使用を強
くお勧めします。
ヒント
無停電電源供給システム(UPS)は、突然のパワーロスからサーバーを保護します。適度な
UPS は、データ損失のコストと比較して高いものではなく、簡単にインストールできます。
UPS を使用すると、非同期 I/O モードの利点を安全に得ることができます。
データベース設計の基本
ここでは、パフォーマンスを向上させるためのデータベース設計技術について説明します。
インデックスの定義
インデックスの適切な利用はデータベースパフォーマンスにおいて重要な要因の 1 つで
す。インデックスの定義と保守の効果的な方針は、高速なクライアント / サーバーシステム
へのキーとなります。InterBase のインデックスのセルフチューニングは、高速化にはたい
へん有効ですが、定期的なメンテナンスタスクを行うとさらに効率的になります。
第 12 章 データベースとサーバーのパフォーマンス
12-15
データベース設計の基本
インデックスとは
InterBase のインデックスは Balanced-Tree データ構造でデータベースファイルに格納され
ます。このデータ構造は、テーブル内の特定の値の位置をすばやく検索するメカニズムを
提供します。クエリーはコストベースのオプティマイザによって自動的に適切なインデッ
クスを使用します。このオプティマイザは、指定されたクエリーで使用されているテーブ
ルと列を解析して、検索、ソート、結合処理を高速にするインデックスを選択します。
いくつかの列のインデックスを定義することは、データベース設計の一部です。インデック
スは SELECT クエリーのパフォーマンスを劇的に改善します。テーブル内の行数が多いほ
ど、インデックスを使用する利点は大きくなります。通常、データベースを合理的に解析し
てインデックスを適切に定義すると、パフォーマンスは改善します。
INSERT と UPDATE 処理の際に、インデックスにはインデックス B ツリーデータ構造を保
守するために多少の負担がかかります。この負担があるので、インデックス定義を過度に自
由にすることはしないでください。冗長なインデックスは作成しないでください。また、
データベース使用解析の代替としてすべての列にインデックスを作成しないでください。
異なる値が少ないデータを持つ列に対してはインデックスを定義しない方がよいでしょ
う。たとえば、列 FISCAL_QUARTER は潜在的にとても大きなデータセットにわたる 4 つの
異なる値だけを持つとします。この種の値の分散したデータの検索ではインデックスはそ
れほど有効ではありませんが、インデックスツリーを保守するための作業は利点を上回る
ほど負担になります。
インデックスを使用するクエリー
InterBase はインデックスを使って次に示すクエリー要素のデータ取り出しを高速化しま
す。
• 主キーと外部キー
• 結合キー
• DISTINCT と GROUP BY を含めたソートキー。
• 検索基準(WHERE)
一般に、JOIN 基準で使用するすべての列、または ORDER BY でソートキーとして使用する
すべての列にインデックスを定義します。主キーや外部キーの列にはインデックスを定義
する必要はありません。これらのテーブル制約にはインデックスが暗黙的に作成されます。
インデックスを使用しないクエリー
InterBase は、インデックスが指定された列にある場合でも、次に示す動作ではインデック
スを使用しません。
• CONTAINING、LIKE、および <> の不等式処理の検索基準
• COUNT() などの集計関数で使用されている列
• UPPER() などのその他の式
12-16 操 作 ガ イ ド
データベースのチューニングタスク
双方向インデックス
インデックスは、ASCENDING または DESCENDING のいずれかで定義されます。両方向で
ソートするには、それぞれのタイプのインデックスが 1 つずつ必要になります。Delphi
フォームの中でスクロールするリストを使用する場合、または TTable.Last メソッドを使用
する場合は、これはとても重要です。
データベースの正規化
データベースは適切な正規化を行って設計します。フィールドのグループの繰り返しが多
いレコードは、必要以上に大きくなってしまいます。大きなレコードは、ソートの負荷が大
きくなり、必要以上にページを複数使用します。その結果、ページの分断が発生してデー
タベースが大きくなります。
正規化されていないテーブル設計は、一部のタイプのクライアントアプリケーションでは
有効です。InterBase のビューとストアドプロシージャを使用すると、クライアントアプリ
ケーションからアクセスしやすいように、サーバー上に正規化されていないクエリーを格
納できます。その際のデータの物理的なストレージは、正規化された形式で効率的に格納で
きます。
ビューとストアドプロシージャの詳細は、『データ定義ガイド』を参照してください。
BLOB のセグメントサイズの選択
BLOB はサイズの制限がないデータ型です。BLOB はすべてのデータベースインターフェイ
スより大きく、大量のデータを単一の I/O 転送で処理できます。そのため、BLOB は単一サ
イズの一連のセグメントとして定義されており、I/O インターフェイスは BLOB のセグメ
ントを 1 つずつ転送します。
BLOB は、特別な BLOB ページ型を持つ特殊なケースで、他のデータ型はそのページには格
納されません。BLOB を含む 1 レコードのデータページは、BLOB が格納される BLOB ペー
ジを示す BLOB ID を格納します。サイズが合うならば、BLOB は一次レコードバージョンと
同じページに格納されます。ページサイズが合わない場合、BLOB 用に必要な分だけ特別に
ページが割り当てられ、インデックスが一次ページ上に格納されます。BLOB ページは共有
されません。BLOB は通常のデータページ上、または BLOB ページ上のいずれかに格納され
ます。
BLOB のセグメントサイズをページサイズと同じ大きさに定義すると効率がよくなります。
ページサイズと BLOB のセグメントサイズが両方ともに 4096 バイトの場合、大きな BLOB
の ク エ リ ー は 20MB/ 秒 までデータ転送レートを上げることができます。この場合、
InterBase はボトルネックではなくなります。ハードウェアの I/O バス、ネットワーク帯域
幅、またはミドルウェアが、スループットを制限する要因である可能性が高くなります。
データベースのチューニングタスク
ここでは、最善のパフォーマンスを維持するために、データベースを定期的に保守する方
法について説明します。
第 12 章 データベースとサーバーのパフォーマンス
12-17
データベースのチューニングタスク
インデックスのチューニング
インデックスを定期的に保守することで、パフォーマンスが向上します。SQL スクリプトを
記述して、これらの作業を自動的に行うことができます。11-55 ページの「SQL スクリプ
トの使用」を参照してください。
インデックスの再構築
定期的に、B ツリーデータ構造はアンバランスになったり、データベースから削除したはず
のデータがツリーに残っていたりすることが起こることがあります(これはインデックス
ガベージコレクションが原因なので、InterBase のバージョン 5 以降では起こりません)。
インデックスを使用停止にして使用可能に切り替えることで、定期的にインデックスを再
構築してください。
ALTER INDEX name INACTIVE;
ALTER INDEX name ACTIVE;
インデックスの選択度の再計算
インデックスの選択度は、その一意性のインジケータです。オプティマイザは指定されたイ
ンデックスをクエリー実行プランで使用するかどうかを決める際に、コストベースの解析
アルゴリズムで選択度を使用します。選択度が古くインデックスの状態が正確に表されて
いない場合、オプティマイザはインデックスを不正に使用したり、無視することがありま
す。通常、選択度がかなり古くない限り、パフォーマンスへの影響は大きくはありません。
テーブルへの変更によってデータ値の平均分布が変わる場合は、インデックスの選択度を
再計算してください。
SET STATISTICS INDEX name;
定期的なバックアップの実行
定期的なバックアップと InterBase データベースの復元にはパフォーマンスに関連した利
点がいくつかあります。第 8 章 「データベースのバックアップと復元」を参照してくださ
い。
バックアップのパフォーマンスの改善
• データベースをすぐに置き換えたい場合は、ガベージコレクションを無効にします。これ
により、バックアップ処理が速くなります。
• 別のディスクドライブにバックアップします。
復元のパフォーマンスの改善
• 別のディスクドライブの復元を行います。
• 復元でインデックスを無効にします。これにより、復元処理が速くなり、データベースを
すぐに使用できる状態にすることができます。復元が終了したら、インデックスをマニュ
アルでアクティブにしなければなりません。
12-18 操 作 ガ イ ド
アプリケーションの設計テクニック
ヒント
インデックスを有効にするために必要な ALTER INDEX 文をすべて含む SQL スクリプトを
作成しておくと便利です。このスクリプトをバッチファイルから isql -i script.sql のように
して使用すれば、処理を自動化することができます。このスクリプトは、次のクエリーで作
成できます。
SELECT 'ALTER INDEX ' || RDB$INDEX_NAME || ' ACTIVE;'
FROM RDB$INDICES
WHERE RDB$SYSTEM_FLAG = 0 OR RDB$SYSTEM_FLAG IS NULL;
データベースをより早く復元することができ、インデックスがアクティブになります。イン
デックスが有効でなくてもデータにはアクセスできますが、テーブルのクエリーは遅くな
ります。
ガベージコレクションの促進
デフォルトでは、InterBase のデータベースは古いレコードが非常に多くなった場合、その
古いレコードを組み込み関数で自動的にスイープします。ただし、スイープはアクティブな
トランザクションによって部分的に抑制されます。サーバーがガベージコレクションを完
全に行うことができない場合、各クライアントのデータベースのスナップショットを保守
するために余分な作業を行う必要があります。
トランザクションを明示的に起動して迅速に COMMIT するようにクライアントアプリ
ケーションを設計すると、処理中のトランザクション数が減少します。
スイープ、ガベージコレクション、およびデータベーススナップショットの詳細は、7-22
ページの「スイープの概要」を参照してください。
アプリケーションの設計テクニック
ここでは、高速なクライアントを作成するのに役立つ、InterBase を対象とした一般的なア
プリケーションプログラミング方法について説明します。
トランザクション排他モードの使用
InterBase のマルチジェネレーションアーキテクチャでは、クエリーやその他の動作はアク
ティブなトランザクションに関連している必要があります。トランザクションがない場合、
データベースのスナップショットを維持するためのコンテキストを持つことはできませ
ん。IBConsole と BDE ツールは、ある程度の自動トランザクション管理を行いますが、これ
はマニュアルでのトランザクションの起動と終了を助けるものです。
InterBase サーバーエンジンでは、データベース内のその他のすべてのトランザクションの
状態のコピーを作成することでスナップショットを作成します。このスナップショットは
現在のトランザクションに対して静的です。つまり、スナップショットが作成された後で、
データベースにコミットされたすべてのデータは、そのスナップショットを使用している
操作からは見えません。これは REPEATABLE READ トランザクションモードです。その他
のクライアントがデータベースのデータを更新しても、複数回同じクエリーを処理したと
きに同じ結果セットが必ず返ってきます。
第 12 章 データベースとサーバーのパフォーマンス
12-19
アプリケーションの設計テクニック
トランザクションを起動して新しいトランザクション用のスナップショットデータ構造を
作成すると、ある程度のオーバーヘッドが発生します。このオーバーヘッドは、自動トラン
ザクション処理を使用すると大きくなります。一般的な自動トランザクション動作では新
しいトランザクションを起動して、データベースで実行されるすべての文に対してそれを
コミットするためです。
BDE の別のデフォルトモードを READ COMMITTED と言います。このモードでは、トラン
ザクションが変更されるたびにスナップショットが更新されます。このため、現在のトラン
ザクションの操作からでも、スナップショットが作成されてからコミットされたデータを
表示したり使用することができます。スナップショットの更新もパフォーマンスに多少影
響を与えます。そのようなことから、通常は InterBase では REPEATABLE READ モードの使
用をお勧めします。このモードを使用するには、
BDE ドライバのフラグを値 512 または 4608
に設定してください。
相関サブクエリーの使用
サブクエリーとは、別の文内に節または式として含まれる SELECT 文です。一般にサブクエ
リーは、上位のクエリーの条件で使用される値や結果を生成するために使用されます。
相関サブクエリーは、サブクエリーの条件が親クエリーの各行に対して異なるものです。こ
れは、条件が行ごとに異なる値に依存しているためです。InterBase は親クエリーの行ごと
に 1 回ずつサブクエリーを実行します。各行を評価すると、非相関サブクエリーと比較して
パフォーマンスの負荷が大きくなります。InterBase はループから非相関サブクエリーを最
適化して、1 回実行してから、その結果を固定データセットとして使用します。
相関サブクエリーの例:
SELECT * FROM DEPARTMENT D
WHERE EXISTS (SELECT * FROM EMPLOYEE E
WHERE E.EMP_NO = D.MNGR_NO AND E.JOB_COUNTRY = 'England')
結合の例:
SELECT D.*
FROM DEPARTMENT D JOIN EMPLOYEE E
ON D.MNGR_NO = E.EMP_NO WHERE E.JOB_COUNTRY = 'England'
InterBase のオプティマイザは非相関サブクエリーを 1 回だけ実行して、その結果を親クエ
リーが必要な回数分使用します。
一部の場合は、相関サブクエリーは必須となり、SQL 言語のセマンティクスを指定します。
ただし、このようなタイプのクエリーを使用する際は細心の注意と、パフォーマンスが動
作するデータセットのサイズに関して静的であることを理解しておくことが必要です。
パラメータ付きクエリーの準備
ダイナミック SQL(DSQL)文には、解析、準備、実行のサイクルがあります。DSQL 文を
送信して、各呼び出しに対してこのプロセスを行うか、ステップごとに個別に行うことが
できます。同じ文または異なるパラメータで同じ形式の文を複数回実行するような場合、明
示的に文を一度準備してから、ループとしてそれを実行します。
12-20 操 作 ガ イ ド
アプリケーションの設計テクニック
パラメータ付きクエリーの場合、文を準備することはできますが、クエリーの要素に特定
の値を入れることは保留されます。
InterBase は DSQL でパラメータ付きクエリーをサポートしています。指定された文が異な
る値で複数回実行される場合などがこれに当たります。たとえば、データを持つテーブルの
読み取り時には、挿入される各レコードの値を持つ一連の INSERT 文が必要になります。
InterBase エンジンは一度準備を終えると、クエリーの内部表現と最適化を保持するため、
パラメータ付きクエリーの実行は直接的にパフォーマンスによい影響を与えます。
Delphi で DSQL パラメータ付きクエリーを使用するには次の手順にしたがいます。
1
クエリーの定数値のかわりに Delphi :PARAMETER 構文を使用して、名前付きパラメー
タを文中に配置します。InterBase は定数のかわりにパラメータをサポートします。テー
ブルと列の名前はパラメータ化できません。
2
文を準備します。TQuery メソッドの Prepare を使用します。クエリーが準備されずに実
行されると、Delphi は自動的にクエリーを準備します。実行後、Delphi はクエリーの準
備を解除します。クエリーが複数回実行される場合は、アプリケーションで明示的にク
エリーを準備すると、不要な準備と準備解除を回避できます。
3
パラメータを指定します。たとえば、TQuery コンポーネントの場合は、ParamByName
メソッドを使ってクエリー内の各パラメータに値を与えます。
4
文を実行します。SELECT 文では、TQuery の Open メソッドを使用してください。
INSERT、UPDATE、および DELETE 文では、ExecSQL メソッドを使用してください。こ
れらのメソッドは、SQL プロパティの文が準備されていない場合は、実行用の文を準
備します。高速化するには、アプリケーションで、最初に ExecSQL を呼び出す前に
Prepare を呼び出す必要があります。
5
6
必要に応じてステップ 3 と 4 を繰り返します。
クエリーの準備を解除します。
繰り返し処理を含んでいる現実的なケースでは、パラメータ付きクエリーの使用はパ
フォーマンスを 100% 向上させます。
クエリー最適化プランの設計
最適化プランとは、オプティマイザがクエリーを実行する方法を選択するための方法です。
ある種のクエリーでは、オプティマイザは最適なプランを選択しないことがあります。ユー
ザーは別の代替プランを解析してオプティマイザの解析を上書きするプランを指定できま
す。その結果、ある種のクエリーでは驚異的にパフォーマンスが改善することがあります。
顕著な例では、15 分かかったクエリーが 3 秒になった例もあります。
プランの選択要素は次のとおりです。
• インデックスの割り当て
• インデックスの結合
• 結合順序の決定
• River の作成
• コスト見積もり
第 12 章 データベースとサーバーのパフォーマンス
12-21
アプリケーション開発ツール
• ソートのマージ
InterBase は、埋め込み SQL と DSQL 内の SELECT 式を持つ構文をサポートして、ユーザー
がクエリーの PLAN を指定できるようにしています。構文は、ビュー、ストアドプロシー
ジャ、トリガーの本体内の SELECT 文でも動作します。
この章では実行プランを指定する PLAN 節の構文の詳細およびマニュアルでのクエリーの
解析テクニックについては説明しません。『言語リファレンス』の SELECT に関するセク
ションには、PLAN の使用例があります。
インデックス更新の保留
データの挿入と更新ではインデックスも更新する必要があります。インデックスの更新は
データの INSERT または UPDATE 処理中にはパフォーマンスを低下させることがありま
す。データ入力時に発生するコストは、以降のデータクエリーでのパフォーマンス向上につ
ながります。
INSERT 処理中のパフォーマンスヒットを最小にするには、大量の INSERT 処理時に一時的
にインデックスを無効にすることを検討してください。これは、インデックスをオフにし
て使用できなくし、クエリー処理を高速にしますが、データの INSERT ではインデックス
が更新されなくなります。INSERT 処理後、インデックスを使用可能な状態に戻します。こ
うすると、挿入されたデータすべてに対してインデックスが更新され再度平均化されます。
アプリケーション開発ツール
ここでは、さまざまな開発環境と開発ツールを使って効率的にアプリケーションを開発す
る方法について説明します。
InterBase Express™(IBX)
CodeGear の InterBase 技術者は、Delphi で TDataSet アーキテクチャを使ってデータベース
対応の高度に機能化された VCL コンポーネントセットを作成しました。IBX は CodeGear
の C++ Builder でも使用できます。InterBase Express の詳細は、
『開発者ガイド』を参照して
ください。
IB オブジェクト
Delphi のプロジェクトで利用できる別の VCL コンポーネントです。InterBase で使用するた
めに最適化された高度なデータコンポーネントテクノロジを提供するために設計されてい
ます。デモ製品は、http://www.ibobjects.com からダウンロードできます。
12-22 操 作 ガ イ ド
アプリケーション開発ツール
Borland Database Engine
BDE ドライバオプションのデフォルト値を BDE Administrator で変更する必要があります。
ここでは、ドライバオプションのガイドラインとパフォーマンスを向上させるための推奨
値を示します。
BDE ドライバフラグ
DRIVER FLAGS の推奨値は 4608 です。
BDE Administorator で DRIVER FLAGS に 512 を加算し、デフォルトのトランザクション
モードを REPEATABLE READ トランザクションに指定します。反復読み取りモードは、自
動トランザクション制御によって発生するオーバーヘッドを軽減します。
DRIVER FLAGS に 4096 を加算して、InterBase SQL Links ドライバがソフトコミットを使用
するように指定します。ソフトコミットは、変更をコミットするときにドライバがカーソル
を保持できるようにする InterBase の機能です。ソフトコミットは大きなデータセットを更
新する際のパフォーマンスを向上させます。ハードコミットを使用すると、変更されたレ
コードが 1 つだけの場合でも、BDE はデータセット内のすべてのレコードを再取り出しす
る必要があります。デスクトップデータベースを使用している場合は、データがコアメモリ
に転送されるため、負荷はそれほどかかりません。InterBase のようなクライアント / サー
バーデータベースの場合は、データセットがリフレッシュされると、ネットワーク帯域幅
が消費され、パフォーマンスが大幅に低下します。ソフトコミットの場合は、クライアント
がカーソルを保持し、再取り出しを行いません。
表 12.1 BDE ドライバのフラグ値
ドライバフラグ
排他レベル
コミットタイプ
0
READ COMMITTED
ハードコミット
512
REPEATABLE READ
ハードコミット
4096
READ COMMITTED
ソフトコミット
4608
REPEATABLE READ
ソフトコミット
メモ:ソフトコミットは BDE クライアントアプリケーションが起動する明示的なトランザ
クションでは使用されません。これは、明示的なトランザクションの起動とコミットを使用
する場合、ソフトコミット用のドライバフラグは使用できないということです。
SQL パススルーモード
このプロパティの推奨値は、SHARED NOAUTOCOMMIT です。
SQLPASSTHRU MODE は、BDE とパススルー SQL 文が同じデータベース接続を共有できる
かどうかを指定します。ほとんどの場合、SQLPASSTHRU MODE はデフォルトで SHARED
AUTOCOMMIT に設定されています。ただし、SQL トランザクション制御文をサーバーに渡
す場合は、SQL Explorer を使って BDE SQLPASSTHRU MODE を NOT SHARED に設定する必
要があります。クライアントが処理するデータ量に応じて、SHARED NOAUTOCOMMIT 設
定の使用によって 10 倍までパフォーマンスを改善できます。
第 12 章 データベースとサーバーのパフォーマンス
12-23
アプリケーション開発ツール
明 示 的 な ト ラ ン ザ ク シ ョ ン 制 御 を 使 用 し、自 動 コ ミ ッ ト 文 を 無 効 に し ま す。
TDatabase.StartTransaction メソッドと TDatabase.Commit メソッドを使用します。
SQL クエリーモード
このプロパティの推奨値は SERVER です。
InterBase のアクティブサーバーには、ダイナミック SQL パーサーと実行エンジンがありま
す。SQL クエリーを InterBase SQL エンジンに送信して SQL クエリーを実行する場合、この
プロパティの値を SERVER にしなければなりません。それ以外の場合、BDE はクエリーを
解析して実行し、新しい SQL クエリーを作成して InterBase サーバーにそのクエリーを送信
して実行します。すでに記述されている SQL の再構築を BDE に強制することにメリットは
ありません。単に、余分なパフォーマンスコストがかかるだけです。
ビジュアルコンポーネント
ここでは、開発者が Delphi と C++Builder で InterBase からのデータアクセス用に一般に使
用するビジュアルコンポーネントについて説明します。クライアント/サーバーのパフォー
マンスについての推奨事項を次に示します。
FETCH ALL 処理
クライアント / サーバー構成では、「FETCH ALL」は BDE にデータベースがデータセット
を再作成してそれをネットワークで送信するように要求するため、「FETCH ALL」はパ
フォーマンスが最低になります。
InterBase とほとんどのリレーショナルデータベースは、クライアントがリフレッシュを要
求する場合に備えて、サーバー上のキャッシュにデータセットを保存しません。InterBase
は、BDE がリフレッシュを要求すると、SQL クエリーを再度実行しなければなりません。ク
エリーが大量データ、複雑な結合、またはソート操作を持つ場合、データセットを生成す
るのに時間がかかります。
また、ネットワークインターフェイスを介して大量のデータセットを転送することは、サー
バーに大きな負荷をかけます。Paradox のようなデスクトップデータベースでは、一般にア
プリケーションに対してローカルに実行されるため、データセットを返すための負荷は大
きくありません。
ソフトウェア開発者が InterBase のようなリレーショナルデータベースの使用を選択する
ことはよくあることです。これは、Paradox などのデスクトップデータベースより大量の
データを効率よく管理するためです。生成してネットワークで送信するデータセットが大
きくなるほど、かかる時間も増えるのは当然です。
クライアントアプリケーションを使用するユーザーは、リフレッシュを待つ必要がない場
合にパフォーマンスがよいと感じます。クライアントアプリケーションがデータセットの
リフレッシュを頻繁に要求しないことは、ユーザーにとってもよいことです。
重要
クライアント / サーバーアプリケーションの基本設計は、負荷がかかるリフレッシュ操作
の数をできる限り削減するようにしてください。
12-24 操 作 ガ イ ド
アプリケーション開発ツール
TQuery
• CachedUpdates = False
更新、削除、競合の処理をサーバーに許可します。
• RequestLive = False
RequestLive を False に設定すると、VCL をクライアント側の行のコピーを保持しないように
できます。ネットワーク帯域要求を削減するため、パフォーマンスが向上します。
• 次に示す操作は、TQuery が FETCH-ALL を実行する操作です。できる限りこのような操作
を回避して、発生する負荷を軽減するように注意します。
Locate メソッドの使用
Locate はローカルなデータセットでのみ使用します。
RecordCount プロパティの使用
データセットにあるレコード数を確認すると便利ですが、InterBase 使用時には RecordCount
の計算で FETCH-ALL を強制的に行います。このため、RecordCount プロパティの参照はク
エリー結果のデータセット全体を取り出すのと同じだけ時間がかかります。
一般に、RecordCount は、開かれている TQuery の結果セットにレコードが含まれているか
どうかを判断するために使用されます。この場合は、EOF と BOF の状態をチェックすれば、
FETCH-ALL を実行しなくても結果を判断できます。ファイルの末尾と先頭の両方がデータ
セットに対して true ならば、結果のセットにレコードはありません。これらの操作では
FETCH-ALL を行いません。
たとえば、qryTest という TQuery インスタンスを指定したとします。
qryTest.Open;
if qryTest.BOF and qryTest.EOF then begin
// 結果セットのレコードがありません
end
else begin
// 結果セットのレコードがあります
end;
Constraints プロパティの使用
サーバーに制約を強制します。
Filter プロパティの使用
レコードをフィルタする TQuery の場合、表示するよりもかなり大きなデータセットが必要
になります。InterBase サーバーはフィルタ後のデータセットを返す前に、フィルタリング
をさらに効率よく行うことができます。SQL クエリーで WHERE 句を使用してください。
WHERE 句を使用しても、TQuery.Filter プロパティを使用すると FETCH-ALL が強制的に行
われます。
TTable
TTable コンポーネントはコアメモリでアクセスされる、ローカルデータベースの比較的小
さなテーブルで使用することを目的として設計されています。TTable は、テーブルのメタ
データについての情報を集めて、データセットのキャッシュをメモリ内に維持しようとし
ます。TTable.post メソッドを発行して TDatabase.Rollback メソッドを使用すると、TTable は、
第 12 章 データベースとサーバーのパフォーマンス
12-25
アプリケーション開発ツール
データのクライアント側のコピーをリフレッシュします。クライアント / サーバーデータ
ベースは大きなデータセットを持ち、ネットワークを介してアクセスされる傾向があるた
め、リフレッシュは大きなネットワークオーバーヘッドを引き起こします。TTable の動作を
SQL Monitor ツールで監視できます。SQL Monitor ツールは BDE と InterBase API へのすべ
ての呼び出しをレポートします。
TTable は RAD 手法と抽象的なデータベース対応モデルではたいへん便利ですが、InterBase
やその他のクライアント / サーバーデータベースでは慎重に使用してください。TTable はク
ライアント / サーバーアプリケーションでの使用を目的として設計されていません。
12-26 操 作 ガ イ ド
付録
InterBase の移行
Appendix A
InterBase は、現在のデータベースの標準が確立する以前に設計された成熟した製品です。
データベースの標準が確立されてくるにしたがって、InterBase をそれらの互換製品に適合
させるには多少複雑な移行手順が必要です。
InterBase 6 のリリースに当たり、Borland は製品を大幅に更新する時期と判断しました。
InterBase 6 では、SQL-92 標準との互換性を強化しましたが、InterBase 5 以前の古いクライ
アントやデータベースを移行する際は、細心の注意を払う必要がある場合もあります。
移行の際に考慮する必要があるのは、二重引用符の使用(区切り付き識別子に使用する)、
DATE データ型の意味(高精度数値データ型の動作)
、古いメタデータ名と競合する可能性
がある新しいキーワードの存在などです。
このドキュメントでは、前バージョンの InterBase から InterBase 6 以降へのスムーズな移行
を計画および実施するための方法について説明します。
このガイドの前の章では、移行に関する問題について説明しています。この付録では、イン
プレース移行および古いデータベースを新しいデータベースに移行する方法の両方につい
て、詳細な手順を説明しています。A-20 ページの「サーバーとデータベースの移行」、A-23
ページの「ダイアレクト 3 へのデータベースの移行」、および A-31 ページの「クライアン
トの移行」を参照してください。
移行のプロセス
サーバー、データベース、およびクライアントを移行するには、以下の手順が必要です。そ
れぞれの手順については、後で詳しく説明します。
サーバーとデータベースの移行
1
移行するすべてのデータベースをバックアップする。
Appendix A InterBase の移行
A-1
移行における問題
2
3
最新の InterBase サーバーをインストールする。
4
5
移行したデータベースを検証する。
最新の gbak を使用して、移行するデータベースを復元する。この時点で、データベー
スはダイアレクト 1 に設定されます。
データベースを SQL ダイアレクト 3 に設定する(23 ~ 31 ページを参照)。
クライアントの移行
1
2
3
4
アップグレードする必要があるクライアントを識別する。
アップグレードが必要なアプリケーションの領域を識別する。
必要なコンピュータにそれぞれ InterBase をインストールする。
SQL アプリケーションを SQL 3 にアップグレードする。
移行における問題
データベースの移行を始める前に、InterBase の SQL ダイアレクトと、SQL ダイアレクトが
サーバー、クライアント、および InterBase 6 で導入されたいくつかの機能に与える影響に
ついて理解しておく必要があります。
InterBase SQL ダイアレクト
InterBase は、クライアントとデータベースの異なるダイアレクトを認識し、レガシーデー
タベースの使用、アクセス、および更新をユーザーが高い自由度で行うことができるよう
にします。InterBase 6 以降では、各クライアントと各データベースにはそれぞれ SQL ダイ
アレクトが設定されています。ダイアレクトとは、過渡的機能(InterBase のバージョン間
で意味が変化した機能)を InterBase 6 以降のサーバーがどのように解釈するかを示すイン
ジケータです。以下の過渡的機能は、クライアントアプリケーションが使用するダイアレク
トによって異なる意味を持ちます。
• 二重引用符(")
:単引用符(')のシノニムから、オブジェクト名のデリミタ(区切り文字)
に変更された
• 有効桁数が 9 桁より大きい DECIMAL および NUMERIC データ型:DOUBLE PRECISION で
はなく INT64 データ型として格納されるようになった
• DATE、TIME、TIMESTAMP データ型:DATE は、日付と時刻の両方を保持する 64 ビット
データ型から、日付情報だけを保持する 32 ビットデータ型に変更された。TIME は時刻情報
だけを保持する 32 ビットデータ型、TIMESTAMP は日付と時刻の両方を保持する 64 ビット
データ型(バージョン 6 より前の DATE と同じ)
A-2 操 作 ガ イ ド
移行における問題
クライアントおよびデータベース
クライアントとデータベースには、それぞれダイアレクトが設定されます。サーバー自体に
はダイアレクトはありませんが、データ構造とクライアントの要求の解釈は、それぞれの
ダイアレクトに基づいて行います。旧バージョンの InterBase クライアントを使用するアプ
リケーションでも、以下のような制限はありますが、InterBase 6 と 7 のサーバーおよびデー
タベースを利用できます。
• バージョン 5 のクライアントは、INT64、TIME、および DATE として格納されているダイ
アレクト 3 の列にアクセスできません(有効桁数が 9 桁を超える DECIMAL および
NUMERIC 列は INT64 として格納される)
。
• バージョン 5 のクライアントは、SHOW コマンドなどでメタデータ内の新しいデータ型を
表示できません。
• バージョン 5 のクライアントは、DATE データ型を TIMESTAMP として解釈します。これ
は、InterBase 6 以前の DATE 型の定義をそのまま使用するからです。
• バージョン 5 のクライアントは、区切り付き識別子で指定されたオブジェクトにアクセス
できません。
• BDE(Borland Database Engine)を使って InterBase 6 のサーバーにアクセスするクライアン
トは、インストールされている InterBase クライアントのバージョンにかかわらず、新しい
データ型のフィールドにアクセスできません。
識別子として使用されたキーワード
バージョン 5 のクライアントは、バージョン 6 のクライアントに対して 1 つの利点があり
ます。バージョン 6 のキーワードのいくつかを識別子として使用している古いデータベー
スをバージョン 6 のダイアレクト 1 に移行した場合、これらの旧バージョン 5 クライアン
トはそのキーワードオブジェクトにアクセスできます。バージョン 6 のダイアレクト 1 で
は、そのようなアクセスは不可能です。ダイアレクト 3 のクライアントは、キーワードオブ
ジェクトが二重引用符で区切られている場合にこれらのキーワードオブジェクトにアクセ
スできます。
バージョン 5 のクライアントが InterBase 6 または 7 のキーワードをオブジェクト名として
使用した場合、InterBase 6 サーバーは、これをエラーとせずに許可します。これは、InterBase
6 サーバーは、これらの名前がキーワードでなかったときにこのクライアントが作成された
ことを認識するからです。
例
たとえば、以下の文は新しいキーワード TIME を使用しています。
SELECT TIME FROM atable;
この文を InterBase 6 以前のクライアントで実行すると、従来どおりに情報が返されます。
バージョン 6 または 7 のクライアントを使って同じクエリーを発行した場合はエラーが返
されます。これは、TIME が予約語となっているからです。9 ページに、新しいキーワード
の一覧を示します。
Appendix A InterBase の移行
A-3
移行における問題
SQL ダイアレクトを理解する
ここでは、SQL ダイアレクト 1、2、3 でのサーバーとクライアントの動作を説明します。
ダイアレクト 1 のクライアントとデータベース
ダイアレクト 1 では、InterBase 6 および 7 のサーバーは、InterBase 5 とまったく同様に過渡
的な機能を解釈します。
• 二重引用符で囲まれたテキストは文字列リテラルとして解釈されます。 区切り付き識別子
は使用できません。
• DATE データ型はすべてのタイムスタンプ情報を格納し、TIMESTAMP として解釈されま
す。名前は変更されていますが、その機能は変わりません。クライアントは、タイムスタ
ンプ全体が返されることを期待します。ダイアレクト 1 において、DATE データ型と
TIMESTAMP データ型は同じです。
• TIME データ型は使用できません。
• ダイアレクト 1 のデータベース:有効桁数が 9 桁を超える DECIMAL および NUMERIC
データ型は、INT64 ではなく DOUBLE PRECISION として格納されます。
• ダイアレクト 1 のクライアントは、DECIMAL および NUMERIC データ型に格納された情
報が DOUBLE PRECISION として返されることを期待します。ダイアレクト 1 のクライアン
トは、64 ビット整数を保持するデータベースフィールドを作成できません。
InterBase 6 以降のサーバーは、InterBase のクライアントおよびデータベースの他の機能を
すべて認識します。
ダイアレクト 2 のクライアント
ダイアレクト 2 は、クライアント側でのみ使用できます。ダイアレクト 2 は、ダイアレク
ト 3 に移行するレガシーメタデータ内の潜在的な問題を調査するために使用されます。
データベースをダイアレクト 1 からダイアレクト 3 に移行するときに問題となる部分を調
査するには、データベースからメタデータを抽出し、isql をダイアレクト 2 に設定してから
そのメタデータファイルを isql で実行します。isql は、二重引用符、DATE データ型、また
は大きな有効桁数を持つ正確値を検出するたびに警告を出します。ダイアレクト 3 への正
常な移行を行うには、警告で示された箇所を変更する必要があります。
移行しようとするデータベースのメタデータ内の問題領域を見つけるには、ダイアレクト
2 のクライアントでメタデータを取り出して実行します。ダイアレクト 2 のクライアント
は、過渡的機能のすべてのインスタンスをレポートします。次に例を示します。
isql -i v5metadata.sql
データベースにダイアレクト 2 を設定してはなりません。
ダイアレクト 3 のクライアントとデータベース
ダイアレクト 3 では、InterBase サーバーは、過渡的機能を InterBase 6 の SQL 92 準拠として
解釈します。
• 二重引用符で囲まれた文字列は、区切り付き識別子として解釈されます。
A-4 操 作 ガ イ ド
SQL ダイアレクトの設定
• データベース:DATE データ型は、日付情報だけを保持します。クライアント:クライア
ントは、DATE データ型からの日付情報だけを期待します。
• TIME データ型を使用でき、時刻情報だけを保持します。
• ダイアレクト 3 のデータベースでは、
有効桁数が 9 桁を超える DECIMAL および NUMERIC
データ型は、ダイアレクト 3 で作成された列についてだけ、INT64 として格納されます。
• ダイアレクト 3 のクライアントは、有効桁数が 9 桁を超える DECIMAL および NUMERIC
データ型が INT64 として返されることを期待します。
古いデータを INT64 型の格納領域に移行する方法については、A-28 ページの「NUMERIC
および DECIMAL データ型をほんとうに移行する必要があるか ?」および A-28 ページの
「NUMERIC および DECIMAL データ型の移行」を参照してください。
SQL ダイアレクトの設定
サーバーまたはクライアントの SQL ダイアレクトはさまざまな方法で設定できます。たと
えば、IBConsole のユーザーインターフェイスには、SQL ダイアレクトを指定するメニュー
オプションがあります。IBConsole の使い方については、第 3 章「IBConsole:InterBase
インターフェイス」を参照してください。この節では、コマンドラインでダイアレクトを設
定する方法について説明します。
isql クライアントのダイアレクトの設定
isql を使って特定のダイアレクトのデータベースを作成するには、まず isql をそのダイア
レクトに設定してから、それを使ってデータベースを作成します。isql のダイアレクトは、
以下の方法で設定できます。
• コマンドラインで、isql を -sql_dialect n オプション(n は 1、2、または 3)を指定して起動
します。
isql -sql_dialect n
• isql のセッション内で、次の文を実行します。
SET SQL DIALECT n
次の表に、isql のダイアレクトが設定される優先順位を示します。
表 A.1
isql のダイアレクトの優先順位
順位
設定される方法
3(最下位)
接続しているバージョン 6 データベースのダイアレクト
3
コマンドラインで指定されたダイアレクト
isql -sql_dialect n
2
セッション内で指定されたダイアレクト
SET SQL DIALECT n;
1(最上位)
接続しているバージョン 5 データベースのダイアレクト
Appendix A InterBase の移行
A-5
SQL ダイアレクトの設定
InterBase 6 では、isql はダイアレクトに関して次のように動作します。
• isql を起動してダイアレクトを指定せずにデータベースに接続した場合、isql はデータベー
スのダイアレクトを使用します。
• isql を起動するときにコマンドラインでダイアレクトを指定した場合、isql は、ダイアレク
トを明示的に変更しない限り、接続後もそのダイアレクトを使用し続けます。
• セッション中に SET SQL DIALECT n を使ってダイアレクトを変更すると、isql は、ダイア
レクトを明示的に変更しない限り、そのダイアレクトを使用し続けます。
• isql を使ってデータベースを作成する場合、データベースは isql クライアントのダイアレ
クトを使用します。たとえば、isql がダイアレクト 1 に設定されているときにデータベース
を作成すると、データベースはダイアレクト 1 のデータベースとなります。
• 最初に isql クライアントのダイアレクトを指定せずにデータベースを作成した場合、また
は既存のデータベースに接続する前にデータベースを作成した場合、isql はそのデータ
ベースのダイアレクトを 3 に設定します。
以上の動作は、isql をコマンドラインユーティリティとして実行している場合も、InterBase
の新しいインターフェイスである IBConsole を介して実行している場合も同じです。
重要
バージョン 5 のデータベースに接続する InterBase 6 の isql クライアントは、すべてダイア
レクト 1 にリセットされます。
gpre ダイアレクトの設定
InterBase 6 では、gpre は接続先のデータベースのダイアレクトを使用します。これにより、
gpre は変更を加える必要なくバージョン 6 以前のソースファイルを解析できます。
gpre は、
-sql_dialect n スイッチを付けて起動することにより、異なるダイアレクトのクライアント
として動作するように設定できます。
gpre のダイアレクトを変更する方法は、次の 2 つがあります。
• gpre の起動時に -sql_dialect n オプションを指定します。たとえば、次のコマンドは gpre を
ダイアレクト 3 に設定します。
gpre -sql_dialect 3
• ソース内でダイアレクトを指定します。例を示します。
EXEC SQL
SET SQL DIALECT n
gpre のダイアレクトの優先順位は次のとおりです。
3(最下位)
接続したデータベースのダイアレクト
中間
コマンドラインでの指定
gpre -sql_dialect n
1(最上位)
次の例のようにソース内で明示的に指定されたダイアレ
クト
EXEC SQL
SET SQL DIALECT n
A-6 操 作 ガ イ ド
機能とダイアレクト
データベースダイアレクトの設定
ODS 10 以降のデータベースのダイアレクトを設定するには、所有者または SYSDA として
データベースに接続します。コマンドラインオプション -sql_dialect n を指定して gfix を実
行します。n は 1 または 3 です。たとえば、次の文は、mydb.ib をダイアレクト 3 に設定し
ています。
gfix -sql_dialect 3 mydb.ib
コマンドの発行前に考慮する問題については、A-23 ページの「ダイアレクト 3 へのデータ
ベースの移行」を参照してください。
機能とダイアレクト
InterBase 6 以降で導入された機能の多くは、ダイアレクトを参照せずに動作します。ただ
し、ダイアレクトに固有の機能もあります。次に、ダイアレクトに固有の機能について説
明します。
すべてのダイアレクトで使用できる機能
以下に示す新しい機能は、1 と 3 の両方のダイアレクトで利用できます。
IBConsole:InterBase のグラフィックインターフェイス
InterBase のグラフィックインターフェイスである IBConsole は、古い Server Manager と
InterBase Windows isql の機能を統合したものです。この 1 つの統合インターフェイスから、
データベースの作成と保守、サーバーの設定と保守、対話型 SQL の実行などのすべての操
作を行うことができます。
読み取り専用データベース
InterBase 6 データベースを読み取り専用に設定することができます。これにより、CD-ROM
などの読み取り専用メディアでの配布が可能になるとともに、データベースに対して偶発
的な変更や悪意のある変更が加えられる可能性が低くなります。
列定義の変更
ALTER TABLE 文の ALTER COLUMN 句を使用して、列の名前、データ型、または位置を
変更できます。
ドメイン定義の変更
ALTER DOMAIN を使用して、ドメイン定義の名前またはデータ型を変更できるようになり
ました。
Appendix A InterBase の移行
A-7
機能とダイアレクト
EXTRACT() 関数
新しい EXTRACT() 関数は、新しい DATE、TIMESTAMP、および TIME データ型から情報を
抽出します。ダイアレクト 1 では、この関数を使って TIMESTAMP データ型から情報を抽出
できます。メモ:DATE は、ダイアレクト 3 のデータベースにおいて従来と異なる意味を持
つという点で新しいデータ型と言えます。
SQL 警告
InterBase API の関数セットは、エラーメッセージに加えて警告メッセージや情報メッセー
ジをステータスベクターに返すようになりました。
サービス API、インストール API、ライセンス API
InterBase に新しい 3 つの関数ライブラリが追加されました。サービス API は InterBase クラ
イアントライブラリの一部で、データベースの保守、ソフトウェアの起動、データベース
およびサーバーの設定情報の要求、セキュリティデータベースにおけるユーザーエントリ
の操作のための関数を提供します。
gbak の新しい機能
InterBase 6 では、gbak の機能が拡張されました。gbak を使用して、次の操作を実行できま
す。
• 複数のファイルにバックアップする、複数のファイルから復元を行う。
• -service スイッチを使用して、サーバー側でバックアップおよび復元を行う。
• 復元時にデータベースを読み取り専用モードに設定する。
InterBase Express™(IBX)
IBX は、InterBase データアクセス、サービス、およびインストールのためのネイティブな
Delphi コンポーネントを提供します。Borland C++Builder でも IBX コンポーネントを使用
できます。
ダイアレクト 3 のデータベースでのみ使用できる機能
以下の機能は、ダイアレクト 1 での使用と競合するため、ダイアレクト 3 のクライアント
およびデータベースでしか使用できません。
区切り付き識別子
識別子は、キーワード、空白、大文字と小文字の区別、非 ASCII 文字を含めることができ
ます。このような識別子は、二重引用符で区切る必要があります。文字列定数は、単引用符
で区切る必要があります。
A-8 操 作 ガ イ ド
機能とダイアレクト
INT64 データの格納
ダイアレクト 3 のデータベースでは、有効桁数が 9 桁を超える DECIMAL および NUMERIC
列は INT64 として格納されます。この操作は、ダイアレクト 3 で作成された列にのみ適用
されます。これらのデータ型は、ダイアレクト 1 および前バージョンの InterBase では
DOUBLE PRECISION として格納されます。この格納方法の変更に伴って、異なる演算アル
ゴリズムも必要になります。
DATE データ型と TIME データ型
ダイアレクト 3 では、DATE データ型は日付情報だけを保持します。前バージョンの
InterBase では、タイムスタンプ全体が格納されていました。
ダイアレクト 3 では、タイムスタンプの時刻部分だけを保持する TIME データ型を使用でき
ます。
InterBase の新しいキーワード
InterBase 6、6.5、および 7 には、次の新しいキーワードが導入されています。
BOOLEAN
HOUR
TIMESTAMP
COLUMN
MINUTE
TRUE
CURRENT_DATE
MONTH
TYPE
CURRENT_TIME
PERCENT
UNKNOWN
CURRENT_TIMESTAMP
ROWS
WEEKDAY
DAY
SECOND
YEAR
EXTRACT
TIES
YEARDAY
FALSE
TIME
これらのキーワードは、すべてのダイアレクトに共通の予約語です。
• バージョン 6 以降では、ダイアレクト 1 のデータベースにおいて上記のキーワードのいず
れかをオブジェクト名(識別子)として使用している場合は、オブジェクトを作成するこ
とはできません。
• これらのキーワードを識別子として使用しているバージョン 5 のデータベースは、オブ
ジェクト名を変更せずにバージョン 6 以降のダイアレクト 1 に移行できます。たとえば、
“YEAR” という名前の列などです。
• バージョン 5 のクライアントは、エラーを出さずにこれらのキーワード識別子にア
クセスできます。
• バージョン 6 のクライアントは、識別子として使用されているキーワードにアクセ
スできません。ダイアレクト 1 のデータベースでは、識別子の名前をキーワード以外
の名前に変更する必要があります。
• ダイアレクト 3 に直接移行する場合は名前をそのまま使用できますが、それらを二
重引用符で区切る必要があります。従来のクライアントのアクセス可能性を保つに
は、名前をすべて大文字にします。区切り付き識別子には大文字と小文字の区別が
あります。
Appendix A InterBase の移行
A-9
機能とダイアレクト
• TIME はバージョン 6 のダイアレクト 1 では予約語ですが、データ型として使用してはなり
ません。これにより、データベースとバージョン 5 のクライアントとのデータ型の互換性
が保証されます。
• ダイアレクト 3 のデータベースおよびクライアントでは、二重引用符で区切ることで任意
の予約語を識別子として使用できます。
区切り付き識別子
SQL 92 標準への適合性を高めるために、InterBase 6 では区切り付き識別子を導入していま
す。識別子とは、任意のデータベースオブジェクト(たとえばテーブル、列、トリガー)の
名前です。区切り付き識別子とは、二重引用符で囲まれた識別子を意味します。引用符を
使って名前の境界を区切るので、前バージョンの InterBase に比べてオブジェクト名として
使用できる名前の範囲が大きく広がりました。オブジェクト名では、次のことが可能になり
ました。
• キーワードの使用
• スペースを含める(末尾のスペースは不可)
• 大文字と小文字を区別する
二重引用符の変更点
バージョン 5 以前の InterBase では、文字列定数を単引用符または二重引用符のどちらでも
囲むことができました。区切り付き識別子という概念はまだありませんでした。InterBase 6
(ダイアレクト 3)以降では、単引用符で囲まれた文字列は文字列定数として解釈され、二
重引用符で囲まれた文字列は区切り付き識別子として解釈されます。次に概要を説明しま
す。
• InterBase のすべてのバージョンで、単引用符で囲まれたものはすべて文字列定数として扱
われます。
• Inter Base 5 以前のバージョンでは、二重引用符で囲まれたものはすべて文字列定数として
扱われます。これは、これらのバージョンには、区切り付き識別子という概念がなかった
ためです。
• バージョン 6 のダイアレクト 1 は、引用符に関して旧バージョンの InterBase のように動作
する移行モードです。つまり、単引用符または二重引用符のいずれかで囲まれた文字列は
文字列定数として解釈されます。
• InterBase 6(ダイアレクト 3)以降では、二重引用符で囲まれた文字列は区切り付き識別子
として解釈されます。単引用符で囲まれた文字列は文字列定数として解釈されます。
• バージョン 6 以降の InterBase サーバーは、ダイアレクト 1 のクライアントを検出すると、
クライアント DML(データ操作)文に二重引用符が含まれることを許可し、これらを文字
列定数として正しく処理します。ただし、ダイアレクト 3 ではメタデータを使用できないた
め、これらのサーバーは、クライアント DDL(データ定義)文に二重引用符が含まれるこ
とは許可しません。バージョン 6 のサーバーはすべて、クライアントが新しいメタデータ
を作成する場合に、文字列定数が単引用符で区切られることを要求します。
A-10 操 作 ガ イ ド
機能とダイアレクト
DATE、TIME、TIMESTAMP データ型
InterBase 6 のダイアレクト 3 は、日付と時刻の両方の情報を保持する古い InterBase の
DATE データ型を、SQL-92 規格の TIMESTAMP、DATE、および TIME データ型に置き換え
ます。移行の基本的な問題は、InterBase 5 の DATE データ型を使用しているアプリケーショ
ンプログラムのソースコードにあります。InterBase 6 では、DATE キーワードは日付のみの
データ型を表しますが、バージョン 5 の DATE は日付および時刻のデータ型を表します。
InterBase 5 で DATE データ型として定義されていた列またはドメインは、そのデータベー
スを InterBase 6 で復元したときに TIMESTAMP 列になります。しかし、TIMESTAMP デー
タ型の小数点以下桁数が 4 桁であるのに対して、バージョン 5 の DATE データ型の小数点
以下桁数は 2 桁しかありません。
データベースをダイアレクト 3 に移行し、TIMESTAMP 列に日付または時刻しか必要としな
い場合、ALTER COLUMN を使って TIMESTAMP データ型を DATE または TIME に変更す
ることができます。DATE と TIME はどちらも 4 バイトしか使用しませんが、TIMESTAMP
と InterBase 5 の DATE は 8 バイトを使用します。TIMESTAMP 列が日付と時刻の両方を保
持している場合は、ALTER COLUMN で TIMESTAMP を InterBase 6 の DATE または TIME
に変更することはできません。ALTER COLUMN では、データの損失は許されないためで
す。ダイアレクトでは、以下の規則も適用されます。
• ダイアレクト 1 では、TIMESTAMP だけを使用できます。TIMESTAMP は、前のバージョン
の DATE データ型と同等です。古いデータベースをバージョン 6 でバックアップして復元
すると、DATE 型の列とドメインは自動的にすべて TIMESTAMP として復元されます。ダ
イアレクト 1 では、DATE データ型と TIMESTAMP データ型の両方を使用でき、どちらも同
じ意味を持ちます。
• ダイアレクト 3 の TIMESTAMP は、ダイアレクト 1 の場合と同様に機能します。また、使用
できるデータ型が 2 つ(DATE と TIME)追加されています。この 2 つのデータ型の機能は、
名前が示すとおりです。つまり、DATE は日付情報だけを、TIME は時刻情報だけを保持し
ます。
• ダイアレクト 3 では、DATE 列と TIME 列は 4 バイトを使用し、TIMESTAMP 列は 8 バイト
を使用します。
以下の例に、日付情報に関するダイアレクト 1 クライアントとダイアレクト 3 クライアン
トの違いを示します。
例
CREATE TABLE table1 (fld1 DATE, fld2 TIME);
INSERT INTO table1 VALUES (CURRENT_DATE, CURRENT_TIME);
ダイアレクト 1 クライアントを使用した場合
SELECT * FROM table1;
Statement failed, SQLCODE = -804
Dynamic SQL Error
-SQL error code = -804
-datatype unknown
-Client SQL dialect 1 does not support reference to TIME datatype
SELECT fld1 FROM table1;
Appendix A InterBase の移行
A-11
機能とダイアレクト
Statement failed, SQLCODE = -206
Dynamic SQL Error
-SQL error code = -206
-Column unknown
-FLD1
-Client SQL dialect 1 does not support reference to DATE datatype
ダイアレクト 3 クライアントを使用した場合
SELECT * FROM table1;
FLD1
FLD2
=========== =============
1999-06-25 11:32:30.0000
SELECT fld1 FROM table1;
FLD1
===========
1999-06-25
例
CREATE TABLE table1 (fld1 TIMESTAMP);
INSERT INTO table1 (fld1) VALUES (CURRENT_TIMESTAMP);
SELECT * FROM table1;
ダイアレクト 1 の場合
FLD1
===========
25-JUN-1999
ダイアレクト 3 の場合
例
FLD1
=========================
1999-06-25 10:24:35.0000
SELECT CAST (fld1 AS CHAR(5)) FROM table1;
ダイアレクト 1 の場合
======
25-JU
ダイアレクト 3 の場合
Statement failed, SQLCODE = -802
arithmetic exception, numeric overflow, or string truncation
TIMESTAMP 列の DATE または TIME への変換
データベースをダイアレクト 3 に移行すると、DATE データ型であった従来の列はすべて
TIMESTAMP データ型に変更されます。そのデータを DATE または TIME 列に格納する場合
は、次の操作を行います。
1
2
ALTER TABLE を使用して、目的の型の列を新しく作成します。
元の列から新しい列に値を挿入します。
UPDATE tablename SET new_field = CAST (old_field AS new_field);
A-12 操 作 ガ イ ド
機能とダイアレクト
3
4
ALTER TABLE を使用して、元の列をドロップします。
ALTER TABLE…ALTER COLUMN を使用して、新しい列の名前を変更します。
日付 / 時刻データ型のキャスト
InterBase 6 のダイアレクト 3 では、CAST 演算子を使ってタイムスタンプ値を文字値にキャ
ストしても、タイムスタンプの日付部分を削除することはできなくなりました。ダイアレク
ト 3 で TIMESTAMP を CHAR または VARCHAR にキャストする場合は、キャスト先の型が
24 文字以上ある必要があります。23 文字以内の場合は、文字列オーバーフロー例外が報告
されます。これは、SQL3 標準で規定されている事項です。
SELECT 文で CAST() 関数を使用して、日付 / 時刻データ型と各種の文字ベースのデータ型
との間で変換を行うことは可能です。文字データ型には、少なくとも 24 文字の長さが必要
です。ただし、TIMESTAMP を DATE にキャストし、その DATE を 24 文字未満の CHAR に
キャストすることは可能です。次に例を示します。
SELECT CAST (CAST (timestamp_col AS DATE) AS CHAR(10)) FROM table1;
日付 / 時刻データ型と、BLOB、SMALLINT、INTEGER、FLOAT、DOUBLE PRECISION、
NUMERIC、または DECIMAL データ型との間でキャストを行うことはできません。
詳細は、
『埋め込み SQL ガイド』の「CAST() による日付と時刻の変換」を参照してください。
表 A.2 は、日付 / 時刻データ型へのキャストの結果をまとめたものです。
表 A.2
日付 / 時刻データ型からのキャストの結果
キャスト先
元の型
TIMESTAMP
DATE
TIME
VARCHAR(n)
文字列は次の形式でなけれ
ばならない。
下記を参照
文字列は次の形式でなければ
ならない。
CHARACTER(n)
CSTRING(n)
Y Y Y Y - M M - D D
HH:MM:SS.thousands
HH:MM:SS.thousands
TIMESTAMP
常にキャスト可
タイムスタンプの
日付部分
タイムスタンプの時刻部分
DATE
常に変換される。タイムス
タンプの時刻部分は
0:0:0.0000 に設定される
常にキャスト可
エラー
TIME
常に変換される。タイムス
タンプの日付部分は現在の
日付に設定される
エラー
常にキャスト可
DATE から文字列へのキャストは、YYYY-MM-DD 形式(
「MM」は 2 桁の月)になります。結果が文
字列変数に収まらない場合は、文字列切り詰め例外が生成されます。前のバージョンでは、この
キャストの結果は DD-Mon-YYYY HH:mm:SS.hundreds 形式(「Mon」は英語の 3 文字の月の省略
名)になっていました。結果が文字列変数に収まらない場合は、文字列が自動的に切り詰められ
ました。
文字列から日付へのキャストでは、以下の形式を使用できるようになっています。
Appendix A InterBase の移行
A-13
機能とダイアレクト
'yyyy-mm-dd' 'yyyy/mm/dd' 'yyyy mm dd'
'yyyy:mm:dd' 'yyyy.mm.dd'
これらの形式で、数字 2 桁の月は、英語の 3 文字の省略名に置き換えることができます。だ
たし、順序は常に 4 桁の年、月、日の順でなければなりません。
旧バージョンの InterBase では、年が 2 桁の日付も含めて、何とおりかの形式の日付文字列
を入力することができました。それらの形式は InterBase 6 でも使用できます。年が 2 桁の日
付を入力した場合、InterBase は「スライドウィンドウ」アルゴリズムを使って年に世紀を
割り当てます。
旧バージョンの InterBase では以下の形式を使用でき、InterBase 6 でも使用できます。
'mm-dd-yy' 'mm-dd-yyyy' 'mm/dd/yy'
'mm dd yy' 'mm dd yyyy' 'mm:dd:yy'
'dd.mm.yy' 'dd.mm.yyyy'
'mm/dd/yyyy'
'mm:dd:yyyy'
月を英語の完全な名前または英語の 3 文字の省略名で指定する場合、月と日はどちらが先
でもかまいません。以下の例では、“xxx” は完全な月名または 3 文字の省略名を表します。
以下のすべての形式を使用できます。
'dd-xxx-yy''dd-xxx-yyyy' 'xxx-dd-yy'
'dd xxx yy''dd xxx yyyy' 'xxx dd yy'
'dd:xxx:yy''dd:xxx:yyyy' 'xxx:dd:yy'
'xxx-dd-yyyy'
'xxx dd yyyy'
'xxx:dd:yyyy'
たとえば、以下の INSERT 文はどれも 1943 年 1 月 22 日の日付を挿入します。
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
t1
t1
t1
t1
VALUES
VALUES
VALUES
VALUES
('1943-01-22');
('01/22/1943');
('22.01.1943');
('jan 22 1943');
次の文は、2043 年 1 月 22 日の日付を挿入します。
INSERT INTO t1 VALUES ('01/22/43');
表 A.3 は、日付 / 時刻データ型からのキャストの結果をまとめたものです。
表 A.3
日付 / 時刻データ型からのキャストの結果
元の型
変換先:VARCHAR(n)、CHARACTER(n)、または CSTRING(n)
TIMESTAMP
n が 24 以上の場合は変換される。
結果の文字列の形式は YYYY-MM-DD HH:MM:SS.thousands
DATE
n が 10 以上の場合は変換される。
結果の文字列の形式は YYYY-MM-DD
TIME
n が 13 以上の場合は変換される。
結果の文字列の形式は HH:MM:SS.thousands
日付 / 時刻データ型の加算と減算
次の表は、DATE、TIME、TIMESTAMP、および数値の加算と減算の結果をまとめたもので
す。「数値」は、データベースエンジンによって高精度数値としてキャストできる値
(INTEGER、DECIMAL、NUMERIC など)を示します。
A-14 操 作 ガ イ ド
機能とダイアレクト
表 A.4
日付 / 時刻データ型の加算と減算
Operand1
演算子
Operand2
結果
DATE
+
DATE
エラー
DATE
+
TIME
TIMESTAMP(連結)
DATE
+
TIMESTAMP
エラー
DATE
+
数値
DATE + 日数 (小数部は無視される)
TIME
+
DATE
TIMESTAMP(連結)
TIME
+
TIME
エラー
TIME
+
TIMESTAMP
エラー
TIME
+
数値
TIME + 秒数 (24 時間の剰余演算)
TIMESTAMP
+
DATE
エラー
TIMESTAMP
+
TIME
エラー
TIMESTAMP
+
TIMESTAMP
エラー
TIMESTAMP
+
数値
TIMESTAMP:DATE + 日数
TIME + 数値の小数部を秒数に変換した値
DATE
–
DATE
DECIMAL(9,0)(日数を表す)
DATE
–
TIME
エラー
DATE
–
TIMESTAMP
エラー
DATE
–
数値
DATE:日数(小数部は無視される)
TIME
–
DATE
エラー
TIME
–
TIME
DECIMAL(9,4)(秒数を表す)
TIME
–
TIMESTAMP
エラー
TIME
–
数値
TIME:秒数(24 時間の剰余演算)
TIMESTAMP
–
DATE
エラー
TIMESTAMP
–
TIME
エラー
TIMESTAMP
–
TIMESTAMP
DECIMAL(18,9)(整数部が日数、小数部が秒数を表
す)
TIMESTAMP
–
数値
TIMESTAMP:DATE – 日数
TIME:数値の小数部を秒数に変換した値
メモ
数値 + (DATE、TIME、または TIMESTAMP) は、(DATE、TIME、または TIMESTAMP) + 数
値と同じ結果になります。
Appendix A InterBase の移行
A-15
機能とダイアレクト
日付 / 時刻データ型に集計関数を使用する
日付 / 時刻データ型は、MIN()、MAX()、COUNT() 関数、これらの関数の DISTINCT 引数、
および SELECT() 関数の GROUP BY 引数に使用できます。日付 / 時刻データ型に SUM() ま
たは AVG() 関数を使用すると、エラーが返されます。
デフォルト句
CURRENT_DATE、CURRENT_TIME、および CURRENT_TIMESTAMP は、ドメイン定義ま
たは列定義のデフォルト句として指定できます。
日付時刻情報の取り出し
EXTRACT() 関数は、データベースから日付および時刻情報を取り出します。ダイアレクト
3 では、EXTRACT 演算子を使って TIMESTAMP 値の特定の部分を抽出できます。EXTRACT
演算子は、情報の書式化と取り出しに関して、ダイアレクトを区別しません。EXTRACT()
の構文は次のとおりです。
EXTRACT (part FROM value)
EXTRACT() 式に渡される値は、DATE、TIME、または TIMESTAMP でなければなりません。
データ型の中に存在しない部分を取り出そうとすると、エラーになります。例を示します。
EXTRACT (TIME FROM aTime)
たとえば、EXTRACT (YEAR from aTime) のような文はエラーになります。
EXTRACT() 式のデータ型は、取り出される部分によって異なります。
表 A.5
日付時刻情報の取り出し
取り出す部分
結果の
データ型
表す内容
YEAR
SMALLINT
年(0 ~ 5400)
MONTH
SMALLINT
月(0 ~ 12)
DAY
SMALLINT
日(1 ~ 31)
HOUR
SMALLINT
時(0 ~ 23)
MINUTE
SMALLINT
分(0 ~ 59)
SECOND
DECIMAL(6,4)
秒(0 ~ 59.9999)
WEEKDAY
SMALLINT
曜日(0 ~ 6。0 = 日曜、1 = 月曜、...)
YEARDAY
SMALLINT
年初からの日数(1 ~ 366)
SELECT EXTRACT (YEAR FROM timestamp_fld) FROM table_name;
=======
1999
SELECT EXTRACT (YEAR FROM timestamp_fld) FROM table_name;
=======
1999
SELECT EXTRACT (MONTH FROM timestamp_fld) FROM table_name;
A-16 操 作 ガ イ ド
機能とダイアレクト
=======
6
SELECT EXTRACT (DAY FROM timestamp_fld) FROM table_name;
=======
25
SELECT EXTRACT (MINUTE FROM timestamp_fld) FROM table_name;
=======
24
SELECT EXTRACT (SECOND FROM timestamp_fld) FROM table_name;
============
35.0000
SELECT EXTRACT (WEEKDAY FROM timestamp_fld) FROM table_name;
=======
5
SELECT EXTRACT (YEARDAY FROM timestamp_fld) FROM table_name;
=======
175
SELECT EXTRACT (MONTH FROM timestamp_fld) ||
'-' || EXTRACT (DAY FROM timestamp_fld) ||
'-' || EXTRACT (YEAR FROM timestamp_fld) FROM table_name;
====================
6-25-1999
DECIMAL データ型と NUMERIC データ型
以降の節では、InterBase 6 で変更された数値の扱い方について説明します。データベースを
ダイアレクト 1 からダイアレクト 3 に移行する場合は、以降の内容を十分に理解する必要
があります。移行を検討するにあたっては、新しい機能を利用するにはクライアントのダ
イアレクトを 3 に設定して文を作成する必要があることに注意してください。
移行で最も注意する問題は、高精度数値をオペランドとする除算演算子と AVG() 関数(内
部で除算が行われる)の使用に関連する部分です。ここで言う「高精度数値」は、INTEGER、
SMALLINT、DECIMAL、および NUMERIC 型を意 味します。有効桁数が 9 桁を超える
NUMERIC および DECIMAL データ型は、
「有効桁数の大きな高精度数値」と呼ばれます。
有効桁数の大きな高精度数値は、ダイアレクト 1 では DOUBLE PRECISION として格納さ
れ、ダイアレクト 3 で作成された列では INT64 として格納されます。
重要
高精度数値列をダイアレクト 3 に移行すると、列は DOUBLE PRECISION として格納されま
す。INT64 型は DOUBLE PRECISION で格納可能な範囲をすべて格納することができないの
で、移行を行ってもデータが格納される方法は変わりません。これにはデータが紛失する可
能性が伴うので、InterBase では直接的な変換は許されていません。データを INT64 として
格納する場合は、新しい列を作成してそこにデータをコピーする必要があります。ダイアレ
クト 3 で作成された高精度数値列だけが INT64 として格納されます。この処理の詳細は、
A-23 ページの「ダイアレクト 3 へのデータベースの移行」で詳しく説明します。
Appendix A InterBase の移行
A-17
機能とダイアレクト
ダイアレクト 3 に移行する際は、高精度数値列を INT64 に変更する必要がある場合とない
場合とがあります。28 ページの「NUMERIC および DECIMAL データ型をほんとうに移
行する必要があるか ?」を参照してください。
以下に、ダイアレクト 3 の機能と変更点を示します。
• 64 ビット整数のサポート。
• オーバーフローの保護。ダイアレクト 1 では、2 つの整数の積が 31 ビットを超えた場合、積
は 232 を法として返されました。ダイアレクト 3 では、真の結果が 64 ビット整数として返さ
れます。さらに、2 つの高精度数値の積、合計、差、または商が 63 ビットを超える場合、
InterBase は演算オーバーフローエラーメッセージを発行して演算を終了します (前のバー
ジョンでは、真の結果の最下位の数字が返されることがありました)
。以下のストアドプロ
シージャ bignum にこの処理を示します。
両方のオペランドがダイアレクト 3 の高精度数値である場合、除算を伴う演算は高精度数
値 を 返 し ま す。同 じ 演 算 を ダイアレクト 1 で実行した場合、その結果は DOUBLE
PRECISION となります。
ダイアレクト 3 でオペランドに 2 つの高精度数値を使用した場合に DOUBLE PRECISION
型の商を取得するには、除算を行う前に、いずれかのオペランドを明示的に DOUBLE
PRECISION 型にキャストします。
CREATE TABLE table 1 (n1 INTEGER, n2 INTEGER);
INSERT INTO table 1 (n1, n2) VALUES (2, 3);
SELECT n1 / n2 FROM table1;
======================
0
同様に、高精度数値の列を平均して DOUBLE PRECISION 値を取得するには、平均を計算す
る前に引数を DOUBLE PRECISION 型にキャストする必要があります。
SELECT AVG(CAST(int_col AS DOUBLE PRECISION))FROM table1;
コンパイル済みオブジェクト
ストアドプロシージャ、トリガー、チェック制約、デフォルト値などのコンパイル済みオ
ブジェクトの動作は、そのオブジェクトがコンパイルされたときのクライアントのダイア
レクトの設定に応じて異なります。コンパイルされてサーバーによって検証されたオブ
ジェクトは、データベースの一部として格納され、そのオブジェクトを呼び出すクライア
ントのダイアレクトにかかわりなく動作は一定になります。
例
次のプロシージャがあるとします。
CREATE PROCEDURE exact1 (a INTEGER, b INTEGER) RETURNS (c INTEGER)
AS BEGIN
c = a / b;
EXIT;
END;
A-18 操 作 ガ イ ド
機能とダイアレクト
ダイアレクト 1 のクライアントによって作成された場合
EXECUTE PROCEDURE exact 1 は、ダイアレクト 1 またはダイアレクト 3 のクライアントで
実行されたときに 1 を返します。
ダイアレクト 3 のクライアントによって作成された場合
EXECUTE PROCEDURE exact 1 は、ダイアレクト 1 またはダイアレクト 3 のクライアントで
実行されたときに 0 を返します。
例
次のプロシージャがあるとします。
CREATE PROCEDURE bignum (a INTEGER, b INTEGER) RETURNS (c NUMERIC(18,0)
AS BEGIN
c = a * b;
EXIT;
END;
ダイアレクト 1 のクライアントによって作成された場合
EXECUTE PROCEDURE bignum (65535, 65535) は、ダイアレクト 1 またはダイアレクト 3 の
クライアントで実行されたときに –131071.0000 を返します。
ダイアレクト 3 のクライアントによって作成された場合
EXECUTE PROCEDURE bignum (65535, 65535) は、ダイアレクト 1 のクライアントで実行さ
れたときに「*ERROR* can’t access INT64」を返します。
EXECUTE PROCEDURE bignum (65535, 65535) は、ダイアレクト 3 のクライアントで実行さ
れたときに 4294836225 を返します。
ジェネレータ
InterBase 6 のジェネレータは 64 ビット値を返し、264 回の呼び出しで一巡します(増分を 1
とした場合)。InterBase 5 では、232 回の呼び出しで一巡していました。ジェネレータから
返される値を保持するには、アプリケーションは ISC_INT64 変数を使用する必要がありま
す。ダイアレクト 1 を使用しているクライアントは更新されたジェネレータ値の最下位の
32 ビットだけを受け取りますが、ダイアレクト 1 を使用しているクライアントに 32 ビット
値を返すときであっても 64 ビット値全体がエンジンによってインクリメントされます。
データベースでジェネレータの値を保持するために INTEGER フィールドを使用していた
場合は、64 ビットの整数値を保持できるようにフィールドを再作成する必要があります。
その他の問題
• IN 句の要素数は 1500 個までという制限があります。
対策 要素数が 1500 を超える場合は、値を一時テーブルに入れた後、リスト要素のかわり
に SELECT サブクエリーを使用します。
• クライアントのダイアレクトが 3 の場合、文字型フィールドに対する算術演算を行うこと
はできません。
対策 演算を行う前に情報を明示的にキャストします。
Appendix A InterBase の移行
A-19
サーバーとデータベースの移行
• クライアントのダイアレクトが 3 の場合、isql を使って TIMESTAMP 列から選択すると、す
べての情報が表示されます。
対策 バージョン 6.0 以前の InterBase では、SET TIME ON が有効な場合にのみタイムスタン
プの時刻部分が表示されました。6.0 においてクライアントのダイアレクトが 3 の場合、タ
イムスタンプの時刻部分は常に表示されます。
サーバーとデータベースの移行
サーバーとアプリケーションは、異なるタイミングで InterBase 6 に移行できます。つまり、
個別に移行を行うことができます。移行を検討する際は、次の事項に注意してください。
• 旧バージョンのクライアントでも、InterBase 6 に移行したデータベースにアクセスできま
す。ただし、新しいデータ型や INT64 として格納されているデータにはアクセスできませ
ん。また、前のバージョンのクライアントは、二重引用符で囲まれた要素を文字列として
扱います。
• 実際に運用するサーバーおよびデータベースを移行する前に、移行手続きをチェックする
ためのテストベッドを確立することを強くお勧めします。テストベッドは、移行対象の運
用クライアントやサーバーと同じプラットフォームで動作する必要はありません。
移行経路としては、既存のサーバーを置き換えるのか、新しいサーバーをインストールし
て従来のデータベースを移動するのかによって、いくらか違いが生じます。既存のサーバー
をアップグレードする場合、コストはあまりかかりませんが、多くの時間と労力が必要で
す。移行対象のサーバーと、それとともに移行するデータベースは、アップグレード作業の
間すべて使用できなくなります。InterBase 6 サーバー用に新しいハードウェアを使用でき
る場合は、サービスをあまり中断することなく移行を並列的に行うことができます。この方
法には、移行に関して問題が発生した場合に元の環境に戻すのが容易であるという利点が
あります。
サーバーのインプレース移行
この節では、InterBase 5 サーバーを InterBase 6 サーバーに置き換える場合に推奨される手
順を説明します。
1
バックアップを行う前に、各データベースをシャットダウンしてトランザクションをす
べて終了します。
2
バージョン 5 サーバー上のすべてのデータベースをバックアップします。設定済みの
ユーザー ID を保持する場合は、isc4.ib もバックアップします。
安全策として、データベースを検証してからバックアップを行います。次に、各データ
ベースを復元してバックアップファイルが有効であることを確認します。
3
バージョン 5 のサーバーをシャットダウンします。いったんアンインストールを行った
後でインストールを行うのはよいやり方ですが、現在のサーバーが Superserver でそれ
に上書きインストールする場合は、サーバーをアンインストールする必要はありませ
ん。同一コンピュータ上で複数のバージョンの InterBase を使用することはできません。
現在のサーバーが Classic の場合は、InterBase 6 をインストールする前にサーバーをア
ンインストールする必要があります。
A-20 操 作 ガ イ ド
サーバーとデータベースの移行
4
バージョン 5 のサーバーをシャットダウンします。
メモ isc4.ib および isc4.gbk はインストール時に上書きされません。
5
新しいサーバーを起動します。
• Windows NT の場合は、コントロールパネルの[サービス]から InterBase Guardian
を起動します。
• Windows 2000 の場合は、コントロールパネルの[管理ツール|サービス]から
InterBase Guardian を起動します。
• Windows 98/ME では、InterBase Guardian アプリケーションを実行します。
• UNIX / Linux プラットフォームでは、次のコマンドを使用して、ユーザー InterBase
で InterBase Superserver を起動します。
# echo "/usr/InterBase/bin/ibmgr -start -forever" | su InterBase
UNIX では、InterBase は root または InterBase ユーザーでしか実行できません。
6
有効なユーザーのリストを復元するには、次の操作を行います。
a isc4.gbk を isc4_old.ib に復元します。
b サーバーをシャットダウンします。
c isc4_old.ib を isc4.gdb にコピーします。
d isc4_old.gbk を isc4.gbk にコピーします。
e サーバーを再起動します。
7
古いデータベースファイルを削除します。各データベースをバックアップファイルから
復元します。これで、現在のバージョンのデータベースが作成されます。5.x 以前のデー
タベースをバックアップした場合、ダイアレクトは 1 になります。それ以降のデータ
ベースをバックアップした場合、ダイアレクトは保持されます。
8
それぞれのデータベースに対して完全な検証を実行します。
上記の作業が完了すると、InterBase 6 サーバーと、InterBase 6 のダイアレクト 1 データベー
スを使用できるようになります。このデータベースの詳細は、A-22 ページの「InterBase
6 のダイアレクト 1 データベースについて」を参照してください。データベースをダイア
レクト 3 に移行する方法については、A-23 ページの「ダイアレクト 3 へのデータベース
の移行」を参照してください。クライアントの移行については、A-31 ページの「クライア
ントの移行」を参照してください。
新しいサーバーへの移行
この節では、InterBase 6 以降を新しいサーバーとしてインストールし、従来の InterBase 5
以前からデータベースを移行する場合に推奨される手順を説明します。この作業は、インラ
インインストールの手順とは少し異なります。
次の手順において、「古い」データベースは、バージョン 5 以前の InterBase サーバーにあ
るデータベースを意味します。「新しい」は、バージョン 6 以降の InterBase サーバーを意
味します。
Appendix A InterBase の移行
A-21
サーバーとデータベースの移行
1
バックアップを行う前に、古いデータベースをシャットダウンしてトランザクションを
すべて終了します。
2
古いサーバー上にあるデータベースをすべてバックアップします。既存のユーザー ID
を維持する場合は、isc4.ib もバックアップします。
3
4
新しいサーバーをインストールします。
新しいサーバーを起動します。
• Windows NT では、コントロールパネルの[サービス]から InterBase Guardian を起
動します。
• Windows 98 では、InterBase Guardian アプリケーションを実行します。
• UNIX / Linux プラットフォームでは、次のコマンドを使用して、ユーザー InterBase
で InterBase Superserver を起動します。
# echo "/usr/InterBase/bin/ibmgr -start -forever" | su InterBase
UNIX では、InterBase は root または InterBase ユーザーでしか実行できません。
5
データベースのバックアップファイルを新しいサーバーにコピーし、各データベースを
バックアップファイルから復元します。この処理により、現在のバージョン、ODS、お
よびダイアレクトが維持されたデータベースが作成されます。メモ:これ以降のバー
ジョンの InterBase では、最新の ODS のデータベースが常にダイアレクト 1 で作成され
ます。
バックアップファイルは、ダイアレクト 3 への移行が完了するまで保管してください。
6
有効なユーザーのリストを復元するには、次の操作を行います。
a isc4.gbk を isc4_old.ib に復元します。
b サーバーをシャットダウンします。
c isc4_old.ib を isc4.gdb にコピーします。
d isc4_old.gbk を isc4.gbk にコピーします。
e サーバーを再起動します。
7
新しいサーバー上のそれぞれのデータベースに対して完全な検証を実行します。
上記の作業が完了すると、InterBase 6 サーバーと、InterBase 6 のダイアレクト 1 データベー
スを使用できるようになります。このデータベースの詳細は、A-22 ページの「InterBase
6 のダイアレクト 1 データベースについて」を参照してください。データベースをダイア
レクト 3 に移行する方法については、A-23 ページの「ダイアレクト 3 へのデータベース
の移行」を参照してください。クライアントの移行については、A-31 ページの「クライア
ントの移行」を参照してください。
InterBase 6 のダイアレクト 1 データベースについて
ここでは、バージョン 5 のデータベースをバックアップし、それを InterBase 6 で復元した
場合について説明します。
A-22 操 作 ガ イ ド
ダイアレクト 3 へのデータベースの移行
• バージョン 5 のクライアントは、特に変更を加えることなくデータベース内のすべての要
素にアクセスできます。
• 17 個の新しいキーワードのいずれかがオブジェクト名(たとえば列またはテーブルの名前)
の中で使用されていた場合、バージョン 6 のダイアレクト 1 クライアントでこれらのオブ
ジェクトにアクセスするには、オブジェクト名を変更する必要があります。ALTER TABLE
の新しい ALTER COLUMN 句を使用すると、列名の変更を簡単に実装できます。
• バージョン 5 のクライアントはそのような列にアクセスできます。
• ダイアレクト 3 のクライアントは、これらの列が二重引用符で区切られていれば列
にアクセスできます。
• 17 個の新しいキーワードは予約語です。ただし、新しいデータ型の TIME と DATE はデー
タ型として使用することはできません。DATE 列は、従来どおりの日付と時刻を意味しま
す。DATE の新しい意味(日付のみ)はダイアレクト 3 でのみ利用できます。
• 従来 DATE データ型であった列は、TIMESTAMP データ型になります。TIMESTAMP 型は、従
来のバージョンの DATE が保持していたのとまったく同じ情報を保持します。
• 高精度数値列(9 桁を超える有効桁数を持つ DECIMAL または NUMERIC データ型の列)
は、DOUBLE PRECISION データ型として格納されます。これらの列に対して機能していた
演算アルゴリズムはすべて従来どおりに機能します。ダイアレクト 1 では、データを INT64
型として格納することはできません。
ダイアレクト 3 へのデータベースの移行
ダイアレクト 1 からダイアレクト 3 にデータベースを移行する場合は、主に次の 4 つの点
に注意します。
• 二重引用符
• DATE データ型
• 有効桁数の大きな高精度数値(ここでは、有効桁数が 9 桁を超える NUMERIC および
DECIMAL データ型を指します)
• キーワード
移行手順は、元のデータベースから空のダイアレクト 3 データベースにデータを移動する
アプリケーションを作成できるかどうかによってやや異なります。このようなユーティリ
ティを使用できない場合は、元のデータベースのインプレース移行を行う必要があります。
概要
どちらの方法を行うにしても、データベースからメタデータを抽出し、問題領域の有無を
調べ、問題があればそれを解決することから始めます。
• インプレース移行では、修正済みの SQL 文をメタデータファイルから新しいスクリプト
ファイルにコピーした後で修正を加え、元のデータベースに対してそのスクリプトを実行
します。次に、データベースをダイアレクト 3 に設定します。データベースをダイアレクト
3 に設定した後は、古いデータを INT64 型として格納するための作業があります。
Appendix A InterBase の移行
A-23
ダイアレクト 3 へのデータベースの移行
• ユーティリティを使って古いデータベースから新しく作成した空のデータベースにデータ
を移動することができる場合は、まず、修正済みのメタデータファイルを使って新しいダ
イアレクト 3 データベースを作成します。次に、ユーティリティを使って古いデータベー
スから新しいデータベースにデータを移動します。
どちらの場合でも、INT64 型として格納する必要がある列やそれまで二重引用符を含んで
いた列制約およびデフォルトを正常に移行するには、新しいデータベースに変更を加える
必要があります。
以降では、この 2 つの方法について説明します。
方法 1:インプレース移行
1
データベースをバージョン 6 のダイアレクト 1 に移行していない場合は、まずその移行
処理を行います。そして、データベースを再度バックアップします。
2
isql -x を使用して、データベースからメタデータを抽出します。GDML を含んだレガ
シーデータベースを移行する場合は、A-30 ページの「古いデータベースの移行」を参
照してください。
3
スクリプトファイルとして使用する空のテキストファイルを作成します。メタデータ
ファイル内のデータ構造を修正するときに、データ構造をこのファイルにコピーして新
しいスクリプトを作成します。
メモ: 上記の作業のかわりに、変更のない SQL 文を元のメタデータファイルから削除し
て済ませることもできますが、誤りが残っている文が原因で問題が発生する可能性が高
くなります。Borland では、元のデータベースに対して実行する必要がある文だけを含
んだ新しいスクリプトファイルを作成することをお勧めします。
残りの手順では、テキストエディタを使ってメタデータファイルとスクリプトファイルを
修正します。コピーした文を新しいスクリプトファイルにコピーします。このとき、依存エ
ラーを防ぐために、文がメタデータファイル内と同じ順序になるようにします。
4
抽出したメタデータファイル内で二重引用符が使用されている箇所を検索します。二重
引用符は、トリガー、ストアドプロシージャ、ビュー、ドメイン、テーブル列のデフォ
ルト、または制約内で使用されている可能性があります。文字列を区切っている二重引
用符をすべて単引用符に変更します。列レベルの制約または列のデフォルトが二重引用
符で囲まれていたすべてのテーブルをメモしておきます。
変更を加えたそれぞれの文をスクリプトファイルにコピーします。ただし、列レベルの
制約または列のデフォルト内でのみ二重引用符が使用されていた ALTER TABLE 文はコ
ピーしてはなりません。
重要 トリガーまたはストアドプロシージャコードをコピーするときは、それに関連す
る SET TERM 文も必ずコピーしてください。
A-24 操 作 ガ イ ド
ダイアレクト 3 へのデータベースの移行
引用符の中の引用符 文字列内部に単引用符または二重引用符を含めている場合は、
誤って変更を加えないように個別に検索と置換を行う必要があります。文字列内部の引
用符は、以下に示すように扱います。
表 A.6
文字列内部の引用符の処理
文字列
In "peg" mode
二重引用符で囲む
場合:
"In ""peg"" mode"
単引用符で囲む場
合:
'In "peg" mode'
文字列:
O'Reilly
二重引用符で囲む
場合:
"O'Reilly"
単引用符で囲む場
合:
'O''Reilly'
5
新しいスクリプトファイル内で、TIMESTAMP データ型の出現箇所を検索します。ほと
んどの場合、6 より前のデータベースでは当該箇所に DATE データ型が使用されている
はずです。これらの箇所それぞれに対して、ダイアレクト 3 のデータベースで TIME、
TIMESTAMP、または DATE のいずれを使用するかを決定します。必要に応じてデータ
型を変更してください。
6
メタデータファイルに対して手順 5 を繰り返します。変更したそれぞれの文を新しいス
クリプトファイルにコピーします。
7
新しいスクリプトファイル内で、オブジェクト名として使用されている予約語をすべて
検索し、それらを二重引用符で囲んで区切り付き識別子にします。
8
メタデータファイルに対して手順 7 を繰り返します。変更したそれぞれの文を新しいス
クリプトファイルにコピーします。
9
2 つのファイルのそれぞれにおいて、有効桁数が 9 桁を超える DECIMAL データ型また
は NUMERIC データ型の出現箇所を検索します。その列またはドメインのデータを
DOUBLE PRECISION 型または INT64 型のどちらとして格納するかを検討します。この
議論については、A-28 ページの「NUMERIC および DECIMAL データ型をほんとう
に移行する必要があるか ?」を参照してください。DOUBLE PRECISION として格納す
る箇所についてはデータ型をそのように変更します。INT64 として格納する箇所につい
ては、この時点で変更を加えないでおきます。メタデータファイル内で変更を加えたそ
れぞれの文を新しいスクリプトファイルにコピーします。
新しいスクリプトファイル内で次の操作を行います。
10 CREATE TRIGGER 文と CREATE DOMAIN 文を検索して ALTER TRIGGER または
ALTER DOMAIN に変更します。
11 CREATE VIEW 文を検索します。この文の前に、対応する DROP 文を記述します。たと
えば、CREATE VIEW foo という文があるとします。この場合、その直前に DROP VIEW
foo 文を記述して、このスクリプトをデータベースに対して実行したときに各ビューが
ドロップ後に再作成されるようにします。
Appendix A InterBase の移行
A-25
ダイアレクト 3 へのデータベースの移行
12 名前付きテーブルレベル制約を含んでいるという理由でコピーした ALTER TABLE 文が
ある場合は、名前付き制約を削除する以外は何も行わないように文を修正し、その制約
に単引用符を付けて元の位置に戻します。
13 ストアドプロシージャの文が ALTER PROCEDURE 文になっていることを確認します。
この確認は必ず行ってください。
14 スクリプトの先頭部分に、移行対象である元のデータベースに接続するための
CONNECT 文を記述します。
15 データベースのバックアップをとっていることを確認してから、データベースに対して
スクリプトを実行します。
16 gfix を使ってデータベースのダイアレクトを 3 に変更します。
gfix -sql_dialect 3 database.ib
注意:データベースに対して gfix を実行するには、データベースの所有者または
SYSDBA として接続する必要があります。
17 この時点で、9 桁を超える有効桁数を持つ DECIMAL および NUMERIC 列は、やはり
DOUBLE PRECISION 型として格納されます。INT64 型としてデータを格納するには、
A-28 ページの「NUMERIC および DECIMAL データ型をほんとうに移行する必要が
あるか ?」をお読みになり、必要に応じて A-28 ページの「NUMERIC および
DECIMAL データ型の移行」に示す手順にしたがってください。
18 IBConsole または gfix を使ってデータベースを検証します。
これで作業は終わりです。ダイアレクト 3 データベースを使用できるようになりました。9
桁を超える有効桁数を持つ NUMERIC および DECIMAL 列を INT64 型として格納する場合
は、もう少し作業が必要です。現時点では、これらの列は DOUBLE PRECISION 型として格
納されます。これらの列のデータ型を変更した方がよいかどうかについては、A-28 ページ
の「NUMERIC および DECIMAL データ型をほんとうに移行する必要があるか ?」およ
び A-28 ページの「NUMERIC および DECIMAL データ型の移行」を参照してください。
これ以外にも、
「列デフォルトと列制約」および「名前なしテーブル制約」で説明する作業
があります。
重要
前述の手順によって作成したダイアレクト 3 のデータベースからメタデータを抽出し、そ
のメタデータを使って新しいデータベースを作成する場合は、抽出したメタデータの中の
列デフォルト、列制約、または名前なしテーブル制約内に文字列定数を区切る二重引用符
が含まれていないことを確認してください。そのような二重引用符が見つかった場合は、そ
のメタデータを使って新しいデータベースを作成する前に、すべて単引用符に変更してく
ださい。
列デフォルトと列制約
前述の手順では、列デフォルト、列制約、および名前なしテーブル制約内の二重引用符で
囲まれた文字列定数をそのまま使用し続けました。これは、作成された文字列定数がバイナ
リ形式で保存されるといる理由から可能なことです。
A-26 操 作 ガ イ ド
ダイアレクト 3 へのデータベースの移行
前述の手順にしたがうと、完全に機能するダイアレクト 3 のデータベースが作成されます。
ただし、列デフォルト、列制約、または名前なしテーブル制約内に二重引用符で囲まれた
文字列定数が含まれている場合は、メタデータに対して SHOW を実行したりメタデータを
抽出したときに不整合が見つかります。このような不整合は、以下の操作で解決することが
できます。
1
2
データベースをバックアップします。
3
ALTER TABLE 文の ALTER COLUMN 句を使用して、影響を受けるそれぞれの列に一時
メタデータを調べて、二重引用符が使用されている列デフォルトまたは列制約を探し出
します。
的な名前を付けます。列の位置がクライアントにおいて問題となる可能性がある場合
は、その位置も変更します。
4
5
目的のデータ型を持つ新しい列を作成し、元の列と同じ列名および位置を指定します。
UPDATE を使用して、古い列から新しい列にデータをコピーします。
UPDATE table_name
SET new_col = old_col;
6
古い列を削除します。
名前なしテーブル制約
A-26 ページの「列デフォルトと列制約」の最初の 2 つの段落を読んで、制約に含まれてい
る二重引用符を必ずしも単引用符に変える必要がないという点とともに、変更する必要性
を理解してください。
二重引用符を含んでいる名前なしテーブル制約をダイアレクト 3 標準に適合させるには、
次の操作を行います。
1
2
データベースをバックアップします。
3
SHOW TABLE を使用して、検出した名前なしテーブル制約に InterBase によって割り当
てられている名前を確認します。
4
ALTER TABLE に SHOW TABLE で出力された名前を使って古い制約をドロップし、新
しい制約を追加します。将来における操作を容易にするために、制約に名前を付けま
す。
メタデータを調べて、二重引用符が使用されている名前なしテーブル制約を探し出しま
す。
たとえば SHOW TABLE を実行した結果、InterBase が名前なし制約を INTEG_2 として
格納していることがわかった場合は、以下の文を発行して制約を変更します。
ALTER TABLE foo
DROP CONSTRAINT INTEG_2,
ADD CONSTRAINT new_name
CHECK (col_name IN ('val1', 'val2', 'val3'));
Appendix A InterBase の移行
A-27
ダイアレクト 3 へのデータベースの移行
NUMERIC と DECIMAL のデータ型について
InterBase 5 以前のバージョンのデータベースの有効桁数が 9 桁を超える NUMERIC 列また
は DECIMAL 列(NUMERIC(12,2) など)をバックアップして、InterBase 6 のデータベース
に復元した場合、その列はやはり DOUBLE PRECISION として格納されます。InterBase では
データの損失が起こり得るデータ型の変換を行うことはできないため、ALTER COLUMN
文 で 列 の デ ー タ 型 を DOUBLE PRECISION から INT64 に変更することはできません。
DOUBLE PRECISION 列を INT64 列に移行するには、新しく INT64 列を作成して、古い列の
内容をそこにコピーする必要があります。
InterBase 6 のダイアレクト 3 では、有効桁数が 9 桁を超える NUMERIC 列または DECIMAL
列を作成すると、データは自動的に INT64 の高精度数値として格納されます。
有効桁数が 9 桁を超える NUMERIC および DECIMAL データ型を高精度数値として格納す
る場合は、ダイアレクト 3 への移行作業が終わった後で追加の操作を行う必要があります。
以降の節では、それらの作業の必要性を確認する方法を示すとともに、実際に高精度数値
が必要な場合に行う操作を示します。
NUMERIC および DECIMAL データ型をほんとうに移行する必要があるか ?
InterBase の将来のバージョンでは、ダイアレクト 1 はサポートされなくなります。ダイア
レクト 1 は、過渡的なモードとして現在提供されています。データベースをダイアレクト 3
に移行する場合は、NUMERIC および DECIMAL データ型の列に関する次の質問を考えて
みてください。
• 有効桁数は 10 桁未満か ? そうであれば問題はありません。特別な操作をせずに移行できま
す。データベースに変更はなく、クライアントにも影響はありません。
• 9 桁を超える有効桁数を持つ NUMERIC および DECIMAL 列の場合は、そのデータを格納
するのに DOUBLE PRECISION 型を使用するのが適切か ?
• 多くのケースにおいて、その答えは「はい」です。データを継続して DOUBLE
PRECISION 型として格納する場合は、データベースをダイアレクト 3 に移行する前
または移行した後で列のデータ型を DOUBLE PRECISION に変更します。この変更
を行ってもダイアレクト 3 における動作は影響を受けませんが、行に格納モードの
宣言が追加されます。ダイアレクト 3 のデータベースでは、この型の新しく作成され
た列は INT64 として格納されますが、移行した列はやはり DOUBLE PRECISION と
して格納されます。宣言を変更することにより、混乱を避けることができます。
• DOUBLE PRECISION は、丸めエラーに敏感な財務アプリケーション等に適切または
望ましいとは言えません。この場合は、ダイアレクト 3 の INT64 として列が格納さ
れるように移行を行う必要があります。このような判断を行うときは、INT64 型が
DOUBLE PRECISION と同じ範囲を格納しないことを思い出してください。データが
紛失する可能性や、それが許容可能かどうかをよく検討してください。
NUMERIC および DECIMAL データ型の移行
A-28 ページの「NUMERIC および DECIMAL データ型をほんとうに移行する必要がある
か ?」をよく読んで、ダイアレクト 3 データベースの 64 ビット整数として格納するのが最
適な列がダイアレクト 1 データベースにあるかどうかを検討してください。そのような列
が存在する場合は、それぞれの列に対して次の手順を行います。
A-28 操 作 ガ イ ド
ダイアレクト 3 へのデータベースの移行
1 A-24 ページの「方法 1: インプレース移行」に説明した手順でデータベースを
InterBase 6 に移行します。
2
ALTER DATABASE 文の ALTER COLUMN 句を使用して、影響を受けるそれぞれの列の
名前を別の名前に変更します。列の位置がクライアントにおいて問題となる可能性があ
る場合は、ALTER COLUMN を使ってその位置も変更します。
3
移行対象の列にそれぞれ対応する新しい列を作成します。新しい列には元の列と同じ名
前を付け、必要であれば同じ位置を設定します。それぞれの列を 9 桁を超える有効桁数
を持つ DECIMAL または NUMERIC として宣言します。
4
UPDATE を使用して、古い列から、対応する新しい列にデータをコピーします。
UPDATE tablename
SET new_col = old_col;
5
データが正常に新しい列にコピーされたことを確認した後、古い列を削除します。
方法 2:新しいデータベースへの移行
データベース間でデータをコピーするデータ転送ユーティリティを作成できる場合は、
データベースをダイアレクト 3 に移行する作業がたいへん単純になります。
概要 データベースからメタデータを抽出し、問題領域の有無を調べ、問題があればそれを
解決します。修正済みのメタデータファイルを使って新しいダイアレクト 3 データベース
を作成します。次に、アプリケーションを使って古いデータベースから新しいデータベー
スにデータを移動します。
1
データベースをバージョン 6 のダイアレクト 1 に移行していない場合は、まずその移行
処理を行います。そして、データベースを再度バックアップします。
2
isql を使用して、データベースからメタデータを抽出します。GDML で作成されたデー
タ構造を含んでいるデータベースを移行する場合は、A-30 ページの「古いデータベー
スの移行」を参照してください。
残りの手順では、テキストエディタを使ってメタデータファイルを修正します。
3
TIMESTAMP データ型の出現箇所を検索します。ほとんどの場合、6 以前のデータベー
スでは当該箇所に DATE データ型が使用されているはずです。ダイアレクト 3 のデータ
ベースで TIME、TIMESTAMP、または DATE のいずれを使用するかを決定します。必要
に応じてデータ型を変更してください。
4
オブジェクト名として使用されている予約語をすべて検索し、それらを二重引用符で囲
んで区切り付き識別子にします。
5
抽出したメタデータファイル内で二重引用符が使用されている箇所を検索します。二重
引用符は、トリガー、ストアドプロシージャ、ビュー、ドメイン、例外、テーブル列の
デフォルト、または制約内で使用されている可能性があります。二重引用符をすべて単
引用符に変更します。
6
9 桁を超える有効桁数を持つ DECIMAL または NUMERIC データ型が使用されている箇
所をすべて探します。データを DOUBLE PRECISION 型または INT64 型のどちらとして
格納するかを検討します。この議論については、A-28 ページの「NUMERIC および
Appendix A InterBase の移行
A-29
ダイアレクト 3 へのデータベースの移行
DECIMAL データ型をほんとうに移行する必要があるか ?」を参照してください。
DOUBLE PRECISION として格納する箇所についてはデータ型をそのように変更しま
す。INT64 として格納する箇所については、この時点で変更を加えないでおきます。
7
ファイルの先頭部分に、
「SET SQL DIALECT 3」と入力します。次の行に、新しいデー
タベースを作成するための CREATE DATABASE 文を記述します。
8
9
メタデータファイルをスクリプトとして実行して新しいデータベースを作成します。
データ転送ユーティリティを使用して、古いデータベースから新しいダイアレクト 3
データベースにデータをコピーします。大規模なデータベースの場合は、この処理にか
なりの時間がかかります。
10 gfix を使ってデータベースを検証します。
11 この時点で、9 桁を超える有効桁数を持つ DECIMAL および NUMERIC 列は、やはり
DOUBLE PRECISION 型として格納されます。INT64 型としてデータを格納するには、
A-28 ページの「NUMERIC および DECIMAL データ型をほんとうに移行する必要が
あるか ?」をお読みになり、必要に応じて A-28 ページの「NUMERIC および
DECIMAL データ型の移行」に示す手順にしたがってください。
古いデータベースの移行
GDML で作成されたデータ構造を含んでいるレガシーデータベースの場合は、これまでの
説明とはやや異なる方法でメタデータを抽出しなければならないことがあります。
1
前の節の手順 2 に説明した方法でメタデータを抽出し、テーブルおよびその他の DDL
構造がすべてあるかどうかを調べます。欠落があった場合は、そのメタデータファイル
を削除します。-x スイッチのかわりに -a スイッチを使って再度抽出を行います。これに
より、GDML で作成されたオブジェクトが抽出されます。
2
SQL 形式への変更が必要なコードが存在することもあります。たとえば、次のドメイン
定義は
CREATE DOMAIN NO_INIT_FLAG AS SMALLINT
( no_init_flag = 1 or
no_init_flag = 0 or
no_init_flag missing);
以下のように変更する必要があります。
CREATE DOMAIN NO_INIT_FLAG AS SMALLINT
CHECK ( VALUE = 1 OR VALUE = 0 OR VALUE IS NULL );
3
また、コメントアウトするコードもあります。次に例を示します。
CREATE TABLE BOILER_PLATE (BOILER_PLATE_NAME NAME,
DATE DATE,
CREATED_DATE COMPUTED BY /* Date */);
このコードは、次のように変更する必要があります。
CREATE TABLE BOILER_PLATE (BOILER_PLATE_NAME NAME,
"DATE" DATE,
CREATED_DATE COMPUTED BY "DATE");
A-30 操 作 ガ イ ド
クライアントの移行
クライアントの移行
古いクライアントアプリケーションを InterBase 6 に移行するには、そのクライアントアプ
リケーションがあるプラットフォームに InterBase 6 クライアントをインストールします。
これで、InterBase サーバーは、当該クライアントをバージョン 6 のダイアレクト 1 クライ
アントとして認識します。
アプリケーションを再コンパイルおよび再リンクする以外に、新しいアプリケーションで
使用されているフィールド名やデータ型などを記録しておくのはよい考えです。再コンパ
イルを行う場合は、次のようにダイアレクトを明示的に指定します。
SET SQL DIALECT n;
重要
データベースにおいてバージョン 6 の新しいキーワードをオブジェクト識別子として使用
しており、そのデータベースをダイアレクト 3 に移行する予定がない場合は、バージョン 5
クライアントを移行する必要はありません。そのようなデータベースをバージョン 6 のダ
イアレクト 1 に移行した場合、該当するキーワード列にアクセスできなくなります。A-9
ページの「InterBase の新しいキーワード」を参照してください。
既存の gpre クライアントを再コンパイルする場合は、gpre -sql_dialect n スイッチを指定す
る必要があります。
InterBase 6 のすべての新機能を利用できるダイアレクト 3 クライアントを作成する方法は
いくつかあります。
• Delphi で、新しい InterBase Express(IBX)パッケージ内の関数を呼び出します。IBX のバー
ジョンが InterBase5.x に対応している場合、その IBX には InterBase6 の新しいサービス API、
インストール API、ライセンス API 呼び出しは含まれていません。
• InterBase 6 のダイアレクト 3 の機能を利用する埋め込み SQL アプリケーションを作成する
には、gpre -sql_dialect 3 を使ってコンパイルを行います。
表 A.7
クライアントの移行:まとめ
クライアント
移行方法
InterBase バージョン 5 アプリ
ケーションなどの古いアプリ
ケーション
• ダイアレクトは 1 です。ダイアレクトを変更する方法はあ
isql
• 次のコマンドラインオプションを使用します。
りません。
• バージョン 5 のクライアントアプリケーションは、当該ク
ライアントが存在するコンピュータ上に InterBase 6 クライ
アントがインストールされると、バージョン 6 のダイアレ
クト 1 クライアントとなります。
-sql_dialect n
• または、次のコマンドを実行します。
SET SQL DIALECT n;
GPRE
• コマンドラインオプションを使用します。
-sql_dialect n
• または、次のコマンドを実行します。
EXEC SQL
SET SQL DIALECT n;
Appendix A InterBase の移行
A-31
他の DBMS 製品からの移行
表 A.7
クライアントの移行:まとめ
クライアント
移行方法
BDE
すべてのアプリケーションは SQL ダイアレクト 1 を使用しま
す。Delphi から InterBase のダイアレクト 3 の機能にアクセス
するには、IBX コンポーネントを使用します。
InterClient
InterBase 6: すべてのアプリケーションは SQL ダイアレクト 1
を使用します。
InterBase 7 では InterClient 3 を導入しています。これは、ダイ
アレクト 3 のクライアントです。
直接 API 呼び出し
isc_dsql_execute_immediate()、isc_dsql_exec_immed2()、お よ び
isc_dsql_prepare() API 呼び出しのダイアレクトパラメータに目
的のダイアレクト値(1 または 3)を設定します。
他の DBMS 製品からの移行
Paradox などの他の DMBS に大量のデータがある場合、そのデータを InterBase に移行する
最も効率的な方法は、元の DBMS から InterBase の外部ファイル形式にデータをエクスポー
トすることです (InterBase の外部ファイル形式については、
『データ定義ガイド』を参照)。
そして、外部ファイルからデータを内部テーブルに挿入します。新しい内部テーブルには制
約を設定しないことをお勧めします。InterBase にデータを入れてしまえば、データベース
の検証はたいへん容易に行うことができます。制約が存在する場合は、入力されるデータに
メッセージを送信するトリガーが必要になります。
A-32 操 作 ガ イ ド
付録
InterBase の制限
Appendix B
この付録では、InterBase の特性の数的制限を示します。次の表に示されている値は、設計
上の制限です。通常、これらの値は、オペレーティングシステムまたはコンピュータハー
ドウェアのリソースによってさらに制限されます。
Appendix B InterBase の制限
B-1
InterBase の制限
InterBase の制限
表 B.1
InterBase の仕様
特性
値
1 つのサーバーに接続できる
InterBase サーバーがサービスを提供できるクライアントの最大数
クライアントの最大数
を一意に決定することはできません。これは、オペレーティングシ
ステムの機能、ハードウェアの制限、各クライアントによるサー
バーへの要求など、複数の要因によって決定されます。アプリケー
ションの競合レベルが高い場合や複雑または大量の処理を行う場
合は、クライアントの実質的な数が減少する可能性があります。大
きな競合が発生しないアプリケーションの場合、InterBase は多数の
ユーザーをサポートできますが、その数を明確に定義することはで
きません。
最大データベースサイズ
InterBase による制限はありません。最大サイズは、オペレーティン
グシステムによって定義されます
データベースごとのファイルの
最大数
設計上は 216(65,536)です。これは、符合なし 16 ビット整数を使っ
てファイルが列挙されるためです。シャドウファイルの数もこの制
限に含まれます
これは、InterBase の設計上のパラメータです。ただし、多くのオペ
レーティングシステムでは、1 つのプロセスが同時に開くことがで
きるファイルの数の制限の方がかなり小さくなっています。OS に
よっては、この制限を上げる方法が用意されている場合もありま
す。一度に開くことができるファイルのデフォルト数、およびその
制限値を上げる方法については、OS のマニュアルを参照してくだ
さい
データベースごとのキャッシュ
ページの最大数
パフォーマンスを無視した場合は 65,536。実質的な上限値は 10,000
程度です。キャッシュページの合計サイズは、メモリの 50% を超え
ないようにします
1 つのトランザクションで開くこ
とができるデータベースの最大数
制限なし。トランザクションパラメータバッファ内のパラメータ
は、リンクリストからなります。そのため、システムリソースによ
る制限以外の制限はありません
データベースごとのテーブルの
最大数
32,640.
テーブルごとの最大バージョン数
255:データベースをバックアップして復元するまで、255 を超える
変更をメタデータに加えることはできません
行の最大サイズ
64KB. 各 Blob と配列は、この制限のうち 8 バイトを Blob ハンドルと
して使用します
システムテーブル(InterBase エンジンによって維持されている、シ
ステムデータのテーブル)には、128KB の行サイズ制限があります
テーブルの最大行数と最大列数
設計上は 232 行です。これは、テーブルごとに符合なし 32 ビット整
数を使って行が列挙されるためです
1 行内の列の数は、使用されるデータタイプに依存します。1 行には
64KB まで格納できます。たとえば、1 つのテーブルに INTEGER 型
の列(1 列が 4 バイト)を 16,384 個定義できます
B-2 操 作 ガ イ ド
InterBase の制限
表 B.1
InterBase の仕様
特性
値
テーブルごとの最大インデックス数
設計上は 216(65,536)です。これは、符合なし 16 ビット整数を使っ
てテーブルごとのインデックスが列挙されるためです
データベースごとの
最大インデックス数
設計上は 232 です。これは、データベースごとに 216 個のテーブルを
作成し、各テーブルに 216 個のインデックスを入れることができる
ためです
インデックスキーの最大サイズ
シングルカラムキーは 252 バイト、マルチカラムキーは 200 バイト
から始まり、1 列ごとに 4 バイトずつ減ります
例:シングルカラムの CHAR キーは最大 256 - 4 = 252 バイトです。
3 列のキーは最大 200 - 12 = 188 バイトです
マルチバイトキャラクタセットは、文字数ではなく、バイト数が
バイトの
キーに収まるようにしてください。たとえば、3
UNICODE_FSS キャラクタを使用するシングルカラムキーの場合
は、最大(256 - 4)/3 = 84 文字です
インデックスキーは、できるだけ小さくすることをお勧めします。
これにより、インデックスの深さが制限され、効率が高まります
ストアドプロシージャごとの
イベントの最大数
設計上の制限はありませんが、ストアドプロシージャまたはトリ
ガー内のコードの長さに制限がある場合は、実質的に制限されます
(下記を参照)
ストアドプロシージャまたは
トリガーの最大コードサイズ
48KB の BLR。BLR は、ストアドプロシージャまたはトリガー言語
最大 Blob サイズ
1 つの Blob の最大サイズは、データベースのページサイズによって
からコンパイルされたバイトコード言語です
異なります。
ページサイズが 1KB の場合:最大 Blob は 64MB
ページサイズが 2KB の場合:最大 Blob は 512MB
ページサイズが 4KB の場合:最大 Blob は 4GB
ページサイズが 8KB の場合:最大 Blob は 32GB
Blob は、多数のセグメントのストリームです。Blob セグメントの最
大サイズは 64KB です
JOIN における最大テーブル数
設計上の制限はありません。ただし、結合するテーブルの数が増え
るにしたがい、テーブルの結合タスクは指数的に増えていきます
JOIN で結合できるテーブルの実質的な最大数は約 16 です。ただ
し、許容できるパフォーマンスの範囲で結合できるテーブルの最大
数については、実際のアプリケーションと実用的な量のデータを
使って確認してください
ネストされたクエリーの
最高レベル
設計上の制限はありません
連結インデックスごとの最大列数
16
ストアドプロシージャまたは
トリガーごとのネストのレベル
• Window プラットフォームでは 750
実質的な制限は、ネストするクエリーの種類によって異なります。
許容できるパフォーマンスの範囲におけるクエリーの最大ネスト
数については、実際のアプリケーションと実用的な量のデータを
使って確認してください
• UNIX プラットフォームでは 1000
Appendix B InterBase の制限
B-3
InterBase の制限
表 B.1
InterBase の仕様
特性
値
SORT 句のキーの最大サイズ
32KB
外部テーブルファイルの
最大サイズ
び Mac OSX では 2 GB
日付値の範囲
西暦 100 年 1 月 1 日~西暦 32768 年 2 月 29 日
B-4 操 作 ガ イ ド
Windows 2000/2003/2008/XP/Vista では 4 GB。Solaris、Linux、およ
索引
数値
2 相コミット 7-34, 8-27
A
ADMIN_DB 6-3
AUTO モード 7-17
Average
data length(インデックスページ)10-10
fill(データページ)10-7
B
blindmeta.sql 6-7
BLOB データ
ID 番号 , 抽出 11-29
アクセス時間の短縮 8-32
セグメントサイズ 12-17
編集 11-29
保存 11-29
BLOB フィルタ 11-47
BLOBDUMP 11-29
C
CHECK 制約 11-44, 11-46
COMMIT 11-25, 11-57
CONNECT 11-24
CREATE DATABASE 11-22, 11-24
CREATE JOURNAL ARCHIVE コマンド
について 9-8
CREATE JOURNAL コマンド
オプション 9-4
使用 9-3
Creation date(ヘッダーページ)10-10
D
Data page slots(データページ)10-7
Data pages(データページ)10-7
DDL
自動コミット 11-14, 11-22
処理 11-20
抽出 11-22, 11-23, 11-26 ~ 11-27
定義 11-27
トランザクション 11-25
DECLARE FILTER 11-20, 11-26, 11-47
DML 11-27
処理 11-20
DROP JOURNAL ARCHIVE コマンド 9-10
DROP JOURNAL コマンド
について 9-8
DROP SHADOW 7-19
E
EDIT 11-30
INPUT と… 11-32
EXIT 11-31
QUIT と… 11-33
EXTERNAL_FILE_DIRECTORY 7-4
F
Fill distribution(インデックスページ)10-7, 1010
G
gbak コマンド
エラー メッセージ 8-18
概要 8-4
バックアップと復元を行う 8-4
gfix
エラー 7-40
コマンド 7-37 ~ 7-40
シャドウの起動 7-18
シャドウの削除 7-18
gsec 6-14 ~ 6-17
エラー 6-18
エントリの変更 6-17
オプション 6-16
起動 6-14, 6-17
項目の削除 6-17
コマンド 6-15 ~ 6-17
終了 6-14
ヘルプ 6-15
ユーザーの追加 6-15 ~ 6-17
リモートでの実行 6-14
gsplit 1-8
gstat 10-12
Guardian 4-1, 4-10, A-21, A-22
索引
I-1
I
ibconfig 4-18, 4-19
IBConsole
SQL 文の実行 11-7, 11-12
新しい接続の拒否 7-32
キャラクタセット 11-14
コミットとロールバック 11-11
再起動 , データベース 7-34
ジャーナル機能の有効化 9-7
スクリプトファイル , コメントの追加 11-57
セキュリティ 6-10
抽出 , メタデータ 11-19
ツール バー 3-4
ツリー ペイン 3-5
データベースの状態の表示 10-5
バックアップと復元を行う 8-23
保存 , ISQL の入力と出力 11-12
メタデータの表示 11-17
ワーク ペイン 3-7
ibguard 4-10
Implementation ID(ヘッダーページ)10-9
Index root page(データページ)10-7
INPUT 11-31
INPUT コマンド 11-31
InterBase
API, ユーザー管理 6-13
Guardian 4-1, 4-10, A-21, A-22
IBX で の デ ー タ ベ ー ス ア プ リ ケ ー シ ョン開
発 12-22
UNIX 4-10
バージョン番号 11-23, 11-54
ISC4.GDB 6-14
内容の表示 6-15, 6-16, 6-17, 8-17
isql 11-20 ~ 11-28
SET 文 11-34 ~ 11-44
SQL ダイアレクトの設定 11-24
エラー 11-28
オプション 11-21 ~ 11-23
環境の設定 11-27
起動 11-21, 11-24
コマンド 11-27 ~ 11-28
実行 11-7, 11-8, 11-31
終了 11-24, 11-28, 11-31, 11-33
出力 11-33
スクリプトファイル , IBConsole でのコメント
の追加 11-57
接続 , データベース 11-24
I-2 操 作 ガ イ ド
ターミネータ文字 11-21, 11-23
データベースの指定 11-21
入力と出力の保存 11-12
ヘルプの表示 11-31
編集 11-30
isql スクリプト →「SQL スクリプト」
ISQL スクリプトのコメント 11-57
L
Leaf buckets(インデックスページ)10-10
limbo トランザクション
2 相コミット 7-34
無視 8-6, 8-27
M
MANUAL モード 7-18
Max dup(インデックスページ)10-10
N
Next
connection ID(ヘッダーページ)10-9
header page(ヘッダーページ)10-9
transaction(ヘッダーページ)10-9
Nodes(インデックスページ)10-10
Number of cache buffers(ヘッダーページ)10-9
O
ODS オンディスク構造体を参照
Oldest
active(ヘッダーページ)10-9
transaction(ヘッダーページ)10-9
OTW 暗号 5-10
設定 5-10
例 5-15
OUTPUT 11-32
P
PLAN 12-22
PLAN オプション 11-13, 11-41
Primary pointer page(データページ)10-7
Q
QUIT 11-33
EXIT と… 11-31
R
RBD$ARCHIVE_NAMW 8-11, 9-11
RDB$ARCHIVE_LENGTH 9-11
RDB$ARCHIVE_SEQUENCE 9-11
RDB$ARCHIVE_TIMESTAMP 9-12
RDB$ARCHIVE_TYPE 9-11
RDB$DEPENDED_ON_SEQUENCE 9-12
RDB$DEPENDED_ON_TIMESTAMP 9-12
readmeta.sql 6-7
ROLLBACK 11-25
S
Sequence number(ヘッダーページ)10-9
SET 11-33
SET AUTODDL 11-35
SET BLOBDISPLAY 11-36
SET COUNT 11-38
SET ECHO 11-38
SET LIST 11-39
SET NAMES 11-40
SET PLAN 11-41 ~ 11-42
SET STATS 11-42
SET TERMINATOR 11-21
SET TIME 11-43
SET TRANSACTION 11-25
SET 文 11-34 ~ 11-44
Shadow count(ヘッダーページ)10-9
SHELL 11-44
SHOW CHECK 11-44
SHOW DATABASE 7-16, 11-45
SHOW DOMAINS 11-46
SHOW EXCEPTIONS 11-46
SHOW FILTERS 11-47
SHOW FUNCTIONS 11-48
SHOW GENERATORS 11-48
SHOW GRANT 11-49
SHOW INDEX 11-50
SHOW PROCEDURES 11-50
SHOW SYSTEM 11-52
SHOW TABLES 11-53
SHOW TRIGGERS 11-53
SHOW VERSION 11-54
SHOW VIEWS 11-55
SMP サポート 4-3, 4-8
SQL スクリプト
IBConsole での実行 11-8
isql による実行 11-31
作業のコミット 11-57
作成 11-55
実行 11-56
SQL スクリプトの実行
IBConsole での使用 11-8
SQL スクリプトの実行 →「SQL スクリプト」11-8
SQL ダイアレクト 7-11, 11-23, 11-24
SQLCODE 11-28
SQL 文
IBConsole でのコミット 11-11
IBConsole での実行 11-7 ~ 11-12
IBConsole でのロールバック 11-11
SuperServer アーキテクチャ 1-7
SYSDBA 6-2
T
TCP/IP 11-24
Total dup(インデックスページ)10-10
U
Use all space(復元オプション)8-34
V
version
オンディスク構造体 10-8
番号 , 表示 11-23, 11-54
W
Windows NT コマンド 11-44
Windows サーバープラットフォーム 1-2
writemeta.sql 6-7
あ
アーカイブ サイズの管理 9-10
シーケンス番号 9-11
スイープ 9-11
アーカイブ ダンプの管理 9-9
アーカイブのスイープ 9-11
アクセス , データベース 6-2 ~ 6-10
アプリケーション開発
InterBase Express 12-22
い
一時システムテーブル 10-1 ~ 10-4
インクリメンタル バックアップ
概要 8-7
インターネット自動ダイヤルアップ 5-20
索引
I-3
インデックス
Depth(インデックスページ)10-10
重複した値の復元 8-34
取得 11-50
パフォーマンスの向上 8-32 ~ 8-33, 12-18
表示 11-27, 11-50
無効 8-14, 8-34
インデックスの無効 8-14, 8-34
う
埋め込みユーザー認証(EUA)
について 6-4
有効化 6-4
ユーザーの追加と変更 6-6
え
エコー 11-22
エディタ 11-30
エラー
gbak 8-19
gfix 7-40
gsec 6-18
isql 11-28
接続拒否 5-19
接続不能 5-17, 5-22
お
置き換え , データベース 8-14, 8-33
オブジェクト
削除 11-51
表示 11-51
オペレーティングシステムのシェル 11-44
オンディスク構造体
キャッシュ
gsec エントリ 6-17
キャラクタセット 11-8
データベースのページサイズ 8-14, 8-32
ユーザー名 6-17
キャッシュバッファ , 数 7-25, 10-9
キャラクタセット , 変更 11-8, 11-14
強制書き込みとバッファ書き込み 7-26
共有ディスク , ノード名と… 11-24
く
クエリー 11-20
検査 12-25
プランの表示 11-13, 11-41
クライアントのダイアレクト 11-2, 11-24
グローバルヘッダー情報 10-16
け
警告 11-23
継続プロンプト 11-21
検査
データベース接続 5-24
検証 , データベース 7-27 ~ 7-31, 7-40
こ
コマンド
gfix 7-37 ~ 7-40
gsec 6-15 ~ 6-17
isql 11-27 ~ 11-28
実行 11-7, 11-8, 11-31
表示 11-31, 11-33
編集 11-30
コミット
version 10-8
AUTO 11-14, 11-22
アップグレード 8-4
テーブルごとのコミット 8-14, 8-33
か
さ
外部テーブル 7-3, 7-4
ガベージコレクション , 無効にする 8-26
環境 , isql 11-27
サーバー
き
起動
gsec 6-14, 6-17
InterBase Guardian 4-9
InterBase Server 4-9
isql 11-21, 11-24
I-4 操 作 ガ イ ド
UNIX での起動 4-11
登録 5-2
登録解除 5-5
ログ 4-22
ログイン 5-4
サーバープラットフォーム 1-2
サーバーへのログイン 5-4
再起動 , データベース 7-31, 7-34
削除
シャドウ 7-19
データベース 7-12
ユーザー 6-13
作成
シャドウ 7-15 ~ 7-18, 8-33
条件付きシャドウ 7-18
データベース 7-9
マルチファイルデータベース 7-5
し
ジェネレータ , 表示 11-18, 11-48
システム
エディタ 11-30
シェル 11-44
テーブル 11-52
ビュー 11-52
システムテーブルのセキュリティ 6-7
自動コミット , DDL 文 11-14, 11-22
ジャーナル アーカイブ
について 9-1
ジャーナル アーカイブ機能
アーカイブ サイズの管理 9-10
後続のダンプ 9-9
実装 9-8
使用 9-8
について 9-1
方法の概要 9-2
無効化 9-10
ジャーナル アーカイブ機能のコマンド
について 9-8
ジャーナル アーカイブの削除 9-10
ジャーナル アーカイブの変更 9-10
ジャーナル機能
IBConsole を使用した有効化 9-7
ベスト プラクティス 9-12
有効化 9-3
例 9-12
ジャーナル ファイル
切り替え間隔、ヒント 9-5
作成 9-3
事前割り当てジャーナル領域について 9-5
チェックポイント間隔、ヒント 9-6
チェックポイント、について 9-2
について 9-1
無効化 9-8
ジャーナル ファイルのアーカイブの作成
使用コマンド 9-9
頻度 9-9
ジャーナル ファイルの無効化 9-8
シャットダウン , データベース
新しい接続の拒否 7-32, 7-33
タイムアウトオプション 7-32
タイムアウト後の強制シャットダウン 7-33, 7-
38
シャドウ
AUTO モード 7-17
MANUAL モード 7-18
概要 7-14 ~ 7-15
削除 7-18, 7-19
作成 7-15 ~ 7-18, 8-33
条件付き 7-18
制限 7-15
ファイルの追加 7-19
有効化 7-18
利点 7-14
シャドウの起動 7-18
シャドウの削除 7-18
修復 , データベース 7-30 ~ 7-31
出力
isql 11-12, 11-33
verbose 8-7, 8-28, 8-35
ファイル 11-12, 11-22, 11-26
文 11-22
メタデータ 11-17, 11-27
ユーザー定義関数 11-18, 11-48
リダイレクト 11-12, 11-32
障害復旧
ジャーナル ファイルとジャーナル アーカイブ
の使用 9-10
使用コマンド 9-10
条件付きシャドウ 7-18
処理経過の出力 8-7, 8-28, 8-35
シリアル番号 2-1
信頼されたホスト 6-2
す
スイープ , データベース 7-22 ~ 7-24, 7-38
スイープ間隔 7-23
即時スイープ 7-24, 7-39
バックアップ中のスイープの抑制 8-26
無効にする 7-23
スクリプト →「SQL スクリプト」
ステータス情報
gstat 10-12
索引
I-5
IBConsole 10-5
表示 11-42
せ
制約 11-44, 11-46
セキュリティ
IBConsole 6-10
権限を表示 11-49
データベース 6-9
ユーザー設定の変更 6-12, 6-17
ユーザーの削除 6-13, 6-17
ユーザーの追加 6-11, 6-15
セキュリティデータベース 6-1
名前 6-3
接続
監視 10-1, 10-4
拒否 7-32
データベース 11-24
リモートサーバー 5-3, 5-24, 11-22, 11-23, 11-
24
接続 , データベース 5-7 ~ 5-9
新しい接続の拒否 7-32
トラブルシューティング 5-17 ~ 5-21
接続の監視 10-1 ~ 10-4
設定パラメータ 4-19
そ
損傷データ
修復 7-30
チェックサムを無視してバックアップ 8-6, 8-
27
た
ターミネータ文字
isql 11-21, 11-23
デフォルト 11-21
ダイアレクト 11-24
データベース 11-23
タイムスタンプ
バックアップ ファイル 8-10
タイムスタンプ名 9-4
対話型 SQL →「isql」
ち
チェックサム
header page(ヘッダーページ)10-8
無視 8-6, 8-27
I-6 操 作 ガ イ ド
チェックポイント
間隔の決定 9-6
について 9-2
チェックポイントの間隔 9-4
チェックポイントの長さ 9-4
抽出
DDL 11-22, 11-23
メタデータ 8-26, 11-19, 11-26, 11-27
つ
追加
isql スクリプトでのコメント 11-57
シャドウファイル 7-19
データベースファイル 7-5
ユーザー 6-11, 6-15, 6-17
ツール バー 3-4
ツリー ペイン 3-5
て
データベース
Creation date(ヘッダーページ)10-10
gbak と gsplit 1-8
gstat 10-12
IBConsole 10-5
アクセス 6-2 ~ 6-10
新しい接続の拒否 7-32
インデックスの無効 8-34
上書き 8-14, 8-33
置き換え 8-14, 8-33
オンディスク構造体のアップグレード 8-4
検査 7-27 ~ 7-31, 7-40
構造 , 抽出 11-45
再起動 7-31, 7-34
削除 7-12
作成 7-9
シャットダウン 7-31
シャットダウンと再起動 7-31
シャドウイング 7-14 ~ 7-19, 8-33
修復 7-30 ~ 7-31
情報の表示 11-45
スイープ 7-22 ~ 7-24, 7-38
スイープ間隔 7-23
即時スイープ 7-24, 7-39
セキュリティ 6-9
接続 5-7 ~ 5-9
接続のテスト 5-24
抽出 , メタデータ 8-6, 8-26
登録 5-5
登録解除 5-9
閉じる 5-8, 11-31, 11-33
名前 6-3, 7-4
名前情報 10-8
バックアップ 8-4, 8-24
ファイルの追加 7-5
ファイル命名規則 7-4
ページサイズ 8-14, 8-32 ~ 8-33, 10-8
マルチファイル作成 7-5
メタデータの表示 11-17
有効性検証を無効にする 8-14, 8-34
読み取り専用 7-9, 7-38, 8-14
ロック 10-16
データベース管理 6-11
概要 1-6
セキュリティユーティリティ 6-14 ~ 6-17
ユーザーの追加 6-15
ユーザーの変更 6-12, 6-17
データベースダイアレクト 11-23
データベースの復元
IBConsole の使用 8-23
コマンド 8-13
方法 8-13
データベースの復旧
ジャーナル ファイルとジャーナル アーカイブ
機能の使用 9-10
データベース バックアップ
IBConsole の使用 8-23
インクリメンタル 8-7
概要 8-1
タイプ 8-2
単一ファイル、概要 8-5
マルチファイル、概要 8-5
テーブル
制約 11-44, 11-46
リスト 11-18, 11-27
テキスト
エディタ 11-30
ブロックをファイルに保存 11-29
デッドロック 10-16
デフォルトターミネータ 11-21, 11-34
と
登録
サーバー 5-2
データベース 5-5
登録解除
サーバー 5-5
データベース 5-9
ドメイン 11-46
トラブルシューティングデータベース接続 5-17,
5-21
トランザクション
2 相コミット 7-34
DDL 11-25
isql 11-25
limbo トランザクションのロールバック 8-27
Oldest 10-9
Oldest active(ヘッダーページ)10-9
新しい接続の拒否 7-33
コミット 11-25, 11-31
ロールバック 11-25, 11-33
トリガー , リスト 11-27, 11-53
な
名前
データベース 6-3, 7-4
名前情報 10-8
に
入力ファイル 11-8, 11-22, 11-31
編集 11-44
ね
ネットワーク設定
暗号化 5-10
ネットワーク通信
暗号化 5-10
ネットワーク通信の暗号化 5-10
設定 5-10
例 5-15
の
ノード名 , 共有ディスクと… 11-24
は
バイナリ
データ 11-29
ファイル 11-29
パスワード
接続 , リモートサーバー 11-22
割り当て 6-12, 6-14, 6-15
バックアップ
索引
I-7
gbak の使用 8-4
インクリメンタル、概要 8-7
タイプ 8-2
単一ファイル
概要 8-5
マルチファイル、概要 8-5
バックアップ , データベース
オプション 8-25
外部ファイルから内部テーブルに変換 8-6, 8-
28
スイープの抑制 8-26
メタデータのみ 8-6, 8-26
バックアップ オプション
概要 8-1
バックアップと復元オプション
概要 8-1
バックアップと復元ツール 8-2
バッチ関数
更新 11-11
使用 11-11
バッファ書き込みと強制書き込み 7-26
ターミネータ文字 11-21, 11-23
表示 11-22
へ
ページ キャッシュ 9-4
ページ サイズ 9-4
ページサイズ
キャッシュ 8-14, 8-32 ~ 8-33
現在の…の表示 10-8
デフォルト 7-11
ヘッダーページの生成 10-8
ヘルプ
gsec 6-15
IBConsole 3-3
InterBase 3-3
ISQL コマンド 11-31
UNIX 4-11
編集
BLOB データ 11-29
isql コマンド 11-30
入力ファイル 11-44
ひ
ほ
ビュー , リスト 11-18, 11-55
表示
エラーメッセージ 11-33
オブジェクト 11-51
クエリープラン 11-13, 11-41
ステータス情報 11-42
バージョン番号 11-23
文 11-22
メタデータ 11-17, 11-27
保存 , ISQL の入力と出力 11-12
ふ
ファイル
書き込み 11-12, 11-22, 11-26
シャドウ 7-16, 7-19, 8-33
名前 6-3, 7-4
入力 11-8, 11-22
命名規則 7-4
フィルタ , 表示 11-18, 11-47
復元オプション 8-32
物理バックアップ
概要 8-2
プラットフォーム , サーバー 1-2
プロシージャ , リスト 11-20, 11-27, 11-50
文
I-8 操 作 ガ イ ド
ま
マルチファイルデータベース 7-5
マルチプロセッサのサポート 4-3, 4-8
む
無効にする
ガベージコレクション 8-26
有効性チェック 8-14, 8-34
無視
limbo トランザクション 8-6, 8-27
チェックサム 8-6, 8-27
め
メタデータ
IBConsole による 11-17
コマンドライン ISQL 11-20
抽出 8-26, 11-19, 11-26, 11-27
表示 11-17, 11-27
ゆ
有効性チェックを無効にする 8-34
ユーザー管理 6-13
ユーザー定義関数
表示 11-48
リスト 11-18, 11-48
ユーザー名 11-23
UNIX 6-2
キャッシュ 6-17
削除 6-13
追加 6-14, 6-15, 6-17
よ
読み取り専用データベース 7-9, 7-38, 8-14
ら
ライセンス管理
オプション 2-1
について 2-1
ライセンス マネージャの使用 2-4
ライセンス マネージャ
概要 2-4
使用 2-4
り
リモートサーバー , 接続 5-3, 5-24, 11-22, 11-23,
11-24
れ
例外 11-46
列ヘッダー , ページの長さの変更 11-22
ろ
ログ先行書き込み 9-1
ロック 10-16
テーブル 10-16
マネージャ 10-16
論理バックアップ
概要 8-2
わ
ワーク ペイン 3-7
割り当て , パスワード 6-12, 6-14, 6-15
索引
I-9