Aujourd’hui la réplication transactionnelle est en panne. Un coup d’oeil rapide au moniteur de réplication nous confirme que l’agent de distribution est en échec:
Command attempted: if @@trancount > 0 rollback tran (Transaction sequence number: 0x0000CD53000011DE001000000000, Command ID: 1) Error messages: Syntax error, permission violation, or other nonspecific error (Source: MSSQLServer, Error number: 20025) Get help: https://help/20025 Syntax error, permission violation, or other nonspecific error (Source: MSSQLServer, Error number: 42000) Get help: https://help/42000
Ce n’est même pas la peine d’essayer de voir ce qu’il y a au bout des deux liens https://help/… proposés. En gros l’agent de distribution a trouvé une erreur en essayant d’appliquer une transaction. Le but est de retrouver le code SQL qui correspond à la transaction en échec. Lancer une trace Profiler sur le distributeur ne servira pas à grand chose car la transaction en question sera noyée dans le flot de mises à jour sur les tables systèmes de la réplication. En fait la chose la plus importante dans le log d’erreur est le numéro de transaction: 0x0000CD53000011DE001000000000
Pour retrouver l’ordre correspondant sur le distributeur, utiliser sp_browsereplcmds, regarder la première ligne:
use distribution sp_browsereplcmds @xact_seqno_start = '0x0000CD53000011DE001000000000' 0x0000CD53000012EE000E NULL NULL 1 30 0 0 NULL NULL 0x00000000000000000000 {CALL sp_MSins_EMAIL MOBILE DATA ('MICHAEL.HEARSLEY#TATOINE.COM', 'J74K6L')} 1 0x0000CD5300001304000F NULL NULL 1 30 0 0 NULL NULL 0x00000000000000000000 {CALL sp_MSins_EMAIL MOBILE DATA ('EDUARDO.ALFONSO#JPMM.COM', 'J91RCX')} 1 0x0000CD530000131A0018 NULL NULL 1 30 0 0 NULL NULL 0x00000000000000000000 {CALL sp_MSins_EMAIL MOBILE DATA ('MARK.D.SPELLMAN#ATTACH.CO.UK', 'J731FZ')} 1 0x0000CD530000133B000E NULL NULL 1 30 0 0 NULL NULL 0x00000000000000000000 {CALL sp_MSins_EMAIL MOBILE DATA ('XAVIER.BARTOLDI#NRJ.PICATRIX.COM', 'J92HBF')} 1 ...
Effectivement si on lance l’exécution de la proc à la main sur le subscriber:
CALL sp_MSins_EMAIL MOBILE DATA ('MICHAEL.HEARSLEY#TATOINE.COM', 'J74K6L') Msg 102, Level 15, State 1, Line 1 Incorrect syntax near 'MOBILE'.
Il y a des espaces dans le nom de la proc. L’assistant graphique de mise en place de la réplication créera la procédure avec des underscores, donc pas de souci, c’est juste pour l’exemple.
[ David B. ]
Continuez votre lecture sur le blog :
- Attention : publication transactionnelle et indexes non clusters (David Baffaleuf) [SQL ServerVintage]
- Réplication MySQL : Resynchronisation d’un Slave MySQL (Capdata team) [MySQL]
- Retrouver la requête à l’origine d’une erreur 8623 “The query processor ran out of internal resources and could not produce a query plan” (David Baffaleuf) [SQL Server]
- Migration PostgreSQL via SLONY-I ou comment réduire le temps de coupure (Capdata team) [PostgreSQL]
- Suppression accidentelle de ligne : comment retrouver le coupable ? (David Baffaleuf) [SQL Server]