Vấn đề: Tôi có cơ sở dữ liệu SQL Server trên ổ đĩa 1 TB. Nhật ký sẽ không tăng quá 5 MB ngay cả khi MAXSIZE
được đặt lớn hơn 5 MB.
Lỗi nhận được:
Nhật ký giao dịch cho cơ sở dữ liệu 'Temp' đã đầy. Để tìm hiểu lý do tại sao không gian trong nhật ký không thể được sử dụng lại, hãy xem cột log_Vuse_wait_desc trong sys.database
Câu hỏi:
- Làm thế nào để tôi sửa lỗi này?
- Tại sao chuyện này đang xảy ra?
Mã số:
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%)
Kết quả của select name, log_reuse_wait_desc from sys.databases where name = 'temp';
:
tên, log_Vuse_wait_desc
Temp, KHÔNG CÓ
Thông tin thêm:
- Người quản lý máy chủ Sql nói
maxsize = 5mb
vàrestricted growth
- Chế độ phục hồi
Simple
- Cơ sở dữ liệu đang xử lý hàng trăm Báo cáo SQL riêng lẻ vì nó là một công cụ tích hợp dữ liệu
Thông tin bổ sung được cập nhật:
Khi câu lệnh SQL được chạy trực tiếp trong trình quản lý máy chủ SQL, nó sẽ tạo thành công và không gây ra lỗi khi triển khai ... Mặt khác, nếu câu lệnh tạo cơ sở dữ liệu được chạy progmatically bằng System.Data.SqlClient và chính xác cú pháp mà nó tạo ra Cơ sở dữ liệu với tất cả các mặc định. Tôi phải cung cấp thêm các báo cáo cơ sở dữ liệu thay đổi để đạt được hành vi thích hợp.
Mã để chạy Truy vấn:
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();
}
}
}