ORA-12505, TNS: 리스너가 현재 접속 기술자에 지정된SID를 인식하지 않음
Windows 7 64비트 OS에 Oracle 11g Express Edition Release 2를 설치하고 JDBC 프로그램을 실행하려고 하면 다음 오류가 나타납니다.
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.jlcindia.jdbc.JDBCUtil.geOracleConnection(JDBCUtil.java:28)
at Lab3O.main(Lab3O.java:15)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:385)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
... 8 more
jdbc 문자열을 수정하여 이 문제를 해결했습니다.
예를 들어 올바른 jdbc 문자열은 다음과 같습니다.
jdbc:oracle:thin:@myserver:1521/XE
근데 제가 쓰던 jdbs 문자열은...
jdbc:oracle:thin:@myserver:1521:XE
(의: 이) 사이)1521
★★★★★★★★★★★★★★★★★」XE
여야 한다/
)
이 부정한 jdbc 문자열로 인해 ORA-12505 에러도 발생합니다.
이 문제의 원인은 몇 가지 있지만 JDBC를 시작하기 전에 SQL*Plus를 사용하여 데이터베이스에 연결할 수 있는지 확인해야 합니다.SQL*Plus에 대해 잘 모르시는 분들은 오랫동안 Oracle의 표준 부분이었던 Oracle 데이터베이스에 접속하기 위한 명령줄 툴로 Oracle XE에 포함되어 있습니다.
JDBC를 사용하여 Oracle 데이터베이스에 연결하는 경우 데이터베이스에 직접 연결하지 않습니다.대신 TNS 리스너에 접속하여 데이터베이스에 연결합니다. 「」ORA-12505
리스너가 기동하고 있어 접속할 수 있었지만, 그 데이터베이스가 기동하고 있는 것을 인식하고 있지 않기 때문에, 리스너는 데이타베이스에 접속할 수 없었습니다.여기에는 두 가지 이유가 있습니다.
- 데이터베이스가 시작되지 않았습니다.
- 예를 들어 데이터베이스가 리스너보다 먼저 시작되었기 때문에 데이터베이스가 리스너에 등록되지 않았습니다(데이터베이스가 시작될 때 이미 실행 중인 경우 리스너에 등록됩니다).리스너가 실행되고 있지 않으면 데이터베이스는 등록되지 않습니다.리스너가 기동해도 리스너에 등록할 수 있는 데이터베이스는 검색되지 않습니다.)
ORA-12505는 리스너가 그 데이터베이스에 대해 알고 있지만 리스너는 데이터베이스로부터 데이터베이스가 가동 중이라는 통지를 받지 않았음을 의미합니다(잘못된 SID를 사용하여 잘못된 데이터베이스에 연결하려고 하면 ORA-12154 오류 "TNS: could resolve the connect identifier specified"가 나타납니다).
되고 있습니까 패널 Panel)]> [(Administrative [서비스(Services)]에서나 [시작)]> [파일명을 지정하여 실행(Run)]> [오라클(Oracle)]의 순서로 ).([컨트롤 패널]> [관리도구]> [서비스]에서 이 서비스를 열거나 [시작]> [파일명을 지정하여 실행]를 선택합니다.services.msc
및 X) Oracle Service XE 서비스가 합니다.ETNSListener의
두 서비스가 모두 시작된 경우 명령 프롬프트에서 다음 중 하나를 사용하여 SQL*Plus 데이터베이스에 연결할 수 있습니까?(Oracle XE를 설치한 머신에서 이러한 기능을 실행하고 있다고 가정합니다.)
sqlplus system/system-password@Xe
sqlplus 시스템/시스템 패스워드
sqlplus / as sysdba
(환환))system-password
Oracle XE SYS SYS SYSTEM SYSTEM ))))) 。
첫 번째 3개는 TNS 리스너를 통해 접속되지만 두 번째 2개는 리스너를 경유하지 않고 데이터베이스에 직접 접속하여 데이터베이스와 같은 머신 상에 있는 경우에만 작동합니다.첫 번째 1개는 실패하고 나머지 2개는 성공했을 경우 JDBC 접속도 실패합니다.경우 두 중 하고 을(를) 실행합니다.ALTER SYSTEM REGISTER
그런 다음 SQL*Plus를 종료하고 첫 번째 양식을 다시 시도하십시오.
세 번째 계정은 실패했지만 두 번째 계정은 작동하면 ora_dba 그룹에 사용자 계정을 추가합니다.이를 수행하려면 [컨트롤 패널]> [컴퓨터 관리]> [로컬 사용자 및 그룹]를 선택합니다.
폼의 접속을 취득할 수 있게 됩니다.
sqlplus system/system-password@Xe
작업을 하려면 JDBC를 통해 Oracle XE에 접속할 수 있어야 합니다.(또한 데이터베이스 접속에 사용하는 JDBC 코드를 보여주지 않았습니다만, 접속 문자열의 일부가 잘못되어 있으면, 그 외의 에러가 발생할 가능성이 매우 높아집니다.)
저도 같은 에러가 났는데 세 개 다 실패했어요.위의 세 가지가 실패했을 경우.서비스(내 경우 XE)가 누락된 경우 LSNRCTL 상태를 시도합니다.
sqlplus /nolog
conn system
alter system register;
exit
lsnrctl status
서비스를 보실 수 .
보더라도
sqlplus /nolog
conn system
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both;
alter system register;
exit
lsnrctl status
이거면 될 것 같은데...
이 에러가 발생했을 경우, 「ORA-12505, TNS:listener는 현재 접속 기술자에 지정된SID를 인식하지 않습니다」라고 하는 에러가 표시됩니다.
열고 서비스를 시작합니다.OracleServiceXE
★★★★★★★★…
Oracle SQL Developer에서 연결이 작동 중인 경우 연결 메뉴의 정보를 사용하여 다음 이미지에 설명된 대로 URL을 작성합니다.
예에서 은 : in은은은은은 URL 、 음음음음 : : : : : 。jdbc:oracle:thin:@ORADEV.myserver.com:1521/myservice
가 SID 를 사용하고 있는 경우는, 호스트명 뒤에 슬래시("/") 대신에 콜론(":")이 있습니다.
이 예외에 대한 몇 가지 이유를 찾았습니다.그들은 그렇다.
1) default.so 에 의한 데이터베이스 XE 의 이름은, 「jdbc:oracle:thin:@localhost:1521:XE」가 됩니다.
2) Oracle Service XE, Oracle X가ETNSListener는 running.it가 [컨트롤 패널]에 표시됩니다.모든 제어판 항목\관리도구\서비스
JDBC 코드를 수정하여 이 문제를 해결했습니다.
올바른 JDBC 문자열은 다음과 같습니다.
conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe","system","ishantyagi");
근데 제가 쓰던 JDBC 문자열은...
conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");
따라서 xe가 아닌 orcl을 잘못 지정한 경우 SID 이름이 잘못되었기 때문에 이 오류가 나타납니다.
다음 코드를 사용하면 문제가 해결됩니다.
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@IPAddress:1521/servicename","userName","Password");
같은 에러에 직면했을 경우, 상기의 어느 솔루션도 도움이 되지 않았습니다. filelistner.ora에 .해서 덧셈을 해 버렸다SID
of에서SID_LIST
아래(별 * 사이의 섹션)를 참조하십시오.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
)
*(SID_DESC =
(SID_NAME = XE)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
)*
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)
이 에러는 다음과 같이 수정되었습니다.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = XE)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
)
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)
중지 및 데이터베이스
리스너 Oracle Service XE 및 Oracle X를 정지했습니다.제어판으로 이동해도 자동으로 정지하지 않기 때문에 수동으로 ETNSListener를 실행합니다.\모든 제어판 항목\관리도구\서비스.데이터베이스를 다시 시작했는데 아주 잘 작동했어요.
Oracle: 씬 스타일의 서비스 이름 구문
씬 스타일의 서비스 이름은 JDBC Thin 드라이버에서만 지원됩니다.구문은 다음과 같습니다.
@//host_name: port_number/service_name
http://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA
나도 처음에 같은 문제로 여기 왔었어.Windows 8(64비트)에 Oracle 12c를 설치했지만 명령줄에서 'TNSPING xe'로 해결했습니다.연결이 설정되지 않았거나 이름을 찾을 수 없는 경우 데이터베이스 이름을 시도해 보십시오. 내 경우 'orcl'이었습니다.다시 'TNSPING orcl'을 실행하고 ping이 성공하면 SID를 'orcl'로 변경해야 합니다.
지금까지 폭넓게 논의되지 않은 한 가지 가능성은 호스트 시스템 자체의 호스트 이름을 해결하는 데 문제가 있을 수 있다는 것입니다./etc/hosts에 $(hostname) 엔트리가 없는 경우 Oracle 리스너는 혼란스러워지고 표시되지 않습니다.
그것이 제 문제였습니다.또한 /etc/hosts에 호스트 이름과 IP 주소를 추가하면 문제가 해결되었습니다.
동일한 문제에 직면하여 Oracle Service XE 서비스를 재시작하여 해결했습니다.Goto Services.msc에서 'OracleServiceXE' 서비스가 가동되어 실행 중인지 확인합니다.
TNSNAMES.ora 파일에서 "SID"를 "SERVICE_NAME"으로 변경하여 이 문제를 해결했습니다.
DB가 SID 또는 SERVICE_NAME을 요청하는지 확인하십시오.
건배.
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", scott", tiger");
오류 발생:
java.sql.SQLException:다음 오류로 인해 수신자가 연결을 거부했습니다.ORA-12505, TNS:listener does know of SID in connect descriptor 클라이언트에 의해 사용되는 Connection 기술자는 다음과 같습니다.localhost:1521:xe
해결 방법:
Connection con=DriverManager.getConnection("jdbc:oracle:thin:localhost:1521:xe",scott",tiger");
(@ 삭제)
왜 그랬는지는 모르겠지만, 지금은 작동중이야
저도 같은 문제에 직면했어요.VMware를 사용하여 Windows XP OS에 Oracle Express 에디션 10g을 설치했는데 정상적으로 동작하고 있었습니다.10g에서 제공하는 SQL 유틸리티에 SQL 쿼리를 입력하는 것이 매우 어려웠고 SQL 개발자와의 작업이 익숙했기 때문에 XP에 32비트 SQL 개발자를 설치하고 DB SID "XE"에 접속해 보았습니다.단, 접속에 실패했습니다.ORA-12505 TNS 리스너는 현재 접속 기술자에 지정된SID를 인식하지 않습니다.SQL 유틸리티에서는 정상적으로 동작하고 있기 때문에, 이 문제가 어떻게 발생했는지, 또 같은 방법으로 Informatica 매핑을 거의 작성하지 않았습니다.저는 이 건에 대해 이곳으로 많이 찾아봤고, 퍼블릭 포럼에서 "lsnrctl" 상태를 ping한 후 제시된 제안을 적용했지만 소용이 없었습니다.하지만 오늘 아침 다시 새로운 연결을 시도했고, Voila는 문제없이 작동했습니다.몇 개의 투고를 읽고 가끔 DB가 연결되기 전에 청취자가 듣는다고 추측하고 있습니다만(초보자이므로 대략적인 참조를 부탁드립니다) 그냥 기계를 재부팅하고 다시 확인해 보는 것이 좋습니다.
저도 같은 문제가 있어서 이 문제를 해결하기 위해 먼저 다음 명령을 사용하여 청취자를 재구성합니다.netca
그 후 이전 데이터베이스인 ORCL을 삭제했습니다.dbca
그리고 나서 새로운 데이터베이스를 다시 만들었습니다.dbca
둘 다 확인해 주세요OracleServiceXE
그리고.OracleXETNSListener
탐색할 때 상태가 시작됨start->run->services.msc
.
내 경우만OracleXETNSListener
시작은 했지만OracleServiceXE
에 의해 시작되었을 때 시작되지 않았습니다.right clicking -> start
연결이 잘 되는지 확인했습니다.
Oracle Express Edition을 사용하는 경우 다음 URL이 필요합니다.
jdbc:oracle:thin:@localhost:1521:xe 또는 jdbc:oracle:thin:@localhost:1521/XE
pom.xml의 liquibase config 플러그인에 대해서도 비슷한 문제가 있었습니다.그리고 설정을 변경했습니다.
`<configuration>
<driver>oracle.jdbc.OracleDriver</driver>
<url>jdbc:oracle:thin:@localhost:1521:xe</url>
<defaultSchemaName></defaultSchemaName>
<username>****</username>
<password>****</password>
</configuration>`
호스트 시스템에서 tnsping 및 인스턴스 이름을 수행하여 확인합니다.tns 기술이 제공되며 대부분의 경우 일치하지 않는 호스트 이름이 다릅니다.
나도 마찬가지로 문제를 해결한다.
UNIX 머신 $tnsping (Enter)
호스트명이 다르다는 것을 알 수 있는 완전한 tns 설명을 제공합니다.:)
SQL Workbench에서도 비슷한 문제가 있었습니다.
URL:
jdbc:thin:@syslog.syslog.syslog:1111:xe
동작하지 않습니다.
URL:
jdbc:thin:@syslog.syslog.syslog:1111:asdb
작동하다.
이것은 나의 구체적인 상황에 도움이 된다.유감스럽게도, 그것은 다른 해결책과 함께 많은 다른 이유들이 존재할 수 있습니다.
SQL 개발자를 사용하여 Oracle DB에 연결하려고 했을 때 ORA-12505, TNS: 청취자가 현재 연결 기술자에 지정된 SID를 알 수 없습니다.라는 오류가 발생했습니다.
사용된 JDBC 문자열은 jdbc:oracle:thin:@myserver:1521/XE입니다.이 문자열은 올바른 문자열과 2개의 필수 Oracle Service XE, Oracle X입니다.ETNSListener가 가동되고 있었습니다.
이 문제를 해결하는 방법(Windows 10의 경우)
1. Open run command.
2. Type services.msc
3. Find services with name OracleServiceXE and OracleXETNSListener in the list.
4. Restart OracleServiceXE service first. After completing the restart try restarting OracleXETNSListener service.
비슷한 문제가 있었다.이 문제는 갑자기 발생하기 시작했습니다.부하 분산된 데이터베이스 연결 URL이 있지만 jdbc 연결에서는 단일 DB를 직접 가리키고 있었습니다.
load balanced dburl로 변경되어 동작했습니다.
내 경우, 결국 오라클과 TNS 청취자를 재시작했고 모든 것이 작동했습니다.이틀 동안 고생했어요.
서비스 실행 이외(Oracle Service XE, Oracle X)ETNSListener)는 안티바이러스 소프트웨어/방화벽에 의해 차단될 수 있습니다.차단되지 않도록 확인하세요.
방금 oracle Service in services를 재시작/시작하여 수정했습니다.
오라클이 작동하지 않아 이 오류가 발생했습니다.기계를 재기동해, 위의 솔루션도 시험했습니다.결국 컴포넌트 서비스를 열고 오라클 서비스를 재시작했더니 모든 것이 작동하기 시작했습니다.이게 도움이 됐으면 좋겠네요.
데이터베이스 링크를 잘못 생성했을 뿐입니다.
간단한 수정은 'SID'를 SERVICE_NAME으로 변경하는 것이었습니다.
CREATE DATABASE LINK my_db_link
CONNECT TO myUser IDENTIFIED BY myPassword
USING
'
(
DESCRIPTION=
(
ADDRESS=
(PROTOCOL=TCP)
(HOST=host-name-heren)
(PORT=1521)
)
(CONNECT_DATA=(SID=theNameOfTheDatabase))
)';
변화하는
SID=theNameOfTheDatabase
로.
SERVICE_NAME=theNameOfTheDatabase
문제를 해결했습니다.
작업 관리자에서 "Oracle" 작업을 중지했기 때문에 이 문제가 발생합니다.하려면 cmd > -> 를 합니다.services.msc
service -> find service -> find service "OracleServiceXE
-> 오른쪽 클릭: 시작. -> 오른쪽 클릭: 시작.
@Luke Woodward의 대답은 내 XE가 연결되지 않았다는 것을 알아내는 데 도움이 되었다.VPN에 대해서입니다.Windows 11 21c를를 Oracle 21c 。 일listener.ora
★★★★★★★★★★★★★★★★★」tnsnames.ora
'ERIK-PC이렇게 하고 있었습니다.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ERIK-PC)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
거였어요.ERIK-PC
로로 합니다.localhost
자세한 내용은 이 스레드에 기재되어 있습니다.덧붙여서, 저는 Oracle 21c를 사용하고 있는데, 18c 이후 *.ora 파일은installationfolder\homes\OraDB21Home1\network\admin\*.ora
변경을 저장하고 특권 윈도 셸을 사용하여 청취자를 재시작합니다.
lsnrctl stop
lsnrctl start
언급URL : https://stackoverflow.com/questions/18192521/ora-12505-tnslistener-does-not-currently-know-of-sid-given-in-connect-descript
'source' 카테고리의 다른 글
Plask-sqlalchemy 및 Postgresql에서의 JSON 유형 사용 (0) | 2023.03.05 |
---|---|
python의 pretty-print json(비음파적 방법) (0) | 2023.03.05 |
SQL*Plus를 사용하여 Oracle 11g에서 데이터베이스를 표시하는 방법 (0) | 2023.03.05 |
Jest를 사용한 테스트용 공유 유틸리티 함수 (0) | 2023.03.05 |
부트스트랩4에서 Navbar 요소를 균등하게 띄우는 방법 (0) | 2023.03.05 |