Artikel ini memberikan contoh membuat server tertaut di SQL Server menggunakan Transact-SQL. Menggunakan T-SQL memungkinkan Anda membuat server tertaut tanpa bergantung pada antarmuka pengguna grafis (seperti SSMS).
Sintaks
Untuk membuat server tertaut menggunakan T-SQL, gunakan sp_addlinkedserver
prosedur tersimpan sistem.
Sintaks resminya seperti ini:
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ] [ , [ @provider= ] 'provider_name' ] [ , [ @datasrc= ] 'data_source' ] [ , [ @location= ] 'location' ] [ , [ @provstr= ] 'provider_string' ] [ , [ @catalog= ] 'catalog' ]
Sebagian besar argumen bersifat opsional, tetapi Anda harus memberikan nama server tertaut.
Anda juga mungkin ingin menentukan sumber data atau lokasi server tertaut, dan mungkin nama penyedia. catalog
argumen memungkinkan Anda untuk menentukan database default yang dipetakan ke server tertaut. Lihat dokumentasi resmi Microsoft untuk penjelasan masing-masing argumen ini.
Contoh – Buat Server Tertaut
Untuk membuat server tertaut menggunakan T-SQL, jalankan sp_addlinkedserver
prosedur tersimpan sambil meneruskan nama server tertaut serta sumbernya.
Berikut ini contoh membuat server tertaut:
EXEC sp_addlinkedserver @server=N'Homer', @srvproduct=N'', @provider=N'MSOLEDBSQL', @datasrc=N'172.17.0.2,1433', @catalog='Music';
Dalam hal ini, nama server yang ditautkan adalah "Homer" dan saya menentukan alamat IP server, diikuti oleh port TCP (dalam kasus saya ini sebenarnya adalah wadah Docker di mesin yang sama). Ubah nama server dan alamat IP/port sesuai kebutuhan. Saya juga menentukan database default yang disebut "Musik".
Contoh ini menggunakan MSOLEDBSQL
sebagai nama penyedia, tetapi Anda dapat menggunakan nama penyedia mana pun yang sesuai dengan situasi Anda. Dalam kasus saya, saya menautkan ke contoh lain dari SQL Server.
Perhatikan bahwa MSOLEDBSQL
adalah penyedia yang direkomendasikan untuk SQL Server. Jika sebelumnya Anda pernah menggunakan SQLOLEDB
atau SQLNCLI
, keduanya sekarang tidak digunakan lagi. Microsoft memutuskan untuk tidak menggunakan OLE DB dan merilisnya pada tahun 2018.
Jika Anda menautkan ke Oracle, Anda dapat menggunakan OraOLEDB.Oracle
, untuk MS Access Anda dapat menggunakan Microsoft.Jet.OLEDB.4.0
(untuk Mengakses format 2002-2003) atau Microsoft.ACE.OLEDB.12.0
(untuk format 2007). Dokumentasi resmi memiliki tabel parameter yang digunakan untuk skenario yang berbeda.
Uji Server Tertaut
Setelah Anda menambahkan server tertaut, Anda dapat menggunakan sp_testlinkedserver
untuk mengujinya:
EXEC sp_testlinkedserver Homer;
Hasil (jika berhasil):
Commands completed successfully.
Jika Anda mendapatkan kesalahan “Login failed”, kemungkinan Anda tidak memiliki login yang sesuai di server jarak jauh. Anda harus memiliki login yang sesuai dengan kredensial yang sama dengan yang ada di server lokal.
Cara kerjanya adalah, ketika Anda pertama kali menambahkan server tertaut, pemetaan default antara semua login di server lokal dan login jarak jauh di server tertaut dibuat secara otomatis. SQL Server menggunakan kredensial login lokal saat menyambung ke server tertaut atas nama login. Jika login lokal Anda tidak memiliki login yang sesuai di server jauh, maka Anda akan mendapatkan pesan kesalahan “Login failed”.
Tambahkan Login untuk Server Tertaut
Jika Anda tidak ingin server tertaut menggunakan login Anda sendiri, Anda dapat menentukan login yang berbeda untuk digunakan. Selama server jarak jauh memiliki login yang sesuai dengan kredensial yang sama, Anda akan baik-baik saja. Jelas, Anda harus memastikan bahwa akun jarak jauh memiliki izin yang sesuai untuk melakukan apa yang Anda perlukan.
Berikut adalah contoh menambahkan login SQL Server untuk server tertaut.
EXEC sp_addlinkedsrvlogin @rmtsrvname=N'Homer', @useself=N'FALSE', @locallogin=NULL, @rmtuser=N'Marge', @rmtpassword=N'BigStrong#Passw0rd';
Jalankan ini di server lokal setelah Anda membuat server tertaut. Anda akan memerlukan login yang sesuai dengan kredensial yang sama di server tertaut (jarak jauh) yang sebenarnya.
Ini menambahkan login yang disebut "Marge" untuk server tertaut yang disebut "Homer". Selama server jauh memiliki login dengan kredensial yang sama, server lokal akan dapat masuk ke server yang ditautkan.
Lihat Menambahkan Login Server Tertaut di SQL Server untuk contoh menambahkan login yang sesuai di server jauh.
Meninggalkan Server Tertaut
Berikut ini contoh penghapusan server tertaut yang disebut “Homer” dan semua login terkait.
EXEC sp_dropserver 'Homer', 'droplogins';
droplogins
argumen bersifat opsional, tetapi jika Anda tidak menentukan ini saat menjatuhkan server tertaut yang memiliki entri login server jarak jauh dan tertaut terkait, atau dikonfigurasi sebagai penerbit replikasi, pesan kesalahan akan ditampilkan.
Lihat Menghapus Server Tertaut menggunakan T-SQL untuk contoh lebih lanjut tentang menjatuhkan server tertaut.
Jalankan Kueri Terdistribusi terhadap Server Tertaut
Sekarang setelah kita membuat server tertaut, berikut adalah contoh menjalankan kueri terdistribusi terhadapnya:
SELECT * FROM Homer.Music.dbo.Artists;
Satu-satunya perbedaan antara ini dan kueri lokal adalah Anda perlu menambahkan nama server tertaut ke FROM
klausa.
Seperti ini:
LinkedServer.Database.Schema.Table
Atau, Anda dapat menggunakan OPENQUERY()
untuk menjalankan kueri pass-through:
SELECT * FROM OPENQUERY( Homer, 'SELECT * FROM Music.dbo.Artists;' );