sql >> Database >  >> RDS >> Sqlserver

Beheer MDF-bestanden in SQL Server 2019

Een SQL Server-database bevat primaire gegevensbestanden, secundaire gegevensbestanden (optioneel) en transactielogbestanden.

De primaire en secundaire gegevensbestanden bevatten tabellen, database-objecten, schema's en gegevens.

De bestandsextensie van het primaire databasebestand is *.mdf , en de bestandsextensie van het secundaire gegevensbestand is *.ndf .

De transactielogbestanden slaan alle wijzigingen op die door de transacties zijn aangebracht (invoegen, bijwerken en verwijderen). Als de SQL Server onverwacht opnieuw opstart of crasht, rolt de database-engine de onvolledige transactie terug vóór het punt van mislukking met behulp van het transactielogboekbestand.

De extensie van het transactielogbestand is *.ldf . Misschien wilt u dit artikel raadplegen om de architectuur van transactielogboekbestanden te begrijpen.

In dit artikel ga ik uitleggen hoe we de databasebestanden (MDF-bestanden) in SQL Server 2019 kunnen beheren.

Het artikel behandelt de volgende punten:

  1. Bekijk de details van het databasebestand met behulp van DMV's en SQL Server Management Studio.
  2. Bevestig en ontkoppel de MDF-bestanden van de gebruikersdatabases.
  3. Bevestig en ontkoppel de systeemdatabases MDF-bestanden.

Bekijk databasebestanden met dynamische beheerweergaven

Om de details van de database-mdf-bestanden te bekijken, kunnen we sys.database_files gebruiken en sys.master_files . De vraag moet als volgt worden geschreven:

use master
go
select DB_NAME(database_id),
name as [logical Name],
physical_name as [File Location],
state_desc as [State of the file],
Size [Size of data File],
case when convert(varchar,max_size) =-1 then 'Unlimited' else convert(varchar,max_size) end as [Maximum Size]
from sys.master_files where type_desc='ROWS'
and database_id >5

Omdat het voorbeeld verwijst naar de MDF-details voor alle databases, hebben we een andere code nodig om de specifieke databasebestanden te bekijken. Voor dat doel gebruiken we sys.database_files .

Het volgende script haalt de details op van de SSISDB databank:

use SSISDB
Go
select 
name as [logical Name],
physical_name as [File Location],
state_desc as [State of the file],
Size [Size of data File],
case when convert(varchar,max_size) =-1 then 'Unlimited' else convert(varchar,max_size) end as [Maximum Size]
from sys.database_files

Bekijk de databasebestanden met SQL Server Management Studio

De optie om de lijst met MDF-bestanden te bekijken die beschikbaar is in SQL Server Management Studio (SSMS).

In SQL Server Management Studio, verbinding maken met de SQL Server-instantie. Vouw vervolgens Databases . uit -> Klik met de rechtermuisknop op een database -> Klik op Eigenschappen :

In deDatabase-eigenschappen venster, klik op Bestanden . Het toont de lijst van de database MDF en LDF bestanden:

Maak de MDF-bestanden van de gebruikersdatabase los en voeg ze toe

Er zijn twee manieren om MDF-bestanden van de gebruikersdatabase los te koppelen en toe te voegen:

  1. SQL Server Management Studio gebruiken.
  2. T-SQL-script gebruiken.

De database koppelen en loskoppelen met SSMS

De database bijvoegen

Start SSMS -> Maak verbinding met de SQL Server-instantie -> Klik met de rechtermuisknop op Database -> Klik op Bijvoegen .

Het opent de Attach Databases raam. Klik op Toevoegen in dat venster:

In de nieuwe Lokaliseer databasebestanden blader je door het bestandssysteem om de MDF . te vinden het dossier. Dubbelklik erop.

De bijbehorende gegevensbestanden en logbestanden worden ingevuld in de geassocieerde bestanden rasterweergave in de databases bijvoegen raam. Klik op OK om de database toe te voegen.

Zodra de database is gekoppeld, kunt u deze zien in SQL Server Management Studio:

De database loskoppelen

Start SQL Server-beheerstudio en maak verbinding met de SQL Server-instantie . Vouw de lijst Databases uit.

Klik met de rechtermuisknop op de benodigde database -> Taken -> Klik op Ontkoppelen .

Als u alle gebruikers en processen die met de database zijn verbonden met geweld wilt loskoppelen, doet u dat in de Detach Database venster.

Vink de Drop Connections . aan optie in de Databases om los te koppelen sectie en klik op OK .

De database koppelen en loskoppelen met T-SQL

We kunnen DATABASE MAKEN MET ATTACH gebruiken query met de volgende syntaxis:

USE [master]
GO
CREATE DATABASE [DatabaseName] ON 
( FILENAME = 'Path of Primary Database file (MDF)' ),
( FILENAME = N'Path of Secondary Database file (NDF)' ),
...
...
( FILENAME = N'Path of Transactional Log file (LDF)' )
 FOR ATTACH
GO

Voer de volgende T-SQL-query uit om de database te koppelen:

USE [master]
GO
CREATE DATABASE [WideWorldImporters] ON 
( FILENAME = N'C:\MSSQL\SQLData\WideWorldImporters.mdf' ),
( FILENAME = N'C:\MSSQL\SQLLog\WideWorldImporters.ldf' ),
( FILENAME = N'C:\MSSQL\SQLData\WideWorldImporters_UserData.ndf' )
 FOR ATTACH
GO

We kunnen ook de sp_detach_db . uitvoeren opgeslagen procedure om de database los te koppelen.

Als u gebruikers geforceerd wilt loskoppelen, kunt u de ALTER DATABASE SET SINGLE_USER gebruiken commando in het volgende script:

Use [master]
GO
ALTER DATABASE [WideWorldImporters] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
EXEC sp_detach_db [WideWorldImporters]
GO

Beheer de MDF-bestanden van de systeemdatabase

Stel dat we de MDF-bestanden van de systeemdatabases (master, model, msdb en Tempdb) naar een andere locatie willen verplaatsen. Laten we het proces eens bekijken.

Verplaats de hoofddatabase

De master verplaatsen database, open SQL Server-configuratiebeheer -> Klik op SQL Server Services -> Klik met de rechtermuisknop op de SQL Server-service van de gewenste SQL Server-instantie (MSSQLSERVER ) -> Klik op Eigenschappen :

Om de master.mdf te wijzigen bestandslocatie, klik op het gegevensbestandspad van het hoofdbestand.

De master.mdf padwaarde wordt gevolgd door -d ,en mastlog.ldf padwaarde wordt gevolgd door -l

Vervang deze waarden door de volgende:

Gegevensbestand:-dD:\MS_SQL\Data\master.mdf

Logbestand:-lD:\MS_SQL\Log\mastlog.ldf

Zodra de waarden zijn gewijzigd, klikt u op Bijwerken zoals weergegeven in de onderstaande afbeelding:

Klik op OK om de waarden op te slaan.

Stop vervolgens de SQL Server-services en kopieer de databasebestanden naar een nieuwe locatie. Start na voltooiing de SQL-service opnieuw.

Voer de onderstaande query uit om de bestandslocatie te verifiëren.

select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files 
where DB_NAME(database_id)='master'

Verplaats de modeldatabase

Om de modeldatabase naar een andere schijf te verplaatsen, moeten we eerst een ALTER DATABASE MODIFY FILE-opdracht uitvoeren. Het dient om de locatie in de SQL Server-systeemcatalogus te wijzigen.

Voer onderstaande opdracht uit:

ALTER DATABASE model
MODIFY FILE (NAME = modeldev, FILENAME = 'D:\MS_SQL\Data\model.mdf');
GO
ALTER DATABASE model
MODIFY FILE (NAME = modellog, FILENAME = 'D:\MS_SQL\Log\modellog.ldf');
GO

Stop vervolgens SQL Server-services door de onderstaande opdracht in PowerShell uit te voeren:

/*Stop SQL Services*/
PS C:\> Stop-Service MSSQLSERVER -Force
/*Start SQL Services*/
PS C:\> Start-Service MSSQLSERVER 

Kopieer de model.mdf en modellog.ldf bestanden naar een nieuwe locatie en start de services.

Voer de onderstaande query uit om de bestandslocatie te verifiëren:

select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files 
where DB_NAME(database_id)='model'

Verplaats de MSDB-database

De MSDB verplaatsen database naar een ander station, voert u eerst de opdracht ALTER DATABASE MODIFY FILE uit om de locatie in de SQL Server-systeemcatalogus te wijzigen:

ALTER DATABASE msdb
MODIFY FILE (NAME = MSDBData, FILENAME = 'D:\MS_SQL\Data\MSDBData.mdf');
GO
ALTER DATABASE msdb
MODIFY FILE (NAME = MSDBLog, FILENAME = 'D:\MS_SQL\Log\MSDBLog.ldf');
GO

Stop de SQL Server-services door de volgende opdracht in PowerShell uit te voeren:

/*Stop SQL Services*/
PS C:\> Stop-Service MSSQLSERVER -Force
/*Start SQL Services*/
PS C:\> Start-Service MSSQLSERVER 

Kopieer de MSDBData.mdf en MSDBLog.ldf bestanden naar de nieuwe locatie en start de services.

Voer de onderstaande query uit om de bestandslocatie te verifiëren:

select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files 
where DB_NAME(database_id)='msdb'

Verplaats de TempDB-database

De TempDB . verplaatsen database naar een andere schijf, voer dan eerst de opdracht ALTER DATABASE MODIFY FILE uit om de bestandslocatie in de SQL Server-systeemcatalogus te wijzigen:

ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'D:\MS_SQL\Data\tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp2, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_2.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp3, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_3.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp4, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_4.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp5, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_5.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp6, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_6.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp7, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_7.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp8, FILENAME = 'D:\MS_SQL\Data\tempdb_mssql_8.ndf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'D:\MS_SQL\Log\templog.ldf');
GO

Start de SQL Server-services opnieuw door de volgende opdracht in PowerShell uit te voeren:

/*Restart SQL Services*/
PS C:\> Restart-Service MSSQLSERVER -Force

Voer de onderstaande query uit om de bestandslocatie te verifiëren:

select DB_NAME(database_id)[Database Name], physical_name [File Location] from sys.master_files 
where DB_NAME(database_id)='tempdb'

U kunt ook de tool Transactielogboek van het bedrijf Devart gebruiken - deze bevat ook de mogelijkheid om de MDF- en LDF-bestandsgegevens te bekijken.

Samenvatting

Dit artikel legde de databasebestanden van de SQL Server-database uit en de manieren om de MDF-bestandslocaties te bekijken. Het beschreef ook de processen voor het koppelen en loskoppelen van de databases en illustreerde het stapsgewijze proces van het verplaatsen van de gegevensbestanden van de systeemdatabases.


  1. Oracle Bulk Collect Voorbeeld met Cursor Rowtype Type Object

  2. Exporteer specifieke rijen uit een PostgreSQL-tabel als INSERT SQL-script

  3. Hoe RPC Out in te schakelen met T-SQL

  4. Historische records opslaan in een geschiedenistabel in SQL Server