Jak dołączyć bazę danych w SQL Server?

32

Niektóre typowe pytania dotyczące dołączania baz danych w SQL Server:

  • Co to znaczy dołączać lub odłączać bazę danych?
  • Jak odłączyć bazę danych?
  • Jak załączyć bazę danych?
    • Co to znaczy dołączyć i odbudować dziennik?
  • Jak to zrobić w programie SQL Server Express?
  • Kiedy mogę rozważyć odłączenie i dołączenie?
  • Czy są jakieś zagrożenia lub ostrzeżenia?
  • Co powiesz na dołączanie między wersjami i edycjami SQL Server? (Standard do Enterprise? 2000 do 2008? 2012 do 2008?)
Mike Walsh
źródło

Odpowiedzi:

33

Co to jest odłączanie lub dołączanie i jak działają?

Zaczniemy od odłączenia. Po odłączeniu bazy danych w programie SQL Server, baza danych jest przełączana w tryb offline i usuwana z instancji programu SQL Server, z której jest odłączana. Dane i pliki dziennika baz danych pozostają taktowane i pozostają w spójnym stanie, dzięki czemu można później dołączyć bazę danych do innej instancji programu SQL Server. Dołącz łączy dane i pliki dziennika z bazy danych, która została prawidłowo odłączona (lub która została skopiowana z czysto zamkniętej instancji SQL Server) do instancji SQL Server i przełącza bazę danych w tryb online.

Jak odłączyć bazę danych?

Możesz to zrobić w T-SQL lub z graficznego interfejsu użytkownika SQL Server Management Studio.

W GUI kliknij prawym przyciskiem myszy bazę danych, którą chcesz odłączyć, wybierz All Tasksi kliknij Detach. Stamtąd pojawi się okno odłączania. Możesz najpierw porzucić połączenia, aby wymusić rozłączenie wszystkich aktywnych połączeń i wycofać prace, które były w trakcie wykonywania. Możesz także zaktualizować statystyki przed odłączeniem. Odłączanie przez - wybierz Odłącz ...

W T-SQL:

-- You don't want to be in the database you are trying to detach
USE Master
GO

-- Optional step to drop all active connections and roll back their work
ALTER DATABASE DatabaseName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

-- Perform the detach
EXEC sp_detach_db 'DatabaseName'
GO

W przypadku procedury składowanej systemu sp_detach_db istnieją dwa parametry, które można przekazać opcjonalnie:

  • @skipchecks- dopuszczalnym wejściem jest 'True'lub 'False'jeśli 'True'SQL Server zaktualizuje statystyki przed odłączeniem. Jeśli „ False'nie”. Jeśli nie określisz tutaj niczego, statystyki zostaną zaktualizowane w SQL Server 2005 lub nowszym.
    • @keepfulltextindexfile- Domyślne ustawienie to 'True'- jeśli ta wartość jest ustawiona na true, metadane indeksu pełnotekstowego nie zostaną upuszczone podczas odłączania.

Aby zobaczyć dużo więcej o odłączyć i trochę więcej szczegółów dotyczących ryzyka I podkreślają poniżej, artykuł Books Online na sp_detach_dbto miejsce, aby rozpocząć dobre.

Jak dołączyć bazę danych?

Możesz to również zrobić w T-SQL lub z graficznego interfejsu użytkownika SQL Server Management Studio.

( UWAGA: Jeśli masz dane i pliki dziennika z bazy danych, która nie została prawidłowo odłączona, twój załącznik może nie działać. Gdy nastąpi odłączenie, baza danych jest przełączana w tryb offline, a pliki dziennika i danych są wprowadzane w spójny stan. To również zdarza się, gdy usługa jest całkowicie zamykana ).

W GUI kliknij prawym przyciskiem myszy Databasesfolder najwyższego poziomu dla swojej instancji i wybierz Attach. W następnym oknie dialogowym wybierz podstawowy plik danych (.MDF) bazy danych, którą chcesz dołączyć, i upewnij się, że wybrane zostały inne pliki i określono ich odpowiednie lokalizacje, a następnie kliknij przycisk OK, dołączając bazę danych.

W T-SQL najlepszym sposobem na to w SQL Server 2005 i do przodu jest CREATE DATABASEpolecenie. Jest to metoda obsługiwana poza SQL Server 2012. Jeśli chcesz zobaczyć, jak używać sp_attach_db, możesz to zobaczyć w książkach artykuły online dla [sp_attach_db][3]lub[sp_attach_single_file_db][4]

Gdy masz plik dziennika i pliki danych, a są one spójne, jest to podejście T-SQL:

- Za pomocą Utwórz bazę danych i klauzulę FOR ATTACH

CREATE DATABASE DatabaseName 
    ON (FILENAME = 'FilePath\FileName.mdf'), -- Main Data File .mdf
    (FILENAME = 'FilePath\LogFileName.ldf'), -- Log file .ldf
     (FILENAME = 'FilePath\SecondaryDataFile.ndf)  -- Optional - any secondary data files
    FOR ATTACH 
GO 

Więcej informacji na temat instrukcji Utwórz bazę danych można także znaleźć w książkach online.

Jak odłączyć / dołączyć w SQL Server Express?

To właściwie to samo. Jeśli używasz programu SQL Server Management Studio Express, możesz także użyć okna dialogowego odłączania / dołączania w GUI opisanym powyżej lub kroków T-SQL przez SSMS Express opisanych powyżej. Nie ma różnicy z Express tam.

Jeśli nie masz SSMS Express, możesz go pobrać ( tutaj jest wersja SQL Server 2012 Express).

Możesz przystąpić do SQLCMDsesji i użyć tych samych konstrukcji T-SQL opisanych powyżej.

Kiedy należy rozważyć wykonanie odłączenia lub dołączenia?

Najpierw słowo na temat tego, co odłącza i dołącza nie jest przeznaczone do: Kopia zapasowa i odzyskiwanie Odłącz i dołącz nie jest sposobem na wykonanie kopii zapasowej bazy danych w celu rutynowego odzyskiwania. W ten sposób nie są tworzone kopie zapasowe dziennika transakcji, powoduje to, że baza danych znajduje się w stanie, w którym pliki bazy danych mogą zostać przypadkowo usunięte, i wcale nie jest dobrym sposobem na to.

To powiedziawszy, odłącz i dołącz są dobre dla kilku przypadków użycia (nie wyczerpujące, możesz je edytować, aby dodać lub utworzyć nową odpowiedź z większą liczbą):

  • Czasami w przypadku migracji (chociaż wolę tworzenie kopii zapasowych / przywracanie dla tych, jak omówiono w mojej odpowiedzi tutaj )
  • Gdy chcesz usunąć bazę danych, która nie jest już aktywnie używana, ale możesz dołączyć później w razie potrzeby.
  • W niektórych sytuacjach rozwiązywania problemów można to przywołać
  • Nie mam miejsca na tworzenie kopii zapasowych lub przywracanie zarówno danych, jak i plików dziennika do innego środowiska (nigdy nie powinno Cię tu być, ale korzystałem z niego do przenoszenia baz danych deweloperów między środowiskami .. Nie chciałem ani nie potrzebowałem dziennik, podobnie jak załączenie / przebudowanie pliku dziennika)

Ryzyko i ostrzeżenia

Ponownie, książki online jest dobrym źródłem tutaj , ale będę wołać jakieś szczególne względy mieć na uwadze, ze odłączania lub dołączania bazy danych -

Odłączyć

  • Przełączasz bazę danych w tryb offline. Nie będzie już dostępny. To powinno być oczywiste, ale warte wywołania. Dlatego nie jest to świetna opcja tworzenia kopii zapasowych.
  • Gdy baza danych jest w trybie online, SQL Server blokuje pliki. Nie polecam próbowania tego, aby udowodnić, że się mylę, ponieważ może istnieć inna sytuacja, ale zazwyczaj nie można usunąć pliku bazy danych (danych, danych dodatkowych lub pliku dziennika), gdy SQL Server jest w trybie online. To coś dobrego. Kiedy się odłączysz, nie masz takiej ochrony - może to być zła rzecz.
  • Jeśli masz do czynienia z uszkodzeniem bazy danych i znajdujesz artykuł, w którym znajduje się pierwszy krok Odłącz - to źle - jeśli odłączysz uszkodzoną bazę danych, może to być to. Być może nie dołączasz ponownie tej bazy danych.
  • Wycinanie i wklejanie produkcyjnych plików baz danych w całej sieci jest sposobem na potencjalne uszkodzenie plików na poziomie plików. Kolejny powód, dla którego wolę tworzenie kopii zapasowych / przywracanie podczas migracji.
  • Może to spowodować niepowodzenie planu konserwacji. Sytuacja polega na tym, że tak jak ja opracowałeś plan konserwacji, aby regularnie wykonywać kopie zapasowe wszystkich baz danych bez sprawdzania najlepszych praktyk. Działa to dobrze, więc przestajesz o tym myśleć. Ktoś inny decyduje się na przejęcie bazy danych, z której nie korzysta offline. Od tego momentu plan konserwacji zakończy się niepowodzeniem, dopóki nie zmodyfikujesz planu konserwacji, zaznaczając opcję „zignoruj ​​bazy danych, których stan nie jest online” w oknie dialogowym „Baza danych”. Pamiętaj, że nie tylko zawiedzie baza danych offline - plan konserwacji zawiedzie z błędem w momencie, gdy spróbuje wykonać kopię zapasową bazy danych offline, więc niektóre bazy danych online mogą nie zostać utworzone. (inny autor w tym punkcie traktuje podejrzliwie)

Dołącz - tak jak nie powinieneś uruchamiać skryptów z Internetu ani przyjmować paczek od nieznajomych na lotnisku, nie powinieneś dołączać bazy danych, którą dostałeś od kogoś innego, bez pewnych kroków w celu jej weryfikacji. Ta baza danych może zawierać w sobie kod wyzwalaczy, procedur przechowywanych itp., Które mogłyby zagrozić środowisku. Powinieneś przejrzeć bazę danych, którą chcesz dołączyć w bezpiecznym i zaporowym środowisku, a nie system produkcyjny.

Co z różnymi wersjami lub edycjami SQL Server?

Nie różnią się one niczym od zasad przywracania baz danych między wersjami. Generalnie można przywrócić do następnej wersji dla 3 wersji (na przykład działa SQL Server 2008 na SQL Server 2012. SQL Server 2000 na SQL Server 2012 nie będzie działał). W ogóle nie można cofnąć się za pomocą kopii zapasowej / przywracania lub odłączenia / dołączenia - trzeba by wyskakiwać obiekty i wyskakiwać wstawki i robić to ręcznie lub za pomocą narzędzia, które to robi. W przypadku wersji ogólnie można przenosić między głównymi jednostkami SKU programu SQL Server - na przykład można przenosić bazę danych ze standardowej do korporacyjnej bez dodatkowej pracy. Jeśli używasz funkcji Enterprise (powiedz, kompresja lub partycjonowanie), musisz jednak wyłączyć te funkcje przed przeniesieniem. Możesz dowiedzieć się o funkcjach, które „

Mike Walsh
źródło
@Mike - czy regularne odłączanie i dołączanie baz danych ma wpływ na wydajność? Wyobrażam sobie, że bufor bufora jest unieważniony dla każdej odłączonej bazy danych (wyraźnie), ale czy zdajesz sobie sprawę z innych skutków?
Max Vernon
Mam bazę danych, na której po zatrzymaniu instancji programu SQL Server i skopiowaniu 3 plików, a następnie dołączeniu ich do innej instancji, baza danych przechodzi do odzyskiwania (zdarzyło mi się to dwa razy na tej samej bazie danych). Z twojego opisu to nie powinno się zdarzyć, więc co mam podejrzewać o moją bazę danych? Czy to jest w jakiś sposób zepsute? Tworzenie i przywracanie kopii zapasowych trwa eony, a ta funkcja jest ratunkiem dla życia! Przynajmniej dla programistów udostępniających DB ...
NoOne 10.10.14