13.2 複数データベース
Standard Edition では、1つのサーバー内に複数の論理データベースを作成し、オブジェクトとアクセス権限を 分離できます。このページでは導入と運用の流れを説明します。SQL 構文、権限、SDK オプション、 バックアップ手順は、リンク先の詳細文書を参照してください。
適用範囲
- 複数データベースは Standard Edition の機能です。
- 論理データベースは、独立したサーバープロセスやリソース割り当て枠を作りません。
- オブジェクト名は
object、owner.object、database.owner.objectの最大3部分です。 - 別データベースを指定する場合、所有者を省略しないでください。
- マウントされたデータベースは、アクティブなデータベースとは別の、読み取り専用バックアップ参照経路です。
導入前の決定事項
- データベースごとの所有者とアプリケーションユーザーを決めます。
CONNECTとオブジェクト単位の最小権限を定義します。- 接続プールによる現在のデータベースの初期化・復元方法を確認します。
- バックアップ単位、復旧順序、マウント名の規則を決めます。
- データベース別の使用量と障害を区別する監視基準を用意します。
簡単な検証
次の例では、2つのデータベースが分離されることを確認し、最後に両方を削除します。
CREATE DATABASE IF NOT EXISTS manual_multidb_a;
CREATE DATABASE IF NOT EXISTS manual_multidb_b;
USE manual_multidb_a;
CREATE LOG TABLE sensor_event (
event_time DATETIME,
message VARCHAR(100)
);
INSERT INTO sensor_event VALUES (SYSDATE, 'from-a');
USE manual_multidb_b;
CREATE LOG TABLE sensor_event (
event_time DATETIME,
message VARCHAR(100)
);
INSERT INTO sensor_event VALUES (SYSDATE, 'from-b');
SELECT message FROM manual_multidb_a.SYS.sensor_event;
SELECT message FROM manual_multidb_b.SYS.sensor_event;
USE MACHBASEDB;
DROP DATABASE manual_multidb_a CASCADE FORCE;
DROP DATABASE manual_multidb_b CASCADE FORCE;USE database_name は現在の接続のデータベースを変更します。トランザクション、開いたカーソル、
プリペアドステートメント(prepared statement)、Appender がある状態では切り替えないでください。
別のデータベースのオブジェクトは database.owner.object で指定します。
権限の境界
ユーザーには、対象データベースの CONNECT と、実際のオブジェクト操作に必要な権限の両方が必要です。
データベースの作成・削除・権限管理 SQL はアカウントと権限
を参照してください。運用アカウントへ管理者権限を一括付与しないでください。
アプリケーションの接続
初期データベースのオプション名と接続プールの初期化動作は SDK ごとに異なります。各 SDK の 接続文書でサポートを確認し、接続を借りた直後に次の値を検証します。
SELECT CURRENT_DATABASE();言語別設定は開発とアプリケーション連携、 サーバー・SDK の互換性はサーバーと SDK の互換性 を参照してください。
バックアップと復旧
バックアップ前に、含めるアクティブデータベースと復旧順序を記録します。マウントされたデータベースにも
USE は可能ですが、読み取り専用(read-only)で SELECT だけを実行できます。
正確なコマンドと検証手順はバックアップ・リストア・マウントを参照してください。
運用チェックリスト
- 接続直後と接続プールの再利用直後に
CURRENT_DATABASE()が期待値を返すか。 - SQL と監視が、異なるデータベースの同名オブジェクトを混同していないか。
- ユーザーには対象データベースとオブジェクトの必要最小限の権限だけを付与したか。
- バックアップ・復旧訓練で全対象データベースを確認したか。
- データベース削除前に、開いた接続、オブジェクト、バックアップの保持条件を確認したか。
正確な CREATE/DROP/USE DATABASE 構文は
DATABASE 構文を参照してください。