SQL*Plusによるデータベースの接続について
対応バージョン
Oracle Database 10.1 - 19.1
2020-07-30記事公開
SQL*Plusにて接続する際の構文について記載します。マニュアルに記載されていますが、最初に誰かに聞いて覚えた方では、マニュアルがあることを知らない方もいらっしゃることが多いので、ここではマニュアルをベースとして接続方法について説明します。
Oracle Net Services(旧SQL*Net)での設定により、接続方法や接続対象を限定する機能、暗号化する機能、初期化パラメータにより、リモートログインを制限する機能、他にはプロキシユーザーによるログイン等ありますが、ここではSQL*Plusのコマンド実行についてのみに言及します。
もし、Oracle Cloudで秘密鍵を用いて接続をしたいと考え、ここにたどり着いた場合は、SQLclのマニュアルを参照してください。
本文書では、参照リンクにタイトルのみの場合、以下のマニュアルから参照しています。
参考資料
SQL*Plus ユーザーズ・ガイドおよびリファレンス
F16155-03(原本部品番号:E96459-03)
https://docs.oracle.com/cd/F19136_01/sqpug/index.html
SQL*Plusによる接続
接続方法の種類ついて
SQL*Plusから接続する場合、以下の方法があります。特によく使うのがネット・サービス名(tnsnames.oraに定義)、簡単な接続識別子(簡易接続)の2種類かと思います。
他にデータベースが起動しているローカル環境では、接続識別子を付けない方法があります。(ORACLE_SID環境変数を用いたローカル認証)
ネット・サービス名での接続の一種ですが、以下のように、Oracle Walletに保存したパスワードと接続文字列を紐づけ、パスワード無しでログインする方法もあります。
3.1.1 セキュアな外部パスワード・ストア
1 |
$ sqlplus /@database_alias |
接続時のコマンドついて
SQL*Plusにて接続する場合、コマンドラインから直接か、CONNECT文による接続が出来ます。
コマンドラインからの直接接続
1 |
$ sqlplus username/password@connect_identifier |
CONNECTによる接続
1 2 3 |
$ sqlplus /nolog SQL> CONNECT username/password@connect_identifier SQL> DISCONNECT |
SQL*Plusに接続後のコマンドは省略することもできます。例えばCONNECTはCONNとしても動作します。 12 SQL*Plusコマンド・リファレンスから省略できる文字を確認できます。CONNECTの場合は、CONN[ECT]と記載されており、CONN,CONNE,CONNEC,CONNECTいずれでも動作します。
基本の構文について
3.5 SQL*Plusプログラムの構文にある通り、Logonの構文は、次のとおりです。※はマニュアルの構文の読み方です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
簡易接続の例: <ユーザー名>/<パスワード>@<ホスト名>:<リスナーポート番号>/<サービス名> $ sqlplus hr/password@sales-server:1521/sales.us.acme.com SQL> CONNECT hr/password@sales-server:1521/sales.us.acme.com OS認証によるログインの例: $ sqlplus / as sysdba SQL> CONNECT / as sysdba 構文: {username[/password][@connect_identifier]| / } [AS {SYSASM|SYSBACKUP|SYSDBA|SYSDG|SYSOPER|SYSRAC|SYSKM}][edition=value] ※ []は省略可能 [/password] [@connect_identifier] [AS {SYS...}] [edition=value] ※ |は{}内の「又は」を表す {username[/password][@connect_identifier]|(又は) / } => ユーザー名か、/のみを入力 |
起動時のオプションについて
3.5.1 オプションにあるように、起動時のオプションがつけられます。
筆者がよくつけているオプションは-LOGIN(ログイン失敗時に再度ログインを促されない)と-SILENT(プロンプトが出ないので、バッチに利用)の2つです。
1 |
$ sqlplus -L -S hr/password@hrdb |
接続時に必要な情報
データベースサーバーの外から接続する場合はどのような接続方法でも以下の情報が必要です。接続情報のどこかに入っているので、確認観点として知っておくと役に立ちます。
- 接続先のユーザー名
- 接続先のユーザーパスワード
- 接続先のホスト名
- 接続先のリスナーポート番号
- 接続先のデータベース・サービス(又はORACLE_SID)
ログアウト
ログアウトについては、3.4 SQL*Plusコマンドラインの終了についてに記載の通りログアウトが出来ます。
SQL*Plusでの作業が終了し、オペレーティング・システムに戻る場合は、SQL*PlusのプロンプトでEXITまたはQUITを入力するか、またはファイルを終了するキー(UNIXの場合は[Ctrl]を押しながら[D]、Windowsの場合は[Ctrl]を押しながら[Z])を入力します。
各接続方法による接続例
ネット・サービス名
3.2.1 ネット・サービス名の通り、ORACLE_HOME/network/admin/tnsnames.ora(又はTNS_ADMIN環境変数で指定した場所)に記載したネット・サービス名を利用してログインすることが出来ます。
1 2 3 4 5 6 7 8 |
ネット・サービス名の記載例(SALES1): SALES1 = (DESCRIPTION = (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521) ) (CONNECT_DATA= (SERVICE_NAME=sales.us.acme.com) ) ) |
以下で接続します。
1 |
sqlplus hr@SALES1 |
完全な接続識別子
3.2.2 完全な接続識別子の通り、ネット・サービス名で記載していた内容をコマンドライン上に直接記載してログインします。パスワードを記載しない場合は、プロンプトでパスワード入力が促されます。
1 |
sqlplus hr/password@\"(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521) )(CONNECT_DATA=(SERVICE_NAME=sales.us.acme.com)))\" |
簡単な接続識別子
3.2.3 簡単な接続識別子の通り、省略した接続識別子の書き方での接続です。パスワードを記載しない場合は、プロンプトでパスワード入力が促されます。
パスワードを入力しない場合は、エスケープする(ダブルクォーテーションで括る)必要があります。connectで実行する場合はエスケープは不要です。
1 2 3 4 5 |
$ sqlplus hr@\"sales-server:1521/sales.us.acme.com\" $ sqlplus hr/password@sales-server:1521/sales.us.acme.com $ sqlplus /nolog SQL> connect hr@"sales-server:1521/sales.us.acme.com" SQL> connect hr/password@sales-server:1521/sales.us.acme.com |
ローカル環境での接続
ローカル環境では、ORACLE_SID環境変数を用いて、接続識別子をつけないでログインすることが出来ます。
OS認証を許可している場合(インストール後のデフォルトの状態)、権限が紐づけられたOSグループを持つOSユーザーであれば、後ろにas sysdbaなどを付与することによって、パスワード無しでログインできます(OSによって認証されている)。
1 |
$ sqlplus hr/password |
1 |
$ sqlplus / as sysdba |
SYSDBA権限をOS認証で利用する場合、ユーザー名とパスワードが無視され、SYSでログインされます。
1 2 3 |
$ sqlplus dummy/dummy as sysdba SQL> show user ユーザーは"SYS"です |
特殊な権限について
主にOS認証でよく用いられる、AS SYSDBA等の権限ですが、こちらはパスワード・ファイルに記載されたユーザーでログインする特殊な権限を持つユーザーです。SYSDBAでは、DBの起動や停止などを行うが出来ますが、これは権限をパスワード・ファイル側で認証させているために出来ることです(パスワードをデータベース内部に持っていたら停止している場合にログインが出来ません)。
詳しくは割愛しますが、DBAロールでの権限とは異なりますので、間違えて覚えないようにしてください。