-
CLOB DBlink 걸기데이터베이스/Oracle 2021. 4. 24. 14:31728x90
- 주의 !
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 - 주의 !