

# 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 데이터베이스의 테이블스페이스에 삭제 또는 재구성된 데이터로 인해 미사용 공간이 누적될 수 있습니다. `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>
+ Oracle Database 설명서의 [DBMS\_SPACE.SHRINK\_TABLESPACE](https://docs.oracle.com/en/database/oracle/oracle-database/26/arpls/DBMS_SPACE.html)
+ 자세한 내용은 [Oracle DB 인스턴스에 대한 공통 데이터베이스 작업 수행](Appendix.Oracle.CommonDBATasks.Database.md) 섹션을 참조하세요.