Driver OLE DB untuk dukungan SQL Server untuk Ketersediaan Tinggi, Pemulihan Bencana

Berlaku untuk:SQL ServerAzure SQL Database Azure SQL Managed Instance Azure Synapse AnalyticsSQL database di Microsoft Fabric

Unduh driver OLE DB

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.

Menghubungkan dengan MultiSubnetFailover

Selalu tentukan MultiSubnetFailover=Yes ketika targetnya adalah Azure SQL Database, Azure SQL Managed Instance, database SQL di Microsoft Fabric, listener grup ketersediaan Always On, atau SQL Server Failover Cluster Instance.

Ketika nama server di string koneksi Anda beralih ke lebih dari satu alamat IP, MultiSubnetFailover=Yes memberi tahu OLE DB Driver for SQL Server untuk membuka koneksi ke semua alamat tersebut secara bersamaan dan menggunakan alamat pertama yang menjawab. Tanpa itu, pengemudi mencoba alamat satu per satu. Alamat yang tidak menjawab akan terhenti sampai timeout koneksi TCP sistem operasi habis, yang dapat menghabiskan timeout koneksi sebelum driver mencapai alamat yang menjawab. Setelah failover, alamat yang dicoba driver pertama kali bisa menjadi alamat yang tidak lagi melayani database, sehingga koneksi yang seharusnya berhasil terhadap alamat lain gagal dengan timeout.

MultiSubnetFailover=Yes mengubah seberapa cepat klien menemukan replika yang melayani basis data. Ini tidak mengubah berapa lama server membutuhkan failover.

MultiSubnetFailover= Yes aman pada target single-IP. Ketika DNS menyelesaikan ke satu alamat, driver melakukan satu kali percobaan koneksi, jadi pengaturan ini tidak memerlukan biaya jika tidak diperlukan.

Untuk informasi selengkapnya tentang kata kunci string koneksi, lihat Menggunakan Kata Kunci String Koneksi dengan Driver OLE DB untuk SQL Server.

Gunakan panduan berikut untuk menyambungkan ke server dalam grup ketersediaan atau Instans Kluster Failover:

  • Atur properti koneksi MultiSubnetFailover ke Ya.

  • Untuk menyambungkan ke grup ketersediaan, tentukan pendengar grup ketersediaan grup ketersediaan sebagai server di string koneksi Anda.

  • Anda tidak bisa menggunakan MultiSubnetFailover di atas protokol selain TCP.

  • Menghubungkan ke instance SQL Server yang dikonfigurasi dengan lebih dari 64 alamat IP menyebabkan kegagalan koneksi.

  • Anda tidak dapat menggunakan MultiSubnetFailover dengan pencerminan database. Driver mengembalikan kesalahan ketika server melaporkan bahwa database dimirror. Pencerminan basis data sudah tidak digunakan lagi di semua versi SQL Server yang didukung. Gunakan grup ketersediaan AlwaysOn sebagai gantinya.

  • Jenis autentikasi, SQL Server Authentication, Kerberos Authentication, atau Windows Authentication, tidak memengaruhi perilaku aplikasi yang menggunakan properti koneksi MultiSubnetFailover.

  • Anda dapat meningkatkan nilai Connect Timeout untuk mengakomodasi waktu failover dan mengurangi upaya pengulangan koneksi aplikasi. Defaultnya adalah 15 detik. Pengaturan yang sama dinamai Timeout saat Anda mengaturnya melalui IDBInitialize::Initialize, dan itu dipetakan ke properti tersebut DBPROP_INIT_TIMEOUT . Untuk Azure SQL Database tanpa server dengan auto-pause diaktifkan, gunakan Connect Timeout minimal 60 detik. Database yang auto-pause akan dilanjutkan pada upaya koneksi pertama, dan upaya tersebut dapat gagal dengan error 40613 saat database dilanjutkan, sehingga aplikasi harus mencoba ulang. Untuk informasi lebih lanjut, lihat Auto-pause dan auto-resume.

  • Transaksi terdistribusi tidak didukung.

Jika perutean hanya-baca tidak diterapkan, koneksi ke lokasi replika sekunder dalam grup ketersediaan gagal dalam situasi berikut:

  1. Jika lokasi replika sekunder tidak dikonfigurasi untuk menerima koneksi.
  2. Jika sebuah aplikasi menggunakan ApplicationIntent=ReadWrite dan lokasi replika sekunder dikonfigurasi untuk akses hanya-baca.

Koneksi gagal jika replika utama dikonfigurasi untuk menolak beban kerja hanya-baca dan string koneksi berisi ApplicationIntent=ReadOnly.

Upgrade dari pencerminan basis data

Kesalahan koneksi terjadi jika string koneksi berisi kata kunci MultiSubnetFailover dan Failover_Partner. Kesalahan juga terjadi jika Anda menggunakan MultiSubnetFailover dan SQL Server mengembalikan respons mitra failover yang menunjukkan bahwa ia adalah bagian dari pasangan mirroring database.

Jika Anda meningkatkan aplikasi OLE DB Driver for SQL Server yang saat ini menggunakan pencerminan basis data ke skenario multi-subnet, hapus properti koneksi Failover_Partner dan ganti dengan MultiSubnetFailover yang diatur ke Ya. Ganti nama server pada string koneksi dengan listener grup ketersediaan. Jika string koneksi menggunakan Failover_Partner dan MultiSubnetFailover=Yes, driver akan menghasilkan kesalahan. Namun, jika sebuah string koneksi menggunakan Failover_Partner dan MultiSubnetFailover=No (atau ApplicationIntent=ReadWrite), aplikasi tersebut menggunakan pencerminan basis data.

Driver mengembalikan kesalahan jika Anda menggunakan pencerminan basis data pada replika utama di availability group, dan jika Anda menggunakan MultiSubnetFailover=Yes pada string koneksi yang terhubung ke replika utama alih-alih ke listener availability group.

Atur MultiSubnetFailover secara programatik

Properti koneksi yang setara adalah:

  • SSPROP_INIT_MULTISUBNETFAILOVER
  • DBPROP_INIT_PROVIDERSTRING

Aplikasi OLE DB Driver for SQL Server dapat menggunakan salah satu metode berikut untuk mengatur opsi MultiSubnetFailover:

  • IDBInitialize::Initialize
    Menggunakan set properti yang telah dikonfigurasi sebelumnya untuk menginisialisasi sumber data dan membuat objek sumber data. Tentukan MultiSubnetFailover sebagai properti penyedia atau sebagai bagian dari string properti yang diperluas.
  • IDataInitialize::GetDataSource
    Mengambil input string koneksi yang dapat berisi kata kunci MultiSubnetFailover.
  • IDBProperties::SetProperties
    Untuk mengatur nilai properti MultiSubnetFailover , panggil IDBProperties::SetProperties yang mengoper ke properti SSPROP_INIT_MULTISUBNETFAILOVER dengan nilai VARIANT_TRUE atau VARIANT_FALSE, atau properti DBPROP_INIT_PROVIDERSTRING dengan nilai yang mengandung 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);

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 klausa PRIMARY_ROLE pernyataan Transact-SQL dan SECONDARY_ROLE .

  • Replikasi geografis

  • Peluasan skala

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 ke ReadOnly.

  • 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.

ApplicationIntent

OLE DB Driver for SQL Server mendukung kata kunci string koneksi ApplicationIntent. Untuk informasi selengkapnya tentang kata kunci string koneksi, lihat Menggunakan Kata Kunci String Koneksi dengan Driver OLE DB untuk SQL Server.

Atur ApplicationIntent secara programatik

Properti koneksi yang setara adalah:

  • SSPROP_INIT_APPLICATIONINTENT
  • DBPROP_INIT_PROVIDERSTRING

Aplikasi OLE DB Driver for SQL Server dapat menggunakan salah satu metode berikut untuk menentukan niat aplikasi:

  • IDBInitialize::Initialize
    Menggunakan set properti yang telah 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
    Mengambil string koneksi input yang dapat berisi kata kunci Application Intent.
  • IDBProperties::SetProperties
    Untuk mengatur nilai properti ApplicationIntent , panggil IDBProperties::SetProperties yang mengoper 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 kolom Application Intent Properties pada tab All di kotak dialog Data Link Properties .

Saat Anda membangun koneksi implisit, koneksi implisit menggunakan pengaturan application intent dari koneksi induk. Demikian pula, beberapa sesi yang dibuat dari sumber data yang sama mewarisi pengaturan niat aplikasi sumber data tersebut.