Filegroup e file di databaseDatabase Files and Filegroups

Ogni database di SQL ServerSQL Server contiene almeno due file del sistema operativo: un file di dati e un file di log.At a minimum, every SQL ServerSQL Server database has two operating system files: a data file and a log file. I file di dati contengono dati e oggetti come tabelle, indici, stored procedure e viste.Data files contain data and objects such as tables, indexes, stored procedures, and views. I file di log contengono le informazioni necessarie per il recupero di tutte le transazioni del database.Log files contain the information that is required to recover all transactions in the database. I file di dati possono essere raggruppati in filegroup ai fini dell'allocazione e dell'amministrazione.Data files can be grouped together in filegroups for allocation and administration purposes.

File di databaseDatabase Files

SQL ServerSQL Server i database contengono tre tipi di file, come illustrato nella tabella seguente. databases have three types of files, as shown in the following table.

FileFile DescrizioneDescription
PrimariaPrimary Il file di dati primario contiene le informazioni di avvio del database e punta agli altri file del database.The primary data file contains the startup information for the database and points to the other files in the database. I dati e gli oggetti degli utenti possono essere archiviati in questo file o nei file di dati secondari.User data and objects can be stored in this file or in secondary data files. In ogni database è disponibile un unico file di dati primario.Every database has one primary data file. L'estensione consigliata per i file di dati primari è mdf.The recommended file name extension for primary data files is .mdf.
SecondariSecondary I file di dati secondari sono facoltativi e definiti dall'utente e vengono utilizzati per archiviare i dati dell'utente.Secondary data files are optional, are user-defined, and store user data. Possono essere utilizzati per suddividere i dati su più dischi, memorizzandoli in unità disco distinte.Secondary files can be used to spread data across multiple disks by putting each file on a different disk drive. Se un database supera le dimensioni massime consentite per un singolo file di Windows, è inoltre possibile utilizzare i file di dati secondari per consentire l'aumento di dimensioni del database.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'estensione consigliata per i file di dati secondari è ndf.The recommended file name extension for secondary data files is .ndf.
Log delle transazioniTransaction Log I file di log delle transazioni contengono le informazioni necessarie per il recupero del database.The transaction log files hold the log information that is used to recover the database. È necessario che sia disponibile almeno un file di log per ogni database.There must be at least one log file for each database. L'estensione consigliata per i file di log è ldf.The recommended file name extension for transaction logs is .ldf.

Ad esempio, è possibile creare un database semplice, denominato Sales , con un file primario che include tutti i dati e gli oggetti e un file di log che include le informazioni del log delle transazioni.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. In alternativa, è possibile creare un database più complesso, denominato Orders , con un file primario e cinque file secondari.Alternatively, a more complex database named Orders can be created that includes one primary file and five secondary files. I dati e gli oggetti all'interno del database vengono suddivisi nei sei file e i quattro file di log includono le informazioni del log delle transazioni.The data and objects within the database spread across all six files, and the four log files contain the transaction log information.

Per impostazione predefinita, i dati e i log delle transazioni vengono archiviati nella stessa unità e nello stesso percorso.By default, the data and transaction logs are put on the same drive and path. Ciò consente la gestione nei sistemi a disco singolo,This is done to handle single-disk systems. ma può non essere la soluzione ottimale per gli ambienti di produzione.However, this may not be optimal for production environments. È consigliabile archiviare i dati e i file di log in dischi separati.We recommend that you put data and log files on separate disks.

Nomi di file logici e fisiciLogical and Physical File Names

I file di SQL Server hanno due nomi:SQL Server files have two names:

logical_file_name: logical_file_name è il nome del file fisico in tutte le istruzioni Transact-SQL.logical_file_name: The logical_file_name is the name used to refer to the physical file in all Transact-SQL statements. Il nome di file logico deve essere conforme alle regole per gli identificatori di SQL Server e deve essere univoco tra i nomi di file logici nel database.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: os_file_name è il nome del file fisico che include il percorso di directory.os_file_name: The os_file_name is the name of the physical file including the directory path. Tale nome deve essere conforme alle regole relative ai nomi di file del sistema operativo.It must follow the rules for the operating system file names.

I dati e i file di log di SQL Server possono essere memorizzati sia in file system FAT che NTFS.SQL Server data and log files can be put on either FAT or NTFS file systems. È consigliabile utilizzare il file system NTFS per i vantaggi di sicurezza intrinseci di NTFS.We recommend using the NTFS file system because the security aspects of NTFS. I file di log e i filegroup di dati di lettura/scrittura possono essere memorizzati in un file system compresso NTFS.Read/write data filegroups and log files cannot be placed on an NTFS compressed file system. Solo i database e i filegroup secondari di sola lettura possono essere memorizzati in un file system compresso NTFS.Only read-only databases and read-only secondary filegroups can be put on an NTFS compressed file system.

Se nello stesso computer sono in esecuzione più istanze di SQL Server, a ogni istanza viene assegnata una directory predefinita diversa in cui verranno archiviati i file dei database creati nell'istanza.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. Per altre informazioni, vedere Percorsi dei file per le istanze predefinite e denominate di SQL Server.For more information, see File Locations for Default and Named Instances of SQL Server.

Pagine di file di datiData File Pages

Le pagine dei file di dati di SQL Server sono numerate modo sequenziale a partire dalla prima, che corrisponde al numero zero (0).Pages in a SQL Server data file are numbered sequentially, starting with zero (0) for the first page in the file. A ogni file di un database è associato un numero di ID file univoco.Each file in a database has a unique file ID number. Per identificare in modo univoco una pagina in un database, sono necessari sia ID file che numero di pagina.To uniquely identify a page in a database, both the file ID and the page number are required. Nell'esempio seguente vengono illustrati i numeri di pagina di un database che include un file di dati primario di 4 MB e un file di dati secondario di 1 MB.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 prima pagina di ogni file è la pagina dell'intestazione, che include informazioni sugli attributi del file.The first page in each file is a file header page that contains information about the attributes of the file. Anche molte altre pagine all'inizio del file contengono informazioni di sistema, ad esempio mappe delle allocazioni.Several of the other pages at the start of the file also contain system information, such as allocation maps. Una delle pagine di sistema archiviate sia nel file di dati primario che nel primo file di log è una pagina di avvio del database contenente informazioni sugli attributi del database.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. Per altre informazioni sulle pagine e sui tipi di pagina, vedere Informazioni su pagine ed extent.For more information about pages and page types, see Understanding Pages and Extents.

Dimensioni fileFile Size

Le dimensioni dei file di SQL Server possono aumentare automaticamente rispetto ai valori originari.SQL Server files can grow automatically from their originally specified size. Quando si definisce un file, è possibile specificare un incremento di crescita specifico.When you define a file, you can specify a specific growth increment. Quando lo spazio assegnato al file si esaurisce, le sue dimensioni aumentano in base all'incremento specificato.Every time the file is filled, it increases its size by the growth increment. Se un filegroup include più file, le loro dimensioni non aumentano automaticamente finché lo spazio di tutti i file non si esaurisce.If there are multiple files in a filegroup, they will not autogrow until all the files are full. L'aumento delle dimensioni avviene quindi in base a un meccanismo round robin.Growth then occurs in a round-robin fashion.

È inoltre possibile specificare le dimensioni massime di ogni file.Each file can also have a maximum size specified. Se non vengono specificate le dimensioni massime, il file può continuare ad aumentare fino a occupare tutto lo spazio disponibile nel disco.If a maximum size is not specified, the file can continue to grow until it has used all available space on the disk. Questa caratteristica è particolarmente utile quando SQL Server viene usato come database incorporato in un'applicazione per cui l'utente non può rivolgersi direttamente all'amministratore di sistema.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'utente può lasciare aumentare i file in base alle necessità per alleggerire il carico amministrativo derivante dal monitoraggio dello spazio libero nel database e dall'allocazione manuale di spazio aggiuntivo.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.

File di snapshot di databaseDatabase Snapshot Files

La forma del file utilizzato da uno snapshot del database per archiviare i propri dati copy-on-write cambia a seconda che lo snapshot venga creato da un utente o utilizzato internamente: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:

  • Quando lo snapshot del database viene creato da un utente, i dati vengono archiviati in uno o più file sparse.A database snapshot that is created by a user stores its data in one or more sparse files. La tecnologia file sparse è una caratteristica del file system NTFS.Sparse file technology is a feature of the NTFS file system. Inizialmente un file sparse non contiene alcun dato utente e lo spazio su disco per i dati utente non viene allocato per tale file.At first, a sparse file contains no user data, and disk space for user data has not been allocated to the sparse file. Per informazioni generali sull'uso di file sparse negli snapshot del database e sul modo in cui aumentano le dimensioni degli snapshot del database, vedere Visualizzare le dimensioni del file sparse di uno snapshot del database.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.
  • Gli snapshot del database vengono utilizzati internamente da alcuni comandi DBCC,Database snapshots are used internally by certain DBCC commands. tra cui DBCC CHECKDB, DBCC CHECKTABLE, DBCC CHECKALLOC e DBCC CHECKFILEGROUP.These commands include DBCC CHECKDB, DBCC CHECKTABLE, DBCC CHECKALLOC, and DBCC CHECKFILEGROUP. Uno snapshot interno del database utilizza flussi di dati alternativi sparse dei file originali del database.An internal database snapshot uses sparse alternate data streams of the original database files. Come i file sparse, anche i flussi di dati alternativi rappresentano una caratteristica del file system NTFS.Like sparse files, alternate data streams are a feature of the NTFS file system. L'utilizzo dei flussi di dati alternativi sparse consente l'associazione di più allocazioni di dati a un solo file o a una sola cartella senza incidere sulla dimensione del file o sulle statistiche del 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.

FilegroupFilegroups

Ogni database contiene un filegroup primario,Every database has a primary filegroup. che include il file di dati primario e gli eventuali file secondari non inclusi in altri filegroup.This filegroup contains the primary data file and any secondary files that are not put into other filegroups. È possibile creare filegroup definiti dall'utente per raggruppare i file di dati a fini amministrativi e di allocazione e posizione dei dati.User-defined filegroups can be created to group data files together for administrative, data allocation, and placement purposes.

Ad esempio, è possibile creare tre file, Data1.ndf, Data2.ndf e Data3.ndf su tre unità disco distinte e assegnarli al filegroup 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. È quindi possibile creare una tabella specifica nel filegroup fgroup1.A table can then be created specifically on the filegroup fgroup1. Le query sui dati della tabella verranno suddivise sui tre dischi con il conseguente miglioramento delle prestazioni.Queries for data from the table will be spread across the three disks; this will improve performance. È possibile ottenere lo stesso risultato in termini di prestazioni utilizzando un singolo file creato su un set di striping RAID.The same performance improvement can be accomplished by using a single file created on a RAID (redundant array of independent disks) stripe set. File e filegroup, tuttavia, consentono di aggiungere nuovi file su nuovi dischi in modo semplice.However, files and filegroups let you easily add new files to new disks.

Tutti i file di dati vengono archiviati nei filegroup elencati nella tabella seguente.All data files are stored in the filegroups listed in the following table.

FilegroupFilegroup DescrizioneDescription
PrimariaPrimary Il filegroup che contiene il file primario.The filegroup that contains the primary file. Tutte le tabelle di sistema vengono allocate al filegroup primario.All system tables are allocated to the primary filegroup.
Definita dall'utenteUser-defined Qualsiasi filegroup creato specificamente dall'utente in fase di creazione o di successiva modifica del database.Any filegroup that is specifically created by the user when the user first creates or later modifies the database.

Filegroup predefinitoDefault Filegroup

Gli oggetti di database creati senza specificare un filegroup di appartenenza vengono assegnati al filegroup predefinito.When objects are created in the database without specifying which filegroup they belong to, they are assigned to the default filegroup. Viene designato sempre e solo un filegroup predefinito.At any time, exactly one filegroup is designated as the default filegroup. I file nel filegroup predefinito devono essere di dimensioni sufficienti a contenere tutti i nuovi oggetti non allocati ad altri filegroup.The files in the default filegroup must be large enough to hold any new objects not allocated to other filegroups.

A meno che non venga modificato tramite l'istruzione ALTER DATABASE, PRIMARY è il filegroup predefinito.The PRIMARY filegroup is the default filegroup unless it is changed by using the ALTER DATABASE statement. Gli oggetti e le tabelle di sistema, tuttavia, restano allocati all'interno del filegroup PRIMARY e non all'interno del nuovo filegroup predefinito.Allocation for the system objects and tables remains within the PRIMARY filegroup, not the new default filegroup.

Esempio di file e filegroupFile and Filegroup Example

Nell'esempio seguente viene illustrata la creazione di un database in un'istanza di SQL Server.The following example creates a database on an instance of SQL Server. Nel database sono presenti un file di dati primario, un filegroup definito dall'utente e un file di log.The database has a primary data file, a user-defined filegroup, and a log file. Il file di dati primario è incluso nel filegroup primario e il filegroup definito dall'utente include due file di dati secondari.The primary data file is in the primary filegroup and the user-defined filegroup has two secondary data files. Tramite l'istruzione ALTER DATABASE viene impostato come predefinito il filegroup definito dall'utenteAn ALTER DATABASE statement makes the user-defined filegroup the default. e quindi viene creata una tabella che specifica tale filegroup.A table is then created specifying the user-defined filegroup. Questo esempio usa un percorso generico c:\Program Files\Microsoft SQL Server\MSSQL.1 per evitare di specificare una versione di 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

Nella figura seguente vengono illustrati i risultati dell'esempio precedente.The following illustration summarizes the results of the previous example.

filegroup_example

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

Opzioni per file e filegroup ALTER DATABASE (Transact-SQL)ALTER DATABASE File and Filegroup Options (Transact-SQL)

Collegamento e scollegamento di un database (SQL Server)Database Detach and Attach (SQL Server)