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
'source' 카테고리의 다른 글
Jquery 데이터 테이블이 삭제/재작성 (0) | 2023.10.23 |
---|---|
MariaDB: Select the fields from one column in one table that are not in a subset of another column from another table (0) | 2023.10.23 |
구독 시 최종 관찰 가능 (0) | 2023.10.23 |
PoolableConnectionFactory를 만들 수 없습니다(Io 예외:네트워크 어댑터가 연결을 설정할 수 없음) (0) | 2023.10.23 |
액세스 권한에 의해 금지된 방식으로 소켓에 액세스하려고 시도했습니다. (0) | 2023.10.23 |