일반 오라클 접속 문제에 관하여

황제낙엽 2007.07.16 17:52 조회 수 : 203 추천:88

sitelink1  
sitelink2  
extra_vars5  
extra_vars6  
http://blog.empas.com/mobigun/17978626
이 글은 database.sarang.net에 질문과 답변에 있는 글을 옮겼습니다.
오라클을 설치하고 접속이 안될 경우 아래의 내용들을 테스트 해보세요

-----------------------------------------------------------------------------------------

출처 : http://database.sarang.net/

==========================================================================

오라클 접속 문제에 대해서 질문이 무척 많군요.
생각나는대로 오라클 접속 문제에 대하여 정리를 해볼까 합니다.
 
질문하시는 분들 중 대부분이 PHP에서 안되요, 자바에서 안되요. 등등으로 문제를
호소하시는데 그 상태에서 자신이 할 수 있는 여러가지 테스트를 충분히 해보신 다음에
질문을 하시면 답변하시는 분들이 문제를 찾아내는데 훨씬 수월하실 겁니다.
 



1. 오라클 프로세스가 제대로 떠있는지 확인한다.


유닉스 계열의 경우 ps aux 또는 ps -ef를 이용하여 현재 돌아가고 있는 프로세스를
확인하실 수 있습니다.
 
ora_pmon_
ora_dbw0_
ora_lgwr_
ora_ckpt_
ora_smon_
ora_reco_
ora_s000_
 
위에 열거한 프로세스는 오라클이 정상적으로 동작하기 위해서는 반드시 떠 있어야 하는
프로세스들입니다.

윈도우즈 계열에서는 제어판의 서비스 애플릿을 실행하셔서 다음과 같은 서비스가 시작되어
있는지 확인하십시오.

OracleService
 
이 외에도 서비스가 몇개 더 있지만 각각의 정확한 용도는 저도 잘 모르겠네요...:)
일단 중요한 것은 위의 두개입니다.
 



2. 로컬접속이 되는지 확인한다.


프로세스가 제대로 떠있다면 서버의 콘솔이나 텔넷 상에서 sqlplus로 접속해 봅니다.
 
sqlplus system/manager
 
이렇게 입력하여 제대로 접속이 되는지 확인합니다.
이러한 로컬접속에는 리스너가 필요하지 않습니다.
따라서 이 과정이 실패한다면 리스너의 문제가 아니라 오라클 프로세스의 문제라고 볼 수 있습니다.
 
오라클은 $ORACLE_HOME/admin/bdump/alert.log 파일에 로그를 기록합니다.
오라클 데몬의 문제라고 판단되면 이 파일을 살펴보세요.
 
같은 디렉토리에는 procname_.trc 의 형태로 되어 있는 트레이스 파일들도 존 재하는데 이 파일들은
오라클의 각 데몬의 상태에 대한 트레이싱 기록을 가지고 있습니다.

역시 문제해결을 위한 실마리를 찾는데 도움이 되는 정보이니 잘 살펴 보세요.
 



3. 리스너 프로세스가 떠있는지 확인한다.


로컬접속이 제대로 된다면 리스너가 제대로 떠 있는지 확인해야 합니다.
유닉스 상에서는
 
$ORACLE_HOME/bin/tnslsnr LISTENER -inherit
 
라는 프로세스가 보여야 합니다. 윈도우즈 계열에서는 서비스 중에

OracleTNSListener
 
라는 서비스가 시작되어 있어야 합니다.

만약 시작되어 있지 않다면 콘솔이나 텔넷에서 lsnrctl start 명령으로 리스너를
시작할 수 있고 lsnrctl status 라는 명령을 써서 현재 리스너의 상태를 보실 수 있습니다.
 
만약 리스너를 기동하는데 실패한다면 $ORACLE_HOME/network/log/listener.log에
있는 리스너 로그파일을 살펴보십시오.
 



4. 네트워크 연결을 확인한다.


오라클 연결이 되기 위해서는 당연히 TCP/IP 같은 네트워크 연결이
정상적으로 작동 하고 있어야 합니다.

반드시 DNS 이름이나 IP주소에 대하여 ping이 되는지 확인하십시오.
 



5. 원격 TNS 접속이 되는지를 확인한다.


이제는 원격지에 있는 클라이언트로부터 오라클 서버로 접속이 되는지를 확인할 차례 입니다.

먼저 알아두셔야 할 것은 오라클이 설치된 서버에 있는 tnsnames.ora는 데이타베이스 링크를
이용하여 다른 서버로 접속할 때 말고는 사용되지 않는다는 것입니다.

TNS 접속이 되기 위해서는 접속할 클라이언트에 tnsnames.ora 파일이
설정되어 있어야 합니다.

이 설정 파일은 $ORACLE_HOME/network/admin/ 디렉토리에 있습니다.

여기에 들어있는 내용을 확인하신 후에 그 이름을 이용하여 다음과 같이 검사합니다.

tnsping

이렇게 입력했을때 라고 돌아와야 정상적으로 접속되는 것입니다.

흔히 착각하는 것 중 하나가 IP어드레스를 입력했는데 안된다고 하시는 것인데
원래 tnsping은 IP를 주어서는 접속이 안됩니다.
반드시 TNS 이름을 주어야 되는 것이니 알아두시기 바랍니다.

tnsping이 성공한다면 십중팔구 sqlplus로도 접속이 가능합니다.


TNS 접속의 경우에는

sqlplus system/manager@

이라고 접속하는 경우입니다. 만약 이 접속이 실패한다면 오라클 서버나 리스너에
뭔가 심각한 문제가 있는 경우입니다.

우선은 접속을 시도한 현재 디렉토리에 sqlnet.log라는 파일이 생겨 있을 것입니다.
이 로그파일의 내용을 살펴 보시기 바랍니다.
 



6. php 에서 접속을 점검한다.


php에서 오라클 접속이 제대로 안되는 경우는 대부분 오라클 환경변수가 제대로
전달되지 않거나 오라클 공유라이브러리를 제대로 찾지 못해서 발생하는 것이 대부분 입니다.


오라클 환경변수가 필요한 시점은 php가 로딩될 때, 즉 아파치가 시작될 때 필요합 니다.
따라서 php 스크립트 내에서 PutEnv로 지정하던가 아파치 httpd.conf 파일에서
환경변수를 지정하는 것으로는 환경변수가 제대로 전달되지 않습니다.


반드시 apachectl 같이 아파치를 기동하는 스크립트 내에서 환경변수를 지정해 주어야
한다는 것을 기억하세요.


그리고 참고로 Error while trying to retrieve text for error ???? 라는 메시지가
뜨는 경우는 ORA_NLS33 변수가 제대로 지정되어 있지 않아서 발생하는 것입니다.


AMERICAN_AMERICA로 지정되어 있을 경우에는 별 상관이 없지만 KOREAN_KOREA와
같이 다른 로케일로 지정되어 있을 경우에는 반드시 ORA_NLS33 환경변수를 설정하시기 바랍니다.
그렇게 하면 발생한 에러 메시지를 제대로 보실 수 있습니다.


그리고 아파치의 에러로그는 /var/log/httpd/error.log나 /var/log/apache/error.log 에 있습니다.


php와 오라클 연결 사이에 문제가 있다면 이 로그파일에 기록이 남을 것이므로 살펴보시기 바랍니다.
 



7. 자바 서블릿 등에서 접속하는 문제


서블릿 등에서 오라클에 접속하는 문제는 PATH와 CLASSPATH 등을 제대로 설정하는
것이 필요하지만 이것만으로 해결되는 것은 아닙니다.


먼저 $ORACLE_HOME/jdbc/demo 디렉토리에 가시면 demo.tar라는 파일이 있으니
이걸 풀어서 샘플 파일이 제대로 동작하는지 확인해야 합니다.


서블릿 등으로 작업하기 전에 먼저 자바 애플리케이션으로 되어 있는 샘플이 제대로
작동하는지 확인하세요.


이게 제대로 작동한다면 일단 PATH와 CLASSPATH는 제대로 잡혀있다고 볼 수 있습니다.


Jserv나 Tomcat 같은 서블릿 엔진을 사용할 경우에는 단지 CLASSPATH가 환경변수로
잡혀있는 것만으로는 부족하고 서블릿 설정파일에 CLASSPATH를 지정하고 여기에
오라클 jdbc 드라이버의 경로를 등록해 주셔야 합니다.


일단 JDBC를 이용해서 서블릿에서 오라클이 접속되었다면 그 다음은 자바에서 해야 할 몫입니다.


오라클에 관련된 에러의 경우에는 분명히 오라클 에러번호와 메시지를  수반하고 있을 것입니다.
일반적으로 나타나는 NullPointerException과 과 같은 것은 자바 객체가 제대로
초기화되지 않았거나 할 때 나타나는 메시지입니다.


이 메시지 만으로는 거의 아무것도 알 수 없으니 정확히 어느 라인에서 에러가
나는지를 찾아야 합니다.


에러에 대한 로그는 앞에 말한 아파치 에러로그나 서블릿 엔진의 로그파일에 남아 있을 겁니다.
이것은 서블릿 엔진별로 많이 다르므로 각자 찾아보시기 바랍니다.


이상 좀 장황하지만 오라클 접속 문제 해결을 위해 필요한 체크포인트들을 좀 설명 해 보았습니다.
답변을 할 때마다 느끼는 거지만 문제를 찾아내기 위해서는 질문자가 자세한 정보를
설명할수록 문제를 찾기가 쉬워진다는 것입니다.


굳이 육하원칙 따위를 들먹이지 않더라도 무엇을 하려는데 이러이러한 문제가 생긴다.
다음과 같은 에러가 났다 정도는 화면에 나타난 메시지 그대로 옮겨 붙여서 올리는 정도의
성의를 보여야 제대로 답변을 얻을 수 있을 겁니다.
 
  ================================================
    * Oracle Community OracleClub.com
    * http://www.oracleclub.com
    * http://www.oramaster.net
    * 운영자 : 김정식 (oramaster _at_ empal.com)
  ================================================
※ oracleclub 강좌를 다른 홈페이지에 퍼가실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^