Converter MDF para SQLITE
Converta dados MDF do SQL Server em um banco de dados SQLite portátil, com verificações de schema e compatibilidade.
Crie ficheiros SQLITE online
Ainda não conseguimos ler ficheiros MDF, por isso esta conversão não está disponível. Se conseguir exportar o seu trabalho para um destes formatos ou outros, transformamo-lo em SQLITE:
Como converter mdf para sqlite arquivo
- Bancos de dados
- Nenhuma avaliação ainda.
Um banco de dados SQL Server pode precisar se tornar um arquivo SQLite portátil para um aplicativo de desktop, uma implantação incorporada, testes ou distribuição sem exigir uma instância do SQL Server. A conversão é uma exportação entre mecanismos de banco de dados, não uma simples alteração da extensão do arquivo: primeiro, um arquivo MDF deve ser aberto pelo SQL Server, e seu esquema e suas linhas devem ser copiados para o SQLite.
O que é o formato MDF
MDF é o formato de arquivo de dados principal usado pelo Microsoft SQL Server. Ele contém objetos de banco de dados, como tabelas, índices, exibições, procedimentos armazenados e dados de tabelas; um arquivo .ldf complementar normalmente contém o log de transações.
Você encontra arquivos MDF ao receber um backup de banco de dados do SQL Server ou um banco de dados desanexado, copiar um banco de dados entre servidores Windows ou trabalhar com aplicativos desenvolvidos com base no SQL Server. Microsoft SQL Server, SQL Server Express, SQL Server Developer e SQL Server LocalDB podem anexar e ler arquivos MDF. Um MDF não é um formato de intercâmbio independente, e as ferramentas do SQLite normalmente não conseguem abri-lo diretamente.
O que é o formato SQLITE
SQLite armazena um banco de dados relacional inteiro em um único arquivo, geralmente usando a extensão .sqlite, .sqlite3 ou .db. Os aplicativos o utilizam para armazenamento local, software incorporado, testes, dados móveis, operação offline e intercâmbio de dados baseado em arquivos.
O SQLite não exige um servidor de banco de dados e é fácil de copiar ou arquivar. Seu sistema de tipos é mais flexível que o do SQL Server, mas ele não oferece equivalentes diretos para todos os recursos do SQL Server. Procedimentos armazenados, trabalhos do SQL Server Agent, servidores vinculados, permissões e muitas configurações no nível do servidor não podem ser transferidos para um arquivo SQLite.
Como converter MDF para SQLITE de fato
1. Anexe o MDF ao SQL Server
Instale uma edição compatível do SQL Server, de preferência Developer para trabalhos que não sejam de produção ou Express para uma instância local leve. No SQL Server Management Studio, conecte-se à instância e escolha Databases → Attach. Adicione o arquivo MDF e verifique o caminho do arquivo de log exibido.
Se o banco de dados original tiver sido desanexado corretamente, o arquivo LDF deverá estar disponível junto ao MDF. Não execute comandos de reparo ou de reconstrução do log na única cópia. Um banco de dados copiado enquanto o SQL Server o estava utilizando pode estar inconsistente e deve ser restaurado a partir de um backup do SQL Server.
2. Inspecione o esquema de origem
Verifique tabelas, exibições, chaves, colunas de identidade, colunas calculadas, gatilhos, agrupamentos e tipos específicos do SQL Server sem suporte no SSMS. Uma consulta como SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'; lista as tabelas base que precisam ser exportadas.
3. Exporte tabelas com uma ferramenta compatível com bancos de dados
Para uma conversão repetível, use Python com pyodbc para o SQL Server e o módulo sqlite3 da biblioteca padrão. Instale o driver ODBC do SQL Server e execute:
python -m pip install pyodbc
O exemplo a seguir copia uma tabela. Substitua os detalhes da conexão e o nome da tabela e, em seguida, repita o processo para cada tabela necessária depois de criar o esquema do SQLite:
import sqlite3
import pyodbc
src = pyodbc.connect(
"DRIVER={ODBC Driver 18 for SQL Server};"
"SERVER=localhost;DATABASE=SourceDb;Trusted_Connection=yes;"
"Encrypt=no;"
)
dst = sqlite3.connect("converted.sqlite")
source_table = "dbo.Customers"
target_table = "Customers"
cur = src.cursor()
cur.execute(f"SELECT * FROM {source_table}")
columns = [d[0] for d in cur.description]
def quote(name):
return '"' + name.replace('"', '""') + '"'
def sqlite_type(value):
if isinstance(value, (bytes, bytearray, memoryview)):
return "BLOB"
if isinstance(value, bool):
return "INTEGER"
if isinstance(value, int):
return "INTEGER"
if isinstance(value, float):
return "REAL"
return "TEXT"
first = cur.fetchone()
if first is not None:
types = [sqlite_type(v) for v in first]
dst.execute("CREATE TABLE " + quote(target_table) + " (" +
", ".join(quote(c) + " " + t for c, t in zip(columns, types)) + ")")
placeholders = ",".join("?" for _ in columns)
insert = "INSERT INTO " + quote(target_table) + " VALUES (" + placeholders + ")"
dst.executemany(insert, [first] + cur.fetchall())
dst.commit()
src.close()
dst.close()
Para uma migração completa, crie as tabelas explicitamente a partir do esquema do SQL Server, em vez de inferir os tipos com base na primeira linha. Exporte as tabelas pai antes das tabelas filhas, insira as linhas e, em seguida, adicione chaves estrangeiras e índices. Uma opção gráfica é o DB Browser for SQLite depois de exportar cada tabela do SQL Server para CSV, mas o CSV perde restrições, tipos exatos, possibilidade de valor nulo e valores binários; portanto, é mais adequado para conjuntos de dados pequenos ou simples.
4. Valide o arquivo resultante
Abra converted.sqlite no DB Browser for SQLite ou no SQLiteStudio e compare as contagens de linhas usando consultas SQL Server e SQLite, como SELECT COUNT(*) FROM Customers;. Execute junções representativas, verifique datas e textos Unicode e confirme se as chaves primárias, os índices e as chaves estrangeiras foram recriados.
Qualidade, compatibilidade e limitações
As colunas IDENTITY do SQL Server normalmente se tornam chaves inteiras do SQLite, mas o SQLite não reproduz o comportamento de geração de identidade, a menos que o esquema de destino use INTEGER PRIMARY KEY adequadamente. UNIQUEIDENTIFIER, DECIMAL, XML, geography, hierarchyid, datetimeoffset e varbinary(max) do SQL Server exigem mapeamentos definidos com cuidado; GUIDs podem ser armazenados como texto ou blobs de 16 bytes, e decimais de alta precisão não devem ser convertidos por meio de ponto flutuante binário.
Exibições e consultas frequentemente exigem reescrita de SQL, pois as funções do SQL Server, a sintaxe com colchetes, as funções de data e as junções não são totalmente compatíveis com o SQLite. Procedimentos armazenados, gatilhos, índices de texto completo, permissões e automação no lado do servidor precisam ser reprojetados ou omitidos. O SQLite também permite leitores simultâneos, mas possui comportamento diferente de bloqueio de gravação e de transações; portanto, um arquivo convertido não substitui diretamente um banco de dados SQL Server multiusuário.
Conversores online geralmente não são adequados para arquivos MDF, pois precisam de um mecanismo do SQL Server para anexar e interpretar o banco de dados, e o envio de um MDF pode revelar todos os dados contidos nele. Mantenha a conversão local, a menos que o banco de dados tenha sido sanitizado e o provedor tenha uma política clara de segurança e retenção.
Comparação de formato: MDF vs SQLITE
Como os formatos MDF e SQLITE se comparam nas propriedades mais importantes para esta conversão.
| Propriedade | .MDF Media Descriptor File | .SQLITE SQLite database |
|---|---|---|
| Padrão aberto | Não | Sim |
| Compressão | Ambos | Sem compressão |
| Tamanho típico do arquivo | Grande | Pequeno |
| Abre num navegador web | Não | Não |
| Edição posterior | Não editável diretamente | Limitado |
| Suporte a metadados | Básico | Básico |
| Legível em texto simples | Não | Não |
| Mais usado para | Arquivamento de longo prazo | Intercâmbio de dados |
| Introduzido | 2000 | 2000 |
| Desenvolvedor | Alcohol Soft | D. Richard Hipp / SQLite Consortium |
| Tipo MIME | — | application/vnd.sqlite3 |