DB Link가 안되서 다시 한번 도움의 손길을 부탁드립니다. 0 2 5,727

by 노을향기 [Oracle 기초] DB Link [2012.09.17 17:01:09]


안녕하세요... 오라클 1부터 배우고 있는 hr user입니다^^: db link에 대해 또 질문드리게 됐습니다^^:
제가 처음 질문에 답해주신 부시맨님 외 한분 고맙습니다.
제가 두가지 문제를 두고 머리 싸매고 있는데도 잘 안되네염 다른분들은 db link 쉽다고 하던데...
전 이해를 아직까지 못해서 어렵네요. 그래서 질문할게 두개에요^^;

<질문1>
vmware에서 오라클 두개를 띄어놓았었구요 11g에서 10g로 링크를 걸었습니다
create(링크생성), drop(링크삭제), select(조회) 는 됐습니다.. 근데 dml 작업시에 행삭제한다고 delete도 하고 해봤는데요
메시지는 행 삭제 됐다고 나왔는데 확인해보려고 select 를 해보니까 테이블이 바뀌지 않고 그대로더라구요...
다른 사람은 dml 작업 저랑 똑같이 했는데 되던데..전 지금 이게 무슨 문제인지 도통 추측이 안되요..

<질문2>
지금하려고 하는건 현제 제가 vmware에서 오라클 11g로 hp(작은서버)에 링크를 걸려고 합니다
hp서버는 가정용인가 직사각형 모양의 작은 서버더라구요 거기다 링크를 걸려고하거든요 
hp서버엔 리눅스5에 11g 올렸구요
근데 create로 링크생성후에 select를 했는데
ORA-12514: TNS:리스너가 현재 접속 기술자에 요청된 서비스를 알지 못함
이라는 오류 메시지가 떴는데요. 검색하다보니까 어떤분은 tnsnames.ora 파일을 만지라고 하고 어떤분은 listener.ora 파일을 만지라고 하더라구요..
제가 각 파일에 추가한 내용은
tnanames.ora파일 추가내용
testdb =
  (DESCRIPTION =
    (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 서버ip주소)(PORT = 1521))
    )
    (CONNECT_DATA =
  (SERVICE_NAME = orcl)
    )
  )

listener.ora파일 추가내용
SID_LIST_LISTENER =
(SID_LIST =
  (SID_DESC =
(SID_NAME = ORCL)
(ORACLE_HOME = $ORACLE_BASE/product/11.2.2/dbhome_1)
(PROGRAM = extproc)
   )
  (SID_DESC =
(ORACLE_HOME = $ORACLE_BASE/product/11.2.0/dbhome_1)
(SID_NAME = ORCL)
   )
)

이렇게 추가했습니다. 여기서 또 하나의 문제가 제가 listener.ora 파일을 볼줄 몰라요.
지금 위에 내용처럼 두개 다가 서버쪽 내용을 써야하는지 아님 SID_DESC위 꺼가 서버꺼고 밑에꺼가 링크거는쪽인지
아님 그 반대인지 아님 두개다 링크거는쪾인지 잘 모르겠습니다.
제가 그리고 지금 db link를 맞게 하는건지도 잘 모르겠구요..

제가 완전 초보거든요. "tns파일하고 리스너 파일 수정해서 하면 되요" 이 말은 절 두번 죽이는거여요^^: 귀찮으시더라도
자세하게 설명 해주시면 고맙겠습니다^^:
서울쪽에 활동영역이신분이 계시다면 물론 실례겠지만
노트북 들고가서 직접 만나뵙고 db link에 대해서 확실히 머리속에 정의 내리고 싶은데...
그렇게까지 해주실 상황에 계신분이 없으실거 같아서... 만약 진짜 시간 되시면 엄청난 실례이겠지만 그렇게 해서라도..
db link에 대해 확실히 알고싶어서요^^; 요건 제 바램입니다.ㅋㅋ;;
만약 진짜진짜 만나서 도움을 주실분이 계신다면... ylgmp@hanmail.net 여기로 편지한통 부탁드려요^^

그럼 다들 행복한 하루 되세요^^
by 신이만든짝퉁 [2012.09.18 11:24:32]
 질문1
-> 제일 먼저 확인 할 것은 커밋을 했는지 여부입니다.
접속한 세션이 서로 다를 경우 커밋을 하기 전까지 서로 다른 결과를 보게 될 수 있습니다.
가령 A세션에서 delete를 했다고 하더라도 커밋을 하기 전까지 B세션에서는 데이터가 존재하는 것으로 보입니다.

만약 같은 세션에서 delete 를 하고, select를 했는데도 데이터가 보인다면 쿼리문을 점검한다거나(다른 테이블의 데이터 삭제로 인한 오인)
접속하려는 계정에 delete 권한 등이 있는지 확인해 보셔야 합니다.


질문2
->  vmware쪽을 클라이언트(SID: testdb, IP : 192.168.0.2), HP를 서버(SID : ORCL, IP : 192.168.0.3)라고 가정하고 말씀드리겠습니다.
클라이언트쪽 tnsnames.ora를 아래와 같이 추가(또는 수정)합니다.
remotedb=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=192.168.0.3)
      (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVER=dedicated)
      (SERVICE_NAME=ORCL)
    )
  )

서버쪽 listener.ora를 아래와 같이 추가(또는 수정)합니다.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.3)(PORT = 1521))
    )
  )

서버쪽에서 리스너를 재시작해줍니다.
$> lsnrctl stop
$> lsnrctl start



클라이언트쪽에서 아래와 같이 서버쪽에 핑을 날려봅니다.
$> tnsping remotedb

OK 라고 메시지가 나오면 서버쪽과 클라이언트쪽 네트워크 연결이 잘된 것입니다.
(만약 연결에 실패했다고 메시지가 나오면, 앞서의 tnsnames.ora, listener.ora의 설정을 다시 확인 해보시기 바랍니다.
그래도 앞의 설정에 문제가 없는데도 연결이 안되면, 클라이언트와 서버쪽간의 네트워크 연결이 정상적으로 안되는 것이니
네트워크 연결상태부터 확인해 이부분부터 해결해야 합니다.
간단한 확인 방법으로는 클라이언트쪽에서 ping 192.168.0.3 해서 서버쪽으로 핑이 제대로 나가는지 확인해보고,
마찬가지로 서버쪽에서 ping 192.168.0.2 을 해서 핑이 클라이언트쪽으로 제대로 나가는지 확인을 해봐야 합니다.
어느 한쪽에서 핑이 제대로 나가지 않으면 양쪽 네트워크를 점검해봐야 합니다. 방화벽 설정 등 )


클라이언트쪽에 디비링크를 생성합니다.

create database link hp_link
connect to 서버쪽계정
identified by 서버쪽계정패스워드
using 'remotedb';


서버쪽으로 쿼리를 날려봅니다.
select count(*) from 서버쪽테이블명@remotedb;

by 노을향기 [2012.09.18 14:42:55]

신이 만든 짝퉁님 답변 너무 고맙습니다^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입