תהליך ה-startup של אורקל (מדריך למתחילים)
כשאני מעביר את הקורס של Oracle Database Administration Workshop אני מוצא את עצמי לפעמים מנסה להסביר שוב ושוב את העקרונות שכלולים בעליה של בסיס הנתונים. האמת היא שזה די פשוט אבל החלטתי לעשות מזה פוסט אחד פשוט שיסביר את ההבדלים ואולי יעשה קצת סדר למי שעדיין זה לא יושב לו טוב בראש.
בסוף הפוסט אני גם אתן טיפ קטן שלמדתי לאחרונה בנושא.
הקדמה
אז לפני שנתחיל בלדבר על סוגי ה-startup השונים, נזכיר בכמה מילים כמה קבצים משמעותיים שיש לנו בבסיסי הנתונים של אורקל ומה הם אומרים. חשוב מאוד להבין מה אומר כל אחד לפני שנכנסים לשלבי העלייה של בסיס הנתונים.
- קובץ פרמטרים (spfile או init.ora): הקובץ שבו יושבות ההגדרות ל-Instance של אורקל: מה שם בסיס הנתונים, כמה זיכרון מוקצה וכל פרמטר שמשנה התנהגות של ה-instance של אורקל.
- קבצי database files (או dbf-ים): אלה הקבצים של בסיס הנתונים שבתוכם יושבים הנתונים עצמם. הקבצים האלה מאוגדים בצורה לוגית בתוך בסיס הנתונים בתוך tablespace-ים ולא ניתן להעביר אותם מבסיס נתונים לבסיס נתונים אלא על ידי שימוש בכלים של אורקל.
- קובץ control file: זה קובץ שיש לו שני שימושים. השימוש הראשון הוא להיות הקובץ שמכיל את המספר הסידורי הכללי (SCN) שאומר אם קבצי ה-dbf שלנו מסונכרנים. כאשר משתמש מבצע טרנזאקציות הוא מקדם את המספר הזה אבל התהליך של כתיבת השינויים לתוך קבצי ה-dbf הוא תהליך אסינכרוני וקובץ הפרמטרים מכיל את המספר האחרון שהוקצה לטרנזאקציה האחרונה. הקובץ הזה מכיל בתוכו רשימה של כל הקבצים של המערכת ומספר של SCN.
הדבר השני שקובץ ה-control file מחזיק זה ה-catalog של rman לטובת גיבויים אבל נניח לזה כרגע כי זה לא קשור לנושא. - קבצי redo logs (וקבצי archive log): מכוון שתהליך הכתיבה לקבצים הוא תהליך אסינכרוני, אנחנו רוצים להבטיח שבמקרה של כשל – לדוגמה אם בסיס הנתונים קורס או נכבה החשמל, כל טרנזאקציה שביצענו עד לסיומה המוצלח (commit) תהיה בקבצי ה-dbf אחרי עליית השרת. לצורך כך, כל שינוי נכתב קודם ל-redo logs ורק אחר כך עובר לקבצי ה-dbf.
סוגי ה-Startup
לאורקל יש כמה סוגים של Startup-ים:
- Nomount– תהליך עליה שבעצם מעלה רק את ה-instance. הוא קורא את קובץ הפרמטרים שלנו ומשתמש בו כדי להעלות את ה-process-ים של ה-instance ולהקצות להם זיכרון. בשלב הזה אנחנו עדיין לא צריכים שום קובץ פיזי פרט לקובץ הפרמטרים שלנו ונוכל לקרוא רק מה-v$ שקשורים רק ל-instance.
השלב הזה שימושי לדוגמה כאשר אנחנו רוצים לשחזר את בסיס הנתונים או כדי להוסיף קובץ control file נוסף.
SQL> startup nomount; ORACLE instance started. Total System Global Area 626327552 bytes Fixed Size 2255832 bytes Variable Size 234882088 bytes Database Buffers 381681664 bytes Redo Buffers 7507968 bytes SQL> select status from v$instance; STATUS ------------ STARTED
- Mount– בשלב הזה בסיס הנתונים קורא את קובץ ה-control file ומאתר בתוכו את כל הקבצים של בסיס הנתונים. במידה אין לנו control file, לא נוכל להגיע לשלב הזה. חשוב להבין: בשלב הזה אנחנו עדיין לא פותחים את הקבצים (או אפילו מוודאים אם הם קיימים) אבל אנחנו מודעים לקיומם. בשלב הזה נוכל לשנות את שמות הקבצים, לגבות אותם, לשחזר אותם, לעשות להם recovery או כל פעולה אחרת שכוללת התעסקות עם ה-metadata של הקבצים אבל לא עם המידע עצמו. המשמעות היא שלא נוכל לקרוא את המידע שנמצא בטבלאות.
כדאי גם לציין שהשלב הזה הוא גם השלב שבו נמצא ה-data guard כשאנחנו ה-standby database.
SQL> startup mount; ORACLE instance started. Total System Global Area 626327552 bytes Fixed Size 2255832 bytes Variable Size 234882088 bytes Database Buffers 381681664 bytes Redo Buffers 7507968 bytes Database mounted. SQL> SQL> select status from v$instance; STATUS ------------ MOUNTED
- Open– במצב הזה בסיס הנתונים מוודא שה-SCN שרשום בקובץ ה-control file הוא שווה או גדול ל-SCN שכל קובץ dbf נמצא בו. אם יש קובץ dbf שהמספר שלו קטן מה-control file, הוא יזדקק לביצוע של recovery– קריאה של קבצי ה-redo logs (ואם הם לא מספיקים, אז גם archive log) כדי להחיל את השינויים שבוצע להם commit ולא נכתבו בקבצים. דרך אגב, אם יש לנו קובץ dbf שהמספר שלו גדול מה-control file אנחנו קצת בצרות…
לאחר שכל הקבצים מסונכרנים, בסיס הנתונים מגיע למצב פתוח המאפשר לנו להתחיל לעבוד עם המידע שבתוך ה-data files.
למצב של Open יש שלושה מצבים:
- Open read write– המצב הטבעי של בסיס הנתונים – פתוח וערוך לשינויים.
- Open read only– בסיס הנתונים פתוח אבל לא ניתן לשנות נתונים.
- Open restrict– בסיס הנתונים פתוח רק לבעלי הרשאה מסוימת. מצב זה טוב אם אנחנו רוצים לבצע פעילות תחזוקה: export או import גדול, שינוי אפליקטיבי בלי שנרצה שמשתמשים יתחברו וכן הלאה. כדי לבטל את המצב הזה נשתמש בפקודה הבאה:
ALTER SYSTEM DISABLE RESTRICTED SESSION;
שיטות של startup
כאשר אנחנו מבצעים פקודת startup, אנחנו בעצם מביאים את בסיס הנתונים ממצב של shutdown (כלומר ה-database סגור וה-instance במצב idle) למצב של open – ובאופן ספציפי, ברירת המחדל היא להגיע למצב של open read write. כדי להגיע למצב הזה, בסיס הנתונים בעצם מבצע רצף של פקודות כדי לעבור בכל התחנות שהזכרנו קודם – קודם nomount, לאחר מכן mount ורק אז open.
אנחנו, לעומת זאת, יכולים גם להביא את בסיס הנתונים למצב הביניים בצורה ידנית לצורך תחזוקה, גיבוי שחזור וכדומה. את הפעולות האלה אנחנו יכולים לבצע הן מה-sqlplus או מ-rman.
Startup-ים חריגים
כדי להשלים את התמונה נזכיר כמה סוגי startup חריגים:
- Startup force– הפקודה הזו בודקת מה המצב של בסיס הנתונים לפני שהיא מתחילה. אם בסיס הנתונים למטה (idle) היא תבצע אתחול רגיל. אם בסיס הנתונים למעלה (בכל אחד מהסוגים השונים) היא תבצע קודם shutdown abort ורק אז תעשה startup.
- Startup upgrade– פקודה המאפשרת לבצע שדרוג של בסיס הנתונים בין גרסאות שונות (major או minor). אין צורך להשתמש בפקודה זו כדי לעשות apply ל-patch-ים
- Startup open recover– אם אנחנו יודעים שצריך לבצע recovery, אין טעם לתת לבסיס הנתונים לגלות את זה בעצמו – הפקודה הזו תכניס אותו ל-mode של recovery באופן אוטומטי.
טיפ לפני סיום
את הפקודות של ה-startup ניתן לבצע לא רק מה-sqlplus אלא גם ממשק ה-rman, ה- recovery manager – כלי הגיבויים והשחזורים של אורקל. העניין הוא שהפקודות שהזכרתי הן לא בדיוק native sql מה שאומר שהתחביר שלהם קצת שונה אם משתמשים בהם ב-rman.
לדוגמה – את הפקודה של startup restrict לא ניתן לבצע מ-rman ולכן יש לנו פקודה אחרת שמאפשרת את אותה הפונקציונליות – startup dba:
[oracle@lnx-oracle66-db11g trace]$ rman target / Recovery Manager: Release 11.2.0.4.0 - Production on Thu Mar 5 17:30:57 2015 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database (not started) RMAN> startup dba; Oracle instance started database mounted database opened Total System Global Area 626327552 bytes Fixed Size 2255832 bytes Variable Size 234882088 bytes Database Buffers 381681664 bytes Redo Buffers 7507968 bytes RMAN> exit [oracle@lnx-oracle66-db11g trace]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Thu Mar 5 17:31:04 2015 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> select logins from v$instance; LOGINS ---------- RESTRICTED
דרך אגב, באורקל 12 – את השליפה של ה-sqlplus אפשר כבר לבצע מתוך ה-rman:
[oracle@lnx-oracle66-db12c ~]$ rman target / Recovery Manager: Release 12.1.0.2.0 - Production on Thu Mar 5 17:34:31 2015 Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved. connected to target database (not started) RMAN> startup dba Oracle instance started database mounted database opened Total System Global Area 713031680 bytes Fixed Size 2928488 bytes Variable Size 528482456 bytes Database Buffers 176160768 bytes Redo Buffers 5459968 bytes RMAN> select logins from v$instance; using target database control file instead of recovery catalog LOGINS ---------- RESTRICTED RMAN>
השאירו תגובה
Want to join the discussion?Feel free to contribute!