Přesun souborů databáze

Č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í.

Komentáře nejsou povoleny.