- データベース管理者のための主要20c新機能の学習
- データベース管理者のための主要20c新機能の学習
- パフォーマンスおよび高可用性のオプション
- 自動操作
- SecureFilesのデフラグメンテーション
- 演習: SecureFile LOBの縮小
演習: SecureFile LOBの縮小
この演習では、SecureFile LOBを使用して領域を解放し、パフォーマンスを向上させる方法を示します。
- 新しい演習を開始する前に、演習の環境の推奨事項を参照してください。
- CLOB列のある表を作成します。
- SecureFile LOBの縮小を開始する前に、
/home/oracle/labs/M104780GC10/setup_LOB.sh
シェル・スクリプトを実行し、LOBを拡張して縮小候補にするのに十分な領域を持つ表領域を作成します。$ cd /home/oracle/labs/M104780GC10 $ /home/oracle/labs/M104780GC10/setup_LOB.sh SQL*Plus: Release 20.0.0.0.0 - Production on Fri Dec 13 11:05:28 2019 Version 20.2.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL> DROP TABLESPACE users INCLUDING CONTENTS AND DATAFILES; Tablespace dropped. SQL> CREATE TABLESPACE users DATAFILE '/home/oracle/labs/users01.dbf' SIZE 500M; Tablespace created. SQL> create user hr identified by password; User created. SQL> grant dba to hr; Grant succeeded. SQL> exit Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 $
PDB20
にCLOB列のある表を作成します。$ sqlplus system@PDB20 SQL*Plus: Release 20.0.0.0.0 - Production on Fri Dec 13 11:09:44 2019 Version 20.2.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Enter password: password Last Successful login time: Fri Dec 13 2019 10:42:50 +00:00 Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL> CREATE TABLE hr.t1 ( a CLOB) LOB(a) STORE AS SECUREFILE TABLESPACE users; Table created. SQL>
- 行を挿入し、CLOBデータを更新してコミットします。
SQL> INSERT INTO hr.t1 values ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'); 1 row created. SQL> INSERT INTO hr.t1 Select * from hr.t1; 1 row created. SQL> INSERT INTO hr.t1 Select * from hr.t1; 2 rows created. SQL> INSERT INTO hr.t1 Select * from hr.t1; 4 rows created. SQL> UPDATE hr.t1 SET a=a||a||a||a||a||a||a; 8 rows updated. SQL> UPDATE hr.t1 SET a=a||a||a||a||a||a||a; 8 rows updated. SQL> COMMIT; Commit complete. SQL>
- SecureFile LOBの縮小を開始する前に、
- LOBセグメントを縮小します。
SQL> ALTER TABLE hr.t1 MODIFY LOB(a) (SHRINK SPACE); Table altered. SQL>
- 解放されたエクステントまたはブロックの数を表示します。
SQL> SET PAGES 100 SQL> SELECT * FROM v$securefile_shrink; LOB_OBJD SHRINK_STATUS ---------- ---------------------------------------- START_TIME --------------------------------------------------------------------------- END_TIME --------------------------------------------------------------------------- BLOCKS_MOVED BLOCKS_FREED BLOCKS_ALLOCATED EXTENTS_ALLOCATED EXTENTS_FREED ------------ ------------ ---------------- ----------------- ------------- EXTENTS_SEALED CON_ID -------------- ---------- 74403 COMPLETE 13-DEC-19 11.14.30.702 AM +00:00 13-DEC-19 11.14.33.520 AM +00:00 2 2 2 1 1 1 4 SQL>
その結果、2つのブロックが解放されています。
- CLOBを更新します。
SQL> UPDATE hr.t1 SET a=a||a||a||a||a||a||a; 8 rows updated. SQL> UPDATE hr.t1 SET a=a||a||a||a||a||a||a; 8 rows updated. SQL> UPDATE hr.t1 SET a=a||a||a||a||a||a||a; 8 rows updated. SQL> UPDATE hr.t1 SET a=a||a||a||a||a||a||a; 8 rows updated. SQL> COMMIT; Commit complete. SQL>
- LOBセグメントを縮小します。
SQL> ALTER TABLE hr.t1 MODIFY LOB(a) (SHRINK SPACE); Table altered. SQL>
- 解放されたエクステントまたはブロックの数を表示します。
SQL> SELECT * FROM v$securefile_shrink; LOB_OBJD SHRINK_STATUS ---------- ---------------------------------------- START_TIME --------------------------------------------------------------------------- END_TIME --------------------------------------------------------------------------- BLOCKS_MOVED BLOCKS_FREED BLOCKS_ALLOCATED EXTENTS_ALLOCATED EXTENTS_FREED ------------ ------------ ---------------- ----------------- ------------- EXTENTS_SEALED CON_ID -------------- ---------- 74403 COMPLETE 13-DEC-19 11.22.07.225 AM +00:00 13-DEC-19 11.22.18.281 AM +00:00 2648 2648 2648 0 11 11 4 74403 COMPLETE 13-DEC-19 11.14.30.702 AM +00:00 13-DEC-19 11.14.33.520 AM +00:00 2 2 2 1 1 1 4 SQL>
その結果、2648個のブロックが解放されています。最初の行が変化していないことに注目します。
- CLOBを更新します。
SQL> UPDATE hr.t1 SET a=a||a; 8 rows updated. SQL> COMMIT; Commit complete. SQL>
- LOBセグメントを縮小します。
SQL> ALTER TABLE hr.t1 MODIFY LOB(a) (SHRINK SPACE); Table altered. SQL>
- 解放されたエクステントまたはブロックの数を表示します。
SQL> SELECT * FROM v$securefile_shrink WHERE LOB_OBJD=74403; LOB_OBJD SHRINK_STATUS ---------- ---------------------------------------- START_TIME --------------------------------------------------------------------------- END_TIME --------------------------------------------------------------------------- BLOCKS_MOVED BLOCKS_FREED BLOCKS_ALLOCATED EXTENTS_ALLOCATED EXTENTS_FREED ------------ ------------ ---------------- ----------------- ------------- EXTENTS_SEALED CON_ID -------------- ---------- 74403 COMPLETE 13-DEC-19 11.22.07.225 AM +00:00 13-DEC-19 11.22.18.281 AM +00:00 2648 2648 2648 0 11 11 4 74403 COMPLETE 13-DEC-19 11.24.14.623 AM +00:00 13-DEC-19 11.24.39.373 AM +00:00 5484 5484 5484 1 19 19 4 SQL> EXIT $
その結果、5484個のブロックが解放されています。前の縮小操作の行のみが保持されていることに注目します。
親トピック: SecureFilesのデフラグメンテーション