이 기사에서는 테이블스페이스의 고수위 낮추기, 삭제 중 릴리스 등 데이터베이스 테이블스페이스 정렬, 재활용 및 릴리스 작업과 관련된 문제를 주로 소개하는 Oracle에 대한 관련 지식을 제공합니다. 함께, 모두에게 도움이 되기를 바랍니다.
추천 튜토리얼: "Oracle Video Tutorial"
입력 테스트를 위해 Oracle을 사용할 때 많은 양의 테스트 데이터가 생성되며, 삭제 후에도 테이블스페이스의 고수위가 여전히 자동으로 낮아질 수 없습니다. , 결과적으로 테이블스페이스 발생 공백 데이터의 발생은 테이블스페이스 성능에 영향을 미치며 저장 공간도 너무 많이 차지합니다.
코드는 다음과 같습니다.
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
사용률에 따라 어떤 테이블스페이스를 사용할 수 있는지 직관적으로 결정할 수 있습니다. 석방되다.
코드는 다음과 같습니다.
-- 清除用户回收站 purge recyclebin; -- 清除全库回收站 purge dba_recyclebin;
삭제 과정에서 남은 데이터를 삭제하세요.
코드는 다음과 같습니다.
alter tablespace tablespace_name coalesce;
테이블 공간의 조각을 통합하여 테이블 공간의 연속성을 높입니다.
코드는 다음과 같습니다.
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 코드를 실행하면 됩니다.
코드는 다음과 같습니다.
-- 清空表数据 truncate table table_name; -- 释放表空间 alter table table_name deallocate UNUSED KEEP 0;
이때 테이블은 아직 Truncate를 지원하지 않습니다. 롤백하고 밴드를 자를 수 없습니다. 외래 키가 있는 테이블을 삭제하려면 먼저 외래 키를 취소한 후 삭제해야 합니다.
KEEP 0을 추가하지 않으면 테이블 공간이 해제되지 않습니다.
다음과 같은 오류가 발생하면 테이블스페이스를 정리하거나 휴지통을 비워서 해결할 수 있을 뿐만 아니라, 테이블스페이스에 있는 모든 테이블 데이터를 마이그레이션하여 공간을 확보할 수도 있습니다. 그런 다음 원래 테이블스페이스로 다시 마이그레이션하십시오.
--需移动的表数据 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!