Saya memulihkan database dari cadangan. Basis data menggunakan replikasi untuk menerbitkan ke server yang berbeda. Dengan asumsi pemulihan basis data akan merusak replikasi, saya mencoba menghapus replikasi dan membuatnya kembali (kami memiliki skrip untuk membuatnya kembali dari awal). Saya tidak yakin persis apa yang saya lakukan, tetapi sekarang dalam keadaan benar-benar kacau dan saya tidak bisa memperbaikinya.
Pertama, saya mencoba untuk menyingkirkan langganan (di server penerbit):
EXEC sp_dropsubscription @publication = 'PublicationName', @article = N'all', @subscriber = 'SubscriberServerName'
Ini sepertinya berhasil. SELECT * FROM syssubscriptions
tidak menunjukkan hasil. Melihat pada server pelanggan, SSMS> {SubscriberServer}> Replikasi> Langganan Lokal - langganannya tidak ada.
Maka saya mencoba untuk menghapus publikasi. SSMS> {Server}> Replikasi> Publikasi Lokal> {PublicationName}> Hapus. Ini memberikan pesan kesalahan berikut:
Could not delete publication 'PublicationName'.
Could not drop article. A subscription exists on it.
Changed database context to 'DatabaseName'. (Microsoft SQL Server, Error: 14046)
Ok, jadi saya mencoba untuk menjatuhkan artikel:
EXEC sp_droparticle @publication = 'PublicationName', @article = N'all'
dan dapatkan kesalahan ini:
Invalidated the existing snapshot of the publication. Run the Snapshot Agent again to generate a new snapshot.
Msg 14046, Level 16, State 1, Procedure sp_MSdrop_article, Line 75
Could not drop article. A subscription exists on it.
Oke, jadi saya mencoba memulai Snapshot Agent dan saya mendapatkan pengecualian SQL internal ini:
The SQL command 'sp_MSactivate_auto_sub' had returned fewer rows than expected by the replication agent.
Jadi saya mencoba metode alternatif untuk menghapus artikel DELETE FROM sysarticles
,. Tampaknya ini berhasil - saya sekarang sudah menyingkirkan artikel, tetapi saya masih mendapatkan kesalahan yang sama 'Tidak dapat melepaskan publikasi karena setidaknya ada satu langganan untuk publikasi ini' ketika saya mencoba menghapus publikasi.
Saya juga me-restart SQL Server - tidak membantu.
Saya tidak tahu apa yang sedang terjadi di sini dan bagaimana cara memperbaikinya?
BTW inilah yang terjadi ketika Anda memberi pengembang perangkat lunak yang tahu hanya cukup berbahaya kunci ke database. Untungnya, ini bukan lingkungan produksi ...
MSPublications
dalamdistribution
database mengungkapkan bahwa publikasi memang hilang. Apakah ini yang diharapkan?Saya memiliki masalah dengan replikasi dan menyelesaikannya dengan ini
Itu dan:
Apakah penyelamat saat membersihkan replikasi kacau.
sumber
Mengembalikan database akan merusak replikasi, jadi itu normal. Juga sebagian besar pesan kesalahan lainnya hanya mengikuti karena Anda belum dapat menghapus semua langganan (atau setidaknya SQL berpikir demikian).
Anda tahu Anda memiliki penerbit (sumber basis data), dan setidaknya satu pelanggan (basis data tujuan), dan ini adalah dua server yang berbeda. Saya hanya ingin menyebutkan bahwa ada juga distributor yang ada di salah satu dari server ini atau yang lain, dan kemungkinan dalam database bernama distribusi. Terkadang ada beberapa info berguna di sana dan kadang-kadang hal-hal jatuh karena informasi antara ketiganya tidak cocok.
Lagi pula, ketika Anda memeriksa pelanggan, apakah Anda juga memeriksa bagian itu di server penerbit untuk memastikan tidak ada yang terdaftar? Jika Anda menemukannya, Anda dapat mencoba menghapusnya secara manual:
Tetapi dengan asumsi mereka semua benar-benar hilang, coba ini pada database penerbit:
Marilah kita tahu bagaimana kelanjutannya. Replikasi ketika masuk ke negara ini mengacaukan saya dan DBA baik lainnya tidak ada hubungannya dengan menjadi pengembang sama sekali :-)
sumber
Satu-satunya cara saya dapat menyingkirkan artefak replikasi hantu adalah dengan menghentikan langganan, artikel, publikasi. Jika masih ada langganan hantu, kemudian buat ulang publikasi termasuk pelanggan hantu. Ini tampaknya bekerja dengan versi lama khususnya.
sumber
inilah yang biasanya saya lakukan ketika saya memiliki publikasi yang kacau.
itu agak jelek tetapi telah bekerja untuk saya pada banyak kesempatan di lingkungan yang berbeda. apa yang menyebabkannya? yang kadang-kadang sulit untuk mencari tahu, yang terbaik kadang-kadang untuk memulai dari awal, tapi bahkan untuk itu Anda perlu untuk membersihkan
all
yangresiduals
dari publikasi saat ini yang rusak.hanya untuk memasukkannya ke dalam konteks:
Ini yang saya lihat dari monitor replikasi:
dan ketika saya menggunakan monitor replikasi saya sendiri menggunakan T-SQL :
Anda dapat melihat 2 baris pada kotak terakhir di bawah ini - dan yang satu tidak boleh ada di sana:
sama ketika saya menggunakan skrip ini:
Pertama, Anda melakukan apa yang ditunjukkan dalam jawaban lain di atas, jika itu berhasil , itu baik-baik saja, kadang-kadang berfungsi, masalah dipecahkan.
itu akan lebih dari itu:
Sekarang untuk menyingkirkan sepenuhnya publikasi ini kita akan mulai dengan koneksi ke buscriber, dan kemudian penerbit, dan kemudian distributor sesuai skrip di bawah ini:
pada titik ini buat kembali publikasi seperti biasa
lalu pasang snapshot untuk dijalankan
tunggu sampai selesai membuat snapshot
MAYBE YOU DONT NEED TO RUN THE SNAP
- cobawithout
jalankan dulu, sebagian besar waktu tidak berfungsi, Anda juga dapat menambahkan hanya 1-2small
artikel ke publikasi sehingga snap berjalan cepattetapi jika Anda menjalankan snapshot maka Anda harus menunggu sampai selesai sebelum Anda dapat melanjutkan ke langkah berikutnya -
drop the publication
setelah itu Anda menghasilkan skrip
drop that publication
sesuai gambar di bawah ini:semoga setelah itu, ketika Anda menjalankan skrip asli kami di atas , atau melihat monitor replikasi Anda tidak akan melihat publikasi yang salah, hanya yang baik, dalam kasus saya hanya satu:
sumber
Saya memiliki masalah yang sama pada kotak pra-produksi saya, perintah
tampaknya telah bekerja untuk membersihkan entri langganan palsu ...
sumber