Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Buat Server Tertaut di SQL Server (Contoh T-SQL)

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;'
    );

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memetakan kunci komposit menggunakan kode EF terlebih dahulu

  2. Cara Mengenkripsi Fungsi Buatan Pengguna di SQL Server

  3. Apakah mungkin menggunakan SqlGeography dengan Linq to Sql?

  4. Desain database:satu tabel besar atau tabel terpisah?

  5. Log transaksi untuk database sudah penuh