Čas od času je potřeba změnit umístění databázových souborů databází uložených na fyzických discích MS SQL Serveru, např. z důvodů zvýšení kapacity (přidání nového disku pro data) nebo z důvodů zvýšení výkony a bezpečnosti (oddělení úložiště souborů dat a logů).
Jakým způsobem je možné toto provést?
V zásadě je možné použít následující způsoby:
Je možné použít přesunutí pomocí příkazů Attach/Detach, tedy databázi v SQL serveru odpojit, soubory zkopírovat do nových umístění a následně databázi opět připojit.
Nejprve tedy databázi odpojíme. Samozřejmě při tomto kroku musí být ostatní uživatelé odpojení!
USE [master]
GO
EXEC master.dbo.sp_detach_db @dbname = N'test'
GO
… a po přesunutí souborů ji opět připojíme.
USE master
GO
EXEC master.dbo.sp_attach_db N'TEST','c:\pom\test.mdf','c:\pom\test_Log.LDF'
GO
Tento způsob je poměrně starý a již dlouhou dobu používaný. Nicméně dokumentace MS SQL Serveru Books Online k tomuto způsobu uvádí upozornění, že tato funkce bude odstraněna v budoucí verzi SQL serveru a je doporučeno používat pro připojení databáze následující konstrukci:
USE [master]
GO
CREATE DATABASE [test] ON
( FILENAME = N'C:\pom\test.mdf' ),
( FILENAME = N'C:\pom\test_log.ldf' )
FOR ATTACH
GO
Ve verzi SQL Serveru 2012 však sp_attach_db stále funguje.
Tyto kroky můžeme provést i pomocí MSSQL Management Studia, kde si v levém stromu zvolíme databázi, přes pravé tlačítko vyvoláme místní menu a zvolíme Tasks > Detach. V následujícím okně zvolíme podrobnosti a odpojení databáze potvrdíme. Databázi následně připojíme tak, že si v levém stromu zvolíme položku Databases, přes pravé tlačítko vyvoláme místní menu a zvolíme Tasks > Attach. V následujícím okně zvolíme soubor databáze (MDF), který chceme připojit a potvrdíme.
Tento způsob je vhodný hlavně pro přenos databáze mezi servery. Při odpojení dojde k úplnému odstranění vazeb v rámci SQL serveru např. při použití Service Brokeru, které je nutné při připojení obnovit. Může také nastat problém s odpojením právě z důvodu vazeb v rámci serveru.
Možností vhodnou obzvláště při přesunu v rámci jednoho SQL Serveru je použití příkazu ALTER DATABASE.
Nejprve provedeme změnu souborů databáze na nové umístění.
ALTER DATABASE [test]
MODIFY FILE (NAME = test_Data, FILENAME = 'C:\pom\test.mdf');
ALTER DATABASE [test]
MODIFY FILE (NAME = test_Log, FILENAME = 'C:\pom\test_Log.ldf');
Poté přepneme databázi do režimu Offline:
ALTER DATABASE [test] SET OFFLINE
Přesuneme soubory databáze do nového umístění a databázi přepneme do režimu Online
ALTER DATABASE [test] SET ONLINE
Tento způsob je vhodný obzvláště při potřebě zachovat vazby na databázi v rámci SQL Serveru, protože databáze je v serveru stále připojena a nedochází tedy ke ztrátě informací.