Comment restaurer la réplication après un crash du serveur


8

Nous avions deux bases de données sur une instance SQL Server 2005 avec réplication transactionnelle entre elles (3 tables comme articles). Ce serveur a agi à la fois comme éditeur et distributeur.

Ensuite, le RAID sur le serveur a échoué. Cependant, nous avons réussi à détacher et à copier presque tous les .mdffichiers avant le crash.

Une fois le système restauré, nous avons réinstallé SQL Server, restauré les bases de données système (maître, modèle, msdb) et placé les .mdffichiers sur les mêmes chemins. Alors ça a commencé.

Le problème est apparu avec la réplication. Le dossier Publications locales était vide, bien que le dossier Abonnements locaux contienne l'abonnement en question. Quand j'ai essayé d'ajouter une nouvelle publication, j'ai eu:

L'Assistant Nouvelle publication a rencontré une ou plusieurs erreurs lors de la récupération des noms de publication.

Une exception s'est produite lors de l'exécution d'une instruction ou d'un lot Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)

Nom d'objet non valide «dbo.syspublications». (Microsoft SQL Server, erreur: 208)

J'ai décidé d'essayer de supprimer l'abonnement gauche (finalement j'ai réussi à le faire) et de désactiver la publication et la distribution sur le serveur, ce qui m'a donné:

SQL Server n'a pas pu désactiver la publication et la distribution sur 'someserver'.

Nom d'objet non valide «dbo.syssubscriptions». Le nombre de transactions après EXECUTE indique qu'une instruction COMMIT ou ROLLBACK TRANSACTION est manquante. Nombre précédent = 0, nombre actuel = 1. Le nombre de transactions après EXECUTE indique qu'une instruction COMMIT ou ROLLBACK TRANSACTION est manquante. Nombre précédent = 0, nombre actuel = 1. Le nombre de transactions après EXECUTE indique qu'une instruction COMMIT ou ROLLBACK TRANSACTION est manquante. Nombre précédent = 0, nombre actuel = 1. Le nombre de transactions après EXECUTE indique qu'une instruction COMMIT ou ROLLBACK TRANSACTION est manquante. Nombre précédent = 0, nombre actuel = 1. Le nombre de transactions après EXECUTE indique qu'une instruction COMMIT ou ROLLBACK TRANSACTION est manquante. Nombre précédent = 0, nombre actuel = 1. Le contexte de la base de données a été remplacé par «maître». (Microsoft SQL Server, erreur: 208)

Il semble que certaines informations distributionn'aient pas été récupérées à partir des sauvegardes de la base de données système (il est probable que la base de données manque quelque chose).

J'ai également essayé de suivre la réponse donnée en ne pouvant pas désactiver la publication et la distribution . Mais sans succès. J'ai essayé de créer à la syspublicationsfois dans masteret distribution, mais rien n'a changé.

Alors, comment faire fonctionner la réplication sur ce serveur?

J'ai essayé de publier une autre base de données sur le serveur et cela a fonctionné. Le problème semble donc être lié à la base de données publiée. Comment puis-je l'effacer pour gérer la création d'une nouvelle publication dessus?

System Tables le sous-dossier de la base de données problématique manque les tables de réplication, qui sont créées, lorsqu'une base de données est publiée.

Dans le moniteur de réplication, je peux voir ces anciens abonnements, alors qu'ils ne sont pas disponibles dans le dossier de réplication .

Réponses:


4

Au final, j'ai simplement fait ce que le serveur voulait, c'est-à-dire créé toutes les tables de "publication" (* dbo.MSpeer _ ** et * dbo.sys **) dans la base de données problématique (celle qui était l'éditeur), via Script Table Comme -> CRÉER À la boîte de dialogue. Merci à ce serveur m'a permis de désactiver la publication et la distribution. Ensuite, je n'avais besoin que de reconfigurer la réplication.

J'espère que la prochaine fois qu'il se bloquera (en fait j'espère que ce ne sera pas le cas), nous serons assez sages pour sauvegarder les tables impliquées dans la réplication à fond.


Informations supplémentaires de Zane , initialement laissées dans un commentaire:

Les tables dbo.MSpeer_ * et dbo.sys * peuvent également être créées en configurant le distributeur / éditeur sur un serveur différent avec SQL Server installé. Cela créera ces tables dans la base de données que vous avez définie pour la publication. Voir -> Tables -> Tables système dans SSMS.

Ensuite, générez les schémas pour toutes ces tables, puis créez ces tables dans la base de données problématique qui vous permettra de désactiver la distribution et la publication et de reconfigurer le distributeur.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.