2014-12-09 4 views
0

일 파티션 당 하루 단위의 테이블 파티션을 생성해야하는 이유는 Oracle 11g에서로드가 매우 높기 때문입니다. 나는 'NUMTODSINTERVAL'함수를 사용하여 그것을 할 수있는 많은 블로그를 확인했지만, 테이블에는 날짜 열이 없으며 숫자 열에 파티션을 생성해야합니다. 테이블의 날짜.oracle에서 열 데이터 유형 번호가

cobdate 
--------- 
20141205 

i는 다음과 같이 구현하는 생각 :

partition by range(cobdate) 
interval(1) 

을하지만 새로운 파티션을 생성하지 않으므로이 다음 달에 도달하고 모든 데이터가로 이동합니다 동안 몇 일 후에 문제를 만들 것이다 일부 sys는 나중에 파티션을 정의합니다.

numberdate으로 변환하여 NUMTODSINTERVAL의 파티션 열에서 사용할 수 있습니까? 어느 솔루션으로 내 마음에 현재 ..?

+0

시간 콜렉션에 pseudocolumn ora_rowscn을 사용하고 값을 날짜로 변환하기 위해 SCN_TO_TIMESTAMP를 사용할 수 있습니까? https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns007.htm 행 수준 타임 스탬프를 원할 경우 영향을받는 테이블에 DEPENDENCIES가 활성화되어 있어야합니다. 그렇지 않으면 레코드가 블록 레벨에서 관리됩니다. 'Table_name, all_tables로부터의 의존성을 선택하십시오. 여기서 table_name = 'yourtable'만약 값이 DISABLED라면 블록 레벨 잠금이 가능합니다; 그리고 이것은 당신이 겪고있는 결과가되지 않을 수도 있습니다. – xQbert

+1

"모든 데이터는 나중에 어떤 sys 정의 된 파티션으로 갈 것입니다"라는 의미이며 그 이유는 무엇입니까? 간격 파티션을 사용하는 경우, Oracle은 새로운 값이 발견 될 때마다 시스템 이름의 파티션을 자동으로 작성합니다. 간격 분할의 예상되는 동작을 설명하는 것처럼 들립니다. 이제는 이와 같이 매우 드문 숫자 열에 대한 간격 분할 문제가 발생할 수 있습니다 (특히 2000 년 이전의 데이터가있는 경우).하지만 문제는 아닌 것 같습니다. –

+0

@JustinCave 정답 !! 이제 나는 오라클이 새로운 가치가있을 때마다 새로운 시스템 이름의 파티션을 생성 할 것입니다. 감사합니다.하지만 이제는 3 일 이하의 파티션을 삭제하려면 어떻게해야할까요? 예상되는 행동을 묘사하거나, 다른 방법이 있습니까? 아니요 전 2000 년 이전의 데이터가 없습니다 저는 20140101 이후에만 데이터가 있습니다. 감사합니다. – sabya

답변

0

제안 해주십시오 드디어 내가 아래를 구현 한이 질문에 해당하는 답을 체결 :

CREATE TABLE TEST_PART 
(
    COBDATE     NUMBER(9)  
) 

PARTITION BY RANGE (COBDATE) 
SUBPARTITION BY RANGE (COBDATE) 
( 
    PARTITION P_2014 VALUES LESS THAN (20150101) 
     (SUBPARTITION P_2014_JAN_01 VALUES LESS THAN (20140102)  TABLESPACE TBS_NAME, 
      SUBPARTITION P_2014_JAN_02 VALUES LESS THAN (20140103)  TABLESPACE TBS_NAME, 
      . 
      . 
      . 
      SUBPARTITION P_2014_DEC_31 VALUES LESS THAN (20150101)  TABLESPACE TBS_NAME) 

) 
NOCACHE    
PARALLEL   
MONITORING; 

그리고 난 파티션을 자동으로 후서 만들 것이다 UNIX 쉘 스크립트에서 자동화가 (연도 : 2015,2016 ..). 해피 러닝 :

관련 문제