Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Koppelt een database die momenteel niet in gebruik is los van een serverinstantie en draait UPDATE STATISTICS optioneel op alle tabellen voordat het loskoppelt.
Om een gerepliceerde database los te koppelen, moet deze niet gepubliceerd zijn. Voor meer informatie, zie de sectie Opmerkingen later in dit artikel.
Transact-SQL syntaxis-conventies
Syntaxis
sp_detach_db
[ [ @dbname = ] N'dbname' ]
[ , [ @skipchecks = ] N'skipchecks' ]
[ , [ @keepfulltextindexfile = ] N'keepfulltextindexfile' ]
[ ; ]
Arguments
[ @dbname = ] N'dbname'
De naam van de database die losgekoppeld moet worden.
@dbname is sysname, met een standaardwaarde van NULL.
[ @skipchecks = ] N'skipchecks'
Specificeert of je moet overslaan of uitvoeren UPDATE STATISTICS.
@skipchecks is nvarchar(10), met een standaard van NULL. Om over te slaan UPDATE STATISTICS, specificeer true. Om expliciet uit te voeren UPDATE STATISTICS, specificeer false.
Standaard UPDATE STATISTICS wordt uitgevoerd om informatie over de gegevens in de tabellen en indexen bij te werken. Performing UPDATE STATISTICS is nuttig voor databases die naar alleen-lezen media moeten worden verplaatst.
[ @keepfulltextindexfile = ] N'keepfulltextindexfile'
Geeft aan dat het full-text indexbestand dat aan de database is gekoppeld en dat wordt losgekoppeld, niet wordt verwijderd tijdens de database-detacheringsoperatie.
@keepfulltextindexfile is nvarchar(10), met een standaard van true.
- Als @keepfulltextindexfile is
false, worden alle full-text indexbestanden die aan de database zijn gekoppeld en de metadata van de full-text index verwijderd, tenzij de database alleen-lezen is. - Als
NULLoftrue, wordt volledige tekstgerelateerde metadata bewaard.
Belangrijk
Deze functie wordt verwijderd in een toekomstige versie van SQL Server. Vermijd het gebruik van deze functie in nieuwe ontwikkelwerkzaamheden en plan om toepassingen te wijzigen die momenteel gebruikmaken van deze functie.
Codewaarden retourneren
0 (geslaagd) of 1 (mislukt).
Resultaatset
Geen.
Opmerkingen
Wanneer een database wordt losgekoppeld, wordt alle metadata verwijderd. Als de database de standaarddatabase van inlogaccounts was, master wordt deze hun standaarddatabase.
Opmerking
Voor informatie over hoe je de standaarddatabase van alle inlogaccounts kunt bekijken, zie sp_helplogins. Als je de vereiste rechten hebt, kun je ALTER LOGIN gebruiken om een nieuwe standaarddatabase toe te wijzen aan een login.
Beperkingen
Een database kan niet worden losgekoppeld als een van de volgende voorwaarden waar is:
De database is momenteel in gebruik. Voor meer informatie, zie Exclusieve toegang verkrijgen.
Als het wordt gerepliceerd, wordt de database gepubliceerd.
Voordat je de database kunt loskoppelen, moet je publiceren uitschakelen door sp_replicationdboption te draaien.
Als je het niet kunt gebruiken
sp_replicationdboption, kun je replicatie verwijderen door sp_removedbreplication te draaien.Er bestaat een databasesnapshot op de database.
Voordat je de database kunt loskoppelen, moet je alle snapshots verwijderen. Voor meer informatie, zie Drop a Database Snapshot.
Een databasesnapshot kan niet worden losgekoppeld of toegevoegd.
De database wordt gespiegeld.
De database kan niet worden losgekoppeld totdat de databasespiegelingssessie is beëindigd. Voor meer informatie, zie Verwijderen van Databasespiegeling (SQL Server).
De database is verdacht.
Je moet een verdachte database in noodmodus zetten voordat je de database kunt loskoppelen. Voor meer informatie over hoe je een database in noodmodus zet, zie ALTER DATABASE.
De database is een systeemdatabase.
Exclusieve toegang verkrijgen
Het loskoppelen van een database vereist exclusieve toegang tot de database. Als de database die je wilt loskoppelen in gebruik is, zet je de database eerst op SINGLE_USER modus voordat je hem kunt loskoppelen om exclusieve toegang te krijgen.
Voordat je de database op SINGLE_USERzet , controleer of de AUTO_UPDATE_STATISTICS_ASYNC optie op is gezet OFF. Wanneer deze optie op is ingesteld ON, neemt de achtergronddraad die wordt gebruikt om statistieken bij te werken een verbinding met de database, en kun je de database niet in single-user modus benaderen. Zie Een database instellen op de modus voor één gebruiker voor meer informatie.
Bijvoorbeeld, de volgende ALTER DATABASE instructie krijgt exclusieve toegang tot de AdventureWorks2025-database nadat alle huidige gebruikers zich van de database hebben losgekoppeld.
USE master;
ALTER DATABASE AdventureWorks2022
SET SINGLE_USER;
GO
Om huidige gebruikers direct of binnen een bepaald aantal seconden uit de database te dwingen, kun je ook de ROLLBACK optie gebruiken.
ALTER DATABASE <database_name>
SET SINGLE_USER
WITH ROLLBACK <rollback_option>;
Zie ALTER DATABASEvoor meer informatie.
Een database opnieuw toevoegen
De losgekoppelde bestanden blijven bestaan en kunnen opnieuw worden toegevoegd door CREATE DATABASE (met de of-optie FOR ATTACHFOR ATTACH_REBUILD_LOG ). De bestanden kunnen naar een andere server worden verplaatst en daar worden toegevoegd.
Permissions
Vereist lidmaatschap van de sysadmin-vaste serverrol of lidmaatschap van de db_owner rol van de database.
Voorbeelden
De codevoorbeelden in dit artikel gebruiken de AdventureWorks2025 of AdventureWorksDW2025 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .
Het volgende voorbeeld detacheert de AdventureWorks2025 database met @skipchecks ingesteld op true.
EXECUTE sp_detach_db 'AdventureWorks2022', 'true';
Het volgende voorbeeld maakt de AdventureWorks2025 database los en bewaart de full-text indexbestanden en de metadata van de full-text index. Dit commando voert UPDATE STATISTICS uit, wat het standaardgedrag is.
EXECUTE sp_detach_db
@dbname = 'AdventureWorks2022',
@keepfulltextindexfile = 'true';