CREATE ROUTE (Transact-SQL)

Berlaku untuk: SQL Server Azure SQL Managed Instance

Menambahkan rute baru ke tabel perutean untuk database saat ini. Untuk pesan keluar, Service Broker menentukan perutean dengan memeriksa tabel perutean di database lokal. Untuk pesan tentang percakapan yang berasal dari instans lain, termasuk pesan yang akan diteruskan, Service Broker memeriksa rute di msdb.

Konvensi sintaks transact-SQL

Sintaks

CREATE ROUTE route_name  
[ AUTHORIZATION owner_name ]  
WITH    
   [ SERVICE_NAME = 'service_name', ]  
   [ BROKER_INSTANCE = 'broker_instance_identifier' , ]  
   [ LIFETIME = route_lifetime , ]  
   ADDRESS =  'next_hop_address'  
   [ , MIRROR_ADDRESS = 'next_hop_mirror_address' ]  
[ ; ]  

Argumen

route_name
Adalah nama rute yang akan dibuat. Rute baru dibuat dalam database saat ini dan dimiliki oleh prinsipal yang ditentukan dalam klausa OTORISASI. Nama server, database, dan skema tidak dapat ditentukan. route_name harus berupa sysname yang valid.

owner_name OTORISASI
Mengatur pemilik rute ke pengguna atau peran database yang ditentukan. owner_name dapat menjadi nama pengguna atau peran yang valid ketika pengguna saat ini adalah anggota peran database tetap db_owner atau peran server tetap sysadmin. Jika tidak, owner_name harus menjadi nama pengguna saat ini, nama pengguna tempat pengguna saat ini memiliki izin IMPERSONATE, atau nama peran tempat pengguna saat ini berada. Ketika klausa ini dihilangkan, rute milik pengguna saat ini.

WITH
Memperkenalkan klausa yang menentukan rute yang sedang dibuat.

SERVICE_NAME = 'service_name'
Menentukan nama layanan jarak jauh yang dituju rute ini. service_name harus sama persis dengan nama yang digunakan layanan jarak jauh. Service Broker menggunakan perbandingan byte-byte untuk mencocokkan service_name. Dengan kata lain, perbandingannya peka huruf besar/kecil dan tidak mempertimbangkan kolate saat ini. Jika SERVICE_NAME dihilangkan, rute ini cocok dengan nama layanan apa pun, tetapi memiliki prioritas yang lebih rendah untuk pencocokan daripada rute yang menentukan SERVICE_NAME. Rute dengan nama layanan 'SQL/ServiceBroker/BrokerConfiguration' adalah rute ke layanan Pemberitahuan Konfigurasi Broker. Rute ke layanan ini mungkin tidak menentukan instans broker.

BROKER_INSTANCE = 'broker_instance_identifier'
Menentukan database yang menghosting layanan target. Parameter broker_instance_identifier harus menjadi pengidentifikasi instans broker untuk database jarak jauh, yang dapat diperoleh dengan menjalankan kueri berikut dalam database yang dipilih:

SELECT service_broker_guid  
FROM sys.databases  
WHERE database_id = DB_ID()  

Ketika klausul BROKER_INSTANCE dihilangkan, rute ini cocok dengan instans broker apa pun. Rute yang cocok dengan instans broker apa pun memiliki prioritas yang lebih tinggi untuk pencocokan daripada rute dengan instans broker eksplisit ketika percakapan tidak menentukan instans broker. Untuk percakapan yang menentukan instans broker, rute dengan instans broker memiliki prioritas lebih tinggi daripada rute yang cocok dengan instans broker apa pun.

route_lifetime SEUMUR = HIDUP
Menentukan waktu, dalam detik, yang SQL Server mempertahankan rute dalam tabel perutean. Pada akhir masa pakai, rute kedaluwarsa, dan SQL Server tidak lagi mempertimbangkan rute saat memilih rute untuk percakapan baru. Jika klausa ini dihilangkan, route_lifetime null dan rute tidak pernah kedaluwarsa.

ADDRESS ='next_hop_address'
Untuk SQL Managed Instance, ADDRESS harus lokal.

Menentukan alamat jaringan untuk rute ini. next_hop_address menentukan alamat TCP/IP dalam format berikut:

ip_address netbios_name TCP://{ dns_name | | }:port_number

port_number yang ditentukan harus cocok dengan nomor port untuk titik akhir Service Broker instans SQL Server di komputer yang ditentukan. Ini bisa diperoleh dengan menjalankan kueri berikut dalam database yang dipilih:

SELECT tcpe.port  
FROM sys.tcp_endpoints AS tcpe  
INNER JOIN sys.service_broker_endpoints AS ssbe  
   ON ssbe.endpoint_id = tcpe.endpoint_id  
WHERE ssbe.name = N'MyServiceBrokerEndpoint';  

Saat layanan dihosting dalam database cermin, Anda juga harus menentukan MIRROR_ADDRESS untuk instans lain yang menghosting database cermin. Jika tidak, rute ini tidak gagal ke cermin.

Saat rute menentukan 'LOCAL' untuk next_hop_address, pesan dikirimkan ke layanan dalam instans SQL Server saat ini.

Ketika rute menentukan 'TRANSPORT' untuk next_hop_address, alamat jaringan ditentukan berdasarkan alamat jaringan atas nama layanan. Rute yang menentukan 'TRANSPORT' mungkin tidak menentukan nama layanan atau instans broker.

MIRROR_ADDRESS ='next_hop_mirror_address'
Menentukan alamat jaringan untuk database cermin dengan satu database cermin yang dihosting di next_hop_address. next_hop_mirror_address menentukan alamat TCP/IP dalam format berikut:

ip_address netbios_name TCP://{ dns_name | | }:port_number

port_number yang ditentukan harus cocok dengan nomor port untuk titik akhir Service Broker instans SQL Server di komputer yang ditentukan. Ini bisa diperoleh dengan menjalankan kueri berikut dalam database yang dipilih:

SELECT tcpe.port  
FROM sys.tcp_endpoints AS tcpe  
INNER JOIN sys.service_broker_endpoints AS ssbe  
   ON ssbe.endpoint_id = tcpe.endpoint_id  
WHERE ssbe.name = N'MyServiceBrokerEndpoint';  

Saat MIRROR_ADDRESS ditentukan, rute harus menentukan klausa SERVICE_NAME dan klausa BROKER_INSTANCE. Rute yang menentukan 'LOCAL' atau 'TRANSPORT' untuk next_hop_address mungkin tidak menentukan alamat cermin.

Keterangan

Tabel perutean yang menyimpan rute adalah tabel metadata yang dapat dibaca melalui tampilan katalog sys.routes . Tampilan katalog ini hanya dapat diperbarui melalui pernyataan CREATE ROUTE, ALTER ROUTE, dan DROP ROUTE.

Secara default, tabel perutean di setiap database pengguna berisi satu rute. Rute ini bernama AutoCreatedLocal. Rute menentukan 'LOCAL' untuk next_hop_address dan cocok dengan nama layanan dan pengidentifikasi instans broker apa pun.

Ketika rute menentukan 'TRANSPORT' untuk next_hop_address, alamat jaringan ditentukan berdasarkan nama layanan. SQL Server dapat berhasil memproses nama layanan yang dimulai dengan alamat jaringan dalam format yang valid untuk next_hop_address.

Tabel perutean dapat berisi sejumlah rute yang menentukan layanan, alamat jaringan, dan pengidentifikasi instans broker yang sama. Dalam hal ini, Service Broker memilih rute menggunakan prosedur yang dirancang untuk menemukan kecocokan paling tepat antara informasi yang ditentukan dalam percakapan dan informasi dalam tabel perutean.

Service Broker tidak menghapus rute yang kedaluwarsa dari tabel perutean. Rute yang kedaluwarsa dapat dibuat aktif menggunakan pernyataan ALTER ROUTE.

Rute tidak boleh berupa objek sementara. Nama rute yang dimulai dengan # diizinkan, tetapi merupakan objek permanen.

Izin

Izin untuk membuat rute default ke anggota peran database tetap db_ddladmin atau db_owner dan peran server tetap sysadmin .

Contoh

A. Membuat rute TCP/IP dengan menggunakan nama DNS

Contoh berikut membuat rute ke layanan //Adventure-Works.com/Expenses. Rute menentukan bahwa pesan ke layanan ini melakukan perjalanan melalui TCP ke port 1234 pada host yang diidentifikasi dengan nama www.Adventure-Works.comDNS . Server target mengirimkan pesan saat kedatangan ke instans broker yang diidentifikasi oleh pengidentifikasi D8D4D268-00A3-4C62-8F91-634B89C1E315unik .

CREATE ROUTE ExpenseRoute  
    WITH  
    SERVICE_NAME = '//Adventure-Works.com/Expenses',  
    BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89C1E315',  
    ADDRESS = 'TCP://www.Adventure-Works.com:1234' ;  

B. Membuat rute TCP/IP dengan menggunakan nama NetBIOS

Contoh berikut membuat rute ke layanan //Adventure-Works.com/Expenses. Rute menentukan bahwa pesan ke layanan ini melakukan perjalanan melalui TCP ke port 1234 pada host yang diidentifikasi oleh nama SERVER02NetBIOS . Setelah kedatangan, target SQL Server mengirimkan pesan ke instans database yang diidentifikasi oleh pengidentifikasi D8D4D268-00A3-4C62-8F91-634B89C1E315unik .

CREATE ROUTE ExpenseRoute  
    WITH   
    SERVICE_NAME = '//Adventure-Works.com/Expenses',  
    BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89C1E315',  
    ADDRESS = 'TCP://SERVER02:1234' ;  

C. Membuat rute TCP/IP dengan menggunakan alamat IP

Contoh berikut membuat rute ke layanan //Adventure-Works.com/Expenses. Rute menentukan bahwa pesan ke layanan ini melakukan perjalanan melalui TCP ke port 1234 pada host di alamat 192.168.10.2IP . Pada saat kedatangan, target SQL Server mengirimkan pesan ke instans broker yang diidentifikasi oleh pengidentifikasi D8D4D268-00A3-4C62-8F91-634B89C1E315unik .

CREATE ROUTE ExpenseRoute  
    WITH  
    SERVICE_NAME = '//Adventure-Works.com/Expenses',  
    BROKER_INSTANCE = 'D8D4D268-00A3-4C62-8F91-634B89C1E315',  
    ADDRESS = 'TCP://192.168.10.2:1234' ;  

D. Membuat rute ke broker penerusan

Contoh berikut membuat rute ke broker penerusan di server dispatch.Adventure-Works.com. Karena nama layanan dan pengidentifikasi instans broker tidak ditentukan, SQL Server menggunakan rute ini untuk layanan yang tidak memiliki rute lain yang ditentukan.

CREATE ROUTE ExpenseRoute  
    WITH  
    ADDRESS = 'TCP://dispatch.Adventure-Works.com' ;   

E. Membuat rute ke layanan lokal

Contoh berikut membuat rute ke layanan //Adventure-Works.com/LogRequests dalam instans yang sama dengan rute.

CREATE ROUTE LogRequests  
    WITH  
    SERVICE_NAME = '//Adventure-Works.com/LogRequests',  
    ADDRESS = 'LOCAL' ;  

F. Membuat rute dengan masa pakai tertentu

Contoh berikut membuat rute ke layanan //Adventure-Works.com/Expenses. Masa pakai untuk rute adalah 259200 detik, yang sama dengan 72 jam.

CREATE ROUTE ExpenseRoute  
    WITH  
    SERVICE_NAME = '//Adventure-Works.com/Expenses',  
    LIFETIME = 259200,  
    ADDRESS = 'TCP://services.Adventure-Works.com:1234' ;  

G. Membuat rute ke database cermin

Contoh berikut membuat rute ke layanan //Adventure-Works.com/Expenses. Layanan ini dihosting dalam database yang dicerminkan. Salah satu database cermin terletak di alamat services.Adventure-Works.com:1234, dan database lainnya terletak di alamat services-mirror.Adventure-Works.com:1234.

CREATE ROUTE ExpenseRoute  
    WITH  
    SERVICE_NAME = '//Adventure-Works.com/Expenses',  
    BROKER_INSTANCE = '69fcc80c-2239-4700-8437-1001ecddf933',  
    ADDRESS = 'TCP://services.Adventure-Works.com:1234',   
    MIRROR_ADDRESS = 'TCP://services-mirror.Adventure-Works.com:1234' ;  

H. Membuat rute yang menggunakan nama layanan untuk perutean

Contoh berikut membuat rute yang menggunakan nama layanan untuk menentukan alamat jaringan yang akan dikirimi pesan. Perhatikan bahwa rute yang menentukan 'TRANSPORT' sebagai alamat jaringan memiliki prioritas yang lebih rendah untuk pencocokan daripada rute lainnya.

CREATE ROUTE TransportRoute  
    WITH ADDRESS = 'TRANSPORT' ;  

Lihat juga

ALTER ROUTE (Transact-SQL)
DROP ROUTE (Transact-SQL)
EVENTDATA (Transact-SQL)