Partitioning and LOB Data in Oracle
Partitioned
Tables
Most tables can be partitioned.
Any table can be partitioned up to a million separate
partitions except those tables containing columns
with LONG or LONG RAW data types. You can, however,
use tables containing columns with CLOB or BLOB data types.
Note: To reduce disk and memory usage (specifically,
the buffer cache), you can store tables and partitions of a partitioned table
in a compressed format inside the database. This often improves scaleup for
read-only operations. Table compression can also speed up query execution.
There is, however, a slight cost in CPU overhead.
When to
Partition a Table
There are certain situations when you would want to
partition a table.
Here are some suggestions for situations when you should
consider partitioning a table:
- Tables
that are greater than 2 GB.
These tables should always be considered as candidates for
partitioning.
- Tables
that contain historical data, in which new data is added into the newest
partition.
A typical example is a historical table where only the
current month's data is updatable and the other 11 months are read only.
- Tables
whose contents must be distributed across different types of storage
devices.
Partitioning
and LOB Data in Oracle
Unstructured data, such as images, videos, and documents, is
often stored in LOB (Large Object) columns within an Oracle database.
Oracle allows not only the partitioning of relational data but also the
partitioning and separate management of LOB data.
When a table is partitioned, all of its columns typically
reside in the tablespace for that partition. However, LOB columns have a unique
advantage: they can be stored in separate tablespaces that are
independent from the main partitioned data.
This separation becomes especially valuable when working
with tables that contain very large LOBs. By storing LOBs separately from the
main row data, administrators can optimize both performance and cost
efficiency.
For instance, if the primary row data is updated frequently
but the LOB data remains relatively static, this approach ensures that heavy
LOB storage does not impact routine updates.
Consider an example of an employee table. Each record
may include an employee’s photo stored as a BLOB, alongside personnel details
such as name, address, department, and manager. The personnel details are
subject to frequent updates, while the photo is unlikely to change. By storing
the LOB column (the photo) in a separate tablespace, updates to the employee
record remain lightweight and efficient.
Another advantage is tiered storage management. LOB
data can be placed on less expensive, slower storage devices, while the main
employee records can reside on high-performance storage. This ensures that
critical transactional data benefits from speed, while large, less frequently
accessed objects do not consume costly resources.
In summary, Oracle’s ability to partition and separately
store LOB data provides organizations with flexibility, performance
optimization, and cost control. This strategy is particularly effective in
systems where structured data changes regularly, but unstructured LOB data
remains relatively stable.
Benefits
of Partitioning
Partitioning can provide tremendous benefit to a wide
variety of applications by improving performance, manageability, and
availability.
It is not unusual for partitioning to greatly improve the
performance of certain queries or maintenance operations. Moreover,
partitioning can greatly simplify common administration tasks.
Partitioning also enables database designers and
administrators to solve some difficult problems posed by cutting-edge
applications. Partitioning is a key tool for building multi-terabyte systems or
systems with extremely high availability requirements.
Partitioning and LOB Data in Oracle
Unstructured data, such as images, videos, and documents, is
often stored in LOB (Large Object) columns within an Oracle database.
Oracle not only supports partitioning for relational (structured) data but also
provides mechanisms to partition and manage LOB data more effectively. This
capability helps organizations improve performance, manageability, and storage
costs when dealing with large volumes of binary or multimedia content.
Storing
LOBs in Separate Tablespaces
When a table is partitioned in Oracle, all of its columns
typically reside in the same tablespace for that partition. However, LOB
columns have the unique ability to be stored in separate tablespaces,
independent of the main row data.
This separation becomes highly beneficial in cases where
tables contain large LOBs. For example:
- Main
row data (employee details such as name, address, and department) may
be updated frequently.
- LOB
data (such as an employee’s photo) is far less likely to change.
By storing the photo (BLOB) in a separate tablespace,
updates to the main employee record remain lightweight and efficient, avoiding
unnecessary I/O overhead from the larger LOB data.
Additionally, this strategy enables tiered storage
optimization:
- Fast,
expensive storage can be allocated to the transactional row data that
changes frequently.
- Cheaper,
slower storage can be used for LOB data that is accessed less often.
This separation reduces costs while maintaining high
performance for critical workloads.
Oracle
SecureFiles and Partitioned LOBs
Modern Oracle implementations recommend the use of SecureFiles
over BasicFiles for managing LOBs. SecureFiles not only provide performance
improvements but also include advanced features such as:
- Compression
– Reduces storage requirements.
- Deduplication
– Prevents redundant LOB storage.
- Encryption
– Secures sensitive unstructured data.
- Partitioned
LOBs – Distributes LOBs across multiple partitions for scalability.
Partitioned SecureFiles enable administrators to organize
large object data more intelligently, aligning storage with business and
performance needs.
LOB
Partitioning Strategies
Oracle supports multiple partitioning methods for
tables containing LOB columns, which can also extend to the LOB data itself.
Choosing the right partitioning strategy depends on the data distribution and
query patterns:
- Range
Partitioning
- LOBs
are distributed based on a range of values (e.g., partitioning employee
photos by hire date).
- Useful
for time-based queries and archiving older data.
- List
Partitioning
- LOBs
are grouped into partitions based on discrete values (e.g., file type:
images, PDFs, or audio).
- Provides
logical grouping for specific categories of data.
- Hash
Partitioning
- LOBs
are evenly distributed across partitions using a hashing algorithm.
- Prevents
data skew and balances I/O workload across partitions.
- Composite
Partitioning
- Combines
methods (e.g., range-hash) for greater control.
- Example:
Partition employee documents by year (range) and distribute them evenly
across storage (hash).
Benefits
of Partitioning LOB Data
- Performance
Optimization – Queries scan only relevant partitions instead of the
entire dataset.
- Parallelism
– Partitioned LOBs enable Oracle to perform operations across multiple
partitions in parallel.
- Improved
Manageability – Partitions can be archived, backed up, or purged
independently.
- Cost
Efficiency – Large, less frequently accessed LOB partitions can be
placed on cheaper storage tiers.
- Reduced
Contention – Partition-level operations minimize locking conflicts
during updates.
Use Case
Example
Consider an HR application:
- Employee
details (address, job title, department) change frequently.
- Employee
documents (contracts, scanned IDs, certificates) are stored as BLOBs but
rarely updated.
By storing the structured data in a partitioned table and
separating the LOB columns into their own partitioned SecureFiles storage, the
application achieves:
- Faster
updates to personnel details.
- Efficient
storage for documents.
- The
ability to move older, rarely accessed documents into archival storage
tiers without disrupting the main HR system.
LOB
Storage in Separate Tablespaces
- When
you create or alter a partitioned table, you can specify the LOB storage
clause (STORE AS) separately.
- You
can assign each LOB (or partitioned LOB) to its own tablespace,
which can differ from the tablespace of the main row data.
2.
Compression for LOBs
- Oracle
BasicFiles LOBs support only dedicated or shared storage,
but not compression.
- Oracle
SecureFiles LOBs (introduced in 11g) support:
- COMPRESS
– Reduces storage footprint.
- DEDUPLICATE
– Avoids redundant copies.
- ENCRYPT
– Provides data security.
- Compression
works at the LOB level, not at the row-level data.
3.
Example: Partitioned Table with LOBs in Compressed Tablespace
CREATE
TABLE employee_docs
(
emp_id
NUMBER,
emp_name
VARCHAR2(100),
hire_date
DATE,
resume
BLOB
)
PARTITION
BY RANGE (hire_date)
(
PARTITION p1 VALUES LESS THAN (DATE
'2020-01-01')
TABLESPACE tbs_fast,
PARTITION p2 VALUES LESS THAN (DATE
'2023-01-01')
TABLESPACE tbs_fast,
PARTITION p3 VALUES LESS THAN (MAXVALUE)
TABLESPACE tbs_fast
)
LOB
(resume) STORE AS SECUREFILE resume_seg
(
TABLESPACE tbs_lob_compressed
ENABLE STORAGE IN ROW
COMPRESS HIGH
CHUNK 8192
RETENTION
);
4.
Benefits
- Performance
isolation: OLTP operations on main table data are not slowed by large
LOB I/O.
- Storage
optimization: Compressed LOBs in a dedicated tablespace reduce storage
usage.
- Flexibility:
You can move, archive, or back up LOB tablespaces separately.
Conclusion
Unstructured data, such as images and documents, which is
stored in a LOB column in a database can also be partitioned.
When a table is partitioned, all of the columns reside in
the tablespace for that partition, except LOB columns, which can be stored in
their own tablespace.
Oracle’s support for partitioning LOB data represents a
powerful solution for enterprises managing large volumes of unstructured data.
By separating LOBs into dedicated partitions and leveraging SecureFiles
features such as compression, deduplication, and encryption, organizations
can achieve better scalability, performance, and cost optimization.
As multimedia and unstructured data continue to grow in
enterprise systems, LOB partitioning combined with SecureFiles provides
the flexibility to balance fast transactional performance with efficient
long-term data storage, ensuring both technical efficiency and business value.