본문 바로가기

oracle

오라클 utl_file.get_line() 한글 텍스트 제대로 못 읽는 경우 - 한글깨짐, 캐릭터셋 문제 Oracle DB 의 PL/SQL 프로그램에서 utl_file.get_line() 함수로 텍스트를 한줄씩 읽는 경우 제대로 안읽히는 경우가 있습니다. 한글이 깨지거나 여러줄이 한꺼번에 읽히는 문제가 있습니다. 이것은 DB의 캐릭터셋(Characterset) 환경과 Text 파일의 문자코드가 맞지 않아서 발생하는 현상입니다. 아래와 같이 간단한 PL/SQL 프로그램을 이용해서 테스트 해보겠습니다. set serveroutput on declare f utl_file.file_type; ldir varchar2(100) := 'DATA_PUMP_DIR'; lfile varchar2(100) := 'readfile.txt'; v_line varchar2(2000); begin f := utl_file.fope.. 더보기
오라클 파티션 Exchange (파티션 익스체인지) 파티션테이블(Partition Table)의 한개 파티션과 일반 테이블을 교환하는 것을 Partition Exchange 라고 합니다. 이게 필요한 이유는 파티션의 일부만 떼어내서 작업하고 다시 붙이고 싶은 경우, 로딩한 데이터를 파티션에 끼워넣고 싶은 경우 등입니다. 뭐, 파티션 테이블에 직접 작업을 해도 되겠지만, 작업이 완전한지 검증되기 전까지는 운영중인 파티션테이블을 함부로 건들고 싶지 않기때문에 이런 테크닉을 이용합니다. 또, 대량의 Update 나 Delete 작업을 해야하는 경우, 이런 DML 작업은 엄청난 양의 Undo 와 Redo 를 만들게 되는데, 이런 부담을 줄이기 위한 방안으로 CTAS 또는 Insert 로 변환해서 작업을 할 수 있습니다. 원테이블에 Update/Delete 하는 .. 더보기
오라클 파티션 Split/Merge/Coalesce 샘플 오라클은 파티션테이블(Partition Table)에 대해 다양한 관리작업을 지원합니다. 이 페이지에서는 파티션을 분할하고, 합치는 작업을 해보겠습니다. 아래와 같은 List 파티션테이블에서 .. create table SALES ( sales_no number, sale_year number, sale_month number, sale_day number, customer_name varchar2(30), birth_date date, price number, state varchar2(2) ) partition by list (state) ( partition P_EAST values ('MA','NY','CT','NH','ME','MD','VA','PA','NJ'), partition P_WEST .. 더보기
오라클 파티션 Add/Drop/Modify/Truncate/Rename 샘플 오라클은 파티션테이블(Partition Table)에 대해 다양한 관리작업을 지원합니다. 이 페이지에서는 파티션을 추가하거나, 삭제하거나, 자르거나, 이름을 변경하는 등의 작업을 해보겠습니다. 아래와 같은 Range 파티션테이블에서 .. create table SALES ( sales_no number, sale_year number, sale_month number, sale_day number, customer_name varchar2(30), birth_date date, price number ) partition by range (sales_no) ( partition SALES_P1 values less than (3), partition SALES_P2 values less than (5) .. 더보기
오라클 Global Partitioned Index (글로벌 파티션 인덱스) 파티션 테이블에 대해 2가지 종류의 파티션 인덱스를 생성할 수 있습니다. - Local Partitioned Index (지역 파티션 인덱스, 로컬 인덱스) - Global Partitioned Index (전역 파티션 인덱스, 글로벌 인덱스) 글로벌 인덱스는 로컬 인덱스와 달리 파티션테이블의 파티션 구성을 따르지 않습니다. 글로벌 인덱스는 아래와 같이 생성할 수 있습니다. -- 1) 파티션 테이블 생성 create table SALES ( sales_no number, sale_year number, sale_month number, sale_day number, customer_name varchar2(30), birth_date date, price number ) partition by range.. 더보기
오라클 Local Partitioned Index (로컬 파티션 인덱스) 파티션 테이블에 대해 2가지 종류의 파티션 인덱스를 생성할 수 있습니다. - Local Partitioned Index (지역 파티션 인덱스, 로컬 인덱스) - Global Partitioned Index (전역 파티션 인덱스, 글로벌 인덱스) 로컬 인덱스는 파티션테이블과 똑같은 구성으로 인덱스를 파티션하는 것을 말합니다. 즉, 인덱스의 파티션을 구분하는 파티션키를 테이블의 파티션키와 같은 것을 사용하는다는 의미입니다. -- 1) 파티션 테이블 생성 create table SALES ( sales_no number, sale_year number, sale_month number, sale_day number, customer_name varchar2(30), birth_date date, price n.. 더보기
오라클 복합파티션(Composite Partition) Range + Range 샘플 (11g ~ ) 오라클은 Range, List, Hash 파티션을 지원하고, 이들간의 다양한 조합을 지원합니다. 이중에서 아래는 Range Partition + Range Sub Partition 샘플입니다. create table SALES ( sales_no number, sale_year number, sale_month number, sale_day number, customer_name varchar2(30), birth_date date, price number, state varchar2(2) ) partition by range (birth_date) subpartition by range (sales_no) subpartition template ( subpartition S1 values less th.. 더보기
오라클 복합파티션(Composite Partition) Range + List 샘플 (9i ~ ) 오라클은 Range, List, Hash 파티션을 지원하고, 이들간의 다양한 조합을 지원합니다. 이중에서 아래는 Range Partition + List Sub Partition 샘플입니다. create table SALES ( sales_no number, sale_year number, sale_month number, sale_day number, customer_name varchar2(30), birth_date date, price number, state varchar2(2) ) partition by range (birth_date) subpartition by list (state) subpartition template ( subpartition S1 values ('MA','NY','.. 더보기