본문 바로가기

전체 글

오라클 Reference Partitioning (참조 파티션, 레퍼런스 파티션) Oracle Reference Partitioning 은 테이블의 부모-자식 (Parent-Child) 관계를 이용해서 파티셔닝하는 기법입니다. 부모테이블의 파티셔닝 방식을 마치 상속받듯이 자식테이블이 그대로 따라가는 방식입니다. 따라서, 자식테이블에는 부모테이블의 파티셔닝 속성을 따라간다는 명시만 한줄 적어주면 됩니다. 파티셔닝 방식이나, 파티셔닝 키를 어떻게 구성할 지 고민하지 않아도 되죠. -- 부모 테이블 create table CUSTOMERS ( customer_id number, customer_name varchar2(30), birth_date date, constraint CUSTOMERS_PK primary key (customer_id) ) partition by range (bir.. 더보기
오라클 파티션 Auto List Partitioning 기능 사용 방법 (자동 리스트 파티셔닝) 앞에서는 Range 파티션에서 자동으로 다음 파티션을 만들어주는 11g NF 기능인 Auto Interval Partitioning 에 대해서 살펴봤습니다. Oracle 은 여기에서 더 나아가 12cR2 (12c Release 2) 버전에서 자동 리스트 파티셔닝 기능도 만들었습니다. 다음과 같이 기존 리스트 파티션에서 파티션 키값 리스트항목에 없는 새로운 값이 들어오려고 하는 경우에, ORA-14400 에러가 발생합니다. 위에서는 항목에 없는 'VV' 라는 값을 Insert 하니까 바로 에러가 발생하고 있습니다. 아래와 같이 automatic 이라는 키워드만 추가하면 됩니다. 위에서 기존 리스트항목에 없는 'VV' 라는 값을 입력했는데, ORA-14400 에러 없이 정상적으로 Insert 되는 것을 볼 .. 더보기
오라클 파티션 Auto Interval Partitioning 기능 사용 방법 Oracle DB 에서 파티션 기능을 사용하다보면, 해가 바뀌는 시점에 다음해에 해당하는 파티션을 미리 만들어두지 않아서 에러를 만나게 되는 일이 종종 있습니다. 물론, 마지막 파티션을 maxvalue 라는 키워드를 사용해서 만들어주면 되긴 하지만, 관리가 안되어 마지막 파티션이 너무 커지는 일을 당할까봐 일부러 사용하지 않는 경우도 있습니다. 이런 경우에 생각할 수 있는 기능이 자동으로 다음 파티션을 만들어주는 기능입니다. 전문용어로는 Automatic Interval 파티셔닝, 인터벌 파니셔닝 이라고 합니다. 11g New Feature 로 9i, 10g DB 에서는 사용할 수 없는 기능입니다. 이 기능을 이용하는 방법은 매우 간단합니다. 아래와 같이 기존 파티션테이블 만드는 스크립트에 interva.. 더보기
오라클 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.. 더보기