ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CLOB DBlink 걸기
    데이터베이스/Oracle 2021. 4. 24. 14:31
    728x90
    • 주의 ! 
      12.2 이전 버전에서는 Distributed LOB operations 가 지원되지 않는다
    • OS : Red Hat
    • Database : Oracle 19c 

     

    | Clob 이란 ? 

    - LOB는 텍스트, 이미지, 비디오, 사운드 등 구조화되 않은 대형 데이터를 저장하는데 사용한다.
    - 일반적으로 테이블에 저장되는 구조화된 데이터들은 크기가 작지만, 멀티미디어 데이터는 크기가 크다.
    - 크기가 큰 데이터는 DB에 저장하기 힘들기 때문에 OS상 존재하는 파일에 데이터베이스가 접근한다.
    - LONG, LONG RAW 데이터 유형은 예전에 사용했던 것이고, 현재는 대부분 LOB 데이터 유형을 사용한다.
    - TO_LOB 함수를 이용하여 LONG 및 LONG ROW를 LOB으로 변경할 수 있다.

     

    1. (Source) 실습데이터 생성하기


    ##DBLINK 쓸 유저 생성 및 연결
    sql> create user LINKER identified by linker;
    sql> grant resource, connect, dba to LINKER;
    sql> conn LINKER/linker;
    
    ##테이블 생성
    sql> create table test_clob(
    id number,
    ename varchar2(10),
    resume clob);
    
    ##clob데이터 생성
    [oracle] vi resume1.txt
    name soyeon 
    fname Kim
    dob 03 oct 1996
    
    [oracle] vi resume2.txt
    name jiyeon
    fname Kim
    dob 19 apr 2001
    
    ##csv 파일 생성
    #이 파일에 공백 생기면 로드 할 때 에러남. 입력할 데이터만 들어가도록 주의
    [oracle] vi emp.csv
    1,soyeon,/home/oracle/sample/resume1.txt
    2,jiyeon,/home/oracle/sample/resume2.txt
    
    ##ctl 파일 생성
    [oracle] vi testclob.ctl
    load data
    infile '/home/oracle/sample/emp.csv'
    into table test_clob
    replace
    fields terminated by ',' trailing nullcols
    (
    id integer external(3),
    ename char(10),
    clob_file_loc filler char(100),
    resume lobfile(clob_file_loc) terminated by EOF
    )
    
    ##실행
    [oracle] sqlldr LINKER/linker control=testclob.ctl

     

    2. (Target) 서버 세팅

    • 타겟, 즉 클라이언트가 소스에 링크를 걸어 자료를 받는다. 문을 두드리는 애
    • DBLINK 생성을 위해 클라이언트 서버의 tnsnames.ora 파일을 사용한다.

    ##원격 서버 정보 추가
    [oracle] vi app/product/19c/network/admin/tnsnames.ora
    YOUNHA =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = [타겟서버IP])(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = YOUNHA)
      )
    )

     

     

    3. (Source) 서버 세팅 및 연결 확인

    • DBLINK 생성을 위해 원격 서버의 listener.ora 파일을 사용한다.
    • lsnrctl start 하면 파일 수정 굳이 필요 없이 바로 리스너 실행시킬 수 있다.

    ##DBLINK 생성을 위해 오라클 데이터베이스 이름 검색 
    [oracle] echo $ORACLE_SID
    YOUNHA
    
    ##방화벽 내리기 
    ##oracle 계정에서 하면 permission denied 됨
    [root] systemctl stop firewalld
    [root] systemctl disable firewalld
    [root] sed -i s/SELINUX=enforcing/SELINUX=disabled/ /etc/selinux/config
    
    [oracle] lsnrctl start

     

    • (클라이언트 -> 서버) 잘 연결되었는지 확인
    ##둘 중 아무거나 해도 됨
    [oracle] tnsping [타겟서버 IP]
    [oracle] tnsping [타겟서버 SID]
    OK (0 msec) #이거 뜨면 연결 된 것임

     

    • 링크가 잘 걸렸는지 확인
    [oracle] sqlplus LINKER/LINKER@YOUNHA
    
    -> LINKER
    -> linker

     

    4. (Target) DBLINK 생성 및 연결

    • DBlink는 타겟 쪽에서 생성하여 소스로 연결한다.

    ## create public database link (원하는 DBLINK 이름) connect to (어떤 계정으로 연결할 것인지) identified by (해당 계정 비밀번호) using '(SOURCE DB의 SID)';
    sql> conn LINKER/linker;
    sql> create public database link CLOB connect to LINKER identified by linker using 'YOUNHA';
    
    ##필요시 삭제
    sql> drop public database link CLOB;
    > ORA-00988: missing or invalid password(s) 오류
    원인 : 비밀번호가 숫자일 경우 발생
    해결 : 비밀번호를 문자로 수정

    sql> alter user LINKER identified by linker;

     

    • 확인 ( 클라이언트  DB )
    sql> select * from LINKER.test_clob@CLOB;

    ##DBLINK 연결 안한 경우
    sql> select * from test_clob;

     

    5. 동기화 확인


    수석님 설명 추가

    ##source DB에 새로운 데이터 넣어봄
     sql> insert into test_clob values (3, 'TEST', 'I want to go home and sleep all day');
     sql> commit;
    ##target DB에서 확인
    sql> select * from LINKER.test_clob@CLOB;
    > 소스에서는 분명 Insert 했는데 클라이언트에서 안보이는 경우?!
    원인 : insert는 DML 구문임을 명심해야 한다!
    해결 : commit 해주기
    728x90

    '데이터베이스 > Oracle' 카테고리의 다른 글

    Oracle 11g 기동 시 오류  (0) 2021.08.13
    Oracle 11g 설치 시 경고/오류  (0) 2021.08.13
    RHEL yum install 안될 경우 해결  (0) 2021.05.12
    sqlplus 에서 방향키 사용  (0) 2021.04.28

    댓글

Designed by Tistory.