Převod souboru MDF do SQLITE
Převést data SQL Server MDF do přenosné databáze SQLite se schématem a kontrolami kompatibility.
Vytvořte soubory SQLITE online
Soubory MDF zatím číst neumíme, takže tenhle převod nenabízíme. Pokud dokážete svou práci uložit do některého z těchto formátů nebo dalších, SQLITE z něj vyrobíme:
Jak převést soubor mdf do formátu sqlite
- Databázové formáty
- Dosud nehodnoceno.
Databáze SQL Server může být potřeba převést na přenosný soubor SQLite pro desktopovou aplikaci, vestavěné nasazení, testování nebo distribuci bez nutnosti instance SQL Server. Převod je exportem mezi databázovými enginy, nikoli jednoduchou změnou přípony souboru: soubor MDF musí nejprve otevřít SQL Server a jeho schéma a řádky je třeba zkopírovat do SQLite.
Co je formát MDF
MDF je primární formát datových souborů používaný systémem Microsoft SQL Server. Obsahuje databázové objekty, jako jsou tabulky, indexy, pohledy, uložené procedury a data tabulek; doprovodný soubor .ldf obvykle obsahuje transakční protokol.
Se soubory MDF se setkáte při obdržení zálohy databáze SQL Server nebo odpojené databáze, při kopírování databáze mezi servery Windows nebo při práci s aplikacemi postavenými na SQL Server. Microsoft SQL Server, SQL Server Express, SQL Server Developer a SQL Server LocalDB mohou připojit a číst soubory MDF. MDF není samostatný výměnný formát a nástroje SQLite jej obvykle nedokážou otevřít přímo.
Co je formát SQLITE
SQLite ukládá celou relační databázi do jednoho souboru, obvykle s příponou .sqlite, .sqlite3 nebo .db. Aplikace jej používají pro místní úložiště, vestavěný software, testování, mobilní data, offline provoz a výměnu dat založenou na souborech.
SQLite nevyžaduje databázový server a lze jej snadno kopírovat nebo archivovat. Jeho typový systém je flexibilnější než typový systém SQL Server, ale neposkytuje přímé ekvivalenty pro všechny funkce SQL Server. Uložené procedury, úlohy SQL Server Agent, propojené servery, oprávnění a mnohá nastavení na úrovni serveru nelze přenést do souboru SQLite.
Jak skutečně převést MDF na SQLITE
1. Připojte MDF k SQL Server
Nainstalujte kompatibilní edici SQL Server, přednostně Developer pro neprodukční práci nebo Express pro odlehčenou místní instanci. V SQL Server Management Studio se připojte k instanci a zvolte Databases → Attach. Přidejte soubor MDF a ověřte zobrazenou cestu k souboru protokolu.
Pokud byla původní databáze řádně odpojena, její soubor LDF by měl být k dispozici vedle souboru MDF. Nespouštějte příkazy pro opravu nebo opětovné vytvoření protokolu nad jedinou kopií. Databáze zkopírovaná v době, kdy ji SQL Server používal, může být nekonzistentní a místo toho by měla být obnovena ze zálohy SQL Server.
2. Zkontrolujte zdrojové schéma
V SSMS zkontrolujte tabulky, pohledy, klíče, sloupce identity, vypočítané sloupce, triggery, řazení a nepodporované typy specifické pro SQL Server. Dotaz, jako je SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE';, zobrazí základní tabulky, které je třeba exportovat.
3. Exportujte tabulky pomocí nástroje pracujícího s databází
Pro opakovatelný převod použijte Python s pyodbc pro SQL Server a modul sqlite3 ze standardní knihovny. Nainstalujte ODBC ovladač SQL Server a spusťte:
python -m pip install pyodbc
Následující příklad zkopíruje jednu tabulku. Nahraďte údaje připojení a název tabulky a poté postup zopakujte pro každou požadovanou tabulku po vytvoření schématu 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()
Pro úplnou migraci vytvářejte tabulky explicitně podle schématu SQL Server namísto odvozování typů z prvního řádku. Exportujte nadřazené tabulky před podřízenými tabulkami, vložte řádky a poté přidejte cizí klíče a indexy. Grafickou možností je DB Browser for SQLite po exportu každé tabulky SQL Server do CSV, ale CSV ztrácí omezení, přesné typy, možnost hodnoty NULL a binární hodnoty, takže je vhodnější pro malé nebo ploché datové sady.
4. Ověřte výsledný soubor
Otevřete converted.sqlite v DB Browser for SQLite nebo SQLiteStudio a porovnejte počty řádků pomocí dotazů SQL Server a SQLite, jako je SELECT COUNT(*) FROM Customers;. Spusťte reprezentativní spojení, zkontrolujte data a text Unicode a ověřte, že byly znovu vytvořeny primární klíče, indexy a cizí klíče.
Kvalita, kompatibilita a omezení
Sloupce SQL Server IDENTITY se obvykle převedou na celočíselné klíče SQLite, ale SQLite nezachová chování generování identity, pokud cílové schéma vhodně nepoužívá INTEGER PRIMARY KEY. Typy SQL Server UNIQUEIDENTIFIER, DECIMAL, XML, geography, hierarchyid, datetimeoffset a varbinary(max) vyžadují promyšlené mapování; identifikátory GUID lze ukládat jako text nebo 16bajtové objekty BLOB a desetinná čísla s vysokou přesností by se neměla převádět prostřednictvím binárních čísel s plovoucí desetinnou čárkou.
Pohledy a dotazy často vyžadují přepsání SQL, protože funkce SQL Server, syntaxe hranatých závorek, datumové funkce a spojení nejsou se SQLite plně kompatibilní. Uložené procedury, triggery, fulltextové indexy, oprávnění a automatizace na straně serveru je nutné přepracovat nebo vynechat. SQLite také umožňuje souběžné čtení, ale používá odlišné zamykání při zápisu a chování transakcí, takže převedený soubor není přímou náhradou víceuživatelské databáze SQL Server.
Online převodníky jsou pro soubory MDF obecně nevhodné, protože k připojení a interpretaci databáze potřebují engine SQL Server a nahráním souboru MDF můžete zpřístupnit všechna obsažená data. Převod provádějte lokálně, pokud databáze nebyla anonymizována a poskytovatel nemá jasně definovanou bezpečnostní politiku a zásady uchovávání dat.
MDF vs SQLITE: srovnání formátů
Jak si formáty MDF a SQLITE stojí v nejdůležitějších vlastnostech pro tento převod.
| Vlastnost | .MDF Media Descriptor File | .SQLITE SQLite database |
|---|---|---|
| Otevřený standard | Ne | Ano |
| Komprese | Obojí | Bez komprese |
| Typická velikost souboru | Velký | Malé |
| Otevírá se ve webovém prohlížeči | Ne | Ne |
| Další úpravy | Nelze přímo upravovat | Omezeně |
| Podpora metadat | Základní | Základní |
| Čitelný jako prostý text | Ne | Ne |
| Nejvhodnější pro | Dlouhodobá archivace | Výměna dat |
| Zavedeno | 2000 | 2000 |
| Vývojář | Alcohol Soft | D. Richard Hipp / SQLite Consortium |
| MIME typ | — | application/vnd.sqlite3 |