 |
|
Oracle define table blob lob storage
Oracle Database Tips by Donald Burleson |
Defining LOB Storage
If LOB storage is not defined and LOB attribute
size exceeds 4000 characters the attributes which overflow will
automatically be placed in the tables tablespace in default
configured LOB storage and index. If LOB storage is allowed to go to
defaults you will not get optimal use of resources and could cause
contention for disk resources, both of which will reduce your system
performance.
LOB storage is defined by the CREATE or
ALTER TABLE commands. The LOB storage clause is used to define
the LOB storage profile. The LOB storage clause is shown in figure
1.
The LOB storage clause uses a LOB parameters
section to specify the LOB tablespace, storage in row, CHUNK
and PCTVERSION settings as well as CACHE status and if
NOCACHE is specified whether the LOB storage should be
LOGGING or NOLOGGING and the specification for the LOB
index. The LOB Parameters section of the LOB storage clause is shown
in figure 2.
The LOB index is specified through the LOB
index clause. You can name or let the system name the index and
then specify the normal index storage variables for the LOB
index. The LOB index clause is shown in figure 3.
Whether the LOB datatype is BLOB, CLOB or NCLOB the
storage clause format is identical. LOB storage specifications can
be applied to BFILE LOB datatypes but it doesn't make sense to do
so. If you do not specify the segname parameter the Oracle system
will give the segment some wonderful name such as
'SYS_LOB0000001562C0035$' so I suggest you name the segments.
BLOB and CLOB Creation
BLOB and CLOB datatypes are created by use of the
CREATE or ALTER TABLE or the CREATE or ALTER
TYPE commands. In fact, they are created identically to other
non-sized datatypes such as DATE and LONG with the exception of the
LOB storage clause. The LOB storage clause is not
needed if the maximum size of the BLOB doesn't exceed 4000 bytes. Up
to 4000 bytes can be stored in-line with the other data in the
tablespace. If the length of the BLOB exceeds 4000 bytes it must be
stored in either a system defaulted storage (the same as the default
for the table it resides in) or in an explicitly defined LOB
storage area.
TIP:
I suggest always specify the LOB storage clause,
if you force the system to do a default storage each time a BLOB or
CLOB exceeds 4000 bytes you could cause datafile fragmentation and
performance problems. The LOB storage clause gives you control
instead of the system.
An example creation of a table using a BLOB
datatype is shown in Listing 1. It just as easily could have been a
CLOB.
create table internal_graphics (
graphic_id number,
graphic_desc varchar2(30),
graphic_blob blob,
graphic_type VARCHAR2(4))
lob (graphic_blob) store as glob_store (
tablespace raw_data
storage (initial 100k next 100k pctincrease 0)
chunk 4
pctversion 10
INDEX glob_index (
tablespace raw_index))
TABLESPACE appl_data
storage (initial 1m next 1m pctincrease 0)
/
Listing 1: Example Use of The LOB Storage
Clause and LOB Use in Tables
BLOBs and CLOBs are identical in creation and use,
their major difference is in that BLOBs are used for binary data
(much like LONG RAW) while CLOBs are used for single byte character
storage (like VARCHAR2). The TYPE creation example in
Listing 2 shows how a CLOB is specified for a TYPE.
SQL> CREATE OR REPLACE TYPE clob_demo (
2 clob_id NUMBER,
3 clob_value CLOB
4 );
SQL> CREATE TABLE clob_table OF clob_demo
5 LOB (clob_value) STORE AS clob_store (
6 TABLESPACE raw_data
7 STORAGE (INITIAL 100K NEXT 100K PCTINCREASE 0)
8 CHUNK 4
9 PCTVERSION 10
10 INDEX clob_index (
11 TABLESPACE raw_index))
12 TABLESPACE appl_data
12* STORAGE (INITIAL 1M NEXT 1M PCTINCREASE 0)
SQL> /
Listing 2: Example Use of LOBs in a TYPE
specification
Notice that no LOB storage is specified when
a BLOB or a CLOB is used in a TYPE specification, the LOB
storage clause is applied to the BLOB or CLOB TYPE only when
it is used in a table.
|