Page 1
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Exponat der Staatsbibliothek zu Berlin
A lot of people, until they get bitten by data corruption that causes them severe pain, are of the mindset, "I don’t care, I just want it to go fast. I’ve never lost any data." Bill Moore 2007, The future of file systems
ORA-01578
Umgang mit Block-Korruptionen
DOAG Nürnberg, 17. November 2016 [email protected]
Page 2
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Motivation für das Thema Analyse- und Reparaturverfahren Arten von Blockschäden
db_block_checksum
db_block_checking
db_lost_write_protect
1. Einleitung
2. Früherkennung von Blockkorruptionen verbessern
Agenda
Page 3
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Backup-Server
Anwendungs- Server
Netzwerkkarte MTU 1500
Storage-Server
512 Byte Dateisystem
Die abenteuerliche und riskante Reise eines Oracle Datenblocks
Mobile Anwender
Datenbank-Server Anwender
vor PC
Page 4
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
1. zertifizierte Kombinationen
2. Prüfsummen, wo möglich
3. Ende-zu-Ende Prüfsummen
4. regelmäßige Validierungen
5. gespiegelte Daten
HARD Initiative Data Integrity Initiative
RMAN Validate Disk Scrubbing Bänder umschreiben
Top 5 Regeln gegen schleichenden Datenverlust
Page 5
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
DBMS_REPAIR
Validierungs-, Analyse- und Reparaturwerkzeuge
DBV analyze table … validate structure cascade
alter system dump …
ORA-1578 Troubleshooting Tool (Doc ID 1567169.1)
DBMS_HM
hcheck.sql - This script is for use mainly under the guidance of Oracle Support. Script to Check for Known Problems in Oracle8i, Oracle9i, Oracle10g, Oracle 11g and Oracle 12c (Doc ID 136697.1)
EVENTS 10231 / 10233 … 16490 … 43810 ... It should *NOT* be used unless explicitly requested …
Log Miner
DATAPUMP Bug 17511071 Datapump expdp silently
skips corrupt block that produce ORA-1578
RMAN report / validate … BMR immer außer: data file header block (block 1) (Doc ID 144911.1)
Troubleshooting Assistant (Doc ID 1543698.2) Get Assistance to understand and solve Oracle Database Server Corruptions
undokumentierte Parameter _allow_resetlogs_corruption
_allow_terminal_recovery_corruption
_allow_read_only_corruption
Troubleshooting Assistant: Handling Block Corruptions in Oracle7/8/8i/9i/10g/11g (Doc ID 1598103.2)
Oracle Service Request …
Handling Oracle Block Corruptions (Doc ID 28814.1)
Page 6
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Blockkorruptionen kommen in einer unüberschaubaren Vielfalt …
ORA-752 ORA-753 ORA-754 ORA-756 ORA-758 ORA-1410 ORA-1498 ORA-1499 ORA-1578 ORA-8102 ORA-8103 ORA-26040
ORA-600 [4193] ORA-600 [4194] ORA-600 [4512] ORA-600 [4552] ORA-600 [6006] ORA-600 [6101] ORA-600 [6856] ORA-600 [kcbz_check_objd_typ_3] ORA-600 [kdblkcheckerror] ORA-600 [kddummy_blkchk] ORA-600 [ktadrprc-1] ORA-600 [ktbdchk1-bad dscn] ORA-600 [ktsircinfo_num1] ORA-600 [qertbfetchbyrowid]
ORA-600 [12700] ORA-600 [13011] ORA-600 [13013] ORA-600 [13030] ORA-600 [2103] ORA-600 [25012] ORA-600 [25026] ORA-600 [25027] ORA-600 [2662] ORA-600 [3020] ORA-600 [4000] ORA-600 [4097] ORA-600 [4137]
Memory / Controlfile / Redo / Undo / Temp / Index / Tabelle / Partition / LOB
Page 7
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Unterschiedliche Prüfsummen für unterschiedliche Korruptionsarten
Physische Korruption
Logische Korruption
Korrumpierte Schreibvorgänge
Nologging
Page 8
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Physischer Defekt auch: physically corrupt fractured incomplete media corrupt
Unterschiedliche Prüfsummen für unterschiedliche Korruptionsarten
db_block_checksum OFF TYPICAL FULL
Page 9
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Unterschiedliche Prüfsummen für unterschiedliche Korruptionsarten
intra-Block inter-Block
1 2
X 4
1
2
1
X
Unterschiedliche Prüfsummen für unterschiedliche Korruptionsarten
db_block_checking OFF LOW MEDIUM FULL
Logischer Defekt
auch: logically corrupt software corrupt soft corrupt
Page 10
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Stray Writes auch: lost writes misdirected writes phantom writes torn writes data path corruption parity pollution
1 2
3 4
Unterschiedliche Prüfsummen für unterschiedliche Korruptionsarten
db_lost_write_protect
OFF TYPICAL FULL
Page 11
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Nologging auch: unrecoverable
1 2
3 4 *
Keine automatische
Warnung
Unterschiedliche Prüfsummen für unterschiedliche Korruptionsarten
RMAN> report unrecoverable; oder Abfragen gegen: v$datafile
v$nonlogged_block v$backup_nonlogged v$copy_nonlogged
Page 12
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
db_block_checksum
db_block_checking
db_lost_write_protect
Force Logging
Physische Korruption
Logische Korruption
Korrumpierte Schreibvorgänge
Nologging
AUS
AUS
AUS
halb an
Unterschiedliche Prüfsummen für unterschiedliche Korruptionsarten
Page 13
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Empfehlung aus Doc ID 1302539.1: Best Practices for Corruption Detection, Prevention, and Automatic Repair - in a Data Guard Configuration
Was empfiehlt Oracle ?
Vorgaben in 11g/12c: TYPICAL OFF NONE
Oracle empfiehlt und warnt zugleich!
Page 14
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Performanceeinfluss laut Dokumentation
11g / 12c Oracle Referenz
db_block_checksum
Typical: 1-2%
FULL: 4-5%
db_block_checking
1-10% je nach Workload
... oder höher
bzw. viel höher
db_lost_write_protect
Vernachlässigbar,
evtl. erhöhtes Redoaufkommen
Page 15
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Bug in 11.2.0.2 (ohne Patches) db_lost_write_protect=TYPICAL
Page 16
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
zwei Tage nach db_block_checking=FULL
Anruf vom Datawarehouse Kollegen: Update-Statement scheint zu stehen
Page 17
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
36 Möglichkeiten und drei Vorgaben – was ist die optimale Kombination?
1. off off none
2. off off typical
3. off off full
4. off low none
5. off low typical
6. off low full
7. off medium none
8. off medium typical
9. off medium full
10.off full none
11.off full typical
12.off full full
13.typical off none
14.typical off typical
15.typical off full
16.typical low none
17.typical low typical
18.typical low full
19.typical medium none
20.typical medium typical
21.typical medium full
22.typical full none
23.typical full typical
24.typical full full
25.full off none
26.full off typical
27.full off full
28.full low none
29.full low typical
30.full low full
31.full medium none
32.full medium typical
33.full medium full
34.full full none
35.full full typical
36.full full full
db_block_checksum db_block_checking db_lost_write_protect
Vorgabe
Page 18
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Ein kompletter Versuchsdurchlauf dauert zwischen 2 Tagen und 2 Monaten.
alter system ...
drop/create Tabellen
DML
Ressourcen messen
36 x alter system
5 Wiederholungen in unterschiedlicher Reihenfolge
Page 19
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
CPU used by this session
CPU used when call started
DB time
change write time
redo size for lost write detection
redo entries for lost write detection
Sechs signifikante Ressource Zähler
Page 20
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Page 21
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
IOT_COMPRESS insert append parallel 100.000 Zeilen 10 Mal länger = 1000%
checksum checking lost_wr AVG_HSEC MIN_HSEC MAX_HSEC STDDEV VERSUCHE
-------- -------- -------- -------- -------- -------- ------- --------
OFF OFF NONE 107 105 109 2 5
OFF MEDIUM NONE 297 295 298 2 5
OFF FULL NONE 1056 1043 1066 9 5
OFF FULL TYPICAL 1055 1039 1064 11 5
OFF FULL FULL 1054 1046 1062 7 5
...
TYPICAL OFF NONE 109 107 110 1 5
TYPICAL MEDIUM NONE 298 294 302 3 5
...
TYPICAL MEDIUM FULL 298 295 301 2 5
TYPICAL FULL NONE 1058 1044 1066 9 5
TYPICAL FULL TYPICAL 1065 1054 1071 7 5
TYPICAL FULL FULL 1053 1046 1062 7 5
FULL OFF NONE 117 116 118 1 5
...
FULL LOW TYPICAL 116 114 118 2 5
FULL LOW FULL 115 115 116 0 5
FULL MEDIUM NONE 304 301 307 2 5
FULL MEDIUM TYPICAL 306 304 309 2 5
FULL MEDIUM FULL 304 299 310 4 5
...
FULL FULL FULL 1065 1061 1073 5 5
Page 22
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Fazit sicherste Einstellung mit geringstem Überraschungspotential
db_block_checksum TYPICAL: ca. 2%
FULL: plus ca. 5% bis 10%
db_lost_write_protect TYPICAL: kein Einfluss auf Laufzeit
db_block_checking LOW: vernachlässigbar
MEDIUM: bis zu 200%, meist unauffällig
FULL: bis zu 1000% Laufzeit, Skalierungsproblem, “nur” Indizes
db_ultra_safe DATA_ONLY
Page 23
© 2012-2016 twg-it, alle Rechte vorbehalten ORA-01578, Umgang mit korrupten Blöcken DOAG Nürnberg 2016
Exponat der Staatsbibliothek zu Berlin
Die gedruckte Gutenbergbibel ist nach über 500 Jahren noch lesbar
Wie lange wird man ihre digitale Kopie lesen können
!
?