Sdílet prostřednictvím


sp_detach_db (Transact-SQL)

platí pro:SQL Server

Odpojí databázi, která není aktuálně používána, ze serverové instance a volitelně běží UPDATE STATISTICS na všech tabulkách před odpojením.

Aby byla replikovaná databáze odpojena, musí být nepublikovaná. Pro více informací viz sekce Poznámky později v tomto článku.

Transact-SQL konvence syntaxe

Syntaxe

sp_detach_db
    [ [ @dbname = ] N'dbname' ]
    [ , [ @skipchecks = ] N'skipchecks' ]
    [ , [ @keepfulltextindexfile = ] N'keepfulltextindexfile' ]
[ ; ]

Arguments

[ @dbname = ] N'dbname'

Název databáze, která má být oddělena. @dbname je sysname , s výchozím NULL.

[ @skipchecks = ] N'skipchecks'

Specifikuje, zda má přeskočit nebo spustit UPDATE STATISTICS. @skipchecks je nvarchar(10), s výchozím hodnotou NULL. Pro přeskočení UPDATE STATISTICSuveďme true. Pro explicitní spuštění UPDATE STATISTICS, specifikujeme false.

Ve výchozím nastavení se provádí aktualizace UPDATE STATISTICS informací o datech v tabulkách a indexech. Performance je UPDATE STATISTICS užitečný pro databáze, které mají být přesunuty na média pouze pro čtení.

[ @keepfulltextindexfile = ] N'keepfulltextindexfile'

Specifikuje, že fulltextový indexový soubor spojený s databází, která je odpojena, není během operace odpojování databáze vypuštěn. @keepfulltextindexfile je nvarchar(10), s výchozím hodnotou true.

  • Pokud @keepfulltextindexfile , falsevšechny plnotextové indexové soubory spojené s databází a metadata plného textového indexu jsou vyřazeny, pokud databáze není pouze pro čtení.
  • Pokud NULL nebo true, jsou uchovávána metadata související s plným textem.

Důležité

Tato funkce bude odebrána v budoucí verzi SQL Serveru. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají.

Hodnoty návratového kódu

0 (úspěch) nebo 1 (selhání).

Sada výsledků

Žádné.

Poznámky

Když je databáze odpojena, všechna její metadata jsou odstraněna. Pokud byla databáze výchozí databází jakýchkoli přihlašovacích účtů, stává se jejich výchozí databází. master

Poznámka:

Pro informace o tom, jak zobrazit výchozí databázi všech přihlašovacích účtů, viz sp_helplogins. Pokud máte požadovaná oprávnění, můžete pomocí ALTER LOGIN přiřadit novou výchozí databázi k přihlášení.

Omezení

Databázi nelze odpojit, pokud platí některá z následujících skutečností:

  • Databáze je v současnosti v provozu. Pro více informací viz Získejte exkluzivní přístup.

  • Pokud je replikována, databáze je publikována.

    Než můžete databázi odpojit, musíte deaktivovat publikování spuštěním sp_replicationdboption.

    Pokud nemůžete použít sp_replicationdboption, můžete replikaci odstranit spuštěním sp_removedbreplication.

  • Na databázi existuje snímek databáze.

    Než můžete databázi odpojit, musíte odstranit všechny její snímky. Pro více informací viz Drop a Database Snapshot.

    Snímek databáze nelze oddělit ani připojit.

  • Databáze je zrcadlená.

    Databáze nemůže být odpojena, dokud není zrcadlení databáze ukončeno. Pro více informací viz Odstranění zrcadlení databáze (SQL Server).

  • Databáze je podezřelá.

    Musíte dát databázi podezřelých do nouzového režimu, než ji můžete odpojit. Pro více informací o tom, jak dát databázi do nouzového režimu, viz ALTER DATABASE.

  • Databáze je systémová databáze.

Získejte exkluzivní přístup

Oddělení databáze vyžaduje exkluzivní přístup k databázi. Pokud je databáze, kterou chcete odpojit, v provozu, než ji můžete odpojit, nastavte databázi do SINGLE_USER režimu pro exkluzivní přístup.

Než nastavíte databázi na SINGLE_USER, ověřte, že je volba AUTO_UPDATE_STATISTICS_ASYNC nastavena na OFF. Když je tato volba nastavena na ON, vlákno na pozadí, které se používá k aktualizaci statistik, naváže spojení s databází a v režimu jednoho uživatele nelze databázi přistoupit. Další informace naleznete v tématu Nastavení databáze na režim jednoho uživatele.

Například následující tvrzení získává exkluzivní přístup k databázi AdventureWorks2025 poté, ALTER DATABASE co se všichni současní uživatelé odpojí od databáze.

USE master;

ALTER DATABASE AdventureWorks2022
SET SINGLE_USER;
GO

Pro okamžité nebo během stanoveného počtu sekund můžete tuto možnost také vynutit ROLLBACK současné uživatele z databáze.

ALTER DATABASE <database_name>
SET SINGLE_USER
WITH ROLLBACK <rollback_option>;

Další informace naleznete v části ALTER DATABASE.

Znovu připojit databázi

Odpojené soubory zůstávají a lze je znovu připojit pomocí ( CREATE DATABASE s FOR ATTACH možností nebo FOR ATTACH_REBUILD_LOG ). Soubory lze přesunout na jiný server a připojit tam.

Povolení

Vyžaduje členství v roli správce systému jako pevného serveru nebo členství v db_owner roli databáze.

Examples

Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .

Následující příklad odděluje databázi AdventureWorks2025 s @skipchecks nastavenou na true.

EXECUTE sp_detach_db 'AdventureWorks2022', 'true';

Následující příklad odděluje databázi AdventureWorks2025 a uchovává soubory s plným textem indexu a metadata celého textu. Tento příkaz spustí UPDATE STATISTICS, což je výchozí chování.

EXECUTE sp_detach_db
    @dbname = 'AdventureWorks2022',
    @keepfulltextindexfile = 'true';