2009-09-24 7 views
1

Oracle웨어 하우스의 이전 데이터를 폐기하려고합니다.일반 아카이브 프로세스를 구현하는 최선의 방법/기술

매우 단순화 된 개요를 제공하기 위해 소스/대상 테이블 등의 매개 변수가있는 PL SQL 저장 프로 시저를 사용하여 프로세스를 개발하라는 제안이 제안되었지만 Oracle ALL_TAB_COLUMNS 뷰를 사용하여 소스 테이블.

이전 실행에서 dest 테이블이있는 경우 제안 된 솔루션에는 원본 테이블의 현재 스키마를 대상 (아카이브) 테이블과 비교하고 차이점이 발견되면 테이블을 동기화하는 작업이 포함됩니다. 제안 된 기능의 한계가 존재한다고 확신하지만이 분야에서 스펙이 꽤 야심적이었던 것처럼 보였지만 PL 게이트 웨이에서 Red Gate의 SQL Compare 유틸리티를 다시 작성하려고하는지는 의문입니다.

두 가지 질문이있는 것 같습니다.

1) PL/SQL은 이러한 작업에 실제로 사용하는 언어입니다. 필자에게 저장 프로 시저는 신속하고 신속한 데이터 작업에 사용되며 복잡한 논리는 C# 또는 기타 .NET 언어와 같이보다 완벽하게 기능하는 클라이언트 언어로 간주됩니다. 10,000 라인의 불완전하게 들여 쓰기 된 단일 저장 프로 시저를 예상하며이를 검토해야합니다. 오라클 SP/Pkg가 그렇게 할 필요는 없다는 것을 알고 있습니다. 그러나 어떤 이유로 인해 개발자는 .NET에서 작성하는 것보다 PL \ SQL을 사용할 때 모듈화가 덜한 경향이 있습니다. 나는 당신이 선택한 당신의 권고와 이유를 환영 할 것입니다.

2) 보관 용도로 활용할 수있는 Oracle 유틸리티 (10g 기준)가 있습니까? 누구든지 조언을 제안합니까?

의견을 제안하는 동안 반복되지 않는 값에 투표 할 것입니다.

Thx.

답변

1

데이터웨어 하우스라고 말하면됩니다. 파티셔닝을 사용하고 있습니까? 그렇다면 분할 계획이 보관하려는 행을 식별합니까? 두 질문에 대한 답변이 모두 "예"이면 partition exchange이 검색중인 기능 일 수 있습니다.

3

먼저이 소리는 PL-SQL 작업과 같습니다. 모듈화되지 않은 코드 문제가 발생할 수 있으며 PL-SQL을 사용하면 더 나은 결과를 얻고 작성하기가 쉬워집니다.

개념 자체는 스키마가 업데이트되면 문제가 발생합니다. 동기화가 실패하거나 악화되고 데이터가 손상됩니다.

주 서버에서 "오래된 레코드 삭제"를 추가하고 오프라인 서버에서만 삽입/업데이트를 수행하는 복제 서버는 어떨까요? 이렇게하면 모든 데이터를 보유하고 실제 데이터를 더 작게 유지할 수 있습니다.

4

PL/SQL은 "신속하고 신속한"데이터 조작을위한 것이 아닙니다. 거기에 매우 실질적인 애플 리케이션이 내장되어 있습니다. 이러한 종류의 작업에는 PL/SQL에 본질적으로 문제가 없습니다. PL/SQL에서 제대로 작성되지 않은 10K 회선 프로 시저를 예상하는 경우이를 사용하지 마십시오. 프로그래머가 최선을 다하도록하십시오.

3

하지만 "할"수작업으로해야합니다.

RDBMS에서 데이터를 폐기하면 위험 할 수 있습니다. 일반적으로 단일 테이블을 보관할 수 없기 때문입니다. 모든 테이블을 종속 테이블로 아카이브해야합니다.

그런 다음 스키마 변경 문제가 있습니다. 아카이브를 진화하는 스키마와 동기화하지 않고 쓸모없는 스키마와 도구를 동기화하는 방법. 현재 응용 프로그램을 "이전 데이터"로 가리켜 서 그것이 반드시 작동해야하는 것은 아닙니다. 현재 데이터로 앱을 최신 상태로 유지할 수있을만큼 힘들며 이전 데이터로 인해 합리적으로 작동하지 않습니다.

데이터의 하위 집합을 선택하는 경우 일부 인위적인 도구를 사용하는 것보다 선택 및 삽입 문을 손으로 직접 작성하고 무결성을 확인하고 값을 확인하는 등의 작업이 훨씬 간단하고 실제로 간단합니다. 힘들지는 것처럼 보일지 모르지만 실제로는 지루합니다.

하지만 일단 완료되면 데이터를 내보내고 병합하는 방법과 방법을 훨씬 더 효과적으로 제어 할 수 있습니다.

PL/SQL로 작성하는 것은 데이터베이스 작업이기 때문에 간단합니다. 왜 서버에 모든 데이터를 드래그하여 다시 넣을 수 있습니까? 이 모든 것이 완료되고 완료되면 PL/SQL 항목의 성능이 향상 될 것입니다.

모듈성, 들여 쓰기 등을 고려하면 야구 박쥐가 발명 된 이유입니다.

0

어쩌면 간단한

create <dest_table> as select * from <source_table>; 

충분하지 것이다 올바르게 요구 사항을 읽어하지만 아니에요? 이미 dest_table에 drop이있는 경우?

+0

대상 테이블이 이미 존재하면 삭제할 수 없습니다. 대상 테이블은 데이터웨어 하우스에 비해 너무 오래되었지만 폐기하기에 너무 오래된 모든 기록 데이터를 포함하기 때문에 삭제할 수 없습니다 – ChadD