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
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
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
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