Belirtiler
Aşağıdaki senaryoyu düşünün:
-
Bağlantılı bir sunucu, yerel sunucu ve hem de Microsoft SQL Server 2012 örnekleri olan bir uzak sunucu arasında yapılandırılır.
-
Yerel sunucu büyük küçük harf duyarlı harmanlamayı gibi bir harmanlama kullanarak yapılandırılır.
-
Uzak sunucu büyük küçük harf duyarlı alfabe düzeni gibi yerel sunucudan farklı bir harmanlama yapılandırılmış olan bir nesne var.
-
Bir bağlantı Microsoft JDBC sürücüsü'nü için SQL Server, SQL Server, SQL OLE DB sağlayıcısı veya SQL Native Client için Microsoft ODBC sürücüsü yerel sunucuya yapılır.
-
Sürücü olarak yerel sunucuda sp_prepexec saklı yordamı çağıran hazırlanmış deyimi Transact-SQL güncelleştirme sorgusu yürütür.
-
Uzak sunucudaki bir tablonun sorgusunu güncelleştirir. Bu yerel sunucudan farklı bir alfabe kullanan bir column nesnesi içerir.
Bu senaryoda sorgu yürütme düşük performansla karşılaşabilirsiniz. Güncelleştirme sorgusu yürütme planını denetle, süzme olmadan uzaktan tarama tablosunda bir uzak sunucu üzerinde gerçekleştirilir görebilirsiniz. Bu nedenle, uzak tablo tarar ve sonra yerel sunucuya tüm satırları alır çok okuma sorgu gerçekleştirebilir.
Örneğin, sorgu yerel sunucuda varsayılan büyük küçük harf duyarlı alfabe düzeni var. hazırlanır ve uzak sunucu T1 büyük küçük harf duyarlı olan bir sütunu içeren bir tablo vardır. Update T1tüm satırların tarar.
DECLARE @p1 INTEXEC sp_prepexec @p1 output, N'@P0 NVARCHAR(16), @P1 NVARCHAR(16)',
N'UPDATE RemoteServer.RemoteDatabase.dbo.T1 SET COL1=@P0 WHERE COL2=@P1',
N'a', N'a'
SELECT @p1
Neden
Sorun, uzak tablo prepared güncelleştirme sorgusu tarayacağı harmanlama sunucularda hem de eşleşmediğinde oluşur.
Çözüm
Düzeltme uygulandıktan sonra izleme bayrağı 4199 bağlantılı sunucu barındıran yerel sunucuda etkinleştirmeniz gerekir. Hakkında traceflag etkinleştirmek için lütfen daha fazla bilgi bölümüne bakın.
Not: Düzeltme yalnızca hazırlanmış deyimleri en iyi duruma getirir ve bağlantılı sunucu barındıran yerel sunucuya uygulanır. Bu düzeltme, uzak sunucuya uygulanmaz.
Sorun ilk olarak SQL Server aşağıdaki toplu güncelleştirmede giderilmiştir.
SQL Server 2012 SP1 için toplu güncelleştirme 6/en-us/help/2874879
Her yeni bir toplu güncelleştirme SQL Server için tüm düzeltmeleri içerir ve tüm güvenlik, düzeltmelerini önceki toplu güncelleştirme ile birlikte. SQL Server için en son toplu güncelleştirme denetleyin:
Düzeltme bilgileriMicrosoft, desteklenen bir düzeltmeyi kullanıma sunmuştur. Ancak bu düzeltme yalnızca bu makalede anlatılan sorunu düzeltmek amacıyla hazırlanmıştır. Bu düzeltmeyi yalnızca bu sorunla karşılaşmış olan sistemlere uygulayın.
İndirilebilir bir düzeltme varsa, bu Bilgi Bankası makalesinin üst kısmında "Düzeltme İndirilebilir" bölümü bulunur. Bu bölüm görünmüyorsa, düzeltmeyi edinmek üzere Microsoft Müşteri Hizmetleri ve Destek bölümüne bir istek gönderin.
Not: Ek sorunlar oluşursa veya sorun giderme gerekiyorsa, ayrı bir hizmet isteği oluşturmanız gerekebilir. Ek destek sorularına ve bu düzeltme için geçerli olmayan sorunlara normal destek ücretleri uygulanır. Tam listesi Microsoft Müşteri Hizmetleri ve destek telefon numaralarını veya ayrı bir hizmet isteği oluşturmak için aşağıdaki Microsoft Web sitesini ziyaret edin:
http://support.microsoft.com/contactus/?ws=supportNot: "Düzeltme indirilebilir” formu, düzeltmenin indirilebildiği dilleri görüntüler. Kendi dilinizi görmüyorsanız, bu dil için bir düzeltme mevcut değil demektir.
ÖnkoşullarBu düzeltmeyi uygulamak için SQL Server 2012 yüklü olması gerekir.
Kayıt defteri bilgileriBu düzeltmeyi uyguladıktan sonra kayıt defterini değiştirmeniz gerekmez.
Düzeltme değiştirme bilgileriBu düzeltme eki, başka düzeltmelerin yerini almaz.
Durum
Microsoft bu sorunun "Aşağıdakilere Uygulanır" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.
Geçici çözüm
Çalışmak için sorun abound, aşağıdaki yöntemlerden birini kullanın:
-
İstemci uygulama kaynak kodunda hazırlanmış deyimleri kullanmayın. Sürücü bu arabirimleri desteklemesi durumunda geçici deyimleri veya saklı yordamlar gibi çağrılabilir deyimleri yerine kullanabilirsiniz.
-
Her iki sunucularda eşleşen bir harmanlama kullanın.
Daha fazla bilgi
İzleme bayrağı'nı etkinleştirmek için başlangıç parametresini ekleyin -T4199 veya davranışını etkinleştirmek için hazırlanmış deyimi derlenmiş önce DBCC TRACEON(4199,-1) .
İzleme bayrağı'nı etkinleştirmek için aşağıdaki yöntemlerden birini kullanabilirsiniz:
-
SQL Server başlamadan önce Microsoft SQL Server Configuration Manager kullanın, etkilenen örneğini sağ tıklatın ve başlangıç parametresini ekleyin -T4199 örnek için tüm bağlantıları ve yeniden başlatmalar arasında gelecekte devam böylece.
-
Dinamik olarak hizmeti başlatıldıktan sonra çalışma zamanında ve genel olarak tüm bağlantılar "(-1) için ayarı etkinleştirin." Açık veya kapalı anahtarı ile test yapmayı planlıyorsanız, yordam önbelleği boşaltmak emin olun.
Ayarı etkinleştirmek için aşağıdaki kullanın genel ve dinamik olarak:
DBCC TRACEON(4199,-1)DBCC TRACESTATUS(-1)
DBCC FREEPROCCACHE
Bu ayarı devre dışı bırakmak için aşağıdaki kullanın genel ve dinamik olarak:
DBCC TRACEOFF(4199,-1)DBCC TRACESTATUS(-1)
DBCC FREEPROCCACHE