「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_ADMINtnsnames.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 -v5. 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 1521ORA-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 ORCLORA-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 15217. まとめ:接続確認チェックリスト {#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 でアカウントがロックされていないか確認関連記事:









コメント