본문 바로가기

데이타베이스/Oracle

oracle db link 사용

1. db를 생성한다.(dbca사용 or ddl 로 생성)
db 생성후에 할일
    1) $ORACLE_HOME/dbs/init[SID].ora 생성
        $cp init.ora init[SID].ora
    2) 내용수정
        db_name=디비이름(8자리까지)
        shared_pool_size = 62198988
        control_files = (/oradata경로/SID명/control01.ctl, /oradata경로/SID명/control02.ctl, /oradata경로/SID명/control03.ctl)
        compatible = 10.2.0.1 #주석풀고 수정

2. listener.ora 에 리스너등록

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /home/oracle/app/oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )

#기존 리스너 추가
    (SID_DESC =
      (SID_NAME = DEF1)
      (ORACLE_HOME = /home/oracle/app/oracle/product/10.2.0/db_1)
    )

#생성한 리스너추가
    (SID_DESC =
      (SID_NAME = DEF1LOG)
      (ORACLE_HOME = /home/oracle/app/oracle/product/10.2.0/db_1)
    )
  )

3. tnsnames.ora 에서 생성한 db(SID)를 설정한다.

DEF1LOG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTNAME)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DEF1LOG)
    )
  )

4. dba로 접속해서 사용자에게 권한을 설정한다.

grant CREATE PUBLIC DATABASE LINK, DROP PUBLIC DATABASE LINK to  유저명;


5. db link를 생성한다

CREATE PUBLIC DATABASE LINK "DEF1LOG.REGRESS.RDBMS.DEV.US.ORACLE.COM"     -- 링크명(DEFCON4LOG 로 생성했지만 자동으로 변경되었음)
 CONNECT TO TEST1             -- 접속할 유저(원격지의 유저)
 IDENTIFIED BY "TEST1"         -- 접속 패스워드
 USING 'DEF1LOG';



sql> show parameter global_names; 

NAME                                 TYPE    VALUE
------------------------------------ ------- ------------------------------
global_names                         boolean FALSE


위 명령 수행시 value 가 false 로 되어있다면 링크 생성시의 이름과 db명이 달라도 된다.
true 이면 반드시 같아야됨.



6. 접속테스트

sql> select * from tab@DEF1LOG;




db mount 시

sql> conn sys@defcon4log as sysdba
sql> startup

startup시에 에러 발생하면 1번 사항을 확인한다. 안되면 에러코드 구글링~