source

Oracle의 동적 테이블 파티셔닝

manycodes 2023. 10. 23. 21:58
반응형

Oracle의 동적 테이블 파티셔닝

저는 엄청난 데이터 볼륨(수억 개의 레코드)을 가진 단일 테이블 위에 제 앱을 위한 데이터베이스 스토리지를 구축하는 과정에 있습니다.날짜 필드에서 인덱스를 사용할 계획입니다. 특정 기간 동안 모든 레코드를 일괄 복구할 것이기 때문입니다(예: 다음날 자정에 모든 레코드 검색).

이 시스템에서는 레코드의 수가 방대하고 성능이 중요한 문제이기 때문에 더 이상 필요하지 않은 파티션을 생성하고 잘라낼 수 있도록 테이블을 동적으로 분할할 수 있는 방법이 있는지 알고 싶습니다.예를 들어, 오늘의 레코드 처리를 마친 후 다음 날에 사용할 파티션을 만들고 나머지 데이터로 채우는 방법은 무엇입니까?

11g에서 INTERVAL 파티션을 정의할 수 있으며 Oracle은 기존 범위에 키가 맞지 않는 새 레코드를 얻으면 자동으로 새 파티션을 만듭니다.이것은 아주 멋진 기능입니다.자세히 알아보세요.

한 가지 주의해야 할 점은 Enterprise Edition 라이센스에 추가로 파티셔닝을 추가로 사용할 수 있다는 점입니다.그래서 그것은 사용하기에 싸지 않습니다.

동적 SQL을 사용하여 파티션을 만들거나 자르는 프로세스를 자동화할 수 있습니다.EXECUCT REMITED를 사용하여 절차를 작성하거나 또는 EXECUCT REMITED를 사용하여 예약합니다.DBMS_SCHEDULER는 10g 기능이며 보다 더 다용도적입니다.DBMS_JOB).

DDL에 자신이 있을 때 먼저 수동으로 파티션 문을 만들고 나중에 프로세스를 자동화하는 것이 좋을 것입니다. ALTER TABLE 문에 대한 설명서에서 모든 synthax를 찾을 수 있을 것입니다.

다음은 파티션을 만들기 위해 생각해낸 샘플입니다.SYSDATE오프셋도 있고요.에 연결된 문자열로 대체 매개 변수를 만들어야 했습니다.SYSDATE:

COLUMN temp_var new_value partition_name_01;
SELECT 'TABLE_NAME_' || TO_CHAR(SYSDATE - 3, 'YYYYMMDD') AS temp_var FROM dual;
COLUMN temp_var new_value partition_date_01;
SELECT TO_CHAR(SYSDATE - 3, 'SYYYY-MM-DD') || ' 00:00:00' AS temp_var FROM dual;
COLUMN temp_var new_value partition_name_02;
SELECT 'TABLE_NAME_' || TO_CHAR(SYSDATE - 2, 'YYYYMMDD') AS temp_var FROM dual;
COLUMN temp_var new_value partition_date_02;
SELECT TO_CHAR(SYSDATE - 2, 'SYYYY-MM-DD') || ' 00:00:00' AS temp_var FROM dual;
COLUMN temp_var new_value partition_name_03;
SELECT 'TABLE_NAME_' || TO_CHAR(SYSDATE - 1, 'YYYYMMDD') AS temp_var FROM dual;
COLUMN temp_var new_value partition_date_03;
SELECT TO_CHAR(SYSDATE - 1, 'SYYYY-MM-DD') || ' 00:00:00' AS temp_var FROM dual;
COLUMN temp_var new_value partition_name_04;
SELECT 'TABLE_NAME_' || TO_CHAR(SYSDATE, 'YYYYMMDD') AS temp_var FROM dual;
COLUMN temp_var new_value partition_date_04;
SELECT TO_CHAR(SYSDATE, 'SYYYY-MM-DD') || ' 00:00:00' AS temp_var FROM dual;
CREATE TABLE TABLE_NAME
(
   SEQ_NO                 NUMBER NOT NULL,
   INSERT_DATE            DATE NOT NULL,
   FIRST_NAME             VARCHAR2 (256 BYTE),
   LAST_NAME              VARCHAR2 (256 BYTE),
   ID_NUM                 NUMBER,
   ID_STATUS              NUMBER
)

PARTITION BY RANGE
   (INSERT_DATE)
   SUBPARTITION BY LIST
      (ID_STATUS)
      SUBPARTITION TEMPLATE (
         SUBPARTITION SP1 VALUES (0) TABLESPACE &tblspce,
         SUBPARTITION SP2 VALUES (1) TABLESPACE &tblspce,
         SUBPARTITION SP3 VALUES (2) TABLESPACE &tblspce)

   (
   PARTITION &partition_name_01
      VALUES LESS THAN
      (TO_DATE ('&partition_date_01',
                   'SYYYY-MM-DD HH24:MI:SS',
                   'NLS_CALENDAR=GREGORIAN')),

   PARTITION &partition_name_02
      VALUES LESS THAN
      (TO_DATE ('&partition_date_02',
                   'SYYYY-MM-DD HH24:MI:SS',
                   'NLS_CALENDAR=GREGORIAN')),

   PARTITION &partition_name_03
      VALUES LESS THAN
      (TO_DATE ('&partition_date_03',
                   'SYYYY-MM-DD HH24:MI:SS',
                   'NLS_CALENDAR=GREGORIAN')),
sysdate

   PARTITION &partition_name_04
      VALUES LESS THAN
      (TO_DATE ('&partition_date_04',
                   'SYYYY-MM-DD HH24:MI:SS',
                   'NLS_CALENDAR=GREGORIAN')))

ENABLE ROW MOVEMENT;

자동으로 처리해주는 제품이 있습니다.Partition Manager for Oracle은 오래된 데이터 삭제 및 보관, 통계 복사본 등 조직 보존을 기반으로 자동 파티션 관리 기능을 제공합니다.http://www.xyrosoft.com 에서 사용해 볼 수 있습니다.

언급URL : https://stackoverflow.com/questions/2191780/dynamic-table-partitioning-in-oracle

반응형