Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwalten Sie MDF-Dateien in SQL Server 2019

Eine SQL Server-Datenbank enthält primäre Datendateien, sekundäre Datendateien (optional) und Transaktionsprotokolldateien.

Die primären und sekundären Datendateien enthalten Tabellen, Datenbankobjekte, Schemata und Daten.

Die Dateierweiterung der primären Datenbankdatei ist *.mdf , und die Dateierweiterung der sekundären Datendatei ist *.ndf .

Die Transaktionsprotokolldateien speichern alle von den Transaktionen vorgenommenen Änderungen (Einfügen, Aktualisieren und Löschen). Wenn der SQL Server unerwartet neu gestartet wird oder abstürzt, setzt die Datenbank-Engine die unvollständige Transaktion mithilfe der Transaktionsprotokolldatei vor dem Fehlerpunkt zurück.

Die Erweiterung der Transaktionsprotokolldatei ist *.ldf . Vielleicht möchten Sie sich auf diesen Artikel beziehen, um die Architektur der Transaktionsprotokolldateien zu verstehen.

In diesem Artikel werde ich erklären, wie wir die Datenbankdateien (MDF-Dateien) in SQL Server 2019 verwalten können.

Der Artikel behandelt die folgenden Punkte:

  1. Sehen Sie sich die Details der Datenbankdatei mit DMVs und SQL Server Management Studio an.
  2. Anhängen und Trennen der MDF-Dateien der Benutzerdatenbanken.
  3. Anhängen und Trennen der MDF-Dateien der Systemdatenbanken.

Datenbankdateien mit dynamischen Verwaltungsansichten anzeigen

Um die Details der Datenbank-mdf-Dateien anzuzeigen, können wir sys.database_files verwenden und sys.master_files . Die Abfrage sollte wie folgt geschrieben werden:

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

Da sich das Beispiel auf die MDF-Details für alle Datenbanken bezieht, benötigen wir einen anderen Code, um die spezifischen Datenbankdateien anzuzeigen. Zu diesem Zweck verwenden wir sys.database_files .

Das folgende Skript ruft die Details der SSIDB ab Datenbank:

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

Sehen Sie sich die Datenbankdateien mit SQL Server Management Studio an

Die Option zum Anzeigen der MDF-Dateiliste, die in SQL Server Management Studio (SSMS) verfügbar ist.

In SQL Server Management Studio Verbindung mit der SQL Server-Instanz herstellen. Erweitern Sie dann Datenbanken -> Klicken Sie mit der rechten Maustaste auf eine beliebige Datenbank -> Klicken Sie auf Eigenschaften :

In den Datenbankeigenschaften klicken Sie auf Dateien . Es wird die Liste der Datenbank MDF angezeigt und LDF Dateien:

Trennen und hängen Sie die MDF-Dateien der Benutzerdatenbank an

Es gibt zwei Möglichkeiten, MDF-Dateien der Benutzerdatenbank zu trennen und anzuhängen:

  1. Mit SQL Server Management Studio.
  2. T-SQL-Skript verwenden.

Datenbank mit SSMS anhängen und trennen

Datenbank anhängen

Starten Sie SSMS -> Verbinden Sie sich mit der SQL Server-Instanz -> Klicken Sie mit der rechten Maustaste auf Datenbank -> Klicken Sie auf Anhängen .

Es öffnet die Datenbanken anhängen Fenster. Klicken Sie auf Hinzufügen in diesem Fenster:

Im neuen Datenbankdateien suchen Durchsuchen Sie das Dateisystem nach MDF Datei. Doppelklicken Sie darauf.

Die zugehörigen Datendateien und Protokolldateien werden in den zugehörigen Dateien eingetragen Rasteransicht in Datenbanken anhängen Fenster. Klicken Sie auf OK um die Datenbank anzuhängen.

Sobald die Datenbank angefügt ist, können Sie sie in SQL Server Management Studio sehen:

Trennen Sie die Datenbank

Starten Sie SQL Server Management Studio und stellen Sie eine Verbindung zur SQL Server-Instanz her . Erweitern Sie die Datenbankliste.

Klicken Sie mit der rechten Maustaste auf die erforderliche Datenbank -> Aufgaben -> Klicken Sie auf Trennen .

Wenn Sie alle Benutzer und Prozesse, die mit der Datenbank verbunden sind, zwangsweise trennen möchten, tun Sie dies in Datenbank trennen Fenster.

Aktivieren Sie Verbindungen trennen Option in den Zu trennenden Datenbanken Abschnitt und klicken Sie auf OK .

Anhängen und Trennen der Datenbank mit T-SQL

Wir können CREATE DATABASE WITH ATTACH verwenden Abfrage mit der folgenden Syntax:

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

Führen Sie zum Anhängen der Datenbank die folgende T-SQL-Abfrage aus:

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

Außerdem können wir sp_detach_db ausführen gespeicherte Prozedur zum Trennen der Datenbank.

Wenn Sie Benutzer zwangsweise trennen möchten, können Sie ALTER DATABASE SET SINGLE_USER verwenden Befehl im folgenden Skript:

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

MDF-Dateien der Systemdatenbank verwalten

Angenommen, wir möchten die MDF-Dateien der Systemdatenbanken (master, model, msdb und Tempdb) an einen anderen Speicherort verschieben. Lassen Sie uns den Prozess untersuchen.

Master-Datenbank verschieben

Um den Master zu bewegen Datenbank, öffnen Sie den SQL Server Configuration Manager -> Klicken Sie auf SQL Server Services -> Rechtsklick auf den SQL Server Dienst der gewünschten SQL Server Instanz (MSSQLSERVER ) -> Klicken Sie auf Eigenschaften :

Zum Ändern der master.mdf Dateispeicherort, klicken Sie auf den Datendateipfad der Masterdatei.

Die master.mdf Auf den Pfadwert folgt -d und mastlog.ldf Auf den Pfadwert folgt -l

Ersetzen Sie diese Werte durch Folgendes:

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

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

Sobald die Werte geändert wurden, klicken Sie auf Aktualisieren wie in der Abbildung unten gezeigt:

Klicken Sie auf OK um die Werte zu speichern.

Beenden Sie dann die SQL Server-Dienste und kopieren Sie die Datenbankdateien an einen neuen Speicherort. Starten Sie nach Abschluss den SQL-Dienst erneut.

Führen Sie die folgende Abfrage aus, um den Speicherort der Datei zu überprüfen.

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

Modelldatenbank verschieben

Um die Model-Datenbank auf ein anderes Laufwerk zu verschieben, müssen wir zuerst einen ALTER DATABASE MODIFY FILE-Befehl ausführen. Es dient dazu, den Speicherort im SQL-Server-Systemkatalog zu ändern.

Führen Sie den folgenden Befehl aus:

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

Beenden Sie dann die SQL Server-Dienste, indem Sie den folgenden Befehl in PowerShell ausführen:

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

Kopieren Sie die Datei model.mdf und modelllog.ldf Dateien an einen neuen Ort und starten Sie die Dienste.

Führen Sie die folgende Abfrage aus, um den Speicherort der Datei zu überprüfen:

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

Verschieben Sie die MSDB-Datenbank

Zum Verschieben der MSDB Datenbank auf ein anderes Laufwerk, führen Sie zuerst einen ALTER DATABASE MODIFY FILE-Befehl aus, um den Speicherort im SQL Server-Systemkatalog zu ändern:

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

Stoppen Sie die SQL Server-Dienste, indem Sie den folgenden Befehl in PowerShell ausführen:

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

Kopieren Sie die Datei MSDBData.mdf und MSDBLog.ldf Dateien an den neuen Speicherort und starten Sie die Dienste.

Führen Sie die folgende Abfrage aus, um den Speicherort der Datei zu überprüfen:

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

TempDB-Datenbank verschieben

Zum Verschieben der TempDB Datenbank auf ein anderes Laufwerk, führen Sie zuerst einen ALTER DATABASE MODIFY FILE-Befehl aus, um den Dateispeicherort im SQL Server-Systemkatalog zu ändern:

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

Starten Sie die SQL Server-Dienste neu, indem Sie den folgenden Befehl in PowerShell ausführen:

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

Führen Sie die folgende Abfrage aus, um den Speicherort der Datei zu überprüfen:

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

Sie können auch das Transaktionsprotokoll-Tool der Firma Devart verwenden – es enthält die Option, auch die Daten der MDF- und LDF-Dateien anzuzeigen.

Zusammenfassung

In diesem Artikel wurden die Datenbankdateien der SQL Server-Datenbank und die Möglichkeiten zum Anzeigen der Speicherorte der MDF-Dateien erläutert. Es beschrieb auch die Prozesse zum Anhängen und Trennen der Datenbanken und veranschaulichte den schrittweisen Prozess zum Verschieben der Datendateien der Systemdatenbanken.