Verkleinern einer Datenbank

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

In diesem Artikel wird beschrieben, wie Sie in SQL Server mit dem Objekt-Explorer in SQL Server Management Studio oder Transact-SQL eine Datenbank verkleinern.

Mit dem Verkleinern von Datendateien wird Platz gewonnen, indem Datenseiten vom Ende der Datei an nicht belegten Platz weiter am Dateianfang verschoben werden. Wurde am Ende der Datei ausreichend Platz geschaffen, kann die Zuordnung der Datenseiten am Ende der Datei aufgehoben und die Datenseiten können ins Dateisystem zurückgegeben werden.

Einschränkungen

  • Die Datenbank kann nicht kleiner als die Mindestgröße der Datenbank sein. Die Mindestgröße stellt die Größe dar, die bei der ursprünglichen Erstellung der Datenbank angegeben wurde, bzw. die letzte explizite Größe, die bei einer Dateigrößenänderung, z. B. DBCC SHRINKFILE, festgelegt wurde. Wenn z. B. eine Datenbank ursprünglich mit einer Größe von 10 MB erstellt und auf 100 MB vergrößert wurde, kann die Datenbank höchstens auf 10 MB verkleinert werden, auch wenn alle Daten in der Datenbank gelöscht wurden.

  • Sie können eine Datenbank nicht verkleinern, während sie gesichert wird. Sie können eine Datenbank hingegen auch nicht sichern, während ein Verkleinerungsvorgang für die Datenbank durchgeführt wird.

Empfehlungen

  • Zum Anzeigen des aktuellen freien (nicht zugeordneten) Speicherplatzes in der Datenbank. Weitere Informationen finden Sie unter Anzeigen von Informationen zum Daten- und Protokollspeicherplatz einer Datenbank

  • Berücksichtigen Sie die folgenden Informationen, wenn Sie eine Datenbank verkleinern möchten:

    • Ein Verkleinerungsvorgang ist am effektivsten nach einem Vorgang, durch den eine große Menge nicht verwendeter Speicherplatz bereitgestellt wird, z. B. nach einer umfangreichen DELETE-Anweisung oder dem Abschneiden bzw. Löschen einer Tabelle.

    • Die meisten Datenbanken erfordern verfügbaren freien Speicherplatz für die normalen alltäglichen Vorgänge. Wenn Sie eine Datenbank wiederholt verkleinern und feststellen, dass die Datenbankgröße wieder zunimmt, deutet das darauf hin, dass der freie Speicherplatz für reguläre Vorgänge benötigt wird. In diesem Fall ist das Verkleinern der Datenbank vergeblich. Automatische Vergrößerungsereignisse, die zum Vergrößern der Datenbankdatei(en) erforderlich sind, beeinträchtigen die Leistung.

    • Bei einem Verkleinerungsvorgang bleibt der Fragmentierungszustand der Indizes in der Datenbank nicht erhalten. Im Allgemeinen wird die Fragmentierung zu einem gewissen Grad verstärkt. Dies ist ein weiterer Grund, die Datenbank nicht wiederholt zu verkleinern.

    • Legen Sie die Datenbankoption AUTO_SHRINK nicht auf ON fest, es sei denn, besondere Anforderungen erfordern dies.

Berechtigungen

Erfordert die Mitgliedschaft in der festen Serverrolle sysadmin oder der festen Datenbankrolle db_owner .

Hinweise

Aktuelle Verkleinerungsvorgänge können andere Abfragen in der Datenbank blockieren und können von Abfragen blockiert werden, die bereits ausgeführt werden. In SQL Server 2022 (16.x) eingeführte Verkleinern von Datenbankvorgängen haben eine WAIT_AT_LOW_PRIORITY Option. Dieses Feature ist eine neue zusätzliche Option für DBCC SHRINKDATABASE und DBCC SHRINKFILE. Wenn ein neuer Verkleinerungsvorgang im WAIT_AT_LOW_PRIORITY Modus die erforderlichen Sperren aufgrund einer bereits ausgeführten langen Abfrage nicht abrufen kann, wird der Verkleinerungsvorgang schließlich nach einer Minute und im Hintergrund beendet, hindert andere Abfragen daran, blockiert zu werden. Weitere Informationen finden Sie unter DBCC SHRINKDATABASE.

Informationen zur Dateiverwaltung und zum Verkleinern bestimmter Vorgänge für Azure SQL-Datenbank finden Sie unter "Verwalten von Dateispeicher für Datenbanken in Azure SQL-Datenbank".

Verwenden von SQL Server Management Studio

Gilt für: SQL Server, Azure SQL verwaltete Instanz

Verkleinern einer Datenbank

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz von SQL Server-Datenbank-Engineher, und erweitern Sie dann diese Instanz.

  2. Erweitern Sie Datenbanken, und klicken Sie dann mit der rechten Maustaste auf die Datenbank, die Sie verkleinern möchten.

  3. Fahren Sie mit dem Mauszeiger über Tasks, dann über Verkleinern, und klicken Sie dann auf Datenbank.

    • Datenbank

      Zeigt den Namen der ausgewählten -Datenbank an.

    • Aktuell zugeordneter Speicherplatz

      Zeigt den gesamten verwendeten und nicht verwendeten Speicherplatz für die ausgewählte Datenbank an.

    • Verfügbarer freier Speicherplatz

      Zeigt die Summe des freien Speicherplatzes in den Protokoll- und Datendateien der ausgewählten Datenbank an.

    • Dateien vor dem Freigeben von nicht belegtem Speicherplatz neu organisieren

      Wenn diese Option ausgewählt wird, entspricht dies dem Ausführen von DBCC SHRINKDATABASE mit der Angabe einer Option zur Prozentvorgabe. Das Deaktivieren dieser Option entspricht dem Ausführen von DBCC SHRINKDATABASE mit der Option TRUNCATEONLY. Diese Option ist standardmäßig nicht ausgewählt, wenn das Dialogfeld geöffnet wird. Wenn diese Option ausgewählt ist, muss der Benutzer eine Option zur Prozentvorgabe angeben.

    • Maximal verfügbarer Speicherplatz in Dateien nach dem Verkleinern

      Geben Sie den Maximalwert für den freien Speicherplatz in Prozent an, der in den Datenbankdateien übrig bleiben soll, nachdem die Datenbank verkleinert wurde. Der zulässige Wert liegt zwischen 0 und 99.

  4. Klickan Sie auf OK.

Verwenden von Transact-SQL

Verkleinern einer Datenbank

  1. Stellen Sie eine Verbindung mit dem Datenbank-Engineher.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen. In diesem Beispiel wird DBCC SHRINKDATABASE verwendet, um die Größe der Daten- und Protokolldateien in der Datenbank UserDB zu verringern und für 10 Prozent freien Speicherplatz in der Datenbank zu sorgen.

DBCC SHRINKDATABASE (UserDB, 10);
GO

Nach dem Verkleinern einer Datenbank

Die zum Verkleinern einer Datei verschobenen Daten können an beliebigen freien Platz in der Datei verschoben werden. Dies führt zur Indexfragmentierung und kann die Leistung von Abfragen, die einen Bereich des Indexes suchen, verlangsamen. Zur Vermeidung von Fragmentierung sollten die Dateiindizes nach der Verkleinerung neu erstellt werden. Weitere Informationen finden Sie unter Neuerstellen eines Indexes.