Physikalische Datenbankdateien und Dateigruppen
Aktualisiert: 05. Dezember 2005
In SQL Server 2005 wird eine Datenbank einem Satz von Betriebssystemdateien zugeordnet. Daten und Protokollinformationen werden nie in derselben Datei gemischt, und die einzelnen Dateien werden immer nur von einer einzigen Datenbank verwendet. Dateigruppen sind mit Namen versehene Sammlungen von Dateien, die als Unterstützung bei der Verteilung von Daten und administrativen Tasks, wie z. B. Sicherungs- und Wiederherstellungsvorgängen, verwendet werden.
Datenbankdateien
SQL Server 2005-Datenbanken verfügen über drei Arten von Dateien:
- Primäre Datendateien
Die primäre Datendatei bildet den Ausgangspunkt der Datenbank und zeigt auf die anderen Dateien in der Datenbank. Jede Datenbank verfügt über eine primäre Datendatei. Die empfohlene Dateinamenerweiterung für primäre Datendateien ist MDF. - Sekundäre Datendateien
Als sekundäre Datendateien werden alle Datendateien außer der primären Datendatei bezeichnet. Einige Datenbanken verfügen möglicherweise nicht über eine sekundäre Datendatei, wohingegen andere Datenbanken mehrere sekundäre Datendateien verwenden. Die empfohlene Dateinamenerweiterung für sekundäre Datendateien ist NDF. - Protokolldateien
Protokolldateien enthalten sämtliche Protokollinformationen, die zum Wiederherstellen der Datenbank benötigt werden. Für jede Datei muss mindestens eine Protokolldatei vorhanden sein. Eine Datenbank kann jedoch auch über mehrere Protokolldateien verfügen. Die empfohlene Dateinamenerweiterung für Protokolldateien ist LDF.
Die Dateinamenerweiterungen MDF, NDF und LDF werden nicht von SQL Server 2005 erzwungen. Diese Erweiterungen werden jedoch empfohlen, um die Verwendungsart der jeweiligen Datei leichter identifizieren zu können.
Bei SQL Server 2005 werden die Speicherorte aller Dateien in einer Datenbank in der primären Datei der Datenbank und in der master-Datenbank aufgezeichnet. SQL Server-Datenbankmodul verwendet meist die Informationen zum Dateispeicherort aus der master-Datenbank. Datenbankmodul verwendet jedoch die Informationen zum Dateispeicherort aus der primären Datei, um die Einträge zum Dateispeicherort in der master-Datenbank in folgenden Fällen zu initialisieren:
- Beim Anfügen einer Datenbank mithilfe der CREATE DATABASE-Anweisung mit der Option FOR ATTACH oder FOR ATTACH_REBUILD_LOG.
- Beim Update von SQL Server Version 2000 oder Version 7.0 auf SQL Server 2005.
- Beim Wiederherstellen der master-Datenbank.
Logische und physikalische Dateinamen
SQL Server 2005-Dateien haben zwei Arten von Namen:
logical_file_name
Der logical_file_name ist der Name, der zum Verweisen auf die physikalische Datei in allen Transact-SQL-Anweisungen verwendet wird. Der logische Dateiname muss den Regeln für SQL Server-Bezeichner entsprechen und innerhalb der logischen Dateinamen in der Datenbank eindeutig sein.
os_file_name
Der os_file_name ist der Name der physikalischen Datei, einschließlich des Verzeichnispfads. Er muss den betriebssystemspezifischen Regeln für Dateinamen entsprechen.
Die folgende Abbildung zeigt Beispiele für die logischen und physikalischen Dateinamen einer Datenbank, die auf einer Standardinstanz von SQL Server 2005 erstellt wurde.
SQL Server-Daten und -Protokolldateien können auf FAT- oder NTFS-Dateisystemen platziert werden. Es wird empfohlen, dass Sie das NTFS-Dateisystem aufgrund seiner Sicherheitsaspekte verwenden. Datendateigruppen und Protokolldateien für Lese-/Schreibvorgänge können nicht auf einem mit NTFS komprimierten Dateisystem platziert werden. Nur schreibgeschützte Datenbanken und schreibgeschützte sekundäre Dateigruppen können auf einem mit NTFS komprimierten Dateisystem platziert werden. Weitere Informationen finden Sie unter Schreibgeschützte Dateigruppen und Komprimierung.
Wenn mehrere Instanzen von SQL Server auf einem einzelnen Computer ausgeführt werden, erhält jede Instanz ein anderes Standardverzeichnis, um die Dateien für die in der Instanz erstellten Datenbanken zu speichern. Weitere Informationen finden Sie unter Dateispeicherorte für Standard- und benannte Instanzen von SQL Server 2005.
Datendateiseiten
Die Seiten in einer SQL Server 2005-Datendatei erhalten, beginnend mit null (0) für die erste Seite in der Datei, aufeinander folgende Seitennummern. Jede Datei in einer Datenbank verfügt über eine eindeutige ID-Nummer. Um eine Seite in einer Datenbank eindeutig zu identifizieren, ist sowohl die Datei-ID als auch die Seitennummer erforderlich. Im folgenden Beispiel werden die Seitennummern in einer Datenbank dargestellt, die über eine 4 MB umfassende primäre Datendatei und eine 1 MB umfassende sekundäre Datendatei verfügt.
Die erste Seite in jeder Datei ist eine Dateiheaderseite, die Informationen zu den Attributen der Datei enthält. Viele der anderen Seiten am Anfang der Datei enthalten ebenfalls Systeminformationen, wie z. B. Zuordnungstabellen. Eine der Systemseiten, die sowohl in der primären Datendatei als auch in der ersten Protokolldatei gespeichert ist, ist eine Datenbank-Startseite, die Informationen zu den Attributen der Datenbank enthält. Weitere Informationen zu Seiten und Seitentypen finden Sie unter Seiten und Blöcke.
Dateigröße
SQL Server 2005-Dateien können automatisch über ihre ursprünglich angegebene Größe wachsen. Wenn Sie eine Datei definieren, können Sie eine bestimmte Schrittweite für die Vergrößerung angeben. Sobald die Datei vollständig aufgefüllt ist, wird sie um den als Schrittweite festgelegten Wert vergrößert. Wenn eine Dateigruppe mehrere Dateien enthält, beginnt die automatische Vergrößerung erst dann, wenn alle Dateien vollständig gefüllt sind. Die Vergrößerung wird dann nach dem Round-Robin-Schema vorgenommen.
Für jede Datei kann zudem eine Maximalgröße angegeben werden. Wenn keine Maximalgröße angegeben wird, kann die Datei so lange vergrößert werden, bis der gesamte verfügbare Speicherplatz auf dem Datenträger verbraucht ist. Dieses Feature ist insbesondere dann hilfreich, wenn SQL Server als Datenbank verwendet wird, die in eine Anwendung eingebettet ist, und der Benutzer sich nicht ohne weiteres mit einem Systemadministrator in Verbindung setzen kann. Der Benutzer kann festlegen, dass die Dateien nach Bedarf automatisch vergrößert werden, sodass die administrative Arbeit reduziert werden kann, die mit der Überwachung des freien Speicherplatzes in der Datenbank und der manuellen Zuordnung von zusätzlichem Speicherplatz verbunden ist.
Datenbank-Snapshotdateien
Das von einem Datenbanksnapshot zum Speichern der Kopie-bei-Schreibvorgang-Daten verwendete Dateiformat hängt davon ab, ob der Snapshot von einem Benutzer erstellt oder intern verwendet wird:
- Ein von einem Benutzer erstellter Datenbanksnapshot speichert die Daten in mindestens einer Datei mit geringer Dichte. Die Technologie von Dateien mit geringer Dichte ist ein Feature des NTFS-Dateisystems. Anfangs enthält eine Datei mit geringer Dichte keine Benutzerdaten. Zudem ist dieser Datei kein Speicherplatz für Benutzerdaten zugeordnet. Allgemeine Informationen zum Verwenden von Dateien mit geringer Dichte in Datenbanksnapshots sowie zum Wachstum von Datenbanksnapshots finden Sie unter Funktionsweise von Datenbanksnapshots und Grundlegendes zur Größe von Dateien mit geringer Dichte in Datenbanksnapshots.
- Datenbanksnapshots werden intern von bestimmten DBCC-Befehlen verwendet. Zu diesen Befehlen zählen DBCC CHECKDB, DBCC CHECKTABLE, DBCC CHECKALLOC und DBCC CHECKFILEGROUP. Ein interner Datenbanksnapshot verwendet alternative Datenströme mit geringer Dichte der ursprünglichen Datenbankdateien. So wie Dateien mit geringer Dichte stellen auch alternative Datenströme ein Feature des NTFS-Dateisystems dar. Die Verwendung alternativer Datenströme mit geringer Dichte ermöglicht das Zuordnen mehrerer Datenzuweisungen zu einer einzelnen Datei bzw. zu einem einzelnen Ordner, ohne Auswirkung auf die Dateigröße oder -umfangstatistiken.
Datenbankdateigruppen
Datenbankobjekte und -dateien können zu Verwaltungs- und Zuordnungszwecken zu Dateigruppen zusammengefasst werden. Es gibt zwei Arten von Dateigruppen:
Primäre Dateigruppe
Die primäre Dateigruppe enthält die primäre Datendatei und alle anderen Dateien, die nicht explizit einer anderen Dateigruppe zugewiesen sind. Alle Seiten für die Systemtabellen werden in der primären Dateigruppe zugeordnet.
Benutzerdefinierte Dateigruppe
Als benutzerdefinierte Dateigruppen werden alle Dateigruppen bezeichnet, die mithilfe des FILEGROUP-Schlüsselwortes in der Anweisung CREATE DATABASE oder ALTER DATABASE angegeben werden.
Protokolldateien sind niemals Teil einer Dateigruppe. Der Speicherplatz in Protokolldateien wird unabhängig vom Datenspeicher verwaltet.
Eine Datei kann nicht Mitglied mehrerer Dateigruppen sein. Tabellen, Indizes und Daten großer Objekte können einer bestimmten Dateigruppe zugeordnet werden. In diesem Fall werden alle darin enthaltenen Seiten dieser Dateigruppe zugeordnet, oder die Tabellen und Indizes können partitioniert werden. Die Daten partitionierter Tabellen und Indizes werden in Einheiten aufgeteilt, die jeweils in einer separaten Dateigruppe in einer Datenbank platziert werden können. Weitere Informationen zu partitionierten Tabellen und Indizes finden Sie unter Partitionierte Tabellen und Indizes.
In jeder Datenbank fungiert eine Dateigruppe als Standarddateigruppe. Wenn eine Tabelle oder ein Index erstellt wird, ohne dass eine Dateigruppe angegeben wird, wird angenommen, dass alle Seiten, aus der Standarddateigruppe zugeordnet werden. Es können nicht mehrere Dateigruppen gleichzeitig als Standarddateigruppe verwendet werden. Mitglieder der festen Datenbankrolle db_owner können die Festlegung für die Standarddateigruppe von einer Dateigruppe zu einer anderen ändern. Wird keine Standarddateigruppe angegeben, wird die primäre Dateigruppe als Standarddateigruppe verwendet.
Datei- und Dateigruppenbeispiel
Im folgenden Beispiel wird eine Datenbank auf einer Instanz von SQL Server erstellt. Die Datenbank verfügt über eine primäre Datendatei, eine benutzerdefinierte Dateigruppe und eine Protokolldatei. Die primäre Datendatei befindet sich in der primären Dateigruppe, und die benutzerdefinierte Dateigruppe verfügt über zwei sekundäre Datendateien. Durch die ALTER DATABASE-Anweisung wird die benutzerdefinierte Dateigruppe als Standarddateigruppe festgelegt. Anschließend wird eine Tabelle unter Angabe der benutzerdefinierten Dateigruppe erstellt.
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
In der folgenden Abbildung werden die Ergebnisse des vorherigen Beispiels zusammengefasst.
Siehe auch
Konzepte
Andere Ressourcen
Physische Datenbankarchitektur