מבנה ה Storage של אורקל ומונחי הבסיס בהם אנו משתמשים כדי להגדיר את חלקיו השונים הינם נדבך מרכזי וחשוב בעבודתו היומיומית של ה DBA.

בפוסט זה אנסה לעשות סדר במרכיבים השונים ואסביר את מטרותיהם.

clip_image002

 

Database

ה Database נחשב ליחידה הלוגית הגדולה ביותר. מכיוון שהוא מעין מעטפת, שם כולל לרכיבים כה רבים אשר פועלים תחת חסותו, במינוחי Storage נהוג לשייך את ה Database לצד הלוגי.

 

Datafile

לעומת ה Database, ה Datafile מוגדר כיחידה פיזית, משום שהוא הקובץ הממשי עליו יושבים הנתונים.
הקשר בין
Database ל Datafile  הוא אחד לרבים – Database אחד יכול להכיל Datafiles רבים, Datafile אחד לא יכול להכיל Databases רבים.
ניתן להשתמש בטבלת המערכת הבאה כדי לראות מידע אודות ה
Datafiles במערכת :

 

SYS >SELECT file_name

  2  FROM dba_data_files ;

FILE_NAME
---------------------------------------------C:APPADMINISTRATORORADATAORCLUSERS01.DBF

C:APPADMINISTRATORORADATAORCLUNDOTBS01.DBF

C:APPADMINISTRATORORADATAORCLSYSAUX01.DBF

C:APPADMINISTRATORORADATAORCLSYSTEM01.DBF

C:APPADMINISTRATORORADATAORCLEXAMPLE01.DBF

C:CUST_1CUST_1.DBF

C:CUST_2CUST_2.DBF

 

Tablespace

Tablespace הינו יחידה לוגית אשר מאגדת בתוכה מספר Datafiles. כאשר יש בידנו יותר מ Datafile אחד אשר מכיל נתונים אודות נושא ספציפי (למשל 5 קבצים שונים אשר מכילים נתונים על לקוחות החברה) יהיה נח לתת לכל אותם קבצים "תגית" מסויימת, כך שיהיה יותר נח לנהל אותה (לצרכי גיבויים, שחזורים, ייצוא, ייבוא וכד')

הקשר בין Database ל Tablespace  הוא אחד לרבים – Database אחד יכול להכיל Tablespaces רבים, Tablespace אחד לא יכול להכיל Databases רבים.

הקשר בין  Tablespace ל Datafile  הוא אחד לרבים – Tablespace אחד יכול להכיל Datafiles רבים, Datafile אחד לא יכול להכיל Tablespaces רבים.

ניתן להשתמש בטבלאות המערכת הבאות כדי לראות מידע אודות ה Tablespaces במערכת

SYS >SELECT tablespace_name

  2  FROM dba_tablespaces ;

TABLESPACE_NAME
------------------------------
SYSTEM

SYSAUX

UNDOTBS1

TEMP

USERS

EXAMPLE



SYS >SELECT tablespace_name , file_name

  2  FROM dba_data_files ;



TABLESPACE_NAME   FILE_NAME
---------------- -------------------------------------------
USERS           C:APPADMINISTRATORORADATAORCLUSERS01.DBF

UNDOTBS1        C:APPADMINISTRATORORADATAORCLUNDOTBS01.DBF

SYSAUX          C:APPADMINISTRATORORADATAORCLSYSAUX01.DBF

SYSTEM          C:APPADMINISTRATORORADATAORCLSYSTEM01.DBF

EXAMPLE         C:APPADMINISTRATORORADATAORCLEXAMPLE01.DBF

CUSTOMERS       C:CUST_1CUST_1.DBF

CUSTOMERS       C:CUST_2CUST_2.DBF

Segment

הגדרת ה Segment היא אובייקט אשר מכיל נתונים מסויימים ועל כן בעל נפח. לדוגמא  טבלה היא סגמנט, אינדקס הוא סגמנט, View הוא לא סגמנט, פונקציה היא לא סגמנט מכיוון שאלו בסה"כ שורות אשר יושבות בתוך טבלאות מערכת (טבלאות המערכת אשר מכילות את נתונים אלו נחשבות סגמנטים).

הקשר בין Tablespace ל Segment הוא אחד לרביםTablespace  אחד יכול להכיל Segments רבים, Segment אחד לא יכול להכיל Tablespaces רבים.

הקשר בין  Segment ל Datafile הוא רבים לרביםSegment אחד יכול להכיל Datafiles רבים, Datafile אחד יכול להכיל Segments רבים.

ניתן להשתמש בטבלת המערכת הבאה כדי לראות מידע אודות ה Segments השונים במערכת

  SELECT segment_name , segment_type

  FROM dba_segments

  WHERE OWNER = 'HR'

  AND rownum < 10 ;

 

SEGMENT_NAME         SEGMENT_TYPE

-------------------- ------------------

REGIONS              TABLE

LOCATIONS            TABLE

DEPARTMENTS          TABLE

JOBS                 TABLE

EMPLOYEES            TABLE

JOB_HISTORY          TABLE

RATES                TABLE

EMP_J                TABLE

SYS_IOT_OVER_75242   TABLE

 

Extents

Extent היא יחידת מידע רציפה עבור Segment – כאשר אנו יוצרים טבלה ומקצים לה גודל ראשוני של נאמר 10 מגה, בנקודה מסויימת אותו מקום נגמר ואורקל צריך להקצות לה מקום חדש, יחידת המידע החדשה שנוספת ל Segment נקראת Extent .
משמעות ההגדרה של יחידת מידע רציפה היא ש
Extent יכול להתחיל ולהסתיים בנקודה אחת בלבד, אם לדוגמא יש לנו Segment אשר נפרס על יותר מ Datafile אחד לא יכול להיות מצב ש Extent מסויים שלו יתחיל ב Datafile אחד ויסתיים ב Datafile  שני.

הקשר בין Segment ל Extent הוא אחד לרביםSegment אחד יכול להכיל Extents רבים, Extent  אחד לא יכול להכיל Segments רבים.

הקשר בין  Datafile ל Extent הוא אחד לרביםDatafile אחד יכול להכילExtents  רבים, Extent אחד לא יכול להכיל Datafiles  רבים (כמו שאמרנו – יחידת מידע רציפה).

ניתן להשתמש בטבלאות המערכת הבאות כדי לראות מידע אודות ה Extents  השונים במערכת

SELECT segment_name , segment_type, extents

FROM dba_segments

WHERE OWNER = 'HR'

AND rownum <= 10 ;


SEGMENT_NAME         SEGMENT_TYPE          EXTENTS
-------------------- ------------------ ----------NEW_EMPLOYEES        TABLE                       1

REGIONS              TABLE                       1

REG_ID_PK            INDEX                       1

COUNTRY_C_ID_PK      INDEX                       1

LOCATIONS            TABLE                       1

LOC_ID_PK            INDEX                       1

LOC_CITY_IX          INDEX                       1

LOC_COUNTRY_IX       INDEX                       1

DEPARTMENTS          TABLE                       1


SELECT segment_name, extent_id , bytes

FROM dba_extents

WHERE owner = 'HR'

AND segment_name = 'EMPLOYEES' ;

 

SEGMENT_NAME          EXTENT_ID      BYTES
-------------------- ---------- ----------
EMPLOYEES                     0      65536

Oracle Block

Oracle Block היא יחידת המידע הקטנה ביותר באורקל, במערכות רבות גודלה עומד על 8k.

הקשר בין Extent ל Oracle Block הוא אחד לרביםExtent אחד יכול להכיל Oracle Blocks רבים, Oracle Block אחד לא יכול להכיל Extents רבים.

הקשר בין  Oracle Block ל Operating System Block הוא אחד לרביםOracle Block אחד יכול להכיל OS Blocks  רבים,  OS Block אחד לא יכול להכיל Oracle Blocks רבים.

 

 

 

 

 

 

 

clip_image004 clip_image005
clip_image006