2010-01-13 7 views
8

안녕하십니까. 데이터 센터에서 터널을 통해 Oracle DB에 액세스하는 데 문제가 있습니다.ssh 터널을 통한 oracle db 사용. 오류 "ORA-12541 : TNS : 리스너 없음"

(내가/etc/hosts 파일의 IP를 dc로 넣었습니다)와 Oracle DB를 내부에서 액세스 할 수있는 하나의 컴퓨터가있는 꽤 표준적인 데이터 센터가 있습니다.

ssh -L 1521:192.168.1.7:1521 [email protected] 

물론 작동 (때때로 나는 또한 일부 디버그 -vv를 추가 : 내부 네트워크에 우리의 오라클 데이터베이스의 IP 주소는 내가 명령을 사용하고 터널을 만들려면 192.168.1.7

입니다 무엇이 통과하고 있는지 확인하기 위해).

이제 어려운 부분 인 Oracle에 연결하십시오. instantclient 11.2를 설치했습니다. 내 tnsnames.ora를은 다음과 같습니다

./sqlplus username/[email protected] 

그것은 (필자는 ssh를 디버그에서 참조) 그러나 터널을 통해 연결 시작 :

testdb = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 
    ) 
    (CONNECT_DATA = 
     (SERVICE_NAME = dbname) 
    ) 
) 

을 그리고 난 다음 명령을 사용하여 연결하려고 할 때 그 tnsnames.ora 파일의 HOST에서 우리는 하

./sqlplus username/[email protected] 

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 13 20:46:07 2010 

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

ERROR: 
ORA-12541: TNS:no listener 


Enter user-name: 

나는 그것이 작동 인트라넷 (에있을 때의이 같은 명령을 실행하기 위해 노력하고있어 분명히 유일한 차이점은 다음과 같습니다 그것은 이야기를 실패 ve 192.168.1.7이고 localhost는 아님).

나는 또한 간단한 명령 줄을 사용하려고 :

./sqlplus username/[email protected]//localhost:1521/testdb 

또는 대안

./sqlplus username/[email protected]//localhost:1521/testdb 

을하지만 아무것도 내가 어떤 도움이나 제안을 부탁드립니다 :)

도움이되지 않습니다. 가능한 ssh 플래그가 누락 되었습니까?

아마 로그 파일 :

*********************************************************************** 

Fatal NI connect error 12541, connecting to: 
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=DBNAME)(CID=([email protected])(HOST=velvet)(USER=johndoe)))) 

    VERSION INFORMATION: 
    TNS for Linux: Version 11.2.0.1.0 - Production 
    TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.1.0 - Production 
    Time: 13-JAN-2010 20:48:42 
    Tracing not turned on. 
    Tns error struct: 
    ns main err code: 12541 

TNS-12541: Message 12541 not found; No message file for product=network, facility=TNS 
    ns secondary err code: 12560 
    nt main err code: 511 

TNS-00511: Message 511 not found; No message file for product=network, facility=TNS 
    nt secondary err code: 111 
    nt OS err code: 0 

벨벳 내 로컬 호스트 이름과 JohnDoe에 내 로컬 사용자 이름입니다. 다른쪽에 왜 전송됩니까?

UPDATE : 더 데이터 센터 내부에서 약간의 조사 후

그것은 다음과 같습니다 - 첫 번째 연결 포트 1521 에 것입니다 -하지만 SQLPLUS 포트 번호> 3300로 리디렉션됩니다 때마다 다른 3 (적어도 몇 번 시도해보십시오) - 우리가 여물통을 연결하려고 할 때 sqlplus가 localhost에 연결하려고 시도 할 때 분명히 실패합니다.

그래서 "No Listener "우리가 tho를 리디렉션하지 않는다는 사실에서 아마 온다. 포트. 어떤 특정 포트를 사용하도록 강제하는 방법 (아마도 tnsnames.ora 파일의 일부 옵션일까요?)이 있습니까?

+0

에서 볼 수 있습니까? Windows 인 경우 Google USE_SHARED_SOCKET –

+0

누르세요. 솔루션을 찾았습니까? –

+0

명확히하기 : Oracle RAC에 연결하고 있으며 다른 쪽에서 청취자를 재구성 할 수있는 위치에 있지 않습니다 (예 : 공유 소켓을 사용하도록 설정). sqlplus는 몇 번의 연결 시도가있을 때마다 한 번씩 연결합니다. 응용 프로그램이 연결을 관리하지 않습니다. –

답변

3

메타 링크의 ID 361284.1로 봐 (편집 : 효과적으로 대중하지,하지만 정보 here 찾기)

당신의 옵션이 될 것입니다 오라클 연결 관리자처럼 보인다합니다. 그것은 기본적으로 방화벽 내부 포트 리디렉션 을 처리합니다. 나는 전에 그것을 사용하지 않았으므로 더 이상의 조언을 할 수는 없습니다.


업데이트 : MTS를 사용하는 것입니다 이동하는 또 다른 방법은, 특정 포트와 디스패처를 구성하고 방화벽에서이 포트를 엽니 다. 이를 위해 추가 소프트웨어를 설치할 필요는 없지만 공유 서버를 통해 연결하려면 다른 고려 사항 중에서도 LARGE_POOL_SIZE를 늘려야 할 수도 있습니다. 따라서 DISPATCHERS 매개 변수를 변경하려면 DBA 역할이 필요합니다. DB를 반송해야합니다.

+0

불행히도 방화벽과 함께 서버 측에 아무 것도 추가 할 수있는 옵션이 없습니다. 하지만 필자는 Oracle Connection Manager에 대해 읽었습니다. 설치하려는 위치에 있다면 연결시 리디렉션을 처리하는 것이 좋습니다. –

3

정상적으로 작동합니다.ssh 터널에 대한 항목으로 기본 리스너 포트를 사용하지는 않으나 문제가되지 않아야합니다. 나는 또한 ssh 연결, 바람직하게는 전용 계정을 만들기 위해 root 계정을 사용하지 않을 것이다. 공유 서버를 사용하고 있습니까? 아니면 데이터베이스가로드 밸런싱 구성이있는 RAC 데이터베이스일까요? 좋은 설명은 지금 SSH 터널링을 통합하고, 여기 How can I connect to ORACLE DB through ssh tunnel chain (double tunnel, server in company network) ?, 더 복잡 조금 .....

갱신 체크 아웃 DbVisualizer입니다. 적어도 시도해 보는 것이 가치 있다고 생각합니다. 그것은 자유롭지는 않지만 좋은 것입니다. 다중 플랫폼 및 다중 데이터베이스와 매우 유연합니다.

0

당신은 무슨 일이 일어나고 정확히 결정하기 위해 추적을 만들려고 수 :

서버 추적에 대한
  • 시도 here (주의 하시고 모든 새로운 요청이 추적되고 서버가 축소 될 수있다!).
  • 클라이언트 추적의 경우 체크 아웃 here.
-1

아마도 청취자가 아직 시작되지 않았을 것입니다. "lsnrctrl start"명령을 실행하십시오.

+0

아니요, 리스너가 시작되었습니다. 'sqlplus는 몇 번의 연결 시도마다 한 번 연결합니다.'라는 것을주의하십시오. –

-1

좋은 설명은 여기 나를 위해 일한 connection to an oracle database though a SSH secure shell입니다.

  1. 열기 퍼티 세션 페이지는 서버의 이름을 입력하고 확인 SSH가 체크되어 있는지 확인합니다. 서버는 사용자 이름과 비밀번호로 로그인 할 수있는 모든 서버가 될 수 있습니다. 나는 여기 BLUEBIRD라고 불리는 것을 으로 사용합니다!

  2. 연결 -> ssh-> 터널 페이지에서 상단의 두 옵션 ("로컬 포트 ​​허용 ..."및 "원격 포트는 동일 함")을 선택 취소하십시오.

  3. 는 9999 (또는 원본 포트 1024 위의 임의의 포트를 입력합니다.

  4. 대상에서 tnsnames.ora에 따라 데이터베이스 호스트와 포트를 입력합니다. 내 경우에는,이 GREENBIRD 및 포트라는 서버입니다 , 전달되는 포트가 바탕 화면에있는 것처럼

  5. 을 포트를 "로컬"옵션을 확인하십시오.

  6. 의 서버로이를 입력합니다.IP 버전의 경우 "자동"을 선택 상태로 둡니다.

  7. 추가 버튼을 클릭하십시오. 전달 된 포트 목록에서 L9999 greenbird : 1521 (사용자의 값은 다를 것입니다)이 표시됩니다.

  8. 세션 페이지로 다시 이동하여 저장된 세션의 이름을 입력하고 저장을 클릭하십시오.

  9. 열기를 클릭하십시오. 서버의 사용자 이름과 암호를 입력하십시오 (필자의 경우 BLUEBIRD). 정상적인 ssh 세션을 BLUEBIRD라는 서버에 로그인합니다.

+0

멀리 있습니다. 이 질문에는 퍼티에 대한 언급이 없습니다. – zb226

0

MJ! 터널은 초기 tcp 연결에만 사용되며 사용자 자신의 LISTEN 포트는 터널링되지 않으며 아마도 구현되지 않습니다. 방화벽은 활성 FTP와 마찬가지로 사용자에게 다시 연결할 수 있어야합니다. 오라클 용 모든 포트는 "인터넷 방화벽 구축"2/E 23 장, Oracle SQL * Net 및 Net8의 670 페이지부터 시작하여 매우 광범위하게 문서화됩니다. 당신은 데이터베이스 서버의 OS 무엇 SafariBooksOnline.com

ISBN 1565928718