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


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-10-14 (月) 14:29:31