Ovladač OLE DB pro SQL Server Podporuje vysokou dostupnost, zotavení po havárii

Platí na:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformový systém (PDW)SQL databáze v Microsoft Fabric

Stáhnout ovladač OLE DB

Tento článek se zabývá ovladačem OLE DB pro podporu SQL Server pro skupiny dostupnosti Always On. Pro více informací o skupinách dostupnosti Always On viz Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server),Creation and Configuration of Availability Groups (SQL Server),Failover Clustering and Always On Availability Groups (SQL Server) a Active Secondaries: Readable Secondary Replicas (Always On Availability Groups).

V řetězci spojení můžete specifikovat posluchač skupiny dostupnosti dané skupiny dostupnosti. Pokud je ovladač OLE DB pro aplikaci SQL Server připojen k databázi ve skupině dostupnosti, která přejde přes failover, původní spojení je přerušeno a aplikace musí otevřít nové připojení, aby mohla pokračovat v práci po failoveru.

Pokud se nepřipojujete k naslouchači skupiny dostupnosti a pokud je k hostitelskému jménu přiřazeno více IP adres, OLE DB Driver pro SQL Server bude postupně iterovat všechny IP adresy spojené s DNS zadáním. To může být časově náročné, pokud první IP adresa vrácená DNS serverem není vázána na žádnou síťovou kartu (NIC). Při připojení k naslouchači skupiny dostupnosti se ovladač OLE DB pro SQL Server snaží navázat spojení ke všem IP adresám paralelně a pokud pokus o připojení uspěje, ovladač všechny čekající pokusy o připojení zamítne.

Poznámka:

Zvýšení časového limitu připojení a implementace logiky opakovaného pokusu o spojení zvýší pravděpodobnost, že se aplikace připojí ke skupině dostupnosti. Také, protože spojení může selhat kvůli failoveru skupiny dostupnosti, měli byste implementovat logiku opakovaného pokusu o spojení a opakovat neúspěšné připojení, dokud se znovu nepřipojí.

Připojení s MultiSubnetFailover

Při připojování k SQL Server Always On Availability Group listener nebo SQL Server Failover Cluster vždy uveďte MultiSubnetFailover=Yes . MultiSubnetFailover umožňuje rychlejší failover pro všechny skupiny Always On Availability a instance clusteru Failover v SQL Serveru a výrazně zkrátí dobu převedení pro topologie Always On s jednou a více podsítěmi. Během failoveru více subsítí se klient pokusí o připojení paralelně. Během failoveru podsítě OLE DB Driver for SQL Server znovu zkusí TCP připojení.

Vlastnost MultiSubnetFailover connection označuje, že aplikace je nasazována ve skupině dostupnosti nebo v instanci Failover Cluster a že OLE DB Driver pro SQL Server se pokusí připojit k databázi na primární instanci SQL Serveru tím, že se pokusí připojit ke všem IP adresám. Když je pro spojení specifikováno MultiSubnetFailover=Yes , klient se pokusí o TCP připojení opakovat rychleji než výchozí intervaly opakovaného přenosu TCP operačního systému. To umožňuje rychlejší opětovné připojení po failoveru buď skupiny Always On Availability, nebo instance clusteru Failover, a je použitelné jak pro jedno- i více-podsíťové skupiny dostupnosti, tak pro instance clusteru pro failover.

Pro více informací o klíčových slovech spojovacích řetězců viz Použití klíčových slov spojovacích řetězců s OLE DB ovladačem pro SQL Server.

Specifikace MultiSubnetFailover=Ano při připojení k něčemu jinému než k posluchači skupiny dostupnosti nebo instance clusteru Failover může mít negativní dopad na výkon a není podporována.

Použijte následující pokyny pro připojení k serveru ve skupině dostupnosti nebo v instanci failover clusteru:

  • Při připojení k jedné nebo vícenásobné podsíti použijte vlastnost spojení MultiSubnetFailover; Zlepší to výkon u obou.

  • Pro připojení ke skupině dostupnosti určete posluchača skupiny dostupnosti jako server ve vašem řetězci připojení.

  • Připojení k SQL Server instanci nakonfigurované s více než 64 IP adresami způsobí selhání spojení.

  • Chování aplikace, která používá vlastnost MultiSubnetFailover připojení, není ovlivněno podle typu autentizace: SQL Server Authentication, Kerberos Authentication nebo Windows Authentication.

  • Můžete zvýšit hodnotu loginTimeout , aby se přizpůsobila doba přehození a snížila se pokusy o opětovné připojení aplikace.

  • Distribuované transakce nejsou podporovány.

Pokud není aktivní směrování pouze pro čtení, připojení k sekundární replice ve skupině dostupnosti selže v následujících situacích:

  1. Pokud sekundární replika není nakonfigurována pro přijímání spojení.

  2. Pokud aplikace používá ApplicationIntent=ReadWrite (viz níže) a sekundární replika je nakonfigurována pro přístup pouze pro čtení.

Spojení selže, pokud je primární replika nakonfigurována tak, aby odmítala pouze čtení a řetězec spojení obsahuje ApplicationIntent=ReadOnly.

Upgrade na používání vícepodsíťových clusterů z databázového zrcadlení

Chyba spojení nastane, pokud jsou v řetězci přípojových slov přítomna klíčová slova MultiSubnetFailover a Failover_Partner connection. Chyba nastane také v případě, že je použit MultiSubnetFailOver a SQL Server vrátí odpověď partnera pro failover, která označuje, že je součástí dvojice zrcadlení databáze.

Pokud upgradujete OLE DB ovladač pro SQL Server aplikaci, která aktuálně používá zrcadlení databáze, na scénář s více podsítěmi, měli byste odstranit vlastnost Failover_Partner connection a nahradit ji MultiSubnetFailover nastavenou na Yes a nahradit název serveru v connection stringu za posluchač skupiny dostupnosti. Pokud spojovací řetězec používá Failover_Partner a MultiSubnetFailover=Ano, ovladač vygeneruje chybu. Pokud však řetězec spojení používá Failover_Partner a MultiSubnetFailover=No (nebo ApplicationIntent=ReadWrite), aplikace použije zrcadlení databáze.

Ovladač vrátí chybu, pokud je na primární databázi ve skupině dostupnosti použito zrcadlení databáze, a pokud je v řetězci připojení, který se připojuje k primární databázi místo k posluchači skupiny dostupnosti, použito MultiSubnetFailover= Yes.

Specifikovat záměr aplikace

Klíčové slovo ApplicationIntent můžete zadat ve svém spojovacím řetězci. Přiřaditelné hodnoty jsou ReadWrite (výchozí) nebo ReadOnly.

Když nastavíte ApplicationIntent=ReadOnly, klient požádá o čtení při připojení. Server vynucuje záměr při připojení a během příkazu do databáze USE .

Klíčové ApplicationIntent slovo nefunguje s legacy databázemi pouze pro čtení.

Cíle ReadOnly

Když spojení zvolí ReadOnly, je spojení přiřazeno k některé z následujících speciálních konfigurací, které mohou pro databázi existovat:

Pokud žádný z těchto speciálních cílů není k dispozici, běžná databáze se čte.

Klíčové ApplicationIntent slovo umožňuje směrování pouze pro čtení.

Směrování pouze pro čtení

Směrování pouze pro čtení je funkce, která může zajistit dostupnost repliky databáze pouze pro čtení. Pro umožnění směrování pouze pro čtení platí vše následující:

  • Musíte se připojit ke skupinovému posluchači Always On availability.

  • Klíčové ApplicationIntent slovo spojovacího řetězce musí být nastaveno na .ReadOnly

  • Správce databáze musí nakonfigurovat skupinu dostupnosti tak, aby umožnila směrování pouze pro čtení.

Více připojení, z nichž každé používá směrování pouze pro čtení, nemusí být všechna připojena ke stejné replikě pouze pro čtení. Změny synchronizace databáze nebo změny v konfiguraci směrování serveru mohou vést k připojení klientů k různým replikám pouze pro čtení.

Můžete zajistit, že všechny požadavky pouze pro čtení se připojí ke stejné replikě pouze pro čtení tím, že nepředáte posluchači skupiny dostupnosti ke Server klíčovému slovu řetězce spojů. Místo toho zadejte název instance pouze pro čtení.

Směrování pouze pro čtení může trvat déle než připojení k primárnímu kanálu. Je to proto, že směrování pouze pro čtení se nejprve připojí k primárnímu a poté hledá nejlepší dostupnou čitelnou sekundární složku. Díky těmto několika krokům byste měli prodloužit login časovou pauzu alespoň na 30 sekund.

OLE

Ovladač OLE DB pro SQL Server podporuje jak klíčová slova ApplicationIntent , tak MultiSubnetFailover .

Dvě klíčová slova pro spojení řetězců OLE DB byla přidána pro podporu skupin dostupnosti Always On v OLE DB Driver for SQL Server:

  • ApplicationIntent
  • MultiSubnetFailover

Pro více informací o klíčových slovech spojovacích řetězců v OLE DB Driver pro SQL Server viz Použití klíčových slov spojovacích řetězců s OLE DB ovladačem pro SQL Server.

Záměr aplikace

Ekvivalentní vlastnosti spojení jsou:

  • SSPROP_INIT_APPLICATIONINTENT

  • DBPROP_INIT_PROVIDERSTRING

Ovladač OLE DB pro aplikaci SQL Server může použít jednu z metod pro určení záměru aplikace:

  • IDBInitialize::Initialize
    IDBInitialize::Initialize používá dříve nakonfigurovanou sadu vlastností k inicializaci datového zdroje a vytvoření datového zdrojového objektu. Zadejte aplikační záměr jako vlastnost poskytovatele nebo jako součást rozšířeného řetězce vlastností.

  • IDataInitialize::GetDataSource
    IDataInitialize::GetDataSource přijímá vstupní řetězec spojení, který může obsahovat klíčové slovo Application Intent .

  • IDBProperties::SetProperties
    Pro nastavení hodnoty vlastnosti ApplicationIntent volejte IDBProperties::SetProperties a předejte vlastnost SSPROP_INIT_APPLICATIONINTENT s hodnotou "ReadWrite" nebo "ReadOnly", případně DBPROP_INIT_PROVIDERSTRING vlastnost s hodnotou obsahující "ApplicationIntent=ReadOnly" nebo "ApplicationIntent=ReadWrite".

Záměr aplikace můžete zadat v poli Vlastnosti záměru aplikace na záložce Vše v dialogovém okně Vlastnosti Data Link .

Když jsou implicitní spojení navázána, implicitní spojení použije nastavení záměru aplikace rodičovského spojení. Podobně více relací vytvořených ze stejného datového zdroje zdědí nastavení aplikačního záměru datového zdroje.

MultiSubnetFailover

Ekvivalentní vlastnosti spojení jsou:

  • SSPROP_INIT_MULTISUBNETFAILOVER

  • DBPROP_INIT_PROVIDERSTRING

Ovladač OLE DB pro aplikaci SQL Server může použít jednu z následujících metod pro nastavení možnosti MultiSubnetFailover:

  • IDBInitialize::Initialize
    IDBInitialize::Initialize používá dříve nakonfigurovanou sadu vlastností k inicializaci datového zdroje a vytvoření datového zdrojového objektu. Zadejte aplikační záměr jako vlastnost poskytovatele nebo jako součást rozšířeného řetězce vlastností.

  • IDataInitialize::GetDataSource
    IDataInitialize::GetDataSource přijímá vstupní spojovací řetězec, který může obsahovat klíčové slovo MultiSubnetFailover .

  • IDBProperties::SetProperties
    Pro nastavení hodnoty vlastnosti MultiSubnetFailover volejte IDBProperties::SetProperties a předejte vlastnost SSPROP_INIT_MULTISUBNETFAILOVER s hodnotou VARIANT_TRUE nebo VARIANT_FALSE , nebo DBPROP_INIT_PROVIDERSTRING vlastnost s hodnotou obsahující "MultiSubnetFailover=Yes" nebo "MultiSubnetFailover=No".

Example

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

Viz také

OLE DB Driver for SQL Server Features
Použití klíčových slov připojovacího řetězce s ovladačem OLE DB pro SQL Server