コンテンツにスキップ

DATABASE

Machbase 8.7.0 Standard Editionの論理データベースのライフサイクルとセッション選択の構文です。 データベース名はカタログ名であり、サーバーインスタンスの物理ストレージを管理するmachadmin -cmachadmin -dとは区別します。

CREATE DATABASE

create_database_stmt ::=
    'CREATE DATABASE' ['IF NOT EXISTS'] database_name

CREATE DATABASEは、現在のMachbaseインスタンスにアクティブな論理データベースを作成します。 新しいデータベースのデフォルトのアクセスモードはREAD WRITEです。 ユーザーと認証情報はインスタンス全体で共有され、テーブル・ビュー・インデックスとオブジェクト権限はデータベースごとに管理されます。

CREATE DATABASE factory_a;
CREATE DATABASE IF NOT EXISTS factory_b;

ALTER DATABASE

alter_database_stmt ::=
    'ALTER DATABASE' database_name ( 'READ ONLY' | 'READ WRITE' )

READ ONLYデータベースは検索できますが、書き込みDML、Append、変更DDLは実行できません。 実行中の書き込みを終了してからモードを変更してください。

ALTER DATABASE factory_a READ ONLY;
ALTER DATABASE factory_a READ WRITE;

DROP DATABASE

drop_database_stmt ::=
    'DROP DATABASE' ['IF EXISTS'] database_name
    [ 'RESTRICT' | 'CASCADE' | 'FORCE' | 'CASCADE FORCE' | 'FORCE CASCADE' ]
  • RESTRICTは、オブジェクトや使用中の参照がある場合は削除しません。
  • CASCADEは、対象データベースのオブジェクト、メタデータ、データベースローカルの権限を削除します。
  • FORCEは、終了可能なセッション、ステートメント、カーソル、ジョブの参照を終了してから削除を進めます。
  • オブジェクトと参照を両方削除する場合は、CASCADE FORCEを使用します。

デフォルトのデータベースMACHBASEDBは削除できません。 現在のセッションのデータベースも削除できないため、先にUSE MACHBASEDBまたは別のアクティブなデータベースへのUSEを実行する必要があります。

USE

use_database_stmt ::= 'USE' ['DATABASE'] database_name

USEUSE DATABASEは同じ動作です。現在のセッションのデータベースだけを変更し、他の接続には影響しません。 トランザクションの進行中、または対象がマウントされたデータベースの場合は失敗します。

USE factory_a;
USE DATABASE factory_b;

現在のデータベースの確認

SELECT CURRENT_DATABASE();
SELECT DATABASE();
SELECT CURRENT_CATALOG;
SHOW CURRENT DATABASE;
SHOW DATABASES;

推奨する確認方法はCURRENT_DATABASE()です。 クライアントの接続オプションで初期データベースを指定していても、接続直後にこの値を確認し、実際のサーバーカタログを検証してください。

オブジェクト名

テーブル・ビューとDMLの対象は、次の形式で指定できます。

table_name                         -- 現在のデータベース、現在のユーザー
owner.table_name                   -- 現在のデータベース、指定した所有者
database_name.owner.table_name    -- 指定したデータベース、指定した所有者

2部構成の名前は常にowner.tableです。 したがって、factory_a.sensor_logはデータベースとテーブルの2部構成の名前とは解釈されません。 別のデータベースを明示するには、factory_a.sys.sensor_logのように3部構成を使用します。

SELECT * FROM factory_a.sys.sensor_log;
INSERT INTO factory_b.app.orders VALUES (1, 'ready');

別のデータベースを直接参照するには、対象データベースのCONNECTと対象テーブルの必要なDML権限が両方必要です。 インデックス名、LOAD DATAの対象などは、各構文の修飾子の制約に従います。

権限構文とデータベース範囲

データベース権限とテーブル権限は別です。基本形式は次のとおりです。

GRANT CONNECT ON DATABASE factory_a TO app_a;
GRANT CREATE, ALTER ON DATABASE factory_a TO deployer;
GRANT SELECT, INSERT ON TABLE factory_a.sys.sensor_log TO app_a;
REVOKE CONNECT ON DATABASE factory_a FROM app_a;

マウントされたデータベースを検索するには、対象データベースのUSAGEとテーブルのSELECTが両方必要です。 MOUNT DATABASEUMOUNT DATABASEを実行する運用権限は、USER/AUTH構文複数データベースの運用ガイドを参照してください。

BACKUP/RESTOREとの関係

論理データベースのバックアップ・リストア構文は、BACKUP / RESTORE / MOUNTにまとめています。 単一のアクティブカタログを対象とした名前付きバックアップだけを、論理MOUNTまたはRESTOREの入力に使用できます。 複数のアクティブデータベースを含むインスタンス全体のイメージは、論理カタログとしてマウント・リストアできません。

最終更新日