przestoje w bazach danych mogą być niezwykle kosztowne dla organizacji opartych na danych, co prowadzi Twoją firmę do niemal zatrzymania. Jedną z najczęstszych przyczyn awarii bazy danych jest uszkodzenie bloków danych. W tym artykule omówimy, w jaki sposób można wykryć i naprawić problem uszkodzenia bloków w bazie danych Oracle.

co to jest uszkodzenie bloku danych?

uszkodzenia bloków danych występują, gdy dane nie są w oczekiwanym stanie. Blok może zawierać treści, które nie są wewnętrznie spójne, lub może zostać zmieniony tak, aby był nierozpoznawalny jako część formatu bazy danych Oracle.

niektóre uszkodzenia bloków danych są stosunkowo niewielkie, dotyczą tylko jednego bloku. Inne uszkadzają znaczną część bazy danych, czyniąc ją bezużyteczną i prowadząc do utraty krytycznych informacji.

dlaczego występują uszkodzenia bloków danych?

uszkodzenia bloków danych mogą wystąpić za każdym razem, gdy dane są zmieniane i mogą być powiązane zarówno z problemami sprzętowymi, jak i programowymi. Problemy z jednym lub wszystkimi z poniższych składników mogą powodować uszkodzenia bloków danych:

  • Dysk Twardy
  • kontroler dysku
  • system operacyjny
  • sieć pamięci masowej (SAN)
  • urządzenie pamięci masowej

jak zapobiec uszkodzeniom bloków danych?

uszkodzenia bloków danych są trudne do uniknięcia, ponieważ są z natury nieprzewidywalne. W rzeczywistości, uszkodzenia są nieuniknione w dzisiejszych bardzo złożonych środowiskach baz danych.

jednak nadal możesz pracować nad łagodzeniem skutków uszkodzeń bloków danych dzięki solidnej strategii tworzenia kopii zapasowych i odzyskiwania. Oracle oferuje różne narzędzia i rozwiązania do tych celów, w tym:

  • Oracle Data Guard: chroni korporacyjne bazy danych w przypadku awarii lub uszkodzenia.
  • Doradca ds. odzyskiwania danych: diagnozuje utratę lub uszkodzenie danych i wykonuje naprawy.
  • Oracle Flashback: przywraca tabele lub wiersze bazy danych do wcześniejszego stanu.
  • Oracle Recovery Manager: Tworzenie kopii zapasowych i odzyskiwanie baz danych Oracle.
  • Oracle Secure Backup: tworzy kopie zapasowe danych systemu plików i plików bazy danych Oracle na taśmie.

jak wykrywać i monitorować uszkodzenia bloków danych?

pomimo wszelkich starań, uszkodzenie bloku danych może wystąpić w dowolnym momencie. Na szczęście Oracle może wykrywać i naprawiać uszkodzenia bloków danych na wiele sposobów:

  • Oracle Recovery Manager (RMAN)
  • DBVerify
  • polecenie ANALYZE
  • parametr DB_BLOCK_CHECKING
  • blok odzyskiwania mediów (BMR)
  • DBMS_REPAIR

Oracle Recovery Manager (RMAN)

aby sprawdzić bazę danych pod kątem uszkodzeń fizycznych i logicznych, uruchom następujące polecenie w Oracle RMAN:

  • BACKUP VALIDATE CHECK LOGICAL DATABASE ARCHIVELOG ALL;

polecenie VALIDATE w Oracle RMAN może być używane do sprawdzania poprawności plików, przestrzeni tabel, a nawet całych baz danych. Na przykład:

  • zweryfikuj DATAFILE ’ / u01/oradata/ORCL / system01.dbf”;
  • Walidacja użytkowników tabel;
  • Walidacja bazy danych;

jeśli Oracle RMAN wykryje jakiekolwiek uszkodzenia bloków danych, zostaną one wyświetlone w widoku V$DATABASE_BLOCK_CORRUPTION.

DBVerify

DBVerify to zewnętrzne narzędzie wiersza poleceń do walidacji baz danych i plików online i offline, w tym kopii zapasowych. Poniższy przykład demonstruje użycie polecenia dbv:

  • dbv file=/U01/oradata/ORACL/system01.DBF feedback=10000 blocksize=8192

należy pamiętać, że nie można używać DBVerify do plików kontroli Oracle lub dzienników ponawiania.

polecenie ANALYZE

możesz użyć funkcji ANALYZE… VALIDATE STRUCTURE construction, aby zweryfikować bloki danych w obiekcie. Po zakończeniu analizy sprawdź tabelę INVALID_ROWS, aby zobaczyć uszkodzone dane.

aby najpierw utworzyć tabelę INVALID_ROWS, uruchom następujące polecenie w SQL:

  • @$ORACLE_HOME/RDBMS / admin / UTLVALID.SQL

po drugie, sprawdź poprawność struktury tabeli i indeksu za pomocą następującego polecenia:

  • przeanalizuj stół scott.EMP Walidacja struktury kaskada;

parametr DB_BLOCK_CHECKING

ustawiając parametr DB_BLOCK_CHECKING NA, możesz mieć bloki bazy danych Oracle check dla własnej spójności. Należy pamiętać, że może to zwiększyć obciążenie serwera do 10%, więc używaj tej opcji tylko wtedy, gdy wydajność nie ma większego znaczenia.

Block Media recovery (BMR)

Block media recovery (BMR) pozwala odzyskać jeden lub więcej bloków danych bez wpływu na plik jako całość. W rezultacie uzyskasz niższy średni czas naprawy (MTTR) i większą dostępność, ponieważ musisz tylko wyłączyć dotknięte bloki w trybie offline.

ta taktyka jest przydatna, gdy tylko ograniczona liczba bloków danych została uszkodzona. BMR można wykonywać tylko w Oracle RMAN za pomocą polecenia BLOCKRECOVER.

DBMS_REPAIR

pakiet DBMS_REPAIR firmy Oracle może zarówno wykrywać, jak i naprawiać uszkodzenia. Aby to zrobić, musisz najpierw utworzyć dwie tabele administracyjne. Te tabele będą zawierały listę uszkodzonych bloków i klawisze indeksu wskazujące na te bloki:

BEGIN

DBMS_REPAIR.admin_tables (

table_name => 'REPAIR_TABLE’,

table_type => DBMS_REPAIR.repair_table,

action => DBMS_REPAIR.create_action,

tablespace => 'USERS’);

DBMS_REPAIR.admin_tables (

table_name => 'ORPHAN_KEY_TABLE’,

table_type => DBMS_REPAIR.orphan_table,

action => DBMS_REPAIR.create_action,

tablespace => 'USERS’);

END;

drugim krokiem jest użycie procedury CHECK_OBJECT do zbadania tabeli:

SET SERVEROUTPUT ON

DECLARE

V_NUM_CORRUPT INT;

BEGIN

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;

następnie użyj procedury FIX_CORRUPT_BLOCKS, aby zaznaczyć uszkodzone bloki:

SET SERVEROUTPUT ON

DECLARE

V_NUM_FIX INT;

BEGIN

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;

następnym krokiem jest sprawdzenie kluczy osieroconych, które są kluczowymi wpisami wskazującymi na uszkodzony blok danych:

SET SERVEROUTPUT ON

DECLARE

V_NUM_ORPHANS INT;

BEGIN

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;

jeśli istnieje 1 lub więcej kluczy osieroconych, musisz odbudować indeks bazy danych za pomocą procedury REBUILD_FREELISTS:

BEGIN

DBMS_REPAIR.rebuild_freelists (

schema_name => 'SCOTT’,

object_name => 'DEPT’,

object_type => DBMS_REPAIR.table_object);

END;

na koniec użyj procedury SKIP_CORRUPT_BLOCKS, aby upewnić się, że uszkodzone bloki są pomijane podczas zapytań:

BEGIN

DBMS_REPAIR.skip_corrupt_blocks (

schema_name => 'SCOTT’,

object_name => 'DEPT’,

object_type => DBMS_REPAIR.table_object,

flags => DBMS_REPAIR.skip_flag);

koniec;

podsumowanie

chociaż uszkodzenie bloków danych jest niefortunnym faktem, Oracle ma dojrzały, szeroki pakiet narzędzi do ochrony i odzyskiwania danych w przedsiębiorstwie. Korzystanie z oprogramowania takiego jak Oracle Data Guard i Oracle RMAN, a także regularne kontrole korupcji, pomoże przeciwdziałać problemowi uszkodzenia bloków danych.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.