Aracılığıyla paylaş


Sorun giderici: SQL Server işlem çoğaltmasıyla ilgili hataları bulma

Şunlar için geçerlidir:SQL ServerAzure SQL Yönetilen Örneği

çoğaltma hatalarını gidermek, işlem çoğaltmasının nasıl çalıştığını temel olarak anlamadan sinir bozucu olabilir. Yayın oluşturmanın ilk adımı Anlık Görüntü Aracısı'nın anlık görüntüyü oluşturmasını ve anlık görüntü klasörüne kaydetmesini sağlamaktır. Ardından Dağıtım Aracısı anlık görüntüyü aboneye uygular.

Bu işlem yayını oluşturur ve onu eşitleme durumuna getirir. Eşitleme üç aşamada çalışır:

  1. İşlemler çoğaltılan nesneler üzerinde gerçekleşir ve işlem günlüğünde "çoğaltma için" olarak işaretlenir.

  2. Günlük Okuyucu Aracısı işlem günlüğünü tarar ve "çoğaltma için" olarak işaretlenmiş işlemleri arar. Bu işlemler daha sonra dağıtım veritabanına kaydedilir.

  3. Dağıtım Aracısı, okuyucu iş parçacığını kullanarak dağıtım veritabanını tarar. Ardından, yazıcı iş parçacığını kullanarak bu ajan aboneye bağlanır ve değişiklikleri uygular.

Bu işlemin herhangi bir adımında hatalar oluşabilir. Bu hataları bulmak, eşitleme sorunlarını gidermenin en zor yönü olabilir. Neyse ki, Çoğaltma İzleyicisi'nin kullanımı bu işlemi kolaylaştırır.

Uyarı

Bu sorun giderme kılavuzunun amacı, sorun giderme metodolojisini öğretmektir. Özel hatanızı çözmek için değil, çoğaltmayla ilgili hataları bulma konusunda genel rehberlik sağlamak için tasarlanmıştır. Bazı belirli örnekler sağlanır, ancak bunların çözümü ortama bağlı olarak değişebilir. Örnek hatalar, Öğretici: Tamamen bağlı iki sunucu (işlemsel) arasında çoğaltmayı yapılandırma öğreticisine dayanır.

Sorun giderme metodolojisi

Sorulacak sorular

  1. Eşitleme işleminin neresinde çoğaltma başarısız oluyor?
  2. Hangi temsilci hata yaşıyor?
  3. Çoğaltma en son ne zaman başarılı bir şekilde çalıştı? O zamandan beri bir şey değişti mi?

İlgili adımlar

  1. Çoğaltma İzleyicisi'ni kullanarak çoğaltmanın hangi noktada hatayla karşılaştığını belirleyin (hangi aracı?):

    • Yayımcıdan Dağıtımcıya bölümünde hatalar oluşuyorsa, sorun Günlük Okuyucu Aracısı'ndadır.
    • Dağıtımcıdan Aboneye bölümünde hatalar oluşuyorsa, sorun Dağıtım Aracısı'ndadır.
  2. Hatanın ayrıntılarını belirlemek için İş Etkinliği İzleyicisi'nde aracının iş geçmişine bakın. İş geçmişi yeterince ayrıntı göstermiyorsa, belirli bir ajansta ayrıntılı günlük kaydını etkinleştirebilirsiniz.

  3. Hata için bir çözüm belirlemeyi deneyin.

Anlık Görüntü Aracısı ile ilgili hataları bulma

Anlık Görüntü Aracısı anlık görüntüyü oluşturur ve belirtilen anlık görüntü klasörüne yazar.

  1. Anlık Görüntü Aracınızın durumunu görüntüleyin:

    1. Nesne Gezgini'nde, Çoğaltma altında bulunan Yerel Yayın düğümünü genişletin.

    2. Yayınınızda AdvWorksProductTrans> Anlık Görüntü Aracısı Durumunu Görüntüle'ye sağ tıklayın.

    Kısayol menüsündeki Anlık Görüntü Aracısı Durumunu Görüntüle komutunun ekran görüntüsü.

  2. Anlık Görüntü Aracısı durumunda bir hata bildirilirse, Anlık Görüntü Aracısı iş geçmişinde daha fazla ayrıntı bulabilirsiniz:

    1. Nesne Gezgini'nde SQL Server Agent'ı genişletin ve İş Etkinliği İzleyicisi'ne gidin.

    2. Kategoriye göre sıralayın ve Anlık Görüntü Aracısını REPL-Snapshot kategorisine göre tanımlayın.

    3. Anlık Görüntü Aracısı'na sağ tıklayıp Geçmişi Görüntüle'yi seçin.

    Anlık Görüntü Aracısı geçmişini açmak için Seçimlerin ekran görüntüsü.

  3. Anlık Görüntü Aracısı geçmişinde ilgili günlük girdisini seçin. Bu genellikle hatayı bildiren girdiden önce bir veya iki satırdır. (Kırmızı X, hataları gösterir.) Günlüklerin altındaki kutudaki ileti metnini gözden geçirin:

    Snapshot Agent için erişim reddedildi hatasının ekran görüntüsü.

    The replication agent had encountered an exception.
    Exception Message: Access to path '\\node1\repldata.....' is denied.
    

Windows izinleriniz anlık görüntü klasörünüz için doğru yapılandırılmadıysa, Anlık Görüntü Aracısı için "erişim reddedildi" hatasını görürsünüz. Anlık görüntünüzün depolandığı klasöre yönelik izinleri doğrulamanız ve Snapshot Agent'ı çalıştırmak için kullanılan hesabın paylaşıma erişim izinlerine sahip olduğundan emin olmanız gerekir.

Günlük Okuyucu Aracısındaki hataları bulun.

Günlük Okuyucu Aracısı yayımcı veritabanınıza bağlanır ve "çoğaltma için" olarak işaretlenmiş işlemler için işlem günlüğünü tarar. Ardından bu işlemleri dağıtım veritabanına ekler.

  1. SQL Server Management Studio'da yayımcıya bağlanın. Sunucu düğümünü genişletin, Çoğaltma klasörüne sağ tıklayın ve çoğaltma izleyicisini başlat'ı seçin:

    Kısayol menüsündeki 'Çoğaltma İzleyicisini Başlat' komutunun ekran görüntüsü.

    Çoğaltma İzleyicisi açılır:

    Çoğaltma İzleyicisi'nin ekran görüntüsü.

  2. Kırmızı X, yayının senkronize olmadığını gösterir. Sol taraftaki Yayımcılarım'ı genişletin ve ardından ilgili yayımcı sunucusunu genişletin.

  3. Sol taraftaki AdvWorksProductTrans yayınını seçin ve sorunun nerede olduğunu belirlemek için sekmelerden birinde kırmızı X işaretini arayın. Bu durumda, kırmızı X Aracılar sekmesindedir, bu nedenle aracılardan biri bir hatayla karşılaşır:

    Çoğaltma İzleyicisi'nin 'Aracılar' sekmesindeki Kırmızı X'in ekran görüntüsü.

  4. Hangi aracının hatayla karşılaştığını belirlemek için Aracılar sekmesini seçin:

    Çoğaltma İzleyicisi'nde başarısız olan Günlük Okuyucu Aracısı üzerindeki Kırmızı X işaretinin ekran görüntüsü.

  5. Bu görünümde Anlık Görüntü Aracısı ve Günlük Okuyucu Aracısı olmak üzere iki aracı görüyorsunuz. Hata ile karşılaşan bileşen kırmızı bir X işaretine sahiptir. Bu durumda, hata Günlük Okuyucu Aracısı'ndadır.

    Hatayı bildiren satıra çift tıklayarak Günlük Okuyucu Ajanı için ajan geçmişini görüntüleyin. Bu geçmiş hata hakkında daha fazla bilgi sağlar:

    Günlük Okuyucu Aracısı'nın Hata Ayrıntıları Ekran Görüntüsü.

    Status: 0, code: 20011, text: 'The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.'.
    The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.
    Status: 0, code: 15517, text: 'Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.'.
    Status: 0, code: 22037, text: 'The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.'.
    
  6. Hata genellikle yayımcı veritabanının sahibi doğru ayarlanmadığında oluşur. Veritabanı geri yüklendiğinde bu durum oluşabilir. Bunu doğrulamak için:

    1. Nesne Gezgini'nde Veritabanları'ı genişletin.

    2. AdventureWorks2025>Özellikleri'ne sağ tıklayın.

    3. Dosyalar sayfasının altında bir sahip olduğunu doğrulayın. Bu kutu boşsa, sorununuzun nedeni büyük olasılıkla budur.

    Boş bir 'Sahip' kutusuyla veritabanı özelliklerindeki 'Dosyalar' sayfasının ekran görüntüsü.

  7. Dosyalar sayfasında sahibi boşsa, veritabanı bağlamında AdventureWorks2025 penceresi açın. Aşağıdaki T-SQL kodunu çalıştırın:

    -- set the owner of the database to 'sa' or a specific user account, without the brackets.
    EXECUTE sp_changedbowner '<useraccount>';
    -- example for sa: exec sp_changedbowner 'sa'
    -- example for user account: exec sp_changedbowner 'sqlrepro\administrator'
    
  8. Gerektiğinde Log Okuyucu Aracısını yeniden başlatabilirsiniz.

    1. Nesne Gezgini'nde SQL Server Aracısı düğümünü genişletin ve İş Etkinliği İzleyicisi'ni açın.

    2. Kategoriye göre sıralayın ve Log Reader Aracısını REPL-LogReader kategorisine göre tanımlayın.

    3. Günlük Okuyucu Aracısı işine sağ tıklayın ve İşi Adımdan Başlat'ı seçin.

    Günlük Okuyucu Aracısı'nı yeniden başlatmak için seçimlerin ekran görüntüsü.

  9. Çoğaltma İzleyicisi'ni yeniden açarak yayınınızın şimdi senkronize olduğunu doğrulayın. Henüz açık değilse, Nesne Gezgini'nde Çoğaltma'ya sağ tıklayarak bulabilirsiniz.

  10. AdvWorksProductTrans yayınını seçin, Ajanlar sekmesini seçin ve Günlük Okuyucu Ajanına çift tıklayarak aracı geçmişini açın. Günlük Okuyucu Aracısı'nın çalıştığını ve ya komutları çoğalttığını ya da "çoğaltılacak işlem yok" ifadesini görmeniz gerekir.

    Çoğaltılmış işlem olmadan çalışan Günlük Okuyucu Aracısı'nın ekran görüntüsü.

Dağıtım Aracısı ile ilgili hataları bulma

Dağıtım Aracısı, dağıtım veritabanındaki verileri bulur ve aboneye uygular.

  1. SQL Server Management Studio'da yayımcıya bağlanın. Sunucu düğümünü genişletin, Çoğaltma klasörüne sağ tıklayın ve çoğaltma izleyicisini başlat'ı seçin.

  2. Çoğaltma İzleyicisi'ndeAdvWorksProductTrans yayınını seçin ve Tüm Abonelikler sekmesini seçin. Aboneliğe sağ tıklayın ve Ayrıntıları Görüntüle'yi seçin:

    Kısayol menüsündeki 'Ayrıntıları Görüntüle' komutunun ekran görüntüsü.

  3. Abone Geçmişi Dağıtımcısı iletişim kutusu açılır ve aracının hangi hatayla karşılaştığını açıklar:

    Dağıtım Aracısı için Hata ayrıntılarının ekran görüntüsü.

    Error messages:
    Agent 'NODE1\SQL2016-AdventureWorks2022-AdvWorksProductTrans-NODE2\SQL2016-7' is retrying after an error. 89 retries attempted. See agent job history in the Jobs folder for more details.
    
  4. Hata, Dağıtım Aracısı'nın yeniden denediğini gösterir. Daha fazla bilgi edinmek için Dağıtım Aracısı'nın iş geçmişini denetleyin:

    1. Nesne Gezgini >SQL Server Aracısı'nu genişletin.

    2. İşleri Kategoriye göre sıralayın.

    3. Dağıtım Aracısını REPL-Distribution kategorisine göre tanımlayın. Aracıya sağ tıklayın ve Geçmişi Görüntüle'yi seçin.

    Dağıtım Aracısı geçmişini görüntülemek için Seçimlerin ekran görüntüsü.

  5. Hata girdilerinden birini seçin ve pencerenin en altındaki hata metnini görüntüleyin:

    Dağıtım aracısı için yanlış parolayı gösteren Hata metninin ekran görüntüsü.

    Message:
    Unable to start execution of step 2 (reason: Error authenticating proxy NODE1\repl_distribution, system error: The user name or password is incorrect.)
    
  6. Bu hata, Dağıtım Aracısı'nın kullandığı parolanın yanlış olduğunu gösterir. Sorunu çözmek için:

    1. Nesne Gezgini'nde Çoğaltma düğümünü genişletin.

    2. Abonelik >Özellikleri'ne sağ tıklayın.

    3. Aracı İşlem Hesabı'nın yanındaki üç noktayı (...) seçin ve parolayı değiştirin.

    Dağıtım Aracısı parolasını değiştirme seçimlerinin ekran görüntüsü.

  7. Nesne Gezgini'nde Çoğaltma seçeneğine sağ tıklayarak Yeniden Çoğaltma İzleyicisini kontrol edin. Tüm Abonelikler altındaki kırmızı X işareti, Dağıtım Aracısı'nın hatayla karşılaşmaya devam ettiğini gösterir.

    Çoğaltma İzleyicisi> aboneliğe sağ tıklayarak Aboneye Dağıtım geçmişini açın. Burada hata artık farklıdır:

    Dağıtım Aracısı'nın bağlanamadığını gösteren hata ekran görüntüsü.

    Connecting to Subscriber 'NODE2\SQL2016'
    Agent message code 20084. The process could not connect to Subscriber 'NODE2\SQL2016'.
    Number:  18456
    Message: Login failed for user 'NODE2\repl_distribution'.
    
  8. Bu hata, NODE2\repl_distribution kullanıcısı için oturum açma başarısız olduğundan Dağıtım Aracısı'nın aboneye bağlanalamadığını gösterir. Daha fazla araştırma yapmak için aboneye bağlanın ve Nesne Gezgini'ndeki Yönetim düğümü altında geçerli SQL Server hata günlüğünü açın:

    Abone için oturum açma işleminin başarısız olduğunu gösteren Hata'nın ekran görüntüsü.

    Bu hatayı görüyorsanız abonede oturum açma bilgileri eksiktir. Bu hatayı çözmek için bkz. Çoğaltma için Güvenlik Rolü Gereksinimleri.

  9. Oturum açma hatası çözüldükten sonra Çoğaltma İzleyicisi'ni yeniden denetleyin. Tüm sorunlar giderildiyse, Yayın Adı'nın yanında yeşil bir ok ve Tüm Abonelikler altında Çalışıyor durumunu görmeniz gerekir.

    Başarılı olduğunu doğrulamak için aboneliğe sağ tıklayarak DağıtımcıDan Aboneye geçmişini bir kez daha açın. Dağıtım Aracısı'nı ilk kez çalıştırıyorsanız anlık görüntünün aboneye toplu olarak kopyalandığını görürsünüz:

    Dağıtım Aracısı'nın 'Çalışıyor' durumu ve toplu kopyalamayla ilgili bir ileti içeren ekran görüntüsü.

Birleştirme Aracısı ile ilgili hataları bulma

Birleştirme aracısının değişiklikleri çoğaltması uzun sürebilir. Birleştirme çoğaltma eşitleme işleminin hangi adımının en çok zaman aldığını belirlemek için, birleştirme aracısı günlüğüyle birlikte izleme bayrağı 101'i kullanın. Bunu yapmak için birleştirme aracısı parametreleri için aşağıdaki parametreleri kullanın ve aracıyı yeniden başlatın:

-T 101
-output
-outputverboselevel

Uyarı

Tabloya istatistik <distribution-server>..msmerge_history yazmanız gerekiyorsa izleme bayrağı 102'yi kullanın.

Birleştirme replikasyonu eşitlemesi tamamlandıktan sonra birleştirme aracısının örnek bir çıktısı aşağıdaki gibidir:

**************************************************************
CONNECTION TIMES --> time took to establish the connection to the servers. Publisher (all connections) 156 msec   Subscriber (all connections) 32 msec Distributor 93 msec
**************************************************************
UPLOAD COUNTERS  --> upload phase (changes from the Sub to the Pub) stats MakeGeneration Time = 343 msec. InsertGenHistory Time = 31 msec. UpdateGenHistory Time = 0 msec. ProxiedMetadata Time = 0 msec.
**************************************************************
DOWNLOAD COUNTERS  --> download phase (changes from the Pub to the Sub) stats MakeGeneration Time = 219 msec. InsertGenHistory Time = 0 msec. UpdateGenHistory Time = 0 msec.
**************************************************************
RETENTION-BASED CLEANUP STATISTICS --> sp_mergemetadataretentioncleanup proc stats Publisher: Cleanup Time 281 msec MSmerge_genhistory rows cleaned up 0 MSmerge_contents rows cleaned up 0 MSmerge_tombstone rows cleaned up 0 Subscriber: Cleanup Time 187 msec MSmerge_genhistory rows cleaned up 0 MSmerge_contents rows cleaned up 0 MSmerge_rowtrack rows cleaned up 0 MSmerge_tombstone rows cleaned up 0
**************************************************************
RETRY STATISTICS Retry Time (Upload) 0 msec. Retry Time (Download) 0 msec. Total changes retried 0 Number of Iterations through rows needing retry 0 Total number of changes that failed despite retry 0
**************************************************************
PROXY METADATA QUEUE COUNTERS Queue Full: Number of Waits: 0, Total Wait Time: 0 msec
**************************************************************
Distributor-side History Logging Time = 219 msec. Number of Distributor-side History Messages Logged = 11 Subscriber-side History Logging Time = 295 msec. Number of Subscriber-side History Messages Logged = 11
**************************************************************
2013-05-28 17:24:11.820 OLE DB Subscriber '<SQL Server name>\sql2008r2': DBCC SQLPERF (NETSTATS)  2013-05-28 17:24:11.822 OLE DB Publisher '<SQL Server name>\SQL2008R2':  DBCC SQLPERF (NETSTATS)  2013-05-28 17:24:11.824 OLE DB Distributor '<SQL Server name>\SQL2008R2':  DBCC SQLPERF (NETSTATS)  NETWORK STATISTICS Server  Reads  Writes  Bytes Read Bytes Written Publisher 74  74  19112  37526 Subscriber 73  73  19032  36931 Distributor 75  75  19192  38121
**************************************************************
NETWORK STATUS Network Connection: The computer has one or more LAN cards that are active. Network link speed: Destination Incoming  Outgoing Publisher Unreachable  Unreachable Subscriber Unreachable  Unreachable Distributor Unreachable  Unreachable
**************************************************************

Herhangi bir aracıda ayrıntılı günlük kaydını etkinleştirme

Çoğaltma topolojisindeki herhangi bir aracıda oluşan hatalar hakkında daha ayrıntılı bilgi görmek için ayrıntılı günlük kaydı kullanabilirsiniz. Adımlar her temsilci için aynıdır. İş Etkinliği İzleyicisi'nde doğru aracıyı seçtiğinizden emin olmanız gerekir.

Uyarı

Aracılar, çekme veya itme aboneliği olmasına bağlı olarak yayımcıda veya abonede bulunabilir. Aracı, araştırdığınız sunucuda kullanılamıyorsa diğer sunucuyu kontrol edin.

  1. Ayrıntılı günlüğün kaydedileceği yeri belirleyin ve klasörün mevcut olduğundan emin olun. Bu örnekte c:\temp kullanılır.

  2. Nesne Gezgini'nde SQL Server Aracısı düğümünü genişletin ve İş Etkinliği İzleyicisi'ni açın.

    İş Etkinliği İzleyicisi kısayol menüsündeki 'İş Etkinliğini Görüntüle' komutunun ekran görüntüsü.

  3. Kategoriye göre sıralayın ve ilgilendiğiniz aracıyı belirleyin. Bu örnek, Günlük Okuyucu Aracısı'nı kullanır. İlgi > duyduğunuz Özellikler aracısını sağ tıklayın.

    Aracı özelliklerini açmak için yapılan seçimlerin ekran görüntüsü.

  4. Adımlar sayfasını seçin ve ardından Aracıyı çalıştır adımını vurgulayın. Düzenle'yi seçin.

    'Aracıyı çalıştır' adımını düzenlemek için Seçimlerin ekran görüntüsü.

  5. Komut kutusuna yeni bir satır başlatın, aşağıdaki metni girin ve Tamam'ı seçin:

    -Output C:\Temp\OUTPUTFILE.txt -Outputverboselevel 3
    

    Konumu ve yoğunluk seviyesini tercihinize göre değiştirebilirsiniz.

    İş adımının özelliklerindeki Ayrıntılı çıktı ekran görüntüsü.

    Ayrıntılı çıkış parametresini eklerken aşağıdaki sorunlar aracınızın başarısız olmasına veya outfile dosyasının eksik olmasına neden olabilir:

    • Uzun çizginin kısa çizgiye dönüştüğü bir biçimlendirme sorunu var.

    • Konum diskte yok veya aracıyı çalıştıran hesabın belirtilen konuma yazma izni yok.

    • Son parametre ile -Output parametresi arasında bir boşluk eksik.

    • Farklı aracılar farklı yoğunluk düzeylerini destekler. Ayrıntılı günlük kaydını etkinleştirirseniz ancak aracınız başlatılamazsa, belirtilen ayrıntı düzeyini 1 azaltmayı deneyin.

  6. Günlük Okuyucu Aracısı'nı yeniden başlatmak için aracı >Adımda İşi Durdur'a sağ tıklayın. Araç çubuğundan Yenile simgesini seçerek yenileyin . > Aracıya sağ tıklayın Adımda İşi Başlat.

  7. Disk üzerindeki çıkışı gözden geçirin.

    Çıktı metin dosyasının ekran görüntüsü.

  8. Ayrıntılı günlüğü devre dışı bırakmak için, daha önce eklediğiniz -Output satırını kaldırmak üzere önceki adımları izleyin.

Yardım alın

SQL belgelerine katkıda bulunma

SQL içeriğini kendiniz düzenleyebildiğinizi biliyor muydunuz? Bunu yaparsanız, belgelerimizin geliştirilmesine yardımcı olmakla kalmaz, aynı zamanda sayfaya katkıda bulunan olarak da kabul edilirsiniz.

Daha fazla bilgi için Bkz. Microsoft Learn belgelerini düzenleme.