ORA-12514 TNS: 청취자가 현재 Connect Descriptor에서 요청된 서비스를 인식하지 않음
로컬에서 실행되고 있는 어플리케이션에서 다음 오류가 발생하고 있습니다.
ORA-12514: TNS: 청취자가 현재 Connect Descriptor에서 요청된 서비스를 인식하지 않음
연결성을 TNSPing
이 되었고, 는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★SQLPlus
접속을 시도합니다만, 상기와 같은 에러가 발생했습니다.는 이 을 이이에 했습니다.SQLPlus
:
sqlplus username/password@addressname[or host name]
다음 사항을 확인했습니다.
- 서버상의 TNS Listener 가 동작하고 있습니다.
- 서버에서 Oracle 자체가 실행되고 있습니다.
우리는 이 환경에 어떤 변화가 있었는지 모릅니다.우리가 테스트할 수 있는 다른 건 없나요?
은 이이 in in in in in in in in in in in in in in in in in in in in in i i i i i i i i i i i i i i i를 확인하는 이었습니다.tnsnames.ora
SERVICE_NAME
는 데이터베이스 내의 유효한 서비스 이름입니다.유효한 서비스 이름을 확인하려면 oracle에서 다음 쿼리를 사용합니다.
select value from v$parameter where name='service_names'
tnsnames.ora
삭제:
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = *<validhost>*)(PORT = *<validport>*))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = *<servicenamefromDB>*)
)
)
그리고 뛰었습니다.
sqlplus user@TEST
성공!청취자는 기본적으로 사용 중인 service_name이 DB에 따라 유효하지 않은 서비스임을 알려줍니다.
(*Win7 클라이언트 워크스테이션에서 리모트 DB로 sqlplus를 실행하고 있었는데 DBA를 탓하고 있었습니다.)* )
오래된 질문인 건 알지만 아직 답이 없어요.조사하는데 하루 걸렸지만, 적어도 내 경우에서는 가장 간단한 솔루션을 발견했고(Windows 2008 R2에서는 Oracle 11.2) 공유하기를 원했습니다.
이 에러는, 직접 보면, 리스너가 서비스명을 인식하지 않는 것을 나타냅니다.서비스 이름은 어디에 보관되어 있습니까? »%ORACLE_HOME%\NETWORK\ADMIN\listener.ora
"SID_LIST"는 복사 또는 검색할 수 있는 형식으로 쌍으로 구성된 SID 및 서비스 이름 목록입니다.
문제가 있는 서비스 이름을 추가한 후 Windows "Services" 제어판에서 Oracle Listener 서비스에서 "Restart"를 수행했습니다.이제 다 괜찮아졌어.
예를 들어 listener.ora 파일은 처음에는 다음과 같습니다.
# listener.ora Network Configuration File: C:\app\oracle_user\product\12.1.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\oracle_user\product\12.1.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle_user\product\12.1.0\dbhome_1\bin\oraclr12.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
... 이름을 그리고 서비스 이름을 인식하도록 하기 위해orcl
이렇게 바꿀 수도 있어요:, 하다, 하다, 하다, 하다, 이렇게
# listener.ora Network Configuration File: C:\app\oracle_user\product\12.1.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\oracle_user\product\12.1.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle_user\product\12.1.0\dbhome_1\bin\oraclr12.dll")
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = C:\app\oracle_user\product\12.1.0\dbhome_1)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
제 상황에서는 청취자가 DB의 서비스를 등록하지 않았기 때문에 오류가 발생했습니다.서비스 등록으로 해결했습니다.예:
★★★의:tnsnames.ora
:
LOCALDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = LOCALDB)
)
)
저는 이 를 래서 so래 、 는는 、 는 the 、 。listener.ora
★★★★
SID_LIST_LISTENER =
(SID_DESC =
(GLOBAL_DBNAME = LOCALDB)
(ORACLE_HOME = C:\Oracle\product\11.2.0\dbhome_1)
(SID_NAME = LOCALDB)
)
마지막으로 다음 명령으로 청취자를 재시작합니다.
> lsnrctl stop
> lsnrctl start
알았어!
Windows Server 2008 R2 및 Oracle 11g에서 이 문제가 발생하였습니다.
[ Net Manager ]> [ Listener ]> [ select database services from combox ]> [ Global Database Name ]의 순서는 [SID]와 같아야 하며 [Oracle Home Directory]가 정확해야 합니다.
서비스에 경우 글로벌 데이터베이스인 "Database합니다.sid
라클홈홈 홈홈홈다다
이것은 정말로 [Brad Rippe][1]의 답변에 대한 코멘트가 되어야 하는데, 안타깝게도 충분한 답변이 아닙니다.그 대답으로 90%는 갈 수 있었다.이 경우 데이터베이스 설치 및 설정은 실행 중인 데이터베이스의 tnsnames.ora 파일에 엔트리를 저장합니다.먼저 환경변수(Windows)를 설정하여 데이터베이스에 연결할 수 있었습니다.
set ORACLE_SID=mydatabase
set ORACLE_HOME=C:\Oracle\product\11.2.0\dbhome_1
를 사용하여 접속합니다.
sqlplus / as sysdba
다음으로 브래드 리프의 대답에 따라 명령어를 실행합니다.
select value from v$parameter where name='service_names';
이름이 정확히 일치하지 않는다는 걸 보여줬어요Oracle Database Configuration Assistant를 사용하여 작성된 엔트리는 원래 다음과 같습니다.
MYDATABASE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mydatabase.mydomain.com)
)
)
은 " " " " 입니다.mydatabase
mydatabase.mydomain.com
을 도메인 는 다음과 같습니다
MYDATABASE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mydatabase)
)
)
서비스를 Listener 서비스를 자주 ).lsnrctl stop
★★★★★★★★★★★★★★★★★」lsnrctl start
[서비스(Services)]컨트롤 패널이 아닌 관리자 명령어창(또는 Windows Powershell)에서 사용할 수 있지만 둘 다 작동합니다.)그 후, 저는 접속할 수 있었다.[1]: https://stackoverflow.com/users/979521/brad-rippe
Windows 에서는 services.msc 에서 Oracle Service XXX 를 기동하는 것이 유효했습니다.
접속에 spring-boot 와 jdbc 를 사용하고 있는 Thoshes 의 경우.application.properties에 jdbcUrl을 쓸 때는 주의해야 합니다.
Database connection - "SID " - "source.datasource.jdbcUrl = jdbc:oracle:thin:@[HOST][:PORT]:SID
이 db connection DB에 globe.datasource.jdbcUrl = jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
이것은 나에게 효과가 있었다:)
Dbeaver 사용자의 경우: 연결 설정에서 "서비스 이름" 대신 "SID"를 선택하십시오.
저도 같은 문제가 있었어요.저는 그냥 쓰는 거예요.
sqlplus myusername/mypassword@localhost
트릭을 실행함으로써 기본 서비스 이름에 연결할 수단은 기본 서비스 이름으로 연결됩니다.
이 에러는, 애플리케이션이 모든 데이타베이스의 상호 작용에 대해서 새로운 접속을 확립하거나, 접속이 올바르게 닫히지 않는 경우에 발생할 수 있습니다.이를 모니터링하고 확인하는 무료 도구 중 하나는 Oracle SQL 개발자입니다(DB 세션을 모니터링하는 데 사용할 수 있는 유일한 도구는 아니지만).
Oracle 사이트 SQL Developer에서 툴을 다운로드할 수 있습니다.
다음은 세션을 모니터링하는 방법에 대한 스크린샷입니다.(ORA-12514 에러가 발생했을 때, 애플리케이션 유저에게 많은 세션이 축적되고 있는 것은, 접속 풀에 문제가 있는 것을 나타내고 있습니다).
데이터베이스가 기동하고 있는 것을 확인합니다.서버에 로그온하여 ORACLE_SID 환경변수를 데이터베이스 SID로 설정하고 로컬 연결로 SQL*Plus를 실행합니다.
이 문제는 Linux 환경에서 /etc/hosts 파일에서 머신의 IP를 업데이트하여 해결했습니다.
네트워크 IP(inet end)는, 다음의 방법으로 확인할 수 있습니다.
$ifconfig
IP가 /etc/hosts 파일과 일치하는지 확인합니다.
$cat /etc/hosts
/etc/hosts 파일을 편집합니다(네딩된 경우).
$sudo gedit /etc/hosts
안녕.
매우 간단한 조작으로, 「Windows Services」(cmd trompt 단위의 services.msc)로 서비스를 수동으로 개시할 필요가 있었습니다.서비스 이름은 Oracle Service XXXXX입니다.
저도 같은 문제에 직면해서 3일 동안 파헤쳤습니다.
이는 잘못된 TNS 서비스 엔트리가 원인입니다.
sql > sql > sql 을 사용하여 프라이머리 데이터베이스에서 할 수 여부를 합니다.sqlplus sys@orastand as sysdba
)orastand
의
접속할 수 없는 경우는, 서비스에 문제가 있습니다.프라이머리 엔드의 TNS 파일의 서비스명 엔트리를 수정합니다.
같은 방법으로 스탠바이 데이터베이스를 확인합니다.필요한 경우 여기서도 변경하십시오.
하세요.log_archive_dest_2
파라미터에 올바른 서비스 이름이 있습니다.
VM에서 Oracle을 실행하고 있을 수 있는 사용자(예: 저)의 경우 VM의 메모리가 부족하여 OracleDB가 정상적으로 부팅/실행되지 않는 것으로 생각되기 때문에 이 문제가 발생하였습니다.VM 메모리를 증설하고 재기동하면 문제가 해결되었습니다.
여기에는 많은 답변이 있지만, 복사 및 붙여넣기 및 테스트를 즉시 수행할 수 있는 코드 사용 예를 다음에 제시하겠습니다.
의 SERVICE_NAME 에는 SERVICE_NAME이 .을 사용법tnsnames.ora
여기에는 3개의 사전 정의된 서비스 이름(그 중 하나는 "XE")이 포함되어 있습니다.
- Oracle Express 데이터베이스 OracleXE112를 설치했습니다.이 데이터베이스에는 데모 테이블이 이미 설치되어 있습니다.
- 인스톨러를 기동하면, 패스워드의 입력하도록 요구됩니다.비밀번호로 "xxx"를 입력했습니다.(생산에는 사용되지 않음)
- 서버는 192.168.1.158 머신 상에서 동작합니다.
- 서버에서 Windows 방화벽의 TNSLSNR.exe 프로세스에 대한 액세스를 명시적으로 허용해야 합니다.이 프로세스는 포트 1521에서 리슨합니다.
- 옵션 A: C#(.NET2 또는 .NET4)는 Oracle을 추가해야 하는 ODAC11을 다운로드할 수 있습니다.DataAccess.dll을 프로젝트에 추가합니다.또한 이 DLL은 OraOps11w.dll, oci.dll, oraociei11.dll(130MB!), msvcr80.dll에 의존합니다.이러한 DLL은 EXE와 같은 디렉토리에 있거나 다음 위치에서 DLL 경로를 지정해야 합니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath
에서는 64비트 머신에서는 64비트 머신에 추가로HKLM\SOFTWARE\Wow6432Node\Oracle\...
- 옵션 B: ODAC12를 다운로드한 경우 Oracle이 필요합니다.DataAccess.dll, OraOps12w.dll, ociei12.dll(160MB!), oraons.dll, msvcr100.dll.레지스트리 경로는
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
- 옵션 C: 100MB가 넘는 대용량 DLL을 원하지 않는 경우 ODP를 다운로드해야 합니다.NET_Managed12.x.x.x.xxxx.zip 이 있는 곳
Oracle.ManagedDataAccess.dll
이는 4MB에 불과하며 32비트 및 64비트 프로세스에서도 동작하며 다른 DLL에 의존하지 않고 레지스트리 엔트리를 필요로 하지 않는 순수 관리 DLL입니다. - 다음의 C# 코드는, 서버측의 설정 없이 기능합니다(디폴트 인스톨만).
Oracle을 사용합니다.데이터 액세스클라이언트또는Oracle을 사용합니다.Managed Data Access.클라이언트 .... string oradb = "Data Source=(DESCRIPTION=)"+ "(주소_목록=(ADDRESS=(PROTOCOL=RESS)(HOST=192.168.1.158)(PORT=1521)))+ "(CONNECT_DATA=(SERVER=SUVER)(SERVICE_NAME=XE));"+ "사용자 ID=SYSTEM; 비밀번호=xxx;" 사용(OracleConnection conn = new OracleConnection(oradb)) {접속합니다.오픈();사용(OracleCommand cmd = new OracleCommand()){cmd.연결 = conn;cmd.CommandText = "DBA에서 TABLESPACE_NAME을 선택하십시오"데이터 파일"; (OracleDataReaderdr = cmd)를 사용합니다.ExecuteReader(){(박사님) 동안읽기(){listBox.Items.Add (dr["TABLESPACE_NAME"]);}}}}
경우,SERVICE_NAME=XE
12514년SERVICE_NAME
는 옵션입니다.그냥 놔둬도 돼요.
제 경우 데이터베이스의 디스크 공간이 부족했습니다.그래서 반응이 없었지내가 그 문제를 해결하자 모든 것이 다시 작동했다.
지정된 원격 SID가 잘못되었기 때문에 동일한 오류가 발생했습니다.
> sqlplus $DATASOURCE_USERNAME/$DATASOURCE_PASSWORD@$DB_SERVER_URL/$REMOTE_SID
시스템 데이터베이스를 조회했습니다.
global_name에서 *를 선택합니다.
리모트 SID('XE')를 찾았습니다.
그러면 아무 문제 없이 연결할 수 있어요.
제 경우 tnsnames.ora 파일에 SERVICE_NAME 주위의 둥근 괄호가 없습니다.
<DBNAME> =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL=TCP)(HOST = nupark-cnvr-ora )(PORT=1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <DBNAME> ***CLOSING ROUND BRACKET WAS MISSING HERE***
)
)
LISTENER_<DBNAME> =
(ADDRESS = (PROTOCOL = TCP)(HOST = nupark-cnvr-ora)(PORT = 1521))
연결 스트링을 교체하기만 하면 됩니다.
송신원:
jdbc:oracle:thin:@localhost:1521:xe
수신인:
jdbc:oracle:thin:@localhost:1521:orcl
이것은, 인스톨을 사용한 다이나믹 ipadress를 사용한 것이 원인입니다.정적 ipadress를 사용하여 Oracle을 재설치했더니 문제가 없었습니다.
VM 재기동도 문제없었다
이 문제는 '를 교체함으로써 해결되었습니다.''service name'과 올바른 호스트를 가진 URL에 SID가 있습니다.
tnslsnr
는 기동하고 있습니다만, 데이터베이스는 다운하고 있습니다.
Oracle 초보자의 경우 연결이 허용되는 동안 데이터베이스가 다운될 수 있습니다.
이렇게 데이터베이스를 수동으로 시작해야 했습니다.
su - oracle
export ORACLE_SID=XE
sqlplus sys as sysdba
다음으로 sql 콘솔에서
startup
제 경우 부팅에 실패했지만 또 다른 오류 메시지가 표시되며 문제의 원인을 찾았습니다.호스트명을 변경해야 했고 데이터베이스 자동 부팅이 다시 작동했습니다.
이 문제를 해결하기 위해 다음 회피책을 구현했습니다.
명령 프롬프트를 사용하여 ORACLE_HOME을 설정했습니다(cmd.exe 오른쪽 버튼을 클릭하여 시스템 관리자로 실행).
다음 명령어 사용
set oracle_home="path to the oracle home"
모든 프로그램 --> Oracle -ora home1 --> Configuration 이행도구 --> Net Manager --> Listener 순으로 이동합니다.
드롭다운에서 데이터베이스 서비스를 선택합니다.글로벌 데이터베이스 이름과 SID가 모두 동일하게 설정되어 있습니다(이 경우 ORCL).Oracle 홈 디렉토리를 설정합니다.
Oracle Net Manager 창의 예는 다음과 같습니다.
- [파일]을 클릭하여 네트워크 구성을 저장합니다.
문제는 접속 문자열 URL에 SID가 아닌 데이터베이스 이름이 포함되어 있다는 것입니다.데이터베이스 이름을 Oracle 데이터베이스 연결 SID로 바꾸면 이 문제가 해결되었습니다.
SID를 하려면 SID를 참조합니다.tnsnames.ora
filename을 클릭합니다.
XE
SID였습니다..「 SID 」Tomcat을 소개합니다.
<Resource
name="jdbc/my_db_conn"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@//127.0.0.1:1521/XE"
username="test_user"
password="test" />
서버 버전은 "Oracle 11.2 Express"였지만 다른 버전에서도 솔루션이 작동합니다.
DBMS를 사용하여 db 연결 양식을 작성해야 하는 경우가 있었습니다.
SID를 Database(데이터베이스) 필드에 입력하고 드롭다운 필드 옆에 SID(서비스 이름) 값이 아닌 'Service Name(서비스 이름)' 값이 표시되었습니다.
(보통 Oracle 데이터베이스를 사용하지 않기 때문에 차이를 몰랐습니다.)
그래서 에러메시지가 떴어요.
잘못된 URL에 문제가 있을 수 있습니다.
예를 들어 Spring 프레임워크와 함께 오라클 데이터베이스(VM 내부)를 사용하고 있는데 이 문제가 있습니다.
application.properties 파일에 다음과 같은 파일이 있습니다.
spring.datasource.url=jdbc:oracle:thin:@//localhost:1521/orcl12c
그러나 db 버전은 달랐다.
spring.datasource.url=jdbc:oracle:thin:@//localhost:1521/orclcdb
올바른 URL은 tnsnames.ora 파일에서 찾을 수 있습니다(이 파일은 Oracle 서버에서 사용할 수 있으므로 VM을 사용하는 경우 호스트 VM 내에서 이 파일을 찾아야 합니다).예를 들어 VirtualBox의 Oracle에서 이 파일을 표시하는 명령어는 다음과 같습니다.
nano /u01/app/oracle/product/version/db_1/network/admin/tnsnames.ora
Linux 환경의 경우 oracle 파일은 다음과 같습니다.ORACLE_HOME/bin
는 다음과 같이 다른 권한으로 "빨간색"으로 강조 표시되어 있습니다.
이 파일의 권한을 다음과 같이 변경했습니다.
1) Oracle 중지 ->sudo systemctl stop oracle.service
2) oracle 파일의 권한을 변경합니다.ORACLE_HOME/bin
디렉토리 "sudo chmod 777 oracle"
3) Oracle 부팅 ->sudo systemctl start oracle.service
그리고 이 변경 후 lsnrctl 상태를 사용하여 리스너 상태를 확인하였습니다.여기서 db 인스턴스가 정상적으로 로드되었음을 확인할 수 있습니다.
단, sqlplus 명령줄을 사용하여 sqldeveloper에서만 접속할 수 있습니다.ORA-12547: TNS Lost Contact
에러입니다.이것에 의해서, sqldeveloper 를 간단하게 사용할 수 있습니다.
참고: 권한을 변경하기 전에 oracle 파일을 백업하십시오.
언급URL : https://stackoverflow.com/questions/10786782/ora-12514-tnslistener-does-not-currently-know-of-service-requested-in-connect-d
'programing' 카테고리의 다른 글
봄철에 쿼츠 일에 콩 레퍼런스를 주입할 수 있나요? (0) | 2023.03.27 |
---|---|
Wordpress 플러그인:사용자 지정 URL에 연결 (0) | 2023.03.27 |
이미지 크기를 추가할 때 get_the_post_post_url()이 작동하지 않음 (0) | 2023.03.27 |
React propTypes: 오브젝트 오브 쉐이프? (0) | 2023.03.22 |
결합 유형을 교차 유형으로 변환 (0) | 2023.03.22 |