自由気ままに書いちゃおう

好きなことをつらつらと・・・

Oracle データベースへの接続方法について

今回は、Oracleデータベースへの接続方法を整理したいと思います。
※詳細はまだ理解できていなかったりするので、間違っている箇所もあるかもしれません。。。ご容赦ください。

■接続する前に理解しておきたいこと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はデータベース名
です。


以上です。