BLOG

Tipos de Dados Estendidos

Escrito por Francisco Cavalin

25 jul, 2017 | 14:13

Uma das novas features do Oracle 12c são os Tipos de Dados Extendidos. Antes da versão 12c o tamanho máximo das colunas dos tipos VARCHAR2, NVARCHAR2 e RAW eram:

VARCHAR2: 4000 bytes
NVARCHAR2: 4000 bytes
RAW: 2000 bytes

Com a introdução dos Tipos de Dados Extendidos, pode-se aumentar os tamanhos desses tipos opcionalmente para:

VARCHAR2: 32767 bytes
NVARCHAR2: 32767 bytes
RAW: 32767 bytes

Lembrando que esses tamanhos são em bytes e não em caracteres. O número de caracteres irá depender do conjunto de caracteres usado.

Os tipos de dados estendidos são o padrão do banco de dados Oracle 12cR2 em diante e são necessários se você quiser usar a cláusula DEFAULT COLLATION disponível em 12.2 em diante.

Para habilitar Tipos de Dados Extendidos, é necessário alterar o parâmetro MAX_STRING_SIZE para EXTENDED e executar o script “utl32k.sql” para invalidar e recompilar os objetos que podem ser afetados por essa mudança. Ao habilitar essa funcionalidade, não há como voltar atrás, a menos que se faça um RECOVERY do banco de dados (restauração de backup ou flashback database).

Seguem os comandos para habilitar Tipo de Dados Extendidos:

CONN / AS SYSDBA
SHUTDOWN IMMEDIATE;
STARTUP UPGRADE;
ALTER SYSTEM SET max_string_size=extended;
@?/rdbms/admin/utl32k.sql
SHUTDOWN IMMEDIATE;
STARTUP;

Apesar das várias vantagens de usar colunas de Tipos de Dados Extendidos, há algumas desvantagens, pois elas são implementadas implicitamente como LOBs. A seguir são listadas essas desvantagens:

Colunas VARCHAR2 e NVARCHAR2 com mais de 4000 bytes e colunas RAW com mais de 2000 bytes são consideradas Tipos de Dados Extendidos e consequentemente armazenados em segmentos LOB fora da tabela.

Os segmentos LOB são automaticamente administrados pelo banco de dados e nenhuma intervenção manual é permitida, ficando na mesma tablespace da tabela associada.

Tipos de Dados Extendidos não poderão ser especificados em cláusulas GROUP BY, ORDER BY, DISTINCT, UNIQUE, nem em natural joins, nem na cláusula USING de inner joins.

Quer saber mais?

ENTRE EM CONTATO