테이블 스페이스에서 논리 공간 복구


11

DATA라는 테이블 스페이스가 있으며 자동 확장이 false로 설정되어 있습니다. 이 테이블 스페이스에는 두 개의 데이터 파일이 있으며 350GB의 실제 공간을 차지하도록 설정되어 있습니다.

일주일 전에 user_tablespaces 및 dba_data_files를 쿼리하여 사용 가능한 논리 공간의 20 %가 있음을 알았습니다. 그런 다음 정리를 진행하고이 테이블 스페이스의 테이블에서 많은 레코드를 제거했습니다. 사용 가능한 공간이 크게 증가 할 것으로 예상했습니다. 불행히도 내가보기를 쿼리했을 때 사용 가능한 공간이 20.5 %라는 것을 알았습니다.

데이터 조각화 때문일 수 있습니까? 어떻게 든 테이블 스페이스를 "조각 모음"하고 손실 된 공간을 복구 할 수 있습니까? 아니면 처음부터 테이블 스페이스를 다시 만들어야합니까?

답변:


14

레코드를 삭제할 때 세그먼트를 자동으로 압축하는 것은 없으므로 공간을 확보하기 위해 세그먼트 축소를 수행해야합니다. 다음은 낭비 공간 확보 에 대한 11.2 관리자 안내서에서 발췌 한 것입니다 .

시간이 지남에 따라 테이블 스페이스 내의 객체에 대한 업데이트 및 삭제는 개별적으로 새 데이터에 재사용하기에 충분하지 않은 빈 공간의 포켓을 만들 수 있습니다. 이 유형의 빈 공간을 조각난 여유 공간이라고합니다.

사용 가능한 공간이 조각난 개체는 많은 공간을 낭비하고 데이터베이스 성능에 영향을 줄 수 있습니다. 이 공간을 조각 모음하고 회수하는 가장 좋은 방법은 온라인 세그먼트 축소를 수행하는 것입니다. 이 프로세스는 높은 워터 마크 아래의 조각난 여유 공간을 통합하고 세그먼트를 압축합니다. 압축 후 상위 워터 마크가 이동하여 상위 워터 마크 위에 새로운 여유 공간이 생깁니다. 최고 수위 위의 공간이 할당 해제됩니다. 세그먼트는 대부분의 작업 중에 쿼리 및 DML에 사용할 수 있으며 추가 디스크 공간을 할당 할 필요가 없습니다.

같은 페이지에서 아래 내용을 읽을 수 있습니다.

세그먼트 축소는 온라인, 적절한 작업입니다. 세그먼트 축소의 데이터 이동 단계에서 DML 작업 및 쿼리를 실행할 수 있습니다. 공간이 할당 해제 될 때 축소 작업이 끝나면 짧은 시간 동안 동시 DML 작업이 차단됩니다. 축소 작업 중에는 인덱스가 유지되며 작업이 완료된 후에도 사용할 수 있습니다. 세그먼트 축소에는 추가 디스크 공간을 할당 할 필요가 없습니다.

세그먼트 축소는 상위 워터 마크 위와 아래의 사용되지 않은 공간을 재생합니다. 반대로, 공간 할당 해제는 사용하지 않은 공간을 상위 워터 마크 위에서 만 회수합니다. 축소 작업에서 데이터베이스는 기본적으로 세그먼트를 압축하고 상위 워터 마크를 조정하며 재생 된 공간을 해제합니다.

이 페이지에는 예제를 포함하여이 문제에 대한 자세한 정보가 포함되어 있습니다.

개념 안내서 의 "세그먼트 공간 및 워터 마크" 섹션도 유용 할 수 있습니다.


9

예, 조각화 때문입니다.

공간을 확보하려면 먼저 다음 쿼리를 사용하여 테이블 스페이스에 테이블 목록을 가져옵니다 (파티션은 무시하고 사용중인 경우 질문을 편집하십시오).

select distinct table_name from dba_tables where tablespace_name = 'DATA';

그런 다음 각 테이블에 대해 행 이동을 사용하십시오.

alter table TABLEINDATAPARTITION enable row movement;

그런 다음 테이블을 축소 할 수 있습니다.

alter table TABLEINDATAPARTITION shrink space;

그런 다음 다음을 사용하여 데이터 파일을 축소하십시오.

alter database datafile '/path/to/my/file/data01.dbf' resize 20480M;

데이터 파일 이름 DBA_DATA_FILES은 이미 알고 있는 보기 에서 얻을 수 있습니다 .


훌륭하고 실용적인 답변입니다. +1
레이 리펠
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.