Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Gérer les fichiers MDF dans SQL Server 2019

Une base de données SQL Server contient des fichiers de données primaires, des fichiers de données secondaires (facultatifs) et des fichiers journaux de transactions.

Les fichiers de données primaires et secondaires contiennent des tables, des objets de base de données, un schéma et des données.

L'extension de fichier du fichier de base de données primaire est *.mdf , et l'extension de fichier du fichier de données secondaire est *.ndf .

Les fichiers journaux des transactions stockent toutes les modifications apportées par les transactions (insertion, mise à jour et suppression). Si SQL Server redémarre de manière inattendue ou tombe en panne, le moteur de base de données annule la transaction incomplète avant le point d'échec à l'aide du fichier journal des transactions.

L'extension du fichier journal des transactions est *.ldf . Vous pouvez consulter cet article pour comprendre l'architecture des fichiers journaux de transactions.

Dans cet article, je vais vous expliquer comment gérer les fichiers de base de données (fichiers MDF) dans SQL Server 2019.

L'article couvrira les points suivants :

  1. Afficher les détails du fichier de base de données à l'aide des DMV et de SQL Server Management Studio.
  2. Attachez et détachez les fichiers MDF des bases de données utilisateur.
  3. Attachez et détachez les fichiers MDF des bases de données système.

Afficher les fichiers de base de données à l'aide de vues de gestion dynamiques

Pour afficher les détails des fichiers mdf de la base de données, nous pouvons utiliser sys.database_files et sys.master_files . La requête doit être écrite comme suit :

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

Comme l'exemple fait référence aux détails MDF pour toutes les bases de données, nous avons besoin d'un code différent pour afficher les fichiers de base de données spécifiques. À cette fin, nous utilisons sys.database_files .

Le script suivant récupérera les détails de la SSISDB base de données :

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

Afficher les fichiers de base de données à l'aide de SQL Server Management Studio

La possibilité d'afficher la liste des fichiers MDF disponible dans SQL Server Management Studio (SSMS).

Dans SQL Server Management Studio, connectez-vous à l'instance SQL Server. Ensuite, développez Bases de données -> Faites un clic droit sur n'importe quelle base de données -> Cliquez sur Propriétés :

Dans les Propriétés de la base de données fenêtre, cliquez sur Fichiers . Il présentera la liste de la base de données MDF et LDF fichiers :

Détachez et joignez les fichiers MDF de la base de données utilisateur

Il existe deux manières de détacher et d'attacher des fichiers MDF de la base de données des utilisateurs :

  1. Utilisation de SQL Server Management Studio.
  2. Utilisation du script T-SQL.

Attacher et détacher une base de données à l'aide de SSMS

Joindre la base de données

Lancer SSMS -> Se connecter à l'instance SQL Server -> Faites un clic droit sur Base de données -> Cliquez sur Joindre .

Cela ouvrira le Attach Databases la fenêtre. Cliquez sur Ajouter dans cette fenêtre :

Dans le nouveau Rechercher les fichiers de base de données fenêtre, parcourez le système de fichiers pour localiser le MDF dossier. Double-cliquez dessus.

Les fichiers de données et les fichiers journaux associés sont renseignés dans les fichiers associés vue grille dans Attacher des bases de données la fenêtre. Cliquez sur OK pour joindre la base de données.

Une fois la base de données attachée, vous pouvez la voir dans SQL Server Management Studio :

Détacher la base de données

Lancez SQL Server Management Studio et connectez-vous à l'instance SQL Server . Développez la liste Bases de données.

Faites un clic droit sur la base de données nécessaire -> Tâches -> Cliquez sur Détacher .

Si vous souhaitez déconnecter de force tous les utilisateurs et processus connectés à la base de données, vous le faites dans Détacher la base de données fenêtre.

Cochez la case Abandonner les connexions option dans les Bases de données à détacher section et cliquez sur OK .

Attacher et détacher la base de données à l'aide de T-SQL

Nous pouvons utiliser CREATE DATABASE WITH ATTACH requête avec la syntaxe suivante :

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

Pour attacher la base de données, exécutez la requête T-SQL suivante :

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

De plus, nous pouvons exécuter le sp_detach_db procédure stockée pour détacher la base de données.

Si vous souhaitez déconnecter les utilisateurs de force, vous pouvez utiliser le ALTER DATABASE SET SINGLE_USER commande dans le script suivant :

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

Gérer les fichiers MDF de la base de données système

Supposons que nous voulions déplacer les fichiers MDF des bases de données système (maître, modèle, msdb et Tempdb) vers un autre emplacement. Examinons le processus.

Déplacer la base de données principale

Pour déplacer le maître base de données, ouvrez le gestionnaire de configuration SQL Server -> Cliquez sur SQL Server Services -> Faites un clic droit sur le service SQL Server de l'instance SQL Server souhaitée (MSSQLSERVER ) -> Cliquez sur Propriétés :

Pour changer le master.mdf emplacement du fichier, cliquez sur le chemin du fichier de données du fichier maître.

Le master.mdf la valeur du chemin est suivie de -d et mastlog.ldf la valeur du chemin est suivie de -l

Remplacez ces valeurs par les suivantes :

Fichier de données :-dD:\MS_SQL\Data\master.mdf

Fichier journal :-lD:\MS_SQL\Log\mastlog.ldf

Une fois les valeurs modifiées, cliquez sur Mettre à jour comme indiqué dans l'illustration ci-dessous :

Cliquez sur OK pour enregistrer les valeurs.

Arrêtez ensuite les services SQL Server et copiez les fichiers de base de données vers un nouvel emplacement. Une fois terminé, redémarrez le service SQL.

Exécutez la requête ci-dessous pour vérifier l'emplacement du fichier.

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

Déplacer la base de données de modèles

Pour déplacer la base de données Model vers un autre lecteur, nous devons d'abord exécuter une commande ALTER DATABASE MODIFY FILE. Il sert à changer l'emplacement dans le catalogue système de SQL Server.

Exécutez la commande ci-dessous :

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

Ensuite, arrêtez les services SQL Server en exécutant la commande ci-dessous dans PowerShell :

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

Copiez le model.mdf et modellog.ldf fichiers vers un nouvel emplacement et démarrez les services.

Exécutez la requête ci-dessous pour vérifier l'emplacement du fichier :

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

Déplacer la base de données MSDB

Pour déplacer la MSDB base de données vers un autre lecteur, exécutez d'abord une commande ALTER DATABASE MODIFY FILE pour modifier l'emplacement dans le catalogue système SQL Server :

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

Arrêtez les services SQL Server en exécutant la commande suivante dans PowerShell :

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

Copiez le fichier MSDBData.mdf et MSDBLog.ldf fichiers vers le nouvel emplacement et démarrez les services.

Exécutez la requête ci-dessous pour vérifier l'emplacement du fichier :

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

Déplacer la base de données TempDB

Pour déplacer le TempDB base de données sur un autre lecteur, exécutez d'abord une commande ALTER DATABASE MODIFY FILE pour modifier l'emplacement du fichier dans le catalogue système SQL Server :

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

Redémarrez les services SQL Server en exécutant la commande suivante dans PowerShell :

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

Exécutez la requête ci-dessous pour vérifier l'emplacement du fichier :

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

Vous pouvez également utiliser l'outil Transaction Log de la société Devart - il inclut également la possibilité de visualiser les données des fichiers MDF et LDF.

Résumé

Cet article a expliqué les fichiers de base de données de la base de données SQL Server et les façons d'afficher les emplacements des fichiers MDF. Il décrit également les processus d'attachement et de détachement des bases de données et illustre le processus étape par étape de déplacement des fichiers de données des bases de données système.