Een database koppelen
van toepassing op:SQL Server-
In dit artikel wordt beschreven hoe u een database in SQL Server koppelt met SQL Server Management Studio of Transact-SQL. U kunt deze functie gebruiken om een SQL Server-database te kopiëren, verplaatsen of upgraden.
Beperkingen en beperkingen
Voor een overzicht van beperkingen en restricties, zie Database Loskoppelen en Koppelen (SQL Server).
Voorwaarden
Bekijk alle volgende vereisten voordat u doorgaat:
In het geval dat u een database van het ene exemplaar naar het andere verplaatst, moet de database eerst worden losgekoppeld van een bestaand SQL-exemplaar. Als u probeert een database te koppelen die niet is losgekoppeld, wordt een fout geretourneerd. Zie Een database loskoppelenvoor meer informatie.
Wanneer u een database bijvoegt, moeten alle gegevensbestanden voor de database beschikbaar zijn. Vaak hebben deze bestanden extensies .mdf of .ndf (voor gegevensbestanden) en .ldf (voor transactielogboekbestanden). Daarnaast moeten alle bestandsgroepen voor FILESTREAM-gegevens aanwezig en beschikbaar zijn. Voor meer informatie over het koppelen van een database met FILESTREAM-functionaliteit, zie Een FILESTREAM-Enabled Database verplaatsen.
Als een gegevensbestand een ander pad heeft dan het moment waarop de database voor het eerst is gemaakt of voor het laatst is bijgevoegd, moet u het huidige pad van het bestand opgeven.
Het Database Engine-serviceaccount moet machtigingen hebben om de bestanden op hun nieuwe locatie te lezen.
Als MDF- en LDF-bestanden zich in verschillende mappen bevinden en een van de paden
\\?\GlobalRoot
bevat, mislukt de bewerking wanneer u een database koppelt.
Is Attach de beste keuze?
U wordt aangeraden om databases binnen een exemplaar te verplaatsen met behulp van de geplande verplaatsingsprocedure ALTER DATABASE
, in plaats van bestanden los te koppelen en opnieuw bij te voegen bij het verplaatsen van databasebestanden binnen hetzelfde exemplaar. Voor meer informatie, zie Gebruikersdatabases verplaatsen.
Het wordt niet aanbevolen om ontkoppelen en koppelen te gebruiken voor backup en herstel. Er zijn geen back-ups van transactielogboeken of herstel naar een specifiek tijdstip mogelijk wanneer bestanden losgekoppeld worden om extern een back-up van te maken vanuit SQL Server.
Veiligheid
Machtigingen voor bestandstoegang worden ingesteld tijdens veel databasebewerkingen, inclusief wanneer een database wordt losgekoppeld en gekoppeld. Wanneer een database is losgekoppeld of gekoppeld, probeert de database-engine het Windows-account te imiteren van de verbinding die de bewerking uitvoert om te garanderen dat het account gemachtigd is voor toegang tot de database en logboekbestanden. Voor gemengde beveiligingsaccounts die gebruikmaken van SQL Server-aanmeldingen, kan de imitatie mislukken.
In de volgende tabel ziet u de machtigingen die zijn ingesteld voor de database en logboekbestanden nadat een bewerking voor bijvoegen of loskoppelen is voltooid en of het verbindingsaccount kan worden geïmiteerd door de database-engine.
Operatie | Verbinding maken met account kan worden geïmiteerd | Machtigingen voor bestanden worden gegeven aan |
---|---|---|
Loskoppelen | Ja | Alleen het account dat de bewerking uitvoert. Extra accounts kunnen worden toegevoegd door een systeembeheerder als deze nodig zijn nadat de database is losgekoppeld. |
Loskoppelen | Nee | Het SQL Server-serviceaccount (MSSQLSERVER) en leden van de lokale groep Windows-beheerders. |
Vastmaken | Ja | Het SQL Server-serviceaccount (MSSQLSERVER) en leden van de lokale groep Windows-beheerders. |
Vastmaken | Nee | Het SQL Server-serviceaccount (MSSQLSERVER). |
Zie Bestandssysteemmachtigingen configureren voor database-enginetoegangvoor meer informatie over bestandssysteemmachtigingen die zijn verleend aan de SID's per service voor de SQL Server-service.
Voorzichtigheid
U wordt aangeraden geen databases te koppelen of te herstellen uit onbekende of niet-vertrouwde 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. Zie Database Loskoppelen en Koppelen (SQL Server)voor meer informatie over het koppelen van databases en informatie over wijzigingen die aan metagegevens worden aangebracht wanneer u een database bijvoegt.
Machtigingen
Hiervoor is CREATE DATABASE
, CREATE ANY DATABASE
of ALTER ANY DATABASE
machtiging vereist.
SQL Server Management Studio (SSMS) gebruiken
Voordat u een database verplaatst
Als u een database verplaatst voordat u deze loskoppelt van het bestaande SQL Server-exemplaar, gebruikt u de Database-eigenschappen pagina om de bestanden te controleren die zijn gekoppeld aan de database en de huidige locaties.
Maak in SQL Server Management Studio Object Explorer verbinding met het exemplaar van de SQL Server Database Engine en vouw vervolgens het exemplaar uit.
Vouw Databasesuit en selecteer de naam van de gebruikersdatabase die u wilt loskoppelen.
Klik met de rechtermuisknop op de databasenaam en selecteer Eigenschappen. Selecteer de pagina Bestanden en bekijk de vermeldingen in de Databasebestanden tabel.
Zorg ervoor dat u rekening houdt met alle bestanden die zijn gekoppeld aan de database voordat u loskoppelt, verplaatst en bijvoegt. Ga vervolgens verder met de stappen voor het loskoppelen, kopiëren van bestanden en het bijvoegen van de database in de volgende sectie. Zie Een database loskoppelenvoor meer informatie.
Een database koppelen
Maak in SQL Server Management Studio Objectverkennerverbinding met een exemplaar van SQL Server Database Engine en selecteer vervolgens om die exemplaarweergave in SSMS uit te vouwen.
Klik met de rechtermuisknop op Databases en selecteer Bijvoegen.
Selecteer in het dialoogvenster Databases koppelenToevoegenom de database op te geven die moet worden gekoppeld. Selecteer in het dialoogvenster Databasebestanden zoeken de locatie waar de database zich bevindt en vouw de mapstructuur uit om het .mdf bestand van de database te zoeken en te selecteren; bijvoorbeeld:
C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_Data.mdf
Belangrijk
Als u een database wilt selecteren die al is gekoppeld, wordt er een fout gegenereerd.
databases om te koppelen
Geeft informatie weer over de geselecteerde databases.<geen kolomkop>
Geeft een pictogram weer dat de status van de bijlagebewerking aangeeft. De mogelijke pictogrammen worden beschreven in de beschrijving van de status.MDF-bestandslocatie
Geeft het pad en de bestandsnaam van het geselecteerde MDF-bestand weer.databasenaam
Geeft de naam van de database weer.bijvoegen als
U kunt desgewenst een andere naam opgeven voor de database die als bijlage moet worden toegevoegd.eigenaar
Biedt een vervolgkeuzelijst met mogelijke database-eigenaren waaruit u desgewenst een andere eigenaar kunt selecteren.status
Geeft de status van de database weer volgens de volgende tabel:Pictogram Statustekst Beschrijving (Geen pictogram) (Geen tekst) De koppelbewerking is niet gestart of is mogelijk in behandeling voor dit object. Dit is de standaardinstelling wanneer het dialoogvenster wordt geopend. Groene, rechts wijzende driehoek Wordt uitgevoerd De koppelbewerking is gestart, maar is niet voltooid. Groen vinkje Succes Het object is succesvol gekoppeld. Rode cirkel met een wit kruis Fout De koppelingsbewerking stuitte op een fout en is niet succesvol voltooid. Cirkel met twee zwarte kwadranten (links en rechts) en twee witte kwadranten (boven en onder) Gestopt De bewerking Koppelen is niet voltooid omdat u de bewerking hebt gestopt. Cirkel met een kromme pijl die naar links wijst Teruggedraaid De koppelingsbewerking is geslaagd, maar is ongedaan gemaakt vanwege een fout tijdens het koppelen van een ander object. bericht
Hiermee wordt een leeg bericht of een hyperlink 'Bestand niet gevonden' weergegeven.toevoegen
Zoek de benodigde hoofddatabasebestanden. Wanneer u een .mdf bestand selecteert, worden de toepasselijke gegevens automatisch ingevuld in de respectieve velden van de Databases om raster toe te voegen.verwijderen
Hiermee verwijdert u het geselecteerde bestand uit de Databases om raster toe te voegen."<database_name>" databasedetails
Geeft de namen weer van de bestanden die moeten worden bijgevoegd. Als u de padnaam van een bestand wilt controleren of wijzigen, selecteert u de knop Bladeren (...).Notitie
Als er geen bestand bestaat, wordt in de kolom Bericht 'Niet gevonden' weergegeven. Als een logboekbestand niet wordt gevonden, bestaat het in een andere map of is het verwijderd. U moet het bestandspad bijwerken in de databasegegevens tabel om naar de juiste locatie te verwijzen, of het logboekbestand uit de tabel verwijderen. Als een NDF-gegevensbestand niet wordt gevonden, moet u het pad in het raster bijwerken om naar de juiste locatie te verwijzen.
oorspronkelijke bestandsnaam
Geeft de naam weer van het bijgevoegde bestand dat hoort bij de database.bestandstype
Geeft het type bestand aan, Gegevens of Logboek.huidige bestandspad
Geeft het pad naar het geselecteerde databasebestand weer. Het pad kan handmatig worden bewerkt.bericht
Hiermee wordt een leeg bericht of een "Bestand niet gevonden" hyperlink weergegeven.
Gebruik Transact-SQL
Voordat u een database verplaatst
Als u een database verplaatst voordat deze wordt losgekoppeld van het bestaande SQL Server-exemplaar, gebruikt u de sys.database_files
systeemcatalogusweergave om de bestanden te controleren die zijn gekoppeld aan de database en hun huidige locaties. Zie sys.database_files (Transact-SQL)voor meer informatie.
Selecteer in SQL Server Management Studio Nieuwe Query om de query-editor te openen.
Kopieer het volgende Transact-SQL script naar de Query-editor en selecteer vervolgens uitvoeren. Met dit script wordt de locatie van de fysieke databasebestanden weergegeven. Zorg ervoor dat u rekening houdt met alle bestanden wanneer u de database verplaatst via loskoppelen/bijvoegen.
USE [database_name] GO SELECT type_desc, name, physical_name from sys.database_files;
Zorg ervoor dat u rekening houdt met alle bestanden die zijn gekoppeld aan de database voordat u loskoppelt, verplaatst en bijvoegt. Ga vervolgens verder met de stappen voor het loskoppelen, kopiëren van bestanden en het bijvoegen van de database in de volgende sectie. Zie Een database loskoppelenvoor meer informatie.
Een database koppelen
Maak verbinding met de database-engine.
Selecteer in de standaardbalk Nieuwe query.
Gebruik de instructie CREATE DATABASE met de
FOR ATTACH
-clausule.Kopieer en plak het volgende voorbeeld in het queryvenster en selecteer uitvoeren. In dit voorbeeld worden alle bestanden van de AdventureWorks2022-database gekoppeld en wordt de naam van de database gewijzigd in
MyAdventureWorks
.CREATE DATABASE MyAdventureWorks ON (FILENAME = 'C:\MySQLServer\AdventureWorks_Data.mdf'), (FILENAME = 'C:\MySQLServer\AdventureWorks_Log.ldf') FOR ATTACH;
Uw database bevat mogelijk extra gegevensbestanden (meestal .mdf of .ndf) en vereisen extra bestanden die moeten worden opgenomen in de
CREATE DATABASE ... FOR ATTACH
-instructie. Daarnaast moeten alle bestandsgroepen voor FILESTREAM-gegevens ook worden opgenomen in de instructie. Zie Een FILESTREAM-Enabled Database verplaatsenvoor meer informatie over het toevoegen van een database met FILESTREAM-functionaliteit.Notitie
U kunt ook de sp_attach_db of sp_attach_single_file_db opgeslagen procedure gebruiken. Deze procedures worden echter verwijderd in een toekomstige versie van Microsoft SQL Server. Vermijd het gebruik van deze functie in nieuwe ontwikkelwerkzaamheden en plan om toepassingen te wijzigen die momenteel gebruikmaken van deze functie. U wordt aangeraden in plaats daarvan
CREATE DATABASE ... FOR ATTACH
te gebruiken.
Na het upgraden van een SQL Server-database
Databasecompatibiliteitsniveau
Nadat u een database hebt bijgewerkt met behulp van de bijlagemethode, wordt de database beschikbaar. De database wordt automatisch bijgewerkt naar het interne versieniveau van het nieuwe exemplaar. Als de database volledige-tekstindexen bevat, importeert, herstelt of herbouwt het upgradeproces deze, afhankelijk van de instelling van de Full-Text upgradeoptie servereigenschap. Als de upgradeoptie is ingesteld op Import of Rebuild, zijn de volledige-tekstindexen niet beschikbaar tijdens de upgrade. Afhankelijk van de hoeveelheid gegevens die wordt geïndexeerd, kan het importeren enkele uren duren en kan het opnieuw opbouwen tot 10 keer langer duren. Houd er ook rekening mee dat wanneer de upgradeoptie is ingesteld op Importeren, als er geen volledige tekstcatalogus beschikbaar is, de bijbehorende indexen voor volledige tekst opnieuw worden opgebouwd.
Na de upgrade blijft het compatibiliteitsniveau van de database vóór de upgrade op het compatibiliteitsniveau, tenzij het vorige compatibiliteitsniveau niet wordt ondersteund voor de nieuwe versie. In dit geval is het bijgewerkte databasecompatibiliteitsniveau ingesteld op het laagste ondersteunde compatibiliteitsniveau. Als u bijvoorbeeld een database koppelt die compatibiliteitsniveau 90 was voordat u deze koppelt aan een exemplaar van SQL Server 2019 (15.x), is het compatibiliteitsniveau na de upgrade ingesteld op 100, het laagste ondersteunde compatibiliteitsniveau in SQL Server 2019 (15.x). Zie ALTER DATABASE Compatibility Level (Transact-SQL)voor meer informatie.
Gegevensopname wijzigen (CDC)
Als u een database koppelt vanuit een exemplaar van SQL Server 2014 (12.x) of eerder, waarvoor Change Data Capture (CDC) is ingeschakeld, moet u de volgende opdracht uitvoeren om de metagegevens van Change Data Capture (CDC) bij te werken:
USE <database name>
EXEC sys.sp_cdc_vupgrade
Zie Fout wanneer u een CDC-database koppelt aan een exemplaar van SQL Server 2016 of SQL Server 2017 op Windowsvoor meer informatie.
Zie ook
- Loskoppelen en koppelen van database (SQL Server)
- een database loskoppelen
- CREATE DATABASE (SQL Server Transact-SQL)
- Bestandssysteemmachtigingen configureren voor database-enginetoegang