Problem: Ich habe eine SQL Server-Datenbank auf einem 1-TB-Laufwerk. Das Protokoll wächst nicht über 5 MB hinaus, selbst wenn das Protokoll MAXSIZE
viel größer als 5 MB ist.
Fehler erhalten:
Das Transaktionsprotokoll für die Datenbank 'Temp' ist voll. Informationen dazu, warum Speicherplatz im Protokoll nicht wiederverwendet werden kann, finden Sie in der Spalte log_reuse_wait_desc in sys.databases
Fragen:
- Wie behebe ich das?
- Warum passiert dies?
Code:
CREATE DATABASE Temp ON PRIMARY(
NAME = Temp
, FILENAME = 'C:\\Temp.mdf'
, SIZE = 2MB
, FILEGROWTH = 10%)
LOG ON (
NAME = Temp_Log
, FILENAME = 'C:\\Temp.ldf'
, SIZE = 1MB, MAXSIZE = 70MB
, FILEGROWTH = 10%)
Ergebnis von select name, log_reuse_wait_desc from sys.databases where name = 'temp';
:
name, log_reuse_wait_desc
Temp, NICHTS
Zusätzliche Information:
- SQL Server Manager sagt
maxsize = 5mb
undrestricted growth
- Wiederherstellungsmodus
Simple
- Die Datenbank verarbeitet Hunderte einzelner SQL-Anweisungen wie ein Datenintegrationstool
Aktualisierte Zusatzinformationen:
Wenn die SQL-Anweisung direkt im SQL Server-Manager ausgeführt wird, wird sie erfolgreich erstellt und verursacht keine Fehler bei der Implementierung. Wenn die Anweisung create database hingegen mit System.Data.SqlClient und genau der von ihr erstellten Syntax progmatisch ausgeführt wird die Datenbank mit allen Standardeinstellungen. Ich muss zusätzlich alter database Anweisungen angeben, um das richtige Verhalten zu erreichen.
Code zum Ausführen von Abfragen:
public void AcuConvert()
{
using (DestD)
{
SqlCommand command = new SqlCommand();
DestD.Open();
command.Connection = DestD;
foreach (var item in Entity.SqlDestinationQueries.ToList())
{
command.CommandText = item.Query;
command.ExecuteNonQuery();
}
foreach (var item in Entity.SystemQueries.ToList())
{
command.CommandText = item.Query.Replace("@Sys", SysD.Database);
command.ExecuteNonQuery();
}
foreach (var item in Entity.InsertQueries.ToList())
{
command.CommandText = item.Query.Replace("@Source", SourceD.Database); ;
command.ExecuteNonQuery();
}
}
}