תהליך ה-startup של אורקל (מדריך למתחילים)

כשאני מעביר את הקורס של Oracle Database Administration Workshop אני מוצא את עצמי לפעמים מנסה להסביר שוב ושוב את העקרונות שכלולים בעליה של בסיס הנתונים. האמת היא שזה די פשוט אבל החלטתי לעשות מזה פוסט אחד פשוט שיסביר את ההבדלים ואולי יעשה קצת סדר למי שעדיין זה לא יושב לו טוב בראש.

בסוף הפוסט אני גם אתן טיפ קטן שלמדתי לאחרונה בנושא.

הקדמה

אז לפני שנתחיל בלדבר על סוגי ה-startup השונים, נזכיר בכמה מילים כמה קבצים משמעותיים שיש לנו בבסיסי הנתונים של אורקל ומה הם אומרים. חשוב מאוד להבין מה אומר כל אחד לפני שנכנסים לשלבי העלייה של בסיס הנתונים.

  1. קובץ פרמטרים (spfile או init.ora): הקובץ שבו יושבות ההגדרות ל-Instance של אורקל: מה שם בסיס הנתונים, כמה זיכרון מוקצה וכל פרמטר שמשנה התנהגות של ה-instance של אורקל.
  2. קבצי database files (או dbf-ים): אלה הקבצים של בסיס הנתונים שבתוכם יושבים הנתונים עצמם. הקבצים האלה מאוגדים בצורה לוגית בתוך בסיס הנתונים בתוך tablespace-ים ולא ניתן להעביר אותם מבסיס נתונים לבסיס נתונים אלא על ידי שימוש בכלים של אורקל.
  3. קובץ control file: זה קובץ שיש לו שני שימושים. השימוש הראשון הוא להיות הקובץ שמכיל את המספר הסידורי הכללי (SCN) שאומר אם קבצי ה-dbf שלנו מסונכרנים. כאשר משתמש מבצע טרנזאקציות הוא מקדם את המספר הזה אבל התהליך של כתיבת השינויים לתוך קבצי ה-dbf הוא תהליך אסינכרוני וקובץ הפרמטרים מכיל את המספר האחרון שהוקצה לטרנזאקציה האחרונה. הקובץ הזה מכיל בתוכו רשימה של כל הקבצים של המערכת ומספר של SCN.
    הדבר השני שקובץ ה-control file מחזיק זה ה-catalog של rman לטובת גיבויים אבל נניח לזה כרגע כי זה לא קשור לנושא.
  4. קבצי redo logs (וקבצי archive log): מכוון שתהליך הכתיבה לקבצים הוא תהליך אסינכרוני, אנחנו רוצים להבטיח שבמקרה של כשל – לדוגמה אם בסיס הנתונים קורס או נכבה החשמל, כל טרנזאקציה שביצענו עד לסיומה המוצלח (commit) תהיה בקבצי ה-dbf אחרי עליית השרת. לצורך כך, כל שינוי נכתב קודם ל-redo logs ורק אחר כך עובר לקבצי ה-dbf.

סוגי ה-Startup

לאורקל יש כמה סוגים של Startup-ים:

  1. 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
  1. 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

 

  1. Open– במצב הזה בסיס הנתונים מוודא שה-SCN שרשום בקובץ ה-control file הוא שווה או גדול ל-SCN שכל קובץ dbf נמצא בו. אם יש קובץ dbf שהמספר שלו קטן מה-control file, הוא יזדקק לביצוע של recovery– קריאה של קבצי ה-redo logs (ואם הם לא מספיקים, אז גם archive log) כדי להחיל את השינויים שבוצע להם commit ולא נכתבו בקבצים. דרך אגב, אם יש לנו קובץ dbf שהמספר שלו גדול מה-control file אנחנו קצת בצרות…

 

לאחר שכל הקבצים מסונכרנים, בסיס הנתונים מגיע למצב פתוח המאפשר לנו להתחיל לעבוד עם המידע שבתוך ה-data files.

 

למצב של Open יש שלושה מצבים:

  1. Open read write– המצב הטבעי של בסיס הנתונים – פתוח וערוך לשינויים.
  2. Open read only– בסיס הנתונים פתוח אבל לא ניתן לשנות נתונים.
  3. 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 חריגים:

  1. Startup force– הפקודה הזו בודקת מה המצב של בסיס הנתונים לפני שהיא מתחילה. אם בסיס הנתונים למטה (idle) היא תבצע אתחול רגיל. אם בסיס הנתונים למעלה (בכל אחד מהסוגים השונים) היא תבצע קודם shutdown abort ורק אז תעשה startup.
  2. Startup upgrade– פקודה המאפשרת לבצע שדרוג של בסיס הנתונים בין גרסאות שונות (major או minor). אין צורך להשתמש בפקודה זו כדי לעשות apply ל-patch-ים
  3. Startup open recover– אם אנחנו יודעים שצריך לבצע recovery, אין טעם לתת לבסיס הנתונים לגלות את זה בעצמו – הפקודה הזו תכניס אותו ל-mode של recovery באופן אוטומטי.

 

טיפ לפני סיום

את הפקודות של ה-startup ניתן לבצע לא רק מה-sqlplus אלא גם ממשק ה-rman, ה- recovery manager – כלי הגיבויים והשחזורים של אורקל. העניין הוא שהפקודות שהזכרתי הן לא בדיוק native sql מה שאומר שהתחביר שלהם קצת שונה אם משתמשים בהם ב-rman.

לדוגמה – את הפקודה של startup restrict לא ניתן לבצע מ-rman ולכן יש לנו פקודה אחרת שמאפשרת את אותה הפונקציונליות – startup dba:

[[email protected] 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

[[email protected] 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:

[[email protected] ~]$ 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>
0 תגובות

השאירו תגובה

Want to join the discussion?
Feel free to contribute!

השאר תגובה

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