Oracle接続確認の方法【tnsping・sqlplus・ORA-12541/12154エラー対処】

当ページのリンクには広告が含まれています。

「DBに繋がらない」「tnsnames.oraの設定が合っているか不安」——Oracleの接続トラブルは初心者からベテランまで誰でも踏む落とし穴です。本記事では接続確認の手順とよくあるエラーの対処法を体系的に解説します。

目次

1. Oracle接続の仕組み(基本構成) {#about}

クライアント
  │  1. tnsnames.oraを参照してホスト・ポート・SIDを取得
  │
  ↓
Oracleリスナー(1521番ポート)
  │  2. 接続要求を受け付けてDBサーバープロセスに渡す
  │
  ↓
Oracleサーバープロセス(DBへの接続)

接続に失敗する場合、①ネットワーク、②リスナー、③tnsnames.oraの設定のどれかに問題があります。順番に切り分けていきます。


2. tnspingで疎通確認する {#tnsping}

tnsping はリスナーへの到達確認ツールです。DBへは接続しません。

# tnsnames.oraに定義したサービス名で確認
tnsping ORCL

# ホスト・ポート・SIDを直接指定して確認
tnsping "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db-server)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))"

成功時の出力:

TNS Ping Utility for Linux: Version 19.3.0
Copyright (c) 1997, 2019, Oracle. All rights reserved.

Used parameter files: /u01/app/oracle/product/19.3/dbhome/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db-server)(PORT=1521))...)
OK (30 msec)

OKが返ればリスナーまでは到達できています。次はsqlplusで認証確認へ。


3. sqlplusで接続テストする {#sqlplus}

# 基本の接続
sqlplus username/password@ORCL

# SYSDBAで接続(サーバー上からOS認証)
sqlplus / as sysdba

# ホスト・ポート・サービス名をEasy Connect形式で直接指定
sqlplus username/password@db-server:1521/ORCL

# パスワードなしで(プロンプトで入力)
sqlplus username@ORCL

接続成功の確認:

-- 接続後、以下を実行して接続先DBを確認
SELECT SYS_CONTEXT('USERENV','DB_NAME') AS DB名,
       SYS_CONTEXT('USERENV','SERVER_HOST') AS ホスト,
       SYS_CONTEXT('USERENV','SESSION_USER') AS ユーザー
FROM DUAL;

4. tnsnames.oraの確認と設定 {#tnsnames}

tnsnames.oraの場所

# ORACLE_HOME配下が一般的
$ORACLE_HOME/network/admin/tnsnames.ora

# TNS_ADMIN環境変数で別の場所を指定することも可能
echo $TNS_ADMIN

tnsnames.oraの記述例

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = db-server.example.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCL)
    )
  )

-- RAC環境(複数ノード)
ORCL_RAC =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = node1)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = node2)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCL)
    )
  )

tnsnames.oraの設定確認

# 定義されているサービス名の一覧を確認
tnsping -v ORCL

# TNSNAMESが認識されているか確認
tnsnames -v

5. listener.oraとリスナーの確認 {#listener}

リスナーの状態確認

# リスナーの状態を確認
lsnrctl status

# 詳細なサービス情報を確認
lsnrctl status LISTENER

出力例:

LSNRCTL for Linux: Version 19.3.0
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db-server)(PORT=1521)))

STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: 19.3.0
Start Date                17-MAY-2026 09:00:00
Uptime                    0 days 6 hr. 30 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /u01/app/oracle/diag/tnslsnr/db-server/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db-server)(PORT=1521)))
Services Summary...
Service "ORCL" has 1 instance(s).
  Instance "ORCL", status READY, has 1 handler(s) for this service...
The command completed successfully

確認ポイント:

  • status READY → DBサービスが正常に登録されている
  • サービスが表示されない → リスナーを再起動するか、DBサービスを手動登録

リスナーの起動・停止

lsnrctl start    # 起動
lsnrctl stop     # 停止
lsnrctl reload   # 設定を再読み込み(停止不要)

6. よくある接続エラーと対処法 {#errors}

ORA-12541:TNSリスナーがない

ORA-12541: TNS: リスナーがありません

リスナーが起動していないか、ポートが違います。

# リスナーの状態確認・起動
lsnrctl status
lsnrctl start

# ファイアウォール確認(Linux)
firewall-cmd --list-all
# または
iptables -L | grep 1521

ORA-12154:TNSサービス名が解決できない

ORA-12154: TNS: 指定された接続識別子を解決できませんでした

tnsnames.oraの設定が見つからない、または記述ミスです。

# 1. tnsnames.oraの場所を確認
find / -name tnsnames.ora 2>/dev/null

# 2. 環境変数を確認
echo $ORACLE_HOME
echo $TNS_ADMIN

# 3. tnsping で確認
tnsping ORCL

ORA-01017:ユーザー名/パスワードが無効

ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。
-- SYSDBAでログインしてアカウント状態を確認
SELECT USERNAME, ACCOUNT_STATUS, LOCK_DATE
FROM DBA_USERS
WHERE USERNAME = 'SCOTT';

-- アカウントのロック解除
ALTER USER SCOTT ACCOUNT UNLOCK;

-- パスワードリセット
ALTER USER SCOTT IDENTIFIED BY newpassword;

ORA-12170:接続タイムアウト

ORA-12170: TNS: 接続タイムアウトが発生しました

ネットワークの疎通問題またはファイアウォールによる遮断です。

# 基本のping確認
ping db-server

# ポート疎通確認(telnetまたはnc)
telnet db-server 1521
nc -zv db-server 1521

7. まとめ:接続確認チェックリスト {#summary}

接続できない場合の切り分け手順

Step 1: ネットワーク疎通
  □ ping db-server → 応答あるか
  □ telnet db-server 1521 → ポートに到達できるか

Step 2: リスナー確認
  □ lsnrctl status → READY 状態か
  □ サービス名がリスナーに登録されているか

Step 3: tnsnames.ora 確認
  □ tnsping ORCL → OK が返るか
  □ HOST・PORT・SERVICE_NAME の記述ミスがないか

Step 4: 認証確認
  □ sqlplus / as sysdba → OS認証で接続できるか
  □ DBA_USERS でアカウントがロックされていないか確認

関連記事:

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ITの事や自分の経験談など綴っていきたいと思っています。

コメント

コメントする

CAPTCHA


目次