>  기사  >  데이터 베이스  >  Oracle 데이터베이스 테이블 공간 정렬, 재활용 및 릴리스 작업

Oracle 데이터베이스 테이블 공간 정렬, 재활용 및 릴리스 작업

WBOY
WBOY앞으로
2022-07-18 14:16:505573검색

이 기사에서는 테이블스페이스의 고수위 낮추기, 삭제 중 릴리스 등 데이터베이스 테이블스페이스 정렬, 재활용 및 릴리스 작업과 관련된 문제를 주로 소개하는 Oracle에 대한 관련 지식을 제공합니다. 함께, 모두에게 도움이 되기를 바랍니다.

Oracle 데이터베이스 테이블 공간 정렬, 재활용 및 릴리스 작업

추천 튜토리얼: "Oracle Video Tutorial"

입력 테스트를 위해 Oracle을 사용할 때 많은 양의 테스트 데이터가 생성되며, 삭제 후에도 테이블스페이스의 고수위가 여전히 자동으로 낮아질 수 없습니다. , 결과적으로 테이블스페이스 발생 공백 데이터의 발생은 테이블스페이스 성능에 영향을 미치며 저장 공간도 너무 많이 차지합니다.

1. 테이블스페이스의 높은 수위를 줄입니다.

1. 테이블스페이스와 해당 물리적 ​​파일 이름을 봅니다.

코드는 다음과 같습니다.

select 
b.file_id 物理文件号,
b.file_name 物理文件名,
b.tablespace_name 表空间,
b.bytes/1024/1024 大小M,
(b.bytes-sum(nvl(a.bytes,0)))/1024/1024  已使用M,
substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5)  利用率 
from dba_free_space a,dba_data_files b 
where a.file_id=b.file_id 
group by b.tablespace_name,b.file_id,b.file_name,b.bytes 
order by b.tablespace_name

사용률에 따라 어떤 테이블스페이스를 사용할 수 있는지 직관적으로 결정할 수 있습니다. 석방되다.

2. 휴지통 비우기

코드는 다음과 같습니다.

-- 清除用户回收站
purge recyclebin;
-- 清除全库回收站
purge dba_recyclebin;

삭제 과정에서 남은 데이터를 삭제하세요.

3. 테이블 공간 정리

코드는 다음과 같습니다.

alter tablespace tablespace_name coalesce;

테이블 공간의 조각을 통합하여 테이블 공간의 연속성을 높입니다.

4 RESIZE 코드를 생성합니다

코드는 다음과 같습니다.

select a.file#,a.name,a.bytes/1024/1024 CurrentMB,
ceil(HWM * a.block_size)/1024/1024 ResizeTo,
(a.bytes - HWM * a.block_size)/1024/1024 ReleaseMB,
'alter database datafile '''||a.name||''' resize '||
ceil(HWM * a.block_size/1024/1024) || 'M;' ResizeCMD
from v$datafile a,
(select file_id,max(block_id+blocks-1) HWM
from dba_extents where file_id in
(select b.file# From v$tablespace a ,v$datafile b
where a.ts#=b.ts# and a.name='tablespace_name')
group by file_id) b
where a.file# = b.file_id(+)
and (a.bytes - HWM *block_size)>0
order by 5

위 코드가 실행된 후, 해당 테이블 공간 RESIZE SQL 코드, 이때 해당 SQL 코드를 실행하면 됩니다.

2. 삭제 시 해제

1. 테이블 데이터를 지우고 테이블 공간을 해제합니다.

코드는 다음과 같습니다.

-- 清空表数据
truncate table table_name;
-- 释放表空间
alter table table_name deallocate UNUSED KEEP 0;

이때 테이블은 아직 Truncate를 지원하지 않습니다. 롤백하고 밴드를 자를 수 없습니다. 외래 키가 있는 테이블을 삭제하려면 먼저 외래 키를 취소한 후 삭제해야 합니다.
KEEP 0을 추가하지 않으면 테이블 공간이 해제되지 않습니다.

2. 테이블 데이터 마이그레이션

다음과 같은 오류가 발생하면 테이블스페이스를 정리하거나 휴지통을 비워서 해결할 수 있을 뿐만 아니라, 테이블스페이스에 있는 모든 테이블 데이터를 마이그레이션하여 공간을 확보할 수도 있습니다. 그런 다음 원래 테이블스페이스로 다시 마이그레이션하십시오.

	--需移动的表数据
   select DISTINCT 'alter table '|| owner||'.'||segment_name || ' move tablespace user_test;' from dba_extents where segment_type='TABLE' and file_id=4;
	--需移动的索引数据
   select DISTINCT 'alter index '|| owner||'.'|| segment_name || ' rebuild tablespace user_test;' from dba_extents where segment_type='INDEX' and file_id=4;
   --需移动的分区表数据
   select DISTINCT 'alter table '|| owner||'.'|| segment_name || ' move partition '|| partition_name || ' tablespace user_test;' from dba_extents where segment_type='TABLE PARTITION' and file_id=4;
   --需移动的分区表索引数据
   select DISTINCT 'alter index '|| owner||'.'|| segment_name || ' rebuild partition '|| partition_name || ' tablespace user_test;' from dba_extents where segment_type='INDEX PARTITION' and file_id=4;

위 코드의 file_id는 테이블스페이스를 보면 비교 및 ​​변경이 가능하며, 이때 해당 SQL 코드를 실행하여 마이그레이션할 수 있습니다. 테이블 데이터

추천 튜토리얼: " Oracle Video Tutorial

위 내용은 Oracle 데이터베이스 테이블 공간 정렬, 재활용 및 릴리스 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제