由于 'LOG_BACKUP',数据库的事务日志已满
The transaction log for database is full due to 'LOG_BACKUP'
我们正在从一个数据库(比如 FirstDB)中的几个 table 中删除,并将大约 93,357 行(一次一行)插入到另一个日志 table 中数据库(比如 SecondDB)。
数据库恢复模式已满。
每行包含6列数据
[DeleteTime] [datetime] NULL,
[FilePath] [varchar](255) NOT NULL,
[DocumentID] [int] NULL,
[AnotherCol] [varchar](50) NULL,
[AnotherCol2] [varchar](50) NULL,
[AnotherCol3] [varchar](50) NULL,
在之前的插入操作中,当我们插入 153,000 行时,出现错误“由于 'LOG_BACKUP'
,数据库 'SecondDB' 的事务日志已满
避免在事务日志中使用大量 space 的最佳方法是什么?
我是否应该为每 1000 次插入数据库 SecondDB 提交事务?
这是从 FirstDb 中删除并插入到 SecondDB 中的代码
using (SqlConnection con = new SqlConnection(connectionString))
{
try
{
con.Open();
SqlDataAdapter da = new SqlDataAdapter("spGetDocuments", con);
DataSet ds = new DataSet();
da.Fill(ds);
foreach (DataRow aRow in ds.Tables[0].Rows)
{
try
{
//Code to insert into FirstDB
//Code to insert into SecondDB
cmdSecondDB = new SqlCommand("spUpdateDeleteDocsLog", con);
cmdSecondDB.CommandType = CommandType.StoredProcedure;
cmdSecondDB.Parameters.Add(new SqlParameter("FilePath", sDocumentPath));
cmdSecondDB.Parameters.Add(new SqlParameter("DocumentID", aRow["DocumentID"]));
:
iRow = cmdSecondDB.ExecuteNonQuery();
cmdSecondDB.Dispose();
cmdSecondDB = null;
}
}
ds.Dispose();
ds = null;
da.Dispose();
da = null;
con.Close();
}
}
还有,有没有办法计算出上面6行数据中的93357行会占用多少transaction log?
谢谢
The databases Recovery Model is Full.
那么唯一重要的是日志文件的大小和日志备份的频率。批处理不会导致写入较少的日志或允许日志 space 在 Full Recovery Model.
下的下一个事务日志备份之前被重用
我们正在从一个数据库(比如 FirstDB)中的几个 table 中删除,并将大约 93,357 行(一次一行)插入到另一个日志 table 中数据库(比如 SecondDB)。
数据库恢复模式已满。
每行包含6列数据
[DeleteTime] [datetime] NULL,
[FilePath] [varchar](255) NOT NULL,
[DocumentID] [int] NULL,
[AnotherCol] [varchar](50) NULL,
[AnotherCol2] [varchar](50) NULL,
[AnotherCol3] [varchar](50) NULL,
在之前的插入操作中,当我们插入 153,000 行时,出现错误“由于 'LOG_BACKUP'
,数据库 'SecondDB' 的事务日志已满避免在事务日志中使用大量 space 的最佳方法是什么?
我是否应该为每 1000 次插入数据库 SecondDB 提交事务?
这是从 FirstDb 中删除并插入到 SecondDB 中的代码
using (SqlConnection con = new SqlConnection(connectionString))
{
try
{
con.Open();
SqlDataAdapter da = new SqlDataAdapter("spGetDocuments", con);
DataSet ds = new DataSet();
da.Fill(ds);
foreach (DataRow aRow in ds.Tables[0].Rows)
{
try
{
//Code to insert into FirstDB
//Code to insert into SecondDB
cmdSecondDB = new SqlCommand("spUpdateDeleteDocsLog", con);
cmdSecondDB.CommandType = CommandType.StoredProcedure;
cmdSecondDB.Parameters.Add(new SqlParameter("FilePath", sDocumentPath));
cmdSecondDB.Parameters.Add(new SqlParameter("DocumentID", aRow["DocumentID"]));
:
iRow = cmdSecondDB.ExecuteNonQuery();
cmdSecondDB.Dispose();
cmdSecondDB = null;
}
}
ds.Dispose();
ds = null;
da.Dispose();
da = null;
con.Close();
}
}
还有,有没有办法计算出上面6行数据中的93357行会占用多少transaction log?
谢谢
The databases Recovery Model is Full.
那么唯一重要的是日志文件的大小和日志备份的频率。批处理不会导致写入较少的日志或允许日志 space 在 Full Recovery Model.
下的下一个事务日志备份之前被重用