ホームページ  >  記事  >  データベース  >  Oracle データベースの表スペースのソート、リサイクル、および解放の操作

Oracle データベースの表スペースのソート、リサイクル、および解放の操作

WBOY
WBOY転載
2022-07-18 14:16:505676ブラウズ

この記事では、Oracle に関する関連知識を提供します。この記事では、主にデータベース表スペースのソート、リサイクル、およびリリース操作に関連する問題 (表スペースの高水位の低下、リリースやその他のコンテンツの削除など) について紹介します。以下で見てみましょう。皆さんのお役に立てれば幸いです。

Oracle データベースの表スペースのソート、リサイクル、および解放の操作

推奨チュートリアル: 「Oracle ビデオ チュートリアル

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 コードを取得できます。このとき、対応する SQL コードは取得できます。テーブル データを移行するために実行する必要があります。

推奨チュートリアル: 「Oracle ビデオ チュートリアル

以上がOracle データベースの表スペースのソート、リサイクル、および解放の操作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。