Migrar de Oracle 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 Oracle para planejar:
DATEtem hora. UmDATEdo Oracle guarda a data e a hora até o segundo; por isso, é sugerido comoDATETIME2, e nãoDATE. Troque paraDATEsó nas colunas que nunca guardam hora.NUMBERsem precisão. É sugerido comoDECIMAL(38,10). Confira os valores reais e defina precisão e escala antes de rodar oCREATE TABLE. UmNUMBER(p,s)declarado mantém precisão e escala. A precisão é limitada a 38, que também é o limite do Oracle.- Chaves inteiras e flags. O Oracle não tem um tipo inteiro separado; então
NUMBER(10)viraDECIMAL(10,0). Troque paraINTouBIGINTno DDL onde preferir. Uma flagNUMBER(1)ouCHAR(1)('Y'/'N') pode virarBITpor um SELECT na origem, por exemploCASE active WHEN 'Y' THEN 1 ELSE 0 END AS active. - Ids
RAW(16)deSYS_GUID(). Chegam como binário e são sugeridos comoVARBINARY(MAX). DeclareBINARY(16)para a coluna poder ser chave. Convertê-los paraUNIQUEIDENTIFIERmuda a ordem dos bytes; teste em algumas linhas antes. - Strings vazias. O Oracle guarda
''comoNULL; então não há strings vazias para copiar. Uma coluna do SQL Server declaradaNOT NULLrejeita essas linhas. Deixe-a aceitar nulo ou preencha um padrão num SELECT, comoNVL(middle_name, ' '). VARCHAR2,CLOBeLONG. Texto viraNVARCHAR(n)até 4.000 caracteres, eNVARCHAR(MAX)acima disso.CLOB,NCLOBe o antigo tipoLONGtambém viramNVARCHAR(MAX). ONVARCHARguarda todos os caracteres de um bancoAL32UTF8.TIMESTAMP WITH TIME ZONE. É sugerido comoDATETIME2, e o offset não é levado. Se o fuso importa, normalize na origem com um SELECT comoSYS_EXTRACT_UTC(created_at) AS created_at, e guarde o valor emDATETIME2como UTC.XMLTYPE,INTERVAL,ROWIDe tipos espaciais. Não têm equivalente direto e são sugeridos comoNVARCHAR(MAX). Converta-os num SELECT na origem, por exemploXMLSERIALIZE(CONTENT doc AS CLOB), ou deixe-os fora.- Nomes em maiúsculas. O Oracle guarda os nomes sem aspas em maiúsculas. Escolha os nomes de tabela e coluna do SQL Server no
CREATE TABLE; o dbSlice mapeia as colunas pelo nome, então mantenha os nomes batendo. - Sequences em vez de identity. Os ids do Oracle costumam vir de uma sequence ou de um trigger. Se a chave no SQL Server for uma coluna
IDENTITY, ligue Keep identity, que exige permissão de ALTER na tabela e é confirmado na tela antes. Sem essa opção, o SQL Server gera ids novos; então não use o id como chave da sincronia. Uma chaveBIGINTcomum não precisa de nada disso. - O Upsert roda como
MERGEe as cargas em massa usamSqlBulkCopy, com triggers e constraints verificados.

Como o dbSlice controla a carga
- Lê o Oracle em lotes pequenos, ordenados pela chave, para o banco em uso continuar atendendo os usuários.
- Casa as linhas por uma chave que você escolhe. Modos: Initial load, depois Upsert, Insert new, Update only ou incremental por coluna. Uma execução incremental por uma coluna
DATEfiltra comTO_DATE, para o Oracle continuar usando o índice dessa coluna. - 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 Oracle para CSV, JSON, XML ou HTML.
Passo a passo: converter uma tabela de Oracle para SQL Server
- Conecte no Oracle com o usuário dono das tabelas, e no SQL Server. O dbSlice lista as tabelas do usuário conectado; para tabelas de outro esquema, conecte como esse dono ou exponha-as por uma view no seu próprio esquema.
- Escolha a tabela de origem (ou um SELECT, como nos exemplos da flag e do
XMLTYPE) e a tabela de destino. - Escolha a coluna-chave, e ligue Keep identity se a chave do destino for uma coluna
IDENTITYe os ids precisarem continuar iguais. - Escolha o modo: Initial load, depois Upsert ou Insert new.
- 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 Oracle e SQL Server
O dbSlice copia os dados do Oracle para tabelas do SQL Server. O Microsoft SSMA converte o esquema e o código PL/SQL; veja como os dois se encaixam em alternativa ao SSMA. Para Oracle para PostgreSQL, veja Oracle para PostgreSQL e a rotina noturna em Sincronizar Oracle com PostgreSQL. Vindo do Firebird? Veja Firebird para SQL Server.
Perguntas frequentes
O dbSlice converte packages PL/SQL, triggers ou views?
Não. Ele move dados; o código PL/SQL precisa ser reescrito em T-SQL, à mão ou com o SSMA.
Preciso de GoldenGate, LogMiner ou supplemental logging no Oracle?
Não. O dbSlice lê as tabelas com consultas comuns.
Quais versões do Oracle?
Oracle 12c ou posterior, porque a paginação usa FETCH FIRST.
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.