UBAH ANTREAN (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Mengubah properti antrean.

Konvensi sintaks transact-SQL

Sintaksis

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 )  
}  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

database_name (objek)
Adalah nama database yang berisi antrean yang akan diubah. Ketika tidak ada database_name yang disediakan, ini default ke database saat ini.

schema_name (objek)
Adalah nama skema tempat antrean baru berada. Ketika tidak ada schema_name yang disediakan, ini default ke skema default untuk pengguna saat ini.

queue_name
Adalah nama antrean yang akan diubah.

STATUS (Antrean)
Menentukan apakah antrean tersedia (AKTIF) atau tidak tersedia (NONAKTIF). Ketika antrean tidak tersedia, tidak ada pesan yang dapat ditambahkan ke antrean atau dihapus dari antrean.

PENYIMPANAN
Menentukan pengaturan retensi untuk antrean. Jika RETENSI = AKTIF, semua pesan yang dikirim atau diterima pada percakapan menggunakan antrean ini dipertahankan dalam antrean hingga percakapan berakhir. Ini memungkinkan Anda menyimpan pesan untuk tujuan audit, atau melakukan kompensasi transaksi jika terjadi kesalahan

Catatan

Pengaturan RETENSI = AKTIF dapat mengurangi performa. Pengaturan ini hanya boleh digunakan jika diperlukan untuk memenuhi perjanjian tingkat layanan untuk aplikasi.

AKTIVASI
Menentukan informasi tentang prosedur tersimpan yang diaktifkan untuk memproses pesan yang tiba dalam antrean ini.

STATUS (Aktivasi)
Menentukan apakah antrean mengaktifkan prosedur tersimpan atau tidak. Ketika STATUS = AKTIF, antrean memulai prosedur tersimpan yang ditentukan dengan PROCEDURE_NAME ketika jumlah prosedur yang saat ini berjalan kurang dari MAX_QUEUE_READERS dan ketika pesan tiba pada antrean lebih cepat daripada prosedur tersimpan menerima pesan. Ketika STATUS = NONAKTIF, antrean tidak mengaktifkan prosedur tersimpan.

MEMBANGUN KEMBALI [ DENGAN <queue_rebuild_options> ]
Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru.

Membangun kembali semua indeks pada tabel internal antrean. Gunakan kemampuan ini saat Anda mengalami masalah fragmentasi karena beban tinggi. MAXDOP adalah satu-satunya opsi pembangunan kembali antrean yang didukung. REBUILD selalu merupakan operasi offline.

REORGANIZE [ WITH ( LOB_COMPACTION = { ON | OFF } ) ]
Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru.

Mengatur ulang semua indeks pada tabel internal antrean.
Tidak seperti REORGANIZE pada tabel pengguna, REORGANIZE pada antrean selalu dilakukan sebagai operasi offline karena kunci tingkat halaman secara eksplisit dinonaktifkan pada antrean.

Tip

Untuk panduan umum mengenai fragmentasi indeks, ketika fragmentasi antara 5% dan 30%, aorganisasi ulang indeks. Ketika fragmentasi di atas 30%, bangun ulang indeks. Namun, angka-angka ini hanya untuk panduan umum sebagai titik awal untuk lingkungan Anda. Untuk menentukan jumlah fragmentasi indeks, gunakan sys.dm_db_index_physical_stats (Transact-SQL) - lihat contoh G dalam artikel tersebut misalnya.

PINDAH KE { file_group | "default" }
Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru.

Memindahkan tabel internal antrean (dengan indeksnya) ke grup file yang ditentukan pengguna. Grup file baru tidak boleh bersifat baca-saja.

PROCEDURE_NAME = <prosedur>
Menentukan nama prosedur tersimpan untuk diaktifkan ketika antrean berisi pesan yang akan diproses. Nilai ini harus berupa pengidentifikasi SQL Server.

database_name (prosedur)
Adalah nama database yang berisi prosedur tersimpan.

schema_name (prosedur)
Adalah nama skema yang memiliki prosedur tersimpan.

stored_procedure_name
Adalah nama prosedur tersimpan.

MAX_QUEUE_READERS =max_reader
Menentukan jumlah maksimum instans prosedur tersimpan aktivasi yang dimulai antrean secara bersamaan. Nilai max_readers harus berupa angka antara 0 dan 32767.

JALANKAN SEBAGAI
Menentukan akun pengguna database SQL Server tempat prosedur tersimpan aktivasi berjalan. SQL Server harus dapat memeriksa izin untuk pengguna ini pada saat antrean mengaktifkan prosedur tersimpan. Untuk pengguna domain Windows, SQL Server harus tersambung ke domain dan dapat memvalidasi izin pengguna yang ditentukan saat prosedur diaktifkan atau aktivasi gagal. Untuk pengguna SQL Server, server selalu dapat memeriksa izin.

DIRI
Menentukan bahwa prosedur tersimpan dijalankan sebagai pengguna saat ini. (Prinsipal database yang menjalankan pernyataan ALTER QUEUE ini.)

'user_name'
Adalah nama pengguna tempat prosedur tersimpan dijalankan. user_name harus merupakan pengguna SQL Server yang valid yang ditentukan sebagai pengidentifikasi SQL Server. Pengguna saat ini harus memiliki izin IMPERSONATE untuk user_name yang ditentukan.

PEMILIK
Menentukan bahwa prosedur tersimpan dijalankan sebagai pemilik antrean.

DROP
Menghapus semua informasi aktivasi yang terkait dengan antrean.

POISON_MESSAGE_HANDLING
Menentukan apakah penanganan pesan racun diaktifkan. Defaultnya adalah ON.

Antrean yang memiliki penanganan pesan racun yang diatur ke NONAKTIF tidak akan dinonaktifkan setelah lima pembatalan transaksi berturut-turut. Hal ini memungkinkan sistem handing pesan racun kustom didefinisikan oleh aplikasi.

Keterangan

Ketika antrean dengan prosedur tersimpan aktivasi tertentu berisi pesan, mengubah status aktivasi dari NONAKTIF ke AKTIF segera mengaktifkan prosedur tersimpan aktivasi. Mengubah status aktivasi dari AKTIF ke NONAKTIF menghentikan broker mengaktifkan instans prosedur tersimpan, tetapi tidak menghentikan instans prosedur tersimpan yang saat ini berjalan.

Mengubah antrean untuk menambahkan prosedur tersimpan aktivasi tidak mengubah status aktivasi antrean. Mengubah prosedur tersimpan aktivasi untuk antrean tidak memengaruhi instans prosedur tersimpan aktivasi yang saat ini berjalan.

Service Broker memeriksa jumlah maksimum pembaca antrean untuk antrean sebagai bagian dari proses aktivasi. Oleh karena itu, mengubah antrean untuk meningkatkan jumlah maksimum pembaca antrean memungkinkan Service Broker untuk segera memulai lebih banyak instans prosedur tersimpan aktivasi. Mengubah antrean untuk mengurangi jumlah maksimum pembaca antrean tidak memengaruhi instans prosedur tersimpan aktivasi yang saat ini berjalan. Namun, Service Broker tidak memulai instans baru dari prosedur tersimpan sampai jumlah instans untuk prosedur tersimpan aktivasi berada di bawah jumlah maksimum yang dikonfigurasi.

Ketika antrean tidak tersedia, Service Broker menyimpan pesan untuk layanan yang menggunakan antrean dalam antrean transmisi untuk database. Tampilan katalog sys.transmission_queue menyediakan tampilan antrean transmisi.

Jika pernyataan RECEIVE atau pernyataan GET CONVERSATION GROUP menentukan antrean yang tidak tersedia, pernyataan tersebut gagal dengan kesalahan Transact-SQL.

Izin

Izin untuk mengubah antrean default ke pemilik antrean, anggota peran database tetap db_ddladmin atau db_owner, dan anggota peran server tetap sysadmin.

Contoh

J. Membuat antrean tidak tersedia

Contoh berikut membuat antrean ExpenseQueue tidak tersedia untuk menerima pesan.

ALTER QUEUE ExpenseQueue WITH STATUS = OFF ;  

B. Mengubah prosedur tersimpan aktivasi

Contoh berikut mengubah prosedur tersimpan yang dimulai antrean. Prosedur tersimpan dijalankan sebagai pengguna yang menjalankan ALTER QUEUE pernyataan.

ALTER QUEUE ExpenseQueue  
    WITH ACTIVATION (  
        PROCEDURE_NAME = new_stored_proc,  
        EXECUTE AS SELF) ;  

C. Mengubah jumlah pembaca antrean

Contoh berikut diatur ke 7 jumlah maksimum instans prosedur tersimpan yang dimulai Service Broker untuk antrean ini.

ALTER QUEUE ExpenseQueue WITH ACTIVATION (MAX_QUEUE_READERS = 7) ;  

D. Mengubah prosedur tersimpan aktivasi dan akun EXECUTE AS

Contoh berikut mengubah prosedur tersimpan yang dimulai Service Broker. Prosedur tersimpan dijalankan sebagai pengguna SecurityAccount.

ALTER QUEUE ExpenseQueue  
    WITH ACTIVATION (  
        PROCEDURE_NAME = AdventureWorks2022.dbo.new_stored_proc ,  
        EXECUTE AS 'SecurityAccount') ;  

E. Mengatur antrean untuk menyimpan pesan

Contoh berikut mengatur antrean untuk menyimpan pesan. Antrean mempertahankan semua pesan yang dikirim ke atau dari layanan yang menggunakan antrean ini hingga percakapan yang berisi pesan berakhir.

ALTER QUEUE ExpenseQueue WITH RETENTION = ON ;  

F. Menghapus aktivasi dari antrean

Contoh berikut menghapus semua informasi aktivasi dari antrean.

ALTER QUEUE ExpenseQueue WITH ACTIVATION (DROP) ;  

G. Membangun kembali indeks antrean

Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru.

Contoh berikut membangun kembali indeks antrean'

ALTER QUEUE ExpenseQueue REBUILD WITH (MAXDOP = 2)   

H. Mengatur ulang indeks antrean

Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru.

Contoh berikut mengatur ulang indeks antrean

ALTER QUEUE ExpenseQueue REORGANIZE   

I: Memindahkan tabel internal antrean ke grup file lain

Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru.

ALTER QUEUE ExpenseQueue MOVE TO [NewFilegroup]   

Lihat Juga

BUAT ANTREAN (Transact-SQL)
DROP QUEUE (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.dm_db_index_physical_stats (T-SQL)