Oracle/백업&복구

백업&복구 11번째 (DBLink) ; DBLink, Oracle Network

에몽이ㅋ 2012. 2. 19. 08:45
Database link
linux에서의 NFS처럼 oracle내에서 제공하는 원격접속 기능
dblink를 이용한 논리적인 장애 무정지복구 예제 : http://gyh214.tistory.com/107 참조

DB Link하기 전에!

Oracle Network

 * DB Link는 클라이언트 쪽에서 생성해서 서버쪽으로 연결


*네트워크 파일설정
클라이언트(tnsnames.ora) ----> 
                  서버 192.168.0.16(SID:testdb, 신경쓸 파일 listener.ora)으로 연결 시 tnsnames.ora, listener.ora 파일내용
(해당 파일들은 netca실행 후 설정한 다음, $ORACLE_HOME/network/admin/ 아래에 저장됩니다.
생성방법 :  http://blog.naver.com/neocp21c/140152325230 참고)


클라이언트의 tnsnames.ora

# tnsnames.ora Network Configuration File: /home/oracle/product/10g/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.


TESTDB =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.16)(PORT = 1521))

    )
######## HOST는 서버의 IP입니다. 

    (CONNECT_DATA =

      (SERVICE_NAME = testdb)
####### SERVICE_NAME은 서버의 dbname을 써주세요 

    )

  )



서버의 listener.ora

# listener.ora Network Configuration File: /app/oracle/product/11g/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = testdb)  # 서버의 SID
      (ORACLE_HOME = /app/oracle/product/11g)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.16)(PORT = 1521))
####### HOST는 서버의 IP를 적어주세요 
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = /app/oracle  << 없어도 됩니다.



클라이언트에서 서버로 연결이 잘 되었나 확인하기
[oracle@server15 admin]$ tnsping testdb  << testdb는 서버의 SID이름입니다.(tnsnames.ora안에 적힌 SID를 적어주시면 됩니다.)

TNS Ping Utility for Linux: Version 10.2.0.5.0 - Production on 19-FEB-2012 09:19:54

Copyright (c) 1997,  2010, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.16)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = testdb)))
OK (10 msec)  << 연결이 잘 되는 것 확인


DB Link ( dba_db_links 딕셔너리 )
1. 클라이언트에서 DB link생성
SQL> create database link link_testdb
  2  connect to koo
  3  identified by mong_1
  4  using 'testdb';

Database link created.


2. 서버쪽의 자료 확인
SQL> select * from koo.you@link_testdb
  2  ;

        NO ADDRESS    NICK
---------- ---------- ----------
         1 Taiw       Any
         2 Anya       Study

SQL> select * from koo.you;
select * from koo.you
                  *
ERROR at line 1:
ORA-00942: table or view does not exist  << 클라이언트쪽에서는 해당 테이블이 없습니다.


** 여러 DB link관련 명령어들

**** 사용자에게 DB Link 생성 및 삭제 권한 부여 **** 
grant create database link, drop database link to user;
grant create public database link to user;

**** 모든 사용자가 사용가능한 DB Link 생성 ****
create public database link link_name
connect to id
identified by password
using 'server_SID';  << tnsnames.ora에 등록된 SID입니다.
 
**** DB Link 삭제 ****
drop database link link_name;
 
**** public DB Link 삭제 ****
drop public database link link_name;
 
**** 연결된 DB Link 조회 ****
select * from dba_db_links;