întreruperile bazei de date pot fi extrem de costisitoare pentru organizațiile bazate pe date, aducând afacerea dvs. într-un impas aproape. Una dintre cele mai frecvente cauze ale întreruperilor bazei de date este corupția blocurilor de date. În acest articol, vom discuta despre modul în care puteți detecta și repara problema corupției blocurilor din Baza de date Oracle.
ce este o corupție bloc de date?
coruperile blocurilor de date apar ori de câte ori datele nu sunt în starea așteptată. Blocul poate avea conținut care nu este consecvent intern sau poate fi modificat pentru a fi de nerecunoscut ca parte a formatului bazei de date Oracle.
unele corupții ale blocurilor de date sunt relativ minore, afectând doar un singur bloc. Alții corupe o parte semnificativă a bazei de date, făcându-l inutilizabil și ducând la pierderea informațiilor critice.
de ce apar corupții bloc de date?
coruperile blocurilor de date pot apărea oricând datele sunt modificate și pot fi urmărite atât la probleme hardware, cât și la software. Problemele cu oricare sau toate componentele următoare pot duce la coruperea blocurilor de date:
- Hard disk
- controler de disc
- sistem de Operare
- rețea de stocare (SAN)
- dispozitiv de stocare
cum puteți preveni coruperea blocurilor de date?
corupțiile blocurilor de date sunt dificil de prevenit, deoarece sunt în mod inerent imprevizibile. Într-adevăr, corupțiile sunt inevitabile în mediile de baze de date extrem de complexe de astăzi.
cu toate acestea, puteți lucra în continuare pentru a atenua efectele corupției blocurilor de date cu o strategie robustă de backup și recuperare. Oracle oferă o varietate de instrumente și soluții în aceste scopuri, inclusiv:
- Oracle Data Guard: protejează bazele de date ale întreprinderii în caz de dezastru sau corupție.
- Data Recovery Advisor: diagnostichează pierderea sau corupția datelor și efectuează reparații.
- Oracle Flashback: restabilește tabelele sau rândurile bazei de date la o stare anterioară.
- Oracle Recovery Manager: face backup și recuperează bazele de date Oracle.
- Oracle Secure Backup: face backup pentru datele sistemului de fișiere și fișierele Oracle Database pe bandă.
cum detectați și monitorizați corupția blocurilor de date?
în ciuda eforturilor dvs., corupția blocurilor de date poate apărea în orice moment. Din fericire, există mai multe modalități prin care Oracle poate detecta și repara corupția blocurilor de date:
- Oracle Recovery Manager (RMAN)
- DBVerify
- analizați comanda
- db_block_checking parametru
- blocați recuperarea media (BMR)
- DBMS_REPAIR
Oracle Recovery Manager (RMAN)
pentru a verifica o bază de date pentru corupție fizică și logică, executați următoarea comandă în Oracle RMAN:
- backup validare verificare logică bază de date ARCHIVELOG toate;
comanda validare din Oracle RMAN poate fi utilizată pentru a valida fișiere, spații de tabele și chiar baze de date întregi. De exemplu:
- validați fișierul de date ‘ / u01/oradata/ORCL / system01.dbf’;
- validați utilizatorii spațiului de masă;
- validați baza de date;
dacă Oracle RMAN detectează orice corupere a blocurilor de date, acestea vor fi afișate în vizualizarea V$DATABASE_BLOCK_CORRUPTION.
DBVerify
DBVerify este un utilitar extern de linie de comandă pentru validarea bazelor de date și fișierelor online și offline, inclusiv copii de rezervă. Exemplul de mai jos demonstrează utilizarea comenzii dbv:
- fișier dbv= / u01/oradata/ORACL / system01.feedback dbf = 10000 blocksize=8192
rețineți că nu puteți utiliza dbverify pentru fișierele de control Oracle sau jurnalele de refacere.
analizați comanda
puteți utiliza analiza… validați construcția structurii pentru a verifica blocurile de date dintr-un obiect. După finalizarea analizei, Verificați tabelul INVALID_ROWS pentru a vedea datele corupte.
pentru a crea mai întâi tabelul INVALID_ROWS, executați următoarea comandă în SQL:
- @$ORACLE_HOME/rdbms/admin / UTLVALID.SQL
în al doilea rând, validați tabelul și structura indexului cu următoarea comandă:
- analiza tabelul scott.EMP validează structura cascadă;
parametrul db_block_checking
prin setarea parametrului Db_block_checking la , puteți avea blocuri Oracle check database pentru auto-consistență. Rețineți că acest lucru poate adăuga până la 10% cheltuieli generale la server, deci utilizați această opțiune numai dacă performanța nu are o importanță deosebită.
Block Media recovery (BMR)
Block Media recovery (BMR) vă permite să recuperați unul sau mai multe blocuri de date fără a afecta fișierul în ansamblu. Drept urmare, veți experimenta un timp mediu mai mic pentru reparații (MTTR) și vă veți bucura de o disponibilitate mai mare, deoarece trebuie doar să luați blocurile afectate offline.
această tactică este utilă atunci când doar un număr limitat de blocuri de date au fost corupte. Puteți efectua BMR numai în cadrul Oracle RMAN folosind comanda BLOCKRECOVER.
DBMS_REPAIR
Pachetul Dbms_repair Oracle poate detecta și repara corupția. Pentru a face acest lucru, trebuie mai întâi să creați două tabele de administrare. Aceste tabele vor conține o listă de blocuri corupte și tastele index care indică acele blocuri:
începe
DBMS_REPAIR.admin_tables (
table_name => ‘REPAIR_TABLE’,
table_type = > DBMS_REPAIR.repair_table,
acțiune = > DBMS_REPAIR.create_action,
tablespace => ‘USERS’);
DBMS_REPAIR.admin_tables (
table_name => ‘ORPHAN_KEY_TABLE’,
table_type = > DBMS_REPAIR.orphan_table,
acțiune = > DBMS_REPAIR.create_action,
tablespace = > ‘USERS’);
END;
al doilea pas este de a utiliza procedura CHECK_OBJECT pentru a examina tabelul:
setați SERVEROUTPUT pe
declara
v_num_corrupt INT;
începe
v_num_corrupt := 0;
DBMS_REPAIR.check_object (
schema_name => ‘SCOTT’,
object_name => ‘DEPT’,
repair_table_name => ‘REPAIR_TABLE’,
corrupt_count => v_num_corrupt);
dbms_output.put_line (‘number corrupt: | / / TO_CHAR (v_num_corrupt));
END;
apoi, utilizați procedura FIX_CORRUPT_BLOCKS pentru a marca blocurile corupte:
setați SERVEROUTPUT pe
declara
v_num_fix INT;
începe
v_num_fix := 0;
DBMS_REPAIR.fix_corrupt_blocks (
schema_name => ‘SCOTT’,
object_name => ‘DEPT’,
object_type = > Dbms_Repair.table_object,
repair_table_name => ‘REPAIR_TABLE’,
fix_count => v_num_fix);
DBMS_OUTPUT.put_line (‘num fix: | / / TO_CHAR (v_num_fix));
END;
următorul pas este să verificați cheile orfane, care sunt intrări cheie care indică un bloc de date corupt:
setați SERVEROUTPUT pe
declara
v_num_orphans INT;
începe
v_num_orphans := 0;
DBMS_REPAIR.dump_orphan_keys (
schema_name => ‘SCOTT’,
object_name => ‘PK_DEPT’,
object_type = > DBMS_REPAIR.index_object,
repair_table_name => ‘REPAIR_TABLE’,
orphan_table_name => ‘ORPHAN_KEY_TABLE’,
key_count => v_num_orphans);
DBMS_OUTPUT.put_line (‘orphan key count:’ | | TO_CHAR (v_num_orphans));
END;
dacă există 1 sau mai multe chei orfane, atunci trebuie să reconstruiți indexul bazei de date cu procedura REBUILD_FREELISTS:
BEGIN
DBMS_REPAIR.rebuild_freelists (
schema_name => ‘SCOTT’,
object_name => ‘DEPT’,
object_type = > DBMS_REPAIR.table_object);
END;
în cele din urmă, utilizați procedura SKIP_CORRUPT_BLOCKS pentru a se asigura că blocurile corupte sunt omise în timpul interogărilor:
BEGIN
DBMS_REPAIR.skip_corrupt_blocks (
schema_name => ‘SCOTT’,
object_name => ‘DEPT’,
object_type = > DBMS_REPAIR.table_object,
steaguri = > DBMS_REPAIR.skip_flag);
sfârșit;
concluzie
în timp ce corupția blocurilor de date este un fapt nefericit al vieții, Oracle are o suită matură și largă de instrumente pentru a vă proteja și recupera datele întreprinderii. Utilizarea de software precum Oracle Data Guard și Oracle RMAN, precum și efectuarea de verificări periodice ale corupției, vă vor ajuta să contracarați problema corupției blocurilor de date.