(por Fábio Nepomuceno)

Cada vez mais os sistemas necessitam de ferramentas que nos possibilitem armazenagem de grandes volumes de informação. É muito comum os sistemas possuírem necessidades de guardar fotos, vídeos, sons, etc. E para isso a Oracle DataBase desde a versão 8i nos disponibiliza o Large Objects (LOBs).

As LOBs podem ser divididas em 4 tipos de dados, como descritos abaixo:
BLOB
São tipos de dados binária.

CLOB
São tipos de dados alfanuméricos, podendo armazenar caracteres compatíveis com o charset do banco de dados.

NLOB
São tipos de dados alfanuméricos, podendo armazenar caracteres compatíveis com o national charset do banco de dados.

BFILE
São tipos de dados binários armazenados fora do banco de dados em arquivos do sistema operacional, com TXT e HTML.

CARACTERÍSTICAS
- As LOBS podem armazenar até 4GB de dados;
- Podemos trabalhar com 2 modos de operação, INTERNA (Lógica) e EXTERNA (Física);
- Permite replicação dos dados, exceto para BFile que trabalha com a parte física;
- Suporte a tipos de objetos;
- O sistema de acesso aos dados para as LOBs é de forma randônica, isso permite ganho de performance nas consultas;
- Habilitação para transações, COMMIT e ROLLBACK, exceto para BFile;
- O comando SELECT retorna os Locators das LOBS e não os dados armazenados;
- Podemos trabalhar com mais de uma coluna LOB nas tabelas, ampliando o armazenamento da tabela;
- Existem pacotes específicos para administrar colunas LOBs no banco de dados;
- Existem views específicas no dicionario de dados para administração de LOBs dentro do banco de dados;
- Funções SQL podem ser utilizadas, porém, com algumas restrições dependendo do tipo de LOB;

ARQUITETURA DE ARMAZENAMENTO
O Dado
É realmente a informação que está armazenada dentro da coluna, o dado real, o contéudo, sem mais explicações.

O Locator
É um indicador de localização de uma LOB dentro do banco de dados. Ele é responsável por identificar cada parte de uma lob.

Um SELECT sobre campos Lobs mostra o Locator, caso a coluna tenha mais de 4.000 bytes, devido a extensão da linha da tabela. Quando se passa de 4.000 bytes de armazenamento de informação, as Lobs se separam em partes, um monte delas, e para cada parte que a Lob se separou, recebe um Locator, para poder identificar em qual parte de armazenamento está o resultado, ou O Dado. Funcionaria igual os Rowids, porém é usado para identificar grupos de dados e não linhas.

Existe ainda o pacote DBMS_LOB , onde seu principal trabalho é facilitar a utilização dos recursos das Lobs, em instruções SQL ou blocos PL/SQL.

Vamos exemplificar a utilização do pacote DBMS_LOB com a criação de uma tabela com os quatro tipos Lob existentes:

CREATE TABLE EXEMPLO_LOB(
COLUNA_CLOB CLOB,
COLUNA_BLOB BLOB,
COLUNA_BFILE BFILE,
COLUNA_NLOB NLOB)
LOB (CLOB) STORE AS (TABLESPACE TSPAC_LOB DISABLE STORE IN ROW),
LOB (BLOB) STORE AS (TABLESPACE TSPAC_LOB ENABLE STORE IN ROW),
LOB (NLOB) STORE AS (TABLESPACE TSPAC_LOB ENABLE STORE IN ROW);

É altamente recomendada a criação de uma nova tablespace TSPAC_LOB, pois as Lobs são de grande capacidade de armazenamento. Caso seja criado nas tablespaces USERS, SYSTEM ou outras que já possuem tabelas e dados, poderemos ter alguns problemas de administração, performance e espaço livre no sistema operacional e banco de dados. Em resumo, é recomendada a criação de uma nova tablespace com tamanhos de 1Gb ou 2GB somente para esses tipos de dados.

Temos coisas novas no comando DDL. Como a cláusula LOB. Essas cláusulas podem especificar as características físicas das colunas com as opções de armazenamento em linha (ENABLE STORE IN ROW), quando o tamanho da coluna é inferior a 4 KB ou em outra área (DISABLE STORE IN ROW).
Existe também a opção de armazenamento por segmentos (LOB (COL_NLOB) STORE AS SEGMENTO_TESTE (TABLESPACE TSPAC_LOB)), que pode ser útil para administração e melhora de performance na recuperação e manutenção dos dados.

Outro ponto importante nessa tabela é a atenção especial para as colunas BFILE. Esses tipos de dados armazenam os dados ou arquivos fora do banco de dados, não precisando de tablespace (áreas lógicas), e para podermos manipular os dados, primeiramente devemos criar uma pasta no sistema operacional e depois um objeto DIRECTORY no banco de dados para tudo funcionar corretamente. Siga os passos:
Exemplo no WINDOWS:
01º Passo:
Crie uma pasta C:\colunas_bfile, com permissões de escrita, leitura e gravação.
02º Passo:
CREATE DIRECTORY DIR_LOB AS ‘C:\colunas_bfile’;

EXEMPLO DE INSERÇÃO DE DADOS

INSERT INTO EXEMPLO_LOB
(COLUNA_CLOB, COLUNA_BLOB, COLUNA_BFILE, COLUNA_NLOB)
VALUES
(‘TESTE CLOB’, EMPTY_BLOB(), BFILENAME(‘DIR_LOB’, ‘ARQUIVO.DOC’), ‘TESTE NLOB’)

Para saber mais sobre as funções e utilidades do pacote DBMS_LOB, visite os sites technet.oracle.com ou otn.oracle.com, e procure pela documentação Oracle 9i Application Developer”s Guide - Large Objects (LOBs). Lá terá todas as funções comentadas.

Este artigo teve como objetivo a apresentação dos Lobs Oracle, facilitando o armazenamento e recuperação de grandes volumes de dados. Espero ter esclarecido as dúvidas iniciais para utilização da ferramenta. E até o próximo blog.


Fábio Nepomuceno é Analista de Sistemas e atua há 9 anos como especialista em desenvolvimento de aplicações baseadas em Oracle Forms e Reports, PL/SQL e Oracle Applications. Possui vasto conhecimento em criação de consultas complexas utilizando todo o potencial oferecido pelo Oracle para aplicações contábeis, financeiras e administrativas em geral.