2013-03-15 3 views
0

Je suis en train de mettre à jour/insérer grand nombre de données dans une base de donnéesSqlDataAdapter et le journal des transactions pour la base de données est pleine

J'utilise le code suivant:

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); 
      } 

et je suis en utilisant la procédure stockée suivante:

@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 

Après l'insertion/mise à jour d'un nombre aléatoire de l'enregistrement, je reçois l'erreur:

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

Je sais que cette question a été posée de nombreuses fois, mais j'ai cherché pour savoir si la façon dont je suis en train de mettre à jour/d'insérer est à l'origine du problème.

Étant donné que je ne suis pas un administrateur de base de données et que je n'ai aucun droit sur le serveur de base de données, je ne peux pas modifier les journaux de sauvegarde, mais cela ne me dérange pas vraiment. Alors c'est à la dba de le résoudre. Ma question est, dans la partie codage, est-ce que je fais quelque chose de mal, est-ce que je peux améliorer cela d'une façon ou d'une autre?

Merci

+0

Quel est le modèle de récupération de votre base de données? Si vous avez un DBA, vous devriez l'avoir dans ce cas. – JodyT

+0

Le modèle de récupération est mis à FULL, mais je n'ai pas le droit de changer cela ni de réduire la base de données, si la seule solution est de modifier cela, alors je m'en fous car c'est à la dba de gérer ça . Je suis seulement concerné par la partie de codage – Maro

+1

Oui, c'est un problème pour le DBA, ils ont besoin d'exécuter une sauvegarde du journal des transactions sur cette base de données pour l'effacer. Ensuite, le fichier peut être réduit ou le disque étendu en fonction des circonstances. – steoleary

Répondre

2

non, cette erreur n'est fixable sur la fin de DBA, donc il n'y a rien que vous pouvez vraiment faire sans droits. le volume sur lequel le disque est en train de manquer d'espace, le fichier journal a atteint son quota ou la croissance automatique pour le fichier journal n'est pas définie correctement.

Questions connexes