2013-08-12 3 views
0

완전히 다른 서버 (DB2)에있는 db에있는 데이터를 아카이브해야합니다. 다음 단계를 통해이 작업을 수행 할 수 있지만 성능이 문제입니다. 보관할 데이터가 너무 많습니다. 어쨌든 최적화 된 아카이브 성능으로이 작업을 수행 할 수 있습니까?DB2는 다른 서버에 DB2로 오래된 데이터를 저장합니다.

/* TEST WITH 1 TABLE */ 

--1. RETRIEVE IDs AND SAVE IN LIST - [USE LOOP TO PUSH RECORDS BASED ON IDs IN AN ARRAY] 
SELECT ID FROM TABLE_1 
WHERE CREATED_TIME >= '2013-08-07 10:06:22' AND CREATED_TIME <= '2013-08-07 11:09:43' 
ORDER BY A.ID ASC 




--2. DROP INDEXES [TOO SLOW!!!] 
ALTER TABLE TABLE_1_ARC DROP PRIMARY KEY 




--3. INSERT RECORDS INTO ARC TABLE [STORED PROCEDURE TO INSERT IN ALL TABLES???] 
INSERT INTO TABLE_1_ARC 
SELECT * FROM TABLE_1 
WHERE CREATED_TIME >= '2013-08-07 10:06:22' AND CREATED_TIME <= '2013-08-07 11:09:43' 
ORDER BY ID ASC 
--LOOPING THROUGH ARRAY FROM STEP 1 WILL BE USED HERE INSTEAD OF WHERE 


--4. DELETE ARCHIVED RECORDS FROM OPERATIONAL TABLE [STORED PROCEDURE TO DELETE EVERY FEW RECORDS???] 
DELETE FROM TABLE_1 
WHERE CREATED_TIME >= '2013-08-07 10:06:22' AND CREATED_TIME <= '2013-08-07 11:09:43' 
--LOOPING THROUGH ARRAY FROM STEP 1 WILL BE USED HERE INSTEAD OF WHERE 



--5. PUT INDEXES BACK [TOO SLOW!!!] 
ALTER TABLE TABLE_1_ARC ADD PRIMARY KEY (ID) 
+0

이 경우 데이터베이스 스위칭을 제 3 자 도구로 처리합니다. –

+1

아카이브 테이블이 다른 데이터베이스에있는 경우 페더레이션을 통해 2 개의 데이터베이스를 어떻게 이야기합니까? –

+0

데이터베이스에서 읽은 후 도구를 사용하여 데이터베이스 소스를 전환하고 삽입을 시작합니다. –

답변

0

CREATED_TIME에 의해 원본 테이블과 보관 파일 테이블을 모두 분할합니다. 그런 다음 소스 테이블에서 파티션을 분리하고이를 아카이브 테이블에 첨부 할 수 있습니다. 이는 거의 즉각적입니다.

+0

OP는 "완전히 다른 서버"에서 아카이브를 원합니다. 파티션을 빠르게 분리 할 수는 있지만 아카이브에 첨부하기 전에 다른 파티션으로 가져와야 할 필요는 없습니까? 또한 표시된 시간대는 63 분이 넘는 활동에 지나지 않습니다. 우리는 컷오프 시간을 선택하기위한 요구 사항이나 레코드가 보관되는 기간을 알지 못합니다. 잠재적으로 상당히 많은 수의 파티션이 될 수 있습니다. – WarrenT

+0

처음에는 파티션을 생각했지만 오히려 시간을 필요로하고 소비했습니다. 내 주요 문제는 삭제 프로세스에 있습니다. 많은 양의 데이터를 효율적으로 보관할 수있는 다른 방법을 제시해 주시기 바랍니다. –

관련 문제