2011-06-14 7 views
4

필자는 이전 작업 동안 만들어진 테이블에 많은 양의 데이터가 백업 된 프로덕션 Oracle 데이터베이스를 보유하고 있습니다. 테이블은 서로 독립적이며 나머지 데이터베이스는 독립적입니다.Oracle에서는 많은 양의 데이터가 포함 된 테이블을 삭제해도 안전합니까?

이러한 백업을 한 번에 제거하고 싶습니다. 오라클 최신 버전에서 삭제 된 테이블은 휴지통에서 제거 될 때까지 실제로 삭제되지 않습니다. 나는 그걸 취할거야.

한 번에 모두 삭제할 수 있습니까? DROP 작업 중에 성능 저하가 있습니까? 작업 중에 자원이 부족할 수 있습니까?

가장 안전한 방법은 무엇입니까?

+0

드롭을 수행하고 퍼지 (또는 잘린 후 드롭) – tbone

답변

5

한번에 모두 삭제하는 것이 안전 할 것입니다.

일반적으로 테이블을 삭제하는 것은 테이블의 크기에 관계없이 매우 빠릅니다. DROP은 실제로 어떤 데이터도 변경하지 않으며 오라클은 데이터 딕셔너리를 변경하여 사용 가능한 공간을 표시합니다. 수백 기가 바이트 이상의 데이터가 포함 된 많은 테이블을 삭제했으며 문제가 발생하지 않았습니다. (데이터 파일의 크기가 더 이상 적절하지 않을 수 있지만 또 다른 문제입니다.)

종속성 및 잠금 이외에 지연된 블록 정리로 인해 상대적으로 오랜 시간이 걸리는 유일한 시간이있었습니다. 기본적으로 많은 데이터를 업데이트, 삭제 또는 추가 (추가없이)하면 오라클이 일부 트랜잭션 데이터를 블록에 쓸 수 있습니다. 그 이유는 COMMIT를 즉각적으로 만들지 만 테이블에서 읽는 다음 쿼리가 이전 트랜잭션 항목을 정리해야 할 수도 있기 때문입니다.

하지만 문제가 발생할 확률은 적습니다. 초대형 테이블이있는 경우 직접 경로 삽입으로 생성되었거나 이미 다른 사람이 테이블을 쿼리하고 블록을 정리했습니다. 최악의 경우라도, 시스템이 데이터를 쓸 수있을만큼 충분히 좋으면 트랜잭션을 제거하기에 충분할 것입니다 (트랜잭션이 너무 오래되었거나 아카이브에서 벗어난 경우 ORA-01555 스냅 샷을 실행하기에는 너무 오래 걸릴 수도 있지만 지연 블록 정리 등의 추가 재실행 로그 공간).

2

테이블에 부양 가족이없고 사용 중이 아니면 한 번에 모두 삭제할 수 있습니다. 새로운 recyclebin 기능에 대해 걱정이된다면 "drop table table_name purge"를 수행하면 휴지통을 우회하여 휴지통에서 제거하지 않고 제거 할 수 있습니다.

관련 문제