Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
OLE DB sürücüsünü indirme
Sql Server 2005 (9.x) ve SQL Server için OLE DB Sürücüsü'nde sorgu bildirimleri tanıtıldı. SQL Server 2005'te (9.x) kullanıma sunulan SQL Hizmet Aracısı altyapısını temel alan sorgu bildirimleri, veriler değiştiğinde uygulamaların bilgilendirilmesini sağlar. Bu özellik, web uygulaması gibi bir veritabanından bilgi önbelleği sağlayan ve kaynak veriler değiştirildiğinde bildirilmesi gereken uygulamalar için kullanışlıdır.
Sorgu bildirimlerini kullanarak, bir sorgunun temel verileri değiştiğinde belirtilen zaman aşımı süresi içinde bildirim isteyebilirsiniz. İstek, sunucuya hizmet adını, ileti metnini ve zaman aşımı değerini içeren bildirim seçeneklerini belirtir. Bildirimler, uygulamaların kullanılabilir bildirimleri yoklaması için bir Hizmet Aracısı kuyruğu üzerinden teslim edilir.
Sorgu bildirimleri seçenekleri dizesinin söz dizimi şöyledir:
service=<service-name>[;(local database=<database> | broker instance=<broker instance>)]
Mesela:
service=mySSBService;local database=mydb
Bildirim abonelikleri, bunları başlatan işlemden daha uzun sürebilir. Bunun nedeni, bir uygulamanın bildirim aboneliği oluşturup sonlandırabilmesidir. Abonelik geçerli kalır ve veriler belirtilen zaman aşımı süresi içinde değişirse bildirim gerçekleşir. Yürütülen sorgu, bildirim seçenekleri ve ileti metni tarafından bir bildirim tanımlanır. Zaman aşımı değerini sıfır olarak ayarlayarak iptal edebilirsiniz.
Bildirimler yalnızca bir kez gönderilir. Veri değişiklikleri hakkında sürekli bildirim almak için, her bildirim işlendikten sonra sorguyu yeniden yürüterek yeni bir abonelik oluşturun.
SQL Server uygulamaları için OLE DB Sürücüsü genellikle Transact-SQL RECEIVE komutunu kullanarak bildirim alır. Bu komutu, bildirim seçeneklerinde belirtilen hizmetle ilişkili kuyruktan gelen bildirimleri okumak için kullanır.
Not
Bildirim gerektiren sorgularda tablo adlarının nitelenmiş olması gerekir. Örneğin, dbo.myTable. Tablo adları iki parçalı adlarla nitelenmelidir. Üç veya dört bölümlü adlar kullanılıyorsa abonelik geçersizdir.
Bildirim altyapısı, SQL Server 2005'te (9.x) kullanıma sunulan bir kuyruğa alma özelliğinin üzerine kurulmuştur. Genel olarak, sunucuda oluşturulan bildirimler daha sonra işlenmek üzere bu kuyruklar aracılığıyla gönderilir.
Sorgu bildirimlerini kullanmak için sunucuda bir kuyruk ve hizmet bulunmalıdır. Bu öğeler, aşağıdakilere benzer şekilde Transact-SQL komutu kullanılarak oluşturulabilir:
CREATE QUEUE myQueue
CREATE SERVICE myService ON QUEUE myQueue
([https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification])
Not
Hizmet, yukarıda gösterildiği gibi önceden tanımlanmış sözleşmeyi kullanmalıdır.
SQL Server için OLE DB Sürücüsü
SQL Server için OLE DB Sürücüsü, satır kümesi değişikliği üzerine tüketici bildirimlerini destekler. Tüketici, satır kümesi değişikliğinin her aşamasında ve herhangi bir değişiklik girişiminde bir bildirim alır.
Not
ICommand::Execute ile sunucuya bildirim sorgusu geçirmek, SQL Server için OLE DB Sürücüsü ile sorgu bildirimlerine abone olmak için tek geçerli yoldur.
DBPROPSET_SQLSERVERROWSET özellik kümesi
OLE DB aracılığıyla sorgu bildirimlerini desteklemek için, SQL Server için OLE DB Sürücüsü DBPROPSET_SQLSERVERROWSET özellik kümesine aşağıdaki yeni özellikleri ekler.
| Ad | Tür | Açıklama |
|---|---|---|
| SSPROP_QP_NOTIFICATION_TIMEOUT | VT_UI4 | Sorgu bildiriminin etkin kalacağı saniye sayısı. Varsayılan değer 432.000 saniyedir (5 gün). En düşük değer 1 saniye, maksimum değer ise 2^31-1 saniyedir. |
| SSPROP_QP_NOTIFICATION_MSGTEXT | VT_BSTR | Bildirimin ileti metni. Bu metin kullanıcı tanımlıdır ve önceden tanımlanmış bir biçimi yoktur. Varsayılan olarak, dize boş olur. 1 ile 2000 karakter arası bir ileti belirtin. |
| SSPROP_QP_NOTIFICATION_OPTIONS | VT_BSTR | Sorgu bildirim seçenekleri. Bu seçenekler, adı=değer söz dizimine sahip bir dizede belirtilir. Kullanıcı, hizmeti oluşturmaktan ve kuyruktan bildirimleri okumaktan sorumludur. Varsayılan değer boş bir dizedir. |
Bildirim aboneliği her zaman işlenir. Deyimin bir kullanıcı işleminde mi yoksa otomatik komutta mı çalıştırıldığına ya da deyimin çalıştırıldığı veya geri alınıp alınmadığına bakılmaksızın gerçekleşir. Sunucu bildirimi, aşağıdaki geçersiz bildirim koşullarından herhangi birini tetikler: temel alınan verilerin veya şemanın değiştirilmesi veya zaman aşımı süresine ulaşıldığında; hangisi önceyse.
Bildirim kayıtları, tetiklenir tetiklenmez silinir. Bu nedenle, bildirimleri aldıktan sonra daha fazla güncelleştirme almak istiyorsanız uygulamanın yeniden abone olması gerekir.
Başka bir bağlantı veya iş parçacığı, bildirimler için hedef kuyruğu denetleyebilir. Mesela:
WAITFOR (RECEIVE * FROM MyQueue); -- Where MyQueue is the queue name.
Not
SELECT *, girdiyi kuyruktan silmez. Ancak, RECEIVE * FROM yapar. Bu, kuyruk boşsa bir sunucu iş parçacığını durdurur. Çağrı sırasında kuyruk girdileri varsa, bunlar hemen döndürülür. Aksi takdirde, çağrı bir kuyruk girişi yapılana kadar bekler.
RECEIVE * FROM MyQueue
Bu deyim, kuyruk boşsa hemen boş bir sonuç kümesi döndürür. Aksi takdirde, tüm kuyruk bildirimlerini döndürür.
SSPROP_QP_NOTIFICATION_MSGTEXT ve SSPROP_QP_NOTIFICATION_OPTIONS null değilse ve boş değilse, yukarıda tanımlanan üç özelliği içeren sorgu bildirimleri TDS üst bilgisi sunucuya gönderilir. Bu üst bilgi, komutun her yürütülmesiyle birlikte gönderilir. Bunlardan biri null (veya boş) ise, üst bilgi gönderilmez ve DB_E_ERRORSOCCURRED oluşturulur (veya özellikler isteğe bağlı olarak işaretlenirse DB_S_ERRORSOCCURRED oluşturulur). Ardından durum değeri DBPROPSTATUS_BADVALUEolarak ayarlanır. Doğrulama yürütülür ve hazırlanırken gerçekleşir. Benzer şekilde, sql server 2005 (9.x) öncesi SQL Server sürümlerine bağlantılar için sorgu bildirim özellikleri ayarlandığında DB_S_ERRORSOCCURRED oluşturulur. Bu durumda durum değeri DBPROPSTATUS_NOTSUPPORTED.
Abonelik başlatmak, gelecekteki iletilerin başarıyla teslim edileceğini garanti etmez. Ayrıca, belirtilen hizmet adının geçerliliğiyle ilgili bir denetim yapılmaz.
Not
Deyimlerin hazırlanması hiçbir zaman aboneliğin başlatılmasına neden olmaz. Yalnızca deyim yürütme başlatmayı başaracaktır. Sorgu bildirimleri OLE DB çekirdek hizmetlerinin kullanımından etkilenmez.
DBPROPSET_SQLSERVERROWSET özellik kümesi hakkında daha fazla bilgi için bkz. Satır Kümesi Özellikleri ve Davranışları.
Ayrıca bkz.
SQL Server Özellikleri için