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.
Şunlar için geçerlidir: SQL Server Azure SQL Yönetilen Örneği
Bir kuyruğun özelliklerini değiştirir.
Transact-SQL söz dizimi kuralları
Syntax
ALTER QUEUE <object>
queue_settings
| queue_action
[ ; ]
<object> : :=
{ database_name.schema_name.queue_name | schema_name.queue_name | queue_name }
<queue_settings> : :=
WITH
[ STATUS = { ON | OFF } [ , ] ]
[ RETENTION = { ON | OFF } [ , ] ]
[ ACTIVATION (
{ [ STATUS = { ON | OFF } [ , ] ]
[ PROCEDURE_NAME = <procedure> [ , ] ]
[ MAX_QUEUE_READERS = max_readers [ , ] ]
[ EXECUTE AS { SELF | 'user_name' | OWNER } ]
| DROP }
) [ , ]]
[ POISON_MESSAGE_HANDLING (
STATUS = { ON | OFF } )
]
<queue_action> : :=
REBUILD [ WITH <query_rebuild_options> ]
| REORGANIZE [ WITH (LOB_COMPACTION = { ON | OFF } ) ]
| MOVE TO { file_group | "default" }
<procedure> : :=
{ database_name.schema_name.stored_procedure_name | schema_name.stored_procedure_name | stored_procedure_name }
<queue_rebuild_options> : :=
{
( MAXDOP = max_degree_of_parallelism )
}
Arguments
database_name (nesne)
Değiştirilecek kuyruğu içeren veritabanının adı nedir. Hiçbir database_name sağlanmadığında, varsayılan olarak mevcut veritabanına geçer.
schema_name (nesne)
Yeni kuyruğun ait olduğu şemanın adıdır.
schema_name sağlanmadığında, bu mevcut kullanıcı için varsayılan şemaya uygulanır.
queue_name
Kuyruğun adı değiştirilecek mi?
DURUM (Kuyruğu)
Kuyruğun kullanılabilir (ON) veya KAPALı olup olmadığını belirtir. Kuyruk kullanılamazsa, kuyruğa mesaj eklenemez veya kuyruğun içinden çıkarılamaz.
TUTMA
Kuyruk için saklama ayarını belirler. RETENTION = ON'da, bu kuyruk kullanılarak yapılan konuşmalarda gönderilen veya alınan tüm mesajlar konuşmalar sona erene kadar kuyruğun içinde kalır. Bu, mesajları denetim amacıyla saklamanızı veya hata oluştuysa telafi işlemleri gerçekleştirmenize olanak tanır
Note
RETENTION = ON olarak ayarlamak performansı düşürebilir. Bu ayar yalnızca başvuru için hizmet seviyesi anlaşmasını karşılamak için gereklidirse kullanılmalıdır.
ETKİNLEŞTİRME
Bu kuyruğun içine gelen mesajları işlemek için etkinleştirilen saklanan prosedür hakkında bilgileri belirtir.
DURUM (Aktivasyon)
Kuyruğun saklanan prosedürü etkinleştirip etkinleştirmediğini belirtir. STATUS = ON'da, kuyruk PROCEDURE_NAME ile belirtilen saklanan prosedürü başlatır; şu anda çalışan prosedür sayısı MAX_QUEUE_READERS'den az ve mesajlar kuyruğa daha hızlı ulaştığında, saklanan prosedürler mesaj aldığından daha hızlı gelir. STATUS = KAPALI olduğunda, kuyruk saklanan prosedürü etkinleştirmez.
YENIDEN İNŞA [ queue_rebuild_options> ILE <]
için geçerlidir: SQL Server 2016 (13.x) ve üzeri.
Kuyruk iç tablosunda tüm indeksleri yeniden oluşturur. Yüksek yük nedeniyle parçalanma sorunları yaşadığınızda bu özelliği kullanın. MAXDOP desteklenen tek kuyruk yeniden oluşturma seçeneğidir. REBUILD her zaman çevrimdışı bir operasyondur.
YENIDEN DÜZENLE [ ILE ( LOB_COMPACTION = { ÜZERINDE | KAPALI } ) ]
için geçerlidir: SQL Server 2016 (13.x) ve üzeri.
Kuyruk iç tablosunda tüm indeksleri yeniden düzenleyin.
Kullanıcı tablolarında REORGANIZE uygulamasının aksine, kuyruk üzerindeki REORGANIZE her zaman çevrimdışı bir işlem olarak yapılır çünkü sayfa seviyesindeki kilitler kuyruk üzerinde açıkça devre dışı bırakılmıştır.
İpucu
Indeks parçalanması ile ilgili genel rehberlik için, parçalanma 5% ile 30%arasında olduğunda, indeks yeniden düzenlenir. Parçalanma 30%üzerindeyse, indeks yeniden oluşturulur. Ancak bu rakamlar çevreniz için genel bir rehberlik için geçerlidir. Indeks parçalanma miktarını belirlemek için sys.dm_db_index_physical_stats (Transact-SQL) kullanın - örnekler için o makaledeki G örneğine bakınız.
{ file_group | SAYFASINA TAŞIN "default" }
için geçerlidir: SQL Server 2016 (13.x) ve üzeri.
Kuyruk iç tablosunu (indeksleriyle birlikte) kullanıcı tarafından belirlenen bir dosya grubuna taşır. Yeni dosya grubu yalnızca okunabilir olmamalıdır.
PROCEDURE_NAME = <prosedür>
Kuyruk işlenecek mesajları içerdiğinde aktive edilecek saklanan prosedürün adını belirtir. Bu değer bir SQL Server tanımlayıcısı olmalıdır.
database_name (prosedür)
Saklanan prosedürü içeren veritabanının adıdır.
schema_name (prosedür)
Depolanan prosedürün sahibi şemanın adıdır.
stored_procedure_name
Saklanan prosedürün adıdır.
MAX_QUEUE_READERS =max_reader
Kuyruğun eşzamanlı olarak başladığı aktivasyon depolanan prosedürün maksimum örneklerini belirtir.
max_readers değeri 0 ile 32767 arasında bir sayı olmalıdır.
EXECUTE AS
Aktivasyon prosedürünün çalıştığı SQL Server veritabanı kullanıcı hesabını belirtir. SQL Server, kuyruğun depolanmış prosedürü etkinleştirdiği anda bu kullanıcının izinlerini kontrol edebilmelidir. Windows alan alanı kullanıcısı için, SQL Server alan adına bağlı olmalı ve prosedür etkinleştirildiğinde veya aktivasyon başarısız olduğunda belirtilen kullanıcının izinlerini doğrulayabilmelidir. Bir SQL Server kullanıcısı için sunucu her zaman izinleri kontrol edebilir.
KENDİ
Saklanan prosedürün mevcut kullanıcı olarak çalıştırıldığını belirtir. (Bu ALTER QUEUE ifadeyi yürüten veritabanı prüdürü.)
'user_name'
Saklanan prosedürün çalıştırdığı kullanıcının adıdır. user_name, SQL Server tanımlayıcı olarak belirtilen geçerli bir SQL Server kullanıcısı olmalıdır. Mevcut kullanıcı, belirtilen user_name için KIMSE iznine sahip olmalıdır.
SAHİP
Saklanan prosedürün kuyruğun sahibi olarak çalıştırıldığını belirtir.
DROP
Kuyruk ile ilişkili tüm aktivasyon bilgilerini siler.
POISON_MESSAGE_HANDLING
Zehirli mesaj işlemenin etkin olup olmadığını belirtir. Varsayılan değer ON'dır.
Zehir mesajı işleme KAPALı olarak ayarlanmış bir kuyruk, beş ardışık işlem geri dönüşünden sonra devre dışı bırakılmaz. Bu, uygulama tarafından özel bir zehir mesajı işleme sisteminin tanımlanmasına olanak tanır.
Remarks
Belirli bir aktivasyon saklanan prosedüre sahip bir kuyruk mesaj içerdiğinde, aktivasyon durumunu KAPA'dan ON'a değiştirmek, aktivasyon depolanan prosedürü hemen etkinleştirilir. Aktivasyon durumunu AÇIK KAPALI olarak değiştirmek, aracı kurumun depolanan prosedürün örneklerini etkinleştirmesini engeller, ancak şu anda çalışan saklanan prosedürün örneklerini durdurmaz.
Bir kuyruğu aktivasyon depolanmış prosedür eklemek için değiştirmek, kuyruğun aktivasyon durumunu değiştirmez. Kuyruk için aktivasyon depolama prosedürünün değiştirilmesi, şu anda çalışan aktivasyon depolanmış prosedürünün örneklerini etkilemez.
Service Broker, aktivasyon sürecinin bir parçası olarak kuyruk okuyucu sayısının maksimum sayısını kontrol eder. Bu nedenle, kuyruğu maksimum sayıda kuyruk okuyucu sayısını artırmak için değiştirilmek, Service Broker'ın etkinleştirme depolanan prosedürünün daha fazla örneğini hemen başlatmasını sağlar. Bir kuyruğu maksimum kuyruk okuyucu sayısını azaltmak için değiştirmek, şu anda çalışan aktivasyon depolanan prosedürün örneklerini etkilemez. Ancak, Service Broker, aktivasyon depolanan prosedür için kullanılan örnekler sayısı ayarlanmış maksimum sayının altına düşmedikçe yeni bir işlem başlatmaz.
Bir kuyruk kullanılamazsa, Service Broker, veritabanı için iletim kuyruğunda kuyruğu kullanan servisler için mesajları tutar. sys.transmission_queue katalog görünümü, iletim kuyruğunun görünümünü sunar.
Bir RECEIVE ifade veya GET CONVERSATION GROUP bir ifade kullanılabilir olmayan bir kuyruk belirtirse, o ifade Transact-SQL hatasıyla başarısız olur.
Permissions
Kuyruğu değiştirme izni, varsayılan olarak kuyruğun sahibine, db_ddladmin veya db_owner sabit veritabanı rollerinin üyelerine ve sistem yöneticisi sabit sunucu rolünün üyelerine aitti.
Examples
A. Kuyruğu kullanılabilir hale getirme
Aşağıdaki örnek, kuyruğun ExpenseQueue mesaj almak için kullanılamaz olmasını sağlar.
ALTER QUEUE ExpenseQueue WITH STATUS = OFF ;
B. Aktivasyon depolanan prosedürün değiştirilmesi
Aşağıdaki örnek, kuyruğun başlattığı depolanmış prosedürü değiştirir. Saklanan prosedür, ifadeyi ALTER QUEUE çalıştıran kullanıcı olarak çalıştırılır.
ALTER QUEUE ExpenseQueue
WITH ACTIVATION (
PROCEDURE_NAME = new_stored_proc,
EXECUTE AS SELF) ;
C. Kuyruk okuyucu sayısının değiştirilmesi
Aşağıdaki örnek, Service Broker'ın bu kuyruk için başlattığı maksimum depolanmış işlem örneği sayısını belirler 7 .
ALTER QUEUE ExpenseQueue WITH ACTIVATION (MAX_QUEUE_READERS = 7) ;
D. Aktivasyon saklanan prosedürünü ve EXECUTE AS hesabı değiştirmek
Aşağıdaki örnek, Service Broker'ın başlattığı depolanmış prosedürü değiştirir. Saklanan prosedür kullanıcı SecurityAccountolarak çalıştırılır.
ALTER QUEUE ExpenseQueue
WITH ACTIVATION (
PROCEDURE_NAME = AdventureWorks2022.dbo.new_stored_proc ,
EXECUTE AS 'SecurityAccount') ;
E. Kuyruğu mesajları tutacak şekilde ayarlama
Aşağıdaki örnek, kuyruğun mesajları tutmasını sağlar. Kuyruk, bu kuyruğu kullanan servislere gönderilen veya gelen tüm mesajları, mesajı içeren konuşma sona erene kadar saklar.
ALTER QUEUE ExpenseQueue WITH RETENTION = ON ;
F. Kuyruğun aktivasyonunu kaldırmak
Aşağıdaki örnek, kuyruktaki tüm aktivasyon bilgilerini kaldırır.
ALTER QUEUE ExpenseQueue WITH ACTIVATION (DROP) ;
G. Kuyruk indekslerini yeniden oluşturmak
için geçerlidir: SQL Server 2016 (13.x) ve üzeri.
Aşağıdaki örnek, kuyruk indekslerini yeniden oluşturur
ALTER QUEUE ExpenseQueue REBUILD WITH (MAXDOP = 2)
H. Kuyruk indekslerini yeniden düzenlemek
için geçerlidir: SQL Server 2016 (13.x) ve üzeri.
Aşağıdaki örnek, kuyruk indekslerini yeniden düzenler
ALTER QUEUE ExpenseQueue REORGANIZE
I: Kuyruk dahili tablosunu başka bir dosya grubuna taşımak
için geçerlidir: SQL Server 2016 (13.x) ve üzeri.
ALTER QUEUE ExpenseQueue MOVE TO [NewFilegroup]
Ayrıca Bkz.
CREATE QUEUE (Transact-SQL)
DROP QUEUE (Transact-SQL)
OLAY VERILERI (Transact-SQL)
sys.dm_db_index_physical_stats (Transact-SQL)