Conectarea clienților la o sesiune de mirroring a bazei de date (server sql)

Pentru a efectua conexiunea inițială la baza de date afișată, clientul trebuie să furnizeze un șir de conexiuni care conține în mod necesar numele instanței serverului. Acest nume de server necesar trebuie să identifice instanța curentă a serverului primar și numele numelui inițial este apelat.







Dacă este necesar, șirul de conectare poate conține și numele unei alte instanțe a serverului care identifică instanța curentă a serverului de oglindă utilizat atunci când membrul inițial nu este disponibil în timpul primei încercări de conectare. Cel de-al doilea nume este numele partenerului de esec.

Șirul de conectare trebuie să conțină și numele bazei de date. Acest lucru este necesar pentru a permite furnizorului de acces la date să încerce să elaboreze respingerea.

După ce a primit furnizorul șir de conexiune de acces la date păstrează numele original al participantului și numele failover partener (dacă este dată) în cache în memoria volatilă (pentru cod gestionat, cache-ul conținut în domeniul de aplicare). După cache, numele membrului original nu este actualizat de furnizorul de acces la date. În cazul în care clientul furnizează numele failover participant în cazul în care furnizorul de acces la date nu se poate conecta folosind numele părții inițiale, furnizorul salvează, de asemenea, numele failover partener.

Sesiunea de mirroring a bazei de date nu oferă protecție împotriva problemelor legate de accesul clientului la servere, de exemplu, dacă computerul clientului se confruntă cu probleme de interacțiune cu rețeaua. O încercare de conectare la baza de date afișată poate eșua din mai multe motive care nu au legătură cu furnizorul de acces la date, de exemplu, o încercare de conectare poate eșua dacă instanța primară a serverului este inactivă; Acest lucru se întâmplă când migrați la o altă bază de date sau din cauza unei erori în rețea.

Când încercați să vă conectați, furnizorul de acces la date încearcă să se conecteze mai întâi utilizând numele membrului original. Dacă instanța de server specificată este disponibilă și este instanța curentă a serverului principal, atunci încercarea de conectare este de obicei reușită.


Dacă sesiunea de mirroring este suspendată, clientul se conectează de obicei la serverul primar și descarcă numele participantului. Cu toate acestea, baza de date nu va fi disponibilă clientului până la reluarea procesului de oglindire.

În cazul în care încercarea nu reușește, furnizorul de acces la date încearcă să se conecteze utilizând numele partenerului pentru reluare în caz de eroare, dacă acesta este disponibil. Dacă numele celuilalt participant identifică în mod corect serverul primar curent, furnizorul de acces la date deschide de obicei conexiunea originală. După terminarea acestei conexiuni, furnizorul de acces la date descarcă numele instanței serverului de oglindă curent. Acest nume este stocat în memoria cache ca și numele partenerului de tip "failover", numele partenerului furnizat de client, dacă există, este suprascris. După aceasta, Furnizorul de date pentru .NET Framework pentru SQL Server nu actualizează numele partenerului care nu reușește să funcționeze. Cu toate acestea, clientul SQL Server Native actualizează cache-ul de fiecare dată când o conexiune ulterioară sau o reinstalare a conexiunii returnează un alt nume de membru.

Diagrama de mai jos prezintă conexiunea clientului cu participantul inițial A pentru baza de date afișată Db_1. Schema ilustrează cazul în care numele original al participantului clienților identifică în mod corect curent principalul membru de server A. Inițial, conexiunea este de succes, iar accesul furnizor de date păstrează numele serverului oglindă de curent (membru B) în memoria cache locală ca numele participantului pentru a se asigura failover . În cele din urmă, clientul se conectează la copia principală a bazei de date Db_1.

Conectarea clienților la o sesiune de mirroring a bazei de date (server sql)

O încercare inițială de conectare poate eșua, de exemplu, ca urmare a unei erori de rețea sau pentru că instanța serverului este inactivă. Întrucât membrul inițial nu este disponibil, clientul trebuie să furnizeze numele partenerului pentru a asigura că conexiunea nu reușește în șirul de conectare, astfel încât furnizorul de acces la date să încerce să se conecteze la partenerul de esec.

Dacă numele partenerului pe failover nu este disponibilă, încercările inițiale de conectare pentru a continua atâta timp cât nici o eroare (similar cu conectarea a opri afișarea bazei de date) va expira timeout conexiune la rețea sau nu vor fi returnate.

Dacă numele partenerului de eroare este listat în șirul de conexiune, comportamentul furnizorului de acces la date depinde de protocolul de rețea și de sistemul de operare al clientului după cum urmează:

Pentru TCP / IP, încercările de conectare sunt guvernate de un algoritm de conectare recurent, care este specific pentru oglindirea bazei de date. Algoritmul de reconectare determină timpul maxim (timpul de reîncercare) permis pentru deschiderea unei conexiuni în cadrul acestei încercări de conectare.







Pentru alte protocoale de rețea

Dacă apare o eroare sau dacă membrul inițial nu este disponibil, încercările inițiale de conectare continuă până la expirarea timpului de conectare la rețea sau după expirarea termenului de conectare pentru furnizorul de date. De obicei, acest timp de așteptare este de aproximativ 20-30 de secunde. După aceasta, dacă timpul de așteptare al furnizorului nu a expirat, furnizorul încearcă să se conecteze la partenerul care nu a reușit. Dacă timpul de conectare expiră înainte ca conexiunea să fie finalizată cu succes sau dacă partenerul de esec nu este disponibil, încercarea de conectare nu reușește. Dacă partenerul de eroare este disponibil înainte de termenul de conectare și este în prezent serverul principal, încercarea de conectare este de obicei reușită.

Conectați șiruri de caractere cu o bază de date oglindă

Un șir de conexiune comunicat de client conține informații utilizate de furnizorul de date pentru a se conecta la baza de date. Această secțiune descrie cuvintele cheie legate de conectarea la o bază de date cu oglindă utilizând driverul Native Client ODBC SQL Server.

Atributul Rețea

Șirul de conectare trebuie să conțină atributul Rețea. indicând protocolul de rețea. Acest lucru asigură faptul că protocolul de rețea specificat este păstrat când se conectează la diferiți participanți. TCP / IP este cel mai bun protocol pentru conectarea la o bază de date afișată. Pentru a garanta o solicitare TCP / IP de către client de fiecare dată când vă conectați la participanți, trebuie să includeți următorul atribut în șirul de conexiune:


Deoarece conductele numite nu utilizează algoritmul de replicare a protocoalelor TCP / IP, în multe cazuri timpul de încercare a conexiunii cu țevile numite expiră înainte de conectarea la baza de date afișată.

Server de atribute

Șirul de conexiune trebuie să conțină un atribut Server care oferă numele membrului original care trebuie să identifice instanța curentă a serverului principal.

Cea mai ușoară modalitate de a identifica o instanță a unui server este să-i specificați numele, <имя_сервера> [\<имя_экземпляра_SQL_Server> ]. De exemplu:


Este necesară o solicitare în browserul SQL Server dacă numele instanței numite este specificat în șirul de conexiune și nu în port.

Pentru o conexiune TCP / IP, atunci când numele ambilor participanți se află în memoria cache, furnizorul de acces la date stabilește o conexiune utilizând algoritmul de reconectare. Acest lucru este valabil atât pentru conexiunea inițială cu sesiunea, cât și pentru reconectare după pierderea comunicării. După stabilirea conexiunii, executarea pașilor preliminari și de bază necesită timp suplimentar.


Luând timp pentru a crea o conexiune poate depăși timpul reîncercare din cauza unor factori externi, cum ar fi de căutare DNS lent, controler de domeniu lent sau KDC, timpul necesar pentru a comunica cu browser-ul SQL Server, congestionarea rețelei, și așa mai departe. Astfel de factori externi pot împiedica clientul să se conecteze la baza de date oglindită. De asemenea, factorii externi pot face timpul de creare a conexiunii mai mare decât timpul de reîncercare stabilit. Pentru mai multe informații despre parcurgeri DNS și browser-ul SQL Server prin conectarea părții inițiale pentru a vedea. Cum se instalează conexiunea inițială cu baza de date de sesiune oglindire mai devreme în acest subiect.

Dacă încercarea de conectare eșuează sau timpul de reîncercare expiră înainte ca conexiunea să fie creată cu succes, furnizorul de date încearcă să se conecteze la un alt membru. Dacă creați o conexiune eșuează, furnizorul încearcă să schimbe numele originale ale participantului și partener în failover până la stabilirea conexiunii sau până în momentul intrării. Perioada de expirare implicită este de 15 secunde. Se recomandă setarea valorii de expirare la cel puțin 5 secunde. Setarea unui interval de timp mai scurt poate împiedica reușita oricãrei încercãri de conectare.

Timpul de reîncercare este procentul din timpul de intrare. Timpul de reîncercare pentru o încercare de conectare crește cu fiecare ciclu de succes. În primul ciclu, timpul de reîncercare pentru fiecare dintre cele două încercări este de 8% din timpul total de intrare. Cu fiecare ciclu de succes, algoritmul de repetare mărește timpul maxim de repetare cu același număr. Prin urmare, timpul de reîncercare pentru primele opt încercări de conectare este după cum urmează:

8%, 8%, 16%, 16%, 24%, 24%, 32%, 32%

Timpul de repetare este calculat folosind următoarea formulă:

unde PreviousRetryTime este inițial 0.

De exemplu, dacă utilizați timpul de conectare de 15 secunde, LoginTimeout = 15. În acest caz, timpul de reîncercare atribuit primelor trei cicluri va fi după cum urmează:

Figura următoare prezintă perioadele de reîncercare pentru încercările de conectare reușite, timpul de așteptare pentru fiecare dintre acestea expirând.

Conectarea clienților la o sesiune de mirroring a bazei de date (server sql)

Pentru perioada de expirare implicită pentru conectarea implicită, timpul maxim atribuit primelor trei încercări de conectare este de 14,4 secunde. Dacă fiecare încercare a folosit tot timpul atribuit, ar fi fost doar 0,6 secunde înainte de expirarea timpului de intrare. În acest caz, al patrulea ciclu va fi scurtat, permițând doar ultima încercare de conectare rapidă utilizând numele participantului sursă. Cu toate acestea, încercarea de conectare poate eșua în timpul încercării, mai mică decât cea planificată, mai ales în ciclurile ulterioare. De exemplu, o eroare de rețea poate provoca încetarea încercării înainte de trecerea timpului de reîncercare. Dacă încercările anterioare au eșuat din cauza unei erori de rețea, timp suplimentar va fi disponibil pentru ciclul al patrulea și, eventual, suplimentar.

Un alt motiv pentru încercările eșuate este o instanță de server inactivă, care se întâmplă atunci când o instanță de server transferă o resursă către baza sa de date. În acest caz, se efectuează o întârziere de întoarcere pentru a împiedica supraîncărcarea participanților prin efectuarea de încercări rapide de conectare.


Dacă sunt disponibile numele ambilor participanți și timpul de așteptare de intrare este infinit, clientul încearcă să se conecteze la serverele de comutare în mod continuu între numele original al participantului și numele failover partener.
)

Reîncercați întârzierile în timpul procesului de eroare

Dacă clientul încearcă să se conecteze la un participant care se deplasează la o altă resursă, participantul răspunde imediat că nu este disponibil. În acest caz, fiecare ciclu de încercări de conectare va fi semnificativ mai scurt decât timpul de reîncercare programat. Aceasta înseamnă că, înainte de expirarea timpului de intrare, pot apărea multe încercări de conectare. Pentru a evita supraîncărcarea participanților serie rapidă de încercări de conectare în timpul unei failover, un furnizor de acces la date adaugă o scurtă întârziere din nou după fiecare ciclu reîncerca. Durata întârzierii de întoarcere specificată este determinată de algoritmul de întârziere retransmisie. După primul ciclu, întârzierea este de 100 de milisecunde. După fiecare dintre următoarele trei runde repeta intarziere este dublat - la 200, 400 și 800. Pentru toate ciclurile ulterioare de întârziere repetarea de la 1 secundă până la implementarea cu succes a tentativelor de conectare sau timpul de expirare.


Dacă instanța serverului este oprită, cererea de conectare se termină imediat.

Următoarea figură arată cum întârzierile de retur afectează încercările de conectare în timpul procesului failover manual, în care partenerii își schimbă rolurile. Perioada de așteptare este de 15 secunde.

Conectarea clienților la o sesiune de mirroring a bazei de date (server sql)







Articole similare

Trimiteți-le prietenilor: