Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Odłącza bazę danych, która obecnie nie jest używana, z instancji serwera i, opcjonalnie, uruchamia UPDATE STATISTICS się na wszystkich tabelach przed odłączeniem.
Aby replikowana baza danych mogła zostać odłączona, musi być nieopublikowana. Więcej informacji można znaleźć w sekcji Uwagi później w tym artykule.
Transact-SQL konwencje składni
Składnia
sp_detach_db
[ [ @dbname = ] N'dbname' ]
[ , [ @skipchecks = ] N'skipchecks' ]
[ , [ @keepfulltextindexfile = ] N'keepfulltextindexfile' ]
[ ; ]
Arguments
[ @dbname = ] N'dbname'
Nazwa bazy danych do odłączenia.
@dbname jest nazwa systemu, z wartością domyślną NULL.
[ @skipchecks = ] N'skipchecks'
Określa, czy pominąć lub uruchomić UPDATE STATISTICS.
@skipchecks to nvarchar(10), z domyślnym obciążeniem NULL. Aby pominąć UPDATE STATISTICS, określmy true. Aby wykonać jawnie UPDATE STATISTICS, określ false.
Domyślnie jest wykonywany w UPDATE STATISTICS celu aktualizacji informacji o danych w tabelach i indeksach. Performance jest UPDATE STATISTICS przydatny dla baz danych, które mają zostać przeniesione na nośniki tylko do odczytu.
[ @keepfulltextindexfile = ] N'keepfulltextindexfile'
Określa, że pełny plik indeksowy powiązany z bazą danych, która jest odłączana, nie jest usuwany podczas operacji odłączania bazy danych.
@keepfulltextindexfile to nvarchar(10), z domyślnym obciążeniem true.
- Jeśli @keepfulltextindexfile jest ,
falsewszystkie pełne pliki indeksowe powiązane z bazą danych oraz metadane pełnego tekstu indeksu są usuwane, chyba że baza jest tylko do odczytu. - Jeśli
NULLlubtrue, metadane pełne tekstu są zachowywane.
Ważne
Ta funkcja zostanie usunięta w przyszłej wersji programu SQL Server. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji.
Zwracanie wartości kodu
0 (powodzenie) lub 1 (niepowodzenie).
Zestaw wyników
Żaden.
Uwagi
Gdy baza danych zostaje odłączona, wszystkie jej metadane są usuwane. Jeśli baza danych była domyślną bazą danych każdego konta logowania, staje się ich domyślną bazą danych. master
Uwaga / Notatka
Aby uzyskać informacje o tym, jak przeglądać domyślną bazę danych wszystkich kont logowania, zobacz sp_helplogins. Jeśli masz wymagane uprawnienia, możesz użyć ALTER LOGIN, aby przypisać nową domyślną bazę danych do logowania.
Ograniczenia
Baza danych nie może zostać odłączona, jeśli spełnia się któraś z następujących rzeczy:
Baza danych jest obecnie używana. Więcej informacji można znaleźć w artykule Uzyskaj dostęp wyłączny.
Jeśli zostanie zreplikowana, baza danych jest publikowana.
Zanim będziesz mógł odłączyć bazę danych, musisz wyłączyć publikowanie, uruchamiając sp_replicationdboption.
Jeśli nie możesz użyć
sp_replicationdboption, możesz usunąć replikację, uruchamiając sp_removedbreplication.W bazie danych istnieje migawka z bazy danych.
Zanim odłączysz bazę danych, musisz usunąć wszystkie jej migawki. Więcej informacji można znaleźć w artykule Drop a Database Snapshot.
Migawki bazy danych nie można odłączyć ani dołączyć.
Baza danych jest lustrzana.
Baza danych nie może zostać odłączona, dopóki sesja mirroring nie zostanie zakończona. Więcej informacji można znaleźć w artykule Usuwanie mirroringu bazy danych (SQL Server).
Baza danych jest podejrzana.
Musisz przełączyć bazę danych podejrzanych w tryb awaryjny, zanim będziesz mógł ją odłączyć. Więcej informacji o tym, jak przełączyć bazę danych w tryb awaryjny, zobacz ALTER DATABASE.
Baza danych jest bazą systemową.
Uzyskaj wyłączny dostęp
Odłączenie bazy danych wymaga wyłącznego dostępu do tej bazy. Jeśli baza danych, którą chcesz odłączyć, jest używana, zanim będziesz mógł ją odłączyć, ustaw tryb w SINGLE_USER bazie danych, aby uzyskać wyłączny dostęp.
Zanim ustawisz bazę danych na , SINGLE_USERsprawdź, czy AUTO_UPDATE_STATISTICS_ASYNC opcja jest ustawiona na OFF. Gdy ta opcja jest ustawiona na ON, wątek tła używany do aktualizacji statystyk nawiązuje połączenie z bazą danych i nie możesz uzyskać dostępu do bazy danych w trybie pojedynczego użytkownika. Aby uzyskać więcej informacji, zobacz Ustawianie bazy danych na tryb pojedynczego użytkownika.
Na przykład następujące oświadczenie ALTER DATABASE uzyskuje wyłączny dostęp do bazy danych AdventureWorks2025 po tym, jak wszyscy obecni użytkownicy odłączą się od bazy.
USE master;
ALTER DATABASE AdventureWorks2022
SET SINGLE_USER;
GO
Aby natychmiast lub w określonej liczbie sekund wyrzucić obecnych użytkowników z bazy danych, możesz również skorzystać z tej ROLLBACK opcji.
ALTER DATABASE <database_name>
SET SINGLE_USER
WITH ROLLBACK <rollback_option>;
Aby uzyskać więcej informacji, zobacz sekcję ALTER DATABASE.
Ponownie dołącz bazę danych
Odłączone pliki pozostają i można je ponownie dołączyć za pomocą CREATE DATABASE opcji (z opcją FOR ATTACH lub FOR ATTACH_REBUILD_LOG lub Pliki można przenieść na inny serwer i tam dołączyć.
Permissions
Wymaga członkostwa w roli stałego serwera administratora systemu lub członkostwa w roli db_owner bazy danych.
Przykłady
Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2025 lub AdventureWorksDW2025, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.
Poniższy przykład odłącza bazę AdventureWorks2025 danych z @skipchecks ustawionym na .true
EXECUTE sp_detach_db 'AdventureWorks2022', 'true';
Poniższy przykład odłącza bazę AdventureWorks2025 danych i zachowuje pełne pliki indeksu oraz metadane indeksu pełnego tekstu. To polecenie uruchamia UPDATE STATISTICS, czyli domyślne zachowanie.
EXECUTE sp_detach_db
@dbname = 'AdventureWorks2022',
@keepfulltextindexfile = 'true';