Há aproximadamente 5 anos, quando estava desenvolvendo um módulo de CRM, precisei implementar um campo em que o vendedor pudesse descrever toda a conversa que teve com o cliente.
Inicialmente, fui no caminho óbvio e criei uma coluna VARCHAR2(4000). Depois de algum tempo utilizando, por incrível que pareça, uma das vendedoras começou a reclamar que este limite era muito pequeno para o nível de detalhe que ela queria colocar dessa conversa. Pediu para aumentar o limite.
No Oracle, temos a limitação de 4000 caracteres no VARCHAR2 e normalmente teríamos como upgrade o caminho mais óbvio, mudar para CLOB. Isso envolveria mexer na tela já criada e alterar algumas coisas a nível de sessão e integração. Mudar para CLOB implica na forma em que o banco de dados armazena os esses registros e também na forma em que várias aplicações acessam essas colunas. Decidi pesquisar um pouco e logo me deparei com uma solução que já existe desde o Oracle 12C. Um simples parâmetro chamado MAX_STRING_SIZE;
Se este parâmetro for alterado de STANDARD
para EXTENDED
você conseguirá trabalhar com um VARCHAR2(32000), para ser mais preciso, VARCHAR2(32767), o que não te dá a mesma capacidade que um CLOB, mas já é um ótimo upgrade do VARCHAR2(4000). É perfeito para os casos em que precisamos de um meio termo.
Antes de qualquer coisa, recomendo ler esse conteúdo da Oracle para saber se essa será uma boa escolha.
Para saber se seu banco já está com o esse parâmetro basta rodar o comando abaixo se tiver permissão na v$parameter:
SELECT name, value
FROM v$parameter
WHERE name = 'max_string_size';
Aqui vou explicar apenas como alterar na Autonomous Database para exemplificar, mas no link acima você consegue ver como rodar em CDB Padrão, PDB, etc.
Logado com ADMIN, execute:
BEGIN
DBMS_MAX_STRING_SIZE.MODIFY_MAX_STRING_SIZE('EXTENDED');
END;
Pronto, resolvido. Daqui pra frente é só alegria.
Vale a pena alertar que:
A alteração é irreversível (uma vez
EXTENDED
, não volta paraSTANDARD
sem recriar o banco).Pode afetar compatibilidade com clientes antigos (SQL Developer, drivers JDBC etc.).
Pode afetar backups ou replicações se houver sistemas legados.
Nunca tinha pensado em fazer um post sobre isso antes porque pensava que esse parâmetro já era algo bem difundido, mas vi que várias pessoas com quem tenho conversado neste último ano, inclusive DBAs ainda não conheciam, então achei relevante publicar.
Comente aqui. Você já tinha ouvido falar? Já tinha usado? Achou útil?
Referências:
https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/MAX_STRING_SIZE.html
https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/dbms-max-string-size.html
Top comments (0)