2013-03-15 3 views
0

Я пытаюсь обновить/вставить огромное количество данных в базу данных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, чтобы решить эту проблему.

Мой вопрос в том, что в кодирующей части я делаю что-то неправильно, могу ли я как-то улучшить это?

Благодаря

+0

Какая модель восстановления вашей базы данных? Если у вас есть администратор базы данных, вы должны попросить его изучить это. – JodyT

+0

Модель восстановления имеет значение FULL, но у меня нет прав на изменение, чтобы не сжимать базу данных, если единственным решением является ее изменение, тогда мне все равно, так как это зависит от dba, чтобы управлять этим , Я связан только с частью кодирования – Maro

+1

Да, это проблема для администратора базы данных, им нужно запустить резервную копию журнала транзакций в этой БД, чтобы очистить ее. Затем файл может быть сокращен или диск расширен в зависимости от обстоятельств. – steoleary

ответ

2

нет, эта ошибка поправимо только на конце DBA, так что не все, что вы действительно можете обойтись без прав. либо том, на котором установлен диск, заканчивается на пробел, файл журнала попал в его квоту, либо автоматический рост для файла журнала установлен неправильно.

Смежные вопросы