今回は、Oracleデータベースへの接続方法を整理したいと思います。
※詳細はまだ理解できていなかったりするので、間違っている箇所もあるかもしれません。。。ご容赦ください。
- ■接続する前に理解しておきたいこと1(ネーミングメソッドの種類)
- ■接続する前に理解しておきたいこと2(ローカルネーミングで利用するファイル)
- ■接続する前に理解しておきたいこと3(ORACLE_SID、ORACLE_BASE、ORACLE_HOME)
- ■データベースへの接続方法について1(ORACLE_SID方式)
- ■データベースへの接続方法について2(ローカルネーミング方式)
- ■データベースへの接続方法について3(ホストネーミング方式)
■接続する前に理解しておきたいこと1(ネーミングメソッドの種類)
接続方式(=ネーミングメソッド)についてです。
OracleクライアントがOracleデータベースに接続する際、
以下の4種類の接続方式のうちのどれかを利用することになります。
① ホストネーミング(簡易接続ネーミング)
名前の通りホスト名で接続する方式です。
② ローカルネーミング
クライアント側に用意したtnsnames.oraに記述したネットサービス名を利用する方式です。
※tnsnames.oraについては後述致します。
③ LDAPネーミング
LDAPを利用した接続方式です。
④ 外部ネーミング
すみません、よくわかりません。。
Oracleを勉強し始めの人は、上記②のローカルネーミングを使うことが多いかと思います。
■接続する前に理解しておきたいこと2(ローカルネーミングで利用するファイル)
上記②で必要になる知識を補足致します。
1.tnsnames.ora
クライアント側で用意するものです。
データベースへの接続情報を記載します。
※tnsname.oraというファイルもありますが、それは別物です。今は気にしなくて大丈夫です。
中身はこんな感じです。
GLOBALDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)
(HOST = DESKTOP-V4F1L7T.localdomain)
(PORT = 1522)
) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = globaldb) ) )
1行目の文字列を使用して接続します。
例えば、1行目の文字列を使用し、sysユーザでログインするときは、
sqlplus sys/XXXXXXX@GLOBALDB as sysdba
と書きます。
3行目から5行目で宛先サーバ(=宛先データベース)の筐体情報を記載します。
具体的には、
使用するプロトコル、サーバ名、サーバ側で待ちうけているポート番号を記載します。
7行目から9行目で宛先データベースの詳細情報を記載します。
具体的には、
データベース・サービス名やインスタンス(=SID)を記載します。
※ここでは、SIDについては記載しておりません。
2.listener.ora
サーバ側で用意するものです。
クライアントからの接続をデータベースへ繋ぐ際の橋渡しを担います。
橋渡しを行っているものをリスナーと呼びます。
中身はこんな感じです。
GLOBAL_LSN = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS =
(PROTOCOL = TCP)
(HOST = DESKTOP-V4F1L7T.localdomain)
(PORT = 1522)
) ) )
5行目から7行目で具体的なデータベースの内容を記載しておりますが、
tnsnames.oraと記載は似ています。
3.sqlnet.ora
クライアント/サーバの両方で用意するものです。
ただし、ローカルネーミングでの接続の場合には、クライアント側には不要です。
中身はこんな感じです。
SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
2行目が重要で、どのネーミングメソッドを利用するかを記載します。
左側の方が優先度が高いです。
TNSNAMES・・・ローカルネーミング
HOSTNAME・・・ホストネーミング(簡易接続)
■接続する前に理解しておきたいこと3(ORACLE_SID、ORACLE_BASE、ORACLE_HOME)
データベースの接続方法をネットで調べて・・・とかをやると思います。
そこでよく出てくるのが、「ORACLE_SIDを指定して接続」なのですが、
そもそもインストールしたりデータベースを作成したりしているうちに、
何がORACLE_SID、ORACLE_BASE、ORACLE_HOMEなのかわからなくなってしまうことも。。。
そういった際に、現在どういった情報が登録されているのかを確認する手段を記載致します。
※なお、環境はWindowsを想定しております。
以下コマンドを実行します。
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE" /s
実行結果はこんな感じです。
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home2 ORACLE_HOME REG_SZ E:\ORACLE2\DATABASE\DB1220 ORACLE_HOME_NAME REG_SZ OraDB12Home2 ORACLE_GROUP_NAME REG_SZ Oracle - OraDB12Home2 NLS_LANG REG_SZ JAPANESE_JAPAN.JA16SJISTILDE ORACLE_BUNDLE_NAME REG_SZ Standard OLEDB REG_SZ E:\ORACLE2\DATABASE\DB1220\oledb\mesg ORACLE_SID REG_SZ globalsid ORACLE_HOME_READONLY REG_SZ N ORACLE_HOME_TYPE REG_SZ 1 ORACLE_SVCUSER REG_SZ agorahome ORACLE_SVCUSER_TYPE REG_SZ ORACLE_SVCUSER_PWDREQ REG_SZ 1 ORACLE_BASE REG_SZ E:\ORACLE2\DATABASE ORACLE_HOME_KEY REG_SZ SOFTWARE\ORACLE\KEY_OraDB12Home2 SQLPATH REG_SZ E:\ORACLE2\DATABASE\DB1220\dbs MSHELP_TOOLS REG_SZ E:\ORACLE2\DATABASE\DB1220\MSHELP RDBMS_CONTROL REG_SZ E:\ORACLE2\DATABASE\DB1220\DATABASE RDBMS_ARCHIVE REG_SZ E:\ORACLE2\DATABASE\DB1220\DATABASE\ARCHIVE ORA_AGSYS_AUTOSTART REG_EXPAND_SZ TRUE ORA_AGSYS_SHUTDOWN REG_EXPAND_SZ TRUE ORA_AGSYS_SHUTDOWNTYPE REG_EXPAND_SZ immediate ORA_AGSYS_SHUTDOWN_TIMEOUT REG_EXPAND_SZ 90 OMTSRECO_PORT REG_EXPAND_SZ 2030 ORA_GLOBALSID_AUTOSTART REG_EXPAND_SZ TRUE ORA_GLOBALSID_SHUTDOWN REG_EXPAND_SZ TRUE ORA_GLOBALSID_SHUTDOWNTYPE REG_EXPAND_SZ immediate ORA_GLOBALSID_SHUTDOWN_TIMEOUT REG_EXPAND_SZ 90
やっと本題です。
■データベースへの接続方法について1(ORACLE_SID方式)
ORACLE_SIDを使用した方法です。
以下コマンドを実行します。※XXXXはパスワードです。
set oracle_sid=globalsid sqlplus sys/XXXXXX as sysdba
■データベースへの接続方法について2(ローカルネーミング方式)
ローカルネーミングで設定した値を使用した方法です。
tnsnames.oraの以下情報を利用するものとします。
GLOBALDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)
(HOST = DESKTOP-V4F1L7T.localdomain)
(PORT = 1522)
) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = globaldb) ) )
以下コマンドを実行します。
sqlplus sys/XXXXXX@GLOBALDB as sysdba
■データベースへの接続方法について3(ホストネーミング方式)
ホストネーミング(簡易接続ネーミング)で接続する方法です。
以下コマンドを実行します。
sqlplus sys/XXXXXXX@//localhost:1522/globaldb as sysdba
1522はポート番号
globaldbはデータベース名
です。
以上です。