Bagikan melalui


Memahami Collation dan Service Broker

Berlaku untuk: SQL ServerAzure SQL Managed Instance

Service Broker dirancang untuk memungkinkan layanan dan aplikasi dalam instans dengan konfigurasi kolase yang berbeda berkomunikasi dengan mudah dan efisien. Database yang menghosting layanan yang mengirim pesan mungkin tidak menggunakan kolase yang sama dengan database yang menghosting layanan yang menerima pesan. Oleh karena itu, Service Broker menggunakan kolasi yang konsisten untuk nama, terlepas dari kolasi database yang menghosting layanan. Untuk menghapus informasi pengurutan dari proses komunikasi, Service Broker menggunakan perbandingan byte per byte untuk mencocokkan nama layanan, nama kontrak, dan nama jenis pesan. Dengan mencocokkan nama dalam bentuk urutan byte, Service Broker memudahkan layanan untuk bertukar pesan dengan benar tanpa overhead ekstra untuk bertukar informasi pengurutan.

Pencocokan byte demi byte secara efektif adalah perbandingan biner yang tidak mempertimbangkan pengurutan. Untuk alasan ini, banyak layanan pialang merasa nyaman mengikuti rekomendasi dalam Memberi Nama pada Objek Pialang Layanan. Aplikasi yang mengikuti panduan ini dan memperlakukan semua nama sebagai sensitif huruf besar-kecil harus berfungsi dengan benar terlepas dari perbedaan urutan antara database yang menghosting layanan target dan database yang menghosting layanan yang memulai.

Pertimbangan Pengurutan Antrean

Antrean memakai kolasi yang konsisten terlepas dari kolasi default yang digunakan instans SQL Server atau kolasi default pada database yang menghosting antrean. Jika antrean adalah target pernyataan SELECT yang menyertakan pernyataan JOIN dengan tabel lain dalam database, seperti tabel yang digunakan untuk mempertahankan status, Anda mungkin diharuskan untuk secara eksplisit menentukan kolase untuk perbandingan.

Misalnya, aplikasi yang menggunakan retensi pesan mungkin perlu mempertahankan beberapa pesan untuk percakapan sebelum aplikasi mengakhiri percakapan. Sampel kode Transact-SQL berikut menyimpan semua pesan, untuk percakapan tertentu, yang memiliki nama jenis pesan dalam tabel AuditedMessageTypes.

    IF @messageTypeName =
      'https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog'
    BEGIN
      INSERT INTO dbo.AuditRecord
        SELECT q.message_type_name, q.message_body
          FROM dbo.ApplicationQueue AS q
            JOIN dbo.AuditedMessageTypes AS am ON
                 am.message_type_name = q.message_type_name
                 COLLATE Latin1_General_BIN
               AND
                 q.conversation_handle = @conversationHandle
       END CONVERSATION @conversationHandle
    END

Pernyataan SELECT secara eksplisit menentukan perbandingan biner untuk mencocokkan nama jenis pesan. Karena antrean tidak menggunakan kolase default database, klausa COLLATE diperlukan agar perbandingan am.message_type_name = q.message_type_name berhasil. Pernyataan menentukan kolasi biner, Latin1_General_BIN, untuk mencocokkan perilaku pengurutan internal yang digunakan oleh Service Broker untuk mencocokkan nama layanan.

Pertimbangan Kolajeksi Aplikasi

Service Broker mengirimkan isi pesan sebagai data biner dan tidak mengubah konten pesan. Jika aplikasi bertukar data yang sensitif terhadap kolase, aplikasi harus menangani perbedaan kolase apa pun. Aplikasi yang bertukar teks umumnya menggunakan jenis Unicode untuk membantu meminimalkan masalah kolase.

Lihat juga