概要
表領域レベルの圧縮の動作を確認していきます。
マニュアル
Oracle® Database 管理者ガイド 19c
13.2.4 デフォルト圧縮属性を持つ表領域
表領域の作成時に、表領域に作成されるすべての表と索引またはそれらのパーティションをデフォルトで圧縮するように指定できます。
- デフォルト圧縮属性を持つ表領域について
表領域を作成する際に、表領域に作成されるすべての表および索引のデータのデフォルト圧縮を指定できます。
デフォルト圧縮レベルは、表領域を構成するパーティションにも適用されます。このデータを圧縮するとディスク使用量を削減できます。
- デフォルト圧縮属性を使用した表領域の作成
表領域を作成するときに表圧縮のタイプを指定するには、DEFAULTキーワードを使用し、その後に圧縮タイプを含む表圧縮句を指定します。
DEFAULTキーワードを使用して、その後に索引圧縮句と索引圧縮タイプを指定すると、索引圧縮のタイプを指定することもできます。
実行例
SQL> show con_name
CON_NAME
PDB1
SQL> create tablespace comp_test datafile '+DATA' DEFAULT ROW STORE COMPRESS ADVANCED;
表領域が作成されました。
SQL> select f.file_id,f.tablespace_name,f.file_name,f.bytes,f.blocks,f.autoextensible,t.compress_for
from dba_tablespaces t,dba_data_files f
where t.tablespace_name = f.tablespace_name
order by f.file_id;
2 3 4
FILE_ID TABLESPACE_NAME FILE_NAME BYTES BLOCKS AUTOEXTEN COMPRESS_FOR
9 SYSTEM +DATA/ORCL/B22F6C4AEEEA2C74E0536538A8C04AE5/DATAFILE/system.284.1054420929 241172480 29440 YES
10 SYSAUX +DATA/ORCL/B22F6C4AEEEA2C74E0536538A8C04AE5/DATAFILE/sysaux.282.1054420693 1672478720 204160 YES
11 UNDOTBS1 +DATA/ORCL/B22F6C4AEEEA2C74E0536538A8C04AE5/DATAFILE/undotbs1.283.1054420713 209715200 25600 YES
12 USERS +DATA/ORCL/B22F6C4AEEEA2C74E0536538A8C04AE5/DATAFILE/users.286.1054421063 38010880 4640 YES
13 UNDO_2 +DATA/ORCL/B22F6C4AEEEA2C74E0536538A8C04AE5/DATAFILE/undo_2.304.1054459615 209715200 25600 YES
14 EXAMPLES +DATA/ORCL/B22F6C4AEEEA2C74E0536538A8C04AE5/DATAFILE/examples.329.1056635519 1073741824 131072 YES
16 COMP_TEST +DATA/ORCL/B22F6C4AEEEA2C74E0536538A8C04AE5/DATAFILE/comp_test.413.1056984971 104857600 12800 YES ADVANCED
SQL> create table emp2 as select * from emp where 0=1;
表が作成されました。
SQL> alter table emp2 modify (empno number(10));
表が変更されました。
SQL> begin
for i in 1..1000000 loop
insert into emp2 (empno,ename,job,mgr,hiredate,sal,comm,deptno)
values (i,DBMS_RANDOM.STRING('p',8),null,null,sysdate,null,null,null);
commit;
end loop;
end;
/
2 3 4 5 6 7 8
PL/SQLプロシージャが正常に完了しました。
SQL> SELECT TABLE_NAME
,TABLESPACE_NAME
,COMPRESSION
,COMPRESS_FOR
FROM USER_TABLES
;
2 3 4 5 6
TABLE_NAME TABLESPACE_NAME COMPRESSION COMPRESS_FOR
DEPT USERS DISABLED
EMP USERS DISABLED
BONUS USERS DISABLED
SALGRADE USERS DISABLED
DUMMY USERS DISABLED
EMP2 USERS DISABLED
SQL> SELECT SEGMENT_NAME
,SEGMENT_TYPE
,TABLESPACE_NAME
,ROUND(BYTES/1024,2) KBYTES
FROM USER_SEGMENTS
WHERE SEGMENT_NAME like '%EMP%'
;
2 3 4 5 6 7
SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME KBYTES
EMP TABLE USERS 64
EMP2 TABLE USERS 33792
SQL> create table emp_comp tablespace comp_test as select * from emp where 0=1;
表が作成されました。
SQL> SELECT TABLE_NAME
,TABLESPACE_NAME
,COMPRESSION
,COMPRESS_FOR
FROM USER_TABLES
WHERE TABLE_NAME LIKE '%EMP%'
;
2 3 4 5 6 7
TABLE_NAME TABLESPACE_NAME COMPRESSION COMPRESS_FOR
EMP_COMP COMP_TEST ENABLED ADVANCED
EMP2 USERS DISABLED
EMP USERS DISABLED
SQL> alter table emp_comp modify (empno number(10));
表が変更されました。
SQL> begin
for i in 1..1000000 loop
insert into emp_comp (empno,ename,job,mgr,hiredate,sal,comm,deptno)
values (i,DBMS_RANDOM.STRING('p',8),null,null,sysdate,null,null,null);
commit;
end loop;
end;
/
2 3 4 5 6 7 8
PL/SQLプロシージャが正常に完了しました。
SQL> SQL> col SEGMENT_NAME for a40
col PARTITION_NAME for a50
SELECT SEGMENT_NAME
,SEGMENT_TYPE
,TABLESPACE_NAME
,ROUND(BYTES/1024,2) KBYTES
FROM USER_SEGMENTS
WHERE SEGMENT_NAME like '%EMP%'
;
SQL> SQL> 2 3 4 5 6 7
SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME KBYTES
EMP TABLE USERS 64
EMP2 TABLE USERS 33792
EMP_COMP TABLE COMP_TEST 23552
SQL> select SEGMENT_NAME, MB, MB/decode(NOCOMP_SIZE, 0, MB, NOCOMP_SIZE)*100 as RATIO
from (select SEGMENT_NAME, MB, (lag(MB, 1, 0) over (order by MB DESC)) NOCOMP_SIZE
from (select SEGMENT_NAME, sum(BYTES)/1024/1024 MB
from USER_SEGMENTS
where SEGMENT_NAME like 'EMP%'
group by SEGMENT_NAME
)
);
2 3 4 5 6 7 8
SEGMENT_NAME MB RATIO
EMP2 33 100
EMP_COMP 23 69.6969697
EMP .0625 .27173913
SQL> create table emp_direct tablespace comp_test as select * from emp where 0=1;
表が作成されました。
SQL> alter table emp_direct modify (empno number(10));
表が変更されました。
SQL> begin
for i in 1..1000000 loop
insert into emp_direct (empno,ename,job,mgr,hiredate,sal,comm,deptno)
values (i,DBMS_RANDOM.STRING('p',8),null,null,sysdate,null,null,null);
commit;
end loop;
end;
/
2 3 4 5 6 7 8
PL/SQLプロシージャが正常に完了しました。
SQL> SELECT TABLE_NAME
,TABLESPACE_NAME
,COMPRESSION
,COMPRESS_FOR
FROM USER_TABLES
WHERE TABLE_NAME LIKE '%EMP%'
;
2 3 4 5 6 7
TABLE_NAME TABLESPACE_NAME COMPRESSION COMPRESS_FOR
EMP_COMP COMP_TEST ENABLED ADVANCED
EMP_DIRECT COMP_TEST ENABLED ADVANCED
EMP2 USERS DISABLED
EMP USERS DISABLED
SQL> SELECT SEGMENT_NAME
,SEGMENT_TYPE
,TABLESPACE_NAME
,ROUND(BYTES/1024,2) KBYTES
FROM USER_SEGMENTS
WHERE SEGMENT_NAME like '%EMP%'
;
2 3 4 5 6 7
SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME KBYTES
EMP TABLE USERS 64
EMP2 TABLE USERS 33792
EMP_COMP TABLE COMP_TEST 23552
EMP_DIRECT TABLE COMP_TEST 23552
SQL> create table emp_impdp tablespace comp_test as select * from emp where 0=1;
表が作成されました。
SQL> alter table emp_impdp modify (empno number(10));
表が変更されました。
SQL> alter session set container = pdb1;
セッションが変更されました。
SQL> create or replace directory SCOTT_DIR as '/u01/app/oracle/admin/orcl/dpdump';
ディレクトリが作成されました。
SQL> grant read, write on directory SCOTT_DIR to SCOTT;
権限付与が成功しました。
SQL> grant exp_full_database to SCOTT;
権限付与が成功しました。
SQL> grant imp_full_database to SCOTT;
権限付与が成功しました。
$ expdp system/system@pdb1 directory=scott_dir tables=scott.emp2 logfile=emp2.log
Export: Release 19.0.0.0.0 - Production on 金 11月 20 17:14:48 2020
Version 19.8.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
"SYSTEM"."SYS_EXPORT_TABLE_01"を起動しています: system/********@pdb1 directory=scott_dir tables=scott.emp2 logfile=emp2.log
オブジェクト型TABLE_EXPORT/TABLE/TABLE_DATAの処理中です
オブジェクト型TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
オブジェクト型TABLE_EXPORT/TABLE/STATISTICS/MARKERの処理中です
オブジェクト型TABLE_EXPORT/TABLE/TABLEの処理中です
. . "SCOTT"."EMP2" 26.94 MB 1009999行がエクスポートされました
マスター表"SYSTEM"."SYS_EXPORT_TABLE_01"は正常にロード/アンロードされました
******************************************************************************
SYSTEM.SYS_EXPORT_TABLE_01に設定されたダンプ・ファイルは次のとおりです:
/u01/app/oracle/admin/orcl/dpdump/expdat.dmp
ジョブ"SYSTEM"."SYS_EXPORT_TABLE_01"が金 11月 20 17:15:43 2020 elapsed 0 00:00:45で正常に完了しました
$ impdp scott/tiger@pdb1 directory=scott_dir dumpfile=expdat.dmp remap_table=emp2:emp_impdp remap_tablespace=users:comp_test
Import: Release 19.0.0.0.0 - Production on 金 11月 20 17:35:39 2020
Version 19.8.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
マスター表"SCOTT"."SYS_IMPORT_FULL_01"は正常にロード/アンロードされました
"SCOTT"."SYS_IMPORT_FULL_01"を起動しています: scott/********@pdb1 directory=scott_dir dumpfile=expdat.dmp remap_table=emp2:emp_impdp remap_tablespace=users:comp_test
オブジェクト型TABLE_EXPORT/TABLE/TABLEの処理中です
オブジェクト型TABLE_EXPORT/TABLE/TABLE_DATAの処理中です
. . "SCOTT"."EMP_IMPDP" 26.94 MB 1009999行がインポートされました
オブジェクト型TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
オブジェクト型TABLE_EXPORT/TABLE/STATISTICS/MARKERの処理中です
ジョブ"SCOTT"."SYS_IMPORT_FULL_01"が金 11月 20 17:36:22 2020 elapsed 0 00:00:40で正常に完了しました
SQL> SELECT TABLE_NAME
,TABLESPACE_NAME
,COMPRESSION
,COMPRESS_FOR
FROM USER_TABLES
WHERE TABLE_NAME LIKE '%EMP%'
;
2 3 4 5 6 7
TABLE_NAME TABLESPACE_NAME COMPRESSION COMPRESS_FOR
EMP_IMPDP COMP_TEST DISABLED
EMP_COMP COMP_TEST ENABLED ADVANCED
EMP_DIRECT COMP_TEST ENABLED ADVANCED
EMP2 USERS DISABLED
EMP USERS DISABLED
5行が選択されました。
SQL_ID: 7w5qn4fjgpbq8
経過: 00:00:00.01
SQL> col SEGMENT_NAME for a40
col PARTITION_NAME for a50
SELECT SEGMENT_NAME
,SEGMENT_TYPE
,TABLESPACE_NAME
,ROUND(BYTES/1024,2) KBYTES
FROM USER_SEGMENTS
WHERE SEGMENT_NAME like '%EMP%'
;
SQL> SQL> 2 3 4 5 6 7
SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME KBYTES
EMP TABLE USERS 64
EMP2 TABLE USERS 33792
EMP_COMP TABLE COMP_TEST 23552
EMP_DIRECT TABLE COMP_TEST 23552
EMP_IMPDP TABLE COMP_TEST 33792
SQL> drop table emp_impdp purge;
表が削除されました。
- IMPDP(EMP_IMPDP compression_clause:\"row store compress advanced\"付与)
$ impdp scott/tiger@pdb1 directory=scott_dir dumpfile=expdat.dmp remap_table=emp2:emp_impdp remap_tablespace=users:comp_test transform=table_compression_clause:\"row store compress advanced\"
Import: Release 19.0.0.0.0 - Production on 金 11月 20 17:51:23 2020
Version 19.8.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
接続先: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
マスター表"SCOTT"."SYS_IMPORT_FULL_01"は正常にロード/アンロードされました
"SCOTT"."SYS_IMPORT_FULL_01"を起動しています: scott/********@pdb1 directory=scott_dir dumpfile=expdat.dmp remap_table=emp2:emp_impdp remap_tablespace=users:comp_test transform=table_compression_clause:"row store compress advanced"
オブジェクト型TABLE_EXPORT/TABLE/TABLEの処理中です
オブジェクト型TABLE_EXPORT/TABLE/TABLE_DATAの処理中です
. . "SCOTT"."EMP_IMPDP" 26.94 MB 1009999行がインポートされました
オブジェクト型TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
オブジェクト型TABLE_EXPORT/TABLE/STATISTICS/MARKERの処理中です
ジョブ"SCOTT"."SYS_IMPORT_FULL_01"が金 11月 20 17:52:04 2020 elapsed 0 00:00:36で正常に完了しました
SQL> SELECT TABLE_NAME
,TABLESPACE_NAME
,COMPRESSION
,COMPRESS_FOR
FROM USER_TABLES
WHERE TABLE_NAME LIKE '%EMP%'
;
2 3 4 5 6 7
TABLE_NAME TABLESPACE_NAME COMPRESSION COMPRESS_FOR
EMP_COMP COMP_TEST ENABLED ADVANCED
EMP_DIRECT COMP_TEST ENABLED ADVANCED
EMP2 USERS DISABLED
EMP_IMPDP COMP_TEST ENABLED ADVANCED
EMP USERS DISABLED
5行が選択されました。
SQL_ID: 7w5qn4fjgpbq8
経過: 00:00:00.01
SQL> col SEGMENT_NAME for a40
col PARTITION_NAME for a50
SELECT SEGMENT_NAME
,SEGMENT_TYPE
,TABLESPACE_NAME
,ROUND(BYTES/1024,2) KBYTES
FROM USER_SEGMENTS
WHERE SEGMENT_NAME like '%EMP%'
;
SQL> SQL> 2 3 4 5 6 7
SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME KBYTES
EMP TABLE USERS 64
EMP2 TABLE USERS 33792
EMP_COMP TABLE COMP_TEST 23552
EMP_DIRECT TABLE COMP_TEST 23552
EMP_IMPDP TABLE COMP_TEST 23552