יועץ ה-recovery הכי נחמד שתפגשו אי פעם…

אחת הבעיות העיקריות שאני נתקל בהן אצל לקוחות שסובלים ממצבים שדורשים recovery היא העובדה שלא תמיד ברור להם (או בכלל) מה השלבים שצריך לבצע כדי לבצע את ה-recovery בצורה היעילה ביותר, הנוחה ביותר וזו שתיתן את הפתרון במינימום בעיות. מכוון ששחזור נעשה תחת לחץ במרבית המקרים אורקל הציגו בגרסה 11g יועץ (advisory) חדש בתוך ה-RMAN שיכול לעזור לנו לבוא ולפתור בעיות שדורשות שחזור – מרמת הבלוק ועד רמת קובץ ואפילו tablespace.

הרעיון הוא שאם אנחנו צריכים לבצע שחזור מתוך גיבוי (ורצוי שיהיה לנו גיבוי rman, כי זה מה שהיועץ הזה מכיר) אז אנחנו נוכל “לשאול” את היועץ מה הוא מציע לעשות. הכלי הזה יבדוק את המשאבים הזמינים לו (גיבויים, קבצי archive, מהות הבעיה וכדומה) ויספק לנו פתרון אחד (או אם יש לו יותר, אז יותר) כדי לפתור את הבעיה.
ניקח דוגמה: אם מאיזושהי סיבה נמחק לנו קובץ datafile של בסיס הנתונים, אין לנו ברירה אלא ללכת לפתרון של שחזור. אם נרצה לפתור את הבעיה בצורה ידנית אנחנו נצטרך לבדוק איזה גיבוי עדכני יש לנו, האם יש לנו גיבוי מלא או אינקרמנטלי, לאתר את קבצי ה-archive log שלנו מאז הגיבוי, להבין מה מצב ה-redo log ואז לבצע restore לקובץ הנכון ואז recover. התהליך הזה יכול לקחת זמן ל-dba הלא מנוסה ולכן אנחנו מקבלים מאורקל כלי שימושי.
עכשיו שהבנו מה הרעיון, בוא נלמד איך להשתמש בו:
כאשר יש לנו בעיה בבסיס הנתונים, נפתח את rman ונתחבר באמצעותו ל-db:

rman target /

לאחר ההתחברות נפעיל את ה-advisory כדי שיתן לנו תמונת מצב כמו שהוא מכיר את בסיס הנתונים (במקרה הזה, הכול תקין):

RMAN> list failure;
using target database control file instead of recovery catalog
no failures found that match specification
RMAN>

במידה ונמחק לנו קובץ נקבל את התשובה הבאה:

SQL> CREATE TABLE test_tab (id NUMBER) TABLESPACE example;
CREATE TABLE test_tab (id NUMBER) TABLESPACE example
*
ERROR at line 1:
ORA-01116: error in opening database file 5
ORA-01110: data file 5: '/home/oracle/app/oracle/oradata/orcl/example01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3

כאשר נבדוק עם היועץ מה הוא אומר בנושא, נקבל את התשובה הבאה:

RMAN> list failure;    
List of Database Failures
=========================
Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
142        HIGH     OPEN      23-FEB-14     One or more non-system datafiles are missing
RMAN>

בשלב הזה אנחנו יכולים לשאול את היועץ מה יש לו להציע לנו:

RMAN> advise failure 142;
List of Database Failures
=========================
Failure ID Priority Status    Time Detected Summary
---------- -------- --------- ------------- -------
142        HIGH     OPEN      23-FEB-14     One or more non-system datafiles are missing

analyzing automatic repair options; this may take some time
using channel ORA_DISK_1
analyzing automatic repair options complete

Mandatory Manual Actions
========================
no manual actions available

Optional Manual Actions
=======================
1. If file /home/oracle/app/oracle/oradata/orcl/example01.dbf was unintentionally renamed or moved, restore it

Automated Repair Options
========================
Option Repair Description
------ ------------------
1      Restore and recover datafile 5  
  Strategy: The repair includes complete media recovery with no data loss
  Repair script: /home/oracle/app/oracle/diag/rdbms/orcl/orcl/hm/reco_1411708161.hm

RMAN>

היועץ מספר לנו שאבד קובץ אבל אין לנו מה לחשוש – אנחנו נוכל לבצע שחזור של הקובץ ואף מספק לנו סקריפט לתיקון הבעיה (reco_1411708161).
אם נבקש פרטים נוספים לגבי התיקון הוא יספר לנו את הדברים הבאים:

RMAN> repair failure preview;

Strategy: The repair includes complete media recovery with no data loss
Repair script: /home/oracle/app/oracle/diag/rdbms/orcl/orcl/hm/reco_1411708161.hm

contents of repair script:
   # restore and recover datafile
   sql 'alter database datafile 5 offline';
   restore datafile 5;
   recover datafile 5;
   sql 'alter database datafile 5 online';

RMAN>

באמצעות הכלי אנחנו אפילו יכולים להורות ליועץ לבצע את ההמלצות שלו והוא ישחזר לנו את הקובץ בצורה אוטומטית:

RMAN> repair failure noprompt;

Strategy: The repair includes complete media recovery with no data loss
Repair script: /home/oracle/app/oracle/diag/rdbms/orcl/orcl/hm/reco_1411708161.hm

contents of repair script:
   # restore and recover datafile
   sql 'alter database datafile 5 offline';
   restore datafile 5;
   recover datafile 5;
   sql 'alter database datafile 5 online';
executing repair script

sql statement: alter database datafile 5 offline

Starting restore at 23-FEB-14
using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00005 to /home/oracle/app/oracle/oradata/orcl/example01.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2014_02_23/o1_mf_nnndf_TAG20140223T200354_9jng0c71_.bkp
channel ORA_DISK_1: piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2014_02_23/o1_mf_nnndf_TAG20140223T200354_9jng0c71_.bkp tag=TAG20140223T200354
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
Finished restore at 23-FEB-14

Starting recover at 23-FEB-14
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:00

Finished recover at 23-FEB-14

sql statement: alter database datafile 5 online
repair failure complete

RMAN>

ואם ננסה ליצור את הטבלה מחדש אז אין בעיה:

SQL> l
  1* CREATE TABLE test_tab (id NUMBER) TABLESPACE example
SQL> /

Table created.

SQL>

כמה הערות:

1. אם הכלי לא מציג את הבעיה, ניתן לנסות להריץ validate לבסיס הנתונים. יש לא מעט פקודות validate אבל הפשוטה ביותר היא:

RMAN> validate database; 

על שאר כלי ה-validate אני אשתדל לכתוב מאמר נפרד מכוון שזה נושא מרתק.
2. הכלי יודע לשחזר כל דבר מרמת הבלוק ועד רמה של tablespace-ים שלמים. הוא לא יודע לשחזר טבלאות בודדות (rman יודע לשחזר טבלאות רק מגרסה 12, אבל על זה בפעם אחרת).
3. הכלי לא מכיר RAC. אם אתם משתמשים ב-RAC אז הכלי הזה לא עוזר לכם.

אני מאוד ממליץ להשתמש בכלי הזה – אני יכול להעיד על עצמי שכאשר אני מגיע לתקלה אצל לקוח שיש לו גיבוי rman זה הכלי העיקרי שחוסך לי (וללקוח( זמן בדרך לפתרון ומונע ממני שגיאות ותקלות שונות.

1 תגובה

Trackbacks & Pingbacks

  1. […] הפוסט פורסם במקור בבלוג של זהר: יועץ ה-recovery הכי נחמד שנפגוש אי פעם […]

השאירו תגובה

Want to join the discussion?
Feel free to contribute!

השאר תגובה

This site uses Akismet to reduce spam. Learn how your comment data is processed.