Groupes de fichiers et fichiers de base de donnéesDatabase Files and Filegroups

Chaque base de données SQL ServerSQL Server possède au moins deux fichiers de système d'exploitation : un fichier de données et un fichier journal.At a minimum, every SQL ServerSQL Server database has two operating system files: a data file and a log file. Les fichiers de données contiennent des données et des objets tels que des tables, des index, des procédures stockées et des vues.Data files contain data and objects such as tables, indexes, stored procedures, and views. Les fichiers journaux contiennent les informations nécessaires pour récupérer toutes les transactions de la base de données.Log files contain the information that is required to recover all transactions in the database. Les fichiers de données peuvent être regroupés dans des groupes de fichiers à des fins d'allocation et d'administration.Data files can be grouped together in filegroups for allocation and administration purposes.

Fichiers de base de donnéesDatabase Files

SQL ServerSQL Server Les bases de données possèdent trois types de fichiers, comme indiqué dans le tableau suivant. databases have three types of files, as shown in the following table.

FichierFile DescriptionDescription
PrincipalPrimary Le fichier de données primaire contient les informations de démarrage de la base de données, et il pointe vers les autres fichiers de la base de données.The primary data file contains the startup information for the database and points to the other files in the database. Les objets et les données utilisateur peuvent être stockés dans ce fichier ou dans des fichiers de données secondaires.User data and objects can be stored in this file or in secondary data files. Chaque base de données comprend un fichier de données primaire.Every database has one primary data file. L'extension de fichier recommandée est .mdf.The recommended file name extension for primary data files is .mdf.
SecondarySecondary Les fichiers de données secondaires sont facultatifs, définis par l'utilisateur, et ils stockent les données utilisateur.Secondary data files are optional, are user-defined, and store user data. Les fichiers secondaires peuvent être utilisés pour répartir des données sur plusieurs disques en plaçant chaque fichier sur un lecteur de disque distinct.Secondary files can be used to spread data across multiple disks by putting each file on a different disk drive. En outre, si la taille d'une base de données excède la taille maximale autorisée pour un fichier Windows, vous pouvez avoir recours aux fichiers secondaires afin que la base de données puisse continuer à croître.Additionally, if a database exceeds the maximum size for a single Windows file, you can use secondary data files so the database can continue to grow.

L'extension de fichier recommandée est .ndf.The recommended file name extension for secondary data files is .ndf.
Journal des transactionsTransaction Log Les fichiers journaux des transactions contiennent les informations du journal qui sont utilisées pour la restauration de la base de données.The transaction log files hold the log information that is used to recover the database. Chaque base de données doit posséder au moins un fichier journal.There must be at least one log file for each database. L'extension de fichier recommandée pour les journaux des transactions est .ldf.The recommended file name extension for transaction logs is .ldf.

Par exemple, il est possible de créer une base de données simple (appelée Sales ) incluant un fichier primaire qui contient toutes les données et tous les objets, et un fichier journal qui contient les informations du journal des transactions.For example, a simple database named Sales can be created that includes one primary file that contains all data and objects and a log file that contains the transaction log information. Ou encore, il est possible de créer une base de données plus complexe (appelée Orders ) incluant un fichier primaire et cinq fichiers secondaires.Alternatively, a more complex database named Orders can be created that includes one primary file and five secondary files. Les données et les objets de la base de données sont répartis dans les six fichiers, et les quatre fichiers journaux contiennent les informations du journal des transactions.The data and objects within the database spread across all six files, and the four log files contain the transaction log information.

Par défaut, les données et les journaux des transactions sont placés sur le même lecteur et leur chemin est identique,By default, the data and transaction logs are put on the same drive and path. ceci afin de gérer les systèmes comportant un seul disque.This is done to handle single-disk systems. Cependant, cette configuration n'est pas forcément optimale pour les environnements de production.However, this may not be optimal for production environments. Nous vous recommandons de placer les fichiers de données et les fichiers journaux sur des disques distincts.We recommend that you put data and log files on separate disks.

Noms de fichiers logiques et physiquesLogical and Physical File Names

Les fichiers SQL Server portent deux noms :SQL Server files have two names:

logical_file_name : nom utilisé pour faire référence au fichier physique dans toutes les instructions Transact-SQL.logical_file_name: The logical_file_name is the name used to refer to the physical file in all Transact-SQL statements. Le nom de fichier logique doit respecter les règles régissant les identificateurs SQL Server et doit être unique parmi les noms de fichiers logiques de la base de données.The logical file name must comply with the rules for SQL Server identifiers and must be unique among logical file names in the database.

os_file_name : nom du fichier physique, comprenant le chemin du répertoire.os_file_name: The os_file_name is the name of the physical file including the directory path. Il doit respecter les règles en vigueur pour les noms de fichiers du système d'exploitation.It must follow the rules for the operating system file names.

Les données et les fichiers journaux SQL Server peuvent être placés dans les systèmes de fichiers FAT ou NTFS.SQL Server data and log files can be put on either FAT or NTFS file systems. Nous vous recommandons d'utiliser le système de fichiers NTFS pour des raisons de sécurité.We recommend using the NTFS file system because the security aspects of NTFS. Les fichiers journaux et les groupes de fichiers de données en lecture/écriture ne peuvent pas être implantés dans un système de fichiers compressé NTFS.Read/write data filegroups and log files cannot be placed on an NTFS compressed file system. Seuls les groupes de fichiers secondaires en lecture seule et les bases de données en lecture seule peuvent être implantés dans un système de fichiers compressé NTFS.Only read-only databases and read-only secondary filegroups can be put on an NTFS compressed file system.

Lorsque plusieurs instances de SQL Server sont exécutées sur un ordinateur unique, chaque instance reçoit son propre répertoire par défaut pour contenir les fichiers des bases de données créées dans l’instance.When multiple instances of SQL Server are run on a single computer, each instance receives a different default directory to hold the files for the databases created in the instance. Pour plus d’informations, consultez Emplacements des fichiers pour les instances par défaut et les instances nommées de SQL Server.For more information, see File Locations for Default and Named Instances of SQL Server.

Pages de fichiers de donnéesData File Pages

Les pages d’un fichier de données SQL Server sont numérotées de manière séquentielle, zéro (0) correspondant à la première page.Pages in a SQL Server data file are numbered sequentially, starting with zero (0) for the first page in the file. Chaque fichier d'une base de données possède un numéro d'identification de fichier unique.Each file in a database has a unique file ID number. L'ID de fichier et le numéro de page sont nécessaires pour identifier de manière unique une page d'une base de données.To uniquely identify a page in a database, both the file ID and the page number are required. L'exemple ci-dessous montre les numéros de page d'une base de données disposant d'un fichier de données primaire de 4 Mo et d'un fichier de données secondaire de 1 Mo.The following example shows the page numbers in a database that has a 4-MB primary data file and a 1-MB secondary data file.

data_file_pages

La première page de chaque fichier est une page d'en-tête qui contient des informations sur les attributs du fichier.The first page in each file is a file header page that contains information about the attributes of the file. D'autres pages situées au début du fichier contiennent également des informations sur le système, comme les tables d'allocation.Several of the other pages at the start of the file also contain system information, such as allocation maps. Une des pages système stockée à la fois dans le fichier de données primaire et dans le premier fichier journal est une page d'amorçage de base de données qui contient des informations sur les attributs de la base de données.One of the system pages stored in both the primary data file and the first log file is a database boot page that contains information about the attributes of the database. Pour plus d’informations sur les pages et les types de pages, consultez « Fonctionnement des pages et étendues ».For more information about pages and page types, see Understanding Pages and Extents.

Taille du fichierFile Size

Les fichiers SQL Server peuvent augmenter automatiquement leur volume et dépasser leur taille d’origine.SQL Server files can grow automatically from their originally specified size. Lorsque vous définissez un fichier, vous pouvez spécifier un incrément de croissance précis.When you define a file, you can specify a specific growth increment. Chaque fois que le fichier est rempli, sa taille augmente en fonction de l'incrément de croissance.Every time the file is filled, it increases its size by the growth increment. Si un groupe comporte plusieurs fichiers, ces derniers ne s'accroissent pas automatiquement jusqu'à ce que tous les fichiers soient remplis.If there are multiple files in a filegroup, they will not autogrow until all the files are full. La croissance se produit dans ce cas selon le principe de chacun son tour.Growth then occurs in a round-robin fashion.

Chaque fichier peut également avoir une taille maximale.Each file can also have a maximum size specified. En l'absence de spécification, le fichier continue à s'accroître jusqu'à ce que tout l'espace disque disponible soit utilisé.If a maximum size is not specified, the file can continue to grow until it has used all available space on the disk. Cette fonctionnalité s’avère particulièrement utile lorsque SQL Server sert de base de données incorporée dans une application pour laquelle l’utilisateur n’a pas accès à un administrateur système.This feature is especially useful when SQL Server is used as a database embedded in an application where the user does not have convenient access to a system administrator. L'utilisateur peut laisser les fichiers s'accroître automatiquement autant que nécessaire pour réduire la charge administrative liée à la gestion de l'espace disponible dans la base de données et à l'affectation manuelle d'espace supplémentaire.The user can let the files autogrow as required to reduce the administrative burden of monitoring free space in the database and manually allocating additional space.

Fichiers d'instantanés de base de donnéesDatabase Snapshot Files

Le format de fichier utilisé par un instantané de base de données pour stocker ses données de copie lors de l'écriture varie selon que l'instantané a été créé par un utilisateur ou utilisé en interne :The form of file that is used by a database snapshot to store its copy-on-write data depends on whether the snapshot is created by a user or used internally:

  • Un instantané de base de données créé par un utilisateur stocke ses données dans un ou plusieurs fichiers partiellement alloués.A database snapshot that is created by a user stores its data in one or more sparse files. La technologie des fichiers partiellement alloués constitue une fonctionnalité du système de fichiers NTFS.Sparse file technology is a feature of the NTFS file system. Au départ, un fichier partiellement alloué ne contient pas de données utilisateur et aucun espace disque pour les données utilisateur ne lui a été alloué.At first, a sparse file contains no user data, and disk space for user data has not been allocated to the sparse file. Pour des informations générales sur l’utilisation des fichiers partiellement alloués dans un instantané de base de données et sur le schéma de croissance des instantanés de bases de données, consultez Afficher la taille du fichier partiellement alloué d’un instantané de base de données (Transact-SQL).For general information about the use of sparse files in database snapshots and how database snapshots grow, see View the Size of the Sparse File of a Database Snapshot.
  • Les instantanés de base de données sont utilisés en interne par certaines commandes DBCC.Database snapshots are used internally by certain DBCC commands. Citons notamment les commandes DBCC CHECKDB, DBCC CHECKTABLE, DBCC CHECKALLOC et DBCC CHECKFILEGROUP.These commands include DBCC CHECKDB, DBCC CHECKTABLE, DBCC CHECKALLOC, and DBCC CHECKFILEGROUP. Un instantané interne de base de données utilise les flux de données de remplacement éparses des fichiers de la base de données d'origine.An internal database snapshot uses sparse alternate data streams of the original database files. Comme les fichiers partiellement alloués, les flux de données de remplacement sont une fonctionnalité du système de fichiers NTFS.Like sparse files, alternate data streams are a feature of the NTFS file system. L'utilisation de flux de données de remplacement éparses permet d'associer plusieurs affectations de données avec un seul fichier ou dossier sans influer sur les statistiques de taille de fichier ou de volume.The use of sparse alternate data streams allows for multiple data allocations to be associated with a single file or folder without affecting the file size or volume statistics.

Groupes de fichiersFilegroups

Chaque base de données possède un groupe de fichiers primaire.Every database has a primary filegroup. Celui-ci contient le fichier de données primaire et tous les fichiers secondaires qui n'ont pas été placés dans d'autres groupes de fichiers.This filegroup contains the primary data file and any secondary files that are not put into other filegroups. Il est possible de créer des groupes de fichiers définis par l'utilisateur pour regrouper des fichiers de données à des fins d'administration, d'allocation des données et de placement.User-defined filegroups can be created to group data files together for administrative, data allocation, and placement purposes.

Par exemple, trois fichiers (Data1.ndf, Data2.ndf, et Data3.ndf) peuvent être créés sur trois lecteurs, respectivement, puis affectés au groupe de fichiers fgroup1.For example, three files, Data1.ndf, Data2.ndf, and Data3.ndf, can be created on three disk drives, respectively, and assigned to the filegroup fgroup1. Une table peut alors être créée spécialement pour le groupe de fichiers fgroup1.A table can then be created specifically on the filegroup fgroup1. Les requêtes portant sur des données de la table seront réparties sur les trois disques, ce qui permettra d'améliorer les performances.Queries for data from the table will be spread across the three disks; this will improve performance. Une amélioration similaire des performances pourra être obtenue en créant un fichier unique sur un jeu de bandes RAID (Redundant Array of Independent Disks).The same performance improvement can be accomplished by using a single file created on a RAID (redundant array of independent disks) stripe set. Cependant, les fichiers et les groupes de fichiers vous permettent d'ajouter facilement des fichiers sur de nouveaux disques.However, files and filegroups let you easily add new files to new disks.

Tous les fichiers de données sont stockés dans les groupes de fichiers répertoriés dans le tableau suivant.All data files are stored in the filegroups listed in the following table.

Groupe de fichiersFilegroup DescriptionDescription
PrincipalPrimary Groupe de fichiers qui contient le fichier primaire.The filegroup that contains the primary file. Toutes les tables système sont allouées au groupe de fichiers primaire.All system tables are allocated to the primary filegroup.
Définie par l'utilisateurUser-defined Groupe de fichiers créé par l'utilisateur lorsque celui-ci crée la base de données ou lorsqu'il la modifie ultérieurement.Any filegroup that is specifically created by the user when the user first creates or later modifies the database.

Groupe de fichiers par défautDefault Filegroup

Lorsque des objets sont créés dans la base de données, sans spécifier le groupe de fichiers auquel ils appartiennent, ces objets sont affectés au groupe de fichiers par défaut.When objects are created in the database without specifying which filegroup they belong to, they are assigned to the default filegroup. À tout moment, un groupe de fichiers précis est désigné comme étant le groupe de fichiers par défaut.At any time, exactly one filegroup is designated as the default filegroup. Les fichiers du groupe de fichiers par défaut doivent être suffisamment volumineux pour contenir tous les nouveaux objets qui ne sont pas affectés à d'autres groupes de fichiers.The files in the default filegroup must be large enough to hold any new objects not allocated to other filegroups.

Le groupe de fichiers PRIMARY est le groupe de fichiers par défaut sauf s'il est modifié par l'instruction ALTER DATABASE.The PRIMARY filegroup is the default filegroup unless it is changed by using the ALTER DATABASE statement. Les objets et tables système restent affectés au groupe de fichiers PRIMARY, et non au nouveau groupe par défaut.Allocation for the system objects and tables remains within the PRIMARY filegroup, not the new default filegroup.

Exemple de fichier et de groupe de fichiersFile and Filegroup Example

L’exemple ci-dessous crée une base de données sur une instance de SQL Server.The following example creates a database on an instance of SQL Server. La base de données possède un fichier de données primaire, un groupe de fichiers défini par l'utilisateur et un fichier journal.The database has a primary data file, a user-defined filegroup, and a log file. Le fichier de données primaire fait partie du groupe de fichiers primaire et le groupe de fichiers défini par l'utilisateur possède deux fichiers de données secondaires.The primary data file is in the primary filegroup and the user-defined filegroup has two secondary data files. Une instruction ALTER DATABASE fait du groupe de fichiers défini par l'utilisateur le groupe par défaut.An ALTER DATABASE statement makes the user-defined filegroup the default. Une table est ensuite créée en spécifiant le groupe de fichiers défini par l'utilisateur.A table is then created specifying the user-defined filegroup. Cet exemple utilise le chemin générique c:\Program Files\Microsoft SQL Server\MSSQL.1 pour éviter de spécifier une version de SQL Server.(This example uses a generic path c:\Program Files\Microsoft SQL Server\MSSQL.1 to avoid specifying a version of SQL Server.)

USE master;
GO
-- Create the database with the default data
-- filegroup and a log file. Specify the
-- growth increment and the max size for the
-- primary data file.
CREATE DATABASE MyDB
ON PRIMARY
  ( NAME='MyDB_Primary',
    FILENAME=
       'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_Prm.mdf',
    SIZE=4MB,
    MAXSIZE=10MB,
    FILEGROWTH=1MB),
FILEGROUP MyDB_FG1
  ( NAME = 'MyDB_FG1_Dat1',
    FILENAME =
       'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_FG1_1.ndf',
    SIZE = 1MB,
    MAXSIZE=10MB,
    FILEGROWTH=1MB),
  ( NAME = 'MyDB_FG1_Dat2',
    FILENAME =
       'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_FG1_2.ndf',
    SIZE = 1MB,
    MAXSIZE=10MB,
    FILEGROWTH=1MB)
LOG ON
  ( NAME='MyDB_log',
    FILENAME =
       'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB.ldf',
    SIZE=1MB,
    MAXSIZE=10MB,
    FILEGROWTH=1MB);
GO
ALTER DATABASE MyDB 
  MODIFY FILEGROUP MyDB_FG1 DEFAULT;
GO

-- Create a table in the user-defined filegroup.
USE MyDB;
CREATE TABLE MyTable
  ( cola int PRIMARY KEY,
    colb char(8) )
ON MyDB_FG1;
GO

L'illustration ci-dessous récapitule les résultats de l'exemple précédent.The following illustration summarizes the results of the previous example.

filegroup_example

CREATE DATABASE (SQL Server Transact-SQL)CREATE DATABASE (SQL Server Transact-SQL)

Options de fichiers et de groupes de fichiers ALTER DATABASE (Transact-SQL)ALTER DATABASE File and Filegroup Options (Transact-SQL)

Attacher et détacher une base de données (SQL Server)Database Detach and Attach (SQL Server)