2016-10-27 4 views
0

우리는 약 6 백 4 십만 행/월로 증가하는 테이블을 파티션하고 있으며 정기적으로 (월간) 파티션을 삭제합니다. 최근에이 테이블의 기본 키에 조인 테이블을 추가했습니다 (계단식 삭제 기능 포함). 이로 인해 조인 테이블이 내부의 행을 참조하기 때문에 파티션을 삭제할 수없는 참조 무결성 문제가 발생합니다.오라클 11g - 캐스케이드 파티션 삭제

우리는 애플리케이션 코드를 작성하는 데 조언을 받았지만 이것이 최적의 해결책이 아니라고 생각했습니다.

이 글을 읽을 때부터했습니다 : https://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm#i1007479를하고 그들이 처음 DELETE FROM table partition (partitionID);에 추천 된 후 ALTER TABLE table DROP PARTITION partitionID;

우리가 걱정하는 것으로 나타납니다

  1. 처리 부하
  2. 상의 영향 로그 실행 취소/다시 실행

누군가가 더 좋은 아이디어가 있는지 궁금합니다. 아니면 나쁜 생각이 아니라는 것을 다시 확신 시켜줄 수 있습니다.

+0

[편집] 귀하의 질문에 추가하십시오'문제의 모든 테이블에 대한 table' 문을 만들 수 있습니다. –

답변

0

Wernfried의 대답은 매우 유용하지만, 내가 한 것은 주 테이블과 같은 조인 테이블을 분할하는 기능이었습니다. 이 방법으로 조인 테이블의 파티션을 삭제 한 다음 상위 파티션을 삭제할 수 있습니다. 이렇게하면 삭제가 필요없는 참조 무결성 문제가 방지됩니다. 삭제는 테이블의 크기 때문에 옵션이 아니 었으며, 실행 취소/다시 실행 로그는 긴장감을 덜게되었습니다.

두 가지 방법으로 달성 할 수 있습니다. 첫 번째 방법은 가장 쉽지만 이전 데이터베이스 버전에서는 작동하지 않을 수 있습니다. 조인 테이블에서 참조 파티션을 만들면 두 파티션을 동기화 상태로 유지할 수 있습니다.

다른 옵션은 부모 파티션에 파티션하는 것과 동일한 행을 하위 파티션에 포함시키는 것입니다. 이것은 결합 테이블의 크기를 증가시키는 단점이 있지만 테이블 파티션이 동기화 상태를 유지할 수 있습니다.

오라클 여기에 자세한 내용이 있습니다 https://docs.oracle.com/database/121/VLDBG/GUID-54D18B18-6838-4115-9389-E1FB0D20A8CA.htm

1

문서는

DELETE FROM sales partition (dec98); 
ALTER TABLE sales DROP PARTITION dec98; 

이 방법은 파티션 테이블의 전체 데이터의 작은 비율을 포함 낙하 할 때 대부분의 작은 테이블에 적합한, 또는 대형 테이블 말합니다.

나는 성능이보다 약간 더 나은 될 수있는 경우에 가정합니다 보통 방법 같은 :

ALTER TABLE table DROP PARTITION partitionID UPDATE INDEXES; 

또는

ALTER TABLE table DROP PARTITION partitionID; 
ALTER INDEX ... REBUILD; 

당신이 DELETE을 건너 뛸 때 당신은하지 않습니다 모든 실행 취소 로그.