OracleDatabase
2019-10-10
目的 †
RDSではストレージ全体のサイズは小さくできないが、例えばデーブルファイルを小さくして確保した空きを別のテーブルファイルに回す場合など
一度肥大化してしまった表領域を再作成して小さくする。
SQLのチューニングとDBパラメータのチューニングを同時にやっていた時に表領域が異様に消費されてしまったことがありこれで対応した。
SQL †
#sh(sql){{
/* 現在のサイズ */
SET LINSE 120
SET PAGES 100
COL TABLESPACE_NAME FORMAT a15
COL "SIZE(MB)" FORMAT a20
COL "USED(MB)" FORMAT a20
COL "FREE(MB)" FORMAT a20
COL "USED(%)" FORMAT 990.99
SELECT
TABLESPACE_NAME,
TO_CHAR(nvl(total_bytes / 1024 / 1024, 0),'999,999,999,999') AS "SIZE(MB)",
TO_CHAR(nvl((total_bytes - free_total_bytes) / 1024 / 1024,0),'999,999,999') AS "USED(MB)",
TO_CHAR(nvl(free_total_bytes / 1024 / 1024, 0),'999,999,999') AS "FREE(MB)",
ROUND(nvl((total_bytes - free_total_bytes) / total_bytes * 100, 100), 2) as "RATE(%)"
FROM
( select
tablespace_name,
sum(bytes) total_bytes
from
dba_data_files
group by
tablespace_name
),
( select
tablespace_name free_tablespace_name,
sum(bytes) free_total_bytes
from
dba_free_space
group by tablespace_name
)
WHERE
tablespace_name = free_tablespace_name(+)
;
}}
https://www.sql-dbtips.com/tablespace/used/
#sh(sql){{
CREATE TABLESPACE ${TEMPORARY_TABLESPACE_NAME};
/* Amazon RDS では用意されているプロシージャを使いALTER DEFAULT TABLESPAEをする */
EXEC RDSADMIN.RDSADMIN_UTIL.ALTER_DEFAULT_TABLESPACE(TABLESPACE_NAME => '${TEMPORARY_TABLESPACE_NAME}');
/* 縮退対象表領域に何もないことを確認 */
SELECT TABLE_NAME FROM DBA_TABLES WHERE TABLESPACE_NAME = '${SHRINK_TARGET_TABLESPACE_NAME}';
SELECT INDEX_NAME FROM DBA_INDEXEX WHERE TABLESPACE_NAME = '${SHRINK_TARGET_TABLESPACE_NAME}';
DROP TABLESPACE ${SHRINK_TARGET_TABLESPACE_NAME};
CREATE TABLESPACE ${SHRINK_TARGET_TABLESPACE_NAME};
/* デフォルト表領域戻し */
EXEC RDSADMIN.RDSADMIN_UTIL.ALTER_DEFAULT_TABLESPACE(TABLESPACE_NAME => '${SHRINK_TARGET_TABLESPACE_NAME}');
}}
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.Database.html