

# RDS for Oracle でのテーブルスペースの縮小
<a name="Oracle.ShrinkTablespace"></a>

Oracle Database 26ai (26.0.0.0) 以降、Amazon RDS for Oracle は `rdsadmin.rdsadmin_util.shrink_tablespace` プロシージャによるテーブルスペースの縮小をサポートしています。データファイルを縮小して、テーブルスペース内の未使用のスペースを再利用するには、この手順を使用します。縮小すると、データ移行やテーブルスペースの再作成を行わずにストレージの消費量を削減できます。

**Topics**
+ [概要](#Oracle.ShrinkTablespace.Overview)
+ [要件](#Oracle.ShrinkTablespace.Requirements)
+ [構文](#Oracle.ShrinkTablespace.Syntax)
+ [パラメータ](#Oracle.ShrinkTablespace.Parameters)
+ [例](#Oracle.ShrinkTablespace.Examples)
+ [考慮事項](#Oracle.ShrinkTablespace.Considerations)
+ [関連リソース](#Oracle.ShrinkTablespace.Resources)

## 概要
<a name="Oracle.ShrinkTablespace.Overview"></a>

時間の経過とともに、Oracle Database のテーブルスペースは、削除または再編成されたデータから未使用のスペースを蓄積する可能性があります。`rdsadmin.rdsadmin_util.shrink_tablespace` プロシージャは、Oracle `DBMS_SPACE.SHRINK_TABLESPACE` の機能をラップし、必要な内部権限を処理します。

テーブルスペースの縮小では、次のモードがサポートされています。
+ **分析モード** (`DBMS_SPACE.TS_MODE_ANALYZE`) – テーブルスペースを評価し、変更を加えずに再利用できるスペースを報告します。
+ **縮小モード** (`DBMS_SPACE.TS_MODE_SHRINK`) – オブジェクトを移動し、テーブルスペース内のデータファイルのサイズを変更して、未使用のスペースを再利用します。これはデフォルトモードです。

## 要件
<a name="Oracle.ShrinkTablespace.Requirements"></a>

テーブルスペースの縮小を使用するには、DB インスタンスが次の要件を満たしている必要があります。
+ Oracle Database 26ai 以降
+ Oracle Enterprise Edition

## 構文
<a name="Oracle.ShrinkTablespace.Syntax"></a>

```
EXEC rdsadmin.rdsadmin_util.shrink_tablespace(
  p_tablespace_name => '{{tablespace_name}}',
  p_shrink_mode     => {{mode}},
  p_target_size     => {{target_bytes}});
```

## パラメータ
<a name="Oracle.ShrinkTablespace.Parameters"></a>


**shrink\_tablespace パラメータ**  

| パラメータ名 | データ型 | デフォルト | 必須 | 説明 | 
| --- | --- | --- | --- | --- | 
| `p_tablespace_name` | `VARCHAR2` | — | はい | 縮小するテーブルスペースの名前。 | 
| `p_shrink_mode` | `NUMBER` | `2` (`TS_MODE_SHRINK`) | いいえ | 縮小モード。分析のみを行う場合は `DBMS_SPACE.TS_MODE_ANALYZE` (`1`)、縮小を実行する場合は `DBMS_SPACE.TS_MODE_SHRINK` (`2`) を使用します。 | 
| `p_target_size` | `NUMBER` | `0` | いいえ | ターゲットサイズ (バイト単位)。`0` (デフォルト) を使用して、可能な最小サイズに縮小します。特定のターゲットに縮小する正の値を指定します。 | 

## 例
<a name="Oracle.ShrinkTablespace.Examples"></a>

### 再利用可能なスペースのテーブルスペースの分析
<a name="Oracle.ShrinkTablespace.Examples.Analyze"></a>

変更を加えずにテーブルスペースを分析するには、次のコマンドを実行します。

```
EXEC rdsadmin.rdsadmin_util.shrink_tablespace('USERS', DBMS_SPACE.TS_MODE_ANALYZE);
```

出力例を次に示します。

```
-------------------ANALYZE RESULT-------------------
Total Movable Objects: 0
Total Movable Size(GB): 0
Original Datafile Size(GB): .1
Suggested Target Size(GB): .06
Process Time: +00 00:00:00.021513
```

### テーブルスペースを最小サイズに縮小する
<a name="Oracle.ShrinkTablespace.Examples.Minimum"></a>

テーブルスペースを縮小し、未使用のスペースをすべて再利用するには、次のコマンドを実行します。

```
EXEC rdsadmin.rdsadmin_util.shrink_tablespace('USERS');
```

出力例を次に示します。

```
-------------------SHRINK RESULT-------------------
Total Moved Objects: 0
Total Moved Size(GB): 0
Original Datafile Size(GB): .1
New Datafile Size(GB): .05
Process Time: +00 00:00:00.281151
```

### 特定のターゲットサイズへのテーブルスペースの縮小
<a name="Oracle.ShrinkTablespace.Examples.Target"></a>

テーブルスペースをバイト単位でターゲットサイズに縮小するには、`p_target_size` パラメータを指定します。ターゲットが達成可能な最小サイズより小さい場合、Oracle はターゲットを自動的に上方に調整します。

```
EXEC rdsadmin.rdsadmin_util.shrink_tablespace('USERS', DBMS_SPACE.TS_MODE_SHRINK, 52428800);
```

## 考慮事項
<a name="Oracle.ShrinkTablespace.Considerations"></a>

テーブルスペースを縮小する場合は、次の点を考慮してください。
+ テーブルスペースの縮小はオンラインオペレーションです。テーブルスペース内のオブジェクトには、縮小している間も引き続きアクセスできます。
+ 縮小オペレーションでは、テーブルやインデックスなどのオブジェクトをテーブルスペース内に移動して、データファイルのサイズを変更する前に空きスペースを統合する場合があります。
+ インデックスは縮小オペレーション後も有効であり、データの整合性は保持されます。
+ `p_target_size` の値がオブジェクトが現在占有しているスペースよりも小さい場合、Oracle は達成可能な最小サイズにターゲットを調整します。
+ `p_target_size` の値は、現在のテーブルスペースサイズを超えることはできません。現在のサイズ以下のターゲットを指定します。
+ テーブルスペース内のオブジェクトに対するアクティブなトランザクションにより、オペレーションが使用可能なすべてのスペースを再利用できない可能性があります。最良の結果を得るには、アクティビティが少ない期間に縮小を実行します。
+ `rdsadmin_util` ラッパーなしで `DBMS_SPACE.SHRINK_TABLESPACE` を直接呼び出すことはサポートされていません。必ず `rdsadmin.rdsadmin_util.shrink_tablespace` ラッパーを使用してください。

## 関連リソース
<a name="Oracle.ShrinkTablespace.Resources"></a>
+ [DBMS\_SPACE.SHRINK\_TABLESPACE](https://docs.oracle.com/en/database/oracle/oracle-database/26/arpls/DBMS_SPACE.html) (Oracle Database ドキュメント)
+ 詳細については、「[Oracle DB インスタンスの一般的なデータベースタスクの実行](Appendix.Oracle.CommonDBATasks.Database.md)」を参照してください。