Construirea unui sistem cu toleranță la erori folosind modul de așteptare fizic oracol

Construirea unui sistem cu toleranță la erori cu Oracle Physical Standby

Prin implementarea unui sistem informatic bazat pe baza de date Oracle și prin organizarea unei strategii fiabile de recuperare a backup-ului, este posibilă începerea operării de producție a sistemului. În cazul unui accident, va fi posibilă restaurarea datelor la timpul necesar. Dar ce se întâmplă dacă timpul de repaus permis nu trebuie să depășească câteva minute? Apoi, nu puteți face fără moduri diferite de duplicare a datelor în timp real.







Structura Oracle Data Guard

În funcție de cerințele specifice privind timpul de recuperare și pierderea admisibilă a datelor în caz de accident (obiectiv de recuperare, obiectiv de recuperare [2]). Sunt posibile diferite scenarii de implementare:

  • Așteptare fizică DB - baza de date de rezervă este o copie fizică exactă a primarului, este în starea montat și, în același timp, este transferat fluxul informațiilor de redo.
  • Logică de așteptare DB - baza de date de rezervă nu este o copie exactă a bazei de date principale, este deschisă în modul citire-scriere și fluxul de comenzi SQL este transferat.

Dacă este necesar, o astfel de bază poate fi activată într-un timp scurt ca fiind una industrială.

Deoarece baza de date logică de așteptare nu este o copie exactă a bazei de date primare, și nu acceptă anumite tipuri de date, SQL-comandă, există o cerință de a asigura unicitatea de rânduri în tabele [4], considerăm că punerea în aplicare a exact fizice Standby DB. Mi se pare că folosirea DB Logic Standby este mai bine nu ca o copie de rezervă, ci ca o bază de date pentru rapoarte. Am ales pentru primar și de rezervă a bazelor de date următoarele setări: unități de producție care funcționează în modul maxim de disponibilitate, a trecut modificările sunt aplicate în modul de așteptare a bazei de date în timp real Apply Redo. Pentru acest mod de operare, procesul LGWR inițiază transferul de informații despre modificări. Diferența dintre regimurile de protecție este faptul că în modul de protecție maximă, tranzacția este înregistrată numai în cazul în care înregistrarea este făcută în revistele locale, și de la distanță, în caz de imposibilitate a bazei de date de înregistrări șterse se oprește și în modul de performanță maximă pentru a continua munca trebuie doar o înregistrare locală , iar baza de date principală continuă să funcționeze, chiar dacă nu există nicio conexiune la baza de date de rezervă.

Modul de disponibilitate maximă reprezintă o opțiune de compromis, schimbând automat cele două moduri. Dacă link-ul funcționează fără erori, transmisia are loc în mod sincron, în cazul în care apare o defecțiune, se efectuează automat trecerea la un mod mai puțin stricte. După eliminarea erorilor, se restabilește modul maxim de protecție [5].

Ce aveți nevoie pentru a crea un mediu de testare:

  • Două servere cu aceeași arhitectură, ele pot diferi în ceea ce privește numărul de procesoare, memorie, discuri, lansarea sistemului de operare etc. Permiteți serverului primar DB să fie numit Poltava, iar serverul de așteptare este Fastiv.
  • Modul bază de date trebuie să fie ARCHIVELOG.
  • Trebuie să utilizați Oracle Server Enterprise Edition Edition. În teste, vom folosi versiunea Oracle10.2 a EE pentru Solaris.

Pregătirea configurației de lucru

Așadar, avem o bază de date Oracle primară de lucru localizată pe serverul Poltava și trebuie să creăm o bază de date standby în standby pe serverul Fastiv. Trebuie să pregătiți fișierele de configurare și să efectuați setări suplimentare.

Permiteți numelui bazei de date să fie "TST", atribuiți valoarea ORACLE_SID = ORCL pentru baza de producție primară, pentru standby - DB ORACLE_SID = ORCL1. Fișierele DB primare sunt în directorul / tstb / ORCL, fișierele de așteptare DB sunt în directorul / tstb / ORCL1.

Este necesar să efectuați următoarele acțiuni:

Activați logarea forței pe sistemul de producție pentru a forța informațiile din jurnalele bazei de date, chiar și pentru așa-numitele operațiuni de Nologging:

SQL> ALTER DATABASE FORCE LOGGING;

Creați fișierul de așteptare pentru reluarea fișierelor. Acestea sunt necesare doar pentru funcționarea bazei de date în așteptare, dar le vom crea atât pe bază primară, cât și pe standby, în cazul schimbării rolurilor între baze de date, nu va fi nevoie să le creați.

Redo-ul de așteptare a fișierelor trebuie să fie creat nu mai mic decât redo-ul online, iar numărul n + 1 din numărul grupului de redo (a se vedea Lista 1).

Listarea 1. Adăugarea fișierelor în modul Repaus în așteptare

sqlplus "/ ca sysdba" <

ALTER DATABASE ADAȚI STANDBY LOGFILE GROUP 4 '/tstb/ORCL/redo01.stb' SIZE 100M REUSE;

ALTER DATABASE ADAȚI STANDBY LOGFILE GROUP 5 '/tstb/ORCL/redo02.stb' SIZE 100M REUSE;

ALTER DATABASE ADAȚI STANDBY LOGFILE GROUP 6 '/tstb/ORCL/redo03.stb' SIZE 100M REUSE;

ALTER DATABASE ADAȚI STANDBY LOGFILE GROUP 7 '/tstb/ORCL/redo04.stb' SIZE 100M REUSE;

Setați parametrii în fișierele parametrilor init.ora / spfile.ora pentru primar și în așteptare (consultați Listă 2).

Listarea 2. Lista parametrilor pentru init.ora / spfile.ora

* .control_files = '/ tstb / ORCL / control01.ctl', '/tstb/ORCL/control02.ctl', '/tstb/ORCL/control03.ctl'







* .LOG_ARCHIVE_DEST_1 = 'LOCATION = / tstb / log1 / VALID_FOR = (ALL_LOGFILES, ALL_ROLES) DB_UNIQUE_NAME = Kiev'

* .LOG_ARCHIVE_DEST_2 = 'SERVICE = Fastiv LGWR SYNC AFFIRM VALID_FOR = (ONLINE_LOGFILES, PRIMARY_ROLE) DB_UNIQUE_NAME = Fastiv'

Crearea unei baze de date standby în așteptare

Creați copii de siguranță ale bazei de date și fișierului de parolă și transferați fișierele copiate pe serverul Fastiv de rezervă.

Deoarece valorile ORACLE_SID pentru bazele de date primare și de rezervă sunt diferite, fișierele de parolă vor avea de asemenea nume diferite, de exemplu, orapwORCL și orapwORCL1.

Creați un fișier de control în așteptare și copiați-l pe serverul de așteptare în locația specificată în fișierul bază de date în așteptare:

SQL> ALTER DATABASE CREAȚI STANDBY CONTROLFILE AS '/tmp/standby.ctl';

Schimbați baza de date principală la modul de capacitate maximă cu următoarea comandă:

SQL> ALTER DATABASE SET BANDA DE DATE DE STANDBY PENTRU A MAXIMIZA DISPONIBILITATEA;

Bazele de date sunt pregătite să funcționeze. Acum puteți să porniți ambele baze de date.

Operații DB în timpul funcționării

În timpul operării este necesară efectuarea anumitor acțiuni - pornire, oprire, deschidere pentru citire, logare a jurnalelor pierdute, activarea unei baze de date de rezervă (failover), schimbarea stării (trecerea la comutare). Luați în considerare aceste operațiuni:

Scenariul stbstart este responsabil pentru pornirea bazei de date standby în modul de aplicare în timp real. Oprirea opțiunii de așteptare DB este furnizată de scriptul stbshut (a se vedea Lista 4).

Listarea 4. Pornirea și oprirea bazei de date fizice în așteptare

sqlplus "/ ca sysdba" <

modificați baza de date de bază de așteptare pentru baza de date;

ALTER DATABASE RECOVEREAZĂ BAZA DE BAZĂ DE STANDBY MANAGATĂ UTILIZAREA LOGOFILULUI CURENT

DECONECTAȚI DE LA SESIUNE;

sqlplus "/ ca sysdba" <

ALTER DATABASE RECOVEREAZĂ CALITATEA DE BAZĂ DE BAZĂ DE BAZĂ DE MANAGEMENT STANDBY;

Să verificăm mecanismul de trecere a modificărilor prin comutarea jurnalelor. Pe principalele:

SQL> ALTER SISTEM SWITCH LOGFILE;

SQL> SELECT GROUP #, THREAD #, SEQUENCE #, ARHIVAT, STATUS DE LA V $ STANDBY_LOG;

Scriptul este responsabil pentru pornirea bazei de date standby în modul read-only (vezi lista 5). Livrarea de Redo în acest caz continuă, dar modificările vor fi amânate până la ieșirea din acest mod.

Listing 5. Rularea bazei de date standby în modul read-only

sqlplus "/ ca sysdba" <

ALTER DATABASE RECOVEREAZĂ CALITATEA DE BAZĂ DE BAZĂ DE BAZĂ DE MANAGEMENT STANDBY;

modificați baza de date numai pentru citire;

Switchover - un script pentru schimbarea rolurilor între baze de date. Este necesar ca baza de date primară să fie deschisă, iar modul de așteptare trebuie să fie în modul de montare sau recuperare (a se vedea Lista 6). După cum puteți vedea în scenariu, pentru a schimba rolurile, trebuie să aveți acces la fiecare dintre bazele de date implicate în operație.

Listing 6. Schimbul de roluri între bazele de date Poltava și Fastiv

sqlplus "/ ca sysdba" <

REM se conectează primar

conectați sys / manager @ poltava ca sysdba

coloana SWITCHOVER_STATUS format A20 rubrica "Stare comutare" primar "

SELECTAȚI SWITCHOVER_STATUS DIN V \ $ DATABASE;

coloana DATABASE_ROLE format A20 rubrica "Rolul înainte de trecerea la comutare"

selectați DATABASE_ROLE din V \ $ DATABASE;

ALTER DATABASE ANGAJAM PENTRU TRANSMITEREA LA STANDBY FIZICĂ;

coloana DATABASE_ROLE format A20 rubrica "Rol după oprire"

selectați DATABASE_ROLE din V \ $ DATABASE;

REM conectați regimul de așteptare db la modul de aplicare redo

conectați sys / manager @ fastiv ca sysdba

coloana SWITCHOVER_STATUS format A20 rubrica "Stare comutare" standby "

SELECTAȚI SWITCHOVER_STATUS DIN V \ $ DATABASE;

coloana DATABASE_ROLE format A20 rubrica "Rolul înainte de trecerea la comutare"

selectați DATABASE_ROLE din V \ $ DATABASE;

ALTER DATABASE ANGAJAM PENTRU TRANSMITERE LA PRIMAR;

ALTER DATABASE OPEN;

REM dacă este doar în citire, nu deschideți - reporniți

REM SHUTDOWN IMMEDIATE;

coloana DATABASE_ROLE format A20 rubrica "Rol după oprire"

selectați DATABASE_ROLE din V \ $ DATABASE;

Failover este un script care activează baza de date de rezervă în cazul unui accident de bază. Deoarece nu mai există o bază de date de rezervă, înainte de activarea bazei de date de rezervă, aceasta trebuie transferată în modul de performanță maximă (a se vedea Lista 7).

SQL> ALTER DATABASE SET STANDBY DATABASE PENTRU MAXIMIZAREA PERFORMANȚEI;

Înregistrarea jurnalelor pierdute este prezentată în mod clar în Lista 8.

Listing 7. Activarea unei baze de date de rezervă în caz de accident

sqlplus "/ ca sysdba" <

coloana DATABASE_ROLE format A15 rubrica "Rolul înainte de trecerea la comutare"

selectați DATABASE_ROLE din V \ $ DATABASE;

ALTER DATABASE RECOVEREAZĂ FORȚA DE FINALIZARE A GESTIUNII DE BAZĂ DE BAZĂ STANDBY;

ALTER DATABASE ANGAJAM PENTRU TRANSMITERE LA PRIMAR;

ALTER DATABASE SETTAȚI DATABASE STANDBY PENTRU MAXIMIZAREA PERFORMANȚEI;

ALTER DATABASE OPEN;

coloana DATABASE_ROLE format A15 rubrica "Rolul după trecerea la comutare"

selectați DATABASE_ROLE din V \ $ DATABASE;

Listare 8. Definirea și permiterea manuală a transmiterii buștenilor

SQL> SELECTAȚI LISTA #, LOW_SEQUENCE #, HIGH_SEQUENCE # FROM V $ ARCHIVE_GAP;

THREAD # LOW_SEQUENCE # HIGH_SEQUENCE #

SQL> ALTER DATABASE REGISTRARE FISICĂ LOGFILE 'filespec1';

Automatizați monitorizarea muncii

Deoarece baza de date primară se află în modul maxim de disponibilitate, baza de date principală va continua să funcționeze dacă serverul în așteptare este oprit. Între starea primară și cea de așteptare se formează un decalaj. Pentru a detecta și rezolva o defecțiune, este nevoie de timp ca baza de date care se află subiacent să nu fie susținută. În acest moment, în cazul unui accident repetat deja în baza de date principală, este posibilă pierderea datelor. Pentru a detecta și a elimina astfel de situații în timp util, este necesar să se automatizeze procesul de monitorizare a funcționării ambelor baze de date.

Listing 9. Un script care caută erori în fișierul alert.log

dacă [-f / tmp / memsg_no]

FILESLIST = "ls -R / ora / admin / * / bdump / * .log

dir1 = `dirname $ | sed 's / \ / ora \ / admin \ /// g

MSG = '/ usr / local / bin / fetchlog -F 1: 100: 1000: s $ / var / adm / $.

MSG1 = "echo" $ "| egrep -i "ora-" `

Acest lucru se poate face, de exemplu, folosind pachetul fetchlog [6]. Pe baza acestui software, a fost creat scriptul fetchalert (vezi Listing 9), care poate fi lansat folosind daemonul crond:

testcase $ 0,15,30,45 * * * * / usr / local / bin / fetchalert> / dev / null 2> 1

Schema propusă este simplă și nu necesită hardware special pentru implementarea acesteia, dar are și dezavantaje:

  • Unul dintre servere este într-o stare pasivă și nu servește solicitărilor utilizatorilor.
  • Dacă fluxul de tranzacții din baza de date primară este prea mare, aceasta va crea sarcină suplimentară din cauza replicării în rețeaua partajată la care sunt conectate serverele.
  • În această configurație, nu există niciun firmware special care să monitorizeze starea sistemului partener, similar cu cele folosite pentru a construi, de exemplu, sistemele de cluster. În acest caz, atunci când apare un eșec, să zicem că o conexiune la rețea este întreruptă, serverele nu pot identifica în mod unic sursa problemelor. În acest caz, administratorul de sistem trebuie să intervină pentru a decide să treacă la serverul de rezervă. Timpul în care o persoană trebuie să ia o astfel de decizie trebuie să fie luat în considerare atunci când se evaluează timpul total de recuperare a unui sistem după o defecțiune, împreună cu durata procedurii de comutare în sine.

Dar este posibil ca acești factori să nu aibă un impact grav asupra sistemului, deoarece tehnologiile moderne de rețea permit transmiterea unor volume mari de date pe distanțe semnificative, iar un server mai mic poate fi folosit ca rezervă.







Trimiteți-le prietenilor: