dblink
<DB Link순서>
1. Oracle Client 설치 및 Oracle Net Service Name 등록 하기
Oracle에 접속하기 위해서는 Oracle client를 설치하고 접속하고자 하는 Oracle DB에 대한 정보를 등록해줘야 한다. 이 과정에서 ODBC Data Source Name과 비슷한 역할을 하는Oracle Net Service Name을 등록하게 된다. 설치 및 ODBC Data Source Name등록에 대한 설명은 Oracle client 설치 가이드를 참고 하기 바란다.
2. Linked server 등록하기
Linked server name방식으로 작업을 수행하기 위해서는 Enterprise Manager에서 Linked server를 설정하거나 T-SQL에서 Sp_addLinkedServer, Sp_addLinkedSrvLogin, Sp_serverOption, Sp_dropServer 등을 이용해서 설정하면 된다. 각 SP에 대한 자세한 설명은 BOL(온라인설명서)를 참조하기 바라며, 아래는 Linked server를 생성하는 간단한 예이다.
(1) Linked server 생성하기
sp_addlinkedserver [ @server = ] 'server'
[ , [ @srvproduct = ] 'product_name' ]
[ , [ @provider = ] 'provider_name' ]
[ , [ @datasrc = ] 'data_source' ]
[ , [ @location = ] 'location' ]
[ , [ @provstr = ] 'provider_string' ]
[ , [ @catalog = ] 'catalog' ]
예) EXEC sp_addlinkedserver 'JYOra817', 'Oracle', 'MSDAORA', 'JY817'
- JY817이라는 Oracle Net Service Name으로 등록된 Oracle데이터베이스를 JYOra817이라는 이름의 Linked server로 등록한다.
(2) Login 생성하기
sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname'
[ , [ @useself = ] 'useself' ]
[ , [ @locallogin = ] 'locallogin' ]
[ , [ @rmtuser = ] 'rmtuser' ]
[ , [ @rmtpassword = ] 'rmtpassword' ]
예) EXEC sp_addlinkedsrvlogin 'JYOra817', 'FALSE', NULL, 'scott', 'tiger'
- JYOra817이라는 Linked server에 scott/tiger라는 아이디와 패스워드를 이용해서 로그인하는 정보를 등록한다.
3. Linked server를 이용한 QUERY수행하기
(1) OPENQUERY() 사용하기
앞서 생성한 Linked Sever를 이용해서 Query를 수행하고자 할 경우 OPENQUERY()라는 함수를 이용하는 방법이 있으며 구문은 아래와 같다.
OPENQUERY ( linked_server , 'query' )
OPENQUERY를 사용하는 예이다.
- select empno,ename,sal from OPENQUERY ( JYOra817 , 'select empno,ename,sal from scott.emp' )
위의 순서에 따라서 Oracle 클라이언트를 설치하고. Oracle로 접속해서 상대쪽 Oracle 정보를 Select하는것은 성공을 했습니다.
Oracle 넷 매니저로 등록한 거라서 tnsnames.ora에도 연결할 서버 정보가 나와있습니다
그런데, 이상하게 openquery로 질의를 날리면 계속 시간만 잡고 전혀 실행이 되질 않습니다.
혹시나 권한이 없는가 해서 admin 계정 빌려서 접속했는데, 이번에는 mssql server 엔터프라이즈 관리자에서 연결된 서버 확인하자마자 위처럼 계속 시간만 잡아먹고 실행이 전혀 되지 않았습니다. DB가 아예 뻗어버리더군요;;
방화벽 문젠가 싶어서 저희쪽과 상대방 서버쪽 방화벽을 다 확인해 보았는데도, Mssql-Oracle쪽은 나간 로그나 차단된 로그 자체가 존재하질 않습니다. Oracle로 상대박 Oracle 접속할 때는 허용되거나 차단된 정책이 다 나오는데..
Oracle 클라이언트 외에도 여러 버전이 설치가 되어있어서 그런건가요?
Providename = OraOLEDB.Oracle 로 했는데, 제가 어떤 설정을 잘못한 것인지 알고 싶습니다.
#T=dblink : mssql 2008 -> oracle 11g 테스트 완료
EXEC master.dbo.sp_addlinkedserver @server = N'test', @srvproduct=N'Oracle', @provider=N'OraOLEDB.Oracle', @datasrc="N'ORCL'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'test',@useself=N'False',@locallogin=NULL,@rmtuser=N'scott',@rmtpassword='1'
EXEC master.dbo.sp_serveroption @server=N'test', @optname=N'collation compatible', @optvalue=N'true'
GO