コマンドプロンプトからOracleに接続する際、sqlplusコマンドを利用するが、その際よく使う方式に、tnsnames.oraの設定を利用する「ローカル・ネーミング・メソッド」と、tnsnames.oraの設定を利用しない「簡易接続ネーミング・メソッド」の2通りがある。
また、「ローカル・ネーミング・メソッド」「簡易接続ネーミング・メソッド」のどちらを使えるかは、sqlnet.oraに定義する「NAMES.DIRECTORY_PATH」の設定内容によって決まる。
今回は、sqlplusコマンドで、「ローカル・ネーミング・メソッド」「簡易接続ネーミング・メソッド」の2通りの方法でOracleに接続してみたので、その手順を共有する。
なお、「ローカル・ネーミング・メソッド」「簡易接続ネーミング・メソッド」の詳細は、以下のサイトを参照のこと。
https://qiita.com/mi-kana/items/0f79cafed1761a4531b1
前提条件
下記記事のように、A5M2を利用してOracleに接続できていること。
その結果、以下の「C:\oraclexe\app\oracle\product\11.2.0\server\bin」ディレクトリ下に、「sqlplus.exe」が含まれていること。
また、以下のように、「C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN」下に「tnsnames.ora」「sqlnet.ora」「listener.ora」の3ファイルが含まれていること。
さらに、上記「tnsnames.ora」に、以下の設定が含まれていること。
1 2 3 4 5 6 7 8 | XE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE) ) ) |
また、A5M2でOracleに接続した際、user_dataテーブルの件数が、以下のように6件であること。
sqlnet.oraに「NAMES.DIRECTORY_PATH」が未設定の場合
sqlnet.oraに「NAMES.DIRECTORY_PATH」が未設定の場合は、「ローカル・ネーミング・メソッド」「簡易接続ネーミング・メソッド」の2通りの方法で、sqlplusコマンドでOracleに接続できる。その確認結果は、以下の通り。
2)「ローカル・ネーミング・メソッド」を利用して接続した結果は以下の通りで、「sqlplus (ユーザー名)/(パスワード)@(ネットサービス名)」という方法で接続できることが確認できる。
なお、(ネットサービス名)は、tnsnames.oraに記載されている先頭の「XE」を指している。
3)「ローカル・ネーミング・メソッド」を利用して接続した後で、SQL文を実行すると、以下のように結果が返却されることが確認できる。
4) sqlplusコマンドを終了するには、「exit;」を入力すればよい。
5)「簡易接続ネーミング・メソッド」を利用して接続した結果は以下の通りで、「sqlplus (ユーザー名)/(パスワード)@(ホスト名):(ポート番号)/(サービス名)」という方法で接続できることが確認できる。
なお、(サービス名)は、tnsnames.oraに記載されているSERVICE_NAMEの値を指している。
6)「簡易接続ネーミング・メソッド」を利用して接続した後で、SQL文を実行すると、以下のように結果が返却されることが確認できる。
7) sqlplusコマンドを終了するには、「exit;」を入力すればよい。
sqlnet.oraに「NAMES.DIRECTORY_PATH」が「ezconnect」の場合
sqlnet.oraに「NAMES.DIRECTORY_PATH」が「ezconnect」の場合は、「簡易接続ネーミング・メソッド」を利用して、sqlplusコマンドでOracleに接続できる。その確認結果は、以下の通り。
2)「ローカル・ネーミング・メソッド」を利用して接続した結果は以下の通りで、ORA-12154(指定された接続識別子を解決できませんでした)というエラーが発生することが確認できる。
3)「簡易接続ネーミング・メソッド」を利用して接続した結果は以下の通りで、「sqlplus (ユーザー名)/(パスワード)@(ホスト名):(ポート番号)/(サービス名)」という方法で接続できることが確認できる。
sqlnet.oraに「NAMES.DIRECTORY_PATH」が「tnsnames」の場合
sqlnet.oraに「NAMES.DIRECTORY_PATH」が「tnsnames」の場合は、「ローカル・ネーミング・メソッド」を利用して、sqlplusコマンドでOracleに接続できる。その確認結果は、以下の通り。
2)「ローカル・ネーミング・メソッド」を利用して接続した結果は以下の通りで、「sqlplus (ユーザー名)/(パスワード)@(ネットサービス名)」という方法で接続できることが確認できる。
3)「簡易接続ネーミング・メソッド」を利用して接続した結果は以下の通りで、ORA-12154(指定された接続識別子を解決できませんでした)というエラーが発生することが確認できる。
https://www.purin-it.com/doctor-homenet
sqlnet.oraに「NAMES.DIRECTORY_PATH」が「ezconnect, tnsnames」の場合
sqlnet.oraに「NAMES.DIRECTORY_PATH」が「ezconnect, tnsnames」の場合は、「ローカル・ネーミング・メソッド」「簡易接続ネーミング・メソッド」の2通りの方法で、sqlplusコマンドでOracleに接続できる。その確認結果は、以下の通り。
2)「ローカル・ネーミング・メソッド」を利用して接続した結果は以下の通りで、「sqlplus (ユーザー名)/(パスワード)@(ネットサービス名)」という方法で接続できることが確認できる。
3)「簡易接続ネーミング・メソッド」を利用して接続した結果は以下の通りで、「sqlplus (ユーザー名)/(パスワード)@(ホスト名):(ポート番号)/(サービス名)」という方法で接続できることが確認できる。
要点まとめ
- コマンドプロンプトからOracleに接続する際、sqlplusコマンドを利用するが、その際よく使う方式に、tnsnames.oraの設定を利用する「ローカル・ネーミング・メソッド」と、tnsnames.oraの設定を利用しない「簡易接続ネーミング・メソッド」の2通りがある。
- 「ローカル・ネーミング・メソッド」「簡易接続ネーミング・メソッド」のどちらを使えるかは、sqlnet.oraに定義する「NAMES.DIRECTORY_PATH」の設定内容によって決まる。