Driver OLE DB untuk dukungan SQL Server untuk Ketersediaan Tinggi, Pemulihan Bencana
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Artikel ini membahas dukungan Driver OLE DB untuk SQL Server untuk grup ketersediaan AlwaysOn. Untuk informasi selengkapnya tentang grup ketersediaan AlwaysOn, lihat Pendengar Grup Ketersediaan, Konektivitas Klien, dan Failover Aplikasi (SQL Server), Pembuatan dan Konfigurasi Grup Ketersediaan (SQL Server), Pengklusteran Failover, dan Grup Ketersediaan AlwaysOn (SQL Server), dan Sekunder Aktif: Replika Sekunder yang Dapat Dibaca (Grup Ketersediaan AlwaysOn).
Anda dapat menentukan pendengar grup ketersediaan dari grup ketersediaan tertentu di string koneksi. Jika driver OLE DB untuk aplikasi SQL Server tersambung ke database dalam grup ketersediaan yang gagal, koneksi asli rusak, dan aplikasi harus membuka koneksi baru untuk melanjutkan pekerjaan setelah failover.
Jika Anda tidak tersambung ke pendengar grup ketersediaan, dan jika beberapa alamat IP dikaitkan dengan nama host, Driver OLE DB untuk SQL Server akan melakukan iterasi secara berurutan melalui semua alamat IP yang terkait dengan entri DNS. Ini bisa memakan waktu jika alamat IP pertama yang dikembalikan oleh server DNS tidak terikat ke kartu antarmuka jaringan (NIC). Saat menyambungkan ke pendengar grup ketersediaan, Driver OLE DB untuk SQL Server mencoba membuat koneksi ke semua alamat IP secara paralel dan jika upaya koneksi berhasil, driver akan membuang upaya koneksi yang tertunda.
Catatan
Meningkatkan batas waktu koneksi dan menerapkan logika coba lagi koneksi akan meningkatkan probabilitas bahwa aplikasi akan terhubung ke grup ketersediaan. Selain itu, karena koneksi dapat gagal karena failover grup ketersediaan, Anda harus menerapkan logika coba lagi koneksi, mencoba kembali koneksi yang gagal sampai koneksi kembali tersambung.
Menyambungkan dengan MultiSubnetFailover.
Selalu tentukan MultiSubnetFailover=Ya saat menyambungkan ke pendengar Grup Ketersediaan AlwaysOn SQL Server atau Instans Kluster Failover SQL Server. MultiSubnetFailover memungkinkan failover yang lebih cepat untuk semua Grup Ketersediaan AlwaysOn dan Instans Kluster Failover di SQL Server, dan akan secara signifikan mengurangi waktu failover untuk topologi Always On tunggal dan multi-subnet. Selama failover multi-subnet, klien akan mencoba koneksi secara paralel. Selama failover subnet, Driver OLE DB untuk SQL Server akan mencoba kembali koneksi TCP.
Properti koneksi MultiSubnetFailover menunjukkan bahwa aplikasi sedang disebarkan dalam grup ketersediaan atau Instans Kluster Failover, dan Driver OLE DB untuk SQL Server akan mencoba menyambungkan ke database pada instans SQL Server utama dengan mencoba menyambungkan ke semua alamat IP. Ketika MultiSubnetFailover=Ya ditentukan untuk koneksi, klien mencoba kembali koneksi TCP mencoba lebih cepat daripada interval transmisi ulang TCP default sistem operasi. Ini memungkinkan koneksi ulang yang lebih cepat setelah failover Grup Ketersediaan AlwaysOn atau Instans Kluster Failover, dan berlaku untuk Grup Ketersediaan tunggal dan multi-subnet dan Instans Kluster Failover.
Untuk informasi selengkapnya tentang kata kunci string koneksi, lihat Menggunakan Kata Kunci String Koneksi dengan Driver OLE DB untuk SQL Server.
Menentukan MultiSubnetFailover=Ya saat menyambungkan ke sesuatu selain pendengar grup ketersediaan atau Instans Kluster Failover dapat mengakibatkan dampak performa negatif, dan tidak didukung.
Gunakan panduan berikut untuk menyambungkan ke server dalam grup ketersediaan atau Instans Kluster Failover:
Gunakan properti koneksi MultiSubnetFailover saat menyambungkan ke satu subnet atau multi-subnet; ini akan meningkatkan performa untuk keduanya.
Untuk menyambungkan ke grup ketersediaan, tentukan pendengar grup ketersediaan grup ketersediaan sebagai server di string koneksi Anda.
Menyambungkan ke instans SQL Server yang dikonfigurasi dengan lebih dari 64 alamat IP akan menyebabkan kegagalan koneksi.
Perilaku aplikasi yang menggunakan properti koneksi MultiSubnetFailover tidak terpengaruh berdasarkan jenis autentikasi: Autentikasi SQL Server, Autentikasi Kerberos, atau Autentikasi Windows.
Anda dapat meningkatkan nilai loginTimeout untuk mengakomodasi waktu failover dan mengurangi upaya coba lagi koneksi aplikasi.
Transaksi terdistribusi tidak didukung.
Jika perutean baca-saja tidak berlaku, menyambungkan ke lokasi replika sekunder dalam grup ketersediaan akan gagal dalam situasi berikut:
Jika lokasi replika sekunder tidak dikonfigurasi untuk menerima koneksi.
Jika aplikasi menggunakan ApplicationIntent=ReadWrite (dibahas di bawah) dan lokasi replika sekunder dikonfigurasi untuk akses baca-saja.
Koneksi akan gagal jika replika utama dikonfigurasi untuk menolak beban kerja baca-saja dan string koneksi berisi ApplicationIntent=ReadOnly.
Memutakhirkan untuk Menggunakan Kluster Multi-Subnet dari Pencerminan Database
Kesalahan koneksi akan terjadi jika kata kunci koneksi MultiSubnetFailover dan Failover_Partner ada di string koneksi. Kesalahan juga akan terjadi jika MultiSubnetFailover digunakan dan SQL Server mengembalikan respons mitra failover yang menunjukkan bahwa itu adalah bagian dari pasangan pencerminan database.
Jika Anda meningkatkan Driver OLE DB untuk aplikasi SQL Server yang saat ini menggunakan pencerminan database ke skenario multi-subnet, Anda harus menghapus properti koneksi Failover_Partner dan menggantinya dengan MultiSubnetFailover diatur ke Ya dan mengganti nama server di string koneksi dengan pendengar grup ketersediaan. Jika string koneksi menggunakan Failover_Partner dan MultiSubnetFailover=Ya, driver akan menghasilkan kesalahan. Namun, jika string koneksi menggunakan Failover_Partner dan MultiSubnetFailover=No (atau ApplicationIntent=ReadWrite), aplikasi akan menggunakan pencerminan database.
Driver akan mengembalikan kesalahan jika pencerminan database digunakan pada database utama dalam grup ketersediaan, dan jika MultiSubnetFailover=Ya digunakan dalam string koneksi yang tersambung ke database utama alih-alih ke pendengar grup ketersediaan.
Tentukan niat aplikasi
Anda dapat menentukan kata kunci ApplicationIntent
di string koneksi Anda. Nilai yang dapat ditetapkan adalah ReadWrite
(default) atau ReadOnly
.
Saat Anda mengatur ApplicationIntent=ReadOnly
, klien meminta beban kerja baca saat menyambungkan. Server memberlakukan niat pada waktu koneksi, dan selama USE
pernyataan database.
Kata ApplicationIntent
kunci tidak berfungsi dengan database baca-saja lama.
Target ReadOnly
Saat koneksi memilih ReadOnly
, koneksi ditetapkan ke salah satu konfigurasi khusus berikut yang mungkin ada untuk database:
Selalu Aktif. Database dapat mengizinkan atau melarang beban kerja baca pada database grup ketersediaan yang ditargetkan. Pilihan ini dikendalikan dengan menggunakan
ALLOW_CONNECTIONS
klausaPRIMARY_ROLE
pernyataan Transact-SQL danSECONDARY_ROLE
.
Jika tidak ada target khusus yang tersedia, database reguler dibaca.
Kata ApplicationIntent
kunci memungkinkan perutean baca-saja.
Perutean baca-saja
Perutean baca-saja adalah fitur yang dapat memastikan ketersediaan replika database baca-saja. Untuk mengaktifkan perutean baca-saja, semua hal berikut ini berlaku:
Anda harus tersambung ke pendengar grup ketersediaan AlwaysOn.
Kata
ApplicationIntent
kunci string koneksi harus diatur keReadOnly
.Administrator database harus mengonfigurasi grup ketersediaan untuk mengaktifkan perutean baca-saja.
Beberapa koneksi yang masing-masing menggunakan perutean baca-saja mungkin tidak semuanya tersambung ke replika baca-saja yang sama. Perubahan sinkronisasi database atau perubahan konfigurasi perutean server dapat mengakibatkan koneksi klien ke replika baca-saja yang berbeda.
Anda dapat memastikan bahwa semua permintaan baca-saja tersambung ke replika baca-saja yang sama dengan tidak meneruskan pendengar grup ketersediaan ke Server
kata kunci string koneksi. Sebagai gantinya, tentukan nama instans baca-saja.
Perutean baca-saja mungkin memakan waktu lebih lama daripada menyambungkan ke primer. Ini karena perutean baca-saja pertama kali terhubung ke primer, lalu mencari sekunder yang dapat dibaca terbaik yang tersedia. Karena beberapa langkah ini, Anda harus meningkatkan batas waktu anda login
menjadi setidaknya 30 detik.
OLE DB
Driver OLE DB untuk SQL Server mendukung kata kunci ApplicationIntent dan MultiSubnetFailover .
Dua kata kunci string koneksi OLE DB ditambahkan untuk mendukung grup ketersediaan AlwaysOn di Driver OLE DB untuk SQL Server:
- ApplicationIntent
- MultiSubnetFailover
Untuk informasi selengkapnya tentang kata kunci string koneksi di Driver OLE DB untuk SQL Server, lihat Menggunakan Kata Kunci String Koneksi dengan Driver OLE DB untuk SQL Server.
Niat Aplikasi
Properti koneksi yang setara adalah:
SSPROP_INIT_APPLICATIONINTENT
DBPROP_INIT_PROVIDERSTRING
Driver OLE DB untuk aplikasi SQL Server dapat menggunakan salah satu metode untuk menentukan niat aplikasi:
IDBInitialize::Initialize
IDBInitialize::Initialize menggunakan kumpulan properti yang dikonfigurasi sebelumnya untuk menginisialisasi sumber data dan membuat objek sumber data. Tentukan niat aplikasi sebagai properti penyedia atau sebagai bagian dari string properti yang diperluas.IDataInitialize::GetDataSource
IDataInitialize::GetDataSource mengambil string koneksi input yang dapat berisi kata kunci Niat Aplikasi.IDBProperties::SetProperties
Untuk mengatur nilai properti ApplicationIntent , panggil IDBProperties::SetProperties yang melewati properti SSPROP_INIT_APPLICATIONINTENT dengan nilai "ReadWrite" atau "ReadOnly" atau properti DBPROP_INIT_PROVIDERSTRING dengan nilai yang berisi "ApplicationIntent=ReadOnly" atau "ApplicationIntent=ReadWrite".
Anda dapat menentukan niat aplikasi di bidang Properti Niat Aplikasi dari tab Semua dalam kotak dialog Properti Tautan Data.
Ketika koneksi implisit dibuat, koneksi implisit akan menggunakan pengaturan niat aplikasi dari koneksi induk. Demikian pula, beberapa sesi yang dibuat dari sumber data yang sama akan mewarisi pengaturan niat aplikasi sumber data.
MultiSubnetFailover
Properti koneksi yang setara adalah:
SSPROP_INIT_MULTISUBNETFAILOVER
DBPROP_INIT_PROVIDERSTRING
Driver OLE DB untuk aplikasi SQL Server dapat menggunakan salah satu metode berikut untuk mengatur opsi MultiSubnetFailover:
IDBInitialize::Initialize
IDBInitialize::Initialize menggunakan kumpulan properti yang dikonfigurasi sebelumnya untuk menginisialisasi sumber data dan membuat objek sumber data. Tentukan niat aplikasi sebagai properti penyedia atau sebagai bagian dari string properti yang diperluas.IDataInitialize::GetDataSource
IDataInitialize::GetDataSource mengambil string koneksi input yang dapat berisi kata kunci MultiSubnetFailover.IDBProperties::SetProperties
Untuk mengatur nilai properti MultiSubnetFailover , panggil IDBProperties::SetProperties yang melewati properti SSPROP_INIT_MULTISUBNETFAILOVER dengan nilai VARIANT_TRUE atau properti VARIANT_FALSE atau DBPROP_INIT_PROVIDERSTRING dengan nilai yang berisi "MultiSubnetFailover=Yes" atau "MultiSubnetFailover=No".
Contoh
DBPROP rgPropMultisubnet;
rgPropMultisubnet.dwPropertyID = SSPROP_INIT_MULTISUBNETFAILOVER;
rgPropMultisubnet.dwOptions = DBPROPOPTIONS_REQUIRED;
rgPropMultisubnet.dwStatus = DBPROPSTATUS_OK;
rgPropMultisubnet.colid = DB_NULLID;
V_VT(&(rgPropMultisubnet.vValue)) = VT_BOOL;
V_BOOL(&(rgPropMultisubnet.vValue)) = VARIANT_TRUE;
DBPROPSET PropSet;
PropSet.rgProperties = &rgPropMultisubnet;
PropSet.cProperties = 1;
PropSet.guidPropertySet = DBPROPSET_SQLSERVERDBINIT;
IDBProperties* pIDBProperties = NULL;
hr = pIDBInitialize->QueryInterface(IID_IDBProperties, (void **)&pIDBProperties);
pIDBProperties->SetProperties(1, &PropSet);
Lihat Juga
Driver OLE DB untuk Fitur SQL Server
Menggunakan Kata Kunci String Koneksi dengan Driver OLE DB untuk SQL Server