【完全ガイド】ORA-12514: TNS:listener does not currently know of service の原因と解決方法|SERVICE_NAME・CDB/PDB・LOCAL_LISTENER 徹底解説
- 作成日 2026.08.30
- Oracle Database
Oracle 開発者・DBA が接続時に頻繁に遭遇する典型的エラー:
$ sqlplus scott/tiger@ORCL
ERROR:
ORA-12514: TNS:listener does not currently know of service
requested in connect descriptor
**「Listener がリクエストされた service を知らない」**というシンプルなメッセージ。Listener は動いているが SERVICE_NAME が登録されていない状況を意味します:
ORA-12541(Listener 未起動) とは違う- Listener は起動している
- 接続要求は Listener に届いた
- その service が Listener の管理下にない
このエラーの本質は、Oracle 公式ドキュメントが明確に述べています:
「The listener received a request to establish a connection to a database
or other service. The connect descriptor received by the listener
specified a service name for a service (usually a database service)
that either has not yet dynamically registered with the listener or
has not been statically configured for the listener.」
受付は動いているが、要求された名前が名簿にない状態。
- 1. 結論:lsnrctl services で登録確認
- 2. Oracle 接続の仕組み
- 3. 【原因①】SERVICE_NAME スペルミス(最頻出)
- 4. 【原因②】CDB/PDB 混同(12c+ の典型)
- 5. 【原因③】PMON が未登録(起動直後)
- 6. 【原因④】LOCAL_LISTENER 不整合
- 7. 【原因⑤】Service 手動停止
- 8. 【原因⑥】Oracle EBS クローン後(実例)
- 9. 【原因⑦】Multi-Listener 環境
- 10. 【原因⑧】大文字小文字(Case Sensitivity)
- 11. 【原因⑨】DBMS_SERVICE 未起動
- 12. 【原因⑩】listener.ora の static 登録漏れ
- 13. 診断ツール完全リファレンス
- 14. 6つの解決策 完全リファレンス
- 15. Rails / Java / Python 対応
- 16. 実践シナリオ
- 17. トラブルシューティング
- 18. よくある質問(FAQ)
- 19. 参考リンク
- 20. まとめ
接続系エラー 6 種の完全比較
Oracle 接続系エラーの全体像:
ORA-12541: TNS:no listener
→ Listener 自体が起動していない
ORA-12154: TNS:could not resolve the connect identifier
→ クライアント側 tnsnames.ora で名前解決失敗
ORA-12514: TNS:listener does not currently know of service ← 本記事
→ Listener 起動、但し service 未登録
ORA-12170: TNS:Connect timeout occurred
→ ネットワーク遅延でタイムアウト
ORA-01034: ORACLE not available
→ DB インスタンスが起動していない
ORA-01017: invalid username/password
→ 認証失敗
CDB/PDB アーキテクチャの罠(12c+)
Oracle 12c 以降のマルチテナントが新たな混乱源:
CDB (Container Database)
├── CDB$ROOT
├── PDB$SEED
├── PDB1 (Pluggable Database)
├── PDB2
└── PDB3
CDB service name: orclcdb
PDB service name: pdb1, pdb2, pdb3
sqlplus sys/pass@localhost/orclcdb ← CDB 接続 OK
sqlplus sys/pass@localhost/pdb1 ← PDB 接続、状態次第
PDB が MOUNT 状態(未 OPEN)ではservice 未公開、ORA-12514 発生。
現場で最も典型的なパターン:
- SERVICE_NAME のスペルミス(最頻出)
- CDB/PDB 混同(12c+ の典型的問題)
- PMON がまだ登録していない(DB 起動直後)
- PDB が MOUNTED(OPEN されていない)
LOCAL_LISTENERパラメータが listener と不整合- Multi-listener 環境で登録先が違う
- 手動で service 停止
- 大文字小文字(case sensitivity)
DBMS_SERVICE.START_SERVICEで service 未起動- Oracle EBS クローン後の service 未起動(実例)
多くの日本語記事が「tnsnames.ora を確認せよ」で終わりますが、実務では:
- 接続系エラー6種の厳密な区別
lsnrctl servicesによる登録済み service 一覧確認ALTER SYSTEM REGISTERによる手動登録- PDB の状態確認(
v$pdbs) LOCAL_LISTENERパラメータの正しい設定ALTER PLUGGABLE DATABASE OPENによる PDB 起動DBMS_SERVICE.START_SERVICEによる service 手動起動- Multi-listener 環境での確認
- Oracle EBS / SAP 固有の問題
- AWS RDS Oracle での対応
さらに、PDB 対応は現代 Oracle の必須知識:
-- CDB 内から PDB 状態確認
SELECT name, open_mode FROM v$pdbs;
-- PDB 起動
ALTER PLUGGABLE DATABASE pdb1 OPEN;
-- 自動起動設定
ALTER PLUGGABLE DATABASE pdb1 SAVE STATE;
本記事では、ORA-12514: TNS:listener does not currently know of service の完全な原因と解決方法を、リファレンスとして実用的に整理します。10大発生パターン、CDB/PDB 対応、6つの解決策、Rails/Java/Python 対応、実践シナリオ、FAQまで完全網羅。この1本で ORA-12514 に冷静に的確に対処できるようになります。
結論:lsnrctl services で登録確認
時間がない方向けに、最速の対処を先に示します。
エラーメッセージの読み方
ORA-12514: TNS:listener does not currently know of service
requested in connect descriptor
↑
要求された SERVICE_NAME
= Listener は起動している
但し要求された service が登録されていない
最速の診断
# STEP 1: 登録済み service 一覧
$ lsnrctl services
# STEP 2: 接続文字列の SERVICE_NAME 確認
$ cat tnsnames.ora | grep -A 5 SERVICE_NAME
# STEP 3: DB 側の service 名確認
sqlplus / as sysdba
SQL> SHOW PARAMETER service_names
SQL> SELECT name FROM v$active_services;
# STEP 4: PDB 状態確認(12c+)
SQL> SELECT name, open_mode FROM v$pdbs;
6つの解決策
| # | 手法 | 使う場面 |
|---|---|---|
| ① | SERVICE_NAME 修正 | スペルミス |
| ② | ALTER SYSTEM REGISTER | PMON 未登録 |
| ③ | PDB OPEN | PDB 未起動 |
| ④ | LOCAL_LISTENER 設定 | Listener 不整合 |
| ⑤ | DBMS_SERVICE.START_SERVICE | Service 停止 |
| ⑥ | Listener 再起動 | 最終手段 |
接続系エラー 6 種
| エラー | 意味 |
|---|---|
| ORA-12541 | Listener 未起動 |
| ORA-12154 | TNS 名前解決失敗 |
| ORA-12514 | Service 未登録 ← 本記事 |
| ORA-12170 | 接続タイムアウト |
| ORA-01034 | DB 未起動 |
| ORA-01017 | 認証失敗 |
詳細は以下で解説します。
Oracle 接続の仕組み
SID vs SERVICE_NAME
古い方式 (SID):
SID = System Identifier
Oracle インスタンスを識別
1 DB = 1 SID
接続文字列: dbserver:1521:ORCL
新方式 (SERVICE_NAME):
SERVICE_NAME = 論理的なサービス名
1 DB に複数 service 可能
RAC / Data Guard 対応
接続文字列: dbserver:1521/ORCL
現代の推奨: SERVICE_NAME 使用(RAC/DG 対応)。
CDB/PDB アーキテクチャ
12c 以降のマルチテナント:
CDB (Container Database)
│
├── CDB$ROOT ← システム DB
│ Service: orclcdb
│
├── PDB1 ← アプリ用 DB
│ Service: pdb1
│
└── PDB2
Service: pdb2
接続先の選択:
sqlplus sys/pass@dbserver:1521/orclcdb → CDB$ROOT
sqlplus scott/pass@dbserver:1521/pdb1 → PDB1
Service の動的 vs 静的登録
動的登録(推奨):
- DB 起動時に PMON が Listener に自動登録
SERVICE_NAMESパラメータ- Listener 再起動不要
静的登録(レガシー):
listener.oraにSID_LIST_LISTENERで明示- Listener 再起動が必要
- Multi-tenant では制約多い
【原因①】SERVICE_NAME スペルミス(最頻出)
症状
$ sqlplus scott/tiger@localhost:1521/PDB11M
ORA-12514
tnsnames.ora:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA = (SERVICE_NAME = pdb11m)) ← 実際は違う?
)
診断
# 登録済み service 確認
$ lsnrctl services
Services Summary...
Service "orclb" has 1 instance(s).
Service "pdb1" has 1 instance(s). ← 実際は pdb1 !
解決
A. tnsnames.ora の修正:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA = (SERVICE_NAME = pdb1)) ← 正しい名前
)
B. Easy Connect で試行:
$ sqlplus scott/tiger@localhost:1521/pdb1
# 正しい service で接続
TNS 関連は ORA-12154: TNS could not resolve の記事も参照してください。
【原因②】CDB/PDB 混同(12c+ の典型)
症状(実例)
# CDB は成功
$ sqlplus sys/pass@localhost/orclcdb AS SYSDBA
Connected.
# PDB は失敗
$ sqlplus sys/pass@localhost/pdb1 AS SYSDBA
ORA-12514
診断
-- CDB 内から
SQL> CONNECT / AS SYSDBA
SQL> SELECT name, open_mode FROM v$pdbs;
NAME OPEN_MODE
---------- ----------
PDB$SEED READ ONLY
PDB1 MOUNTED ← MOUNTED (未 OPEN)!
PDB2 READ WRITE ← OPEN 済み
PDB が MOUNTED 状態 → service 未公開。
解決
PDB を OPEN:
ALTER PLUGGABLE DATABASE pdb1 OPEN;
-- 全 PDB OPEN
ALTER PLUGGABLE DATABASE ALL OPEN;
-- 自動起動設定(推奨)
ALTER PLUGGABLE DATABASE pdb1 SAVE STATE;
【原因③】PMON が未登録(起動直後)
シナリオ
1. DB 起動直後
2. PMON がまだ Listener に登録していない
3. アプリ接続試行 → ORA-12514
4. 数秒〜数分待つ
5. PMON 自動登録
6. 接続成功
解決
A. 数秒待つ(Oracle 公式推奨):
# 1分後にリトライ
sleep 60
sqlplus scott/tiger@ORCL
B. 手動登録:
ALTER SYSTEM REGISTER;
-- 確認
$ lsnrctl services
【原因④】LOCAL_LISTENER 不整合
シナリオ
-- DB の LOCAL_LISTENER
SHOW PARAMETER local_listener;
VALUE
------
LISTENER_ORCL
-- tnsnames.ora の LISTENER_ORCL 定義
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1522))
-- Listener は port 1521 で稼働
-- → PMON は 1522 に登録試行 → 失敗
-- → 1521 の Listener には未登録
-- → ORA-12514
解決
A. LOCAL_LISTENER 修正:
ALTER SYSTEM SET LOCAL_LISTENER =
'(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))';
-- 手動登録
ALTER SYSTEM REGISTER;
B. Listener 側修正:
# listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
【原因⑤】Service 手動停止
シナリオ
-- 何らかの理由で service 停止
BEGIN
DBMS_SERVICE.STOP_SERVICE('MY_SERVICE');
END;
/
-- アプリから MY_SERVICE 接続 → ORA-12514
診断
SELECT name, network_name, enabled
FROM dba_services;
解決
BEGIN
DBMS_SERVICE.START_SERVICE('MY_SERVICE');
END;
/
【原因⑥】Oracle EBS クローン後(実例)
シナリオ(実例)
EBS 12.2.12 クローン後:
$ sqlplus apps/pw
ORA-12514: TNS:listener does not currently know of service
原因: EBS 用 service が起動していない。
診断
CONNECT / AS SYSDBA
SELECT name FROM v$active_services;
-- ebs_<PDB_SID> が missing
解決
BEGIN
DBMS_SERVICE.START_SERVICE(service_name => 'ebs_clone');
END;
/
-- 確認
SELECT name FROM v$active_services;
-- 接続テスト
$ sqlplus apps/pw
Connected.
【原因⑦】Multi-Listener 環境
シナリオ
Listener A (port 1521): Service ORCL 登録
Listener B (port 1522): Service PDB1 登録
クライアントが port 1521 で PDB1 要求 → ORA-12514
解決
A. 正しい port で接続:
tnsnames.ora:
PDB1 =
(ADDRESS = (HOST=dbserver)(PORT=1522))
(CONNECT_DATA = (SERVICE_NAME=pdb1))
B. 両方のリスナに登録(可能なら)。
【原因⑧】大文字小文字(Case Sensitivity)
症状
-- DB
SHOW PARAMETER service_names;
VALUE
------
orcl
-- Client
tnsnames.ora:
(SERVICE_NAME = ORCL) ← 大文字
-- 通常 case-insensitive だが、環境依存で発生
解決
両方統一 or Easy Connect 使用:
$ sqlplus scott/tiger@localhost:1521/orcl
【原因⑨】DBMS_SERVICE 未起動
シナリオ
-- Service 作成
BEGIN
DBMS_SERVICE.CREATE_SERVICE(
service_name => 'app_svc',
network_name => 'app_svc'
);
END;
/
-- しかし START_SERVICE 忘れ
-- → 接続不可
解決
BEGIN
DBMS_SERVICE.START_SERVICE('app_svc');
END;
/
【原因⑩】listener.ora の static 登録漏れ
シナリオ
listener.ora:
SID_LIST_LISTENER = (SID_LIST =
(SID_DESC = (SID_NAME = CLRExtProc) ...)
)
# PDB1 の SID_DESC がない
# クライアントから PDB1 要求 → ORA-12514
解決
static 登録追加(or 動的登録依存):
SID_LIST_LISTENER = (SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = PDB1)
(ORACLE_HOME = /u01/app/oracle/product/19c/dbhome_1)
(SID_NAME = PDB1)
)
)
Listener 再起動:
$ lsnrctl reload
診断ツール完全リファレンス
lsnrctl services(最重要)
$ lsnrctl services
Services Summary...
Service "orclcdb" has 1 instance(s).
Instance "orclcdb", status READY, has 1 handler(s) for this service...
Service "pdb1" has 1 instance(s).
Instance "orclcdb", status READY, has 1 handler(s) for this service...
# ここに載っている service だけ接続可能
lsnrctl status
$ lsnrctl status
STATUS of the LISTENER
-----------------------
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hostname)(PORT=1521)))
Services Summary...
Service "orclcdb" has 1 instance(s).
SHOW PARAMETER
SQL> SHOW PARAMETER service_names
SQL> SHOW PARAMETER local_listener
SQL> SHOW PARAMETER remote_listener
V$ACTIVE_SERVICES
SELECT name, network_name, enabled
FROM v$active_services
WHERE enabled = 'YES';
V$PDBS (12c+)
SELECT name, open_mode, restricted
FROM v$pdbs;
DBA_SERVICES
SELECT name, network_name, enabled
FROM dba_services;
listener.log
$ tail -100 $ORACLE_BASE/diag/tnslsnr/*/listener/trace/listener.log
# service_update, service_register 履歴確認
6つの解決策 完全リファレンス
解決策① SERVICE_NAME 修正
tnsnames.ora 修正:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
(CONNECT_DATA = (SERVICE_NAME = orcl)) ← 正しい名前
)
Easy Connect で試行:
$ sqlplus scott/tiger@dbserver:1521/orcl
解決策② ALTER SYSTEM REGISTER
-- PMON に手動登録依頼
ALTER SYSTEM REGISTER;
-- 確認
$ lsnrctl services
解決策③ PDB OPEN
-- PDB 状態確認
SELECT name, open_mode FROM v$pdbs;
-- OPEN
ALTER PLUGGABLE DATABASE pdb1 OPEN;
-- 全 PDB OPEN
ALTER PLUGGABLE DATABASE ALL OPEN;
-- 自動起動設定(推奨)
ALTER PLUGGABLE DATABASE pdb1 SAVE STATE;
解決策④ LOCAL_LISTENER 設定
-- 現状確認
SHOW PARAMETER local_listener;
-- 修正
ALTER SYSTEM SET LOCAL_LISTENER =
'(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver)(PORT=1521))'
SCOPE=BOTH;
-- 再登録
ALTER SYSTEM REGISTER;
解決策⑤ DBMS_SERVICE.START_SERVICE
-- Service 起動
BEGIN
DBMS_SERVICE.START_SERVICE('my_service');
END;
/
-- 全 service 確認
SELECT name FROM v$active_services;
解決策⑥ Listener 再起動
$ lsnrctl reload
# または
$ lsnrctl stop
$ lsnrctl start
# DB 側で再登録
sqlplus / as sysdba
SQL> ALTER SYSTEM REGISTER;
Rails / Java / Python 対応
Rails ActiveRecord
database.yml で SERVICE_NAME 明示:
production:
adapter: oracle_enhanced
host: dbserver
port: 1521
database: orcl # SERVICE_NAME
username: <%= ENV['DB_USER'] %>
password: <%= ENV['DB_PASSWORD'] %>
Easy Connect 形式:
production:
adapter: oracle_enhanced
url: "//dbserver:1521/pdb1"
username: <%= ENV['DB_USER'] %>
password: <%= ENV['DB_PASSWORD'] %>
エラーハンドリング:
begin
ActiveRecord::Base.establish_connection
rescue OCIError => e
if e.message.include?("ORA-12514")
Rails.logger.error "Service name not registered"
# 正しい service 名で再試行 or アラート
end
end
Rails 8 系の詳細は Rails 8 アップグレードガイドの記事も参照してください。
Java (JDBC)
Thin Driver + SERVICE_NAME:
// Easy Connect
String url = "jdbc:oracle:thin:@dbserver:1521/pdb1";
// または TNS
String url = "jdbc:oracle:thin:@(DESCRIPTION=" +
"(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver)(PORT=1521))" +
"(CONNECT_DATA=(SERVICE_NAME=pdb1)))";
try {
Connection conn = DriverManager.getConnection(url, "scott", "tiger");
} catch (SQLException e) {
if (e.getErrorCode() == 12514) {
logger.error("Service not registered: " + e.getMessage());
}
}
Python (oracledb)
import oracledb
# Easy Connect
conn = oracledb.connect(
user="scott",
password="tiger",
dsn="dbserver:1521/pdb1" # SERVICE_NAME 明示
)
# エラーハンドリング
try:
conn = oracledb.connect(dsn="dbserver:1521/pdb1", ...)
except oracledb.DatabaseError as e:
error_obj, = e.args
if error_obj.code == 12514:
print(f"Service not registered: {error_obj.message}")
# lsnrctl services で確認するようログ出力
実践シナリオ
シナリオ1:初回接続確認
# 1. 登録済み service 確認
$ lsnrctl services
# 2. tnsnames.ora の SERVICE_NAME 確認
$ cat $TNS_ADMIN/tnsnames.ora
# 3. Easy Connect で試行
$ sqlplus scott/tiger@dbserver:1521/orcl
# 4. 成功なら tnsnames.ora 修正
シナリオ2:PDB 接続(12c+)
-- 1. CDB 接続
$ sqlplus sys/pass@localhost/orclcdb AS SYSDBA
-- 2. PDB 状態確認
SQL> SELECT name, open_mode FROM v$pdbs;
-- 3. PDB OPEN(必要なら)
SQL> ALTER PLUGGABLE DATABASE pdb1 OPEN;
-- 4. 自動起動設定
SQL> ALTER PLUGGABLE DATABASE pdb1 SAVE STATE;
-- 5. アプリから接続
$ sqlplus scott/tiger@localhost:1521/pdb1
シナリオ3:Oracle EBS クローン後対応
# 1. CDB env source
$ source /u01/app/oracle/CDB_env.sh
# 2. PDB SID 設定
$ export ORACLE_PDB_SID=clone
# 3. SYSDBA 接続
$ sqlplus / as sysdba
# 4. Service 起動
SQL> BEGIN
DBMS_SERVICE.START_SERVICE(service_name => 'ebs_clone');
END;
/
# 5. 確認
SQL> SELECT name FROM v$active_services;
# 6. EBS アプリ接続
$ sqlplus apps/pw
Connected.
シナリオ4:本番デプロイでの確認
#!/bin/bash
# pre_deploy_check.sh
# service 登録確認
if lsnrctl services | grep -q "$SERVICE_NAME"; then
echo "Service $SERVICE_NAME registered"
else
echo "ERROR: Service $SERVICE_NAME not registered"
exit 1
fi
# 接続テスト
if echo "SELECT 1 FROM DUAL;" | sqlplus -s scott/tiger@$DB_HOST:$DB_PORT/$SERVICE_NAME | grep -q "SELECTED"; then
echo "Connection OK"
else
echo "Connection FAILED"
exit 1
fi
Kamal 2 デプロイの詳細は Kamal 2 デプロイの記事を参照してください。
シナリオ5:Rails ヘルスチェック
class DatabaseHealthController < ApplicationController
def check
begin
ActiveRecord::Base.connection.execute("SELECT 1 FROM DUAL")
render json: { status: 'OK' }
rescue ActiveRecord::StatementInvalid => e
if e.message.include?("ORA-12514")
render json: {
status: 'ERROR',
message: 'Service name not registered'
}, status: 503
end
end
end
end
シナリオ6:Docker Oracle でのテスト
# コンテナ内で登録済み service 確認
docker exec -it oracle-xe lsnrctl services
# アプリコンテナから接続
docker exec -it app-container bash
$ sqlplus scott/tiger@oracle-xe:1521/XEPDB1
Docker 関連は docker daemon 接続エラーの記事、Docker no space left on device の記事も参照してください。
シナリオ7:AWS RDS Oracle
AWS RDS Oracle:
- SERVICE_NAME はデフォルト "ORCL"
- Multi-tenant 対応 PDB は個別に指定
- 接続文字列例:
myrds.abc123.us-east-1.rds.amazonaws.com:1521/ORCL
シナリオ8:Python 監視スクリプト
import oracledb
import subprocess
def check_service_registration(service_name):
# lsnrctl services 実行
result = subprocess.run(
['lsnrctl', 'services'],
capture_output=True, text=True
)
return f'Service "{service_name}"' in result.stdout
def test_connection(dsn):
try:
conn = oracledb.connect(user='monitor', password=pw, dsn=dsn)
conn.close()
return True
except oracledb.DatabaseError as e:
error_obj, = e.args
if error_obj.code == 12514:
service = dsn.split('/')[-1]
registered = check_service_registration(service)
if not registered:
print(f"Service {service} not registered!")
return False
シナリオ9:CI/CD 統合
- name: Verify Oracle Service
run: |
# Service 登録確認
LSNR_OUTPUT=$(sqlplus -s /nolog <<EOF
CONNECT / AS SYSDBA
SELECT name FROM v\$active_services;
EXIT
EOF
)
if echo "$LSNR_OUTPUT" | grep -q "$SERVICE_NAME"; then
echo "Service registered"
else
echo "ERROR: Service not registered"
exit 1
fi
シナリオ10:Autonomous DB
Autonomous DB では:
- Service Name は Wallet に含まれる
- TCPS (SSL) で接続
- 通常 ORA-12514 発生しない(Wallet で自動)
- 発生時は Wallet 更新
トラブルシューティング
lsnrctl services で service なし
DB 起動待ち(PMON 未登録)or PDB 未 OPEN確認。
CDB は接続可、PDB 不可
PDB を OPEN:
ALTER PLUGGABLE DATABASE pdb1 OPEN;
断続的な失敗
PMON 登録タイミング、リトライロジック実装。
Multi-listener 環境
LOCAL_LISTENER / REMOTE_LISTENER 確認、lsnrctl services -c LISTENER_NAME。
アプリからのみ失敗
接続文字列の SERVICE_NAME 確認、Easy Connect で試行。
PostgreSQL からの移行
PG は database 名で識別、Oracle は SERVICE_NAME 使用。
よくある質問(FAQ)
Q1. ORA-12514 と ORA-12541 の違い
- 12514: Listener 起動、service 未登録
- 12541: Listener 自体が未起動
Q2. SID と SERVICE_NAME の違い
- SID: インスタンス識別子(古い)
- SERVICE_NAME: 論理サービス名(推奨)
Q3. CDB/PDB 対応
PDB を OPEN、正しい PDB 名で接続。
Q4. PMON の役割
動的登録、Listener に service を自動通知。
Q5. LOCAL_LISTENER
DB が Listener を指定、正しい HOST:PORT が必要。
Q6. DBMS_SERVICE の使い所
カスタム service の作成・起動・停止。
Q7. Rails での対応
database: に SERVICE_NAME、Easy Connect も可。
Q8. Java での対応
Thin Driver Easy Connect or TNS 形式。
Q9. Python での対応
oracledb dsn パラメータ、SERVICE_NAME 明示。
Q10. static vs dynamic 登録
現代は動的(PMON 自動)、static は特殊用途のみ。
Q11. Autonomous DB での挙動
Wallet 認証、通常発生しない。
Q12. 予防策
- lsnrctl services で定期確認
- PDB 自動起動設定
- 接続テストを CI/CD に組み込み
- リトライロジック実装
参考リンク
Oracle 公式
- Oracle Database Error Messages: ORA-12514
- Oracle Multitenant Administrator’s Guide
- Oracle Database Net Services: Listener Configuration
- DBMS_SERVICE Package
まとめ
ORA-12514: TNS:listener does not currently know of service の要点を再整理します。
エラーの本質
Listener は起動している
但し要求された SERVICE_NAME が登録されていない
→ SERVICE_NAME スペルミス / PDB 未 OPEN / PMON 未登録 等
→ アプリ接続不能
エラーメッセージの読み方
ORA-12514: TNS:listener does not currently know of service
requested in connect descriptor
↑
要求された SERVICE_NAME 未登録
接続系エラー 6 種
| エラー | 意味 |
|---|---|
| ORA-12541 | Listener 未起動 |
| ORA-12154 | TNS 名前解決失敗 |
| ORA-12514 | Service 未登録 |
| ORA-12170 | 接続タイムアウト |
| ORA-01034 | DB 未起動 |
| ORA-01017 | 認証失敗 |
診断の 4 ステップ
# STEP 1: 登録 service 一覧
lsnrctl services
# STEP 2: SERVICE_NAME 確認
cat tnsnames.ora
# STEP 3: DB の service 名
SHOW PARAMETER service_names;
SELECT name FROM v$active_services;
# STEP 4: PDB 状態(12c+)
SELECT name, open_mode FROM v$pdbs;
10大原因
| # | 原因 | 対処 |
|---|---|---|
| ① | SERVICE_NAME スペルミス | 修正 |
| ② | CDB/PDB 混同 | 正しい service |
| ③ | PMON 未登録 | 待機 or REGISTER |
| ④ | LOCAL_LISTENER 不整合 | 設定修正 |
| ⑤ | Service 手動停止 | START_SERVICE |
| ⑥ | Oracle EBS クローン | ebs_service 起動 |
| ⑦ | Multi-listener | 正しい port |
| ⑧ | Case sensitivity | 統一 |
| ⑨ | DBMS_SERVICE 未起動 | START_SERVICE |
| ⑩ | static 登録漏れ | 追加 or 動的化 |
6つの解決策
# ① SERVICE_NAME 修正
# tnsnames.ora の SERVICE_NAME を lsnrctl services 出力と一致
-- ② ALTER SYSTEM REGISTER
ALTER SYSTEM REGISTER;
-- ③ PDB OPEN
ALTER PLUGGABLE DATABASE pdb1 OPEN;
ALTER PLUGGABLE DATABASE pdb1 SAVE STATE;
-- ④ LOCAL_LISTENER 設定
ALTER SYSTEM SET LOCAL_LISTENER =
'(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521))';
-- ⑤ DBMS_SERVICE.START_SERVICE
BEGIN
DBMS_SERVICE.START_SERVICE('my_service');
END;
-- ⑥ Listener 再起動
lsnrctl reload
CDB/PDB 対応(12c+)
-- PDB 状態確認
SELECT name, open_mode FROM v$pdbs;
-- OPEN
ALTER PLUGGABLE DATABASE pdb1 OPEN;
-- 自動起動
ALTER PLUGGABLE DATABASE pdb1 SAVE STATE;
-- 接続
sqlplus scott/pass@host:1521/pdb1
診断コマンド Top 5
lsnrctl services # 最重要
lsnrctl status # Listener 状態
SHOW PARAMETER service_names # DB の service
SELECT name FROM v$active_services # active service
SELECT name, open_mode FROM v$pdbs # PDB (12c+)
予防のポイント
1. lsnrctl services で登録確認
2. PDB は SAVE STATE で自動起動
3. 接続文字列は Easy Connect で明示的に
4. CI/CD に接続テスト組み込み
5. リトライロジック(PMON 遅延対応)
6. LOCAL_LISTENER 適切設定
7. Multi-listener 環境は文書化
8. Rails/Java/Python で SERVICE_NAME 明示
9. Docker/Cloud での接続文字列注意
10. Autonomous DB は Wallet 更新
これらの知識は、Oracle DBA の本番運用・障害対応・CDB/PDB 管理・Rails / Java / Python アプリ運用・AWS RDS / Autonomous DB 運用・Oracle EBS 管理・監視設計・CI/CD パイプラインなど、あらゆる場面で活用できます。本記事をブックマークしておけば、ORA-12514 に出会っても冷静に的確に対処できるようになります。
本記事は2026年6月時点の情報をもとに、Oracle Database 19c〜26ai での動作確認・公式ドキュメントに基づき作成しています。Oracle のバージョンにより挙動が異なる場合があるため、最新の情報は Oracle 公式ドキュメント(docs.oracle.com)もあわせてご確認ください。
-
前の記事
【完全ガイド】ORA-12170: TNS:Connect timeout occurred の原因と解決方法|Firewall・タイムアウト・JDBC/Python 徹底解説 2026.08.28
-
次の記事
【完全ガイド】ORA-01033: ORACLE initialization or shutdown in progress の原因と解決方法|PDB MOUNTED・STARTUP 3段階 徹底解説 2026.09.01
コメントを書く