Delen via


sp_attach_db (Transact-SQL)

Van toepassing op:SQL Server

Koppelt een database aan een server.

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. We raden aan om het in plaats daarvan te gebruiken CREATE DATABASE <database_name> FOR ATTACH . Zie CREATE DATABASEvoor meer informatie. Om meerdere logbestanden opnieuw op te bouwen wanneer één of meer een nieuwe locatie hebben, gebruik CREATE DATABASE <database_name> FOR ATTACH_REBUILD_LOGje .

Koppel geen databases aan of herstel deze niet van onbekende of onbetrouwbare bronnen. Dergelijke databases kunnen schadelijke code bevatten die onbedoelde Transact-SQL code kan uitvoeren of fouten kan veroorzaken door het schema of de structuur van de fysieke database te wijzigen. Voordat u een database van een onbekende of niet-vertrouwde bron gebruikt, voert u DBCC CHECKDB- uit op de database op een niet-productieserver en onderzoekt u ook de code, zoals opgeslagen procedures of andere door de gebruiker gedefinieerde code, in de database.

Syntaxis

sp_attach_db
    [ @dbname = ] N'dbname'
    , [ { @filename1 ... @filename16 } = ] { N'*filename1*' ... N'*filename16*' }
[ ; ]

Arguments

[ @dbname = ] N'dbname'

De naam van de database die aan de server gekoppeld moet worden. @dbname is een systeemnaam, zonder standaard.

[ { @filename1 ... @filename16 } = ] { N'bestandsnaam1' ... N'filename16' }

De fysieke naam, inclusief pad, van een databasebestand. Deze parameter is nvarchar(260), met een standaard van NULL. Je kunt tot 16 bestandsnamen opgeven. De parameternamen beginnen bij @filename1 en verhogen naar @filename16. De bestandsnaamlijst moet ten minste het primaire bestand (.mdf) bevatten. Het primaire bestand bevat de systeemtabellen die naar andere bestanden in de database verwijzen. De lijst moet ook alle bestanden bevatten die na het loskoppelen van de database zijn verplaatst.

Deze parameter is gekoppeld aan de FILENAME parameter van de CREATE DATABASE stelling. Zie CREATE DATABASEvoor meer informatie.

Opmerking

Wanneer je een SQL Server 2005 (9.x) database met full-text catalogusbestanden toevoegt aan een nieuwere versie van SQL Server, worden de catalogusbestanden van hun vorige locatie toegevoegd samen met de andere databasebestanden, net als in SQL Server 2005 (9.x). Voor meer informatie, zie Upgrade Full-Text Search.

Codewaarden retourneren

0 (geslaagd) of 1 (mislukt).

Resultaatset

Geen.

Opmerkingen

De sp_attach_db opgeslagen procedure mag alleen worden uitgevoerd op databases die eerder losgekoppeld waren van de databaseserver door een expliciete sp_detach_db bewerking of op gekopieerde databases. Als je meer dan 16 bestanden moet specificeren, gebruik CREATE DATABASE <database_name> FOR ATTACH dan of CREATE DATABASE <database_name> FOR_ATTACH_REBUILD_LOG. Zie CREATE DATABASEvoor meer informatie.

Elk niet-gespecificeerd bestand wordt verondersteld zich op zijn laatst bekende locatie te bevinden. Om een bestand op een andere locatie te gebruiken, moet je de nieuwe locatie opgeven.

Een database die is gemaakt met een recentere versie van SQL Server, kan niet worden gekoppeld in eerdere versies.

Opmerking

Een databasesnapshot kan niet worden losgekoppeld of toegevoegd.

Wanneer je een gerepliceerde database koppelt die gekopieerd is in plaats van losgekoppeld, houd dan rekening met de volgende voorwaarden:

  • Als je de database koppelt aan dezelfde serverinstantie en versie als de originele database, zijn er geen verdere stappen nodig.

  • Als u de database koppelt aan hetzelfde serverexemplaren, maar met een bijgewerkte versie, moet u sp_vupgrade_replication uitvoeren om de replicatie bij te werken nadat de bijlagebewerking is voltooid.

  • Als u de database koppelt aan een ander serverexemplaren, ongeacht de versie, moet u sp_removedbreplication uitvoeren om replicatie te verwijderen nadat de bijlagebewerking is voltooid.

Wanneer een database voor het eerst wordt gekoppeld of hersteld aan een nieuwe instantie van SQL Server, wordt een kopie van de database master key (DMK) - versleuteld door de service master key (SMK) - nog niet opgeslagen in de server. Je moet de OPEN MASTER KEY instructie gebruiken om de DMK te ontsleutelen. Zodra de DMK is ontsleuteld, heb je de optie om in de toekomst automatische ontsleuteling in te schakelen door de ALTER MASTER KEY REGENERATE instructie te gebruiken om de server een kopie van de DMK te geven, versleuteld met de SMK. Wanneer een database wordt geüpgraded vanaf een eerdere versie, moet de DMK worden geregenereerd om het nieuwere AES-algoritme te gebruiken. Zie ALTER MASTER KEYvoor meer informatie over het opnieuw genereren van de DMK. De tijd die nodig is om de DMK-sleutel opnieuw te genereren om een upgrade naar AES uit te voeren, is afhankelijk van het aantal objecten dat wordt beveiligd door de DMK. Het opnieuw genereren van de DMK-sleutel om een upgrade naar AES uit te voeren, is slechts eenmaal nodig en heeft geen effect op toekomstige regeneraties als onderdeel van een strategie voor sleutelrotatie.

Permissions

Voor informatie over hoe machtigingen worden behandeld wanneer een database wordt toegevoegd, zie DATABASE AANMAKEN.

Voorbeelden

Het volgende voorbeeld voegt bestanden toe van AdventureWorks2025 de huidige server.

EXECUTE sp_attach_db
    @dbname = N'AdventureWorks2022',
    @filename1 = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_Data.mdf',
    @filename2 = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_log.ldf';