Vladimír Mach @vladimirmach 2. 1. 2013
SQL Server Compact Edition Jednoduchá relační databáze Použití i v malých zařízeních s omezenými zdroji Dříve pod názvem SQL Server Mobile Časté využití při programování v ASP.NET Ve VS 2012 jako výchozí databázové úložiště Distribuované zdarma Může podporovat ACID u transakcí Ve výchozím nastavení nesplňuje poslední podmínku Durability Je potřeba změnit chování při commitu pomocí odpovídajícího flagu
Jak SQL CE běží Neběží jako systémová služba Je součástí dané aplikace, tedy v rámci jejího procesu a paměťového prostoru Není nutné instalovat nic dalšího pro použití databáze (Private Deployment) Výjimkou je Microsoft Visual C++ 2008 Runtime Libraries (x86 and x64) SP1 Spouští se jen když se přistupuje k datovým souborům Vyžaduje cca 5 MB paměti a 1,4 MB diskového prostoru
Scénáře použití SQL CE Databáze jen jako hloupé úložiště SQL CE nepodporuje uložené funkce, pohledy nebo procedury Malý objem ukládaných dat Maximální velikost databáze je omezena na 4 GB Malá zátěž Hodně čtení a málo zápisů Zjednodušení distribuce aplikace Pro nasazení SQL CE databáze stačí s vaší aplikací distribuovat několik DLL knihoven Zjednodušení konfigurace aplikace Stačí správně nastavit connection string, aby směřoval na patřičný soubor na disku
Maximální počet současných spojení omezen na 256 Z praktického hlediska se doporučuje maximálně 70-80 kvůli výkonu Formát databáze Celá databáze je uložena v jednom souboru s příponou SDF Pro přístup do souboru s databází lze použít Visual Studio (pro verzi 4.0) SQL Server Management Studio není poslední verzí podporováno Podporuje více spojení do stejné databáze (.sdf souboru) v rámci jedné nebo více aplikací Pouze lokálně na stejném počítači
Formát databáze (2) Přístupová práva podle rolí na úrovni tabulek nejsou implementována Pro docílení jednoduchosti a rychlosti databázového jádra Na úrovni databáze jdou zajistit pomocí heslem chráněného přístupu Zabezpečení uložených dat na disku jde docílit pomocí šifrování databáze Databáze je rozdělena na 4 kb stránky Každá stránka má svůj kontrolní součet Počítán a uložen při zápisu stránky na disk Časem může dojít k fragmentaci databáze
Přístup do databáze Pro použití databáze stačí do connection string přidat atribut Data Source Data Source="D:\MyApp\Mydb.sdf" Speciální DataDirectory vlastnost Data Source=" DataDirectory \Mydb.sdf" Hodnota se nastavuje pomocí volání AppDomain.SetData Pokud není nastavena, přiřazuje se podle následujících pravidel V aplikacích běžících na lokálním disku se použije adresář ve kterém je aplikace umístěna V aplikacích instalovaných pomocí ClickOnce se vytvoří nová datová složka V.NET Compact Framework není metoda AppDomain.Setdata podporovaná
Administrace databáze Pro správu databáze jsou dostupná volání pro administrativní úkony v SqlCeEngine AutoShrink Verify Repair Compact AutoFlush Zálohování
AutoShrink Jak se databáze mění, mohou některé stránky obsahovat nevyužitý prostor nebo se vyskytovat celé nevyužité stránky Nevyužité stránky jsou znovupoužity pomocí AutoShrink mechanismu AutoShrink posouvá stránky v souboru tak, aby nevyužité stránky byly souvisle na konci souboru Prázdné stránky jsou následně odstraněny úplně Nezaplněné stránky jsou následně k dalšímu využití
Compact Prázdné místo uvnitř stránek může být znovu použito pouze po zavolání metody Compact Je vytvořena nová databáze a indexy Čtou se čtou řádky z databáze a zapisují do nové cílové databáze Data jsou zapisována za sebou, bez mezer v původním souboru Jednotlivé stránky tabulky jsou přeorganizovány a uloženy souvisle
Verify Zavoláním Verify na SqlCeEngine přepočítá kontrolní součty všech stránek Ověří, jestli nově spočítané odpovídají původním Vrací true/false Pokud false, je vhodné na databázi spustit Repair metodu
Repair Zavolání Repair na SqlCeEngine opět počítá kontrolní součty všech stránek Pokud spočítaný neodpovídá původnímu je stránka označena za poškozenou Pokud byl použit flag RepairOption.DeleteCorruptedRows budou všechny poškozené stránky odstraněny Pokud byl použit flag RepairOption.RecoverCorruptedRows databáze se pokusí data přečíst, znovu zapsat a přepočítat kontrolní součet Použití RepairOption.RecoverCorruptedRows může zachránit více dat, ale nezaručuje, že obnovená data budou logicky správná
AutoFlush Při změně databáze během transakce jsou změny uloženy v buffer poolu dokud transakce neskončí Pokud selže, změny jsou zahozeny Při commitu se změny zviditelní ostatním, ale nejsou nutně hned uloženy do databázového souboru Pokud dojde k neočekávanému konci aplikace, nemusí být všechny commitované změny zaznamenány a budou zapomenuty Dokončená transakce jsou ale vždy zapisovány na disk v pořadí commitu I přes ztrátu transakce je databáze vždy v konzistentním stavu
Zálohování databáze Pro zálohování databáze stačí využít souborový systém Záloha databáze Zavřít všechna spojení k databázi a zkopírovat.sdf soubor Obnovení databáze Zkopírovat zálohovaný.sdf soubor na původní umístění Zrušení databáze Smazat.sdf soubor z disku
Součásti SQL CE Fialová volitelné podle přístupu např. C/C++/native Vs C#/VB.NET/.NET/Managed Zelená plně volitelné podle scénáře použití Modrá povinné
Součásti SQL CE Komponenta Storage Engine Query Processor OLEDB Provider DB Utilities Managed Extensions ADO.NET Provider Also known as ADO.NET v2 Provider Merge Replication Remote Data Access Sync Services DLL knihovna sqlcese35.dll sqlceqp35.dll sqlceoledb35.dll sqlcecompact35.dll sqlceme35.dll System.Data.SqlServerCe.dll sqlceca35.dll sqlceca35.dll Microsoft.Synchronization.Data.SqlServerCe.dll Microsoft.Synchronization.Data.dll Microsoft.Synchronization.Data.Server.Dll LINQ/SQL LINQ/Entities - Also known as ADO.NET v3 Provider, Entity Framework Žádná samostatná knihovna System.Data.SqlServerCe.Entity.dll
Různé verze SQL CE Předchozí verze je 3.5 Aktuální verze je 4.0 SP1 Tato verze nepodporuje veškerou funkcionalitu verze 3.5 Data Replikace pomocí Sync Framework SQL Server Integration services Připojení z SQL Management Studia LINQ to SQL Není podporované v mobilních zařízeních (WP, WM, Windows CE) Různé verze SQL CE mohou být nainstalovány na stejném počítači
Omezení T-SQL v SQL CE Oproti velkému SQL serveru omezená podpora T-SQL Podporováno pouze SET DEFAULT možnost v ALTER TABLE HAVING pouze pro jeden sloupec TOP pouze pro [0,MAX_INT] UPDATE STATISTICS ON <TABLE NAME> Přejmenování databázového objektu pomocí 'AS'. Změna vlastnosti IDENTITY (seed a step) pomocí ALTER TABLE Datové typy představené v SQL 2008 Date, DateTime, DateTimeOffset, Geography, Geometry, HierearchyID, Time
Budoucnost SQL CE Plně podporováno v ASP.NET projektech jako výchozí databáze u ASP.NET WebMatrix Plně podporováno Entity Frameworkem Jediná databáze na platformě Windows Phone Pouze ve verzi 3.5 a s přístupem LINQ to SQL Verze 4.0 LINQ to SQL nepodporuje SQL CE není podporováno v Windows 8 Modern UI aplikace (WinRT) Silverlight, s výjimkou Windows Phone
LocalDB LocalDB je plnohodnotný SQL Server Express Je spouštěn přímo z klienta Není náhradou Express edice Vylepšení vlastnosti User instance SQL Express Snaha o jednoduché použití jako SQL CE ale při zachování plné kompatibility s plným SQL Serverem.
LocalDB vs. SQL CE Nejdůležitější rozdíly mezi LocalDB a SQL CE Vykonávání SQL CE je in-process DLL knihovna LocalDB běží jako samostatný proces Využití diskového prostoru SQL CE zabírá cca 4 MB na disku LocalDB instalace zabere okolo 140 MB Schopnosti SQL CE nabízí pouze základní relační databázi LocalDB nabízí širší možnosti použití, například XML datový typ
Srovnávací tabulka Vlastnost SQL CE 4.0 Velikost instalace SQL Server Express 2012 SQL Server 2012 LocalDB 2.5 MB instalátor 120 MB instalátor 32 MB instalátor 18 MB na disku > 300 MB na disku > 160 MB na disku Private installation, jako součást aplikace Ano Ne Ne Instalace bez admin oprávnění Ano Ne Ne Běh jako in-process s aplikací Ano Ne Ne (jako proces spuštěný aplikací) Souborový formát Jeden soubor Více souborů Více souborů Maximální velikost DB 4 GB 10 GB 10 GB XML úložiště Ano / uloženo jako ntext Ano Ano Binarní (BLOB) úložiště Ano / uloženo jako image Ano Ano Podpora FILESTREAM Ne Ano Ne Transact-SQL základní Ano Ano Ano Procedural T-SQL - Select Case, If Ne Ano Ano LINQ to SQL Ne Ano Ano Nativní XML, XQuery/Xpath Ne Ano Ano Uložené procedury, pohledy, triggery Ne Ano Ano Počet souběžných spojení 256 Neomezeno Neomezeno (jen lokálně)
Připojení k LocalDB Pokud se klientská aplikace připojuje přes connection string Data Source=(localdb)\v11.0 Poskytovatel spojení nejprve ověří, jestli instance LocalDB pro aktuálního uživatele už je spuštěna Pokud ano, připojí se k ní Pokud ne, spustí novou Connection string pro typické použití Data Source=(localdb)\v11.0;Integrated Security=true; AttachDbFileName=C:\MyData\Database1.mdf LocalDB běží ve vlastním procesu Sdílí ovšem stejný security context jako aplikace, která jej používá
Zdroje Everything SQL Server Compact http://erikej.blogspot.co.uk/ SQL CE Binaries - Details http://blogs.msdn.com/b/laxmi/archive/2009/10/07/sql-ce-binariesdetails.aspx Technical Reference http://msdn.microsoft.com/en-us/library/bb686876(v=sql.110).aspx Data Storage Architecture with SQL Server 2005 Compact Edition http://msdn.microsoft.com/en-us/library/bb380177.aspx Maintaining Databases (SQL Server Compact Edition) http://msdn.microsoft.com/en-us/library/ms172411(v=sql.90).aspx Differences Between SQL Server Compact and SQL Server http://msdn.microsoft.com/en-us/library/bb896140.aspx