操作ガイド InterBase XE 2010 年 9 月 Copyright © 1994-2010 Embarcadero Technologies, Inc. Embarcadero Technologies, Inc. 100 California Street, 12th Floor San Francisco, CA 94111 U.S.A. All rights reserved. すべてのブランドおよび製品名は各社の商標または登録商標です。本ソフトウェア / 文書には Embarcadero Technologies, Inc. の知的財産情報が含まれています。これは使用および公開の制限を含む 使用契約に基づいて提供されるものであり、著作権法によっても保護されています。 本ソフトウェアのリバース エンジニアリングは禁じられています。 本ソフトウェア / 文書が米国国防総省の米国政府機関に引き渡される場合には、制限付き権利で 引き渡されるものとし、以下の表示が適用されます。 制限付き権利の表示。政府による使用、複製または公開は、DFARS 252.227-7013 の 「Rights in Technical Data and Computer Software」条項(1988 年 10 月)の副項目 (c)(1)(ii) に 規定される制限に従います。 本ソフトウェア / 文書が米国国防総省以外の米国政府機関に引き渡される場合には、 FAR 552.227-14 の「Rights in Data-General」(Alternate III を含む)(1987 年 6 月)で定められた 制限付き権利で引き渡されます。 本ドキュメントに含まれる情報は、予告なしに変更されることがあります。 それらの変更や追加を通知するために改訂版が発行される場合があります。 Embarcadero Technologies, Inc. は、本ドキュメントにエラーが含まれないことを保証しません。 目次 表 . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 コンテキスト メニュー . . . . . . . . . . . 3-3 図 . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 IBConsole ツール バー . . . . . . . . . . 3-4 ツリー ペイン . . . . . . . . . . . . . . . . ワーク ペイン . . . . . . . . . . . . . . . . 標準テキスト表示ウィンドウ . . . . . . . IBConsole ウィンドウの切り替え . . . . IBConsole でのカスタム ツールの管理 . データベース パフォーマンスの監視 . . . パフォーマンス モニタの表示 . . . . . 第1章 はじめに 対象読者 . . . . . . . . . . . . . . . . . . . . . . 1-1 このガイドの内容 . . . . . . . . . . . . . . . . . 1-1 必要なシステムとサーバー構成 . . . . . . . . . 1-2 InterBase の主な機能 . . . . . . . . . . . . . . 1-2 SQL サポート . . . . . . . . . . . . . . . . . 1-4 複数のユーザーによるデータベースアクセス1-4 トランザクション管理 . . . . . . . . . . . . . 1-5 マルチジェネレーションアーキテクチャ . . 1-5 行レベルのオプティミスティックロック . . 1-5 データベース管理 . . . . . . . . . . . . . . . 1-6 サーバーセキュリティの管理 . . . . . . . 1-6 データベースのバックアップと復元 . . . 1-6 データベースの保守 . . . . . . . . . . . . 1-7 状態の表示. . . . . . . . . . . . . . . . . . 1-7 InterBase SuperServer アーキテクチャ . . . 1-7 コマンドラインツールの概要 . . . . . . . . . . 1-7 isql . . . . . . . . . . . . . . . . . . . . . . . . 1-8 gbak . . . . . . . . . . . . . . . . . . . . . . . 1-8 gfix . . . . . . . . . . . . . . . . . . . . . . . . 1-8 gsec . . . . . . . . . . . . . . . . . . . . . . . 1-9 gstat . . . . . . . . . . . . . . . . . . . . . . . 1-9 iblockpr (gds_lock_print) . . . . . . . . . . 1-9 ibmgr . . . . . . . . . . . . . . . . . . . . . . 1-9 . 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 SMP サポート . . . . . . . . . . . . . . . . . . . 4-8 プロセッサ制御の拡張: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 環境変数 TMP . . . . . . . . . . . . . . . . . 4-17 UNIX と Linux のホストの信頼関係 . . . . 4-17 一時ファイルの管理 . . . . . . . . . . . . . . . 4-17 履歴ファイルの設定. . . . . . . . . . . . . . 4-17 ソートファイルの設定 . . . . . . . . . . . . 4-18 第2章 ライセンス管理 InterBase XE のライセンス オプション. . . . Server Edition . . . . . . . . . . . . . . . . . Developer Edition . . . . . . . . . . . . . . Desktop Edition . . . . . . . . . . . . . . . . Desktop Edition で利用可能なアドオン ToGo Edition . . . . . . . . . . . . . . . . . . [ ライセンス マネージャ ] の使用 . . . . . . . . [ ライセンス マネージャ ] へのアクセス. . . . . . . . 2-1 2-2 2-3 2-3 2-3 2-3 2-4 2-4 第3章 IBConsole:InterBase インターフェイス IBConsole の起動. . . . . . . . . . . . . . . . . 3-2 IBConsole のメニュー . . . . . . . . . . . . 3-2 3 . . . . . . . . . . . . . . . . . . . . 「サービス」ファイルがクライアントとサー バーに設定されていますか ? . . . . . . 5-21 接続拒否エラー . . . . . . . . . . . . . . . . 5-21 データベースへの正しいパスがわかっていま すか ? . . . . . . . . . . . . . . . . . . . 5-22 UNIX ホストの信頼関係が確立されています か ? . . . . . . . . . . . . . . . . . . . . 5-22 データベースはネットワークファイルシステ ム上にありますか ? . . . . . . . . . . . 5-22 ユーザーとパスワードは正しいですか ? 5-22 サーバーはデータベースファイルに対する許 可を得ていますか ? . . . . . . . . . . . 5-22 サーバーは InterBase のインストールディ レクトリにファイルを作成する権限を得て いますか ? . . . . . . . . . . . . . . . . 5-22 インターネット自動ダイヤルアップの無効化 . . . . . . . . . . . . . . . . . . . . . . . . . 5-23 ネットワークアダプタのバインディング順序 の変更 . . . . . . . . . . . . . . . . . . . 5-23 レジストリでの自動ダイヤルアップの無効化 . . . . . . . . . . . . . . . . . . . . . . . 5-23 ローカルネットワーク動作に対して RAS が ダイヤルするのを抑制する . . . . . . . 5-23 その他のエラー . . . . . . . . . . . . . . . . 5-24 Unknown Win32 error 10061 . . . . . 5-24 ホストへのネットワークリクエストを確立で きない . . . . . . . . . . . . . . . . . . . 5-24 コミュニケーションの診断 . . . . . . . . . . . 5-25 [DB 接続]タブ . . . . . . . . . . . . . . . . 5-25 DB 接続テストを実行するには . . . . . 5-26 出力例(ローカル接続). . . . . . . . . . 5-26 [TCP/IP]タブ . . . . . . . . . . . . . . . . 5-27 [NetBEUI]タブ . . . . . . . . . . . . . . . 5-28 ibconfig の設定パラメータ. . . . . . . . . . . . 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-11 クライアント側の設定 . . . . . . . . . . . 5-11 サーバー側の設定 . . . . . . . . . . . . . . . 5-13 OTW のサンプル設定 . . . . . . . . . . . . . 5-16 サンプル 1: クライアントとサーバーの設定 (サーバーでクライアントを検証しない場 合) . . . . . . . . . . . . . . . . . . . . . 5-16 サンプル 2: クライアントとサーバーの設定 (クライアントを検証する場合). . . . . 5-17 サンプル 3: JDBC クライアントと InterBase サーバーの設定(クライアント を検証する場合) . . . . . . . . . . . . . 5-17 接続のトラブルシューティング . . . . . . . . . 5-19 接続不能エラー . . . . . . . . . . . . . . . . . 5-19 クライアントとサーバーの間に低レベルの ネットワークアクセスがありますか ? . 5-19 クライアントはサーバーのホスト名を解析で きますか ? . . . . . . . . . . . . . . . . . 5-20 サーバーはファイアウォールの後ろにありま すか ? . . . . . . . . . . . . . . . . . . . . 5-20 クライアントとサーバーは異なるサブネット にありますか ? . . . . . . . . . . . . . . 5-20 データベースにローカル接続できますか ? . . . . . . . . . . . . . . . . . . . . . . . 5-20 データベースループバックに接続できますか ? . . . . . . . . . . . . . . . . . . . . . . . 5-21 サーバーは InterBase ポートを認識できま すか ? . . . . . . . . . . . . . . . . . . . . 5-21 第6章 データベース ユーザー管理 セキュリティモデル . . . . . . . . . . . . . . . . 6-1 SYSDBA ユーザー . . . . . . . . . . . . . . . 6-2 他のユーザー. . . . . . . . . . . . . . . . . . . 6-2 UNIX ユーザー . . . . . . . . . . . . . . . . . 6-3 InterBase セキュリティデータベース. . . . . . 6-3 強度の高いパスワード保護の実装 . . . . . . . . 6-4 埋め込みユーザー認証の有効化 . . . . . . . . . . 6-5 isc_databaseinfo API による EUA が有効か どうかの確認 . . . . . . . . . . . . . . . . . . 6-6 isql を使った EUA の有効化 . . . . . . . . . 6-6 IBConsole を使った EUA の有効化 . . . . . 6-6 ユーザーの追加と変更(EUA 有効化データ ベース). . . . . . . . . . . . . . . . . . . . . 6-7 4 データベースファイルの追加 . . . . . . . 7-5 データベースファイルのサイズ変更 . . . 7-5 ファイルの最大数 . . . . . . . . . . . . . . 7-6 アプリケーションからの操作 . . . . . . . 7-6 ファイル割り当ての変更 . . . . . . . . . . 7-6 ネットワークファイルシステム . . . . . . . . 7-7 オンディスク構造体(ODS). . . . . . . . . . . 7-7 読み取り / 書き込みデータベースと読み取り専用 データベース . . . . . . . . . . . . . . . . . . . 7-7 読み取り / 書き込みデータベース . . . . . . . 7-7 読み取り専用データベース. . . . . . . . . . . 7-8 読み取り専用データベースのプロパティ . 7-8 データベースを読み取り専用にする . . . 7-8 InterBase の旧バージョンでの読み取り専 用. . . . . . . . . . . . . . . . . . . . . . . 7-9 データベースの作成 . . . . . . . . . . . . . . . . 7-9 データベースオプション . . . . . . . . . . . 7-11 Page size . . . . . . . . . . . . . . . . . 7-11 [Default character set]. . . . . . . . . 7-11 SQL ダイアレクト . . . . . . . . . . . . 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-23 スイープの設定 . . . . . . . . . . . . . . 7-23 スイープ間隔の設定. . . . . . . . . . . . . . 7-23 自動スイープの抑止. . . . . . . . . . . . . . 7-24 データベースの即時スイープ処理. . . . . . 7-24 データベースキャッシュの設定 . . . . . . . . . 7-25 データベースごとのデフォルト キャッシュ サ イズ . . . . . . . . . . . . . . . . . . . . . . 7-25 システムテーブルのセキュリティ . . . . . . . . 6-8 古いデータベース . . . . . . . . . . . . . . . 6-8 データベースセキュリティを変更するためのス クリプト . . . . . . . . . . . . . . . . . . . . 6-8 移行における問題 . . . . . . . . . . . . . . . 6-9 SQL 特権 . . . . . . . . . . . . . . . . . . . . . . 6-9 ユーザーグループ . . . . . . . . . . . . . . . . . 6-10 SQL ロール . . . . . . . . . . . . . . . . . . . 6-10 UNIX グループ . . . . . . . . . . . . . . . . . 6-11 その他のセキュリティ . . . . . . . . . . . . . . 6-11 InterBase ツール使用についての制限 . . . 6-11 データベースの保護 . . . . . . . . . . . . . . 6-11 IBConsole でのユーザー管理 . . . . . . . . . 6-12 [ユーザー情報]ダイアログの表示 . . . . . 6-12 ユーザーの追加 . . . . . . . . . . . . . . . . . 6-13 ユーザー設定の変更 . . . . . . . . . . . . . . 6-14 ユーザーの削除 . . . . . . . . . . . . . . . . . 6-14 InterBase API でのユーザー管理. . . . . . . . 6-15 gsec によるセキュリティの管理 . . . . . . . . 6-15 リモートでの gsec の実行 . . . . . . . . . . 6-16 埋め込みデータベースユーザー認証と組み合わ せた gsec の実行. . . . . . . . . . . . . . . 6-16 gsec のコマンドの使い方 . . . . . . . . . . 6-16 セキュリティデータベースの表示 . . . . 6-17 セキュリティデータベースへのエントリの追 加 . . . . . . . . . . . . . . . . . . . . . . 6-17 セキュリティデータベースの変更 . . . . 6-19 セキュリティデータベースのユーザー項目の 削除 . . . . . . . . . . . . . . . . . . . . . 6-19 Windows コマンドプロンプトからの gsec の 使用 . . . . . . . . . . . . . . . . . . . . . . 6-19 gsec によるデータベース エイリアスの管理 . 6-19 gsec エラーメッセージ. . . . . . . . . . . . . . 6-20 第7章 データベースの環境設定と保守 データベースファイル . . . . . . . . . . . . . データベースファイルのサイズ . . . . . . 動的なファイルサイズの変更 . . . . . . . . データベース ファイルの事前割り当て isql -extract PREALLOCATE 句 . . . GSTAT. . . . . . . . . . . . . . . . . . . API の DPB パラメータ. . . . . . . . . 外部ファイル . . . . . . . . . . . . . . . . . 一時ファイル . . . . . . . . . . . . . . . . . ファイルの命名規則 . . . . . . . . . . . . . 一次ファイル指定. . . . . . . . . . . . . 二次ファイル指定. . . . . . . . . . . . . マルチファイルデータベース . . . . . . . . . . . . . . . . . . . . . 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 5 インクリメンタル バックアップで使用され るデータベース パラメータ ブロック . 8-11 ページ付録ファイル. . . . . . . . . . . . . . 8-12 GBAK でのデータベース領域の事前割り当て . . . . . . . . . . . . . . . . . . . . . . . . . 8-12 スイッチ -PR(EALLOCTE) の引数の使用 . . . . . . . . . . . . . . . . . . . . . . . 8-13 gbak によるデータベースの復元 . . . . . . 8-14 InterBase Service Manager での gbak の使 用 . . . . . . . . . . . . . . . . . . . . . . . 8-17 ユーザー名とパスワード . . . . . . . . . . . 8-18 バックアップと復元の例 . . . . . . . . . . . 8-18 データベースのバックアップの例 . . . . 8-18 データベースの復元例 . . . . . . . . . . 8-19 gbak のエラーメッセージ . . . . . . . . . . . . 8-20 IBConsole コマンドを使用したバックアップと復 元 . . . . . . . . . . . . . . . . . . . . . . . . . 8-24 IBConsole を使用したフル バックアップの実 行 . . . . . . . . . . . . . . . . . . . . . . . 8-24 IBConsole のバックアップ オプションについ て . . . . . . . . . . . . . . . . . . . . . . . 8-26 形式 . . . . . . . . . . . . . . . . . . . . . 8-27 メタデータのみ . . . . . . . . . . . . . . 8-27 ガベージ コレクション . . . . . . . . . . 8-27 Limbo でのトランザクション . . . . . . 8-28 チェックサム . . . . . . . . . . . . . . . . 8-28 テーブルへの変換 . . . . . . . . . . . . . 8-29 詳細出力 . . . . . . . . . . . . . . . . . . 8-29 別のオペレーティングシステムで動作するサー バーへのデータベースの転送 . . . . . . . 8-29 IBConsole を使用したインクリメンタル バッ クアップの実行 . . . . . . . . . . . . . . . 8-30 IBConsole でのデータベースの復元 . . . . . 8-31 復元オプション . . . . . . . . . . . . . . . . 8-33 ページ サイズ . . . . . . . . . . . . . . . 8-33 上書き . . . . . . . . . . . . . . . . . . . . 8-34 各テーブル後にコミット . . . . . . . . . 8-34 シャドウ ファイルの作成 . . . . . . . . . 8-34 インデックスの非アクティブ化 . . . . . 8-35 妥当性条件 . . . . . . . . . . . . . . . . . 8-35 全スペースの使用 . . . . . . . . . . . . . 8-35 詳細出力 . . . . . . . . . . . . . . . . . . 8-36 isql 接続ごとのデフォルト キャッシュ サイズ . . . . . . . . . . . . . . . . . . . . . . . . . 7-26 アプリケーションのキャッシュ サイズの設定 . . . . . . . . . . . . . . . . . . . . . . . . . 7-26 サーバーごとのデフォルトキャッシュサイズ . . . . . . . . . . . . . . . . . . . . . . . . . 7-26 キャッシュサイズの確認 . . . . . . . . . . . 7-27 強制書き込みとバッファ書き込み . . . . . . . . 7-27 検査と修復 . . . . . . . . . . . . . . . . . . . . . 7-28 データベースの検証 . . . . . . . . . . . . . . 7-28 gfix を使用したデータベースの検証 . . . 7-28 IBConsole を使用したデータベースの検証 . . . . . . . . . . . . . . . . . . . . . . . 7-29 破損したデータベースの修復 . . . . . . . . . 7-30 データベースのシャットダウンと再起動 . . . . 7-31 データベースのシャットダウン . . . . . . . 7-32 シャットダウンのタイムアウトオプション . . . . . . . . . . . . . . . . . . . . . . . 7-32 シャットダウンオプション . . . . . . . . 7-32 データベースの再起動 . . . . . . . . . . . . 7-34 limbo トランザクション . . . . . . . . . . . . . 7-34 トランザクションのリカバリ . . . . . . . . . 7-35 [トランザクション]タブ . . . . . . . . . 7-35 [詳細情報]タブ . . . . . . . . . . . . . . 7-36 管理ログの表示 . . . . . . . . . . . . . . . . . . 7-37 gfix コマンドラインツール . . . . . . . . . . . . 7-38 gfix のエラーメッセージ . . . . . . . . . . . . . 7-41 第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 インクリメンタル バックアップの上書き 8-9 タイムスタンプの変更点. . . . . . . . . . 8-10 第9章 ジャーナル機能と障害復旧 ジャーナル、ジャーナル ファイルとジャーナル アーカイブについて . . . . . . . . . . . . . . . 9-1 ジャーナル機能のしくみ . . . . . . . . . . 9-2 ジャーナル アーカイブ機能のしくみ . . . 9-2 6 ジャーナル機能とジャーナル アーカイブ機能を 使用するためのシステムの構成 . . . . . . 9-2 他の注意事項 . . . . . . . . . . . . . . . . 9-3 ジャーナル機能の有効化とジャーナル ファイルの 作成 . . . . . . . . . . . . . . . . . . . . . . . . 9-3 事前割り当てジャーナル領域について. . 9-5 ジャーナルの切り替え間隔を決定するための ヒント . . . . . . . . . . . . . . . . . . . 9-6 チェックポイントの間隔を計算するためのヒ ント . . . . . . . . . . . . . . . . . . . . . 9-6 ジャーナル情報の表示 . . . . . . . . . . . 9-7 IBConsole を使用したジャーナル機能の起動 . . . . . . . . . . . . . . . . . . . . . . . . . 9-7 ジャーナル ファイルの無効化 . . . . . . . . 9-8 ジャーナル アーカイブ機能の使用 . . . . . . . 9-8 ジャーナル アーカイブ機能を有効化するコ マンド . . . . . . . . . . . . . . . . . . . 9-9 ジャーナル ファイルのアーカイブを作成す るコマンド . . . . . . . . . . . . . . . . . 9-9 後続のアーカイブ ダンプを実行するコマン ド . . . . . . . . . . . . . . . . . . . . . . 9-10 ジャーナル ファイルのアーカイブを作成する頻 度は ? . . . . . . . . . . . . . . . . . . . . . 9-10 ジャーナル アーカイブの無効化 . . . . . . . 9-10 ジャーナル アーカイブでデータベースを復旧する . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-10 アーカイブ サイズの管理 . . . . . . . . . . . . . 9-11 アーカイブ シーケンス番号とアーカイブの スイープについて . . . . . . . . . . . . . 9-11 アーカイブ状態の追跡 . . . . . . . . . . . 9-12 ジャーナル機能のヒントとベスト プラクティス . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-12 最小構成の設計 . . . . . . . . . . . . . . . 9-12 サンプル ジャーナル アーカイブの作成 . 9-14 All Options . . . . . . . . . . . . . . . . . 10-6 Data Pages . . . . . . . . . . . . . . . . 10-7 データベースログ . . . . . . . . . . . . . 10-7 ヘッダーページ . . . . . . . . . . . . . . 10-8 インデックスページ . . . . . . . . . . . .10-11 システムリレーション . . . . . . . . . .10-11 IBConsole によるクライアント接続の監視 10-12 gstat コマンドラインツール . . . . . . . . . 10-13 ロック状態の表示 . . . . . . . . . . . . . . . . 10-15 api_database_info() による統計情報の取得 10-17 第 11 章 対話型クエリー IBConsole isql ウィンドウ . . . . . . . . . . . 11-1 SQL 入力領域 . . . . . . . . . . . . . . . . . 11-2 SQL 出力領域 . . . . . . . . . . . . . . . . . 11-2 ステータスバー . . . . . . . . . . . . . . . . 11-2 isql メニュー. . . . . . . . . . . . . . . . . . 11-3 [ファイル]メニュー . . . . . . . . . . . 11-3 [編集]メニュー . . . . . . . . . . . . . . 11-3 [クエリー]メニュー . . . . . . . . . . . 11-4 [データベース]メニュー . . . . . . . . 11-5 [トランザクション]メニュー . . . . . . 11-5 [ウィンドウ]メニュー . . . . . . . . . . 11-5 isql ツールバー . . . . . . . . . . . . . . . . 11-6 isql の一時ファイルの管理 . . . . . . . . . . . 11-7 SQL 文の実行. . . . . . . . . . . . . . . . . . . 11-7 対話形式での SQL の実行 . . . . . . . . . . 11-7 SQL 文の準備 . . . . . . . . . . . . . . . . . 11-8 有効な SQL 文 . . . . . . . . . . . . . . . 11-8 SQL スクリプトファイルの実行 . . . . 11-8 バッチ更新を使用した複数のステートメントの送 信 . . . . . . . . . . . . . . . . . . . . . . . . . 11-9 isql でのバッチ更新関数の使用 . . . . . . .11-11 トランザクションのコミットとロールバック . . . . . . . . . . . . . . . . . . . . . . . . .11-11 結果のファイルへの保存 . . . . . . . . . . .11-12 SQL 入力の保存 . . . . . . . . . . . . . .11-12 SQL 出力の保存 . . . . . . . . . . . . . .11-12 isql 設定の変更 . . . . . . . . . . . . . . . . . .11-12 [基本設定]タブ. . . . . . . . . . . . . . . .11-13 [拡張設定]タブ. . . . . . . . . . . . . . . .11-15 データベースオブジェクトのインスペクト . .11-16 オブジェクトプロパティの表示 . . . . . . .11-16 メタデータの表示 . . . . . . . . . . . . . . .11-17 メタデータの抽出 . . . . . . . . . . . . .11-18 メタデータの抽出 . . . . . . . . . . . . . . .11-19 コマンドライン isql ツール . . . . . . . . . . .11-20 isql の起動 . . . . . . . . . . . . . . . . . . .11-21 第 10 章 データベース統計情報および接続 の監視 一時システムテーブルを使用した監視 . . 一時システムテーブルへの問い合わせ 一時テーブルの更新 . . . . . . . . . 一時テーブルのリスト . . . . . . . . セキュリティ . . . . . . . . . . . . . 例. . . . . . . . . . . . . . . . . . . . 一時システムテーブルの更新 . . . . . . グローバルな変更. . . . . . . . . . . IBConsole での状態の表示 . . . . . . . . データベース状態オプション . . . . . . . . . . . . . . . . . . . . . . . . . . . 10-1 . 10-2 . 10-2 . 10-2 . 10-3 . 10-3 . 10-4 . 10-5 . 10-5 . 10-6 7 コマンドラインオプション . . . . . . 警告の使用. . . . . . . . . . . . . . . . 例. . . . . . . . . . . . . . . . . . . . . isql の終了. . . . . . . . . . . . . . . . データベースへの接続 . . . . . . . . . isql クライアントのダイアレクトの設定 isql におけるトランザクションの動作 . メタデータの抽出 . . . . . . . . . . . . . isql コマンド . . . . . . . . . . . . . . . . SHOW コマンド . . . . . . . . . . . . SET(設定)コマンド . . . . . . . . . その他の isql コマンド. . . . . . . . . isql の終了. . . . . . . . . . . . . . . . エラー処理 . . . . . . . . . . . . . . . . . isql コマンドリファレンス . . . . . . . . . . BLOBDUMP . . . . . . . . . . . . . . . . EDIT . . . . . . . . . . . . . . . . . . . . . EXIT . . . . . . . . . . . . . . . . . . . . . HELP . . . . . . . . . . . . . . . . . . . . INPUT . . . . . . . . . . . . . . . . . . . . OUTPUT . . . . . . . . . . . . . . . . . . QUIT. . . . . . . . . . . . . . . . . . . . . SET . . . . . . . . . . . . . . . . . . . . . SET AUTODDL . . . . . . . . . . . . . . SET BLOBDISPLAY . . . . . . . . . . . SET COUNT . . . . . . . . . . . . . . . SET ECHO . . . . . . . . . . . . . . . . SET LIST . . . . . . . . . . . . . . . . . . SET NAMES . . . . . . . . . . . . . . . SET PLAN . . . . . . . . . . . . . . . . . SET STATS . . . . . . . . . . . . . . . . SET TIME . . . . . . . . . . . . . . . . . SHELL . . . . . . . . . . . . . . . . . . . SHOW CHECK . . . . . . . . . . . . . . SHOW DATABASE . . . . . . . . . . . SHOW DOMAINS . . . . . . . . . . . . SHOW EXCEPTIONS . . . . . . . . . SHOW FILTERS . . . . . . . . . . . . . SHOW FUNCTIONS . . . . . . . . . . SHOW GENERATORS . . . . . . . . . SHOW GRANT . . . . . . . . . . . . . . SHOW INDEX . . . . . . . . . . . . . . SHOW PROCEDURES . . . . . . . . . SHOW ROLES . . . . . . . . . . . . . . SHOW SYSTEM . . . . . . . . . . . . . SHOW TABLES . . . . . . . . . . . . . SHOW TRIGGERS . . . . . . . . . . . SHOW VERSION . . . . . . . . . . . . SHOW VIEWS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SQL スクリプトの使用 . . . . . . . . . . . . .11-55 isql スクリプトの作成 . . . . . . . . . . . .11-56 SQL スクリプトの実行 . . . . . . . . . . .11-56 IBConsole による SQL スクリプトの実行 11-21 11-23 11-23 11-24 11-24 11-24 11-25 11-26 11-27 11-27 11-27 11-28 11-28 11-28 11-28 11-29 11-30 11-31 11-31 11-31 11-32 11-33 11-33 11-35 11-36 11-38 11-39 11-40 11-41 11-41 11-42 11-43 11-44 11-45 11-45 11-46 11-47 11-47 11-48 11-49 11-49 11-50 11-51 11-52 11-52 11-53 11-54 11-55 11-55 . . . . . . . . . . . . . . . . . . . . . . .11-56 コマンドライン isql ツールによる SQL スク リプトの実行 . . . . . . . . . . . . . . .11-57 SQL スクリプトの作業のコミット . . . . .11-57 isql スクリプトでのコメントの追加 . . . .11-58 第 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 . . . . . . . . . . . . . . . . . .12-11 TCP/IP . . . . . . . . . . . . . . . . . . .12-11 ホスト名ルックアップの設定 . . . . . . . .12-11 データベースプロパティ . . . . . . . . . . . . 12-12 データベースのページサイズの選択 . . . 12-12 データページフィルの割合の設定. . . . . 12-13 データベースキャッシュバッファのサイズ変更 . . . . . . . . . . . . . . . . . . . . . . . . 12-13 データベース書き込みのバッファ. . . . . 12-15 データベース設計の基本 . . . . . . . . . . . . 12-15 8 インデックスの定義 . . . . . . . . . . . . . インデックスとは. . . . . . . . . . . . . インデックスを使用するクエリー . . . インデックスを使用しないクエリー . . 双方向インデックス . . . . . . . . . . . データベースの正規化 . . . . . . . . . . . . BLOB のセグメントサイズの選択 . . . . . データベースのチューニングタスク . . . . . インデックスのチューニング . . . . . . . . インデックスの再構築 . . . . . . . . . . インデックスの選択度の再計算. . . . . 定期的なバックアップの実行 . . . . . . . . バックアップのパフォーマンスの改善. 復元のパフォーマンスの改善 . . . . . . ガベージコレクションの促進 . . . . . . . . アプリケーションの設計テクニック . . . . . トランザクション排他モードの使用 . . . . 相関サブクエリーの使用 . . . . . . . . . . パラメータ付きクエリーの準備 . . . . . . クエリー最適化プランの設計 . . . . . . . . インデックス更新の保留 . . . . . . . . . . アプリケーション開発ツール . . . . . . . . . InterBase Express™(IBX). . . . . . . IB オブジェクト . . . . . . . . . . . . . . . Borland Database Engine . . . . . . . . BDE ドライバフラグ . . . . . . . . . . SQL パススルーモード . . . . . . . . . SQL クエリーモード. . . . . . . . . . . ビジュアルコンポーネント . . . . . . . . . FETCH ALL 処理 . . . . . . . . . . . . TQuery . . . . . . . . . . . . . . . . . . TTable . . . . . . . . . . . . . . . . . . . isql クライアントのダイアレクトの設定. . .A-5 gpre ダイアレクトの設定 . . . . . . . . . . .A-6 12-15 12-16 12-16 12-16 12-17 12-17 12-17 12-17 12-18 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 データベースダイアレクトの設定. . . . . . .A-7 機能とダイアレクト . . . . . . . . . . . . . . . .A-7 すべてのダイアレクトで使用できる機能. . .A-7 IBConsole:InterBase のグラフィックイ ンターフェイス. . . . . . . . . . . . . . .A-7 読み取り専用データベース . . . . . . . . .A-7 列定義の変更 . . . . . . . . . . . . . . . . .A-7 ドメイン定義の変更 . . . . . . . . . . . . .A-7 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-13 日付 / 時刻データ型のキャスト . . . . . A-13 日付 / 時刻データ型の加算と減算 . . . . A-15 日付 / 時刻データ型に集計関数を使用する . . . . . . . . . . . . . . . . . . . . . . . A-16 デフォルト句 . . . . . . . . . . . . . . . . A-16 日付時刻情報の取り出し . . . . . . . . . A-16 DECIMAL データ型と NUMERIC データ型 A-18 コンパイル済みオブジェクト . . . . . . . . A-19 ジェネレータ. . . . . . . . . . . . . . . . . . A-20 その他の問題. . . . . . . . . . . . . . . . . . A-20 サーバーとデータベースの移行 . . . . . . . . . A-20 サーバーのインプレース移行 . . . . . . . . A-21 新しいサーバーへの移行 . . . . . . . . . . . A-22 InterBase 6 のダイアレクト 1 データベースに ついて . . . . . . . . . . . . . . . . . . . . . A-23 ダイアレクト 3 へのデータベースの移行 . . . A-24 概要 . . . . . . . . . . . . . . . . . . . . . . . A-24 方法 1: インプレース移行. . . . . . . . . . A-24 列デフォルトと列制約 . . . . . . . . . . A-27 名前なしテーブル制約 . . . . . . . . . . A-27 NUMERIC と DECIMAL のデータ型について . . . . . . . . . . . . . . . . . . . . . . . A-28 付録 A InterBase の移行 移行のプロセス . . . . . . . . . . . . . . . . . . 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 9 方法 2: 新しいデータベースへの移行 古いデータベースの移行 . . . . . . . . クライアントの移行 . . . . . . . . . . . . . 他の DBMS 製品からの移行 . . . . . . . . . . . . . . . . 付録 B A-29 A-30 A-31 A-32 InterBase の制限 InterBase の制限. . . . . . . . . . . . . . . . . .B-2 索引 . . . . . . . . . . . . . . . . . . . . . . . . . . I-1 10 表 1.1 3.1 3.2 3.3 3.4 4.1 4.2 4.3 4.4 5.1 5.2 5.3 5.4 5.5 6.1 6.2 6.3 6.4 7.1 7.2 7.3 7.4 7.5 8.1 8.2 8.3 8.4 8.5 8.6 バックアップと復元に関する gbak のエラー メッセージ . . . . . . . . . . . . . . . . . 8-20 9.1 CREATE JOURNAL のオプション . . . 9-4 9.2 RDB$JOURNAL_ARCHIVES テーブル . . 9-12 10.1 InterBase の一時システムテーブル . . 10-2 10.2 データページ情報 . . . . . . . . . . . . . 10-7 10.3 ヘッダーページ情報 . . . . . . . . . . . . 10-9 10.4 インデックスページ情報 . . . . . . . . .10-11 10.5 gstat のオプション. . . . . . . . . . . . 10-13 10.6 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-14 A.3 日付 / 時刻データ型からのキャストの結果 . . . . . . . . . . . . . . . . . . . . . . . . A-15 A.4 日付 / 時刻データ型の加算と減算 . . . . A-15 A.5 日付時刻情報の取り出し . . . . . . . . . A-17 A.6 文字列内部の引用符の処理 . . . . . . . . A-25 A.7 クライアントの移行: まとめ . . . . . . A-32 B.1 InterBase の仕様 . . . . . . . . . . . . . .B-2 InterBase の機能. . . . . . . . . . . . . . 1-3 8.7 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-12 クライアント サーバー検証のパラメータ . . . . . . . . . . . . . . . . . . . . . . . . 5-13 サーバー側設定パラメータ . . . . . . . . 5-14 [コミュニケーションの診断]による接続の 問題の診断. . . . . . . . . . . . . . . . . . 5-28 InterBase セキュリティデータベースの形 式 . . . . . . . . . . . . . . . . . . . . . . . 6-4 gsec コマンドの概要 . . . . . . . . . . . . 6-16 gsec のオプション . . . . . . . . . . . . . 6-18 gsec のセキュリティエラーメッセージ . 6-20 自動シャドウと手動シャドウ . . . . . . . 7-17 一般オプション . . . . . . . . . . . . . . . 7-21 検証オプション . . . . . . . . . . . . . . . 7-30 gfix のオプション. . . . . . . . . . . . . . 7-38 gfix データベース保守のエラーメッセージ . . . . . . . . . . . . . . . . . . . . . . . . 7-41 gbak の引数 . . . . . . . . . . . . . . . . . 8-5 gbak のバックアップオプション . . . . . 8-6 データベース パラメータ ブロック(DPB) . . . . . . . . . . . . . . . . . . . . . . . . 8-11 gbak を使用したデータベースの復元:オプ ション . . . . . . . . . . . . . . . . . . . . 8-14 gbak の復元オプション . . . . . . . . . . 8-15 gbak で Service Manager を呼び出す host_service の構文. . . . . . . . . . . . 8-17 11 12 図 2.1 2.2 3.1 3.2 3.3 3.4 3.5 3.6 3.7 4.1 5.1 5.2 5.3 5.4 5.5 5.6 6.1 6.2 7.1 7.2 7.3 7.4 7.5 [ ライセンス マネージャ ] の選択 . . . . . 2-4 [Embarcadero 製品ライセンス マネージャ ] 7.6 [検査レポート]ダイアログ. . . . . . . . 7-30 7.7 [データベースのシャットダウン]ダイアロ グ . . . . . . . . . . . . . . . . . . . . . . . 7-32 7.8 トランザクションリカバリ:limbo トランザ クション . . . . . . . . . . . . . . . . . . . 7-36 7.9 トランザクションリカバリ: 詳細 . . . . 7-37 7.10[管理ログ]ダイアログ . . . . . . . . . . 7-37 8.1 [ データベースのバックアップ ] ダイアログ . . . . . . . . . . . . . . . . . . . . . . . . 8-25 8.2 データベースバックアップオプション. . 8-27 8.3 [データベースのバックアップ]の処理経過 出力. . . . . . . . . . . . . . . . . . . . . . 8-29 8.4 インクリメンタル バックアップの指定 . 8-30 8.5 [データベースの復元]ダイアログ. . . . 8-31 8.6 データベース復元オプション . . . . . . . 8-33 8.7 [データベースの復元]の処理経過の出力8-36 9.1 [ ジャーナルの作成 ] ダイアログ . . . . . . 9-8 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 ウィンドウ . . . . . . . . . . . . . . . . . . 2-5 IBConsole ウィンドウ . . . . . . . . . . . 3-2 IBConsole ツールバー . . . . . . . . . . . 3-4 IBConsole ツリー ペイン . . . . . . . . . 3-6 [ 現在のウィンドウ ] ダイアログ . . . . . 3-8 [ ツール ] ダイアログ . . . . . . . . . . . . 3-9 [ ツールプロパティ ] ダイアログ . . . . . 3-9 [ パフォーマンス モニタ ] の [ データベース ] タブ . . . . . . . . . . . . . . . . . . . . . . 3-11 [Server Log]ダイアログ . . . . . . . . . 4-23 [Register Server and Connect]ダイアロ グ . . . . . . . . . . . . . . . . . . . . . . . 5-3 [サーバーログイン]ダイアログ . . . . . 5-4 [データベースエイリアスの登録]ダイアロ グ . . . . . . . . . . . . . . . . . . . . . . . 5-6 [コミュニケーションの診断]ダイアログ: DB 接続. . . . . . . . . . . . . . . . . . . . 5-26 [コミュニケーションの診断]ダイアログ: TCP/IP . . . . . . . . . . . . . . . . . . . . 5-27 [コミュニケーションの診断]ダイアログ: NetBEUI . . . . . . . . . . . . . . . . . . . 5-29 [ データベースの作成 ] ダイアログ . . . . 6-7 [ユーザー情報]ダイアログ . . . . . . . . 6-13 [データベースの作成]ダイアログ . . . . 7-10 [バックアップエイリアスのプロパティ]ダ イアログ . . . . . . . . . . . . . . . . . . . 7-13 [データベースのプロパティ]:[エイリアス] タブ . . . . . . . . . . . . . . . . . . . . . . 7-20 [データベースのプロパティ]:[一般]タブ . . . . . . . . . . . . . . . . . . . . . . . . . 7-21 [データベースの検証]ダイアログ . . . . 7-29 13 14 第 章 はじめに 第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 非サーバープラットフォーム」という用語 が 使 用 さ れ て い ま す。Windows サーバープラットフォームは、Windows 2000、XP Professional、および 2003 Server を指します。Windows 非サーバープラットフォームは、 XP Home を指します。 InterBase の主な機能 InterBase は、フル装備された RDBMS の利点のすべてを備えています。次の表は InterBase の 主要な機能を一覧にしたものです。 1-2 操 作 ガ イ ド InterBase の主な機能 表 1.1 InterBase の機能 機能 説明 ネットワークプロトコルのサ ポート • InterBase のすべてのプラットフォームは TCP/IP をサポートします。 • Windows 用の InterBase サーバーとクライアントは NetBEUI/名前付き パイプをサポートします。 SQL-92 エントリレベルに準拠 ANSI 標準 SQL。対話型 SQL ツールおよび Embarcadero デスクトップ アプリケーションから利用できます。 複数のデータベースへの同時 アクセス 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 データベースに接続できます。 メモ InterBase XE では、InterBase データベースに対してさらに強度の高いパスワード保護を 実装しています。詳細は、6-4 ページの「強度の高いパスワード保護の実装」を参照して ください。 データベース管理者は、ユーザー名の追加および削除、パスワードやユーザー ID などの ユーザーパラメータを変更できます。 サーバーセキュリティの管理の詳細は、第 6 章「データベース ユーザー管理」を参照して ください。 データベースのバックアップと復元 IBConsole またはコマンドラインの gbak を使用して、データベースをバックアップまた は復元できます。バックアップはデータベースへの排他的なアクセスを必要としないので、 そのデータベースにアクセスする他の処理と並列して実行可能です。 また、データベースのバックアップと復元は次の目的にも使用できます。 • 不要なデータベースレコードを削除する • データベースのページサイズを変更する • データベースを単一ファイルから複数ファイルに変更する 1-6 操 作 ガ イ ド InterBase SuperServer アーキテクチャ • データベースをあるオペレーティングシステムから他のオペレーティングシステムに移行 する • データベースのメタデータだけをバックアップし、空のデータベースを再作成する データベースのバックアップおよび復元の詳細は、第 8 章「データベースのバックアップ と復元」を参照してください。 データベースの保守 IBConsole またはコマンドラインユーティリティを使用して、シャットダウン可能な状態 のデータベースを準備したり、データベースの保守を行うことができます。データベースに オペレーティングシステムの書き込みエラーなどの小さな問題が発生した場合、データ ベースをオフラインにしないで、これらのツールを使ってデータベースのスイープを行う ことができます。 データベースの保守作業の一部を以下に示します。 • データベースのスイープ • データベースへの排他的アクセスを行うためのデータベースのシャットダウン • テーブルの断片化の検査 • バックアップ用のデータベースの準備 • 2 相コミットでの limbo トランザクションの解消 • データベース構造の検査および修復 データベースの保守の詳細は、第 7 章「データベースの環境設定と保守」を参照してくだ さい。 状態の表示 データベースヘッダーページの状態を確認したり、テーブルやインデックスを分析して、 データベースの状態を監視することができます。詳細は、第 10 章「データベース統計情報 および接続の監視」を参照してください。 InterBase SuperServer アーキテクチャ InterBase は SuperServer アーキテクチャを使用しています。このアーキテクチャは、InterBase サーバープロセスのマルチクライアント、マルチスレッド実装を行います。SuperServer は、 前のバージョンの InterBase で使用していた Classic 実装を置き換えています。SuperServer は、クライアントごとに別のサーバープロセスを使用するかわりにスレッドを使用して、同 時に複数のクライアントを提供するようになりました。複数のスレッドは、単一のサーバー プロセスに共通してアクセスします。 コマンドラインツールの概要 IBConsole で実行可能なタスクには、コマンドラインツールが対応しており、コマンドウィ ンドウまたはコンソールから対応するタスクを実行することができます。 第 1 章 はじめに 1-7 コマンドラインツールの概要 InterBase の UNIX 版には、すべてのコマンドラインツールがサポートされています。ほとん どのコマンドを Windows 上で使用し、UNIX サーバーにある InterBase データベースに接続 し、そのデータベースを操作することができます。 非対話型のコマンドラインツールが有利な点は、共通のデータベース操作を実行するため に、バッチファイルまたはスクリプトでそれらのツールを実行できるからです。使用してい るオペレーティングシステムのスケジュール機能(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 XE のライセンス オプション このセクションでは、ライセンス条項と InterBase の各製品で利用できるアドオン オプショ ンの概要について説明します。この章では、" アドオン " は、すでに購入した InterBase 製品 に " 追加 " するために購入できる InterBase 機能(オプション)を指します。アドオンそれ ぞれには専用のライセンス契約が付属しています。InterBase アドオンを購入するには、 Embarcadero の Web サイトにアクセスしてください。 利用可能な InterBase アドオンとライセンスを表示するには、製品とともにインストールさ れる InterBase License Manager を使用できます。詳細については、2-4 ページの「[ ライ センス マネージャ ] の使用」を参照してください。 メモ InterBase ソフトウェアを作成したソフトウェア アプリケーションにバンドルして、または ハードウェアにインストールして、サード パーティに配布するには、Embarcadero Technologies と OEM(Original Equipment Manager)ライセンス契約を締結する必要がありま す。 第 2 章 ライセンス管理 2-1 InterBase XE のライセンス オプション 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 同時接続ユーザー ライセンス Server Edition ソフトウェアに任意のユーザーが接続するには、対象サーバーに同時に接 続するユーザーと同数の「同時接続ユーザー ライセンス」を購入する必要があります。 たとえば、サーバーに接続するソフトウェアのコピーを 10 台のコンピュータにインス トールするには、最初に 10 の同時接続ユーザー ライセンスを購入する必要がありま す。それぞれの同時接続ユーザー ライセンスでは、単一のユーザーがサーバー ソフト ウェアに最大 4 つの接続を確立できます。 • InterBase 無制限ユーザー ライセンス このライセンスでは、ソフトウェアにアクセスできるユーザー数に制限がありません。 アクセスに制限のないインターネット アプリケーションでエンド ユーザーが Server Edition ソフトウェアに接続できるようにするには、無制限ユーザー ライセンスを購入 する必要があります。 • InterBase 追加 CPU ライセンス 1 サーバーライセンスには最大 8 個の CPU ライセンスが含まれます。追加 CPU ライセ ンスは、システム上、最大 32 まで コア /CPU を利用できます。 2-2 操 作 ガ イ ド InterBase XE のライセンス オプション 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 の暗号化の使用についての詳細は、『データ定義ガイド』を参照してくださ い。 ToGo Edition InterBase ToGo Edition は、Desktop Edition の小規模、ポータブル版で、スタンドアロン環境で 実行するために設計されています。ToGo Edition は、Windows のみで利用可能で、Desktop Edition で利用できる IBConsole など、すべてのオプションが含まれる訳ではありません。 ToGo Edition の使用方法の詳細は、『開発者ガイド』を参照してください。 InterBase ToGo ライセンスでは、購入ユーザーに次の事項の許可を与えます。 • InterBase ToGo エンジン(DLL)が組み込まれたアプリケーションの配置。 • 単一のエンド ユーザーがスタンドアロン コンピュータで使用する ToGo Edition ソフト 。 ウェアの配置(1 台のコンピュータに対し、1 つの ToGo Edition のライセンスが必要です) ToGo で利用可能なアドオン 次のアドオンが ToGo Edition で利用可能です。 第 2 章 ライセンス管理 2-3 [ ライセンス マネージャ ] の使用 • InterBase 高度暗号化ライセンス InterBase 高度暗号化ライセンスにより、高度な暗号化(AES)が Desktop、Server および ToGo の各エディションで有効になります。高度暗号化ライセンスは、高度な暗号化を 利用するインストールごとに必要となります。高度暗号化ライセンスが登録されていな い場合、InterBase は、デフォルトで標準のデータ暗号化(DES)を使用します。 InterBase の暗号化の使用についての詳細は、『データ定義ガイド』を参照してくださ い。 [ ライセンス マネージャ ] の使用 個別の [ライセンス マネージャ] ツールは Desktop、ToGo および Server の各エディションで インスールされます。このツールでは、購入した製品の既存ライセンス情報の表示、実行 していない場合の製品の登録、追加アドオン ライセンスの表示を行います。 Linux や Solaris 環境で、GUI インストーラがサポートされていない場合は、コマンドライン ツールで追加のオプションやライセンスを登録できます。登録方法の詳細については、 IBsetup.html ファイルを参照してください。 重要 InterBase の 2007 より前のバージョンでは、IBConsole から古いバージョンの License Manager にアクセスできます。IBConsole 版の License Manager には最新のライセンス情 報やオプション(アドオンを含む)が含まれないので、個別の InterBase License Manager ツールのみを使用して新しいライセンスを購入することをお勧めします。 [ ライセンス マネージャ ] へのアクセス 個別の InterBase License Manager ツールにアクセスするには、次のとおりに実行します。 1 [ スタート ] メニューから、[ プログラム| InterBase XE |ライセンス マネージャ ] を 選択します(図 2.1 を参照)。 図 2.1 [ ライセンス マネージャ ] の選択 [Embarcadero 製品ライセンス マネージャ ] ウィンドウが 図 2.2 のように表示されます。 2-4 操 作 ガ イ ド [ ライセンス マネージャ ] の使用 図 2.2 2 [Embarcadero 製品ライセンス マネージャ ] ウィンドウ 使用している InterBase 製品で利用できるアドオンを表示し、選択するには、 [Serial No.] メニューをクリックし、[ 追加 ] を選択します。 3 [Serial Number の追加 ] ダイアログが表示されます。シリアル番号を入力し、[OK] をク リックします。[Embarcadero 製品ライセンス マネージャ ] にライセンス情報が表示さ れ、登録をまだ実行していない場合は、購入した製品を登録できます。 第 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 のサーバー ア イ コ ンの コ ン テキス ト メ ニ ュ ー ポップアップ メニュー 説明 [ ログイン ...] 選択しているサーバーにログインします。 [ ログアウト ] 現在のサーバーからログアウトします。 [ ライセンスの追加 ...] InterBase 7.x 以前に接続されているサーバーに Certificate ID と Certificate Key を追加します (InterBase 2007 以降は、データベース 。 の [ ライセンス マネージャ ] を使用) [ ユーザー セキュリティ ...] 現在のサーバーに対してユーザーを承認します。 [ ライセンス マネージャ ] ライセンス情報を追加、編集、検証します。[ ツール ] メニューから [ ライセンス マネージャ ] を起動することもできます。 [ サーバーログファイルの参照 ] 現在のサーバーのサーバー ログを表示します。 第 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-29 ページ の 図 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); 第 4 章 サーバーの環境設定 4-5 マルチインスタンス /* 他の dpb パラメータを設定します */ … /* 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.ID 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.ID 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 使用するプロセッサ 1 2 1と2 3 2と3 1、2、3 4-8 操 作 ガ イ ド CPU_AFFINITY の 値 配列 1 2 3 4 6 7 001 010 011 100 110 111 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 サーバーをマニュアルで起動するか、システムのブート時 に自動的に起動するかを指定します。 • サーバーのパスの変更。 [変更]オプションをクリックすると、別のディレクトリを参照 して選択できます。 • InterBase Server の動作の変更。Windows プラットフォームでは、InterBase はデフォルト でサービスとして自動的に実行されますが、アプリケーションとして実行することもでき ます(非推奨) 。 第 4 章 サーバーの環境設定 4-9 UNIX での InterBase Server の起動と停止 メモ 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 を使用するに は、サーバーマシンにログオンしなければなりません。 構文 ibmgr -command [-option [parameter] ...] または ibmgr u 4-10 操 作 ガ イ ド UNIX での InterBase Server の起動と停止 IBMGR> command [-option [parameter]] 説明 UNIX では、InterBase サーバーはデーモンとして実行されます。デーモンは、UNIX シス テムのコンソールやターミナルにユーザーがログインしていないときにも動いています。 ibmgr は、UNIX システム上で InterBase サーバー プロセスを管理するためのユーティリ ティです。ibmgr を使用するには、サーバーが稼働しているマシンにログオンする必要が あります。 InterBase は、root ユーザーまたは interbase ユーザーとして起動することができます。 InterBase を interbase ユーザーのアカウントで正しく起動する手順は以下のとおりです。 1 interbase ユーザーを作成します。 2 /var/run に対する読み取りと書き込みのアクセス権を interbase ユーザーに追加しま す。 メモ 3 4 /opt/interbase ディレクトリに移動します。 5 ibmgr を使用して InterBase を起動すると、InterBase デーモンが正常に起動します。 chown -R interbase * を実行して、interbase ユーザーを interbase ディレクトリ ツ リー内の全ファイルの所有者にします。 Windows インストールで使用される ibmgr32.exe は古いクライアント側ユーティリティ で、その機能は UNIX 上の ibmgr とはまったく異なります。名前が偶然に一致しているだ けです。 オプション start [-once|-forever] サーバーを起動します。-forever スイッチはサーバーが停止したときに サーバーを再起動します。デフォルトは -forever です。 shut 現在のトランザクションをロールバックし、クライアント接続を終了し て、サーバーをただちにシャットダウンします。 show ホスト、ポート、およびユーザーを表示します。 user user_name SYSDBA を入力します。 password password SYSDBA パスワードを入力します。 ヘルプ ヘルプテキストをプリントします。 quit プロンプトモードを終了します。 サーバーの起動 InterBase Server を起動するには、root ユーザーまたは interbase ユーザーとしてログイン します。interbase は InterBase と同等で、9 文字のアカウント名をサポートしていないオペ レーティングシステムで使用できます。たとえば、次のコマンドで InterBase を起動しま す。 ibmgr -start -p service_name 第 4 章 サーバーの環境設定 4-11 UNIX での InterBase Server の起動と停止 メモ root などの 1 つのログイン名を使って ibserver を起動すると、作成されるオブジェクトは、すべてその ログイン名に属することになります。その後、interbas または InterBase として ibserver を起動しても、こ れらのオブジェクトにはアクセスできません。InterBase Server は、InterBase として起動することを強く お勧めします。-p オプションが指定されない場合は、デフォルトの gds_db が使用されます。 サーバーの停止 メモ 安全のために、サーバーを停止する前に、すべてのデータベースが接続解除されているこ とを確認してください。 コマンドスイッチ -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’. 4-12 操 作 ガ イ ド UNIX での InterBase Server の起動と停止 echo ‘$InterBase/bin/ibmgr -start -forever’ |su InterBase } 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 [ ! echo exit fi if [ ! echo -d “$InterBase” ] ; then “$0: cannot find InterBase installed at $InterBase” >&2 1 -x “$InterBase/bin/ibmgr” ] ; then “$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 環境変数 InterBase_TMP で定義されたディレクトリを使用する 2 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-25 ページの「データベースキャッシュの設 定」を参照してください • デフォルト: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 サーバー プラットフォームは、Windows 2000 と XP Professional を指します。Windows 非サーバー プラットフォームは、Windows XP Home を指します。 第 5 章 ネットワーク設定 5-1 サーバーとデータベースへの接続 表 5.1 サポートされる接続プロトコル InterBase サーバープラットフォーム Windows 非 Windows サーバー サーバー UNIX Windows 非サーバー TCP/IP、 ローカル TCP/IP、NetBEUI TCP/IP Windows サーバー TCP/IP TCP/IP 、NetBEUI 、 TCP/IP クライアントプラットフォー ム ローカル 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-12 ページの「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-10 ページの「SQL ロール」を参照してください。 データベースが登録されると、ツリーペインに表示されます。 データベースへの接続 IBConsole には、データベースに接続する方法が 2 つあります。1 つは、即座にデータベース に接続するために、サーバーへのログインで指定したユーザー名とパスワードを使用する 簡単な接続方法です。もう 1 つの方法は、 [データベース接続]ダイアログでサーバーログ インとは異なるユーザー名とパスワードを使ってデータベースに接続する方法です。 接続 データベースに即座に接続するためにサーバーログイン用のユーザー名とパスワードを 使って自動接続を行う場合、次に示す方法のいずれかを行います。 • ツリーペインで接続解除されているデータベースを選択します。 [データベース|データ ベースへの接続]を選択して、ワークペインで[データベースへの接続]選択するか、ま たはツールバーの[データベースへの接続]ボタンをクリックします。 • ツリーペインで接続解除されているデータベースを右クリックして、コンテキストメ ニューから[データベースへの接続]を選択します。 • ツリーペインで、接続解除されているデータベースをダブルクリックします。 データベースが接続されると、データベースツリーはデータベース階層を展開します。 指定したユーザーでのデータベース接続 IBConsole の[データベース接続]ダイアログを利用して、サーバーログインで使用した ユーザー名とパスワードとは異なるユーザー名とパスワードを使ってデータベースに接続 するには、次に示す方法のいずれかを行います。 • ツリーペインで接続解除されているデータベースを選択します。 [データベース|指定し たユーザーでのデータベース接続]を選択するか、ワークペインで[指定したユーザーで のデータベース接続]を選択します。 • ツリーペインで接続解除されているデータベースを右クリックして、コンテキストメ ニューから[指定したユーザーでのデータベース接続]を選択します。[データベース接 続]ダイアログが表示されます。 第 5 章 ネットワーク設定 5-7 サーバーとデータベースへの接続 データベースに接続するには 1 [データベース]フィールドに表示されているデータベースが正しいかどうかを確認し ます。 2 データベース用のユーザー名とパスワードをそれぞれ[ユーザー名]と[パスワード] テキストフィールドに入力します。 3 ロールとして接続する場合は、[ロール]テキストフィールドでロールを指定します。 この情報は省略できます。事前に GRANT 文によってロールが割り当てられている場合 は、ロールを使って接続することにより、そのロールのすべての特権が与えられます。 [ロール]フィールドに文字を入力すると、[Role 名]フィールドが有効になります。 サーバーでロール名の大文字と小文字を区別する場合は、このボックスをオンにしま す。デフォルトでは、ロール名の大文字と小文字は区別されません。 ロールの詳細は、6-10 ページの「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)形式である必要があります。 • clientCertFile と IBSSL_SERVER_clientCertFile ではじまるパラメータは、常に PEM 形式ファイル(CA 署名証明書と私有鍵(private key))を参照します。これらのファ イルは配布できません。 • CA ではじまるパラメータ、つまりクライアントでの serverPublicPath や serverPublicFile、サーバーでの IBSSL_SERVER_serverPublicFile や IBSSL_SERVER_serverPublicPath は、常に公開鍵証明書を参照します。 • InterBase XE では、標準のデータ暗号化(DES)の使用をサポートします。高度暗号化 (AES)を使用するには、米国の輸出規制のため、InterBase から高度暗号化ライセンスを 取得し、サーバー コンピュータにインストールする必要があります。 メモ InterBase JDBC ドライバは、OTW 機能をサポートするようになりました。 OTW 暗号の設定 InterBase OTW 暗号は 2 つの部分(サーバー側とクライアント側)で構成され、サーバー をセキュリティで保護するために機能します。次のセクションでは、サーバー側とクライア ント側での OTW の設定方法について説明します。サンプルの OTW 設定では次の手順を 実行します。 メモ OTW の JDBC プロパティ指定の詳細は、 『開発者ガイド』の「SSL ファイル プロパティ」 (p.4-5)を参照してください。また、 『開発者ガイド』の表 4.10「データ ソースの拡張プロ パティ」(p.4-30)でも定義されています。 サーバー側またはクライアント側で OTW 暗号を設定する前に、CA(認証局)ベンダーか ら必要なセキュリティ証明書を入手する必要があります。InterBase ではこれらの証明書を 使用して ID 情報を検証します。 5-10 操 作 ガ イ ド ネットワーク通信の暗号化 セキュリティ証明書の生成 OTW では次の証明書の生成と使用が必要です。 • サーバー用公開鍵証明書。たとえば、ibserverCAfile.pem です。 • サーバーの私有鍵とサーバー証明書。たとえば、ibserver.pem です。 任意の SSL ツールでこれらの証明書を生成できます。また IT 部門または CA ベンダーから 入手してください。OpenSSL で SSL 証明書を作成する方法については、次の Web サイトを 確認してください。 • http://www.openssl.org/docs/apps/openssl.html クライアント側の設定 クライアント アプリケーションでは、OTW 暗号を実行する必要があることを、InterBase クライアント ライブラリに対して接続文字列で指定します。接続文字列には、次の構文に 示すとおり、データベース パス / データベース名の前に OTW パラメータを指定します。 メモ これまでの OTW プロパティが新しい JDBC OTW プロパティに変更されています。 重要 古いネイティブの OTW プロパティは今後使用しないことを強くお勧めします。ただし、 新しいネイティブのクライアントおよびサーバーでは、新旧両方の名前をサポートしてい ます。 InterBase クライアントで古いパラメータをサポートするのは、おそらくこのリリースが 最後になります。今後は新しいパラメータを使用してください。 古い OTW クライアント プロパティ 構文 それに代わる新しい JDBC OTW プロパティ OTWENABLE ssl=true PASSPHRASE clientPassPhrase PASSPHRASEFILE clientPassPhraseFile CERTFILE clientCertFile CAFILE serverPublicFile CAPATH serverPublicPath クライアント側で OTW を有効化するには、データベース接続文字列で次の構文を使用し ます。 <secure server host name>[/secure server port name | secure server port number]?ssl=true[?serverPublicFile=CA ファイルのフルパス | ?serverPublicPath=CA 証明書を含むディレクトリの名前 | ?clientCertFile= クラ イアント証明書ファイルの名前][?clientPassPhraseFile=パス フレーズ ファイル名 |?clientPassPhrase= パス フレーズ ]??:< データベース パス >/< データベース名 > '?ssl=true' ではじまり、'??' で終わることが必要です。OTW 暗号パラメータの区切り として機能します。構文サンプルで使用したオプションの詳細については、表 5.2 を参照 してください。 第 5 章 ネットワーク設定 5-11 ネットワーク通信の暗号化 表 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 リモート サーバーがセキュア接続リクエストをリスンするソケット ポート番 号。ここか、前のポート名のいずれかを指定します。両方は必要ありません。 ssl 他の OTW パラメータを指定し、接続をセキュリティで保護するために は、このオプションを設定する必要があります。 メモ このオプションは "OTWENABLE" オプションに代わる ものです。OTWENABLE オプションは今後使用しない ことを強くお勧めします。 serverPublicFile 証明書ファイルの場所。デフォルトでは、InterBase はユーザーのホーム ディレクトリで ibserverCAfile.pem を検索します。serverPublicFile と serverPublicPath(この後で定義します)はどちらも、標準 SSL 要件に 沿った PEM 形式でなければなりません。クライアントでこのファイルを 作成する必要はありません。このファイルは、接続先のサーバーのデータ ベース管理者が作成するものです。このファイルを作成するときには、公 開証明書ファイルの証明書がサーバーの DNS にバインドされていること を確認する必要があります。この DNS は、クライアントが使用する <secure server host name> に一致する必要があります。 メモ このオプションは "CAFILE" オプションに代わるもので す。CAFILE オプションは今後使用しないことを強くお 勧めします。 serverPublicPath serverPublicPath を使用する場合、そのディレクトリ内の各ファイルは CA 証明書を 1 つだけ含まなければならず、ファイル名はサブジェクト名 のハッシュに拡張子 ".0" を付けたものでなければなりません。このオプ ションにデフォルト値はありません。serverPublicPath ではなく serverPublicFile を使用することをお勧めします。両方指定した場合は、 serverPublicFile が使用されます。CA ファイルは、サーバーを運用する組 織から提供されます。このファイルを使って、検証済みの正規のサーバー に接続していることを確認できます。使用したい CA を正しく参照してい ることを確認してください。詳細については、5-13 ページの「"c_rehash" コマンドについて」を参照してください。 メモ このオプションは "CAPATH" オプションに代わるもので す。CAPATH オプションは今後使用しないことを強くお 勧めします。 さらに、クライアントによるサーバーの検証を有効にする必要がある場合は、表 5.3 に説 明があるパラメータを使用できます。例を表の後に示します。 5-12 操 作 ガ イ ド ネットワーク通信の暗号化 表 5.3 クライアント サーバー検証のパラメータ パラメータ名 説明 clientCertFile クライアント証明書ファイルの場所と名前。この証明書は、SSL 接続段 階でサーバーに送信されます。clientCertFile は PEM 形式でなければな らず、クライアント証明書と私有鍵を含む必要があります。 メモ このオプションは "CERTFILE" オプションに代わるも のです。CERTFILE オプションは今後使用しないことを 強くお勧めします。 clientPassPhraseFile クライアントの私有鍵のパスフレーズを含むテキスト ファイルの名前と 場所。clientPassPhraseFile パラメータと clientPassPhrase パラメータの いずれかを使用できます。 メモ このオプションは "PASSPHRASEFILE" オプションに 代わるものです。PASSPHRASEFILE オプションは今後 使用しないことを強くお勧めします。 clientPassPhrase 私有鍵のパスフレーズを指定します。clientPassPhrase パラメータと clientPassPhraseFile パラメータのいずれかを使用できます。 メモ このオプションは "PASSPHRASE" オプションに代わる ものです。PASSPHRASE オプションは今後使用しない ことを強くお勧めします。 次にこれらのパラメータを isql コマンドで使用する方法のサンプルを示します。 isql> connect ‘localhost/gds_ssl?ssl=true?clientPassPhrase=clientkey? clientCertFile=c:\ib_builds\InterBase\secureserver\client\ client.pem? serverPublicFile=c:\ib_builds\InterBase\secureserver\client\ serverCAfile.pem??:c:/foo.ib’ "c_rehash" コマンドについて 同等の serverPublicFile パラメータではなく serverPublicPath パラメータ(サーバー とクライアント両方)を使用する場合にこのコマンドを使用します。serverPublicPath を使用しない、さらにディレクトリを設定する方法に関する詳細情報が必要な場合は、 OpenSSL の Web サイトにアクセスしてください。 "c_rehash" は OpenSSL のコマンドです。このスクリプトにより、 証明書のディレクトリに シンボリック リンクが自動的に作成されます。たとえば、some/where/certs というディ レクトリがあり、複数の CA 証明書が含まれている、さらに serverPublicPath ディレク トリとしてこのディレクトリを準備することを考えます。この場合、次のコマンドを使用で きます。 cd /some/where/certs c_rehash . サーバー側の設定 クライアント側で OTW を有効化した後に、SSL 設定ファイル "ibss.config" の設定パ ラメータを変更する必要があります。このファイルは "<install_directory>\secure\ server" ディレクトリにあります。この設定ファイルには、サーバーで必要な情報が含ま れます。このファイルを設定する方法についての手順を次に示します。 第 5 章 ネットワーク設定 5-13 ネットワーク通信の暗号化 さらに、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_clientPassPhrase=serverkey IBSSL_SERVER_clientCertFile=<install_directory>/secure/server/ibserver .pem #IBSSL_SERVER_clientPassPhraseFile=c:/secure/pass.txt #example comment line #only needed for client verification #IBSSL_SERVER_VERIFY_CLIENT #IBSSL_SERVER_serverPublicFile=<install_directory>/secure/server/root. pem 表 5.4 では前に示したサンプルの各パラメータについて説明します。 表 5.4 サーバー側設定パラメータ パラメータ 説明 IBSSL_SERVER_PORT_NO と IBSSL_SERVER_HOST_NAME InterBase サーバーのポート番号とホスト名。つまり InterBase サーバーが動作している SSL コンピュータ名(localhost も使用可 能)と SSL ポート番号です。デフォルト値は、コンピュータ名ま たはホスト名と '3065' です。 IBSSL_SERVER_CERTFILE ファイルに格納された私有鍵の場所です。このファイルはサー バーで暗号化のために使用されます (デフォルトの場所とファ 。 イル名は、<install_directory>/secure/server/ibserver.pem) clientCertFile は PEM 形式であり、証明書と私有鍵を含む必要 があります。 IBSSL_SERVER_PASSPHRASEFILE パスフレーズを含むファイルの場所です。これはセキュリティで 保護することが必要です。このファイルに正しいアクセス権が設 定されていることを確認し、起動中にこのファイルへの読み取り アクセスのみが、サーバーに必要です。ログ ファイルにはパスフ レーズがロードされていないというメッセージが記録されます。 つまり、リムーバブル メディアにパスフレーズを格納でき、一度 サーバーを起動した後に、そのメディア(つまりパスフレーズ) を安全に取り外すことができます。 IBSSL_SERVER_PASSPHRASE サーバー証明書ファイルとともに使用されるサーバー パスフ レーズを指定します。IBSSL_SERVER_clientPassPhraseFile の 代わりにこれを使用します。両方が設定されている場合に、 IBSSL_SERVER_clientPassPhrase が IBSSL_SERVER_clientPassPhraseFile ではなく使用されます。 両方が設定されていない場合に、InterBase では私有鍵にパスフ レーズが含まれないと想定します。 5-14 操 作 ガ イ ド ネットワーク通信の暗号化 表 5.4 サーバー側設定パラメータ パラメータ 説明 IBSSL_SERVER_VERIFY_CLIENT このパラメータが設定されている場合は、クライアントが証明書 を送信したことをサーバーが確認します。この証明書は IBSSL_SERVER_serverPublicFile で指定したファイル(また は IBSSL_SERVER_serverPublicPath で指定されたディレクト リ)に対して検証されます。 IBSSL_SERVER_CAFILE CA ファイルを含むファイルの場所で、クライアント証明書を検 証するために使用できます。このファイルにデフォルト値はあり ません。ただし、<install_directory>/secure/server/ にファイルを 配置し、ibrootcert.pem という名前を付けることをお勧めします。 このファイルは PEM 形式であり、 IBSSL_SERVER_VERIFY_CLIENT フラグが設定されている場 合にのみ必要です。 IBSSL_SERVER_CAPATH IBSSL_SERVER_serverPublicFile と同じ目的で使用されます。 ただし、この場合、パラメータは PEM 形式の CA 証明書に含ま れるディレクトリを指しています。これらのファイルはそれぞれ 1 つの CA 証明書を含み、IBSSL_SERVER_VERIFY_CLIENT フラグが設定されている場合にのみ必要です。これらのファイル は CA サブジェクト名のハッシュ値で検索されます。この名前は 設定されている必要があります。このコマンド(複数の PEM ファイルを serverPublicPath でアクセスできるディレクトリに 変換するために使用できる)の詳細については、5-13 ページの 「"c_rehash" コマンドについて」を参照してください。 さらに、InterBase の ibss_config ファイルでは次の条件があります。 • このファイルの一般的な形式は、<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 第 5 章 ネットワーク設定 5-15 ネットワーク通信の暗号化 openssl dhparam -check -text -5 1024 -out dh1024.pem これらのファイルを生成した後は、<install_directory>/secure/server ディレクト リにコピーします。 OTW のサンプル設定 次のサンプル設定は、ユーザーのネットワークで OTW を効果的に有効化し実装するよう に設計されています。 サンプル 1: クライアントとサーバーの設定(サーバーでクライアント を検証しない場合) これは多くの InterBase のユーザーが使用する設定です。この設定では、サーバーの ID が サーバー証明書に記載されます。これによりクライアントがサーバーが正しい接続先であ ることを検証します。またクライアントはクライアントにある CA ファイルに基づいて サーバー証明書を認証します。このセットアップでは、取得したライセンスに基づいて、 AES(ライセンスが有効)または DES (デフォルト)で、クライアントとサーバーが通信 するように設定します。 サンプル 1: サーバーの設定 サンプル サーバーで OTW を設定するには、次の手順を実行します。 1 2 ibserverCAfile.pem と ibserver.pem ファイルを作成します。 ibserver.pem ファイルを <install_directory>/secure/server/ にコピーしま す。 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?ssl=true??:c:/foo.ib”; 5-16 操 作 ガ イ ド ネットワーク通信の暗号化 OTW を使用するための設定が完了しました。この例では、使用するすべての証明書と CA ファイルに対してデフォルトの場所を使用しました。デフォルト値を使用しないで、サー バー ファイルの場所を変更することを決定した場合は、ibss_config ファイルの IBSSL_SERVER_clientCertFile パラメータを PEM 形式の証明書(私有鍵を含む) ファイルを指すように変更する必要があります。 ホーム ディレクトリ以外のディレクトリに(クライアント コンピュータで)CA ファイルが ある場合は、接続に次のコマンドを使用します。 isql> connect “localhost/3065?ssl=true?serverPublicFile=<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 IBSSL_SERVER_serverPublicFile=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?ssl=true?clientCertFile=C:\smistry\ ibclient.pem??:c:/foo.ib”; サンプル 3: JDBC クライアントと InterBase サーバーの設定(クライアント を検証する場合) この手順が必要になるのは、JDBC クライアント接続をサーバーで検証しなければならな い場合だけです。Sun から提供されている keytool を使用します。 第 5 章 ネットワーク設定 5-17 ネットワーク通信の暗号化 "keytool -genkey" を実行すると、1 組の自己署名の私有鍵と公開鍵を新しく生成する ことができます。このパスワードは、JDBC で接続をするときに使用します (clientPassPhrase)。 例 [C:/ib_svn_build/certificates] keytool -genkey -keystore smclient.jks キーストアのパスワードを入力してください : client 姓名を入力してください。 [Unknown]: Shaunak Mistry 組織単位名を入力してください。 [Unknown]: InterBase 組織名を入力してください。 [Unknown]: Embarcadero 都市名または地域名を入力してください。 [Unknown]: Scotts Valley 州名または地方名を入力してください。 [Unknown]: CA この単位に該当する 2 文字の国番号を入力してください。 [Unknown]: US CN=Shaunak Mistry, OU=InterBase, O=Embarcadero, L=Scotts Valley, ST=CA, C=US でよろしいですか ? [no]: yes <mykey> の鍵パスワードを入力してください。 ( キーストアのパスワードと同じ場合は RETURN を押してください ): このコマンドによって、smclient.jks という新しいキーストアが作成されました。そこ には、私有鍵および公開鍵と、自己署名証明書が含まれています。 この例に沿って実行している場合には、以下の値を JDBC 接続 URL の最後に追加し、 JDBC 接続でクライアント側検証を実施するように指定する必要があります。 ?clientPrivateFile=c:/smistry/smclient.jks?clientPassPhrase=client 次に、keytool -export -rfc を実行して公開鍵をエクスポートします。この公開鍵を サーバーに追加し、サーバーの ibss_config ファイルの IBSSL_SERVER_CAFILE オプ ションにそれを指定する必要があります。 [C:/ib_svn_build/certificates] keytool -export -rfc -keystore smclient.jks キーストアのパスワードを入力してください : client -----BEGIN CERTIFICATE----MIIDHzCCAtwCBEpt7k4wCwYHKoZIzjgEAwUAMHUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEw JDQTEW MBQGA1UEBxMNU2NvdHRzIFZhbGxleTEUMBIGA1UEChMLRW1iYXJjYWRlcm8xEjAQBgNVBA sTCUlu dGVyQmFzZTEXMBUGA1UEAxMOU2hhdW5hayBNaXN0cnkwHhcNMDkwNzI3MTgxMzM0WhcNMD kxMDI1 ..... utRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNW Lx+2J6 ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYQAAoGAOOavhpQAOLHr/Y w59LrA SOflcsA15BaAy1NUEl65cqb1/TO/jWroKjlG8dv1uNdsc2kZ4ptmM0L2RjksLxcrqUBm9q jedan9 5-18 操 作 ガ イ ド 接続のトラブルシューティング X8cjEnTeU2hOrmARoZeFhlvtw4CfiuXwnFeagF2IxrETyVLEXMV1A5ATRzrdTqQcfnwPCu a0F3Ew-----END CERTIFICATE----CwYHKoZIzjgEAwUAAzAAMC0CFQCJtK/qpIw0ahuIYqYP5d1D90UbdAIUEeU4nXvZAUxZv5 SPcFFP uowm7bI= -----END CERTIFICATE----- あるいは、次のコマンドを使用します。 [C:/ib_svn_build/certificates] keytool -export -rfc -keystore smclient.jks -file mycert.pem キーストアのパスワードを入力してください : client 証明書がファイル <mycert.pem> に保存されました。 これで、ファイル mycert.pem に公開証明書が含まれるようになりました。これをサー バーに移動し、IBSSL_SERVER_CAFILE が指すファイルに含まれていることを確認してく ださい。 この公開鍵を認証局に検証してもらうには、クライアントで "keytool -certreq" コマ ンドを実行して、認証局に対する証明書署名要求を生成します。この要求の検証が済め ば、"keytool -import" コマンドを実行して、その証明書応答をキーストアに追加しま す。その後、"keytool -export" コマンドを実行して、公開鍵を認証するための証明書 を取得します。エクスポートされたこの証明書を InterBase サーバーに移動すると、 InterBase サーバーはクライアントの私有鍵を " 信頼 " して検証できるようになります。 接続のトラブルシューティング ここでは、ネットワーク構成とクライアント / サーバー接続に関連する問題のトラブル シューティングのガイドラインを説明します。ネットワーク上でサーバーへのクライアン ト接続に問題がある場合は、その原因を診断するために次の手順を参照してください。 Windows では、[コミュニケーションの診断]ダイアログを使用して、これらのテストを 行うことができます。詳細は、5-25 ページの「コミュニケーションの診断」を参照してく ださい。 接続不能エラー クライアントがサーバーホストにまったくアクセスできない場合、または gdb_db サービ スの応答がない場合は「接続不能」エラーになります。このエラーの原因を診断するため に、以下のチェックリストを利用してください。 クライアントとサーバーの間に低レベルのネットワークアクセスがあ りますか ? ping コマンドを使用すると、クライアントがサーバーにアクセスできないのは、物理的に ネットワークが切断されているからなのか、またはネットワークの設定が問題なのかをす ばやくテストできます。次のように使用します。 ping servername 第 5 章 ネットワーク設定 5-19 ping が返すエラーメッセージは、ネットワーク障害があることを示します。ネットワーク コネクタが接続されているか、ネットワークワイヤーに損傷がないか、クライアントとサー バーのソフトウェアが適切に設定されているかなどをチェックしてください。 問題のクライアントから他のサーバーへの接続テストを行います。成功した場合は、クラ イアント上のネットワーク設定は正しく行われています。 他のクライアントから InterBase のサーバーホストへの接続をテストします。成功した場合 は、サーバー上のネットワーク設定は正しく行われています。 クライアントはサーバーのホスト名を解析できますか ? InterBase クライアントは、一部の Linux ディストリビューションを除いて、IP アドレス でなく名前でサーバーを指定します。したがって、クライアントはサーバーのホスト名を解 析できなければなりません。TCP/IP では、ホスト名を IP アドレスにマッピングする hosts ファイルをクライアント上に保持するか、またはこのマップを解析するために DNS サー バーまたは WINS サーバーに問い合わせます。問題のサーバーホストの正しいエントリが ネームサーバーにあるかどうかを確認してください。 サーバーはファイアウォールの後ろにありますか ? データベースサーバーがソフトウェアまたはハードウェアのファイアウォールの後ろにあ る場合は、すべてのネットワーク通信は制限されて、クライアントはサーバーに到達でき なくなります。ファイアウォールによっては、クライアントが接続しようとするポートに よってトラフィックを許可したり制限するものがあります。このため、特定のサービスが サーバーに到達できるかどうかは明確でありません。IP アドレスが解析できても、接続で きるということではなく、単に InterBase サーバーホストの名前を解析するネームサーバー にクライアントが到達できるということを示すだけです。 クライアントがファイアウォールでサーバーから分離されている場合、クライアントは接 続することができません。 クライアントとサーバーは異なるサブネットにありますか ? NetBEUI はサブネット間でネットワーク通信を転送することはできません。他のプロトコ ルは、サブネット間でトラフィックを制限するように構成することができます。クライアン トとサーバーが複数のサブネットを持った複雑なネットワーク上にある場合は、そのネッ トワーク環境で、特定のプロトコルを使ってクライアントと問題のサーバー間でネット ワーク通信を転送できるかどうかをネットワーク管理者にたずねてください。 データベースにローカル接続できますか ? ibserver プロセスがサーバー上にあり、データベースに接続できるかどうかを確認するた めに、ローカルデータベース接続を行ってみてください。 1 データベースサーバーホストのコンソールにログインします。そして、コマンドライン isql などのアプリケーションを実行します。 2 ホスト名を指定しないでデータベースに接続してみます。パスだけを指定してくださ い。 [コミュニケーションの診断]ダイアログでも、ローカルデータベース接続テストを行うこ とができます。詳細は、5-25 ページの「[DB 接続]タブ」を参照してください。 5-20 操 作 ガ イ ド 接続のトラブルシューティング メモ ローカル接続モードは UNIX サーバーでは使用できません。 データベースループバックに接続できますか ? クライアント / サーバー接続をシミュレートします。クライアントの環境設定に変数を追加 しないで、ネットワークを介さずにループバックモードで接続して、サーバーの環境設定 をテストすることができます。 1 データベースサーバーホストのコンソールにログインします。コマンドライン isql や IBConsole isql などのアプリケーションを実行します。 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 サービスは応答するがデータベース に接続できない場合は、「接続拒否」エラーになります。このエラーの原因を診断するため のチェックリストを以下に示します。 第 5 章 ネットワーク設定 5-21 接続のトラブルシューティング データベースへの正しいパスがわかっていますか ? データベースへの正しいパスを指定したかどうかを確認します。次の点に注意してくださ い。 • NT/2000 では、パスとともにドライブ文字を指定する必要があります。 • UNIX では、パスは大文字と小文字が区別されます。 • C または C++ コードの中の文字列で 2 つの円記号(バックスラッシュ)を使用する必要が ない場合は、スラッシュ(/)と円記号(¥)はどちらを使用してもかまいません。 UNIX ホストの信頼関係が確立されていますか ? UNIX のユーザー信頼機能を使用するには、クライアントとサーバーの間に「信頼ホスト」 の関係がなければなりません。6-3 ページの「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:¥Embarcadero¥InterBase)の書き込み許可を得 ていなければなりません。サーバープロセスはファイル InterBase.log とその他の一時 ファイルに書き込みおよび作成できなければなりません。 5-22 操 作 ガ イ ド 接続のトラブルシューティング インターネット自動ダイヤルアップの無効化 Microsoft Windows オペレーティングシステムは、モデムを使ってインターネットに接続す るユーザーに便利なネットワーク機能を提供しています。システムで発生した TCP/IP リク エストは、自動的なダイヤルアッププログラムをアクティブにします。これは、Web ブラウ ザや電子メールクライアントアプリケーションを起動させたときに即座に接続したいユー ザーに効果的です。 この便利な機能は、クライアント / サーバーアプリケーションを使ってローカルネットワー ク上の InterBase サーバーにアクセスするシステムでは必要ありません。クライアントが呼 び出す TCP/IP サービスリクエストは、Windows の自動ダイヤラーをトリガーします。これ は、クライアントからサーバーへのすばやいネットワーク接続の妨げになります。 ここでは、Windows オペレーティングシステムの自動ダイヤルアップ機能を抑制する方法 について説明します。いずれかの方法を行えば、必要なネットワーク設定を行うことができ ます。 ネットワークアダプタのバインディング順序の変更 ダイヤルアップアダプタとローカルネットワーク用のイーサネットアダプタの両方がある ことがあります。この場合、Windows では、この 2 つのアダプタのバインディング順序を反 対にして、ダイヤルアップアダプタの前にイーサネットアダプタが TCP/IP リクエストを処 理するように設定できます。それには、コントロールパネルで[ネットワーク|バインド| すべてのアダプタ|下へ]を選択します。 ローカルなイーサネットアダプタは、ローカルで処理できる TCP/IP リクエストを処理し、 インターネットリクエストのようなローカルで処理できないリクエストについては、リス ト上の次のアダプタであるダイヤルアップアダプタに渡します。 レジストリでの自動ダイヤルアップの無効化 次のことを行います。 1 2 レジストリエディタ regedit.exe を起動します。 3 値を 0 から 1 に変更します。 レジストリキー HKEY_LOCAL_MACHINE¥Software¥Microsoft¥Windows¥CurrentVersion¥Int ernet Settings: EnableAutoDial に移動します。 ローカルネットワーク動作に対して RAS がダイヤルするのを抑制する Windows NT RAS を使用している場合、次のことを行います。 1 regedit.exe で、レジストリエディタを起動します。 2 レジストリキー HKEY_CURRENT_USER\Software\Microsoft\RAS Autodial\ Addresses に移動します。 コマンドプロンプトで rasautou -s を入力すると、より簡単です。 3 サブキーでローカルアドレスと名前を探します。キーを選択して、[編集]メニューか ら[削除]を選択します。 第 5 章 ネットワーク設定 5-23 接続のトラブルシューティング 4 レジストリエディタを閉じます。 アドレスを無効リストに追加したい場合があります。 5 regedit.exe ではなく、regedt32.exe でレジストリエディタを起動します。 6 レジストリキー HKEY_CURRENT_USER\Software\Microsoft\RAS Autodial\ Control に移動します。 7 [Disabled Addresses]をダブルクリックして、アドレスを新しい行に追加します。追 加作業が終了したら、[OK]をクリックします。 8 レジストリエディタを閉じます。 以上の作業が終了したら、マシンを再起動してください。 その他のエラー 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 を再インストールしてこのタスクを実行 することができます。 • 指定するサーバーは、使用するネットワーク上で動作していなければなりません。 ネット ワークの中断のためにアクセスできないホストにホスト名が対応している(ホストが動作 していない)場合、接続要求はネットワークエラーで失敗します。 • InterBase 接続文字列の構文はクライアントがサーバーホストに接続するために使用する ネットワークプロトコルによって決まります。5-9 ページの「接続の指定例」を参照して ください。サーバープラットフォームが異なると、サポートするネットワークプロトコル 5-24 操 作 ガ イ ド コミュニケーションの診断 のサブセットも違ってきます。サーバーが接続文字列で示されたプロトコルをサポートし ない場合、ネットワークエラーで接続は失敗します。たとえば、NetBEUI 接続構文 (¥¥server¥C:¥path¥database.ib)は、サーバーが Windows XP Professional、または Windows2003 Server のときだけ機能します。サーバーが UNIX または Linux の場合には この構文は意味を持ちません。 • ネットワーク接続要求は、InterBase のサーバーがインストールされていてサーバーホスト上 でアクティブな場合で、その InterBase のサーバーがリモート接続要求を受信するようにラ イセンスされている場合にのみ、成功します。接続要求のリスニング処理がない場合、ク ライアントの接続要求はネットワークエラーになります。InterBase のサーバーがサーバー 上にインストールされている(動作している)こと、およびライセンスにサーバー機能が 含まれていることを確認してください。 コミュニケーションの診断 クライアント / サーバーシステムのネットワーク構成には、いくつかの異なったソフトウェ アとハードウェアの層、およびこれらの層の適切な構成が含まれています。1 つ以上の層の 構成に誤りがある場合に、どこに問題があるのかいつも明らかにわかるとは限りません。 InterBase コミュニケーション診断は、既存または潜在的なネットワーク関連の問題につい て各層を順番にテストすることで、問題の原因特定を手助けします。 次に示すいずれかの方法で、[コミュニケーションの診断]ダイアログを表示できます。 • ツリーペインで、接続解除されているサーバーを選択します。 [サーバー|接続設定の診 断]を選択します。 • [InterBase Servers]を右クリックするか、ツリーペインで接続解除されている任意のサー バーを右クリックしてから、コンテキストメニューの[接続設定の診断]を選択します。 • ツリーペインで接続解除されているサーバーを選択して、ワークペインで[接続設定の診 断]をダブルクリックします。 実行可能な診断タイプは 4 つあります。[コミュニケーションの診断]ダイアログには診 断タイプごとに個別のタブがあります。 [DB 接続]タブ このテストでは、InterBase クライアントライブラリを使って InterBase データベースへの 接続を行います。これは InterBase 操作の最も基本的なテストで、一般に基礎となるネット ワークが正しく機能していることを確認した後で使用します。 第 5 章 ネットワーク設定 5-25 コミュニケーションの診断 図 5.4 [コミュニケーションの診断]ダイアログ: DB 接続 DB 接続テストを実行するには 1 [ローカルサーバー]オプションまたは[リモートサーバー]オプションのいずれかを 選択します。 2 [ローカルサーバー]を選択した場合、[サーバー]および[ネットワークプロトコル]、 および[エイリアス名]の情報は必要ありません。これらのテキストフィールドは入力 できなくなります。手順 5 に進んでください。 3 [リモートサーバー]を選択した場合、[サーバー]テキストフィールドにサーバーの名 前を入力します。 InterBase サーバー名はデータベースサーバーマシンの名前です。InterBase サーバープ ロセスそのものに対する特別な名前はありません。たとえば、サーバーが NT サーバー “venus” 上で実行されている場合は[サーバー]テキストフィールドにこの名前を入力 します。 4 リモートサーバーを選択した場合は、ネットワークプロトコルを TCP/IP、NetBEUI、 名前付きパイプ、またはローカルから選択します。クライアントとサーバーの両方がサ ポートしている場合にのみ、そのプロトコルは有効になります。 5 データベースのファイル名をパスを含めた形式で[データベース]テキストフィールド に入力します。手順 1 で[ローカルサーバー]オプションを選択した場合、[参照]ボ タン をクリックして対象ファイルを指定することもできます。[リモートサーバー] オプションを選択した場合は、[参照]ボタンは使用できません。 6 データベース用のユーザー名とパスワードをそれぞれ[ユーザー名]と[パスワード] テキストフィールドに入力します。 7 [テスト]をクリックして、結果ウィンドウの出力を調べます。 出力例(ローカル接続) Attempting to attach to: C:¥Embarcadero¥InterBase¥examples¥Database¥employee.ib 5-26 操 作 ガ イ ド コミュニケーションの診断 Attaching ...Passed! Detaching ...Passed! InterBase Communication Test Passed! [TCP/IP]タブ このプロパティシートを使用して、Winsock TCP/IP 接続をテストします。 図 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 第 5 章 ネットワーク設定 5-27 コミュニケーションの診断 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 [コミュニケーションの診断]による接続の問題の診断 エラーメッセージ チェック項目 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 サーバープラットフォームだけです。 5-28 操 作 ガ イ ド コミュニケーションの診断 このプロパティシートを使用して、クライアントとサーバー間の NetBEUI 接続をテストし ます。 図 5.6 [コミュニケーションの診断]ダイアログ: NetBEUI NetBEUI 接続をテストするには 1 [サーバー]ドロップダウンリストから、InterBase がインストールされている Windows サーバーを選択します。テストするサーバーがこのリストに表示されない場 合は、ドロップダウンリストのエディットボックス部分にサーバー名を入力できます。 2 [テスト]をクリックして、結果ウィンドウの出力を調べます。 出力例(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-29 コミュニケーションの診断 5-30 操 作 ガ イ ド 第 章 データベース ユーザー管理 第6章 InterBase には、データベースへのアクセス方法および使用方法を制御することで、セキュ リティの設定と強化を行うためのいくつかの方法があります。サーバーセキュリティには 次の機能があります。 • セキュリティデータベースへのユーザーの追加 • セキュリティデータベースからのユーザーの削除 • セキュリティデータベースのユーザー情報の変更 • セキュリティデータベースのユーザーリストの表示 • 埋め込みユーザー認証の有効化 • データベースエイリアスの作成 • データベースエイリアスの削除 • すべてのデータベースエイリアスの表示 この章では、これらのオプションの概要を説明します。ここでは、ユーザー管理ツールを取 り上げますが、特権を設定するための SQL 文は他の InterBase マニュアルに記載されていま す。これらの内容は、該当箇所で参照してください。 セキュリティモデル InterBase のセキュリティは、各サーバーホストの中核であるセキュリティデータベースに 依存します。このデータベース(デフォルトでは admin.ib)には、ホスト上のデータベース と InterBase サービスへの接続を許可された正当な各ユーザーのレコードが含まれていま す。各レコードには、ユーザーのログイン名と暗号化されたパスワードが含まれます。この セキュリティデータベース内のエントリは、サーバーホスト上のすべてのデータベースに 適用されます。 第 6 章 データベース ユーザー管理 6-1 セキュリティモデル ユーザー名は 31 文字まで有効で、大文字と小文字は区別されません。強度の高いパスワー ド保護を実装した場合には、パスワードは(8 文字ではなく)32 文字まで有効になり、大 文字と小文字が区別されます。 データベース管理作業を実行する前に、サーバーにログインしなければなりません。サー バーにログインした後、サーバーにあるデータベースに接続することができます。 すべてのユーザーは、サーバーにログインするためにユーザー名とパスワードを入力しな ければなりません。パスワードは、ネットワーク全体に送信されるために暗号化されます。 ユーザー名とパスワードはセキュリティデータベースの中のレコードと比較されます。一 致するレコードが見つかった場合にログインが成功します。 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 ユーザーアカウントを簡単に使用できます。 6-2 操 作 ガ イ ド InterBase セキュリティデータベース UNIX ユーザー クライアントとサーバーの両方が UNIX の場合、クライアントホストを「信頼されたホス ト」としてサーバーホストが扱うように設定することによって、UNIX ユーザーがデータ ベースにアクセスできるようになります。 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 です。 メモ InterBase XE では、InterBase データベースに対してさらに強度の高いパスワード保護を 実装しています。「強度の高いパスワード保護の実装」を参照してください。 セキュリティデータベースに別の名前を付けることもできます。この名前を変更する場合 は、ADMIN_DB を新しい名前に設定するエントリを ibconfig ファイルに追加する必要があ ります。 ADMIN_DB newname.ib メモ 旧バージョンの InterBase では、セキュリティデータベースの名前は isc4.gdb でした。 WindowsME、WindowsXP、Windows2003 Server では、gdb 拡張子を持つファイルが変更され るたびに自動的にバックアップされるため、この拡張子を使用すると効率が低下します。その ため、InterBase では、データベース名に別の拡張子を使用することをお勧めします。 第 6 章 データベース ユーザー管理 6-3 強度の高いパスワード保護の実装 InterBase サーバーのすべてのユーザーは、InterBase セキュリティデータベースへのエン トリを必要とします。gsec セキュリティユーティリティを使用して、セキュリティデータ ベースの中の情報を表示、追加、修正、または削除することができます。IBConsole には同 じ機能のグラフィックインターフェイスがあります。次の表にセキュリティデータベース の内容を示します。 表 6.1 InterBase セキュリティデータベースの形式 列 必須かどうか 説明 ユーザー名 はい ログインするときにユーザーが入力する名前。最大 31 文字 パスワード はい ユーザーのパスワード • 大文字と小文字を区別 • 最初の 8 文字までが有効 • 長さの最大値:32 文字 UID いいえ ユーザー ID を指定する整数 GID いいえ グループ ID を指定する整数 Full name いいえ ユーザーの実際の名前(ログイン名とは別) 強度の高いパスワード保護の実装 InterBase XE では、InterBase データベースに対して強度の高いパスワード保護を実装す ることができます。この追加機能では、パスワードの有効文字数が増えるため、パスワー ド保護が強力になります。 要件と制約 • この設計では、セキュリティ データベースの USERS テーブルに基づいて、サーバー レ ベルのユーザー認証を行うことができます。セキュリティ データベースは、 IBCONFIG.ADMIN_IB プロパティ パラメータで構成します(デフォルトは admin.ib ファイルです)。 • また、EUA(埋め込みユーザー認証)データベースもサポートされています。これは、 EUA を行っていないデータベースの場合と同様に、所有者または管理者が明示的に有 効化する必要があります。admin.ib の USERS テーブルに対応するのは EUA データ ベースの RDB$USERS なので、前者の参照は EUA データベースの参照と互換性がなけ ればなりません。 • USERS テーブル内の 1 つのユーザー アカウントは、パスワード ハッシュ値を 1 つしか 持つことができません。この制約があるため、ユーザー アカウントのパスワードで SHA-1 を使用するように変更すると、そのユーザーは新しい IB クライアントを使っ て新しい IB サーバーにログインしなければなりません。 • このリリースでは、プレインテキストのパスワードの長さが 32 バイトまでサポートさ れています(InterBase のこれまでのバージョンでは 8 バイトまででした)。 • キットに IBConsole の新バージョンが含まれています。このバージョンでは、データ ベース / サーバーのログイン画面に [ デフォルト ] ボタンが表示されません。 • インストール後に SYSDBA アカウントのパスワードを変更するためのバッチ スクリ プト(changepassword.bat)が提供されるようになりました(<interbase>/bin ディレクトリにあります)。 6-4 操 作 ガ イ ド 埋め込みユーザー認証の有効化 ファースト ステップ DES-CRYPT パスワード アルゴリズムの代わりに、民間組織でも政府機関でも広く使わ れている最新の暗号ハッシュ関数が採用されました。この設計では、160 ビット固定長の ハッシュを生成する SHA-1 を使用しています。 1 作業に取りかかる前に、現在の InterBase に含まれている admin.ib のバックアップを 作成し、それから新しい InterBase をインストールすることを強くお勧めします。そう することで、必要に応じて復元できるようになります。 2 サーバーに新しい InterBase をインストールした後で、admin.ib に対して以下のコマ ンドを実行します。 isql admin.ib -user SYSDBA -pass xxxxxxx sql> ALTER DATABASE SET PASSWORD DIGEST 'SHA-1'; sql> CREATE DOMAIN PASSWORD_DIGEST AS VARCHAR(16) CHARACTER SET ASCII; sql> ALTER TABLE USERS ADD PASSWORD_DIGEST PASSWORD_DIGEST; sql> UPDATE USERS SET PASSWORD_DIGEST = 'DES-CRYPT'; sql> COMMIT; メモ ALTER DATABASE コマンドを実行できるのは、データベース所有者か SYSDBA だけで す。このコマンドを実行すると、RDB$DATABASE.RDB$PASSWORD_DIGEST が "SHA-1" と いう文字列値に変更されます。これは、USERS テーブルに含まれる新規または既存のユー ザー アカウントに対する新しいパスワード ハッシュの生成が、すべて SHA-1 ハッシュ関 数を使って行われることを意味します。 同じ DDL を以下のように実行すると、パスワード ハッシュ関数を DES-CRYPT に戻す ことができます。 ALTER DATABASE SET PASSWORD DIGEST 'DES-CRYPT'; これで、admin データベースは、新規ユーザー アカウントの追加や既存アカウントのパ スワードの変更の際に、最大 32 バイトまで有効なプレインテキストのパスワードに対し て SHA-1 パスワード ハッシュを生成するようになります。 GSEC [add | modify]、IBConsole、および IB サービス API では、SHA-1 パスワード ハッシュ アルゴリズムをサポートしています。これらのどのツールを使っても、サーバー レベルのユーザー アカウントのパスワードを保守できます。既存ユーザー アカウントの パスワードを変更した場合、そのユーザーは新しい IB クライアント ライブラリを使って サーバーにログインしなければなりません。 重要 パスワード ハッシュを SHA-1 に変換した後で、変換済みの admin.ib データベースを バックアップし、それを古い IB エンジンで復元すると、下位互換性の問題が発生します。 古い IB エンジンは異なるパスワード ハッシュを理解しないため、復旧不能なログイン エ ラーが発生します。 埋め込みユーザー認証の有効化 EUA(埋め込みユーザー認証)は、データベース ユーザー名とパスワード情報を直接デー タベースに格納します。ユーザー認証情報がデータベースに埋め込まれると、外部から探索 に対してデータベースのメタデータ IP の保護が強化されます。EUA により移行可能な データベースがさらに安全になります。 第 6 章 データベース ユーザー管理 6-5 埋め込みユーザー認証の有効化 データベース所有者だけが、EUA の管理を許可されます。一般のユーザーは自分のユー ザー アカウントのパスワードを変更できます。 EUA で SYSDBA ユーザー アカウントを使用することはオプションです。SYSDBA アカ ウントがある場合は、このアカウントには、このアカウントが埋め込まれたデータベース に対して、任意の admin.ib とほとんど同じ特権があります。唯一の例外は、別のユーザー によって実装された場合は、SYSDBA で EUA を管理制御できないことです。 重要 InterBase の暗号機能を使用するために、EUA を有効にする必要があります。この機能で はデータベース ページと列の暗号が利用できます。暗号化されたデータベースや列へのア クセス権は、EUA を有効にしたときに指定ユーザーに付与できます。InterBase 暗号機能 の詳細については、 『データ定義ガイド』を参照してください。 isc_databaseinfo API による EUA が有効かどうかの確認 情報項目に isc_info_db_eua_active を指定して isc_databaseinfo() を呼び出すと、 次の値が返されます。 - データベースの EUA が有効な場合は 1 - EUA が有効でない場合は 0 所有者または SYSDBA がデータベースに接続している場合にだけ、この情報のクエリー を実行できます。他のユーザーの場合には情報要求は無視されます。 isql を使った EUA の有効化 次のコマンドで EUA を有効化できます。 • 新しいデータベースを作成するときは、次の構文を使用します。 CREATE DATABASE < データベース名 > [WITH ADMIN OPTION] ADMIN 句によりデータベースの RDB$USERS システム テーブルに、ユーザーの名前とパ スワード情報が自動的に挿入されます。 • 既存のデータベースを変更するときは、次の構文を使用します。 ALTER DATABASE < データベース名 > [ADD ADMIN OPTION] 別の方法として、gsec コマンドライン ユーティリティに新しいオプション -user_database [database_name] があります。これにより EUA が有効であるデータ ベースのユーザー アカウントを管理するためにこのツールを使用できます。 EUA を無効にするには、次の構文を使用します。 ALTER DATABASE < データベース名 > [DROP ADMIN OPTION] 一度 EUA を無効にすると、サーバーの集中ユーザー認証データベース ADMIN.IB で、デー タベースへのアクセスが認証されます。 IBConsole を使った EUA の有効化 IBConsole インターフェイスで新しいデータベースを作成するとき、IBConsole を使って EUA を有効化できます。 6-6 操 作 ガ イ ド 埋め込みユーザー認証の有効化 IBConsole から EUA を有効化するには: 1 [Databases] を右クリックして、コンテキスト メニューから [ データベースの作成 ] を 選択します。 2 [ データベースの作成 ] (図 6.1 を参照)にある、[ 埋め込みユーザー認証 ] フィール ドで、デフォルト値 [No] を [Yes] に変更します。 図 6.1 [ データベースの作成 ] ダイアログ [Yes] に変更して EUA を有効にします。 3 必要に応じて、別の設定を変更して、[OK] を選択してデータベースを作成します。こ れで EUA が有効になりました。 ユーザーの追加と変更(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++; 第 6 章 データベース ユーザー管理 6-7 システムテーブルのセキュリティ #endif SPB やサービス アクションの使用の詳細については、 『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 以前のデータベースであっても、デフォルト の特権が適用されます。 データベースセキュリティを変更するためのスクリプト <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 以前の動作と同じです。 6-8 操 作 ガ イ ド SQL 特権 • 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 を各データベースに実行して、動作を復元する必要があります。 SQL 特権 ただデータベースに接続しただけでは、そのデータベースに保存されているデータを修正 はもちろん表示することもできません。権限が明確に認定されている必要があります。ユー ザーは、権限が認定されるまで、どのようなデータベースオブジェクトにもアクセスする ことができません。PUBLIC に与えられた権限は、すべてのユーザーに適用されます。 SQL 特権の構文の詳細は、 『データ定義ガイド』および『言語リファレンス』の「GRANT」 および「ROLE」を参照してください。 第 6 章 データベース ユーザー管理 6-9 ユーザーグループ ユーザーグループ 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 ガイド』を参照してください。 • 埋め込み SQL アプリケーション、または isql セッションによる接続時にロールを指定 するには、CONNECT 文の ROLE rolename 句を使用します。『言語リファレンス』の CONNECT の項目を参照してください。 メモ BDE バージョン 5.02 以降を使用するアプリケーション(Delphi、JBuilder、C++Builder など)には、ロール名を指定できるプロパティがあります。また、現在 InterBase に付属し ている ODBC ドライバもロールを認識します。 6-10 操 作 ガ イ ド その他のセキュリティ 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)でログインするか、グループへの読み取り許可を 与えるためデータベースファイルに対するパーミッションを変更する必要があります。 データベースの保護 データベースとシステム上のその他のファイルに対するセキュリティを高めるには、いく つかの手順があります。 • UNIX/Linux システム: InterBase サーバーを起動する前に、root ではなくユーザー InterBase(ユーザー名が 8 文字までの場合は interbas)でログインします。このユーザー だけがサーバーを起動できます。これは、他のユーザーが誤ってまたは故意に、パスワー ドファイルなどの重要なファイルにアクセスまたは上書きする可能性を減らすためです。 ユーザー InterBase でログオンしたら、InterBase サーバーを起動します。 第 6 章 データベース ユーザー管理 6-11 IBConsole でのユーザー管理 • 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 でのユーザー管理 ユーザー管理は、 [ユーザー情報]ダイアログでユーザーの追加、変更、表示、および削除 を指定して行います。ユーザー管理は、サーバーにログインした後でのみ、実行できます。 [ユーザー情報]ダイアログの表示 次のいずれかの方法で、[ユーザー情報]ダイアログを表示します。 • ツリーペインでログインしたサーバーを選択するか、登録サーバーのリストからサーバー 階層下の任意のブランチを選択して、 [サーバー|ユーザー管理]を選択します。 • ツリーペインで登録サーバーのリストからログインしたサーバーを選択します。 ワークペ インで[ユーザー管理]をダブルクリックするか、選択サーバーを右クリックしてコンテ キストメニューから[ユーザー管理]を選択します。 • ツリーペインで対象サーバーの下の[Users]を選択して、ワークペインに有効なユーザー の一覧を表示します。ユーザー名をダブルクリックして、 [ユーザー情報]ダイアログを表 示します。 6-12 操 作 ガ イ ド IBConsole でのユーザー管理 図 6.2 [ユーザー情報]ダイアログ ユーザーの追加 [ユーザー情報]ダイアログで、新しいユーザーを追加します。このダイアログを表示する には、6-12 ページの「 [ユーザー情報]ダイアログの表示」で説明した方法のいずれかを行 います。 新しいユーザーを追加するには 1 次のいずれかの方法で、 [ユーザー情報]ダイアログを表示します。 • ツリーペインでログインしたサーバーを選択するか、登録サーバーのリストから サーバー階層下の任意のブランチを選択して、[サーバー|ユーザー管理]を選択し ます。 • ツリーペインで登録サーバーのリストからログインしたサーバーを選択します。 ワークペインで[ユーザー管理]をダブルクリックするか、選択サーバーを右ク リックしてコンテキストメニューから[ユーザー管理]を選択します。 • ツリーペインで対象サーバーの下の[Users]を選択して、ワークペインに有効な ユーザーの一覧を表示します。ユーザー名をダブルクリックして、[ユーザー情報] ダイアログを表示します。 2 [新規]をクリックします。[新規]ボタンと[削除]ボタンは淡色表示になり、[閉じ る]ボタンは[キャンセル]ボタンに変わります。 3 4 新しいユーザー名を[ユーザー名]テキストフィールドに入力します。 5 対応するテキストフィールドにオプション情報を追加します。オプションの各テキスト フィールドには、32 文字まで入力できます。 ユーザーのパスワードを[パスワード]および[パスワード確認]テキストフィールド の両方に入力します。 6 [適用]をクリックして、新しいユーザーをセキュリティデータベースに追加します。 または、[キャンセル]をクリックして変更を破棄します。 第 6 章 データベース ユーザー管理 6-13 IBConsole でのユーザー管理 メモ ユーザー名は 31 文字までです。大文字と小文字は区別されません。パスワードは大文字と 小文字が区別され、最初の 8 文字だけが有効です。ユーザー名やパスワードにスペースを 含めることはできません。 ユーザー設定の変更 [ユーザー情報]ダイアログで、ユーザー設定を変更します。このダイアログを表示するに は、6-12 ページの「[ユーザー情報]ダイアログの表示」で説明した方法のいずれかを行 います。 ユーザーの詳細設定を変更するには 1 次のいずれかの方法で、 [ユーザー情報]ダイアログを表示します。 • ツリーペインでログインしたサーバーを選択するか、登録サーバーのリストから サーバー階層下の任意のブランチを選択します。[サーバー|ユーザー管理]を選択 して、[ユーザー情報]ダイアログを表示します。 • ツリーペインで登録サーバーのリストからログインしたサーバーを選択します。 ワークペインで[ユーザー管理]をダブルクリックするか、選択サーバーを右ク リックしてコンテキストメニューから[ユーザー管理]を選択します。 • ツリーペインで対象サーバーの下の[Users]を選択して、ワークペインに有効な ユーザーの一覧を表示します。ユーザー名をダブルクリックして、[ユーザー情報] ダイアログを表示します。 2 [ユーザー名]ドロップダウンリストから設定を変更するユーザー名を選択します。 ユーザー設定の詳細が表示されます。[ユーザー名]ドロップダウンリストで目的の ユーザー名の最初の文字を入力すると、その文字から始まるユーザー名にすばやくスク ロールすることもできます。同じ文字の入力を繰り返すことにより、その文字で始まる すべてのユーザー名にわたってスクロールできます。 3 ユーザー名以外のいずれかのテキストフィールドを変更します。パスワードを変更する 場合は、[パスワード]と[パスワード確認]テキストフィールドに同じパスワードを 入力しなければなりません。 4 最後に[適用]ボタンをクリックして変更を保存します。 ユーザー名は変更できません。ユーザー名を変更する場合は、ユーザー名を削除し、新しい 名前を追加する方法しかありません。 ユーザーの削除 [ユーザー情報]ダイアログで、セキュリティデータベースのユーザーを削除します。この ダイアログを表示するには、6-12 ページの「[ユーザー情報]ダイアログの表示」で説明 した方法のいずれかを行います。 1 次のいずれかの方法で、 [ユーザー情報]ダイアログを表示します。 • ツリーペインでログインしたサーバーを選択するか、登録サーバーのリストから サーバー階層下の任意のブランチを選択して、[サーバー|ユーザー管理]を選択し ます。 6-14 操 作 ガ イ ド InterBase API でのユーザー管理 • ツリーペインで登録サーバーのリストからログインしたサーバーを選択します。 ワークペインで[ユーザー管理]をダブルクリックするか、選択サーバーを右ク リックしてコンテキストメニューから[ユーザー管理]を選択します。 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 コンポーネントの使い方について は、『開発者ガイド』を参照してください。 gsec によるセキュリティの管理 InterBase コマンドラインのセキュリティユーティリティは gsec です。このユーティリ ティは、InterBase セキュリティデータベース(デフォルトでは admin.ib)を操作して、 InterBase のユーザー名とパスワードを管理するために使用します。このユーティリティ は、IBConsole for Windows の[サーバー|ユーザー管理]と同等の機能を持っています。 セキュリティデータベースは InterBase インストールディレクトリにあります。データ ベースをサーバーに接続するには、ユーザーはユーザー名とパスワードを指定する必要が あります。そして、これらはセキュリティデータベースに保存されている情報と比較され ます。一致した場合に接続が成功します。 重要 gsec を実行できるのは SYSDBA だけです。これには次のいずれかの方法を使用します。 第 6 章 データベース ユーザー管理 6-15 gsec によるセキュリティの管理 • 次のようにコマンドを起動する。 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 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 のオプション」を 参照。 6-16 操 作 ガ イ ド gsec によるセキュリティの管理 表 6.2 gsec コマンドの概要 ( 続き ) コマンド 説明 mo[dify] name [options] add と同様ですが、セキュリティデータベース内の既存の name は除きます。 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 nameuidgidfull name ---------------------------------------------JOHN 123 345John Doe JANE 124 345Jane Doe RICH 125 345Richard Roe パスワードが表示されることはありません。 セキュリティデータベースへのエントリの追加 ユーザーをセキュリティデータベースに追加するには、add コマンドを使用します。 a[dd] name -pw password [options] 続けてユーザー名、-pw オプション、パスワードを、さらに次の表に示されている他のオ プションを続けます。パスワードは大文字と小文字が区別されます。それ以外のパラメー タは大文字と小文字が区別されません。 各オプションの先頭の数文字は必須で、ブラケット([ ])で囲まれた部分は任意です。各 オプションの後に、対応する引数として、InterBase セキュリティデータベース(デフォル トでは admin.ib)の指定された列に入力するデータを指定する文字列を続ける必要があり ます。 第 6 章 データベース ユーザー管理 6-17 gsec によるセキュリティの管理 表 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 gid full name ---------------------------------------------JONES 0 0 CBROWN 0 0 CINDI BROWN gsec は、入力方法にかかわりなく、大文字でユーザー名を認識します。 6-18 操 作 ガ イ ド 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 によるデータベース エイリアスの管理 データベース エイリアスを使用すれば、データベース ファイルの正確な位置がわからなく ても、クライアント アプリケーションがエイリアスによってデータベースを参照できます。 セキュリティ データベースへのデータベース エイリアスの追加 データベース エイリアスをセキュリティ データベースに追加するには、alias_add コマン ドを使用します。 alias_add alias name and alias_dbpath path name path はデータベースの場所です。 第 6 章 データベース ユーザー管理 6-19 gsec エラーメッセージ たとえば、“C:\Embarcadero\InterBase\examples\database\employee.ib” のデー タベース エイリアス "emp" を追加するには、次のように入力します。 GSEC> alias_add emp -alias_dbpath "C:\Embarcadero\InterBase\examples\ database\employee.ib" メモ スペースを含むパスには引用符が必要です。 エントリの確認には、alias_dis を使用します。 GSEC> alias_dis emp C:\Embarcadero\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 (検索 / 削除レコードエラー) Find/display record error (検索 / 削除レコードエラー) Find/modify record error (検索 / 修正レコードエラー) 6-20 操 作 ガ イ ド delete コマンドを使用できません。gsec を使用する適切な特 権を持っているかをチェックしてください。 このメッセージには他のエラーメッセージが一緒に表示され ます。不正な構文が使用されたことを示します。他のエラー メッセージをチェックして原因を調べてください。 delete コマンドで指定されたユーザーを見つけられなかった か、gsec を使用する適切な特権を持っていませんでした。 display コマンドで指定されたユーザーを見つけられなかっ たか、gsec を使用する適切な特権を持っていませんでした。 modify コマンドで指定されたユーザーを見つけられなかっ たか、gsec を使用する適切な特権を持っていませんでした。 gsec エラーメッセージ 表 6.4 gsec のセキュリティエラーメッセージ ( 続き ) エラーメッセージ 原因と対応 Incompatible switches specified 構文を正しく直して再度試みてください。 (非互換性スイッチの指定) 引数を指定しないで値を指定しました。 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-21 gsec エラーメッセージ 6-22 操 作 ガ イ ド 第 章 データベースの環境設定と保守 第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 コマンドでは、データベースの事前割り当て値がゼロではない場合 DATABASE 文を抽出し所定の形式で表示する isql -extract PREALLOCATE 句が利用できます。この isql extract 操作は -a|-x オプションで呼び出すこ に、CREATE とができます。 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 だけです。 • 外部テーブルのインデックスは定義できません。外部データは、マルチジェネレーション アーキテクチャでは制御されません。 • InterBase XE 以降では、外部ファイルのサイズの上限が 2 GB という制限が取り除かれま した。 第 7 章 データベースの環境設定と保守 7-3 データベースファイル 外部ファイルのデフォルトの場所は、<InterBase_home>/ext です。このディレクトリに保存 された外部ファイルは、InterBase によって必ず検索されます。これ以外の場所にファイルを保 存するには、ibconfig 設定ファイルの EXTERNAL_FILE_DIRECTORY エントリを使用して、そ の場所を指定する必要があります。 重要 セキュリティ上の理由から、機密情報を含むファイルは、外部テーブルと同じディレクト リに保存しないことが非常に重要です。 移行に関する注意点: 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' 7-4 操 作 ガ イ ド データベースファイル [USER 'username' [PASSWORD 'password']] [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 は、シャドウファイルを含めて最大 131,000 個のデータベースファイルを扱えま す。使用するオペレーティングシステムで同時に開けるファイルの数は、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 は、リリースごとに内部ファイル形式の特徴が異なります。ファイル形式を区別 するため、InterBase ではデータベース ファイルにオンディスク構造体(ODS)番号を記 録します。通常、メジャー ODS バージョン(小数点の左側の数値が増加するもの)では、 それ以前の ODS バージョンとの下位互換性がない機能が導入されます。 InterBase XE の形式は ODS 15 ですが、ODS 13 を使用している既存データベースもまだ サポートされています。InterBase XE で ODS 12、11、10 を扱うことができる可能性は ありますが、これらはサポート対象外です。ODS 15 にアップグレードして新しい機能を 利用できるよう、データベースをバックアップして復元することを強くお勧めします。 新しいデータベースを作成したり InterBase の現在のバージョンでバックアップファイル を復元する場合は、現在の ODS バージョンでデータベースファイルが作成されます。 重要 古いデータベースの ODS をアップグレードするには、既存のデータベースのバージョン用 のバックアップユーティリティを使用してそのデータベースをバックアップしてから、 InterBase の現在のバージョンを使用してそれを復元しなければなりません。 読み取り / 書き込みデータベースと読み取り専用データベース InterBase データベースには、読み取り専用と読み取り / 書き込みの 2 つのモードがありま す。 作成時のデータベースはすべて、読み取りと書き込みを行うことができます。これらを 読み取り / 書き込みモードであると言います。 読み取り / 書き込みデータベース 読み取り / 書き込みモードにするには、データベースが書き込み可能な媒体にある必要があ ります。また、ibserver プロセスはデータベースファイルに対して書き込み可能でなけれ ばなりません。読み取り / 書き込みモードのデータベースの場合、読み取り専用の操作でし 第 7 章 データベースの環境設定と保守 7-7 読み取り / 書き込みデータベースと読み取り専用データベース かデータベースを使用しなくても、この条件を満たす必要があります。これは、トランザ クションの状態は .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; • 読み取り専用データベースを介してアクセスされた外部ファイルはファイルシステムレベ ルでのファイルアクセス許可とは無関係に、読み取り専用モードで開かれます。 データベースを読み取り専用にする データベースのモードを読み取りと読み取り / 書き込み専用に変更するには、ユーザーが データベースの所有者または SYSDBA で、かつ、そのデータベースに対して排他アクセス 権を持っていなければなりません。 7-8 操 作 ガ イ ド データベースの作成 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-27 ページの 「強制書き込みとバッファ書き込み」を参照 スイープ間隔 スイープ間隔とは、自動データベーススイープが起こるまでに発生するトラ ンザクション数。スイープ間隔に対しては任意の正の数を入力できる。自動 スイープを無効にするには 0 を指定する。スイープ間隔の設定の詳細は、7-22 ページの「スイープ間隔と自動保守」を参照 データベース ダイア レクト InterBase データベース SQL ダイアレクトは、二重引用符、大きな有効桁数を 持つ高精度数値、およびデータ型 SQL DATE、TIME、TIMESTAMP をどの ように解釈するかを決定する。ほとんどの場合、現在の InterBase 機能すべて にアクセスするにはダイアレクト 3 を選択する 読み取り専用 オプションの値は、 [はい]または[いいえ] 。データベースを読み取り専用に 設定するには、 [読み取り専用]オプションを[はい]に設定する。これによ り、ユーザーによる DML 実行やデータベースの更新が禁止される。このオプ ションのデフォルト設定は[いいえ] 。詳細は、7-8 ページの「データベース を読み取り専用にする」を参照 第 7 章 データベースの環境設定と保守 7-21 スイープ間隔と自動保守 スイープ間隔と自動保守 データベースをスイープすることで、古いレコードを系統立てて削除することができま す。定期的にスイープを実行すると、データベースのサイズが大きくなりすぎるのを防ぐ ことができます。これまではスイープ処理を行うとシステムのパフォーマンスが低下して いたため、ユーザーは本番運用に影響が出ないよう、自動データベース スイープ機能を無 効化していました。 InterBase データベースは定期的にスイープを行う必要があります。行わなければ、各ト ランザクションのビットマップに割り当てられるメイン メモリが増大し、容認できないレ ベルまでパフォーマンスが悪化してしまいます。スイープが完了するまでの時間が長引く ほど、新しいトランザクションを開始するのに必要なメイン メモリの量が増大します。 InterBase XE で高速スイープの最適化が実装されたことで、メモリ割り当ての問題が軽減 されました。そのため、ユーザーはデータベースに自動スイープを構成するという選択が できるようになりました。データベースのサイズが大きくても、アーカイブ テーブルが大 きかったり、テーブルが頻繁に更新されない場合には、実行中のトランザクション操作の パフォーマンスに対するデータベース スイープの影響はごくわずかです。 データベースの高速スイープを実行できるのは、ODS 15 以降のデータベースだけです。 高速スイープの効果は、前回のスイープ以降に変更されたデータベース データ ページの 割合に直接的に比例します。すべてのデータ ページが変更されている場合には、高速ス イープの速度はこれまでの方法と変わりません。変更されたページがほとんどなければ、 高速スイープはほぼ瞬時に終了します。半分のページが更新された場合には、高速スイー プはこれまでのスイープ時間の半分で終了します。 この機能を有効化するための新しいユーザー インターフェイスはありませんし、ユーザー が行わなければならない作業もありません。gfix コマンド ライン ツールや IBConsole や プログラムで起動される手動スイープでも、データベースに構成された自動スイープで も、高速スイープ メカニズムが使用されます。 データベース管理者は、ユーザーのニーズを最大限満足させるために、データベースのス イープを調整して、その利点と欠点のバランスを取ることができます。 スイープの概要 InterBase は、マルチジェネレーションアーキテクチャを採用しています。これはデータレコー ドの複数バージョンがデータページに直接保存されるという意味です。あるレコードを更新し たり削除すると、以前のレコードのコピーを保存して、新しいバージョンを作成します。これ により、データベースのサイズが大きくなります。 ガベージコレクション データベースの拡大を押さえるために、InterBase はデータベースをスイープすることによ りガベージコレクションを実行します。この処理により、古いバージョンのレコードに割り 当てられていた領域が解放されます。トランザクションがレコードにアクセスするとき、そ のレコードの古いバージョンがガベージコレクションの対象になります。ロールバックさ れたレコードはガベージコレクションの対象にはなりません。ロールバックされたレコー ドも含めて、すべてのレコードをガベージコレクションするために、InterBase は定期的に データベースをスイープします。 7-22 操 作 ガ イ ド スイープ間隔と自動保守 自動保守 アクティブな(未解決)状態のトランザクションを「懸案の」トランザクションと言いま す。データベースのトランザクションインベントリで、 「コミット済み」以外のステータス を持つ最初のトランザクションを OIT(最も古い懸案のトランザクション)と言います。自 動保守は、OIT と OAT(最も古いアクティブトランザクション)の差がスイープ間隔より 大きくなったときに実行されます。このスイープ間隔はデフォルトでは 20,000 ですが、変 更することもできます(7-23 ページの「スイープ間隔の設定」を参照)。 メモ 20,000 トランザクションごとに自動的にスイープされるとは限らない、ということは微妙 ですが重要な特徴です。OIT と OAT の差がしきい値に達するときにのみスイープされま す。データベースに対するすべてのトランザクションがすぐにコミットされる場合、この差 は自動的なスイープの引き金となるほど大きくはありません。 InterBase サーバープロセスは、特別なスレッドを起動して、このスイープを不定期にコ ミットします。その結果、クライアントプロセスは機能し続けることができ、スイープに よる作業量には影響されません。 ヒント システマチックにガベージコレクションを行う方法は、データベースのスイープ以外にも あります。InterBase サーバーがすべてのレコードを読み込むという点では、データベース のバックアップも同じ効果があります。したがって、定期的にデータベースをバックアップ すれば、スイープの必要性を減らすことができます。これにより、アプリケーションの効率 を良好に保つことができます。バックアップと復元の詳細は、8-1 ページの「InterBase バックアップと復元オプションについて」を参照してください。 スイープの設定 データベースのスイープに関して以下のことを制御できます。 • 自動的にスイープ間隔を変更する • 自動的なスイープを無効にする • データベースを即時にスイープする 最初の 2 つの機能は[データベースのプロパティ]ダイアログで実行できます。最後の機 能はスイープメニューコマンドで実行できます(7-24 ページの「データベースの即時ス イープ処理」を参照)。 スイープ間隔の設定 自動的なスイープの間隔を設定するには、次のように指定します。n はスイープ間のトラン ザクション数です。 gfix -h n データベースにロールバックされたトランザクションがある場合は、データベースのス イープはトランザクションの起動に影響します。最後にスイープしてからの時間が長けれ ば、トランザクションの起動時間も長くなります。スイープ間隔を短くすれば、トランザク ションの起動時間も短くできます。 第 7 章 データベースの環境設定と保守 7-23 スイープ間隔と自動保守 一方、頻繁にデータベースのスイープを実行すると、アプリケーションの性能を下げるこ とになります。スイープ間隔を長くすれば、全体の能力を向上させるために有効です。デー タベース管理者は、影響を受けるアプリケーションの問題点を推測し、そのスイープ間隔 によって必要なデータベース性能を得ているかを判断する必要があります。 IBConsole でのスイープ間隔の設定については、7-19 ページの「データベースプロパティ の設定」を参照してください。 ヒント ロールバックされたトランザクションがデータベースにたくさん含まれていなければ、ス イープ間隔を変えてもデータベースのサイズにはほとんど影響しません。したがって、デー タベース管理者は、自動的にスイープしないように設定し、特定の時間にスイープを実行 することによってデータベースをチューニングするのが最も一般的です。これらの方法に ついては、以降の 2 つの節で説明します。 自動スイープの抑止 自動的なスイープが行われないようにするには、スイープ間隔を 0 に設定します。次のよ うな場合に、自動スイープの抑止が有効です。 • 最大スループットが重要な場合。 スイープによってトランザクションが遅延することはあ りません。 • 任意にスイープを実行する場合。 データベースを手動でスイープすることができます。 ク ライアントと資源の取り合いをしないで済むように、データベースサーバー上のアクティ ビティが少ないときにスイープをするようにするのが一般的です。 IBConsole での自動スイープの抑止については、7-19 ページの「データベースプロパティ の設定」を参照してください。 データベースの即時スイープ処理 次の方法を使用すると、その時点でデータベーススイープを行うことができます。 • ツリーペインで接続しているデータベースを右クリックし、コンテキストメニューから[保 守|スイープ]を選択します。 • ツリーペインで接続しているデータベースを選択し、ワークペインで[スイープ]をダブ ルクリックします。 • 次のコマンドを入力します。 gfix -sweep この操作によって、ただちにデータベースのスイープが実行され、ロールバックされたレ コードと古いバージョンレコードによって占められている領域が解放されます。スイープ は、自動的に指定された間隔でも実行されます。 データベースのスイープの際に、データベースをシャットダウンする必要はありません。ス イープはいつでも実行できますが、システムのパフォーマンスに影響を与えるので、ユー ザーが少ないときに実行する必要があります。 7-24 操 作 ガ イ ド データベースキャッシュの設定 スイープがデータベースで排他的に実行される場合は、さらにいくつかのチューニングが 実行されます。アクティブなトランザクションが残っていない場合、スイープはデータレ コードの状態と過去のトランザクションのインベントリ状態を更新します。コミットされ ていないトランザクションは、最終的には破棄され、データベースバージョンのスナップ ショットを保持するために内部のデータ構造を記録することはありません。この利点は、メ モリの使用量が減って、パフォーマンスが向上することです。 データベースキャッシュの設定 データベース キャッシュは、同時にメモリで保持するデータベースページ数(バッファ) です。データベース キャッシュ サイズは、データベースのページ数です。データベース キャッシュのデフォルトサイズは 3 つのレベルで設定できます。 • サーバーレベル:すべてのデータベースに適用 • データベースレベル:1 つのデータベースに対してだけ適用(gfix または ALTER DATABASE SET PAGE CACHE を使って特定のデータベースのサイズを設定) • 接続レベル:特定の isql 接続にのみ適用 InterBase では、サーバーレベルではなく、データベースレベルでキャッシュサイズを設定 することをお勧めします。これにより、データベースキャッシュサイズを削減できます。 サーバー上のすべてのデータベースはキャッシュサイズ(データベースページ数)にペー ジサイズを乗算したものと RAM が同じ大きさでなければなりません。デフォルトでは、 キャッシュサイズはデータベースごとに 2048 ページで、ページサイズは 4KB です。つま り、デフォルト設定で動作する単一データベースでは 8MB のメモリが必要で、3 つのデー タベースならば 24MB のメモリが必要になります。 データベースごとのデフォルト キャッシュ サイズ gfix ユーティリティの buffers パラメータで、特定のデータベースのデフォルト キャッ シュ ページ数を設定します。 gfix -buffers n database_name これで、サーバー レベルの値(デフォルトでは 2048 ページ)よりも優先される、特定の データベースのキャッシュ ページ数を、n に設定することができます。 データベースごとのデフォルト サイズは、ALTER DATABASE 文を使って設定することも できます。 ALTER DATABASE SET PAGE CACHE n gfix や ALTER DATABASE を実行できるのは、SYSDBA またはデータベース所有者だけ です。 gfix と ALTER DATABASE のどちらの場合でも、キャッシュ バッファが指定されたページ 数に即座に拡張されます。 第 7 章 データベースの環境設定と保守 7-25 データベースキャッシュの設定 isql 接続ごとのデフォルト キャッシュ サイズ isql 接続中のキャッシュページ数を設定するには、isql を次のオプションで実行します。 isql -c n database_name n は、そのセッションのデフォルト値として使われるキャッシュ ページ数です。データベー スごとのキャッシュ設定よりも大きい場合には、その設定値まで減らされます。 isql クエリーに入力する CONNECT 文は、引数 CACHE n を取ります(CONNECT 関数 の詳細については、 『言語リファレンス』の CONNECT の説明を参照してください)。たと えば次のように使用します。 isql> CONNECT database_name CACHE n; n には、データベース ページ数を任意の正の整数値で指定します。データベースに対する 別の接続が行われているためデータベース キャッシュが既にサーバーに存在する場合に は、現在のキャッシュ サイズよりも n が大きいときにだけ、キャッシュ サイズが増やされ ます。 アプリケーションのキャッシュ サイズの設定 InterBase API の場合: isc_dpb_num_buffers パラメータを使って、データベース パラ メータ バッファ(DPB)のキャッシュ サイズを設定します。 IBX の場合: num_buffers パラメータを使って、TIBDatabase のパラメータ リストで キャッシュ サイズを設定します。たとえば num_buffers=250 のように指定します。パラ メータを正確に解析させるには、等号記号(=)の前後にスペースを入れてはなりません。 InterBase API や IBX から渡されたバッファ数がデータベースごとのキャッシュ設定より も大きい場合には、バッファ数はその設定値まで減らされます。 サーバーごとのデフォルトキャッシュサイズ スーパーサーバーインストールの場合、データベースキャッシュで使用するデフォルトのペー ジ数を設定できます。デフォルトでは、データベースキャッシュサイズはデータベースごとに 2048 ページです。このデフォルトは、ibconfig 設定ファイルの DATABASE_CACHE_PAGES 値を 変えることによって、変更できます。この設定を変更する場合、サーバー上のアクティブな サーバーすべてに適用されます。 gfix ユーティリティまたは SET PAGE CACHE ユーティリティで、各データベースのデ フォルトのキャッシュサイズを設定できます。この方法は柔軟性が高く、メモリが過度に使 用されたり、キャッシュが不足する危険も減ります。 キャッシュサイズの設定には、DATABASE_CACHE_PAGES ではなく、gfix または SET PAGE CACHE を使用することを強くお勧めします。 7-26 操 作 ガ イ ド 強制書き込みとバッファ書き込み キャッシュサイズの確認 現在使用されているデータベースキャッシュのサイズを確認するには、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」の行はデータベースのキャッシュサイズを指定します。 メモ この例のコマンドでは "Buffers = 2048" と出力されていて、ユーザーはキャッシュ設定 が変更されていることを確認できます。ただしこれは、厳密には正しくなくなっていま す。キャッシュ バッファの設定が非常に大きい(256 MB を超える)場合、InterBase は 必要に応じてキャッシュ バッファを追加で割り当てていきます。そのため、上記のコマン ドで実際よりも低いバッファの数値が表示される可能性があります。gstat -h を実行し てページ バッファの項目を確認するか、システム テーブル RDB$DATABASE の RDB$PAGE_CACHE の列に対するクエリーを実行すると、いつでも実際の値を調べることが できます。 強制書き込みとバッファ書き込み 強制書き込み(同期書き込みとも呼ばれる)とは、データベースが 1 つの(内部)書き込 み操作を実行するときに、データが物理的にディスクに書き込まれることです。 強制書き込みが無効の場合は、オペレーティングシステムがバッファに書き込むため、 InterBase が書き込みを実行してもデータは物理的にディスクには書き込まれません。デー タがディスクに書き込まれる前にシステム障害が発生すると、その情報は失われます。 強制書き込みはデータの整合性と安全性を保証します。しかし、パフォーマンスは低下し ます。特に、データ変更を含む操作は遅くなります。 強制書き込みは、 [データベースのプロパティ]ダイアログで有効または無効に設定できま す。詳細は、7-19 ページの「データベースプロパティの設定」を参照してください。 第 7 章 データベースの環境設定と保守 7-27 検査と修復 検査と修復 日常の操作では、データベース構造に対して小さな問題を引き起こす出来事が発生するも のです。以下のようなことが起こります。 • データベースアプリケーションの異常終了。 これはデータベースの整合性には影響しませ ん。アプリケーションが終了するとき、コミットされたデータは保存されますがコミット されていない変更はロールバックされます。実行されていない変更のために 1 つのデータ ページをすでに割り当てている場合は、そのページは孤立ページと考えることができます。 孤立ページは空き領域に戻される未割り当てのディスク領域です。 • オペレーティングシステムまたはハードウェアでの書き込みエラー。 これらは通常、デー タの整合性の問題を引き起こします。書き込みエラーは、データベースページやインデッ クスなどのデータ構造が壊れたり失われる原因となります。これらのデータベース構造の 破損によって、コミットされたデータは修復不能になります。 データベースの検証 以下のようなときには、データベースの検証を行う必要があります。 • データベースのバックアップが失敗したとき • アプリケーションでデータベース破損エラーが発生したとき • 破損したデータ構造や割り当ての不適切な領域がないかを定期的に点検するとき • データ破損の疑いがあるとき データベースの検証を実行するには、データベースに排他的にアクセスする必要がありま す。データベースをシャットダウンして排他的アクセス権を取得します。データベースへ の排他的アクセス権がなければ、次のエラーメッセージが表示されます。 bad parameters on attach or create(接続または作成に関するパラメータが間 違っています) - secondary server attachments cannot validate databases(セカンダリ サーバー接続ではデータベースを検証できません) データベースをシャットダウンするには、7-32 ページの「データベースのシャットダウン」 の指示を参照してください。 gfix を使用したデータベースの検証 gfix を使ってデータベースを検証するには、次の手順にしたがいます。 1 次のコマンドを入力します。 gfix -v 2 使用しているデータベースが壊れている可能性がある場合、OS のコマンドを使って データベースのコピーを作成してください(gbak は壊れたデータはバックアップしま せん)。 3 gfix コマンドを使用して、コピーしたデータベースの壊れた構造にマークを付けます。 gfix -mend 7-28 操 作 ガ イ ド 検査と修復 4 gfix がチェックサムエラーを報告したら、チェックサムエラーを無視して、データ ベースをもう一度有効にして修正を行います。 gfix -validate -ignore メモ:本来のチェックサムは ODS 8 以前の InterBase でのみサポートされます。 場合によっては、データベースを複数回有効にしてすべてのエラーを修正する必要があり ます。 IBConsole を使用したデータベースの検証 IBConsole でデータベースを検証するには、次に示すいずれかの方法で[データベースの 検証]ダイアログを表示します。 • ツリーペインで接続解除されているデータベースを選択して、ワークツリーから[データ 検証]をダブルクリックします。 • ツリーペインで接続解除されているデータベースを右クリックして、コンテキストメ ニューから[データ検証]を選択します。 • [データベース|保守|データ検証]を選択します。 図 7.5 [データベースの検証]ダイアログ データベースを検査するには 1 指定されたデータベースが間違っていないかどうかを検査します。間違っている場合、 このダイアログをキャンセルして[データベースの検証]ダイアログを適切なデータ ベースの下から再度表示します。 2 右側の列をクリックし、ドロップダウンリストから[はい]または[いいえ]を選択す ることで、検査オプションを指定します。各オプションの詳細は、表 7.3「検証オプ ション」を参照してください。 3 検査を行う場合は[OK]を、それ以外の場合には[キャンセル]をクリックします。 IBConsole によるデータベースの検査では、データベース構造の整合性を検査します。特 に、以下のことが行われます。 • 破損データ構造をレポートする • 割り当ての不正なデータページをレポートする • 孤立ページを空き領域に戻す 第 7 章 データベースの環境設定と保守 7-29 検査と修復 表 7.3 検証オプション オプション 値 レコード断片の検証 オプション値は、[ はい ] または [ いいえ ] です。デフォルトでは、データ [レコード断 ベースの検査はページ構造だけをレポートして解放します。 片の検証]オプションを [ はい ] に設定した場合、ページ構造とレコード 構造をレポートして解放します。 読み取り専用検証 オプション値は、[ はい ] または [ いいえ ] です。デフォルトでは、データ ベースの検査で、必要に応じてデータベースが更新されます。更新しない 場合は、 [読み取り専用検証]オプションを [ はい ] に設定します。 チェックサム エラーの無 視 オプション値は、[ はい ] または [ いいえ ] です。チェックサムは、ページ ごとにデータを解析してデータの整合性を検査するものです。不良 チェックサムとは、システム障害などでデータベースページがランダム に上書きされている状態を言います。 チェックサムエラーはデータが壊れていることを表します。チェックサ ムエラーが発生したデータベースを修復するには、 [チェックサム エラー の無視]オプションを [ はい ] に設定します。これにより、IBConsole は、 データベースの検査でチェックサムを無視します。チェックサムを無視 することによって、壊れているデータベースを正しく検査することがで きます。ただし、壊れているデータは失われます。 メモ:本来のチェックサムは ODS 8 以前の InterBase でのみサポートされ ます。 破損したデータベースの修復 データベースにエラーがある場合は、次のようなダイアログが表示されます。 図 7.6 [検査レポート]ダイアログ 発生したエラーは、ダイアログのテキスト表示領域にまとめて表示されます。データベース 検査ダイアログで選択した修復オプションがこのダイアログでも選択されます。 7-30 操 作 ガ イ ド データベースのシャットダウンと再起動 データベースを修復するには、[修復]を選択します。これにより、レコードを壊した問題 点を修復して、壊れている構造体をマークします。次の操作(バックアップなど)では、 マークされたレコードは無視されます。 破損がかなりひどい場合は、IBConsole では修復できません。領域割り当てページなどの重 要な構造の破損などがそれに当たります。InterBase と関係しないランダムなある種の チェックサムエラーなども修復できません。 メモ 解放ページはレポートされず、壊れたレコードがマークされます。修復中にマークされたす べてのレコードは、データベースのバックアップ時には無視されます。 データベースが破損している恐れがある場合は、次の操作を行います。 1 オペレーティングシステムのコマンドを使用して、データベースのコピーをとります。 データベースに壊れたデータがある場合は、バックアップできないので、IBConsole のバックアップユーティリティや gbak コマンドは使用しないでください。コピーした データベースを修復して、壊れた構造体をマークします。IBConsole がチェックサムエ ラーをレポートしていれば、 [Ignore Checksum Errors]オプションを[True]に設定 してデータベースを再度検査し、修復してください。メモ:本来のチェックサムは ODS 8 以前の InterBase でのみサポートされます。 2 すべてのチェックサムエラーを修復するために、複数回のデータベース検査が必要な場 合もあります。[Read Only Validation]オプションを[True]に設定して、データ ベースを再度検査します。 3 修正されたデータベースを IBConsole または gbak でバックアップします。このとき、 損傷したレコードはバックアップに含まれなかったために失われます。データベース バックアップの詳細は、第 8 章「データベースのバックアップと復元」を参照してく ださい。 4 インデックスとその他のデータベース構造を再作成するためにデータベースを復元しま す。復元されたデータベースには、壊れたところはありません。 5 復元されたデータベースを読み取り専用検査オプション[True]で検査し、データ ベースの復元によって問題点が解決していることを確認してください。 データベースのシャットダウンと再起動 データベースの保守ではデータベースのシャットダウンが必要な場合があります。データ ベースをシャットダウンできるのは、SYSDBA またはデータベースの所有者(作成者)だ けです。データベースをシャットダウンするユーザーは、データベースを排他的にアクセス できます。 以下のような場合は、データベースを排他的にアクセスする必要があります。 • データベースを検査して修復する • データベース内のテーブル上の外部キーを追加または削除する • 二次データベースファイルを追加する 第 7 章 データベースの環境設定と保守 7-31 データベースのシャットダウンと再起動 データベースをシャットダウンした後でも、データベースの所有者と SYSDBA はデータ ベースへ接続できます。それ以外のユーザーがデータベースへ接続しようとすると、デー タベースがシャットダウンしていることを示すエラーメッセージが表示されます。 データベースのシャットダウン データベースをシャットダウンするには、ツリーペインから接続されたデータベースを選 択してワークペインで[シャットダウン]をダブルクリックするか、 [データベース|保守 |シャットダウン]を選択します。 [データベースのシャットダウン]ダイアログが表示さ れます。 図 7.7 [データベースのシャットダウン]ダイアログ シャットダウンのタイムアウトオプション ドロップダウンリストから新しい値を選択するか、ドロップダウンリストのエディット ボックス部分に値を入力することで、タイムアウト値を指定できます。タイムアウト値は、 1 ~ 500 分の範囲内で指定できます。 シャットダウンオプション ドロップダウンリストから新しい値を選択して、シャットダウンオプションを指定できま す。シャットダウンオプションの値には、[待機中は新しい接続は拒否されます]、 [待機中 は新しいトランザクションは拒否されます]、[タイムアウト後に強制的にシャットダウン されます]があります。 [ 待機中は新しい接続は拒否されます ] このオプションによって、既存のすべてのデータベース接続は影響を受けずに完了するこ とができます。すべてのプロセスがデータベースから接続解除されてから、IBConsole は データベースをシャットダウンします。タイムアウトになるところで、まだアクティブな接 続がある場合は、データベースはシャットダウンされません。 これは、タイムアウト時間内にデータベースに新規接続できないようにします。これによ り、他のユーザーは新しい作業が始められないので、現在のユーザーは作業を完了するこ とができます。 たとえば、SYSDBA は、日常の保守業務のため、1 日の終わりに(今から 5 時間後)デー タベース order.ib をシャットダウンする必要があるとします。マーケティング部門は現在 重要なセールスレポートを作成するために、そのデータベースを使用しています。 7-32 操 作 ガ イ ド データベースのシャットダウンと再起動 このような場合、SYSDBA は次のようなパラメータを使って orders.ib をシャットダウンす ることになります。 • 新しい接続を拒否する • タイムアウトを 300 分(5 時間)にする このようにパラメータを指定すると、データベースの新規接続が拒否され、5 時間以内にア クティブな接続がなくなった時点でデータベースがシャットダウンされます。 すでにそのデータベースに接続しているユーザーは、セールスレポートの処理を完了でき ますが、新規接続は拒否されます。タイムアウト時間内において、データベース管理者は午 後 6 時までに仕事を終えるようにユーザーに繰り返し同報メッセージを送信します。 すべてのユーザーが接続解除した後、そのデータベースはシャットダウンされます。5 時間 が経過してもすべてのユーザーが接続解除していなければ、データベースはシャットダウ ンされません。シャットダウンは危険なので強制的に行われません。 レポートの作成にはいくつかのトランザクションが必要なので、新しいトランザクション を拒否するのは適切ではありません。また必要なトランザクションを完了する前に、ある ユーザーはデータベースを接続解除するかもしれません。ユーザーの作業に支障が出るた め、強制的なシャットダウンすることも適切ではありません。 [ 待機中は新しいトランザクションは拒否されます ] このオプションによって、既存のトランザクションは、正常に完了することができます。ト ランザクション処理が完了したら、IBConsole はデータベースをシャットダウンします。新 しいトランザクションを拒否しているので、新しいデータベース接続は拒否されます。タイ ムアウトになるところで、まだアクティブなトランザクションがある場合は、データベー スはシャットダウンされません。 これは、データベースに対する新規トランザクションの起動を拒否する、最も制限が強い シャットダウンです。このオプションは、新規接続も拒否します。 SYSDBA は、データベース orders.ib のシャットダウンを必要とする重要な操作の必要があ ると仮定してください。このデータベースは、たくさんのカスタマーサービス担当者によっ て、新しい注文の入力や既存の注文を問い合わせるために 1 日中使用されます。 午後 5 時に、SYSDBA は次のパラメータを使用して orders.ib のシャットダウンを設定しま す。 • 新しいトランザクションを拒否する • タイムアウト時間を 60 分にする このようにパラメータを指定すると、次の 1 時間は新しいトランザクションが拒否されま す。この時間内にユーザーはデータベースにアクセスし、現在のトランザクションを完了す ることができます。ユーザーがデータベースから接続解除するまでシャットダウンを待て ないので、単に新しい接続を拒否するだけでは不十分です。 この間に SYSDBA は、午後 6 時にシャットダウンすることをユーザーに警告する同報メッ セージを繰り返し送信します。すべてのトランザクションの完了後、データベースはシャッ トダウンされます。 第 7 章 データベースの環境設定と保守 7-33 limbo トランザクション 1 時間後、まだアクティブなトランザクションが残っている場合、IBConsole はシャット ダウンをキャンセルします。SYSDBA はデータベースの保守を行う必要があり、シャット ダウンの警告を送信したので、強制的にシャットダウンを行うしかありません。 [ タイムアウト後に強制的にシャットダウンされます ] このオプションでは、データベースのトランザクションや接続に何の制約もありません。 データベースへの操作や接続がなくなると同時に、IBConsole はデータベースをシャット ダウンします。タイムアウトになるところで、まだアクティブな接続がある場合は、 IBConsole はコミットされていないトランザクションをロールバックし、すべてのユー ザーを接続解除して、データベースをシャットダウンします。 緊急なデータベース保守のためにデータベースをシャットダウンする必要があり、さらに アクティブなトランザクションが残っている場合に、SYSDBA は強制的にシャットダウン を実行できます。シャットダウンの同報メッセージをユーザーに送った場合にのみ実行で きます。繰り返されるメッセージにユーザーが注意を払わずに、アクティブのままであった 場合、その作業はロールバックされます。 このオプションは、タイムアウト時間内での新規トランザクションや接続を拒否しません。 このタイムアウト時間内にデータベースへの接続がなくなれば、IBConsole はそのデータ ベースをシャットダウンします。 重要 強制的にデータベースのシャットダウンを行うと、正常なデータベース操作に支障が出る ことがあります。したがって、事前にユーザーに該当する同報通知をした後で使用するよ うにしてください。 データベースの再起動 データベースをシャットダウンしたときは、ユーザーがデータベースにアクセスする前に データベースを再起動(オンラインに戻す)しなければなりません。 データベースを再起動するには、ツリーペインから以前にシャットダウンしたデータベー スを選択して[データベース|保守|データベースの再起動]を選択するか、ワークペイ ンで[データベースの再起動]をダブルクリックします。現在選択されているデータベース がすぐにオンラインに戻されます。 limbo トランザクション 複数のデータベースにまたがるトランザクションをコミットするとき、InterBase は自動的 に 2 相コミットを実行します。2 相コミットは、トランザクションがすべてのデータベース を更新するか、または 1 つも更新しないかのどちらかであることを保証します。データベー スの一部だけを更新することはできません。 メモ BDE(Borland Database Engine)の現在のバージョンは 5 で、2 相コミットまたは InterBase の分散トランザクション機能を実行できません。したがって、BDE を使用しているアプリ ケーションでは、limbo トランザクションを生成できません。 7-34 操 作 ガ イ ド limbo トランザクション 2 相コミットの第 1 フェーズで、InterBase は各サブトランザクションによる変更を書き込 むことによって、それぞれのデータベースをトランザクションのコミットのために準備し ます。サブトランザクションはマルチデータベーストランザクションの一部であり、データ ベースを 1 つだけ含みます。第 2 フェーズでは、各サブトランザクションを準備された順 番にコミット済みというマークを付けます。 2 相コミットが第 2 フェーズで失敗した場合、あるサブトランザクションはコミットされ、 他はコミットされなかったりします。ネットワークの中断またはディスククラッシュに よって、1 つ以上のデータベースが使用できなくなった場合、2 相コミットは失敗に終わり ます。2 相コミットの失敗は、コミットかロールバックかをサーバーが判断できないトラン ザクション、つまり limbo トランザクションの原因となります。 データベース内の一部のレコードが、limbo 状態のトランザクションと関連付けられてい るためにアクセスできなくなる場合があります。これを修正するには、IBConsole を使って トランザクションをリカバリする必要があります。limbo トランザクションの回復とは、コ ミットするか、またはロールバックするという意味です。トランザクションのリカバリには gfix を使用します。 トランザクションのリカバリ 次のいずれかの方法でトランザクションをリカバリできます。 • ツリーペインで接続されたデータベースを選択してワークペインで[トランザクション回 復]をダブルクリックするか、 [データベース|保守|トランザクション回復]を選択しま す。 • ツリーペインで接続されたデータベースを右クリックして、コンテキストメニューから[保 守|トランザクション回復]を選択します。 [トランザクション回復]ダイアログには、 [トランザクション]と[詳細情報]の 2 つのタ ブがあります。[トランザクション]タブにはリカバリ(コミットまたはロールバック)可 能な limbo トランザクションのリストが表示されます。推奨リカバリ動作を検索して、選 択した limbo トランザクションに対して実行する現在のアクションを設定することもでき ます。[詳細情報]タブには、選択したトランザクションの詳細情報が表示されます。 [トランザクション]タブ データベースで中断中のすべてのトランザクションが[トランザクション]タブのテキス ト領域に表示されます。このようなトランザクションに対してロールバック、コミット、ま たは 2 相コミットを実行できます。 第 7 章 データベースの環境設定と保守 7-35 limbo トランザクション 図 7.8 トランザクションリカバリ:limbo トランザクション limbo トランザクションをリカバリするには 1 テーブルで limbo トランザクションを選択します。 2 [接続情報]テキストフィールドは、マルチデータベーストランザクションならば、選 択トランザクションのデータベースファイルのカレントパスを表示します。必要なら ば、カレントパスを上書きして、ターゲットのデータベースパスを変更できます。 データベースのパス情報は、クライアントアプリケーションがコミットを行ったときに 保存されたものです。そのマシンからのパスとネットワークプロトコルは、IBConsole を実行しているクライアントからはうまくいかない可能性があります。すべてのトラン ザクションのロールバックやコミットの前に、含まれているデータベースすべてのパス が正しいことを確認します。 カレントパスを入力する場合、サーバー名とコミュニケーションプロトコルを示すセパ レータを付けます。TCP/IP を使用する場合は、サーバーとディレクトリパスをコロン (:)で分離します。NetBEUI を使用する場合は、2 つの円記号(¥¥)または 2 つのスラッ シュ(//)をサーバー名の前に付けます。また、サーバー名とディレクトリパスを円記 号またはスラッシュで分離します。 3 トランザクションのリカバリ処理を続行する場合は、修復オプションを選択して[修 復]をクリックします。それ以外の場合には[キャンセル]をクリックします。推奨対 処法を決定するには、トランザクションをクリックして[詳細情報]タブを選択しま す。トランザクションリカバリの推奨については、次の「[詳細情報]タブ」を参照して ください。 [詳細情報]タブ [詳細情報]タブは、ホストサーバー、リモートサーバー、データベースパス、推奨対処法 (コミットまたはロールバック)を表示します。トランザクションのリカバリ処理を続行す る場合は、修復オプションを選択して[修復]をクリックします。それ以外の場合には[キャ ンセル]をクリックします。 7-36 操 作 ガ イ ド 管理ログの表示 図 7.9 トランザクションリカバリ: 詳細 管理ログの表示 IBConsole は、管理ログを標準テキスト表示ウィンドウである[管理ログ]ダイアログに 表示します。このダイアログは、次のいずれかの方法で表示できます。 • ツリーペインで接続データベースまたはデータベース階層で任意のブランチを選択して、 [サーバー|サーバーログファイルの参照]を選択します。 • ツリーペインで任意のサーバーを右クリックして、コンテキストメニューから[サーバー ログファイルの参照]を選択します。 • 任意のサーバーで、ツリーペインから[サーバーログ]を選択し、ワークペインで[サー バーログファイルの参照]をダブルクリックします。 図 7.10[管理ログ]ダイアログ 第 7 章 データベースの環境設定と保守 7-37 gfix コマンドラインツール 標準テキスト表示ウィンドウで特定のテキストを検索して、そのテキストをファイルに保 存したり印刷することができます。標準テキスト表示ウィンドウの使い方については、3-7 ページの「標準テキスト表示ウィンドウ」を参照してください。 gfix コマンドラインツール gfix ツールを使用して、次のようなさまざまなデータベース保守作業を実行できます。 • データベースをシャットダウンする • データベースモードを読み取り専用と読み取り / 書き込みで変更する • データベースのダイアレクトを変更する • データベースレベルでキャッシュサイズを設定する • limbo トランザクションをコミットする • データベースと小さなデータを修復する • データベースをスイープする • limbo トランザクションの表示、コミット、リカバリを行う gfix を実行するには、SYSDBA またはデータベースの所有者のいずれかとして接続しなけ ればなりません。これらの処理の大半は、IBConsole でも実行できます。 構文 オプション gfix [options] db_name 次の表のオプション欄では、ブラケット([ ])の外側の文字だけが必須です。その他の文 字を追加して完全なオプション名を指定することもできます。同じような機能のオプショ ンを識別するために、オプションと関係ある操作をタスク欄に示します。 表 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 と一緒に使用されます。これは思い 切った解決方法なので注意して使用してください。 7-38 操 作 ガ イ ド gfix コマンドラインツール 表 7.4 gfix のオプション ( 続き ) オプション タスク 説明 -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} アクセスモードの 設定 • データベースのモードを読み取り専用または読 -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 のいずれかと一緒に指定し なければなりません。 第 7 章 データベースの環境設定と保守 7-39 表 7.4 gfix のオプション ( 続き ) オプション タスク 説明 -sq[l_dialect] n Database dialect データベースのダイアレクトを n に変更します。 • ダイアレクト 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 リモートアクセス リモートデータベースをアクセスする前にユーザー 名をチェックします。 -v[alidate] データ修復 割り当てられているが、データ構造に実際に使用さ れていないページを検索して解放します。破損デー タベースをレポートします。 -w[rite] {sync | async} データベース 強制的(同期)書き込みを有効または無効にします。 writes sync は強制的書き込みを使用可能に、async はバッ ファ書き込みを使用可能にします。 -z 例 gfix と InterBase エンジンのバージョンを表示します。 次の例は、customer.ib データベースのダイアレクトを 3 に変更します。 gfix -sql 3 customer.ib 次の例は、customer.ib データベースを読み取り専用モードに変更します。 gfix -mo read-only customer.ib 7-40 操 作 ガ イ ド gfix のエラーメッセージ 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. データベースに、gfix が 1 セッションで扱える以上の limbo トランザクションが含まれている。いくつかの limbo トラン (limbo トランザクションが多すぎる。再 実行してください) Numeric value required ザクションをコミットまたはロールバックして、再実行し てください。 (数値が必要) -housekeeping オプションには、スイープごとにトランザク ション数を示す 1 つの負でない整数の引数が必要。 Please retry、specifying <string> (<string> を指定して再試行) ファイル名と 1 つ以上のオプションを指定しなければなら ない。 Transaction number or "all" required (トランザ クション番号または all の指定が必要) 必要な引数を指定せずに -commit、-rollback、または two_phase を指定した。 -mode read_only or read_write(-mode -mode オプションに、パラメータとして read_only または read_write 以外のものが指定された。 read_only または read_write) "read_only" or "read_write" -mode オプションには、read_only または required(read_only または read_write が 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 InterBase サーバーをインストールします。 3 新しいサーバーをインストールしたら、データベースを復元します。 最新バージョンの InterBase への移行について詳細は、付録 A 「InterBase の移行」を参 照してください。 gbak コマンドを使用したバックアップと復元 gbak コマンドライン ツールを使用してデータベースのバックアップと復元を実行できま す。異なるオプションを使用すると異なる結果が得られます。IBConsole を使用してバック アップや復元を実行する方法について詳細は、この章の後にある 「IBConsole コマンド を使用したバックアップと復元」を参照してください。 メモ gbak コマンドを使用してバックアップ ファイルを暗号化したり、 暗号化されたバックアッ プ ファイルを復元する方法の詳細については、 『データ定義ガイド』の第 13 章「データの 暗号化」を参照してください。 gbak 使用のための一般的ガイドライン データベースのバックアップ時には、次の事項に注意してください。 • -service オプションが指定されていない限り、gbak はデータベースがあるサーバーでは なく、動作しているマシンの現在のディレクトリにバックアップファイルを書き込みます。 バックアップファイルの位置を指定する場合、gbak が実行されるマシンに関連した場所に なります。ローカルマシンまたはそのマシンにマッピングされているドライブに対してだ け、バックアップファイルを書き込むことができます。-service スイッチはこの動作を変 えるので注意してください。 (8-17 ページの「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 オンライン ダンプは、gfix _mode read_write コマンドを使用して読み書き可能なデータ ベースに変換できますが、適切に使用する必要があります。現在の場所がデータベース処 理のために不便な場合は、これらのダンプ ファイルに対してオンライン ダンプを実行し 第 8 章 データベースのバックアップと復元 8-9 gbak コマンドを使用したバックアップと復元 て、ローカルまたはリモートの別の場所にコピーすることができます。これは、一般的な コピー メカニズムです。これによって、マルチファイル データベースがコピーされ、その 内部のセカンダリ ファイル名のリンクは、コピー先用に自動的に更新されます。 オンライン ダンプはデータベースなので、データベースの検証(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* 20000 データベース パラメータ ブロックの文字列を isc_attach_database() API に渡すことによっ て、オンライン ダンプを要求できます。 8-10 操 作 ガ イ ド gbak コマンドを使用したバックアップと復元 インクリメンタル バックアップで使用されるデータベース パラメータ ブロック データベース パラメータ ブロック(DPB)を使用した、インクリメンタル バックアップの サポートが、gbak ユーティリティに追加されました。次の表は、この機能にアクセスする ために使われる DPB の名前と値を一覧表示したものです。ここでも、『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 オンライン ダンプ ファイルのページ数 (省略可能) isc_dpb_archive_database データベースをアーカイブにバック アップします。コマンドライン gbak -archive_database に相当します。 isc_dpb_archive_jouirnals ジャーナルをアーカイブにバックアップ します。コマンドライン gbak -archive_journals に相当します。 isc_dpb_archive_recover データベースをアーカイブから復元しま す。コマンドライン gbak -archive_recover に相当します。 isc_dpb_archive_sweep RDB$JOURNAL_ARCHIVES に含まれ るファイルのうち、指定されたシーケン ス番号より RDB$ARCHIVE_SEQUENCE が小さい ファイルをすべて削除します。コマンド ライン gfix -archive_sweep <n> に相当し ます。 isc_dpb_archive_dumps アーカイブに格納することができるデー タベース ダンプの最大数を構成します。 コマンドライン gfix -archive_dumps <n> に相当します。 長 さ を 表 ダンプ長を す バ イ ト 表すページ 数(1、2、4) 数 オンライン ダンプに成功すると、ダンプ情報ステータスを渡すために、次のような警告ス テータス ベクトルが返ります。 status status status status [0] [1] [2] [3] = = = = isc_arg_gds isc_arg_success isc_arg_warning isc_old_dump_stats 第 8 章 データベースのバックアップと復元 8-11 gbak コマンドを使用したバックアップと復元 status status status status status status status status status [4] [5] [6] [7] [8] [9] [10] [11] [12] = = = = = = = = = 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_" という接頭辞付きのローカル一時ファイルに書き込む場合があり ます。どのデータベース ページも、少なくとも一度は、この一時ファイルに書き込まれる ことになっています。この一時ファイルは、ダンプ(ページ)付録ファイルと呼ばれてい ます。 頻繁に更新される非常に大規模なデータベースの場合は、ページ付録ファイルのサイズも 非常に大きくなります。一時ディレクトリには、このストレージ要求を処理するために十 分なスペースが必要です。スペースがないと、オンライン ダンプに失敗します。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 */ 8-12 操 作 ガ イ ド gbak コマンドを使用したバックアップと復元 /* このデータベースへのアクセス許可を付与します。 */ /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) スイッチは整数の引数を取ります。これは事前割り当てページ数を表しま す。このスイッチは、バックアップにも復元にもコマンドライン オプションとして使用で きます。バックアップの場合は、事前割り当てスイッチを指定すると、バックアップ対象の データベースに指定されている値ではなく、このスイッチの引数がバックアップ ファイル に保存されます。復元の場合は、バックアップ ファイルに保存されている値ではなく、事 前割り当てスイッチの引数が、復元されるデータベースの事前割り当て値に使用されます。 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 第 8 章 データベースのバックアップと復元 8-13 gbak コマンドを使用したバックアップと復元 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 …] 埋め込みユーザー認証バックアップ ファイルから復元する場合: gbak { サーバー上にデータベースを作成して復元サービスを実行するには、USER と PASSWORD のサーバー認証情報が必要です。データベース所有者しか EUA データベースを復元でき ないようにするには、-eua_u[ser] name および -eua_p[assword] text のデータベー ス認証情報が必要です。 表 8.4 gbak を使用したデータベースの復元:オプション 引数 説明 source 復元する記憶装置またはバックアップファイル名。 UNIX では stdin(標準入力、通常はパイプ)から入力を読み取る。 dbfile 復元するデータベースファイルの名前。 size バックアップファイルまたは復元するデータベースファイルの大 きさ。 • 復元するデータベースファイルの許容単位はデータベースペー ジのみ。最小値は 200。 • バックアップファイルのデフォルト単位はバイト。 • バックアップファイルのサイズは、キロバイト、メガバイト、 ギガバイトで指定することも可能。 • 最後のバックアップファイルまたはデータベースファイルのサ イズは指定してはいけない。通常、最後のファイルは必要に応 じて使用可能な領域すべてを使って拡張される。 表 8.5 に、データベースの復元で使用できる gbak のオプションを示します。 8-14 操 作 ガ イ ド gbak コマンドを使用したバックアップと復元 表 8.5 gbak の復元オプション オプション 説明 -c[reate_database] データベースを新しいファイルに復元する。 -bu[ffers] 復元されるデータベースのキャッシュサイズ。 -i[nactive] 復元時にインデックスを無効にする。 -eua_u[ser] name EUA(埋め込みユーザー認証)データベースにアクセスする前 にユーザー名を確認する。 EUA データベースを復元するときには、この -eua オプション の他に、-user と -password のオプションも指定する必要があ る。 EUA スイッチは、対応するオプションと値が同じであれば省略 することができる。ただし、PASSWORD と EUA_PASSWORD を同じにすることは推奨できない。 -eua_p[assword] text EUA(埋め込みユーザー認証)データベースにアクセスする前 にパスワード テキストを確認する。 EUA データベースを復元するときには、この -eua オプション の他に、-user と -password のオプションも指定する必要があ る。 EUA スイッチは、対応するオプションと値が同じであれば省略 することができる。ただし、PASSWORD と EUA_PASSWORD を同じにすることは推奨できない。 -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 章 データベースのバックアップと復元 8-15 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-16 操 作 ガ イ ド 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 章 データベースのバックアップと復元 8-17 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-18 操 作 ガ イ ド 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 章 データベースのバックアップと復元 8-19 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-20 操 作 ガ イ ド 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 章 データベースのバックアップと復元 8-21 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-22 操 作 ガ イ ド 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 章 データベースのバックアップと復元 8-23 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-24 操 作 ガ イ ド IBConsole コマンドを使用したバックアップと復元 図 8.1 [ データベースのバックアップ ] ダイアログ 3 指定したデータベースサーバーが正しいかチェックします。違っている場合は、このダ イアログをキャンセルして正しいサーバーから[データベースのバックアップ]ダイア ログを再度表示します。 4 データベースエイリアスから[データベースのバックアップ]ダイアログを表示した場 合は、自動的に[エイリアス]フィールドが割り当てられます。データベースメニュー から[データベースのバックアップ]ダイアログを表示した場合は、データベースエイ リアスの一覧からエイリアスを選択しなければなりません。 データベースエイリアスは、対応するデータベースファイル名を参照します。そのた め、バックアップするデータベースを指定する際は、エイリアス名だけを指定します。 実際のデータベースファイル名を指定する必要はありません。データベースが複数の ファイルにまたがっている場合、サーバーは各ファイルのヘッダーページを使って追加 ファイルの位置を特定します。これにより、エイリアスファイル名に基づいてデータ ベース全体をバックアップできます。 5 [サーバー]ドロップダウンリストの登録サーバー一覧から転送先サーバーを選択しま す。 6 転送先サーバーを選択すると、バックアップファイルエイリアスのリストを[エイリア ス]ドロップダウンリストで使用できるようになります。既存のバックアップファイル を上書きする場合、ドロップダウンリストから適切なファイルを選択します。新しい バックアップファイルを作成する場合は、[エイリアス]フィールドに新しいエイリア ス名を入力します。 7 [ ファイル名 ] にバックアップを保存するファイル名を指定します。 ファイルを現在の作業ディレクトリに保存しない場合は、ファイル名を入力する際に、 ファイルパスを含めることに注意してください。 第 8 章 データベースのバックアップと復元 8-25 IBConsole コマンドを使用したバックアップと復元 既存のバックアップエイリアスを選択した場合は、そのエイリアスに対応するすべての ファイル名とファイルサイズがテーブルに表示されます。このテーブル内の情報は変更 できます。別のファイルをバックアップファイル一覧に追加するには、テーブルの最後 に新しいファイル名を入力します。バックアップファイル一覧からファイルを削除する には、テーブル内の値を削除します。 8 バックアップオプションを指定するには、有効な値を入力するか、オプションの値をク リックしてドロップダウンリストから新しい値を選択するか、オプションの値をダブル クリックして値をリスト内の次の値に変更します。詳細は、次の節 「IBConsole の バックアップ オプションについて」を参照してください。 9 [OK]をクリックして指定したバックアップを開始します。 メモ データベースファイルとバックアップファイルには、オペレーティングシステムで有効な 任意の名前を付けることができます。ファイル拡張子の .gdb と .gbk は InterBase での規約 にすぎません。WindowsME、WindowsXP、および Windows 2003 Server では、gdb 拡 張子を持つファイルが変更されるたびに自動的にバックアップされるため、InterBase の データベースファイルには ib 拡張子、バックアップファイルには ibk 拡張子の使用をお勧 めします。 バックアップファイルには現在のバージョンのデータだけが含まれ、データ保存のための オーバーヘッドが少なくなるため、通常はデータベースよりスペースを消費しません。ま た、バックアップファイルにはインデックスデータ構造体は含まれず、インデックスの定 義だけが含まれます。 既存のバックアップファイルを指定した場合、IBConsole はそれを上書きします。上書きを 防ぐには、重複しない名前を指定してください。 IBConsole のバックアップ オプションについて バックアップオプションは、 [データベースのバックアップ]ダイアログの右側にあります。 値を入力するか、オプションの値をクリックしてドロップダウンリストから新しい値を選 択するか、またはオプションの値をダブルクリックして値をリスト内の次の値にして、バッ クアップオプションを指定できます。 8-26 操 作 ガ イ ド IBConsole コマンドを使用したバックアップと復元 図 8.2 データベースバックアップオプション 形式 オプションの値は、[移行可能]または[移行不可能]です。 バックアップを実行したマシンから別のオペレーティングシステムのマシンにデータベー スを移動するには、[形式]オプションを[移行可能]に設定します。このオプションを使 用すると、データが汎用形式で出力され、InterBase をサポートするすべてのマシンに移動 できます。 重要 データベースを別の場所にコピーしないでください。 データベースをバックアップしてか ら、新しい場所に復元してください。 メタデータのみ オプションの値は、[True]または[False]です。 データベースをバックアップするときに、データを除いて、メタデータだけを保存するこ とができます。これは、次の目的のために行います。 • 変更される前のメタデータのレコードを保存する。 • データベースの空のコピーを作成する。 メタデータは同じですが、別のデータを入力でき ます。 メタデータだけをバックアップするには[メタデータのみ]オプションを[True]に設定 します。 ヒント isql を使用して、データベースのメタデータを抽出することもできます。isql は、SQL コー ドを含む SQL データ定義テキストファイルを生成します。IBConsole の[メタデータの み]のバックアップでは、メタデータだけを含むバックアップファイルが作成されます。 この機能は、gbak の -metadata オプションに相当します。 ガベージ コレクション オプションの値は、[True]または[False]です。 第 8 章 データベースのバックアップと復元 8-27 IBConsole コマンドを使用したバックアップと復元 デフォルトでは、IBConsole はバックアップ中にガベージ コレクションを実行します。バッ クアップ中にガベージ コレクションを行わないようにするには、[ ガベージ コレクション ] オプション値を [False] に設定します。 ガベージ コレクションにより、旧バージョンのデータ レコードによって使用されている領 域に印が付けられて、再利用のために解放されます。一般には、IBConsole がバックアッ プ中にガベージ コレクションを実行するようにします。 ヒント バックアップ処理中のガベージ コレクションを無効にすると、バックアップのパフォーマ ンスが向上します。ガベージ コレクションが必要である場合は、gfix を使用して別のス イープ操作を実行します。さらに、旧バージョンのレコードにデータ損傷があり、バック アップ中にこれらのレコードにアクセスすることを避ける場合には、ガベージ コレクショ ンを行わないようにします。 この機能は、gbak の -garbage_collect オプションに相当します。 Limbo でのトランザクション オプションの値は、[プロセス]または[無視]です。 バックアップで limbo トランザクションを無視するには、 [Limbo でのトランザクション] オプションを[無視]に設定します。 IBConsole がバックアップで limbo トランザクションを無視すると、limbo トランザク ションで作成されたすべてのレコードが無視され、最後にコミットされたレコードのバー ジョンが検索され、そのバージョンがバックアップされます。 limbo トランザクションは 2 相コミットが失敗したときに作成されます。システム障害や 単一データベーストランザクションが準備されたときにも作成されます。 limbo トランザクションを含んでいるデータベースをバックアップする前に、データベー ス保守ウィンドウの[データベース|保守|トランザクション回復]を選択して、トラン ザクションのリカバリを行ってください。詳細は、7-35 ページの「トランザクションのリ カバリ」を参照してください。 この機能は、gbak の -limbo オプションに相当します。 チェックサム メモ パフォーマンス上の理由から、本来のチェックサムは ODS 8 以前の InterBase でのみサ ポートされます。ODS 9 以降では、チェックサム値として常に文字列 “12345” が生成され ます。これにより、旧バージョンとの互換性が保たれます。 オプションの値は、[プロセス]または[無視]です。 バックアップでチェックサムを無視するには、 [チェックサム]オプションを[無視]に設 定します。 チェックサムは、ページごとにデータを解析してデータの整合性を検査するものです。不良 チェックサムとは、システム障害などでデータページがランダムに上書きされている状態 を言います。 チェックサムエラーは、データに損傷があることを示します。不良チェックサムが検索さ れた場合、通常はデータベースのバックアップは行われません。次回データベースを復元す るときに、データを調べてください。 8-28 操 作 ガ イ ド IBConsole コマンドを使用したバックアップと復元 この機能は、gbak の -ignore オプションに相当します。 テーブルへの変換 外部ファイルを内部テーブルに変換するには、 [テーブルへの変換]オプションを[True] に設定します。 この機能は、gbak の -convert オプションに相当します。 詳細出力 オプションの値は、[なし] 、[画面へ]、[ファイルへ]です。 バックアップ処理を動作中に監視するには、 [詳細出力]オプション値を[画面へ]に設定 します。これを選択すると、標準テキスト表示ウィンドウが開き、バックアップ処理動作中 にステータスメッセージが表示されます。次に例を示します。 図 8.3 [データベースのバックアップ]の処理経過出力 標準テキスト表示ウィンドウで特定のテキストを検索して、そのテキストをファイルに保 存したり印刷することができます。標準テキスト表示ウィンドウの使い方については、3-7 ページの「標準テキスト表示ウィンドウ」を参照してください。 この機能は、gbak の -verbose オプションに相当します。 別のオペレーティングシステムで動作するサーバーへのデー タベースの転送 1 [データベースのバックアップ]ダイアログの[形式]オプションを[移行可能]に設 定します。 第 8 章 データベースのバックアップと復元 8-29 IBConsole コマンドを使用したバックアップと復元 2 3 データベースをバックアップします。 4 転送先のマシンで、バックアップファイルを復元します。テープなどのリムーバブルの 媒体から復元する場合は、バックアップファイル名のかわりにデバイス名を指定しま す。 リムーバブルの媒体へバックアップする場合は、ステップ 4 に進んでください。ディス クにバックアップファイルを作成した場合、オペレーティングシステムのコマンドを 使ってファイルをテープなどのリムーバブルの媒体にコピーします。次に、媒体の内容 を別のマシンに読み込むか、ネットワークを介して別のマシンにコピーします。 IBConsole を使用したインクリメンタル バックアップの実 行 インクリメンタル バックアップは最後にフル バックアップを実行したあとのデータベー スにコミットされたすべての変更をコピーします。IBConsole から [インクリメンタル・バッ クアップ ] を最初に選択したときは、InterBase はフル物理バックアップ(オンライン ダン プ)を実行します。最初のフル ダンプを実行したあとは、以降の各バックアップはインク リメンタル バックアップを実行し、最後のフル バックアップの後にコミットされたすべて のトランザクションをコピーし保存します。 IBConsole を使用してインクリメンタル バックアップを開始するには、次の手順を実行しま す。 1 ツリー ペインで、インクリメンタル バックアップを実行するデータベースを右クリッ クして、コンテキスト メニューから [ バックアップ / 復元 ] を選択します。 2 コンテキスト メニューを展開してバックアップと復元オプションを表示し、[ インクリ メンタル・バックアップ ] を選択します。[ インクリメンタル・バックアップ ] ダイアロ グが 図 8.4 のように表示されます。 図 8.4 インクリメンタル バックアップの指定 3 [ ファイル名 ] にバックアップを格納するファイル名を入力します。 8-30 操 作 ガ イ ド IBConsole でのデータベースの復元 • [ 複数のファイルを使用する ] チェックボックスをオンにすることによって、複数の ファイルにバックアップすることもできます。ファイル名を入力するとき、ファイ ル パスが含まれていることを確認します。ただし現在の作業ディレクトリにファイ ルを書き込む場合を除きます。 4 以前のインクリメンタル バックアップに上書きするには、[ 上書き ] の値を True に変 更します。インクリメンタル バックアップに上書きしたときに発生する問題について詳 細は、「インクリメンタル バックアップの上書き」を参照してください。 5 [OK] を選択してバックアップを開始します。 IBConsole でのデータベースの復元 [データベースの復元]ダイアログでデータベースを復元します。このダイアログを表示す るには、ツリーペインに表示されている指定可能なサーバーのリストからサーバーを選択 して、次に示すいずれかの方法を実行します。 • [Databases]階層からデータベースを選択して、[データベース|保守|バックアップ / 復 元|復元]を選択します。 • [Backup]階層からバックアップエイリアス名をダブルクリックします。 • [Backup]または[Backup]階層のバックアップエイリアス名を右クリックして、コンテ キストメニューで[復元]を選択します。 • [Backup]からバックアップエイリアス名を選択して、ワークペインで[復元]をクリッ クします。 [データベースの復元]ダイアログが表示されます。 図 8.5 [データベースの復元]ダイアログ 重要 現在使用中のデータベースを置き換えるようなデータベースの復元はしないでください。 第 8 章 データベースのバックアップと復元 8-31 IBConsole でのデータベースの復元 データベースを復元するには: 1 [バックアップファイルのサーバー]が指定したサーバーかどうかをチェックします。 違っている場合は、このダイアログをキャンセルして正しいサーバーから[データベー スの復元]ダイアログを再度表示します。 2 バックアップエイリアスで[データベースの復元]ダイアログを表示すると、自動的に [エイリアス]フィールドが割り当てられます。[Backup]で[データベースの復元] ダイアログを表示した場合は、バックアップエイリアスの一覧からエイリアスを選択し なければなりません。 メモ バックアップエイリアスは、対応するバックアップファイル名を参照します。そ のため、復元するバックアップを指定する際は、エイリアス名だけを指定します。実際 のバックアップファイル名を指定する必要はありません。バックアップが複数のファイ ルにまたがっている場合、サーバーは各ファイルのヘッダーページを使って追加ファイ ルの位置を特定します。これにより、エイリアスファイル名に基づいてバックアップ全 体を復元できます。 3 バックアップファイルエイリアスを選択すると、[バックアップファイル]テーブルに、 対応するバックアップファイルが表示されます。バックアップファイルエイリアスを指 定しない場合は、バックアップファイル名を手動で入力するか、[エイリアス]ドロッ プダウンリストから[ファイル]を選択してファイルを指定します。ファイル名を入力 する場合は、フルパスを指定します。復元に関連するすべてのファイル名を指定する必 要があります。 4 [データベースのサーバー]ドロップダウンリストの登録サーバー一覧から転送先サー バーを選択します。 5 既存のデータベースに復元する場合は、そのエイリアスを[エイリアス]ドロップダウ ンリストから選択します。新しいデータベースに復元する場合は、新しいエイリアス名 を[エイリアス]フィールドに入力します。 6 [ ファイル名 ] に、復元するデータベースのファイル名を指定します。現在の作業ディ レクトリ以外のファイルを指定する場合は、フルパスを指定します。 システムリソースをより柔軟に割り当てられるように、複数のディスクにデータベース を分散し、複数のファイルにデータベースを復元することが考えられます。 既存のデータベースエイリアスを選択すると、[データベース]テーブルは対応するす べてのファイル名とページ数を表示します。このテーブル内のすべての情報は変更でき ます。テーブルの最後に新しいファイル名を入力して、別のファイルをデータベース ファイル一覧に追加することもできます。テーブル内の値を削除すると、ファイル一覧 からファイルを削除できます。 メモ:データベースをネットワークファイルシステム(マップドライブ)に復元するこ とはできません。 7 復元のオプションを指定するには、有効な値を入力するか、オプションの値をクリック してドロップダウンリストから新しい値を選択するか、オプションの値をダブルクリッ クして値をリスト内の次の値に変更します。詳細は、次の節 「復元オプション」を参照 してください。 8 [OK]をクリックして復元を開始します。 8-32 操 作 ガ イ ド 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 章 データベースのバックアップと復元 8-33 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-34 操 作 ガ イ ド IBConsole でのデータベースの復元 インデックスの非アクティブ化 オプションの値は、[True]または[False]です。 通常、データベースが復元されるときにインデックスは再作成されます。データベースが バックアップされるときに、インデックスに重複した値が含まれていた場合、復元は失敗 に終わります。インデックスが一時的に無効にされた場合(たとえば、多くのレコードを挿 入したり、インデックスを再調整した場合)、重複した値がデータベースに取り込まれるこ とがあります。 このような場合に復元を成功させるには、 [インデックスの非アクティブ化]オプションを [True]に設定します。これによってインデックスを無効にし、インデックスを再作成でき ないようにします。重複しているインデックス値を削除し、isql で ALTER INDEX を使っ てインデックスを再度有効にします。 一意なインデックスは、ALTER INDEX 文を使ってアクティブにすることはできません。 一意なインデックスは、いったん削除してから再作成しなければなりません。インデック スの有効化 / 無効化の詳細は、『言語リファレンス』を参照してください。 ヒント [インデックスの非アクティブ化]オプションは、データベースをより早くオンラインに切 り替えるときにも役立ちます。インデックスが再作成されるまで、データアクセスは遅くな りますが、データベースは使用できます。データベースの復元後、インデックスが有効にな るまでの間もデータベースにアクセスできます。 この機能は、gbak の -inactive オプションに相当します。 妥当性条件 オプションの値は、[復元]または[無視]です。 データがすでに入力されているデータベースで制約を再定義した場合、データが制約を満 たさなくなっていることがあります。これは、データベースを復元するときに無効データの エラーが出るまで発見できない場合があります。 重要 制約を再定義する前にメタデータを必ずコピーしてください。たとえば、isql を使ってメ タデータを抽出できます。 無効データを含んでいるデータベースを復元するには、 [妥当性条件]オプションを[無視] に設定します。このオプションは、メタデータから制約を削除します。データベースが復元 された後、新しい整合性制約にしたがってそのデータを正しく変更します。そして、削除さ れた条件を元に戻します。 このオプションは、データベースを復元した後で制約を再定義する場合にも使用できます。 制約を再定義する場合は、その後すべてのデータをテストしてください。 この機能は、gbak の -no_validity オプションに相当します。 全スペースの使用 オプションの値、は [True] または [False] です。 各データ ページで 100 % の充填率でデータベースを復元するには、[ 全スペースの使用 ] に [True] を設定します。デフォルトでは、UPDATE や DELETE で旧バージョンを格納す るためにデータ ページで各行に対して領域が確保されています。圧縮行のサイズに従っ て、比率は任意のパーセンテージに変換されます。 第 8 章 データベースのバックアップと復元 8-35 IBConsole でのデータベースの復元 この機能は、-use_all_space オプションを gbak で指定した場合に対応します。 詳細出力 オプションの値は、[なし] 、[画面へ]、[ファイルへ]です。 復元処理を動作中に監視するには、 [詳細出力]オプションを[画面へ]に設定します。こ れを選択すると、標準テキスト表示ウィンドウが開き、復元処理動作中にステータスメッ セージが表示されます。次に例を示します。 図 8.7 [データベースの復元]の処理経過の出力 標準テキスト表示ウィンドウで特定のテキストを検索して、そのテキストをファイルに保 存したり印刷することができます。標準テキスト表示ウィンドウの使い方については、3-7 ページの「標準テキスト表示ウィンドウ」を参照してください。 この機能は、gbak の -verbose オプションに相当します。 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-6 ページ の「ジャーナルの切り替え間隔を決定するためのヒント」 を参照してください。 CHECKPOINT LENGTH この句では、チェックポイントが発生するまでにジャー 500 ナル ファイルに書き込み可能なページ数を指定します。 チェックポイントの長さの計算方法のヒントについて は、9-6 ページの「ジャーナルの切り替え間隔を決定する ためのヒント」を参照してください。 CHECKPOINT INTERVAL データベースのチェックポイントの間隔を秒数で指定し ます。チェックポイントの間隔では、サーバー クラッ シュ後に復旧するのにかかる時間を決定します。 0 メモ:CHECKPOINT LENGTH と CHECKPOINT INTERVAL の両方を指定した場合は、この 2 つのうち の先に発生したイベントによって、データベースの チェックポイントが開始されます。チェックポイントの 間隔の計算方法のヒントについては 9-6 ページの 「チェックポイントの間隔を計算するためのヒント」を 参照してください。 PAGE SIZE 9-4 操 作 ガ イ ド ジャーナル ページのサイズをバイト数で指定します。 データベース ペー ジャーナル ページ サイズは、少なくともデータベース ジ サイズの 2 倍 ページ サイズの 2 倍は必要です。2 倍より小さいジャー ナル ページ サイズを指定した場合は、ジャーナル ページ サイズがデータベース ページ サイズの 2 倍まで切り上 げられて、警告が返されます。ジャーナル ページ サイズ を 2 のべき乗にする必要はありません。 ジャーナル機能の有効化とジャーナル ファイルの作成 表 9.1 CREATE JOURNAL のオプション オプション 説明 デフォルト値 PAGE CACHE メモリにキャッシャが作成されるジャーナル ページの数 を指定します。この数値は、キャッシュ ライターが他の バッファに書き込むときに、ワーカー スレッドがバッ ファに書き込めるように十分大きい必要があります。数 値が小さすぎる場合は、ワーカー スレッドは待機し、パ フォーマンスが低下します。 100 バッファ [NO] TIMESTAMP NAME ベースのジャーナル ファイル名に、ファイル作成時のタ イムスタンプを付加するかどうかを指定します。 オン 使用すると、ベースのジャーナル ファイル名に、次の形 式のタイムスタンプが付加されます。 YYYY_MM_DDTHH_MM_SSZ.sequence_number.jo urnal [NO] PREALLOCATE ジャーナル ファイル用に事前に割り当てるディスク領域 の容量を指定します。PREALLOCATE 句の使用の詳細 については、9-5 ページの「事前割り当てジャーナル領域 について」を参照してください。 なし CREATE JOURNAL 文を実行すると、その後のデータベースへの書き込み操作は、すべて 非同期に実行されます。ジャーナル ファイルの I/O は常に非同期で、これを変更できませ ん。すべてのトランザクションの変更は、トランザクションがコミットされる前に、永続ス トレージに安全に記録されます。これにより、トランザクションの ACID プロパティ(アト ミック性(Atomicity)、一貫性(Consistency)、独立性(Isolation)、および永続性(Durability) に対するデータベース業界標準)が保証されます。 データベース書き込みに非同期の I/O を使用することによって、オペレーティング システ ムは、ファイル I/O を最適化できます。たとえば、連続したページを一緒に書き込む方法 や、連続したページを不連続なページ バッファに書き込む Scatter/Gather 技術などが使用で きます。ジャーナル ファイルの I/O は、InterBase の緻密な書き込み戦略を使用して実行され ます。このため、データベース ページの変更がジャーナルに保存された後、そのデータベー ス ページを任意の順序でデータベースに書き戻すことができます。 データベース チェックポイント処理中に、非同期にバッファされていたすべてのデータ ベース ページ書き込みは、チェックポイント完了の合図が来る前に、ディスクにフラッシュ されます。データベース チェックポイントが完了する前にフラッシュ処理が必要ない、 データベースへの同期書き込みを再び有効にできます。ただし、これを実行すると、パ フォーマンスが低下します。 事前割り当てジャーナル領域について 前に示したとおり、パフォーマンスを最大にするには、専用ハード ドライブにジャーナル ファイルを配置する必要があります。専用ドライブに配置されていない場合は、ドライブ にある他のファイルにアクセスすると、ディスク ヘッドがジャーナル ファイルから移動 します。これにより新しいページを書き込む前に、ジャーナル ファイルの位置にシークで 戻る必要があります。さらに、ジャーナル ファイルが専用ドライブにある場合でも、 ジャーナル ファイルのサイズが拡大するたびに、オペレーティング システムがディレク トリ情報を更新できるように、ディスク ヘッドがシーク時にジャーナル ファイルから離 第 9 章 ジャーナル機能と障害復旧 9-5 ジャーナル機能の有効化とジャーナル ファイルの作成 れます。常にディスク ヘッドが最新のジャーナル ファイルの位置にあるようにするため に、PREALLOCATE 句を使用できます。PREALLOCATE 句により、通常の操作中に存在でき るジャーナル ファイルの最大数に、CREATE JOURNAL 文の LENGTH 句に指定したジャー ナル ファイルの長さをかけた値に等しい領域を割り当てできます。 ジャーナルが専用ドライブにない場合は、存在可能な最大数のジャーナル ファイルのサイ ズに等しい領域を PREALLOCATE 句で割り当てできます。これにより、ジャーナルに必 要な領域が他のファイルで、消費されないことを保証します。ジャーナル アーカイブ機能 が有効であり、リモート コンピュータにアーカイブを作成する場合は、リモート コン ピュータへの接続が失われ、一定時間、ジャーナル ファイルのアーカイブを作成できない ときに、累積したジャーナル ファイルを保存するのに十分な領域を割り当てます。 ジャーナルの切り替え間隔を決定するためのヒント ジャーナル ファイルの切り替えは時間のかかる処理です。切り替えが頻繁に発生しすぎる 場合は、パフォーマンスが悪化します。ただし、ジャーナル アーカイブ機能を使用してい る場合は、完了したジャーナル ファイルのアーカイブが適切に作成できるように、できる 限り多く、ジャーナル ファイルの切り替えを実行します。これにより、障害によりデータ ベース サーバーが破壊された場合に失われるトランザクション数を最小限に抑えられま す。一番効果的な切り替え間隔を決定するには、処理のバランスを保つことで、最適な解は それぞれにインストールした InterBase で異なります。 次の式を使うと、ユーザーのジャーナル ファイルに対する一番効果的な切り替え間隔の決 定に役 に立 ちます。 CREATE JOURNAL 文の LENGTH 句に計算した数値を入力できま す。これはジャーナル ファイルの最後に到達する時点を指定します。ファイルの最後に到 達したとき、ジャーナル機能は新しいファイルで再開されます。ジャーナル ファイルが完 了(最後に到達)したとき、アーカイブ ディレクトリに保存できます。 間隔(バイト)を決定するには、次の式を使用します。 (ジャーナル ファイルの長さ X ジャーナルのページ サイズ)= 切り替えが発生するま でのバイト数 切り替え間隔を決定するには、次の式のいずれかを使用できます。 (ジャーナル ファイルの長さ X ジャーナルのページ サイズ)/(データベースのページ サイズ X 分あたりの書き込み) = 切り替え間隔(分) 前の式では、指定したジャーナル ファイルの長さに対して、発生する切り替えの頻度を確 認できます。次の式では、指定した切り替え間隔が得られるジャーナルの長さを計算しま す。 (切り替え間隔 X データベースのページ サイズ X 分あたりの書き込み)/ ジャーナルの ページ サイズ = ジャーナル ファイルの長さ チェックポイントの間隔を計算するためのヒント InterBase ではチェックポイントの間隔で、サーバー クラッシュ後に InterBase が復旧するの にかかる時間を決定します。サーバーがクラッシュした場合は、キャッシュにあるすべての 変更は失われます。これは問題ありません。変更はジャーナルに同期して書き込まれている (データベースではなく、ディスクに格納)からです。サーバーを再起動したとき、データ ベース ファイルを最新状態にするため、すべてのジャーナル ファイルを読み込み、ジャー 9-6 操 作 ガ イ ド ジャーナル機能の有効化とジャーナル ファイルの作成 ナルの変更をデータベースにコピーする必要があります。ジャーナル ファイルが多いほ ど、この処理に時間がかかります。頻繁にチェックポイントを実行することは、そのたびに キャッシュにある変更をデータベースに書き込むことです。つまり、ジャーナルに残って いる変更は少なくなります。したがって、必要なジャーナル ファイルは少数で、復旧にか かる時間は少なくなるということです。 次の式を使うと、ユーザーのシステムに対する一番効果的なチェックポイント間隔の決定 に役に立ちます。 (チェックポイントの長さ X ジャーナルのページ サイズ)/(データベースのページ サ イズ X 分あたりの書き込み) = チェックポイント間隔(分) システムで復旧に必要な時間を決定するには、次の式を使用します。 (チェックポイントの長さ X ジャーナルのページ サイズ)/ 1,048,576 = クラッシュ後 に復旧するための最大時間 メモ この式では、クラッシュの復旧中にジャーナル ファイルは 1 MB / 秒 で処理されることを仮 定します。一般に、ジャーナル ファイルは 1 ~ 2 MB / 秒で処理されます。 指定した復旧時間に対するチェックポイントの長さを決定するには、次の式を使用します。 (復旧時間の秒数 X 1,048,576)/ ジャーナルのページ サイズ = チェックポイントの長 さ ジャーナル情報の表示 データベースのジャーナル機能の情報を表示するには、次のコマンドを使用します。 gstat <a_database> -l このスイッチは小文字の L で、数字の 1 ではありません。 IBConsole を使用したジャーナル機能の起動 IBConsole のダイアログ ボックスには、前の表 9.1 で説明したオプションと同じジャーナ ル機能が用意されています。IBConsole を使用してジャーナル アーカイブは作成できませ ん。 IBConsole からジャーナル機能を起動するには、次の手順を実行します。 1 ツリー ペインで、ジャーナル機能を起動するデータベースを右クリックして、コンテ キスト メニューから [ バックアップ / 復元 ] を選択します。 2 [ バックアップ / 復元 ] メニューのオプションが表示されたら、[ ジャーナルの作成 ] を 選択します。[ ジャーナルの作成 ] ダイアログが 図 9.1 のように表示されます。 第 9 章 ジャーナル機能と障害復旧 9-7 ジャーナル アーカイブ機能の使用 図 9.1 [ ジャーナルの作成 ] ダイアログ 3 [ ジャーナルの作成 ] ダイアログで、使用するオプションを指定し、[OK ] を選択して ジャーナル機能を開始します。各オプションの詳細については、表 9.1 を参照してくだ さい。 ジャーナル ファイルの無効化 DROP JOURNAL 文を実行すると、ログの先行書き込みは中断され、すべてのジャーナル ファイルが削除されます。この操作によって、ジャーナル アーカイブ内のジャーナル ファ イルは削除されませんが、ジャーナル アーカイブの保守は継続されません。ジャーナルの 無効化には、データベースへの排他的アクセス権が必要です。 構文 ジャーナル機能を無効にするには、次の構文を使用します。 DROP JOURNAL ジャーナル アーカイブ機能の使用 前に説明したとおり、ジャーナル アーカイブとは、フル データベース ダンプとそのダンプ の作成以降に完了したすべてのジャーナル ファイルを含むディレクトリです。InterBase で は次の 2 つの手順でアーカイブ コンテンツ(ダンプとジャーナル ファイル)を作成し、更 新することが必要です。 1 2 9-8 操 作 ガ イ ド データベースのアーカイブを作成する ジャーナル ファイルのアーカイブを作成する ジャーナル アーカイブ機能の使用 各タスクを実行するために使用するコマンドについて次に説明します。 メモ ジャーナル アーカイブの作成には、データベースの排他的アクセス権は必要ありません。 ジャーナル アーカイブ機能を有効化するコマンド 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 文で作成されたジャーナル ディ レクトリを使用します。 ジャーナル アーカイブ機能を有効化していないとき、現在のジャーナル ファイルは、 チェックポイントによりハード ドライブにジャーナル ファイルのレコードが書き込まれ た後に、再利用されます。 重要 データベースでジャーナル アーカイブ機能を開始するには、CREATE JOURNAL ARCHIVE コマンドのみを使用します。一度アーカイブ機能を開始して、InterBase が最初のダンプを 実行すると、次に説明する gbak -archive_databas コマンドを使用して以降のダンプ を実行します。ジャーナル アーカイブ機能を無効化し、再開する場合は、CREATE JOURNAL ARCHIVE を使用します。 ジャーナル ファイルのアーカイブを作成するコマンド gbak -archive_journals コマンドは完了したジャーナル ファイルをジャーナル アーカイブ ディレクトリにコピーするように InterBase に指示します。アーカイブに直近に完了した ジャーナル ファイルが必ず含まれるようにするには、定期的にこのコマンドを発行する必 要があります。 完了したジャーナル ファイルをアーカイブ ディレクトリにコピーするには、次の構文を使 用します。 構文 gbak -archive_journals <dbname> ここで、<dbname> にはアーカイブが作成されるデータベースを指定します。ジャーナル アーカイブの格納サイズは、直近に完了したジャーナル ファイルのアーカイブが引続き作 成されることにしたがって、拡大します。アーカイブ サイズの管理方法の詳細については、 9-11 ページの「アーカイブ サイズの管理」を参照してください。 第 9 章 ジャーナル機能と障害復旧 9-9 ジャーナル アーカイブでデータベースを復旧する 後続のアーカイブ ダンプを実行するコマンド CREATE JOURNAL ARCHIVE コマンドで、初期のダンプを作成した後に、次の構文を 使用して、以降のダンプを実行します。 構文 gbak -archive_database <dbname> このコマンドでは、アーカイブ ディレクトリへのフル物理ダンプを実行します。これは格 納する必要があるジャーナル ファイルの数を削減するのに役に立ちます。ダンプが古いほ ど、アーカイブを最新状態に維持するのに InterBase で必要なジャーナル ファイル数が増加 します。 ジャーナル ファイルのアーカイブを作成する頻度は ? 次の事項を検討すると、ジャーナル ファイルのアーカイブの作成頻度を決定するのに役に 立ちます。 • InterBase サーバーがクラッシュした場合に、喪失が許容されるデータ量は ? • ジャーナルの切り替え間隔は ? ジャーナル切り替え間隔よりも短い間隔でジャーナル ファ イルのアーカイブを作成する必要はありません。 • 頻繁なジャーナル切り替えと頻繁なジャーナル アーカイブの作成を実行すると、データ喪 失を最小限に抑えられます。ただし、限度を超えてジャーナルの切り替えとジャーナル アーカイブの作成を実行すると、パフォーマンスが低下します。ユーザーのシステムに対 する最良のバランスは ? ジャーナル アーカイブの無効化 DROP JOURNAL ARCHIVE 文は、データベースに対するジャーナル アーカイブ機能を 無効にします。これによって、すべてのジャーナル ファイルとデータベース ファイル ダン プが、すべてのジャーナル アーカイブ ディレクトリから削除されます。ファイル システム のディレクトリ自体は削除されません。 ジャーナル アーカイブ機能を無効にしても、データベースのジャーナル機能(ジャーナル ファイルの作成)は無効になりません。データベースは、データベースの変更をジャーナル にコミットするために、先行書き込み(Write-Ahead)プロトコルを使用し続けます。ジャー ナル機能も無効化する場合は、別の DROP JOURNAL 文を実行する必要があります(9-8 ペー ジの「ジャーナル ファイルの無効化」を参照)。 ジャーナル アーカイブ機能を無効にするには、次の構文を使用します。 構文 DROP JOURNAL ARCHIVE ジャーナル アーカイブでデータベースを復旧する ジャーナル アーカイブからデータベースを復旧するには、次の構文を使用します。 構文 9-10 操 作 ガ イ ド 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 アーカイブ内のデータベース ダンプ数が、指定した <number> を超えると、古いダン プとジャーナルが削除されます。 • gfix -archive_sweep コマンドを実行して、手動でアーカイブ サイズを制御します(次に説 明) 。 アーカイブ シーケンス番号とアーカイブのスイープについて すべてのアーカイブ項目は、アーカイブ シーケンス番号で識別できます。アーカイブ シー ケンス番号は、その項目がアーカイブ内に作成された順番に対応しています。 指定した番号より小さいシーケンス番号のすべてのファイルをアーカイブから削除するに は、次の構文を使用します。 構文 gfix -archive_sweep <archive_sequence_no> [-force] db_name アーカイブ項目のスイープ(ガベージ コレクション)ができない場合は、スイープは停止 し、エラー ステータスが返ります。それより小さいシーケンス番号のすべての項目が削除 されるとは限らない場合もあります。たとえば、データベース ダンプが、復旧のスタート 時点とするために、シーケンス番号の小さいジャーナル ファイルに依存している場合です。 この場合は、InterBase が与えられたシーケンス番号を小さい番号に自動的に調節するの で、このような依存関係は失われません。 第 9 章 ジャーナル機能と障害復旧 9-11 ジャーナル機能のヒントとベスト プラクティス アーカイブ状態の追跡 アーカイブの状態を追跡するには、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 アーカイブ項目のシーケンス番号。 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 9-12 操 作 ガ イ ド ジャーナル機能のヒントとベスト プラクティス 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 は個々の好みの問題です。これは、シス テムがクラッシュした後でジャーナル ファイルからデータベースに適用しなければならな いバイト数の最大値を表します。復元処理中にジャーナル ファイルを適用できるのは、平 均して 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 のジャーナル機能は、ディスクの入出力がライトスルー(すべてのデータベース 書き込みがオンディスク キャッシュではなく、ディスク自体に)の場合にのみ、パフォー マンスが向上します。 第 9 章 ジャーナル機能と障害復旧 9-13 ジャーナル機能のヒントとベスト プラクティス 適切に設定されると、前述の CREATE JOURNAL 文によって、このコストが最小になり ま す。た だ し、最 終 目 標 は CREATE JOURNAL ARCHIVE 文を使用して、時間的に一貫 性のあるデータベース ダンプとジャーナル ファイルを保存することによって、ある時点ま での障害復旧を可能にすることです。 サンプル ジャーナル アーカイブの作成 実行するには、次のコマンドを発行します。 CREATE JOURNAL ARCHIVE <journal archive directory> これによりジャーナル アーカイブ機能が有効化され、最初のデータベース ダンプが実行さ れます。 つづいて、次の構文で、完了したジャーナル ファイルをアーカイブ ディレクトリにコピー します。 gbak -archive_journals <dbname> 以下のアーカイブ ディレクトリ リストでは、データベース ダンプ 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 の時点で、 どのような状態であったかを表しています。このデータベース ダンプを使用して復旧を試 みる場合は、次のように、ジャーナル ファイル 9-14 操 作 ガ イ ド ジャーナル機能のヒントとベスト プラクティス 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: E:\EMPLOYEE_JOURNALS_AND_ARCHIVES\EMPLOYEE.2006-08-21T15-45-11Z.1.JOURNA L 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.JOURNA L 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.JOURNA L 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.JOURNA L IBSMP (Server) Tue Aug 22 22:55:57 2006 Database: E:\EMPLOYEE_RECOVER\EMPLOYEE.GDB Long term recovery end GBAK -A(db ダンプのアーカイブの作成)は何もロックしません。アーカイブ管理の制約 は、アーカイブ操作がシリアライズされることだけです。同じデータベースに対して、同時 に複数の GBAK/GFIX 操作を実行することはできません。ここで重要なのは、メイン デー タベースには、常にフル アクセスが可能なことです。 第 9 章 ジャーナル機能と障害復旧 9-15 ジャーナル機能のヒントとベスト プラクティス GBAK -ARCHIVE_J(OURNALS) <my_database> を使用すると、データベース全体をダ ンプしない場合に、アーカイブされていないジャーナル ファイルがアーカイブにコピーさ れます(または、前述のようにアーカイブ済みの印が付加)。この場合も、アーカイブに作 成されたジャ ーナル ファイルごとに、1 行が RDB$JOURNAL_ARCHIVES に登録されま す。 GFIX -ARCHIVE_S(WEEP) <sequence no.> <my_database> を使用すると、指定した シーケンス番号より小さい RDB$ARCHIVE_SEQUENCE を持つ RDB$JOURNAL_ARCHIVES 内 のすべてのファイルが削除されます。 GFIX -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 を同時に実行できます。 また、ネットワーク上の複数の同じプラットフォームのコンピュータからデータベースに 接続して、読み取り専用クエリーを実行することもできます。これは、ネットワーク経由 でページ 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 9-16 操 作 ガ イ ド -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 章 ジャーナル機能と障害復旧 9-17 ジャーナル機能のヒントとベスト プラクティス 9-18 操 作 ガ イ ド 第 章 データベース統計情報および接続 の監視 第 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 第 10 章 データベース統計情報および接続の監視 10-3 一時システムテーブルを使用した監視 FROM TMP$POOLS 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; 10-4 操 作 ガ イ ド IBConsole での状態の表示 グローバルな変更 前述の更新は、1 つの接続またはトランザクションに対して実行されます。さらにグローバ ルな変更を行うこともできます。次に例を示します。 アクティブなトランザクションをすべてロールバックするには UPDATE TMP$TRANSACTIONS SET TMP$STATE = 'ROLLBACK' WHERE TMP$STATE ='ACTIVE'; 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 Log]、[Header Pages]、[Index Pages]、[System Relations]です。 メモ レポート対象として選択した統計情報に関係なく、選択した状態に加えて、ヘッダーペー ジ情報が表示されます。[Header Pages]がオプション値として選択されていた場合は、 ヘッダーページ情報だけが表示されます。 All Options [Data Pages]、 [Database Log]、 [Header Pages]、 [Index Pages]、 [System Relations]を 含めた、すべてのオプションの統計情報を表示します。 この機能は、gstat の -all オプションに相当します。 10-6 操 作 ガ イ ド IBConsole での状態の表示 Data Pages データベースの概要のデータページ情報を表示します。ここでは、データベース情報の例を 示し、各項目について説明します。 COUNTRY (31) 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 第 10 章 データベース統計情報および接続の監視 10-7 IBConsole での状態の表示 Current File: File name: Partition offset: 0 Seqno: 0 Offset: 0 ヘッダーページ データベースの概要にヘッダーページを表示します。ここでは、データベース概要のヘッ ダーページ情報の例を示し、各項目について説明します。 この機能は、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-8 操 作 ガ イ ド IBConsole での状態の表示 最初の行には、データベースの一次ファイルの名前と位置が表示されます。残りの行には、 データベースのヘッダーページ上の情報が表示されます。次の項目があります。 表 10.3 ヘッダーページ情報 項目 説明 Checksum 本来のチェックサムは ODS 8 以前の InterBase でのみサポートされます。 ODS 9 以降では、チェックサム値は常に “12345” です。 Generation ヘッダーページが書き込まれるたびに増加するカウンタ。 Page size 現在のデータベースのページサイズ(バイト) 。 ODS version データベースのオンディスク構造体のバージョン。 Oldest transaction 最も古い未確定の(コミットされずに、有効、limbo またはロールバック状態 の)トランザクションのトランザクション ID 番号。 Oldest active 最も古い有効トランザクションのトランザクション ID 番号。 Next transaction 次のトランザクションに割り当てられたトランザクション ID 番号。 最古のトランザクションと次のトランザクションの違いは、データベースのス イープ処理が行われたときに決まります。たとえば、違いがこの違い(デフォ ルトで 20,000)より大きい場合、InterBase はデータベースのスイープ処理を 初期化します。7-22 ページの「スイープの概要」を参照してください。 Sequence number ヘッダーページのシーケンス番号(たとえば、最初のページには 0、次のペー 。 ジには 1 が使用される) Next connection ID 次のデータベース接続の ID 番号。 第 10 章 データベース統計情報および接続の監視 10-9 IBConsole での状態の表示 表 10.3 ヘッダーページ情報 ( 続き ) 項目 説明 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 ダイアレクト。 Creation date データベースが作成された日付。 Attributes • force write:データベースへの強制書き込みが許可されていることを示しま す。 • no_reserve:各ページの領域が古い世代のデータのために確保されていない ことを示します。これにより、各ページ上にデータをより綿密に格納でき るため、データベースの容量が小さくなります。 • shutdown:データベースが終了したことを示します。 Variable header data 10-10 操 作 ガ イ ド • スイープ間隔 • 二次ファイル情報 IBConsole での状態の表示 インデックスページ データベースの概要にインデックスページを表示します。ここでは、インデックスページ情 報の例を示し、各項目について説明します。 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 指定のパーセンテージで満たされたインデックスのページ数を示す度数 分布図。 システムリレーション データベース内のシステムテーブルの情報を表示します。 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) 第 10 章 データベース統計情報および接続の監視 10-11 IBConsole によるクライアント接続の監視 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.3[データベース接続]ダイアログ メモ InterBase の一時システムテーブルは、データベースのアクティビティを詳細に監視するた めのリソースを提供します。詳細は、この章の 10-1 ページの「一時システムテーブルを使 用した監視」を参照してください。 10-12 操 作 ガ イ ド gstat コマンドラインツール gstat コマンドラインツール 構文 gstat [options] database 説明 gstat プログラムは、データベースの状態を検索し、レポートするためのコマンドライン ツールです。この機能はこの章の前半にある IBConsole についての説明と同じです。 gstat を実行するには、SYSDA またはデータベースの所有者でなければなりません。 UNIX プラットフォーム上では、さらに制限があります。gstat を実行するには、データ ベースファイルへのシステムレベルでの読み取りアクセス権が必要です。これを取得する には、InterBase サーバーを実行しているアカウントと同じアカウント(InterBase または root)でログインするか、グループに対して読み取り許可を含めたデータベースファイルに ついてのシステムレベルのパーミッションを設定します。gstat は InterBase サーバーでは なく、システムレベルのデータベースファイルにアクセスするため、UNIX プラットフォー ムにこのような制限があります。 メモ gstat は、ローカルデータベースでのみ実行できます。gstat はサーバーホストで実行しま す。 オプション 表 10.5 に、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 第 10 章 データベース統計情報および接続の監視 10-13 gstat コマンドラインツール このコマンドを実行すると、次のように出力されます。 Database "employee.ib" Database header page information: Flags 0 Checksum 12345 Write timestamp Jul 9, 2010 19:58:59 Generation 26 Page size 4096 ODS version 15.0 Oldest transaction 19 Oldest active 20 Oldest snapshot 20 Next transaction 21 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 Jul 9, 2010 19:58:59 Attributes force write Variable header data: Sweep interval: *END* 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, max record length: 77 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 10-14 操 作 ガ イ ド ロック状態の表示 80 - 99% = 2 Blob pointer page: 253 Average blob length: 535.27, total blobs: 11, max blob length: 4598 Average segment length: 33.83, total segments: 175, max segment length:85 Blob pages: 1, blob page slots: 1, average fill: 41% Fill distribution: 0 - 19% = 0 20 - 39% = 0 40 - 59% = 1 60 - 79% = 0 80 - 99% = 0 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 ロック状態の表示 ロック処理は、InterBase がデータベースに複数のユーザーがアクセスしたときにデータ ベースの一貫性を管理するためのメカニズムの 1 つです。ロックマネージャは、ロック処 理を同調させる ibserver 処理のスレッドです。 第 10 章 データベース統計情報および接続の監視 10-15 ロック状態の表示 ロックマネージャは、ロックテーブルを使用して、データベースに接続された 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 ロックの要求、変換、ダウングレード、リリースなど、秒単位の操作状態を出 力します。 -iw 秒単位のロック取得数、待機要求数、待機率、および再試行数を出力します。 t サンプリングの間隔を秒で指定します。 n 以降のサンプル数を指定します 次の文は、3 秒ごとにサンプリングを 10 回まで行い、取得状態(ロックテーブルへのア クセス:acquire/s、acqwait/s、%acqwait、および rtrysuc/s)を出力します。 gds_lock_print -ia 3 10 10-16 操 作 ガ イ ド api_database_info() による統計情報の取得 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 データベースへの挿入数。 • テーブルごとにレポートされます。 • 現在のデータベース接続の開始後から計算されます。 isc_info_purge_count 発達したレコード(古いバージョンを必要としないコミットされた レコード)の古いバージョンの削除数。 • テーブルごとにレポートされます。 • 現在のデータベース接続の開始後から計算されます。 第 10 章 データベース統計情報および接続の監視 10-17 api_database_info() による統計情報の取得 表 10.7 データベースの I/O 統計情報項目 ( 続き ) 要求バッファ項目 結果バッファの内容 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 コマンドをファイルに保存します。 • ロード:保存されている 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; EXECUTE コ マ ン ドは、BATCH START と BATCH EXECUTE の間にあるス テートメントをサーバーに送信します。別のバッチ操作を開始するには、別の BATCH START コマンドを実行しなければなりません。 BATCH 次は、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 章を参照してください。 メモ の AUTOCOMMITDDL があります。 isql モードは、バッチ更新を使用するために無効にしておく必要 トランザクションのコミットとロールバック たとえば、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-41 ページの「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 制約文を表示します。アクセラレータキーは 『データ定義ガイド』の「CHECK 〔Ctrl〕+〔Alt〕+〔H〕です。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-26 ページの「isql 接続ごとのデフォルト キャッシュ サイズ」を参照し てください。 -d[atabase] name -x とともに使用します。ファイルに抽出される CREATE DATABASE 文を変 更します。 • -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.10SQLCODE とメッセージの概要 SQLCOD E メッセージ 意味 <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.11isql のコマンド 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.12SET 文 文 説明 デフォルト SET AUTODDL DDL 文に対するコミット機能を切り替えます。 ON SET BLOBDISPLAY BLOB サブタイプ n の表示をオンにします。パラメータ n OFF n は、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 文を入力することはできません。同じ機能を メニュー項目で実行できます。 11-34 操 作 ガ イ ド isql コマンドリファレンス • SET GENERATOR と SET TRANSACTION(トランザクション名はなし)は DSQL 文であり、 IBConsole isql または isql で対話的に入力できます。これらの文は、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 で、両者は同じものです。 第 11 章 対話型クエリー 11-35 isql コマンドリファレンス ヒント ON および OFF キーワードはオプションなので省略できます。省略すると、SET AUTO は一 方のモードからもう一方のモードに切り替わります。オプションのキーワードを省略して 入力を保存することも可能ですが、混乱を避けるためキーワードを付けることをお勧めし ます。 例 次の例は 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 を使用します。 11-36 操 作 ガ イ ド isql コマンドリファレンス • BLOB データを表示しないようにするには、SET BLOBDISPLAY OFF を使用します。OFF キーワードを省略しても同じです。出力を読みやすくするには BLOB 表示をオフにします。 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. . . . 第 11 章 対話型クエリー 11-37 isql コマンドリファレンス 参照 BLOBDUMP 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 11-38 操 作 ガ イ ド isql コマンドリファレンス SET ECHO コマンドの実行前に isql 出力領域にコマンドを表示するかどうかを指定します。 構文 説明 SET ECHO [ON | OFF]; 引数 説明 ON コマンドの表示をオンにする(デフォルト) OFF コマンドの表示をオフにする デフォルトでは、スクリプトファイルのコマンドは、実行前に 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 . . . 第 11 章 対話型クエリー 11-39 isql コマンドリファレンス ECHO は OFF になっているため、最初の SELECT 文は表示されません。また、SET ECHO ON 文自体も表示されないことに注意してください。この文が実行されるとき、ECHO は まだ OFF になっているからです。ただし、この文の実行後、2 番めの SELECT 文は表示さ れます。 参照 INPUT, OUTPUT SET LIST 表形式とリスト形式のどちらで表示するかを指定します。 構文 説明 SET LIST [ON | OFF]; 引数 説明 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 SRep JOB_GRADE 4 JOB_COUNTRY Italy 11-40 操 作 ガ イ ド isql コマンドリファレンス JOB_TITLE Sales Representative SET NAMES データベーストランザクションで使用するアクティブなキャラクタセットを指定します。 構文 説明 SET NAMES [charset]; 引数 説明 charset アクティブなキャラクタセットの名前。デフォルトは NONE(なし) 。 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 を使用してくだ さい。 第 11 章 対話型クエリー 11-41 isql コマンドリファレンス オプティマイザのクエリープランを変更するには、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'; 出力には、クエリーの結果とともにデータを検索するために使用されたオプティマイザの クエリープランも含まれ、次のようになります。 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 時間 • 要求された読み取り回数 • 要求された書き込み回数 • 書き込み要求数 • 実行された取り出し回数 11-42 操 作 ガ イ ド isql コマンドリファレンス パフォーマンス状態は、システムリソース、データベースリソース、またはクエリーの最 適化に変更が必要かどうかを決める際の手助けになります。 ヒント ON および OFF キーワードはオプションなので省略できます。省略すると、SET STATS は一方のモードからもう一方のモードに切り替わります。オプションのキーワードを省略 して入力を保存することも可能ですが、混乱を避けるためキーワードを付けることをお勧 めします。 SET STATS と SQL 文の SET STATISTICS を混同しないでください。SET STATISTICS は、インデックスの選択度を再計算します。 例 次の例はスクリプトファイルの一部です。状態の表示をオンにし、クエリーを実行しま す。 SET STATS ON; SELECT JOB_COUNTRY, MIN_SALARY FROM JOB 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 値における時刻表示をオフにする(デフォルト) 第 11 章 対話型クエリー 11-43 isql コマンドリファレンス 説明 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 を使って表示します。これによって時間、分、秒も表示され ます。 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 コマンドを使って入力ファイルを編集する場合、編集セッションが終了すると同 時に入力ファイルが実行されます。 11-44 操 作 ガ イ ド isql コマンドリファレンス SHELL を使用する場合、シェルが呼び出される前にトランザクションがコミットされるこ とはありません。 この isql 文に相当する機能は IBConsole isql にはありません。 例 次の例では、SHELL を使って現在のディレクトリの内容を表示します。 SHELL DIR; 参照 EDIT SHOW CHECK 指定したテーブルに対して定義されているすべての CHECK 制約を表示します。 構文 説明 SHOW CHECK table; 引数 説明 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 は、現在のデータベースのファイル名、ページサイズ、アロケーショ ン、およびスイープ間隔を表示します。 第 11 章 対話型クエリー 11-45 isql コマンドリファレンス 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 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 11-46 操 作 ガ イ ド isql コマンドリファレンス DEFAULT 0 CHECK (VALUE > 0) SHOW EXCEPTIONS すべての例外を一覧したり、指定された例外のテキストを表示します。 構文 SHOW {EXCEPTIONS | EXCEPTION name}; 引数 説明 name 現在のデータベースにおける既存の例外の名前 説明 SHOW EXCEPTION は、例外の一覧をアルファベット順に表示します。 また、SHOW EXCEPTION name は、指定した例外のテキストを表示します。 例 現在のデータベースに対して定義されているすべての例外を一覧するには、次のように入 力します。 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 フィルタの名前 第 11 章 対話型クエリー 11-47 isql コマンドリファレンス オプション 例 既存フィルタの一覧を表示するには 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 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 11-48 操 作 ガ イ ド isql コマンドリファレンス SHOW GENERATORS すべてのジェネレータを一覧するか、または指定されたジェネレータについての情報を表 示します。 構文 説明 SHOW {GENERATORS | GENERATOR name}; 引数 説明 name 現在のデータベースにおける既存ジェネレータの名前 既存のジェネレータを一覧するには、SHOW GENERATORS を使用します。 SHOW GENERATOR name を使用すると、現在のデータベースにおける指定のジェネレータについての 情報が表示されます。出力にはジェネレータの名前とその次の値が含まれます。 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 特権を表示するには、次のように入力します。 第 11 章 対話型クエリー 11-49 isql コマンドリファレンス 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 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) 11-50 操 作 ガ イ ド isql コマンドリファレンス RDB$PRIMARY24 UNIQUE INDEX ON SALES(PO_NUMBER) SALESTATX INDEX ON SALES(ORDER_STATUS, PAID) 参照 SHOW TABLES SHOW PROCEDURES 全プロシージャを一覧するか、指定のプロシージャのテキストを表示します。 構文 説明 SHOW {PROCEDURES | PROCEDURE name}; 引数 説明 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: 第 11 章 対話型クエリー 11-51 isql コマンドリファレンス ================================================================= 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 ================================================================ 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 DOONETHINGDOSOMETHING 参照 SHOW GRANT SHOW SYSTEM 現在のデータベースのシステムテーブルおよびシステムビューの名前を表示します。 構文 SHOW SYSTEM [TABLES]; 説明 SHOW SYSTEM は、現在のデータベースにおけるシステムテーブルおよびシステムビュー を一覧します。SHOW SYSTEM は、オプションのキーワード TABLES を受け付けます。この キーワードは、コマンドの動作には影響しません。 SHOW SYSTEM の短縮形は SHOW SYS で、両者は同じものです。 例 現在のデータベースのシステムテーブルおよびシステムビューを一覧するには、次のよう に入力します。 SHOW SYS; RDB$CHARACTER_SETS RDB$COLLATIONS 11-52 操 作 ガ イ ド RDB$CHECK_CONSTRAINTS RDB$DATABASE isql コマンドリファレンス 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_CONSTRAINTSRDB$RELATION_FIELDS RDB$ROLES RDB$SECURITY_CLASSES RDB$TRANSACTIONS RDB$TRIGGERS RDB$TRIGGER_MESSAGES RDB$TYPES RDB$USER_PRIVILEGES RDB$VIEW_RELATIONS 参照 システムテーブルの詳細は、『言語リファレンス』を参照してください。 SHOW TABLES テーブルまたはビューのすべてを一覧するか、指定されたテーブルまたはビューについて の情報を表示します。 構文 説明 SHOW {TABLES | TABLE name}; 引数 説明 name 現在のデータベースにおける既存テーブルまたは既存ビューの名前 SHOW TABLES は、現在のデータベースにおけるテーブルとビューをアルファベット順に 一覧します。一覧されるオブジェクトのどれがテーブルではなく、ビューなのかを知るに は、SHOW VIEWS を使用してください。 SHOW TABLE name は、指定されたオブジェクトについての情報を表示します。オブジェク トがテーブルの場合、 コマンド出力は列名と定義、PRIMARY KEY (主キー)、FOREIGN KEY (外部キー)、CHECK 制約、トリガーを一覧します。オブジェクトがビューの場合、コマン ド出力は列名と定義、およびビューが基づいている SELECT 文を一覧します。 例 現在のデータベースに対して定義されているすべてのテーブルまたはビューを一覧するに は、次のように入力します。 SHOW TABLES; COUNTRY CUSTOMER DEPARTMENT EMPLOYEE EMPLOYEE_PROJECT JOB PHONE_LIST PROJECT PROJ_DEPT_BUDGET SALARY_HISTORY SALES COUNTRY というテーブルの定義を表示するには、次のように入力します。 第 11 章 対話型クエリー 11-53 isql コマンドリファレンス 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}; 引数 説明 name 現在のデータベースにおける既存トリガーの名前 SHOW TRIGGERS は、データベースにおける全トリガーを表示します。これらのトリガー が依存しているテーブルも一緒に表示されます。SHOW TRIGGER name は、指定された トリガーの名前、シーケンス、タイプ、起動状態、および定義を表示します。 SHOW TRIGGER の短縮形は SHOW TRIG で、両者は同じものです。 依存しているトリガーを持ったテーブルを削除することはできません。isql エラーを避け るために、テーブルを削除する前に(DROP TRIGGER を使って)トリガーを削除してく ださい。 例 現在のデータベースに対して定義されている全トリガーを一覧するには、次のように入力 します。 SHOW TRIGGERS; Table name Trigger name =========== ============ EMPLOYEE SET_EMP_NO EMPLOYEE SAVE_SALARY_CHANGE CUSTOMER SET_CUST_NO SALES 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 11-54 操 作 ガ イ ド SQL スクリプトの使用 SHOW VERSION ソフトウェアのバージョンについての情報を表示します。 構文 SHOW VERSION; 説明 SHOW VERSION は、isql、InterBase エンジン、およびセッションが接続しているデー タベースのオンディスク構造体(ODS)のバージョンを表示します。 ある種のタスクは、InterBase の旧バージョンを使って作成されたデータベースで実行する と、予想どおりに動作しない場合があります。実行中のソフトウェアのバージョンを調べる には、SHOW VERSION を使用してください。 SHOW VERSION の短縮形は SHOW VER で、両者は同じものです。 例 ソフトウェアバージョンを表示するには、次のように入力します。 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 isql または IBConsole でファイルを実行する 第 11 章 対話型クエリー 11-55 3 出力結果を表示し、データベースの変更を確認する isql スクリプトの作成 最終ファイル形式が「書式なしテキスト」 (ASCII)であれば、SQL スクリプトファイルの 作成にテキストエディタを使用できます。 各 SQL スクリプトファイルの先頭には、スクリプトの操作対象となるデータベースを指定 する CREATE DATABASE 文または CONNECT 文(ユーザー名とパスワードを含む)がなけ ればなりません。CONNECT 文または CREATE 文には、完全なデータベースファイル名と ディレクトリパスが含まれていなければなりません。 メモ CREATE DATABASE 文にはダイアレクトを設定できません。ダイアレクト 3 のデータベー スを作成するには、オプション -r 3 で isql を実行します。 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 スクリプトの読み込み]を選択します。 11-56 操 作 ガ イ ド SQL スクリプトの使用 4 ファイルを開くダイアログで実行するスクリプトファイル名を入力または選択して、 [開く]をクリックしてスクリプトファイルを SQL 入力領域に読み込みます。 5 [実行]ツールバーボタンをクリックするか、[クエリー|実行]を選択します。 IBConsole でエラーが発生すると、エラー内容を示した情報ダイアログが表示されます。 IBConsole がスクリプトの実行を終了すると、スクリプトの結果は SQL 出力ウィンドウに 表示されます。 スクリプトの実行後、isql セッションのすべての設定は前のデータベース接続(もしあれ ば)とともにスクリプト実行前の状態に復元されます。つまり、スクリプト内の isql の SET コマンドは、スクリプトの実行中、その isql セッションだけに影響します。 コマンドライン 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 の構文については、『言語リ ファレンス』を参照してください。 第 11 章 対話型クエリー 11-57 SQL スクリプトの使用 isql スクリプトでのコメントの追加 isql スクリプトでは、以下のように C プログラムとまったく同じようにコメントを記述でき ます。 /* コメント */ コメントは、SQL 文または isql コマンドと同一の行に置くこともでき、コメントの長さに 制限はありません。必ずコメントの最初は /* で始め、最後に */ で閉じます。 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 ではありません。 • ビルトインキャッシュメモリを持つディスクコントローラを使用します。 コントローラの キャッシュにより、 オペレーティングシステムがディスクキャッシュ用にシステムの RAM を使用する必要が軽減されます。 第 12 章 データベースとサーバーのパフォーマンス 12-3 ハードウェア構成 • 指定サイズのすべてのディスクが同じように動作するとは見なさないでください。個別の テストラボでパフォーマンスレートを調べてください。 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 FILE FILE FILE 12-4 操 作 ガ イ ド DATABASE 'C:¥data¥bigdata1.ib' 'D:¥data¥bigdata2.ib' STARTING 'E:¥data¥bigdata3.ib' STARTING 'F:¥data¥bigdata4.ib' STARTING PAGE_SIZE 4096 AT PAGE 1000000 AT PAGE 2000000 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 ibserver プロセスを強調表示します。 c 右クリックして、[関係の設定]をクリックし、[プロセッサの関係]ウィンドウを 表示します。 この方法は、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-25 ページの「データベースキャッシュの設定」を参 照してください。 第 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) InterBase 技術者は、Delphi で TDataSet アーキテクチャを使ってデータベース対応の高度 に機能化された VCL コンポーネントセットを作成しました。IBX は Embarcadero の 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 では、SQL-92 標準との互換性を強化しましたが、InterBase 5 以前の古いクラ イアントやデータベースを移行する際は、細心の注意を払う必要がある場合もあります。 移行の際に考慮する必要があるのは、二重引用符の使用(区切り付き識別子に使用する)、 DATE データ型の意味(高精度数値データ型の動作)、古いメタデータ名と競合する可能性 がある新しいキーワードの存在などです。 このドキュメントでは、前バージョンの InterBase から InterBase 6 以降へのスムーズな移 行を計画および実施するための方法について説明します。 このガイドの前の章では、移行に関する問題について説明しています。この付録では、イン プレース移行および古いデータベースを新しいデータベースに移行する方法の両方につい て、詳細な手順を説明しています。A-20 ページの「サーバーとデータベースの移行」、A-24 ページの「ダイアレクト 3 へのデータベースの移行」、および A-31 ページの「クライアン トの移行」を参照してください。 移行のプロセス サーバー、データベース、およびクライアントを移行するには、以下の手順が必要です。そ れぞれの手順については、後で詳しく説明します。 サーバーとデータベースの移行 1 2 移行するすべてのデータベースをバックアップする。 最新の InterBase サーバーをインストールする。 付録 A InterBase の移行 A-1 移行における問題 3 最新の gbak を使用して、移行するデータベースを復元する。この時点で、データベー スはダイアレクト 1 に設定されます。 4 5 移行したデータベースを検証する。 データベースを SQL ダイアレクト 3 に設定する(24 ~ 31 ページを参照)。 クライアントの移行 1 アップグレードする必要があるクライアントを識別する。 2 アップグレードが必要なアプリケーションの領域を識別する。 3 必要なコンピュータにそれぞれ InterBase をインストールする。 4 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 ページに、新しいキーワード の一覧を示します。 付録 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-29 ページの 「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 データベースのダイアレクト 付録 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-24 ページの「ダイアレクト 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 を使用して、ドメイン定義の名前またはデータ型を変更できるようにな りました。 付録 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 COLUMN CURRENT_DATE CURRENT_TIME CURRENT_TIMESTA MP DAY EXTRACT TIME TIMESTAMP TRUE TYPE UNKNOWN WEEKDAY YEAR YEARDAY FALSE HOUR MINUTE MONTH PERCENT ROWS SECOND TIES InterBase 7.5、および InterBase 2007 には、次の新しいキーワードが導入されています。 NULLIF CASE PRESERVE COALESCE TEMPORARY DECRYPT ENCRYPT ENCRYPTION GLOBAL これらのキーワードは、すべてのダイアレクトに共通の予約語です。 • バージョン 6 以降では、ダイアレクト 1 のデータベースにおいて上記のキーワードのいず れかをオブジェクト名(識別子)として使用している場合は、オブジェクトを作成するこ とはできません。 • これらのキーワードを識別子として使用しているバージョン 5 のデータベースは、オブ ジェクト名を変更せずにバージョン 6 以降のダイアレクト 1 に移行できます。たとえ ば、“YEAR” という名前の列などです。 付録 A InterBase の移行 A-9 機能とダイアレクト • バージョン 5 のクライアントは、エラーを出さずにこれらのキーワード識別子にア クセスできます。 • バージョン 6 のクライアントは、識別子として使用されているキーワードにアクセ スできません。ダイアレクト 1 のデータベースでは、識別子の名前をキーワード以 外の名前に変更する必要があります。 • ダイアレクト 3 に直接移行する場合は名前をそのまま使用できますが、それらを二 重引用符で区切る必要があります。従来のクライアントのアクセス可能性を保つに は、名前をすべて大文字にします。区切り付き識別子には大文字と小文字の区別が あります。 • TIME はバージョン 6 のダイアレクト 1 では予約語ですが、データ型として使用してはな りません。これにより、データベースとバージョン 5 のクライアントとのデータ型の互換 性が保証されます。 • ダイアレクト 3 のデータベースおよびクライアントでは、二重引用符で区切ることで任意 の予約語を識別子として使用できます。 区切り付き識別子 SQL 92 標準への適合性を高めるために、InterBase 6 以降では区切り付き識別子を導入し ています。識別子とは、任意のデータベースオブジェクト(たとえばテーブル、列、トリ ガー)の名前です。区切り付き識別子とは、二重引用符で囲まれた識別子を意味します。引 用符を使って名前の境界を区切るので、前バージョンの InterBase に比べてオブジェクト名 として使用できる名前の範囲が大きく広がりました。オブジェクト名では、次のことが可能 になりました。 • キーワードの使用 • スペースを含める(末尾のスペースは不可) • 大文字と小文字を区別する 二重引用符の変更点 バージョン 5 以前の InterBase では、文字列定数を単引用符または二重引用符のどちらで も 囲 む こ と が で き ま し た。 区切り付き識別子という概念はまだありませんでした。 InterBase 6(ダイアレクト 3)以降では、単引用符で囲まれた文字列は文字列定数として 解釈され、二重引用符で囲まれた文字列は区切り付き識別子として解釈されます。次に概 要を説明します。 • InterBase のすべてのバージョンで、単引用符で囲まれたものはすべて文字列定数として扱 われます。 • Inter Base 5 以前のバージョンでは、二重引用符で囲まれたものはすべて文字列定数として 扱われます。これは、これらのバージョンには、区切り付き識別子という概念がなかった ためです。 • バージョン 6 のダイアレクト 1 は、引用符に関して旧バージョンの InterBase のように動作 する移行モードです。つまり、単引用符または二重引用符のいずれかで囲まれた文字列は 文字列定数として解釈されます。 A-10 操 作 ガ イ ド 機能とダイアレクト • InterBase 6(ダイアレクト 3)以降では、二重引用符で囲まれた文字列は区切り付き識別子 として解釈されます。単引用符で囲まれた文字列は文字列定数として解釈されます。 • バージョン 6 以降の InterBase サーバーは、ダイアレクト 1 のクライアントを検出すると、 クライアント DML(データ操作)文に二重引用符が含まれることを許可し、これらを文字 列定数として正しく処理します。ただし、ダイアレクト 3 ではメタデータを使用できない ため、これらのサーバーは、クライアント DDL(データ定義)文に二重引用符が含まれる ことは許可しません。バージョン 6 のサーバーはすべて、クライアントが新しいメタデー タを作成する場合に、文字列定数が単引用符で区切られることを要求します。 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); 付録 A InterBase の移行 A-11 機能とダイアレクト ダイアレクト 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; 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 A-12 操 作 ガ イ ド 機能とダイアレクト TIMESTAMP 列の DATE または TIME への変換 データベースをダイアレクト 3 に移行すると、DATE データ型であった従来の列はすべて TIMESTAMP データ型に変更されます。そのデータを DATE または TIME 列に格納する 場合は、次の操作を行います。 1 ALTER TABLE を使用して、目的の型の列を新しく作成します。 2 元の列から新しい列に値を挿入します。 UPDATE tablename SET new_field = CAST (old_field AS new_field); 3 ALTER TABLE を使用して、元の列をドロップします。 4 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 InterBase の移行 A-13 機能とダイアレクト 表 A.2 日付 / 時刻データ型からのキャストの結果 キャスト先 元の型 TIMESTAMP DATE TIME VARCHAR(n) CHARACTER(n) CSTRING(n) 文字列は次の形式でなけれ ばならない。 下記を参照 文字列は次の形式でなければ ならない。 TIMESTAMP 常にキャスト可 タイムスタンプの 日付部分 タイムスタンプの時刻部分 DATE 常に変換される。タイムス タンプの時刻部分は 0:0:0.0000 に設定される 常にキャスト可 エラー TIME 常に変換される。タイムス タンプの日付部分は現在の 日付に設定される エラー 常にキャスト可 YYYY-MM-DD HH:MM:SS.thousands HH:MM:SS.thousands DATE から文字列へのキャストは、YYYY-MM-DD 形式(「MM」は 2 桁の月)になります。 結果が文字列変数に収まらない場合は、文字列切り詰め例外が生成されます。前のバージョンで は、このキャストの結果は DD-Mon-YYYY HH:mm:SS.hundreds 形式( 「Mon」は英語の 3 文字 の月の省略名)になっていました。結果が文字列変数に収まらない場合は、文字列が自動的に切 り詰められました。 文字列から日付へのキャストでは、以下の形式を使用できるようになっています。 '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/yyyy' 'mm dd yy''mm dd yyyy''mm:dd:yy' 'mm:dd:yyyy' 'dd.mm.yy''dd.mm.yyyy' 月を英語の完全な名前または英語の 3 文字の省略名で指定する場合、月と日はどちらが先 でもかまいません。以下の例では、“xxx” は完全な月名または 3 文字の省略名を表します。 以下のすべての形式を使用できます。 'dd-xxx-yy''dd-xxx-yyyy''xxx-dd-yy''xxx-dd-yyyy' 'dd xxx yy''dd xxx yyyy''xxx dd yy''xxx dd yyyy' 'dd:xxx:yy''dd:xxx:yyyy''xxx:dd:yy''xxx:dd:yyyy' たとえば、以下の INSERT 文はどれも 1943 年 1 月 22 日の日付を挿入します。 A-14 操 作 ガ イ ド 機能とダイアレクト 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.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 + 数値の小数部を秒数に変換した値 付録 A InterBase の移行 A-15 機能とダイアレクト 表 A.4 日付 / 時刻データ型の加算と減算 Operand1 演算子 Operand2 結果 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) + 数値と同じ結果になります。 日付 / 時刻データ型に集計関数を使用する 日付 / 時刻データ型は、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 でなければなりま せん。データ型の中に存在しない部分を取り出そうとすると、エラーになります。例を示し ます。 A-16 操 作 ガ イ ド 機能とダイアレクト 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; ======= 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 付録 A InterBase の移行 A-17 機能とダイアレクト 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-24 ページの「ダイアレクト 3 へのデータベースの移行」で詳しく説明 します。 ダイアレクト 3 に移行する際は、高精度数値列を INT64 に変更する必要がある場合とない 場合とがあります。28 ページの「NUMERIC および DECIMAL データ型をほんとうに移 行する必要があるか ?」を参照してください。 以下に、ダイアレクト 3 の機能と変更点を示します。 • 64 ビット整数のサポート。 • オーバーフローの保護。ダイアレクト 1 では、2 つの整数の積が 31 ビットを超えた場合、 積は 232 を法として返されました。ダイアレクト 3 では、真の結果が 64 ビット整数として 返されます。さらに、2 つの高精度数値の積、合計、差、または商が 63 ビットを超える場 合、InterBase は演算オーバーフローエラーメッセージを発行して演算を終了します (前の バージョンでは、真の結果の最下位の数字が返されることがありました) 。以下のストアド プロシージャ bignum にこの処理を示します。 両方のオペランドがダイアレクト 3 の高精度数値である場合、除算を伴う演算は高精度数 値 を 返 し ま す。同 じ 演 算 をダイアレクト 1 で実行した場合、その結果は DOUBLE PRECISION となります。 A-18 操 作 ガ イ ド 機能とダイアレクト ダ イ ア レ ク ト 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; ダイアレクト 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 を返します。 付録 A InterBase の移行 A-19 サーバーとデータベースの移行 ダイアレクト 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 の場合、文字型フィールドに対する算術演算を行うこと はできません。 対策 演算を行う前に情報を明示的にキャストします。 • クライアントのダイアレクトが 3 の場合、isql を使って TIMESTAMP 列から選択すると、 すべての情報が表示されます。 対策 バージョン 6.0 以前の InterBase では、SET TIME ON が有効な場合にのみタイムス タンプの時刻部分が表示されました。6.0 においてクライアントのダイアレクトが 3 の場 合、タイムスタンプの時刻部分は常に表示されます。 サーバーとデータベースの移行 サーバーとアプリケーションは、異なるタイミングで InterBase 6 に移行できます。つまり、 個別に移行を行うことができます。移行を検討する際は、次の事項に注意してください。 • 旧バージョンのクライアントでも、InterBase 6 に移行したデータベースにアクセスできま す。ただし、新しいデータ型や INT64 として格納されているデータにはアクセスできませ ん。また、前のバージョンのクライアントは、二重引用符で囲まれた要素を文字列として 扱います。 A-20 操 作 ガ イ ド サーバーとデータベースの移行 • 実際に運用するサーバーおよびデータベースを移行する前に、移行手続きをチェックする ためのテストベッドを確立することを強くお勧めします。テストベッドは、移行対象の運 用クライアントやサーバーと同じプラットフォームで動作する必要はありません。 移行経路としては、既存のサーバーを置き換えるのか、新しいサーバーをインストールし て従来のデータベースを移動するのかによって、いくらか違いが生じます。既存のサーバー をアップグレードする場合、コストはあまりかかりませんが、多くの時間と労力が必要で す。移行対象のサーバーと、それとともに移行するデータベースは、アップグレード作業の 間すべて使用できなくなります。InterBase 6 サーバー用に新しいハードウェアを使用でき る場合は、サービスをあまり中断することなく移行を並列的に行うことができます。この方 法には、移行に関して問題が発生した場合に元の環境に戻すのが容易であるという利点が あります。 サーバーのインプレース移行 この節では、InterBase 5 サーバーを InterBase 6 サーバーに置き換える場合に推奨される 手順を説明します。 1 バックアップを行う前に、各データベースをシャットダウンしてトランザクションをす べて終了します。 2 バージョン 5 サーバー上のすべてのデータベースをバックアップします。設定済みの ユーザー ID を保持する場合は、isc4.ib もバックアップします。 安全策として、データベースを検証してからバックアップを行います。次に、各データ ベースを復元してバックアップファイルが有効であることを確認します。 3 バージョン 5 のサーバーをシャットダウンします。いったんアンインストールを行った 後でインストールを行うのはよいやり方ですが、現在のサーバーが Superserver でそれ に上書きインストールする場合は、サーバーをアンインストールする必要はありませ ん。同一コンピュータ上で複数のバージョンの InterBase を使用することはできませ ん。現在のサーバーが Classic の場合は、InterBase 6 をインストールする前にサーバー をアンインストールする必要があります。 4 バージョン 5 のサーバーをシャットダウンします。 メモ 5 isc4.ib および isc4.gbk はインストール時に上書きされません。 新しいサーバーを起動します。 • 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 ユーザーでしか実行できません。 付録 A InterBase の移行 A-21 サーバーとデータベースの移行 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-23 ページの 「InterBase 6 のダイアレクト 1 データベースについて」を参照してください。データベー スをダイアレクト 3 に移行する方法については、A-24 ページの「ダイアレクト 3 へのデー タベースの移行」を参照してください。クライアントの移行については、A-31 ページの 「クライアントの移行」を参照してください。 新しいサーバーへの移行 この節では、InterBase 6 以降を新しいサーバーとしてインストールし、従来の InterBase 5 以前からデータベースを移行する場合に推奨される手順を説明します。この作業は、インラ インインストールの手順とは少し異なります。 次の手順において、 「古い」データベースは、バージョン 5 以前の InterBase サーバーにあ るデータベースを意味します。「新しい」は、バージョン 6 以降の InterBase サーバーを意 味します。 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 A-22 操 作 ガ イ ド サーバーとデータベースの移行 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-23 ページの 「InterBase 6 のダイアレクト 1 データベースについて」を参照してください。データベー スをダイアレクト 3 に移行する方法については、A-24 ページの「ダイアレクト 3 へのデー タベースの移行」を参照してください。クライアントの移行については、A-31 ページの 「クライアントの移行」を参照してください。 InterBase 6 のダイアレクト 1 データベースについて ここでは、バージョン 5 のデータベースをバックアップし、それを InterBase 6 で復元した 場合について説明します。 • バージョン 5 のクライアントは、特に変更を加えることなくデータベース内のすべての要 素にアクセスできます。 • 17 個の新しいキーワードのいずれかがオブジェクト名(たとえば列またはテーブルの名 前)の中で使用されていた場合、バージョン 6 のダイアレクト 1 クライアントでこれらの オブジェクトにアクセスするには、オブジェクト名を変更する必要があります。ALTER TABLE の新しい ALTER COLUMN 句を使用すると、列名の変更を簡単に実装できます。 • バージョン 5 のクライアントはそのような列にアクセスできます。 • ダイアレクト 3 のクライアントは、これらの列が二重引用符で区切られていれば列 にアクセスできます。 • 17 個の新しいキーワードは予約語です。ただし、新しいデータ型の TIME と DATE はデー タ型として使用することはできません。DATE 列は、従来どおりの日付と時刻を意味しま す。DATE の新しい意味(日付のみ)はダイアレクト 3 でのみ利用できます。 • 従来 DATE データ型であった列は、TIMESTAMP データ型になります。TIMESTAMP 型 は、従来のバージョンの DATE が保持していたのとまったく同じ情報を保持します。 付録 A InterBase の移行 A-23 ダイアレクト 3 へのデータベースの移行 • 高精度数値列(9 桁を超える有効桁数を持つ DECIMAL または NUMERIC データ型の列) は、DOUBLE PRECISION データ型として格納されます。これらの列に対して機能して いた演算アルゴリズムはすべて従来どおりに機能します。ダイアレクト 1 では、データを INT64 型として格納することはできません。 ダイアレクト 3 へのデータベースの移行 ダイアレクト 1 からダイアレクト 3 にデータベースを移行する場合は、主に次の 4 つの点 に注意します。 • 二重引用符 • DATE データ型 • 有効桁数の大きな高精度数値(ここでは、有効桁数が 9 桁を超える NUMERIC および DECIMAL データ型を指します) • キーワード 移行手順は、元のデータベースから空のダイアレクト 3 データベースにデータを移動する アプリケーションを作成できるかどうかによってやや異なります。このようなユーティリ ティを使用できない場合は、元のデータベースのインプレース移行を行う必要があります。 概要 どちらの方法を行うにしても、データベースからメタデータを抽出し、問題領域の有無を 調べ、問題があればそれを解決することから始めます。 • インプレース移行では、修正済みの SQL 文をメタデータファイルから新しいスクリプト ファイルにコピーした後で修正を加え、元のデータベースに対してそのスクリプトを実行 します。次に、データベースをダイアレクト 3 に設定します。データベースをダイアレク ト 3 に設定した後は、古いデータを INT64 型として格納するための作業があります。 • ユーティリティを使って古いデータベースから新しく作成した空のデータベースにデータ を移動することができる場合は、まず、修正済みのメタデータファイルを使って新しいダ イアレクト 3 データベースを作成します。次に、ユーティリティを使って古いデータベー スから新しいデータベースにデータを移動します。 どちらの場合でも、INT64 型として格納する必要がある列やそれまで二重引用符を含んで いた列制約およびデフォルトを正常に移行するには、新しいデータベースに変更を加える 必要があります。 以降では、この 2 つの方法について説明します。 方法 1: インプレース移行 1 データベースをバージョン 6 のダイアレクト 1 に移行していない場合は、まずその移 行処理を行います。そして、データベースを再度バックアップします。 A-24 操 作 ガ イ ド ダイアレクト 3 へのデータベースの移行 2 isql -x を使用して、データベースからメタデータを抽出します。GDML を含んだレガ シーデータベースを移行する場合は、A-30 ページの「古いデータベースの移行」を参 照してください。 3 スクリプトファイルとして使用する空のテキストファイルを作成します。メタデータ ファイル内のデータ構造を修正するときに、データ構造をこのファイルにコピーして新 しいスクリプトを作成します。 メモ: 上記の作業のかわりに、変更のない SQL 文を元のメタデータファイルから削除 して済ませることもできますが、誤りが残っている文が原因で問題が発生する可能性が 高くなります。Embarcadero では、元のデータベースに対して実行する必要がある文だ けを含んだ新しいスクリプトファイルを作成することをお勧めします。 残りの手順では、テキストエディタを使ってメタデータファイルとスクリプトファイルを 修正します。コピーした文を新しいスクリプトファイルにコピーします。このとき、依存エ ラーを防ぐために、文がメタデータファイル内と同じ順序になるようにします。 4 抽出したメタデータファイル内で二重引用符が使用されている箇所を検索します。二重 引用符は、トリガー、ストアドプロシージャ、ビュー、ドメイン、テーブル列のデフォ ルト、または制約内で使用されている可能性があります。文字列を区切っている二重引 用符をすべて単引用符に変更します。列レベルの制約または列のデフォルトが二重引用 符で囲まれていたすべてのテーブルをメモしておきます。 変更を加えたそれぞれの文をスクリプトファイルにコピーします。ただし、列レベルの 制約または列のデフォルト内でのみ二重引用符が使用されていた ALTER TABLE 文は コピーしてはなりません。 重要 トリガーまたはストアドプロシージャコードをコピーするときは、それに関連す る SET TERM 文も必ずコピーしてください。 引用符の中の引用符 文字列内部に単引用符または二重引用符を含めている場合は、 誤って変更を加えないように個別に検索と置換を行う必要があります。文字列内部の引 用符は、以下に示すように扱います。 表 A.6 文字列内部の引用符の処理 5 文字列 In "peg" mode 二重引用符で囲む場合: "In ""peg"" mode" 単引用符で囲む場合: 'In "peg" mode' 文字列: O'Reilly 二重引用符で囲む場合: "O'Reilly" 単引用符で囲む場合: 'O''Reilly' 新しいスクリプトファイル内で、TIMESTAMP データ型の出現箇所を検索します。ほ とんどの場合、6 より前のデータベースでは当該箇所に DATE データ型が使用されて いるはずです。これらの箇所それぞれに対して、ダイアレクト 3 のデータベースで TIME、TIMESTAMP、または DATE のいずれを使用するかを決定します。必要に応 じてデータ型を変更してください。 付録 A InterBase の移行 A-25 ダイアレクト 3 へのデータベースの移行 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 文を記述して、このスクリプトをデータベースに対して実行したときに各 ビューがドロップ後に再作成されるようにします。 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-29 ページの「NUMERIC および DECIMAL データ型の移行」に示す手順にしたがってください。 18 IBConsole または gfix を使ってデータベースを検証します。 A-26 操 作 ガ イ ド ダイアレクト 3 へのデータベースの移行 これで作業は終わりです。ダイアレクト 3 データベースを使用できるようになりました。9 桁を超える有効桁数を持つ NUMERIC および DECIMAL 列を INT64 型として格納する 場合は、もう少し作業が必要です。現時点では、これらの列は DOUBLE PRECISION 型 として格納されます。これらの列のデータ型を変更した方がよいかどうかについては、A-28 ページの「NUMERIC および DECIMAL データ型をほんとうに移行する必要があるか ?」 および A-29 ページの「NUMERIC および DECIMAL データ型の移行」を参照してくだ さい。 これ以外にも、 「列デフォルトと列制約」および「名前なしテーブル制約」で説明する作業 があります。 重要 前述の手順によって作成したダイアレクト 3 のデータベースからメタデータを抽出し、そ のメタデータを使って新しいデータベースを作成する場合は、抽出したメタデータの中の 列デフォルト、列制約、または名前なしテーブル制約内に文字列定数を区切る二重引用符 が含まれていないことを確認してください。そのような二重引用符が見つかった場合は、そ のメタデータを使って新しいデータベースを作成する前に、すべて単引用符に変更してく ださい。 列デフォルトと列制約 前述の手順では、列デフォルト、列制約、および名前なしテーブル制約内の二重引用符で 囲まれた文字列定数をそのまま使用し続けました。これは、作成された文字列定数がバイナ リ形式で保存されるといる理由から可能なことです。 前述の手順にしたがうと、完全に機能するダイアレクト 3 のデータベースが作成されます。 ただし、列デフォルト、列制約、または名前なしテーブル制約内に二重引用符で囲まれた 文字列定数が含まれている場合は、メタデータに対して SHOW を実行したりメタデータを 抽出したときに不整合が見つかります。このような不整合は、以下の操作で解決することが できます。 1 2 データベースをバックアップします。 メタデータを調べて、二重引用符が使用されている列デフォルトまたは列制約を探し出 します。 3 ALTER TABLE 文の ALTER COLUMN 句を使用して、影響を受けるそれぞれの列に 一時的な名前を付けます。列の位置がクライアントにおいて問題となる可能性がある場 合は、その位置も変更します。 4 目的のデータ型を持つ新しい列を作成し、元の列と同じ列名および位置を指定します。 5 UPDATE を使用して、古い列から新しい列にデータをコピーします。 UPDATE table_name SET new_col = old_col; 6 古い列を削除します。 名前なしテーブル制約 A-27 ページの「列デフォルトと列制約」の最初の 2 つの段落を読んで、制約に含まれてい る二重引用符を必ずしも単引用符に変える必要がないという点とともに、変更する必要性 を理解してください。 付録 A InterBase の移行 A-27 ダイアレクト 3 へのデータベースの移行 二重引用符を含んでいる名前なしテーブル制約をダイアレクト 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')); 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 型を使用するのが適切か ? A-28 操 作 ガ イ ド ダイアレクト 3 へのデータベースの移行 • 多くのケースにおいて、その答えは「はい」です。データを継続して 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 データベースにあるかどうかを検討してください。そのような列 が存在する場合は、それぞれの列に対して次の手順を行います。 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 に移行していない場合は、まずその移 行処理を行います。そして、データベースを再度バックアップします。 付録 A InterBase の移行 A-29 ダイアレクト 3 へのデータベースの移行 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 お よび 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-29 ページの「NUMERIC および DECIMAL データ型の移行」に示す手順にしたがってください。 古いデータベースの移行 GDML で作成されたデータ構造を含んでいるレガシーデータベースの場合は、これまでの 説明とはやや異なる方法でメタデータを抽出しなければならないことがあります。 1 前の節の手順 2 に説明した方法でメタデータを抽出し、テーブルおよびその他の DDL 構造がすべてあるかどうかを調べます。欠落があった場合は、そのメタデータファイル を削除します。-x スイッチのかわりに -a スイッチを使って再度抽出を行います。これ により、GDML で作成されたオブジェクトが抽出されます。 A-30 操 作 ガ イ ド クライアントの移行 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"); クライアントの移行 古いクライアントアプリケーションを 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 呼び出しは含まれていません。 付録 A InterBase の移行 A-31 他の DBMS 製品からの移行 • InterBase 6 のダイアレクト 3 の機能を利用する埋め込み SQL アプリケーションを作成す るには、gpre -sql_dialect 3 を使ってコンパイルを行います。 表 A.7 クライアントの移行: まとめ クライアント 移行方法 InterBase バージョン 5 アプリ • ダイアレクトは 1 です。ダイアレクトを変更する方法は ケーションなどの古いアプリ ケーション ありません。 • バージョン 5 のクライアントアプリケーションは、当該 クライアントが存在するコンピュータ上に InterBase 6 ク ライアントがインストールされると、バージョン 6 のダ イアレクト 1 クライアントとなります。 isql • 次のコマンドラインオプションを使用します。 -sql_dialect n • または、次のコマンドを実行します。 SET SQL DIALECT n; GPRE • コマンドラインオプションを使用します。 -sql_dialect n • または、次のコマンドを実行します。 EXEC SQL SET SQL DIALECT n; 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 の特性の数的制限を示します。次の表に示されている値は、設計 上の制限です。通常、これらの値は、オペレーティングシステムまたはコンピュータハー ドウェアのリソースによってさらに制限されます。 付録 B InterBase の制限 B-1 InterBase の制限 InterBase の制限 表 B.1 InterBase の仕様 特性 値 1 つのサーバーに接続できる InterBase サーバーがサービスを提供できるクライアントの最大数を クライアントの最大数 一意に決定することはできません。これは、オペレーティングシステ ムの機能、ハードウェアの制限、各クライアントによるサーバーへの 要求など、複数の要因によって決定されます。アプリケーションの競 合レベルが高い場合や複雑または大量の処理を行う場合は、クライア ントの実質的な数が減少する可能性があります。大きな競合が発生し ないアプリケーションの場合、InterBase は多数のユーザーをサポート できますが、その数を明確に定義することはできません。 データベースの最大サイズ InterBase による制限はありません。最大サイズは、オペレーティ ング システムによって規定されます。 上限はデータベースのページ サイズによって決まります。 • ページ サイズが 1 KB の場合:DB の最大サイズは 2 TB • ページ サイズが 2 KB の場合:DB の最大サイズは 4 TB • ページ サイズが 4 KB の場合:DB の最大サイズは 8 TB • ページ サイズが 8 KB の場合:DB の最大サイズは 16 TB • ページ サイズが 16 KB の場合:DB の最大サイズは 32 TB データベースごとのファイル の最大数 設計上は 216(65,536)です。これは、符合なし 16 ビット整数を使っ てファイルが列挙されるためです。シャドウファイルの数もこの制限 に含まれます これは、InterBase の設計上のパラメータです。ただし、多くのオペ レーティングシステムでは、1 つのプロセスが同時に開くことができ るファイルの数の制限の方がかなり小さくなっています。OS によっ ては、この制限を上げる方法が用意されている場合もあります。一度 に開くことができるファイルのデフォルト数、およびその制限値を上 げる方法については、OS のマニュアルを参照してください データベースごとのキャッ シュ ページの最大数 750,000。32 ビット アドレス空間では、データベース ページ サイ ズによってはこの上限まで使用できない可能性があります。サイ ズの大きいキャッシュを使用する場合には、同時にメモリを使用 する接続やステートメントや他のデータベースの数など、さまざ まな事柄を考慮する必要があります。キャッシュ サイズを大きく できるかどうかは、32 ビット実行可能ファイルが 64 ビット OS で 動いているかどうかや、32 ビット OS がどう構成されているかに 依存します。 この数は、システム メモリや、OS、InterBase のバージョン、DB ページ サイズによって変わります。 • 32 ビット版 InterBase の場合は 750,000 ページ • 64 ビット版 InterBase の場合は 7,500,000 ページ 1 つのトランザクションで開く 制限なし。トランザクションパラメータバッファ内のパラメータは、 ことができるデータベースの 最大数 リンクリストからなります。そのため、システムリソースによる制限 以外の制限はありません データベースごとのテーブル の最大数 32,640 B-2 操 作 ガ イ ド InterBase の制限 表 B.1 InterBase の仕様 特性 値 テーブルの最大サイズ 上限はデータベースのページ サイズに左右されます。全テーブル の合計サイズがデータベースの最大サイズを上回ってはなりませ ん。 • ページ サイズが 1 KB の場合:テーブルの最大サイズは 2 TB • ページ サイズが 2 KB の場合:テーブルの最大サイズは 4 TB • ページ サイズが 4 KB の場合:テーブルの最大サイズは 8 TB • ページ サイズが 8 KB の場合:テーブルの最大サイズは 16 TB • ページ サイズが 16 KB の場合:テーブルの最大サイズは 32 TB テーブルごとの最大バージョ ン数 255:データベースをバックアップして復元するまで、255 を超える 変更をメタデータに加えることはできません 行の最大サイズ 64KB. 各 BLOB と配列は、この制限のうち 8 バイトを BLOB ハンド ルとして使用します システムテーブル(InterBase エンジンによって維持されている、シス テムデータのテーブル)には、128KB の行サイズ制限があります テーブルごとの最大行数と最 大列数 設計上は 232 行です。これは、テーブルごとに 1 つの符合なし 32 ビット整数を使って行が数えられるためです。1 行の中の列数は、 使われているデータ型によって変わります。1 行は最大 64 KB で す。たとえば、INTEGER 型の列(1 列が 4 バイト)であれば、1 つのテーブルに 16,384 列を定義できます。 行の特性や圧縮方法にもよりますが、最大サイズのテーブルに格 納できる最大数の行を持つことが可能です。行番号の最大値は 2**38 - 1(274,877,906,943)です。 テーブルごとの最大インデッ クス数 設計上は、1 つのテーブルに 64 を超える数のインデックスを作成 することはできません。 インデックスの定義や DB ページ サイズによって変化しますが、 最大でも 64 個です。DB ページ サイズが小さいよりも大きい方 が、必ず多くのインデックスを定義できます。 データベースごとの最大イン デックス数 設計上は 232 です。これは、データベースごとに 216 個のテーブル を作成でき、各テーブルに 216 個のインデックスを作成できるため です。 テーブルの最大数 x テーブルごとの最大インデックス数で、次の ように計算できます。 32,640 x 64 = 2,089,960 付録 B InterBase の制限 B-3 InterBase の制限 表 B.1 InterBase の仕様 特性 値 インデックス キーの最大サイ ズ ODS 15 データベースでは、インデックス キーのサイズの上限が 引き上げられています。列がシングルバイト文字セットかマルチ バイト文字セット(UTF8 など)かを問わず、サイズの大きい列 データでこの機能を使用できるようになりました。 InterBase XE では、UTF8 やその他複数のマルチバイト文字セッ トをサポートしているため、上限が引き上げられました。たとえ ば、4 バイトの UTF8 文字を使用しているシングルカラム キーで あれば、4 KB のページ サイズで 1020/4 = 254 個の UTF8 文字が 使える計算になります。 • ODS 15 データベースでは、自動的にインデックス定義を行うこ とができ、そのキー サイズはデータベース ページ サイズに左右 されます。インデックス キーは、最大で、ページ サイズの 1/4 から 4 バイトを引いたサイズにできるようになりました。 • InterBase データベースは、デフォルトでは 4 KB のページ サイ ズで作成されます。データベース開発者は、この値をオーバー ライドして、ページ サイズを最大 16 KB まで増やすことができ ます。 • ページ サイズが 4 KB のデータベースでは、キーごとの最大サ イズが 1020 バイトのインデックスを作成できます。 • ページ サイズが 16 KB なら キーごとの最大サイズは 4092 バイ トになりますし、他の場合も同様に計算できます。 注意:この機能が有効なエンジンで作成したデータベースは、古 いバージョンの InterBase に戻すことができません。 また、ページ サイズを小さくしてデータベースを復元しようとし た場合に、キー サイズの大きいインデックスが上記で指定された 上限に収まらなければ、処理は失敗します。 この機能を有効にするためのユーザー インターフェイスはありま せんし、ユーザーが行わなければならない作業もありません。 データベースの復元を行うたびに、インデックスも再作成されま す。 ODS 15 以降のデータベースだけが、サイズの大きいインデックス キーをサポートしています。この機能を使用するには、データ ベースを ODS 15 に復元してください。252 バイトより小さいサ イズの他のインデックスは、ディスク上の格納方法が変わらない ため、不利益はありません。 マルチバイト文字セットの場合、文字数ではなくバイト数がキー の最大サイズ以下でなければなりません。 インデックス キーはできるだけ小さくすることをお勧めします。 インデックスの階層レベルを制限でき、効率を高められるからで す。 ストアドプロシージャごとの イベントの最大数 設計上の制限はありませんが、ストアドプロシージャまたはトリガー 内のコードの長さに制限がある場合は、実質的に制限されます(下記 を参照) ストアドプロシージャまたは トリガーの最大コードサイズ 48KB の BLR。BLR は、ストアドプロシージャまたはトリガー言語 からコンパイルされたバイトコード言語です 最大 BLOB サイズ 1 つの BLOB の最大サイズは、データベースのページサイズによって 異なります。 ページサイズが 1KB の場合:最大 BLOB は 64MB ページサイズが 2KB の場合:最大 BLOB は 512MB ページサイズが 4KB の場合:最大 BLOB は 4GB ページサイズが 8KB の場合:最大 BLOB は 32GB BLOB は、多数のセグメントのストリームです。BLOB セグメントの 最大サイズは 64KB です B-4 操 作 ガ イ ド InterBase の制限 表 B.1 InterBase の仕様 特性 値 JOIN における最大テーブル数 設計上の制限はありません。ただし、結合するテーブルの数が増える にしたがい、テーブルの結合タスクは指数的に増えていきます JOIN で結合できるテーブルの実質的な最大数は約 16 です。ただし、 許容できるパフォーマンスの範囲で結合できるテーブルの最大数に ついては、実際のアプリケーションと実用的な量のデータを使って確 認してください ネストされたクエリーの 最高レベル 設計上の制限はありません 連結インデックスごとの最大 列数 16 ストアドプロシージャまたは トリガーごとのネストのレベ ル • Window プラットフォームでは 750 • UNIX プラットフォームでは 1000 SORT 句のキーの最大サイズ 32KB 外部テーブル ファイルの 最大サイズ 64 ビット ファイル オフセットは、最大 16 エクサバイトまで情報を 保持できます。 日付値の範囲 西暦 100 年 1 月 1 日~西暦 32768 年 2 月 29 日 実質的な制限は、ネストするクエリーの種類によって異なります。許 容できるパフォーマンスの範囲におけるクエリーの最大ネスト数に ついては、実際のアプリケーションと実用的な量のデータを使って確 認してください 付録 B InterBase の制限 B-5 InterBase の制限 B-6 操 作 ガ イ ド 索引 数値 2 相コミット 7-34, 8-28 A ADMIN_DB 6-3 AUTO モード 7-17 Average data length(インデックスページ)10-11 fill(データページ)10-7 B blindmeta.sql 6-8 BLOB データ ID 番号 , 抽出 11-29 アクセス時間の短縮 8-33 セグメントサイズ 12-17 編集 11-29 保存 11-29 BLOB フィルタ 11-47 BLOBDUMP 11-29 について 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, 1011 G gbak コマンド エラー メッセージ 8-19 概要 8-4 バックアップと復元を行う 8-4 gfix エラー 7-41 コマンド 7-38 ~ 7-40 シャドウの起動 7-18 シャドウの削除 7-18 C CHECK 制約 11-45, 11-46 COMMIT 11-25, 11-57 CONNECT 11-24 CREATE DATABASE 11-22, 11-24 CREATE JOURNAL ARCHIVE コマンド について 9-9 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-48 DML 11-27 処理 11-20 DROP JOURNAL ARCHIVE コマンド 9-10 DROP JOURNAL コマンド gsec 6-15 ~ 6-19 エラー 6-20 エントリの変更 6-19 オプション 6-17 起動 6-16, 6-19 項目の削除 6-19 コマンド 6-16 ~ 6-19 終了 6-16 ヘルプ 6-17 ユーザーの追加 6-17 ~ 6-18 リモートでの実行 6-16 gsplit 1-8 gstat 10-13 Guardian 4-1, 4-10, A-21, A-22 I ibconfig 4-18, 4-19 IBConsole SQL 文の実行 11-7, 11-12 新しい接続の拒否 7-32 キャラクタセット 11-14 コミットとロールバック 11-11 再起動 , データベース 7-34 ジャーナル機能の有効化 9-7 索引 I-1 スクリプトファイル , コメントの追加 11-58 セキュリティ 6-12 抽出 , メタデータ 11-19 ツール バー 3-4 ツリー ペイン 3-5 データベースの状態の表示 10-5 バックアップと復元を行う 8-24 保存 , ISQL の入力と出力 11-12 メタデータの表示 11-17 ワーク ペイン 3-7 ibguard 4-10 Implementation ID(ヘッダーページ)10-10 Index root page(データページ)10-7 INPUT 11-31 INPUT コマンド 11-31 InterBase API, ユーザー管理 6-15 Guardian 4-1, 4-10, A-21, A-22 IBX でのデータベースアプリケーション開 発 12-22 UNIX 4-10 バージョン番号 11-23, 11-55 ISC4.GDB 6-15 内容の表示 6-17, 6-19, 8-18 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-58 接続 , データベース 11-24 ターミネータ文字 11-21, 11-23 データベースの指定 11-21 入力と出力の保存 11-12 ヘルプの表示 11-31 編集 11-30 isql スクリプト →「SQL スクリプト」 ISQL スクリプトのコメント 11-58 L Leaf buckets(インデックスページ)10-11 limbo トランザクション 2 相コミット 7-34 無視 8-6, 8-28 I-2 操 作 ガ イ ド M MANUAL モード 7-18 Max dup(インデックスページ)10-11 N Next connection ID(ヘッダーページ)10-9 header page(ヘッダーページ)10-10 transaction(ヘッダーページ)10-9 Nodes(インデックスページ)10-11 Number of cache buffers(ヘッダーページ)10-10 O ODS オンディスク構造体を参照 Oldest active(ヘッダーページ)10-9 transaction(ヘッダーページ)10-9 OTW 暗号 5-10 設定 5-10 例 5-16 OUTPUT 11-32 P PLAN 12-22 PLAN オプション 11-13, 11-42 Primary pointer page(データページ)10-7 Q QUIT 11-33 EXIT と … 11-31 R RBD$ARCHIVE_NAMW 8-11, 9-12 RDB$ARCHIVE_LENGTH 9-12 RDB$ARCHIVE_SEQUENCE 9-12 RDB$ARCHIVE_TIMESTAMP 9-12 RDB$ARCHIVE_TYPE 9-12 RDB$DEPENDED_ON_SEQUENCE 9-12 RDB$DEPENDED_ON_TIMESTAMP 9-12 readmeta.sql 6-8 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-39 SET LIST 11-40 SET NAMES 11-41 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-10 SHELL 11-44 SHOW CHECK 11-45 SHOW DATABASE 7-16, 11-45 SHOW DOMAINS 11-46 SHOW EXCEPTIONS 11-47 SHOW FILTERS 11-47 SHOW FUNCTIONS 11-48 SHOW GENERATORS 11-49 SHOW GRANT 11-49 SHOW INDEX 11-50 SHOW PROCEDURES 11-51 SHOW SYSTEM 11-52 SHOW TABLES 11-53 SHOW TRIGGERS 11-54 SHOW VERSION 11-55 SHOW VIEWS 11-55 SMP サポート 4-3, 4-8 SQL スクリプト IBConsole での実行 11-8 isql による実行 11-31 作業のコミット 11-57 作成 11-56 実行 11-56 SQL スクリプトの実行 IBConsole での使用 11-8 SQL スクリプトの実行 →「SQL スクリプト」118 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-11 U Use all space(復元オプション)8-35 V version オンディスク構造体 10-9 番号 , 表示 11-23, 11-55 W Windows NT コマンド 11-44 Windows サーバープラットフォーム 1-2 writemeta.sql 6-8 あ アーカイブ サイズの管理 9-11 シーケンス番号 9-11 スイープ 9-11 アーカイブ ダンプの管理 9-10 アーカイブのスイープ 9-11 アクセス , データベース 6-2 ~ 6-12 アプリケーション開発 InterBase Express 12-22 い 一時システムテーブル 10-1 ~ 10-4 インクリメンタル バックアップ 概要 8-7 インターネット自動ダイヤルアップ 5-23 インデックス Depth(インデックスページ)10-11 重複した値の復元 8-35 取得 11-50 パフォーマンスの向上 8-33 ~ 8-34, 12-18 表示 11-27, 11-50 無効 8-15, 8-35 インデックスの無効 8-15, 8-35 う 埋め込みユーザー認証 8-15 復元する 8-14 埋め込みユーザー認証(EUA) について 6-5 ユーザーの追加と変更 6-7 有効化 6-5 え エコー 11-22 エディタ 11-30 エラー gbak 8-20 gfix 7-41 gsec 6-20 isql 11-28 索引 I-3 接続拒否 5-21 接続不能 5-19, 5-24 お 置き換え , データベース 8-15, 8-34 オブジェクト 削除 11-51 表示 11-51 オペレーティングシステムのシェル 11-44 オンディスク構造体 gfix 7-38 ~ 7-40 gsec 6-16 ~ 6-19 isql 11-27 ~ 11-28 実行 11-7, 11-8, 11-31 表示 11-31, 11-33 編集 11-30 コミット AUTO 11-14, 11-22 テーブルごとのコミット 8-15, 8-34 version 10-9 さ アップグレード 8-4 サーバー か 外部テーブル 7-3, 7-4 ガベージコレクション , 無効にする 8-27 環境 , isql 11-27 き 起動 gsec 6-16, 6-19 InterBase Guardian 4-9 InterBase Server 4-9 isql 11-21, 11-24 キャッシュ gsec エントリ 6-19 キャラクタセット 11-8 データベースのページサイズ 8-15, 8-33 ユーザー名 6-19 キャッシュバッファ , 数 7-25, 10-10 キャラクタセット , 変更 11-8, 11-14 強制書き込みとバッファ書き込み 7-27 共有ディスク , ノード名と … 11-24 く クエリー 11-20 検査 12-25 プランの表示 11-13, 11-41 クライアントのダイアレクト 11-2, 11-24 グローバルヘッダー情報 10-16 け 警告 11-23 継続プロンプト 11-21 検査 データベース接続 5-26 検証 , データベース 7-28 ~ 7-31, 7-40 こ コマンド 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-14, 6-15 作成 シャドウ 7-15 ~ 7-18, 8-34 条件付きシャドウ 7-18 データベース 7-9 マルチファイルデータベース 7-5 し ジェネレータ , 表示 11-18, 11-49 システム エディタ 11-30 シェル 11-44 テーブル 11-52 ビュー 11-52 システムテーブルのセキュリティ 6-8 自動コミット , DDL 文 11-14, 11-22 ジャーナル アーカイブ について 9-1 ジャーナル アーカイブ機能 アーカイブ サイズの管理 9-11 後続のダンプ 9-10 実装 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-6 作成 9-3 事前割り当てジャーナル領域について 9-5 チェックポイント、について 9-2 チェックポイント間隔、ヒント 9-6 について 9-1 無効化 9-8 ジャーナル ファイルのアーカイブの作成 使用コマンド 9-9 頻度 9-10 ジャーナル ファイルの無効化 9-8 シャットダウン , データベース 新しい接続の拒否 7-32, 7-33 タイムアウトオプション 7-32 タイムアウト後の強制シャットダウン 7-34, 7- 38 シャドウ AUTO モード 7-17 MANUAL モード 7-18 概要 7-14 ~ 7-15 削除 7-18, 7-19 作成 7-15 ~ 7-18, 8-34 条件付き 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-29, 8-36 ファイル 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-29, 8-36 シリアル番号 2-1 信頼されたホスト 6-3 す スイープ , データベース 7-22 ~ 7-24, 7-39 スイープ間隔 7-23 即時スイープ 7-24, 7-40 バックアップ中のスイープの抑制 8-27 無効にする 7-24 スクリプト →「SQL スクリプト」 ステータス情報 gstat 10-13 IBConsole 10-5 表示 11-42 せ 制約 11-45, 11-46 セキュリティ IBConsole 6-12 権限を表示 11-49 データベース 6-11 ユーザー設定の変更 6-14, 6-19 ユーザーの削除 6-14, 6-19 ユーザーの追加 6-13, 6-17 セキュリティデータベース 6-1 名前 6-3 接続 監視 10-1, 10-4 拒否 7-32 データベース 11-24 リモートサーバー 5-3, 5-26, 11-22, 11-23, 11- 24 接続 , データベース 5-7 ~ 5-9 新しい接続の拒否 7-32 トラブルシューティング 5-19 ~ 5-24 接続の監視 10-1 ~ 10-4 設定パラメータ 4-19 そ 損傷データ 修復 7-30 チェックサムを無視してバックアップ 8-6, 8- 28 た ターミネータ文字 isql 11-21, 11-23 デフォルト 11-21 ダイアレクト 11-24 データベース 11-23 タイムスタンプ バックアップ ファイル 8-10 タイムスタンプ名 9-5 対話型 SQL →「isql」 索引 I-5 ち チェックサム header page(ヘッダーページ)10-9 無視 8-6, 8-28 チェックポイント 間隔の決定 9-6 について 9-2 チェックポイントの間隔 9-4 チェックポイントの長さ 9-4 抽出 DDL 11-22, 11-23 メタデータ 8-27, 11-19, 11-26, 11-27 つ ツール バー 3-4 追加 isql スクリプトでのコメント 11-58 シャドウファイル 7-19 データベースファイル 7-5 ユーザー 6-13, 6-17, 6-18 ツリー ペイン 3-5 て データベース Creation date(ヘッダーページ)10-10 gbak と gsplit 1-8 gstat 10-13 IBConsole 10-5 アクセス 6-2 ~ 6-12 新しい接続の拒否 7-32 インデックスの無効 8-35 上書き 8-15, 8-34 置き換え 8-15, 8-34 オンディスク構造体のアップグレード 8-4 検査 7-28 ~ 7-31, 7-40 構造 , 抽出 11-45 再起動 7-31, 7-34 削除 7-12 作成 7-9 シャットダウン 7-32 シャットダウンと再起動 7-31 シャドウイング 7-14 ~ 7-19, 8-34 修復 7-30 ~ 7-31 情報の表示 11-45 スイープ 7-22 ~ 7-24, 7-39 スイープ間隔 7-23 即時スイープ 7-24, 7-40 セキュリティ 6-11 接続 5-7 ~ 5-9 接続のテスト 5-26 抽出 , メタデータ 8-6, 8-27 登録 5-5 I-6 操 作 ガ イ ド 登録解除 5-9 閉じる 5-8, 11-31, 11-33 名前 6-3, 7-4 名前情報 10-9 バックアップ 8-4, 8-25 ファイルの追加 7-5 ファイル命名規則 7-4 ページサイズ 8-15, 8-33 ~ 8-34, 10-9 マルチファイル作成 7-5 メタデータの表示 11-17 有効性検証を無効にする 8-15, 8-35 読み取り専用 7-8, 7-39, 8-15 ロック 10-15 データベース管理 6-13 概要 1-6 セキュリティユーティリティ 6-15 ~ 6-19 ユーザーの追加 6-17 ユーザーの変更 6-14, 6-19 データベースダイアレクト 11-23 データベースの復元 IBConsole の使用 8-24 コマンド 8-14, 8-17 方法 8-14, 8-17 データベースの復旧 ジャーナル ファイルとジャーナル アーカイブ 機能の使用 9-10 データベース バックアップ IBConsole の使用 8-24 インクリメンタル 8-7 概要 8-1 タイプ 8-2 単一ファイル、概要 8-5 マルチファイル、概要 8-5 テーブル 制約 11-45, 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-19, 5-24 トランザクション 2 相コミット 7-34 DDL 11-25 isql 11-25 limbo トランザクションのロールバック 8-28 Oldest 10-9 Oldest active(ヘッダーページ)10-9 新しい接続の拒否 7-33 コミット 11-25, 11-31 ロールバック 11-25, 11-33 トリガー , リスト 11-27, 11-54 な 名前 データベース 6-3, 7-4 名前情報 10-9 に 入力ファイル 11-8, 11-22, 11-31 編集 11-44 ね ネットワーク設定 暗号化 5-10 ネットワーク通信 暗号化 5-10 ネットワーク通信の暗号化 5-10 設定 5-10 例 5-16 の ノード名 , 共有ディスクと … 11-24 は バイナリ データ 11-29 ファイル 11-29 パスワード 接続 , リモートサーバー 11-22 割り当て 6-13, 6-15, 6-17 バックアップ gbak の使用 8-4 インクリメンタル、概要 8-7 タイプ 8-2 単一ファイル 概要 8-5 マルチファイル、概要 8-5 バックアップ , データベース オプション 8-26 外部ファイルから内部テーブルに変換 8-6, 8- 29 スイープの抑制 8-27 メタデータのみ 8-6, 8-27 バックアップ オプション 概要 8-1 バックアップと復元オプション 概要 8-1 バックアップと復元ツール 8-2 バッチ関数 更新 11-11 使用 11-11 バッファ書き込みと強制書き込み 7-27 ひ ビュー , リスト 11-18, 11-55 表示 エラーメッセージ 11-33 オブジェクト 11-51 クエリープラン 11-13, 11-41 ステータス情報 11-42 バージョン番号 11-23 文 11-22 メタデータ 11-17, 11-27 ふ ファイル 書き込み 11-12, 11-22, 11-26 シャドウ 7-16, 7-19, 8-34 名前 6-3, 7-4 入力 11-8, 11-22 命名規則 7-4 フィルタ , 表示 11-18, 11-47 復元オプション 8-33 物理バックアップ 概要 8-2 プラットフォーム , サーバー 1-2 プロシージャ , リスト 11-20, 11-27, 11-51 文 ターミネータ文字 11-21, 11-23 表示 11-22 へ ページ キャッシュ 9-5 ページ サイズ 9-4 ページサイズ キャッシュ 8-15, 8-33 ~ 8-34 現在の … の表示 10-9 デフォルト 7-11 ヘッダーページの生成 10-9 ヘルプ gsec 6-17 IBConsole 3-3 InterBase 3-3 索引 I-7 ISQL コマンド 11-31 UNIX 4-11 編集 BLOB データ 11-29 isql コマンド 11-30 入力ファイル 11-44 ほ 保存 , ISQL の入力と出力 11-12 ま マルチファイルデータベース 7-5 マルチプロセッサのサポート 4-3, 4-8 む 削除 6-14 追加 6-15, 6-17, 6-18 有効性チェックを無効にする 8-35 よ 読み取り専用データベース 7-8, 7-39, 8-15 ら ライセンス管理 オプション 2-1 について 2-1 ライセンス マネージャの使用 2-4 ライセンス マネージャ 概要 2-4 使用 2-4 無効にする ガベージコレクション 8-27 有効性チェック 8-15, 8-35 無視 limbo トランザクション 8-6, 8-28 チェックサム 8-6, 8-28 り め 例外 11-47 列ヘッダー , ページの長さの変更 11-22 メタデータ IBConsole による 11-17 コマンドライン ISQL 11-20 抽出 8-27, 11-19, 11-26, 11-27 表示 11-17, 11-27 ゆ ユーザー管理 6-15 ユーザー定義関数 表示 11-48 リスト 11-18, 11-48 ユーザー名 11-23 UNIX 6-3 キャッシュ 6-19 I-8 操 作 ガ イ ド リモートサーバー , 接続 5-3, 5-26, 11-22, 11-23, 11-24 れ ろ ログ先行書き込み 9-1 ロック 10-15 テーブル 10-16 マネージャ 10-15 論理バックアップ 概要 8-2 わ ワーク ペイン 3-7 割り当て , パスワード 6-13, 6-15, 6-17
© Copyright 2024 Paperzz