SQL Server 2008-Protokolldateien haben Mindestgrößen. Was gibt es und wie verkleinere ich sie?

7

Ok, zu Beginn habe ich es vermasselt, als ich die Datenbanken mit einem Erstellungsskript erstellt habe, das ungefähr so ​​aussieht: (künstliche Zeilenumbrüche und Namen / Pfade zum Umbrechen)

CREATE DATABASE [EXAMPLE] ON  PRIMARY 
( NAME = N'EXAMPLE_Data', FILENAME = N'J:\SQLServer2008\MSSQL.INSTANCE\EXAMPLE.mdf', 
    SIZE = 446046KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)
 LOG ON 
( NAME = N'EXAMPLE_Log', FILENAME = N'J:\SQLServer2008\MSSQL.INSTANCE\EXAMPLE.ldf', 
    SIZE = 664505KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO

weil ich es aus einer vorhandenen Entwicklungsdatenbank heraus geschrieben habe und nur etwas in Gang bringen wollte. Ich habe es vermasselt, als ich meine Größe nicht auf etwas Vernünftiges (wie 4096KB) geändert habe, und jetzt kann ich die Protokolldatei nicht unter ungefähr 600 MB verkleinern.

Ich weiß, wo ich falsch gelaufen bin, aber wie kann ich das Problem leicht beheben?

jcolebrand
quelle
1
Was ist falsch an einer 600-Meg-Protokolldatei? Das ist nicht gerade sehr groß.
Mrdenny
Weil ich es gerade erstellt habe und möchte, dass es später auf eine Mindestgröße und nicht auf 600 MB verkleinert werden kann. Ich mache nur das Setup und
pflege
Haben Sie die Berechtigung, SSMS zum Ändern von Protokolldateien zu verwenden?
CoderHawk
@ Sandy ~ Ja, volle Berechtigungen.
Jcolebrand

Antworten:

7
  1. Trennen Sie die Datenbank.

    sp_detach_db @dbname = 'EXAMPLE'

  2. Löschen Sie die Protokolldatei physisch von der Festplatte (dies ist von entscheidender Bedeutung , kann jedoch riskant sein - siehe den Kommentar von mrdenny unten).

  3. Hängen Sie die Datenbank mit der sp_attach_single_file_dbgespeicherten Prozedur an.

    sp_attach_single_file_db @dbname = 'EXAMPLE', @physname = N'J:\SQLServer2008\MSSQL.INSTANCE\EXAMPLE.mdf'

Marek Grzenkowicz
quelle
4
Wenn Sie die Datenbank trennen und die Transaktionsprotokolldatei löschen, besteht die Möglichkeit, dass die Datenbank nicht erneut mit dem Datenbankmodul verbunden wird. Es ist auch möglich, dass die Daten in der Datenbank nicht konsistent sind, da möglicherweise Transaktionen in der Datenbankprotokolldatei im Flug waren, die nicht aus dem Transaktionsprotokoll in die Datendatei gelöscht wurden.
Mrdenny
@mrdenny In diesem speziellen Fall befinden sich keine Datensätze in den Tabellen, daher sollten die Transaktionsprotokolle leer sein. Aber in Zukunft werde ich das berücksichtigen.
Jcolebrand
@marek ~ Ich hatte wirklich gehofft, dass es nur einen Platz im Code der Datenbank gibt, an dem ich eine Einstellung in einer Tabelle
umschalten
1
@jcolebrand Ich weiß, dass es ziemlich kompliziert ist, aber das ist der einzige Weg, den ich kenne.
Marek Grzenkowicz
Wenn es Ihnen nichts ausmacht, wenn ich es natürlich noch ein paar Tage offen lasse? Ansonsten bekommst du die Gegenstimme.
Jcolebrand
5

Ich hoffe, Sie haben genügend Berechtigungen, um auf SSMS zuzugreifen. Wenn Sie dies tun, befolgen Sie diese Schritte

  1. Öffnen Sie SSMS
  2. Stellen Sie eine Verbindung zu SQL Server Instacne her
  3. Öffnen Sie den Objekt-Explorer. Klicken Sie mit der rechten Maustaste auf die Datenbank (deren Mindestgröße die Protokolldatei verkleinern soll) und wählen Sie "Eigenschaften".
  4. Wählen Sie im Fenster "Eigenschaften" die Option "Dateien".
  5. Unten rechts sehen Sie das Raster für Datenbankdateien
  6. Klicken Sie auf Hinzufügen, um eine neue Protokolldatei hinzuzufügen
    • logischer Name
    • Dateityp = Protokoll
    • Anfangsgröße = 1 MB (oder Ihre Präferenz)
    • Klicken Sie auf Autogrowth und stellen Sie die Einstellungen entsprechend ein
    • Dateiname
  7. Klicken Sie nun auf die vorhandene Protokollzeile und wählen Sie "Entfernen".
  8. Das ist es! Jetzt haben Sie eine neue Protokolldatei mit der gewünschten Mindestgröße.

Alt-Text

CoderHawk
quelle
Ich habe vollständige Berechtigungen für diese Instanz und diese Datenbank (ich habe sie eingerichtet, erinnere mich), und als ich genau das tat, was Sie beschrieben haben, konnte ich das primäre Protokoll für die Datenbank nicht entfernen. Weil das mein erster Gedanke war, was du beschreibst. Was könnte diese Fehlermeldung verursachen? (Für die Aufzeichnung bestand meine letzte Aktion nach ungefähr 10 Minuten Aufregung darin, die alten Dateien zu löschen und sie mit dem Skript neu zu erstellen, wobei die Dateigröße dieses Mal richtig eingestellt wurde.
jcolebrand