Migração de dados do InterSystems Caché e IRIS para SQL Server

Migrate · · 4 min de leitura

Vai trocar um sistema Caché pelo SQL Server, ou alimentar o SQL Server a partir do IRIS? O dbSlice lê as tabelas pelo SQL do InterSystems e as grava no SQL Server, por um app Windows ou pela linha de comando. Rode uma vez para migrar, ou num agendamento enquanto o sistema antigo ainda está em uso.

Migrar de Caché e IRIS para SQL Server: o que muda no destino

Se a tabela não existe no SQL Server, o dbSlice para e mostra um CREATE TABLE traduzido para o SQL Server, para o seu DBA revisar e rodar. Por padrão, ele não cria nada nos seus bancos. Estes são os detalhes do InterSystems para planejar:

  • Nenhum driver ODBC para instalar. O dbSlice tem um conector para o IRIS e outro para o Caché legado, e lê o dicionário de classes nas versões mais antigas do Caché.
  • O mesmo nome de tabela em vários esquemas. Sistemas InterSystems costumam repetir um nome de tabela em vários pacotes. Escolha o esquema da tabela que você quer; o dbSlice lista as colunas desse esquema.
  • Tamanhos de VARCHAR. Um %String do Caché costuma ser declarado com tamanho curto, como o padrão de 50, e chega como NVARCHAR(50). O Caché não impõe o tamanho declarado aos dados gravados por ObjectScript; então alguns valores podem ser maiores, e o SQL Server os rejeita com "String or binary data would be truncated". Confira os maiores valores e alargue as colunas antes de rodar o CREATE TABLE.
  • Propriedades stream. Streams de caracteres (LONGVARCHAR) viram NVARCHAR(MAX) e streams binários (LONGVARBINARY) viram VARBINARY(MAX).
  • Datas guardadas como número. Classes legadas às vezes guardam datas como inteiros (20261102 ou um Unix time). Quando a coluna no SQL Server é DATE ou DATETIME2, o dbSlice as converte no caminho.
  • NUMERIC(p,s) mantém precisão e escala em DECIMAL, até o limite de 38 dígitos do SQL Server.
  • Ids. Os row ids do InterSystems (%ID, e os ids parent||child das tabelas filhas) muitas vezes não aparecem como colunas comuns. Use a chave da própria tabela. Se a chave no SQL Server for uma coluna IDENTITY, ligue Keep identity, que exige permissão de ALTER e é confirmado na tela antes.
  • O Upsert roda como MERGE e as cargas em massa usam SqlBulkCopy, com triggers e constraints verificados.
Aba Synchronize do dbSlice

Como o dbSlice controla a carga a partir do Caché e do IRIS

  • Lê em lotes pequenos, ordenados pela chave, para o sistema antigo continuar atendendo os usuários.
  • Tabelas com chave de várias colunas: acrescente as colunas extras em Tie-break columns. O dbSlice passa a paginar pela chave completa, e não só pela primeira coluna. Uma execução com tie-break columns não retoma do meio.
  • Tabelas sem índice utilizável: ligue Read without ordering. O dbSlice abre um cursor sem ORDER BY e o divide em lotes ele mesmo, em vez de pedir ao servidor para ordenar a tabela a cada lote. Essa execução também não retoma do meio.
  • Tabelas muito grandes: ligue Don't count rows before starting para pular o COUNT(*) antes da cópia.
  • Confere antes de gravar com o Record Diff e as conferências na tela, e prova o resultado com o Compare e a lista completa de chaves divergentes.
  • Mascara no caminho as cópias de desenvolvimento e teste, mantendo chaves e chaves estrangeiras intactas.
  • Exportar em vez de carregar: quando você só precisa de um arquivo, o mesmo app exporta uma tabela do Caché ou do IRIS para CSV, JSON, XML ou HTML.

Passo a passo: converter uma tabela de Caché ou IRIS para SQL Server

  1. Conecte no Caché ou no IRIS (servidor, porta, namespace, usuário) e no SQL Server.
  2. Escolha o esquema e a tabela de origem (ou um SELECT), e a tabela de destino.
  3. Escolha a coluna-chave. Se a chave tiver várias colunas, acrescente as outras em Tie-break columns. Se a tabela não tiver índice utilizável, marque Read without ordering.
  4. Escolha o modo: Initial load, depois Upsert ou Insert new.
  5. Rode o Record Diff e depois a cópia, ou salve como job para a CLI e o Agendador de Tarefas do Windows.

Mover dados entre Caché, IRIS e SQL Server, com qualquer um deles como origem

O dbSlice também grava no IRIS e no Caché, então a mesma tela carrega dados do SQL Server no IRIS. Com o PostgreSQL como destino, veja Caché e IRIS para PostgreSQL.

Perguntas frequentes

O dbSlice converte classes, rotinas ou triggers em ObjectScript?

Não. Ele move dados; o código precisa ser reescrito em T-SQL ou na nova aplicação.

Ele lê dados que existem só em globals?

Não. O dbSlice lê pelo SQL do InterSystems. Mapeie as globals para uma classe antes.

Quais versões?

InterSystems IRIS e o Caché legado, inclusive servidores sem INFORMATION_SCHEMA.

As execuções incrementais copiam as exclusões?

Não. Rode o Compare ou uma recarga antes da troca.

Existe versão gratuita?

Sim, na Microsoft Store: ela conecta, navega, compara e exporta para CSV. Gravar num destino exige uma licença Desktop ou Server.

Ainda não usa o dbSlice?
Experimente a versão gratuita da Microsoft Store: ela conecta, navega pelos dados, compara estruturas e exporta para CSV.

Experimente grátis Veja as demonstrações

Em produção há mais de 6 anos · Garantia de 14 dias · Roda na sua máquina