Attach i detach (przypinanie i odpinanie) bazy danych w SQL Server

Przypinanie i odpinanie bazy danych od serwera jest niezwykle przydatne przy przenoszeniu bazy do innego serwera. Przypięta baza jest widoczna w węźle Databases w SQL Server Management Studio, odpiętej nie zobaczymy, ale fizycznie tkwi w katalogu Data serwera.

Do odpinania bazy służy Detach. Aby wykonać to zadanie klikamy prawym przyciskiem myszy na węźle z nazwą bazy, którą chcemy odpiąć. Z menu kontekstowego wybieramy Task->Detach.

qq1

Pojawi się okno  Detach Databse.

qq2

Klikamy na przycisk OK.

W oknie Object Explorer w węźle Databases baza już nie jest widoczna. Fizycznie pliki tej bazy nadal znajdują się w katalogu Data  SQL Servera.

Aby bazę przypiąć do serwera, klikamy prawym przyciskiem myszy na węzeł Databases i z menu kontekstowego wybieramy  Attach.

sam4

Pojawi się okno Attach Databases.

sam5

Klikamy przycisk Add. W oknie Locate Database Files jest widoczna lista plików mdf wszystkich baz serwera. Zaznaczamy plik bazy, którą chcemy podpiąć.

sam6

Klikamy na przycisk OK . W oknie Attach Databases widzimy także plik ldf. Plik istnieje w katalogu Data, więc go pozostawiamy. Jeśli jednak baza wcześniej w tym miejscu nie istniała, a plik ldf nie został tu skopiowany, wtedy pojawi się w kolumnie Message Not found. należy wówczas usunąć wiersz za pomocą przycisku Remove.

qqq

Klikamy na przycisk OK. W oknie Object Explorer w węźle Databases zobaczymy podpiętą bazę  AdventureWorks2012.

sam9

Innym sposobem na podpięcie bazy danych w postaci pliku mdf jest użycie polecenia T-SQL.

USE master
GO
CREATE DATABASE [AdventureWorks2012test] ON
( FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\AdventureWorks2012_Data.mdf')
FOR ATTACH
GO

W powyższym przykładzie jest podpięta baza AdventureWorks2012 z nową nazwą: AdventureWorks2012test. Jeśli plik ldf nie jest skopiowany zostanie utworzony automatycznie po podpięciu bazy do serwera.
Ponżej skrypt SQLz dodatkowym plikiem LDF:

USE master
GO
CREATE DATABASE [AdventureWorks2012test] ON
( FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\AdventureWorks2012_Data.mdf'),
( FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\AdventureWorks2012_log.ldf')
FOR ATTACH
GO