שינוי קבצי redo log בסביבה של data guard
לא מזמן הייתי אצל לקוח שהיה צריך לשנות את גודל קבצי ה-Redo Logs שלו בסביבה שבה היו מספר בסיסי נתונים של data guard.
שינוי גודל קבצי ה-redo log לא אמורה להיות בעיה קשה או מסובכת במיוחד אבל כאשר מוסיפים את האלמנט של Data Guard אחד (או יותר) זה הופך להיות קצת יותר מאתגר.
אז איך מבצעים את הפעילות?
דבר ראשון ניזכר איך עושים resize לקבצי ה-redo log: יש למחוק את הקבצים ואז ליצור אותם מחדש.
כדי שנוכל לבצע מחיקה של קבצי redo log אנחנו צריכים לבדוק מה ה-status של הקבצים. אם הקבצים נמצאים במצב של Current (כלומר ה-commit-ים כותבים עכשיו לתוך הקובץ הזה) או במצב של Active (הקובץ עדיין לא סיים להיכתב כ-Archive log) אז לא ניתן יהיה לזרוק את הקובץ. אם הקבצים "תפוסים" אנחנו נצטרף לשחרר אותם ואת זה ניתן לבצע בכמה דרכים:
- נמתין שהם ישתחררו
- נבצע Alter system switch logfile וזה ישחרר את הקובץ מסטטוס של Current אבל יעביר אותו במרבית המקרים ל-Active.
- נבצע alter system checkpoint ו"נכריח" את בסיס הנתונים לסגור את הקבצים. זה ישחרר את כל הקבצים פרט לאחד שיהפוך להיות Current.
- נבצע פקודת Alter system archivelog current שתכתוב את הקובץ הנוכחי לדיסק בצורה סינכרונית.
אני באופן אישי מעדיף לעשות switch ואז checkpoint.
כדי לבדוק את הסטטוס:
Select group#, status, bytes/1024/1024 from v$log;
כדי למחוק redo group:
Alter database drop logfile group 1;
לאחר שנמחק את ה-redo log group (יש לשים לב אם יש יותר מ-member אחד ב-group) יש ליצור את ה-group מחדש. אם בחרנו לשמור על אותם השמות של קבצים יש להשתמש בפרמטר "reuse" שאומר לבסיס הנתונים שאם הקובץ כבר קיים, אנחנו נשתמש מחדש בשם שלו:
Alter database add logfile group 1 file '/oracle/rdbms/orcl/redo/redo01.log' size 100m reuse;
ניתן לבצע את הפעולה הזו לכל הקבצים פרט ל-group-ים שנמצאים ב-mode של current. לאחר שסיימנו להגדיל את כל הקבצים נוכל לבצע switch ו-checkpoint ולבצע את זה לקבוצה האחרונה. שאר הקבצים יסומנו בסטטוס של unused וזה תקין.
עד כאן, לא חידשתי כלום (אני מקווה). השאלה היא מה קורה כאשר יש לנו Physical data guard ועכשיו את השינוי הזה יש להעביר גם לבסיסי הנתונים של ה-DR?
הדבר הראשון שצריך להבין זה שהשינוי הזה, למרות העובדה שכנראה כיוונו את הפרמטר standby_file_managment ל-auto לא עובר לשאר בסיסי הנתונים. כדי שהשינוי הזה יקרה גם בסביבת ה-DR נצטרך לעבור בכל אחד מבסיסי הנתונים של ה-DR ולבצע את הפקודות האלה גם שם.
כדי לבצע את השינוי בסביבת Data guard נצטרך קודם כל להפסיק את ה-apply (לטובת הנוחות אני מראה את השלבים בשימוש ב-broker אבל אם אין לכם, אז אפשר לבצע את זה גם בלי זה):
dgmgrl sys/oracle edit database orcldg set state=apply-off;
לאחר מכן, נפסיק את ניהול הקבצים האוטומטי (בלי זה, לא נוכל לעשות שינויים):
edit database orcldg set property StandbyFileManagement='manual';
נתחבר לבסיס הנתונים ב-Primary ונבצע מחיקה של ה-redo group כמו שביצענו קודם (כולל switch ו-checkpoint, אם צריך) וניצור את הקובץ מחדש.
alter database drop logfile group 2; alter database add logfile '/home/oracle/app/oracle/oradata/orcl/redo02.log' size 100m reuse;
לאחר מכן, נתחבר לבסיס הנתונים של ה-standby ונבצע את אותו הדבר:
alter database drop logfile group 2;
אם ה-group תפוס נוכל לבצע משהו שלא יכולנו לבצע ב-primary – נרוקן בצורה יזומה את קובץ ה-redo log.
שימו לב: אין לבצע clear ל-redo group ב-primary. זה יגרום לכך שהשינויים שנכתבו ל-redo לא יכתבו ל-archive log וה-data guard שלנו יתקלקל. כדי לתקן אותו נצטרף להקים אותו מחדש!
alter database clear logfile group 2;
לאחר מכן ניצור את הקובץ מחדש:
alter database add logfile '/home/oracle/app/oracle/oradata/orcldg/redo02.log' size 100m reuse;
לאחר שנסיים את התהליך, נחזיר את ניהול הקבצים ל-auto ואת ה-apply ל-on:
dgmgrl sys/oracle edit database orcldg set property StandbyFileManagement='auto'; edit database orcldg set state=apply-on;
זה כל הסיפור. לא מדובר בסיפור מורכב אבל עדיין יכול להיות קצת מבלבל כשלא רגילים… 🙂
השאירו תגובה
Want to join the discussion?Feel free to contribute!