ACE Director Alum Daniel Morgan, founder of Morgan's Library, is scheduling
complimentary technical Workshops on Database Security for the first 30
Oracle Database customers located anywhere in North America, EMEA, LATAM, or
APAC that send an email to
asra_us@oracle.com. Request a Workshop for
your organization today.
Purpose
This package supports advanced compression features new as of 11gR2 and the Oracle-Sun Exadata Server
AUTHID
CURRENT_USER
Constants
Name
Data Type
Value
Compression
Level Constants
COMP_NOCOMPRESS
NUMBER
1
COMP_ADVANCED
NUMBER
2
COMP_QUERY_HIGH - Exadata Only
NUMBER
4
COMP_QUERY_LOW - Exadata Only
NUMBER
8
COMP_ARCHIVE_HIGH - Exadata Only
NUMBER
16
COMP_ARCHIVE_LOW - Exadata Only
NUMBER
32
COMP_BLOCK - Pillar Axiom &
Sun ZFSSA Storage Only
NUMBER
64
COMP_LOB_HIGH
NUMBER
128
COMP_LOB_MEDIUM
NUMBER
256
COMP_LOB_LOW
NUMBER
512
COMP_INDEX_ADVANCED_HIGH
NUMBER
1024
COMP_INDEX_ADVANCED_LOW
NUMBER
2048
COMP_BASIC
NUMBER
4096
COMP_INMEMORY_NOCOMPRESS
NUMBER
8192
COMP_INMEMORY_DML
NUMBER
16384
COMP_INMEMORY_QUERY_LOW
NUMBER
32768
COMP_INMEMORY_QUERY_HIGH
NUMBER
65536
COMP_INMEMORY_CAPACITY_LOW
NUMBER
131072
COMP_INMEMORY_CAPACITY_HIGH
NUMBER
262144
Compression
Ratio Constants
COMP_RATIO_ALLROWS
NUMBER
-1
COMP_RATIO_LOB_MINROWS
NUMBER
1000
COMP_RATIO_LOB_MAXROWS
NUMBER
5000
COMP_RATIO_INDEX_MINROWS
NUMBER
100000
COMP_RATIO_MINROWS
NUMBER
1000000
Object Type
Constants
OBJTYPE_TABLE
NUMBER
1
OBJTYPE_INDEX
NUMBER
2
OBJTYPE_PART
NUMBER
3
OBJTYPE_SUBPART
NUMBER
4
Data Types
--record for calculating an individual index cr on a table TYPE compRec IS RECORD(
ownname VARCHAR2(255),
objname VARCHAR2(255),
blkcnt_cmp PLS_INTEGER,
blkcnt_uncmp PLS_INTEGER,
row_cmp PLS_INTEGER,
row_uncmp PLS_INTEGER,
cmp_ratio NUMBER,
objtype PLS_INTEGER);
Gives the possible compression ratio for an uncompressed table or materialized view and estimates the compression that can be achieved
Overload 1
dbms_compression.get_compression_ratio(
scratchtbsname IN VARCHAR2,
ownname IN VARCHAR2,
objname IN VARCHAR2,
subobjname IN VARCHAR2, -- partition name
comptype IN NUMBER,
blkcnt_cmp OUT PLS_INTEGER,
blkcnt_uncmp OUT PLS_INTEGER,
row_cmp OUT PLS_INTEGER,
row_uncmp OUT PLS_INTEGER,
cmp_ratio OUT NUMBER,
comptype_str OUT VARCHAR2,
subset_numrows IN NUMBER DEFAULT COMP_RATIO_MINROWS,
objtype IN PLS_INTEGER DEFAULT OBJTYPE_TABLE);
dbms_compression.get_compression_ratio(
scratchtbsname IN VARCHAR2,
tabowner IN VARCHAR2,
tabname IN VARCHAR2,
lobname IN VARCHAR2,
partname IN VARCHAR2,
comptype IN NUMBER,
blkcnt_cmp OUT PLS_INTEGER,
blkcnt_uncmp OUT PLS_INTEGER,
lobcnt OUT PLS_INTEGER,
cmp_ratio OUT NUMBER,
comptype_str OUT VARCHAR2,
subset_numrows IN number DEFAULT COMP_RATIO_LOB_MAXROWS);
TBD
Overload 3
dbms_compression.get_compression_ratio(
scratchtbsname IN VARCHAR2,
ownname IN VARCHAR2,
tabname IN VARCHAR2,
comptype IN NUMBER,
index_cr OUT compRecList,
comptype_str OUT VARCHAR2,
subset_numrows IN NUMBER DEFAULT COMP_RATIO_MINROWS);
Allows turning compression of on and off and compressing uncompressed data offline, in the background)
This undocumented proc must be run as SYS and appears to have a bug.
Dump is an optional parameter that dumps out the space saved in each block into the trace files. It is turned OFF by default (set to 0). It is advised not to turn this feature on for large tables or partitions because of excessive logging.
dbms_compression.incremental_compress(
ownname IN dba_objects.owner%TYPE,
tabname IN dba_objects.object_name%TYPE,
tabpart IN dba_objects.subobject_name%TYPE,
colname IN VARCHAR2,
dump_on IN NUMBER DEFAULT 0,
autocompress_on IN NUMBER DEFAULT 0,
where_clause IN VARCHAR2 DEFAULT '');
CREATE TABLE uwclass.comp_test2
COMPRESS FOR OLTP AS
SELECT * FROM dba_objects_ae;
SELECT COUNT(*)
FROM comp_test2;
COUNT(*)
----------
92471
SELECT CASE comp_type
WHEN 1 THEN 'No Compression'
WHEN 2 THEN 'Advanced compression level'
WHEN 4 THEN 'Hybrid Columnar Compression for Query High'
WHEN 8 THEN 'Hybrid Columnar Compression for Query Low'
WHEN 16 THEN 'Hybrid Columnar Compression for Archive High'
WHEN 32 THEN 'Hybrid Columnar Compression for Archive Low'
WHEN 64 THEN 'Compressed row'
WHEN 128 THEN 'High compression level for LOB operations'
WHEN 256 THEN 'Medium compression level for LOB operations'
WHEN 512 THEN 'Low compression level for LOB operations'
WHEN 1000 THEN 'Minimum req. number of LOBs in the object for which LOB compression ratio is to be estimated'
WHEN 4096 THEN 'Basic compression level'
WHEN 8192 THEN 'Inmemory NoCompress'
WHEN 16384 THEN 'Inmemory DML Compression'
WHEN 32768 THEN 'Inmemory Query Low'
WHEN 65536 THEN 'Inmemory Query High'
WHEN 131072 THEN 'Inmemory Capacity Low'
WHEN 262144 THEN 'Inmemory Capacity High'
ELSE 'Unknown Compression Type'
END AS comp_type, num_rows
FROM (
SELECT dbms_compression.get_compression_type('UWCLASS', 'COMP_TEST2', rid) AS comp_type, COUNT(*) NUM_ROWS
FROM (
SELECT rowid AS rid
FROM uwclass.comp_test2
WHERE rownum < 10001)
GROUP BY dbms_compression.get_compression_type('UWCLASS', 'COMP_TEST2', rid));