Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform Systeem (PDW)
SQL-database in Microsoft Fabric
OLE DB-stuurprogramma downloaden
Dit artikel bespreekt OLE DB-driver voor SQL Server-ondersteuning voor Always On-beschikbaarheidsgroepen. Voor meer informatie over Always On beschikbaarheidsgroepen, zie Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server),Creatie en Configuratie van Availability Groups (SQL Server),Failover Clustering en Always On Availability Groups (SQL Server), en Active Secundaires: Readable Secondary Replicas (Always On Availability Groups).
Je kunt de beschikbaarheidsgroep-luisteraar van een bepaalde beschikbaarheidsgroep in de verbindingsstring specificeren. Als een OLE DB-driver voor SQL Server-applicatie is verbonden met een database in een beschikbaarheidsgroep die failovert, wordt de oorspronkelijke verbinding verbroken en moet de applicatie een nieuwe verbinding openen om het werk na de failover voort te zetten.
Als je geen verbinding maakt met een availability group listener, en als meerdere IP-adressen aan een hostnaam gekoppeld zijn, zal OLE DB Driver for SQL Server sequentieel alle IP-adressen die aan DNS-invoer zijn gekoppeld itereren. Dit kan tijdrovend zijn als het eerste IP-adres dat door de DNS-server wordt teruggegeven niet gebonden is aan een netwerkinterfacekaart (NIC). Bij het verbinden met een availability group listener probeert OLE DB Driver for SQL Server parallel verbindingen met alle IP-adressen op te zetten en als een verbindingspoging slaagt, zal de driver alle openstaande verbindingspogingen verwijderen.
Opmerking
Het verhogen van de verbindingstimeout en het implementeren van verbindingsherkansingslogica zal de kans vergroten dat een applicatie verbinding maakt met een beschikbaarheidsgroep. Ook, omdat een verbinding kan falen door een failover van de availability group, moet je de verbindingsherkansingslogica implementeren, waarbij je een mislukte verbinding opnieuw probeert totdat deze opnieuw verbinding maakt.
Verbinding maken met MultiSubnetFailover
Specificeer altijd MultiSubnetFailover=Yes wanneer het doel Azure SQL Database, Azure SQL Managed Instance, SQL database in Microsoft Fabric, een Always On availability group listener of een SQL Server failover cluster instance is.
Wanneer de servernaam in je verbindingsreeks meer dan één IP-adres krijgt, vertelt MultiSubnetFailover=Yes aan de OLE DB Driver for SQL Server om verbindingen met al die adressen tegelijk te openen en het eerste adres te gebruiken dat antwoordt. Zonder deze test probeert de chauffeur de adressen één voor één. Een adres dat niet antwoordt, blijft hangen totdat de TCP-verbindingstimeout van het besturingssysteem is verlopen, wat de verbindingstimeout kan opmaken voordat de driver een adres bereikt dat opneemt. Na een failover kan het adres dat de driver als eerste probeert er een zijn dat de database niet meer bedient, dus een verbinding die zou slagen tegen een ander adres faalt met een time-out.
MultiSubnetFailover=Yes verandert hoe snel de client de replica vindt die de database bedient. Het verandert niet hoe lang de server nodig heeft om te failoveren.
MultiSubnetFailover=Yes is veilig op single-IP-doelen. Wanneer DNS naar één adres wordt opgelost, doet de driver één verbindingspoging, dus de instelling kost niets als het niet nodig is.
Voor meer informatie over verbindingsstring-zoekwoorden, zie Verbindingsstring-sleutelwoorden gebruiken met OLE DB-driver voor SQL Server.
Gebruik de volgende richtlijnen om verbinding te maken met een server in een beschikbaarheidsgroep of Failover Cluster Instance:
Stel de MultiSubnetFailover-verbindingseigenschap in op Ja.
Om verbinding te maken met een beschikbaarheidsgroep, specificeer je de beschikbaarheidsgroep-luisteraar van de beschikbaarheidsgroep als server in je verbindingsstring.
Je kunt MultiSubnetFailover niet gebruiken over een ander protocol dan TCP.
Verbinding maken met een SQL Server-instantie die is geconfigureerd met meer dan 64 IP-adressen veroorzaakt een verbindingsfout.
Je kunt MultiSubnetFailover niet gebruiken met databasespiegeling. De driver geeft een foutmelding wanneer de server meldt dat de database gespiegeld is. Databasespiegeling is verouderd in alle ondersteunde versies van SQL Server. Gebruik in plaats daarvan AlwaysOn-beschikbaarheidsgroepen.
Het type authenticatie, SQL Server Authenticatie, Kerberos-authenticatie of Windows Authenticatie, beïnvloedt het gedrag van een applicatie die de MultiSubnetFailover-verbindingseigenschap gebruikt, niet.
Je kunt de waarde van Connect Timeout verhogen om failovertijd te accommoderen en pogingen tot opnieuw aansluiten van applicaties te verminderen. De standaardwaarde is 15 seconden. Dezelfde instelling heet Timeout wanneer je hem door
IDBInitialize::Initializezet , en het wordt gekoppeld aan deDBPROP_INIT_TIMEOUTeigenschap. Voor Azure SQL Database serverloos met auto-pauze ingeschakeld, gebruik een Connect Timeout van minstens 60 seconden. Een automatisch gepauzeerde database wordt hervat bij de eerste verbindingspoging, en die poging kan mislukken met foutmelding 40613 terwijl de database wordt hervat, dus de applicatie moet het opnieuw proberen. Raadpleeg Automatisch onderbreken en automatisch hervatten voor meer informatie.Gedistribueerde transacties worden niet ondersteund.
Als alleen-lezenroutering niet van kracht is, mislukt het maken van verbinding met een secundaire replicalocatie in een beschikbaarheidsgroep in de volgende situaties:
- Als de secundaire replicalocatie niet is geconfigureerd voor het accepteren van verbindingen.
- Als een applicatie ApplicationIntent=ReadWrite gebruikt en de secundaire replicalocatie is geconfigureerd voor alleen-lezen toegang.
Een verbinding faalt als een primaire replica is geconfigureerd om alleen-lezen workloads te weigeren en de verbindingsreeks ApplicationIntent=ReadOnly bevat.
Upgraden van databasespiegeling
Een verbindingsfout doet zich voor als de verbindingsreeks zowel de MultiSubnetFailover als Failover_Partner trefwoorden bevat. Er ontstaat ook een fout als je MultiSubnetFailover gebruikt en de SQL Server geeft een failover-partnerreactie terug die aangeeft dat het deel uitmaakt van een database-mirroringpaar.
Als je een OLE DB Driver for SQL Server applicatie die momenteel databasemirroring gebruikt upgradet naar een multi-subnet scenario, verwijder dan de Failover_Partner connection property en vervang deze door MultiSubnetFailover ingesteld op Yes. Vervang de servernaam in de verbindingsreeks door een availability group listener. Als een verbindingsreeks Failover_Partner gebruikt en MultiSubnetFailover=Yes, genereert de driver een foutmelding. Als een verbindingsreeks echter Failover_Partner en MultiSubnetFailover=No (of ApplicationIntent=ReadWrite) gebruikt, gebruikt de applicatie databasespiegeling.
De driver geeft een foutmelding als je databasespiegeling gebruikt op de primaire replica in de availability group, en als je MultiSubnetFailover=Yes gebruikt in de verbindingsreeks die verbinding maakt met een primaire replica in plaats van met een availability group listener.
Stel MultiSubnetFailover programmatisch in
De equivalente verbindingseigenschappen zijn:
- SSPROP_INIT_MULTISUBNETFAILOVER
- DBPROP_INIT_PROVIDERSTRING
Een OLE DB Driver for SQL Server-applicatie kan een van de volgende methoden gebruiken om de MultiSubnetFailover-optie in te stellen:
-
IDBInitialize::Initialiseren
Gebruikt de eerder geconfigureerde set eigenschappen om de databron te initialiseren en het databronobject te creëren. Specificeer MultiSubnetFailover als een provider-eigenschap of als onderdeel van de uitgebreide eigenschappen-string. -
IDataInitialize::GetDataSource
Neemt een input-verbindingsreeks die het Keyword MultiSubnetFailover kan bevatten. -
IDBProperties::SetProperties
Om de MultiSubnetFailover-eigenschap in te stellen, roep IDBProperties::SetProperties aan die de SSPROP_INIT_MULTISUBNETFAILOVER-eigenschap met waarde VARIANT_TRUE of VARIANT_FALSE doorgeeft, of de DBPROP_INIT_PROVIDERSTRING-eigenschap met waarde die MultiSubnetFailover=Yes of MultiSubnetFailover=Nee bevat.
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);
Specificeer applicatieintentie
Je kunt het trefwoord ApplicationIntent in je verbindingsstring opgeven. De toewijzingbare waarden zijn ReadWrite (de standaard) of ReadOnly.
Wanneer je ApplicationIntent=ReadOnly, vraagt de client een leeswerklast aan bij het verbinden. De server handhaaft de intentie tijdens de verbinding en tijdens een USE databasestatement.
Het ApplicationIntent trefwoord werkt niet met legacy, alleen-lezen databases.
Doelen van ReadOnly
Wanneer een verbinding kiest ReadOnly, wordt de verbinding toegewezen aan een van de volgende speciale configuraties die mogelijk bestaan voor de database:
Altijd aan. Een database kan leeswerklasten toestaan of verbieden op de beoogde beschikbaarheidsgroepdatabase. Deze keuze wordt bepaald door gebruik te maken van de
ALLOW_CONNECTIONSclausule van dePRIMARY_ROLEenSECONDARY_ROLETransact-SQL-statements.
Als geen van die speciale doelen beschikbaar is, wordt de reguliere database gelezen.
Het ApplicationIntent trefwoord maakt alleen-lezen routering mogelijk.
Alleen-lezen routering
Alleen-lezen routering is een functie die de beschikbaarheid van een alleen-lezen replica van een database kan waarborgen. Om alleen-lezen routering in te schakelen, gelden alle volgende regels:
Je moet verbinding maken met een luisteraar van een Always On beschikbaarheidsgroep.
Het
ApplicationIntentverbindingsstring-sleutelwoord moet worden ingesteld opReadOnly.De databasebeheerder moet de beschikbaarheidsgroep configureren om alleen-lezen routering mogelijk te maken.
Meerdere verbindingen die elk read-only routing gebruiken, hoeven niet allemaal met dezelfde read-only replica te verbinden. Wijzigingen in databasesynchronisatie of wijzigingen in de routeringsconfiguratie van de server kunnen resulteren in clientverbindingen met verschillende alleen-lezen replica's.
Je kunt ervoor zorgen dat alle alleen-lezen-verzoeken verbinding maken met dezelfde alleen-lezen replica door geen luisteraar van een beschikbaarheidsgroep aan het sleutelwoord van de Server verbindingsstring door te geven. Geef in plaats daarvan de naam van de alleen-lezen instantie op.
Alleen-lezen routeren kan langer duren dan aansluiten op de primaire router. Dit komt doordat alleen-lezen routering eerst verbinding maakt met de primaire en vervolgens zoekt naar de best beschikbare leesbare secundaire route. Door deze meerdere stappen moet je je login time-out verhogen tot minstens 30 seconden.
ApplicationIntent
De OLE DB Driver for SQL Server ondersteunt het ApplicationIntent verbindingsreeks-sleutelwoord. Voor meer informatie over verbindingsstring-zoekwoorden, zie Verbindingsstring-sleutelwoorden gebruiken met OLE DB-driver voor SQL Server.
Set ApplicationIntent programmatisch
De equivalente verbindingseigenschappen zijn:
- SSPROP_INIT_APPLICATIONINTENT
- DBPROP_INIT_PROVIDERSTRING
Een OLE DB Driver for SQL Server Application kan een van de volgende methoden gebruiken om de applicatieintentie te specificeren:
-
IDBInitialize::Initialiseren
Gebruikt de eerder geconfigureerde set eigenschappen om de databron te initialiseren en het databronobject te creëren. Specificeer applicatieintentie als een provider-eigenschap of als onderdeel van de uitgebreide properties-string. -
IDataInitialize::GetDataSource
Neemt een input-verbindingsreeks die het Key Intent Application kan bevatten. -
IDBProperties::SetProperties
Om de ApplicationIntent-eigenschapswaarde in te stellen, roep IDBProperties::SetProperties aan waarbij de SSPROP_INIT_APPLICATIONINTENT-eigenschap met waarde ReadWrite of ReadOnly, of de DBPROP_INIT_PROVIDERSTRING-eigenschap met waarde ApplicationIntent=ReadOnly of ApplicationIntent=ReadWrite wordt doorgegeven.
Je kunt applicatieintentie specificeren in het veld Application Intent Properties van het tabblad Allen in het Data Link Properties-dialoogvenster .
Wanneer je impliciete verbindingen opzet, gebruikt de impliciete verbinding de applicatieintentie-instelling van de ouderverbinding. Evenzo erven meerdere sessies die van dezelfde databron zijn gemaakt de applicatieintentie-instelling van de databron.