'Oracle'에 해당되는 글 46

  1. 2012.02.03 오라클] DB Link 확인
IT_Expert/DataBase | Posted by 낫기법필 2012. 2. 3. 11:07

오라클] DB Link 확인





1) ================================================
* 개념 *

데이터베이스 링크는 클라이언트 또는 현재의 데이터베이스에서 네트워크상의 다른 데이터베이스에
접속하기 위한 접속 설정을 정의하는 오라클 객체 이다.
그럼 데이터베이스 링크를 걸어보도록 하자.


1. 먼저 특정유저로 접속후 데이터베이스 링크를 만든다.


SQL> connect scott/tiger

create database link 링크이름
connect to 계정이름
identified by 패스워드
using '서비스이름';


SQL> create database link cent_link
connect to scott
identified by tiger
using 'cent212';

 

2. DBLINK 가 정상적으로 질의 되는지 확인한다.

 SQL>  select * from emp@cent_link;

 

ps) 만약  SYNONYM 을 걸었 두었을 경우 뒤의  @cent_link 는 제외해도 된다.

SQL> create synoym emp for emp@cent_link;

SQL> select * from emp;

 

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


여기서 cent212의 service_name 은 클라이언트의 tnsnames.ora 에 아래와 같이 설정되어 있어야 함

cent212 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS =
      (PROTOCOL=TCP)(HOST=192.168.1.212)(PORT=1521)
      ) )
    (CONNECT_DATA =
    (SERVICE_NAME=cent212))
  )
=========================================================


3. 만약 유저별로 데이터베이스링크를 사용할경우 데이터베이스 링크에서 사용된 계정 사용자가 패스워드를 변경하게 되면 모든 사용자가 각각의 데이터베이스링크에서 패스워드를 모두 변경해야 하는 단점이 있다.
이런 단점을 보완하기 위하여 view 를 생성하여 모두 데이터베이스링크를 사용할 필요 없이 view 를 이용하고, 패스워드 변경할 경우에는 데이터베이스링크만 새로 생성하면 모든 사용자가 패스워드 변경없이 접속이 가능하다.

create view 뷰이름
as select * from
테이블@링크이름

SQL> create view cent_view
as select * from
emp@cent_link

4. 접근하려는 계정에게 권한을 할당해준다.

grant select on 뷰이름 to 계정,계정

SQL>grant select on cent_view to ryu, rchwin


5. 질의확인

select * from 계정이름,뷰이름

-> select * from scott.cent_view;


* 만약 link 를 걸지 않은 상태에서 질의를 할경우 아래와 같은 에러가 발생한다.

SQL>  select * from emp@cent_link;
 select * from emp@cent_link
                  *
ERROR at line 1:
ORA-02019: connection description for remote database not found

 

6. dictiony 조회를 통회 dblink 가 정상적으로 생성되었는지 확인할수 있다.

전체 DBLINK 를 볼때 - SYSTEM 권한의 DBA_DB_LINKS

유저별 DBLINK 를 볼때 - USER_DB_LINKS  

 

OWNER                          DB_LINK                        USERNAME                       HOST                           CREATED
------------------------------ ------------------------------ ------------------------------ ------------------------------ --------------
SCOTT                         cent_link        scott                          cent212                       03-JAN-2008

[출처] DB link 문의 (ProDBA) |작성자 흥이

 




출처 : http://cafe.naver.com/prodba.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=7634%26sc=e0d63018014b299a0d%26query=%BF%C0%B6%F3%C5%AC+dblink+USER_DB_LINKS%26clubid=12321220
===================================================
===================================================


2) =================================================

만일 tnsname을 to_8i 로 설정하고 scott 유저로 접속하고자 할때.

 다음과 같이 db link를 생성합니다.

 

 

 

 

create database link to_8i connect to scott identified by tiger

using 'to_8i'

 

위 구문에   using   'to_8i' 라고 있는데

 

tnsnames.ora 파일에  to_8i의 설정이 있어야 한다.

 

db link 는  to_8i의 프로퍼티  즉sid 나  호스트네임을 참조한다.

 

 

여기서 connect to ~ indentified by ~ 절은 두서버간의 유저와 패스워드가 같다면

생략가능합니다.

select * from emp@to_8i; 하셔서 정상적으로 나오면 성공입니다.

synonym 을 생성하면 더 편하겠죠?

create synonym emp for emp@to_8i;

이렇게 하면 select * from emp; 처럼 쓰실수 있습니다.

 

그러나 9i하고 8i과 같이 버전이 차이가 날땐 약간의 문제가 발생할 수도 있습니다.

예를 들면

 long type dblink시에는 약간의 문제가 있으나

8.1.7.3 버전에서는 이문제가 해결되었다고 하네요.

 

 

 

 

==db links 조회

 

==USER ACCOUNT

SELECT * FROM USER_DB_LINKS

 

--DBA ACCOUNT

SELECT * FROM DBA_DB_LINKS

[출처] 오라클 DBLINK|작성자 


출처 : http://blog.naver.com/restrust?Redirect=Log&logNo=50008862804

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

3)===================================================

1. 서비스 NAME과 link할 table의 user/passwd 알아야함.
2. 일단 DB링크를 건 시스템에서 sys나 system 계정으로 로그인이 가능하면
dba_db_links 테이블로 모든 db link를 조회할 수 있고.. 
만약 특정 유저로만 접근이 가능하면 user_db_links 테이블을 조회

DB 링크 거는 방법
CREATE {PUBLIC} DATABASE LINK {dblink_name}
       CONNECT TO    {user_id}
       IDENTIFIED BY {password}
       USING         '{sid}'


PUBLIC : 생성한 사용자 만이 아닌 다른 모든 유저들이 사용할 수 있도록 지정
dblink_name : 생성하고자 하는 DB LINK 명
user_id : 연결하고자 하는 서버의 오라클 계정
password : 해당 오라클 계정의 비밀번호
sid : 서버의 tnsnames.ora에 정의되어 있는 서비스명

EX) TNSNAMES.ORA

CLAY9I = (DESCRIPTION =
   (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL=TCP)(HOST=???.???.???.???)(PORT=1521))
)
(CONNECT_DATA=(SID=ORCL)
))

CREATE DATABASE LINK tsever
CONNECT TO orasys IDENTIFIED BY orapw
USING 'CLAY9I'


만약 sys나 system이 아닌 일반 유저로 link를 걸기 위해서는


GRANT CREATE DATABASE LINK to 유저명;


으로 미리 권한을 생성해 주신 후 만드셔야합니다.

3. 접근 : SELECT * FROM [table_name]@dblink_name

4. DBLINK 확인

SELECT * FROM DBA_DB_LINKS;




출처 : http://blog.naver.com/skylapunjel?Redirect=Log&logNo=150124173289

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