Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article vous aide à résoudre le problème où vous remarquez une croissance continue du journal des transactions pour une base de données activée par capture de données modifiées.
Version du produit d’origine : SQL Server 2012 et les versions ultérieures
Numéro de base de connaissances d’origine : 2871474
Symptômes
Examinez le cas suivant :
- Vous utilisez SQL Server 2017, SQL Server 2016, SQL Server 2014 ou SQL Server 2012 sur Windows.
- Vous utilisez la capture de données modifiées en temps réel pour Oracle par Attunity.
- Vous créez une instance cdc pour capturer les modifications des tables de base de données Oracle.
- Les valeurs de capture des modifications sont stockées dans les bases de données de capture de modifications SQL Server.
- Le journal des transactions sur la base de données SQL Server augmente et les transactions ne sont pas marquées pour la troncation à mesure que les modifications de données sont capturées.
Dans ce scénario, la croissance du fichier journal des transactions de base de données SQL Server s’accumule et consomme trop d’espace disque au fil du temps.
La cause
Lorsque la capture de données modifiées pour les instances Oracle est configurée, la base de données SQL qui reçoit les données modifiées aura des tables mises en miroir, avec des transactions marquées pour la réplication. Ce comportement se produit car CDC pour Oracle s’appuie sur des procédures stockées système sous-jacentes qui ressemblent à celles utilisées dans CDC pour SQL Server. Toutefois, étant donné qu’aucune réplication de capture de données modifiées SQL n’est impliquée lorsque la capture de données modifiées pour Oracle est utilisée seule, il n’existe aucun lecteur de journal pour effacer les transactions marquées pour la réplication. Étant donné que la transaction n’a pas besoin d’être répliquée dans SQL Server, il est sûr de marquer manuellement la transaction comme distribuée à l’aide de la solution de contournement décrite plus loin dans cet article.
Pour vérifier cette cause exacte, exécutez la DBCC OPENTRAN commande pendant que vous êtes connecté à la base de données CDC SQL Server. Vous verrez un numéro LSN non distribué, comme illustré dans l’exemple suivant :
Replicated Transaction Information:
Oldest distributed LSN : (0:0:0)
Oldest non-distributed LSN : (38:272:1)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Vous disposez peut-être d’un LSN non distribué, car la capture de données modifiées pour Oracle utilise la capture de données modifiées pour les procédures stockées SQL, et cela utilise à son tour le lecteur du journal de réplication. Ce LSN non distribué correspond aux entrées de journal pour ajouter la table mise en miroir dans la base de données CDC Attunity.
Si vous exécutez cette requête, l’option log_reuse_wait_desc retourne une valeur de REPLICATION, indiquant la cause.
SELECT log_reuse_wait_desc FROM sys.databases WHERE name = '<your_cdc_database>'
Résolution
Exécutez la commande suivante dans une fenêtre de requête connectée à la base de données compatible cdc dans SQL Server :
EXEC sp_repltransVous devez recevoir une sortie semblable à ce qui suit :
xdesid xact_seqno xact_seqno 0x000000260000012C0001 0x0000002A000001B50001Copiez les numéros de séquence de transactions LSN pour la commande suivante.
À l’aide des nombres de l’étape 1, exécutez la
sp_repldonecommande comme suit pour signaler que les paires BeginTran et CommitTran LSN sont déjà répliquées :sp_repldone @xactid = 0x000000260000012C0001, @xact_segno = 0x0000002A000001B50001Exécutez la commande suivante pour vérifier que la transaction est marquée comme répliquée dans la base de données CDC :
DBCC OPENTRANCette opération retourne une sortie semblable à ce qui suit :
No active open transactions. DBCC execution completed. If DBCC printed error messages, contact your system administrator.Pour vous assurer que le journal des transactions peut être réutilisé, vérifiez qu’aucune autre raison de réutilisation n’est indiquée sur la base de données :
SELECT log_reuse_wait_desc, NAME FROM sys.databases WHERE NAME = '<your_cdc_database>'Cette opération retourne une sortie semblable à ce qui suit :
log_reuse_wait_desc name NOTHING <your_cdc_database>Vous devez maintenant être en mesure de tronquer le journal des transactions à l’aide de sauvegardes de journaux. Vous devez également être en mesure de réduire le fichier journal des transactions pour réduire l’espace disque consommé. Par exemple, exécutez ce qui suit :
BACKUP LOG <your_cdc_database> TO DISK='c:\folder\logbackup.trn' DBCC SHRINKFILE (yourcdcdatabase_log, 1024)
Pour plus d’informations, consultez Gérer la taille du fichier journal des transactions.
Plus d’informations
Pour plus d’informations, consultez Résoudre les erreurs d’instance cdc dans la capture de données modifiées Microsoft pour Oracle par Attunity.
Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.