AI can fly !!

AI がやりたい Web エンジニアのアウトプット (AI の知識は無い)

【Oracle Database 19c】データベース (CDB と PDB) への接続と各種操作【SQL*Plus】

ORACLE Database 19c

はじめに

自宅で Oracle Database 19c を使用していて、 SQL*Plus でのデータベース接続や起動と停止方法をいつも忘れてググっているので、せっかくなのでまとめて記事にしてみました。

EM Express (Oracle Enterprise Manager Database Express) を使用すれば GUI で各種操作を行うことができますが、今回は CLI (SQL*Plus) での操作に限定してまとめています。

動作環境

OS Version
Windows 10 Pro 1909
Application Version
PowerShell 5.1.18362.752
Database Version
Oracle Database 19c 19.3.0

SQL*Plus の起動

sqlplus /nolog

データベースには接続せず、 SQL*Plus のみを起動します。

SQLPlus の起動と同時にデータベースへ接続することも可能ですが、 CLI のコマンド履歴にユーザとパスワードが残る可能性があるので、セキュリティの観点から言えば、 SQLPlus 起動後に CONNECT コマンドでデータベース接続することをお勧めします。

データベース接続

SQL*Plus 起動後、 CONNECT コマンドでデータベースへ接続します。

ローカル接続

-- ユーザ権限
CONNECT [username]/[password]

-- SYSDBA 権限
CONNECT [username]/[password] AS SYSDBA

ローカル接続では、 OS の環境変数 (ORACLE_SID) に登録されているデータベースに接続されます。

簡易接続ネーミング・メソッド

-- ユーザ権限
CONNECT [username]/[password]@[host]:[port]/[service_name]

-- SYSDBA 権限
CONNECT [username]/[password]@[host]:[port]/[service_name] AS SYSDBA

サービス名 (service_name) には、初期化パラメータ・ファイルの SERVICE_NAMES (= DB_UNIQUE_NAME.DB_DOMAIN) を入力します。

PDB に接続する場合のサービス名 (service_name) は、 pdb_name.DB_DOMAIN になります。

ローカル・ネーミング・メソッド

-- ユーザ権限
CONNECT [username]/[password]@[net_service_name]

-- SYSDBA 権限
CONNECT [username]/[password]@[net_service_name] AS SYSDBA

ローカル・ネーミング・メソッドを使用する場合、ネットワーク・サービス名 (net_service_name) を tnsnames.ora ファイルに追加する必要があります。

データベース起動

CDB

CDB の起動は SYSDBA または SYSOPER 権限を持つユーザで行う必要があります。

STARTUP [OPEN [db_name] | MOUNT [db_name] | NOMOUNT]

STARTUPSTARTUP MOUNT コマンドで [db_name] を省略した場合、初期化パラメータ・ファイルの DB_NAME のデータベース名が使用されます。

  • OPNE
    • Oracle インスタンスを起動し、データベースをマウントして、オープンする
    • オンライン REDO ログ・ファイル、およびデータファイルが開かれ、データへのアクセスが可能になる
  • MOUNT
    • Oracle インスタンスを起動し、データベースをマウントするが、オープンはしない
    • Oracle インスタンスによってデータベースの制御ファイルが開かれるが、データファイルは開かない
  • NOMOUNT

PDB

PDB の起動は SYSDBASYSOPERSYSBACKUPSYSDG 権限のいずれかを持つユーザが、 CDB に接続した状態で行う必要があります。

ALTER PLUGGABLE DATABASE [ALL | [pdb_name]] OPEN [READ WRITE | READ ONLY];

-- または

STARTUP PLUGGABLE DATABASE [pdb_name] OPEN [READ WRITE | READ ONLY]
  • READ WRITE
    • 読取り/書込みモードで PDB をオープンする
  • READ ONRY
    • 読取り専用モードで PDB をオープンする

オープン・モードを省略した場合は、 READ WRITE が指定されます。

STARTUP PLUGGABLE DATABASE コマンドは、単一の PDB をオープンすることができます。

PDB自動起動 (CDB 再起動時の PDB の オープン・モード の保持)

ALTER PLUGGABLE DATABASE [ALL | [pdb_name]] SAVE STATE;

通常、 CDB 再起動 (通常起動) 時の PDBOPEN_MODE (オープン・モード) は MOUNTED (マウント・モード) ですが、 OPEN_MODE を保持させると、次回 CDB 起動時の PDBOPEN_MODE を CDB 再起動前と同じ状態にすることができます。

つまり、 PDBOPEN_MODEREAD WRITE (読取り/書込みモード) で上記 SQL を実行すると、次回 CDB 起動時も PDBOPEN_MODEREAD WRITE となり、 CDB の起動の度に PDB をオープンする必要が無くなります。

ちなみに、オープン・モードの保持をやめる場合は、 SAVE STATE ではなく DISCARD STATE を指定します。

データベース停止

CDB

CDB の停止は SYSDBA または SYSOPER 権限を持つユーザで行う必要があります。

SHUTDOWN [NORMAL | IMMEDIATE | TRANSACTIONAL | ABORT]
  • NORMAL (通常停止)
    • データベースへの新規接続はできないが、接続中の全ユーザーがセッションを終了するまで待機する
  • IMMEDIATE (即時停止)
  • TRANSACTIONAL
    • アクティブなトランザクションすべてが完了後、接続中の全ユーザのセッションを切断してデータベースを停止する
  • 'ABORT' (緊急停止)

PDB

PDB の停止は、マウント・モードへのオープン・モードの変更を意味します。

ALTER PLUGGABLE DATABASE [ALL | [pdb_name]] CLOSE [IMMEDIATE | ABORT];

IMMEDIATE または ABORT を指定しない場合、通常停止 (NORMAL) となります。

停止モードの詳細は、 CDB の SHUTDOWN コマンドでの停止と同様です。

おわりに

今回は「Oracle Database に接続して CDB や PDB を起動・停止する」という簡単な操作についてまとめました。

記事をまとめる中で、なるべく正確な情報を記載するため Oracle 公式ドキュメントを読みましたが、同じ結果が得られる別の方法や細かいオプションなど、取り上げていない内容が沢山あります。

ORACLE MASTER などの資格を取得するためにはそういった詳細な理解も必要ですが、プライベートでの利用程度であれば、とりあえず一つの方法が分かっていれば実用上は問題ありません。

最近は MySQLPostgreSQL などの OSS-DB や NoSQL などの利用が広がり、データベースとしての Oracle は下火になりつつあると言われていますが、個人的には Oracle Database が好きなので、次は Oracle Cloud に手を出そうかと思っています。

仕事でしかデータベースを触っていない方は、ぜひ一家に一データベースを Oracle Database で構築してみてはいかがでしょうか。

PC が重くなるという方は Oracle Cloud もありますよw