Este documento apresenta como será realizada a migração dos tipos de dados text, ntext e image nas colunas do banco de dados. Esses tipos foram marcados pela Microsoft como obsoletos e estão em processo de descontinuação, com remoção prevista em versões futuras do SQL Server. Para apoiar esse processo, a Microsoft já disponibiliza diretrizes oficiais que recomendam a substituição por tipos mais modernos e compatíveis, como varchar(max), nvarchar(max) e varbinary(max), assegurando melhor desempenho, suporte contínuo e maior compatibilidade futura.
Mais informações técnicas a respeito destes tipos de dados descontinuados no site do fabricante: https://learn.microsoft.com/pt-br/sql/t-sql/data-types/ntext-text-and-image-transact-sql?view=sql-server-ver16 |
Com o objetivo de apoiar o processo de atualização do cliente, nossa ferramenta apresentará uma etapa dedicada à migração automática de todas as colunas de negócio existentes no banco de dados da linha RM que ainda utilizam os datatypes legados.
Essa etapa foi planejada para reduzir riscos e acelerar a adequação da estrutura, alinhando-se às melhores práticas já recomendadas pela Microsoft.
Compatibilidade futura: uso de datatypes plenamente suportados nas versões mais recentes do SQL Server.
Melhoria de performance: consultas e operações passam a ter ganhos de desempenho em cenários de leitura e escrita.
Facilidade de manutenção: uso de tipos modernos simplifica scripts, integrações e ajustes futuros.
Confiabilidade: elimina riscos relacionados ao uso de tipos obsoletos, que podem deixar de ser suportados em releases futuras.
Para potencializar os benefícios, reforçamos a importância de reduzir o conteúdo das principais tabelas mais volumosas antes da execução do processo de migração.
Ao diminuir a quantidade de dados armazenados, o tempo necessário para converter os datatypes pode ser significativamente reduzido, resultando também em menor tempo destinado à atualização da base de dados como um todo.
![]()
Foi criado um requisito que identifica bases contendo tabelas com grandes volumes de dados, as quais podem ocasionar demora na migração dos tipos de dados em suas colunas. Caso o RM.Atualizador sinalize este requisito, significa que uma ou mais tabelas do seu banco de dados podem gerar lentidão durante a etapa de atualização. Abaixo disponibilizamos um modelo de consulta SQL para auxiliá-lo na identificação das tabelas que necessitam ser saneadas:
with cte_sizes AS (
SELECT p.OBJECT_ID, OBJECT_NAME(p.OBJECT_ID) AS NOME,
CAST((SUM(a.total_pages) * 8.0) / 1024 AS DECIMAL(18,2)) AS TotalSizeMB
FROM sys.partitions p JOIN sys.allocation_units a ON p.partition_id = a.container_id
GROUP BY p.OBJECT_ID
),
cte_rows AS (
SELECT OBJECT_ID, SUM(row_count) AS NumeroLinhas
FROM sys.dm_db_partition_stats
WHERE index_id IN (0,1) GROUP BY OBJECT_ID
)
SELECT DISTINCT SCHEMA_NAME(c.schema_id) AS Esquema, OBJECT_NAME(a.object_id) AS Tabela,
d.TotalSizeMB AS Tamanho, ISNULL(r.NumeroLinhas, 0) AS Linhas
FROM sys.columns a
JOIN sys.types b ON a.system_type_id = b.system_type_id
AND b.name IN (SELECT * FROM ( VALUES ('text'),('image')) tipos (nomes))
JOIN sys.tables c ON c.object_id = a.object_id
AND c.schema_id IN (SELECT * FROM ( VALUES (schema_id('dbo'))) esquemas (nomes))
JOIN cte_sizes d ON a.object_id = d.OBJECT_ID
LEFT JOIN cte_rows r ON a.object_id = r.OBJECT_ID
ORDER BY d.TotalSizeMB DESC |
Nossa ferramenta já disponibiliza documentações de apoio para auxiliar na redução do conteúdo das tabelas e otimizar o processo. Recomendamos que o cliente utilize essas orientações previamente, de forma a garantir que a migração seja mais ágil, segura e com menor impacto para os usuários:
Segue o link com documentação para auxiliar na redução de dados nas principais tabelas do produto: https://tdn.totvs.com/x/KmTeO |
A migração será realizada por meio de um item disponível na última etapa do processo de execução do RM Atualizador, conforme ilustrado abaixo.
Durante a atualização, será gerado um log em uma tabela interna do sistema, registrando o processo de conversão dos tipos de dados e, em caso de falhas, detalhando o respectivo motivo.
Para consultar as colunas que serão migradas, execute a instrução SQL apresentada a seguir:
SELECT SCHEMA_NAME(C.SCHEMA_ID) ESQUEMA,
OBJECT_NAME(A.OBJECT_ID) TABELA, A.NAME COLUNA, B.NAME TIPO,
CASE WHEN B.NAME = 'IMAGE' THEN 'VARBINARY(MAX)'
WHEN B.NAME = 'NTEXT' THEN 'NVARCHAR(MAX)'
WHEN B.NAME = 'TEXT' THEN 'VARCHAR(MAX)'
END NOVOTIPO,
CASE WHEN B.IS_NULLABLE = 0 THEN 'NOT NULL' ELSE '' END PERMITENULO
FROM SYS.COLUMNS A JOIN SYS.TYPES B
ON A.SYSTEM_TYPE_ID = B.SYSTEM_TYPE_ID
JOIN SYS.TABLES C ON C.OBJECT_ID = A.OBJECT_ID
AND SCHEMA_NAME(C.SCHEMA_ID) = 'DBO'
AND OBJECT_NAME(A.OBJECT_ID) COLLATE SQL_LATIN1_GENERAL_CP1_CI_AI IN ( SELECT TABELA COLLATE SQL_LATIN1_GENERAL_CP1_CI_AI FROM GDIC (NOLOCK))
AND B.NAME IN ('TEXT', 'NTEXT', 'IMAGE')
ORDER BY OBJECT_NAME(A.OBJECT_ID), A.NAME |
No RM Atualizador haverá uma etapa dedicada a apresentar ao usuário as tabelas envolvidas na migração, organizadas conforme o tamanho em disco. O objetivo é incentivar a análise da possibilidade de reduzir o conteúdo dessas tabelas antes de submetê-las à migração, o que pode, consequentemente, diminuir o tempo necessário para a atualização da base de dados:

Em seguida, é apresentada a lista de versões, juntamente com o item responsável pela migração, conforme ilustrado:

No momento da Migração dos Tipos de dados SQL Server, o sistema apresenta qual tabela está migrando

Durante o processo de migração de datatypes do sistema, o tempo limite de processamento varia de acordo com o tipo de entrega (Release ou Patch).
O sistema possui valores mínimos e máximos padrão, respeitando regras específicas, com possibilidade de configuração manual via tela.
Tempo mínimo permitido: 30 minutos
Tempo máximo padrão (default): 60 minutos
Caso o usuário não informe um valor, o sistema assume o tempo padrão máximo de 60 minutos.
É permitido ao usuário informar via tela um tempo superior a 60 minutos.
Não é permitido informar um tempo inferior a 30 minutos.