programing

SQLPLUS 오류:ORA-12504: TNS: 수신기에 CONNECT_DATA의 SERVICE_NAME이 지정되지 않았습니다.

telebox 2023. 7. 1. 08:32
반응형

SQLPLUS 오류:ORA-12504: TNS: 수신기에 CONNECT_DATA의 SERVICE_NAME이 지정되지 않았습니다.

Oracle에서 SQLPLUS를 다운로드했습니다.

http://www.oracle.com/technetwork/topics/winx64soft-089540.html

기본 Lite 및 SQL*Plus

그런 다음 SQL*Plus를 시작했습니다.

c:\Program Files\Oracle\instantclient_12_1>sqlplus /nolog

SQL*Plus: Release 12.1.0.2.0 Production on Wed Apr 15 15:25:36 2015

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

데이터베이스에 연결하려고 했습니다.

connect user\password@hostname

오류 메시지를 받았습니다.

ERROR:
ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA

제가 무엇을 빠뜨리고 있나요?

자쿠브가 제안한 쿼리를 실행해봤는데,

SQL> select sys_context('USERENV','SERVICE_NAME') from dual;

SYS_CONTEXT('USERENV','SERVICE_NAME')
--------------------------------------------------------------------------------

SYS$USERS

SQL> select sys_context('USERENV','SID') from dual;

SYS_CONTEXT('USERENV','SID')
--------------------------------------------------------------------------------

877

SQL>

서비스 이름이 없습니다.

 SQL> connect username/password@hostname:port/SERVICENAME

편집

다른 컴퓨터에서 데이터베이스에 연결할 수 있는 경우 해당 컴퓨터에서 실행해 보십시오.

select sys_context('USERENV','SERVICE_NAME') from dual

그리고.

select sys_context('USERENV','SID') from dual

저는 똑같은 상황에서 똑같은 문제에 부딪혔습니다.tnsnames.ora 파일이 없고 명령줄에서 SQL*Plus with Easy Connection Identifier 형식을 사용하려고 했습니다.저는 이 문제를 다음과 같이 해결했습니다.

SQL*Plus® 사용자 가이드 및 참조는 다음과 같은 예를 제공합니다.

sqlplus hr@\"sales-server:1521/sales.us.acme.com \"

다음 두 가지 중요한 사항에 주의하십시오.

  1. 연결 식별자가 따옴표로 묶입니다.두 가지 옵션이 있습니다.
    1. SQL*Plus CONNECT 명령을 사용하여 따옴표로 묶은 문자열을 전달하면 됩니다.
    2. 명령줄에 연결 매개 변수를 지정하려면 따옴표 앞에 백슬래시를 실드로 추가해야 합니다.Bash에서 SQL*Plus에 견적을 전달하도록 지시합니다.
  2. 서비스 이름은 DBA가 구성한 FQDN 형식으로 지정해야 합니다.

기존 연결을 통해 서비스 이름을 검색할 수 있는 좋은 질문을 발견했습니다. 1, 2.이 쿼리를 사용해 보십시오.

SELECT value FROM V$SYSTEM_PARAMETER WHERE UPPER(name) = 'SERVICE_NAMES'

작은 관찰 사항입니다. 계속 conusr\pass를 언급하고 있는데, 이것은 오타입니다. 그렇죠?conusr/pass여야 하기 때문입니다.아니면 유닉스 기반 운영 체제에서는 다른가요?

또한, 만약 당신이 tns names를 사용한다면, 당신의 로그인 문자열은 당신이 이 주제를 시작했을 때와 다르게 보일 것입니다.

tnsnames.ora는 $ORACLE_HOME$\network\admin에 있어야 합니다.연결하려는 시스템의 Oracle 홈이므로 PC의 경우에도 마찬가지입니다.oracle_homes가 여러 개 있고 tnsnames.ora 하나만 사용하려는 경우 환경 변수 tns_admin을 설정할 수 있습니다(예: set TNS_ADM).IN=c:\oracle\tns) 및 해당 디렉토리에 tnsnames.ora를 배치합니다.

원래 로그온 방법(usr/pwd@10.15.240.13: 포트/서비스 이름)은 항상 작동해야 합니다.지금까지는 DBA가 제공할 수 있는 포트 번호를 제외한 모든 정보를 알고 있다고 생각합니다.그래도 이 방법이 작동하지 않으면 서버의 IP 주소를 클라이언트에서 사용할 수 없거나 방화벽 문제(특정 포트 차단)이거나 Oracle 또는 SQL*Plus와 직접 관련이 없는 문제입니다.

음! 잘 부탁드립니다, Remco.

하나의 서버에서만 이러한 이상한 동작을 경험했으며 기본 위치 네트워크/admin임에도 불구하고 env 변수 TNS_ADMIN을 입력했을 때 스크립트에서만 작동했습니다.

다음은 저에게 효과가 있었습니다.

/usr/lib/dll/21/client64/bin/impdp 사용자 이름/password@aws-rds-hostname: 1521/DATABASNAME DIRECTORY=DATA_PUMP_DIR dumpfile=dmp logfile=message.log full=y

언급URL : https://stackoverflow.com/questions/29659264/sqlplus-errorora-12504-tnslistener-was-not-given-the-service-name-in-connect

반응형