Я пытаюсь обновить/вставить огромное количество данных в базу данныхSqlDataAdapter и журнал транзакций для базы данных заполнены
Я использую следующий код:
using (SqlCommand command = connection.CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = storedProcedureName;
command.UpdatedRowSource = UpdateRowSource.None;
foreach (SqlParameter sqlParameter in sqlParameters)
command.Parameters.Add(sqlParameter);
var adapter = new SqlDataAdapter();
adapter.InsertCommand = command;
adapter.UpdateBatchSize = batchSize;
return adapter.Update(table);
}
и я используя следующую хранимую процедуру:
@shareAdGroupId int,
@groupPermissionName varchar(100)
AS
BEGIN transaction
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT [email protected]
declare @permissionId int
EXEC [dbo].[PROC_UPSERT_PERMISSION] @permissionName = @groupPermissionName, @permissionId = @permissionId OUTPUT
SET NOCOUNT ON;
BEGIN TRY
begin
INSERT INTO [dbo].SHARE_AD_GROUP_PERMISSION
(SHARE_AD_GROUP_ID,PERMISSION_ID)
VALUES
(@shareAdGroupId,@permissionId)
end
END TRY
BEGIN CATCH
--RETURN ERROR_MESSAGE()
END CATCH
commit transaction
После вставки/обновления случайного числа записей, я получаю ошибку:
System.Data.SqlClient.SqlException: The transaction log for database 'dbName' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases
Я знаю, что этот вопрос задан много раз, однако я искал, чтобы выяснить, вызывает ли проблема, как я обновляю/вставляю.
Поскольку я не являюсь администратором базы данных, и у меня нет прав на сервере db, я не могу изменить журналы резервного копирования, однако мне все равно, проблема в этом. Тогда это зависит от dba, чтобы решить эту проблему.
Мой вопрос в том, что в кодирующей части я делаю что-то неправильно, могу ли я как-то улучшить это?
Благодаря
Какая модель восстановления вашей базы данных? Если у вас есть администратор базы данных, вы должны попросить его изучить это. – JodyT
Модель восстановления имеет значение FULL, но у меня нет прав на изменение, чтобы не сжимать базу данных, если единственным решением является ее изменение, тогда мне все равно, так как это зависит от dba, чтобы управлять этим , Я связан только с частью кодирования – Maro
Да, это проблема для администратора базы данных, им нужно запустить резервную копию журнала транзакций в этой БД, чтобы очистить ее. Затем файл может быть сокращен или диск расширен в зависимости от обстоятельств. – steoleary