دیکشنری دادهها اولین دسته از Object هایی میباشد که مدیر پایگاه دادهها بعد از ایجاد Database باید آن را به وجود آورد. هر Object در پایگاه دادههای اراکل به روشی خاص توسط دیکشنری دادهها مورد پیگیری و شناسایی قرار میگیرد. اراکل معمولا Data Dictionary را در زمان ایجاد Database و بدون دخالت DBA و توسط Catalog.sql و Catproc.sql ایجاد میکند. اگر شما Database را توسط Data Base Configuration Assistant ایجاد کنید. این ابزار به طور خودکار دیکشنری دادهها را ایجاد میکند. اگر شما به طور دستی Database را ایجاد میکنید از اجرا شدن Script های بالا اطمینان حاصل کنید.
Catalog.sql برای ایجاد و پیکر بندی اجزاء دیکشنری دادهها به کار میروند. دیکشنری دادهها یک شمای کلی از عملیاتهای انجام شده توسط پایگاه دادهها از جمله پیدا کردن اطلاعات در مورد Object های درون پایگاه تا یافتن اطلاعات در مورد کارایی پایگاه و.... را به شما میدهد. برای ایجاد Data Dictionary شما میتوانید Catalog.sql را از درون Sqlplus با مجوز sysdba اجرا کنید.زمانی که شما Catalog.sql را اجرا میکنید در درون آن script های دیگری صدا میشوند که به ترتیب زیر میباشند.
Cataudit.sql: این اسکریپت با تشکیل SYS.AUD$ Table تمام اعمال بازبینی و بازرسی اطلاعات را که توسط Oracle Auditing Feature میشود را پیگیری میکند.
Catldr.sql: مسئولیت ایجاد View هایی که توسط Sql Loader برای پردازش Large-Volume Data به کار میزود را دارد.
Catexp.sql: مسئولیت ایجاد View هایی که توسط ابزارهای Import/Export مورد استفاده قرار میگیرد را دارد.
Catpart.sql: این اسکریپت نیز با ایجاد View هایی از Oracle Partitioning پشتیبانی میکند.
Catadt.sql: با ایجاد کردن View های مناسب از User Define Type ها پشتیبانی میکند.
Standard.sql : مسئولیت ذخیره کردن اسکالرها و دیتا تایپ های ساده مانند Varchar2 و Blob و همچنین بعضی توابعی که به صورت Built-in در Sqlplus وجود دارند مثل()Decode را دارد.
دومین اسکریپت Catproc.sql است که Procedural Option وابزارهای مورد نیاز PL/SQL را فراهم میکند. در این اسکریپت نیز اگر شما به آن توجه داشته باشید، اشاره به پکیج های دیگری مثل dbmsutil.sql , dbmssql.sql در آن وجود دارد که در حقیقت شرح و تعریفی برای پکیجهای سرور اراکل که شامل Procedures, Functions, Type ها هستند میباشد. یک سری دیگر از اسکریپت هایی که توسط Catproc.sql صدا میشوند، اسکریپت هایی هستند که با پسوند plb. ختم میشوند مانند Prvutil.plb, prvtpipe.plb. این کدها، کدهای PL/SQL میباشند که کد گذاری شده اند تا شما از منطق به کار رفته در آن مطلع نشوید.
تمام اسکریپت های بالا در شاخه rdbms/admin قابل دسترسی میباشد.
نکته : شما نمیتوانید بدون ایجاد Database دیکشنری دادهها را ایجاد کنید. به این دلیل که شما به عنوان sys as sysdba این اسکزیپت ها را اجرا میکنید که با ایجاد پایگاه به وجود میآیند.
Key Data Dictionary Components And Contents
دیکشنری دادهها در اراکل دارای دو جزء اصلی میباشد. یکی Base Table ها وذیگری User Accessible Views . شما باید آگاه باشید که هیچگاه مستقیما با Base Table ها کار نکنید و سعی کنید که با User Accessible View ها کار کنید. در زیر شرحی بر عملکرد این دو جزء خواهیم داشت.
Base Tables
دادههای درون دیکشنری دادهها در درون Table هایی در زمان ایجاد DataBase ذخیره میشوند. که به این Table ها Base Table گفته میشود.این table ها که به صورت $X میباشند و در درون System Table Space ساخته میشوند و اطلاعات و دادههای مربوط به Base Table ها را ذخیره میکنند. این table ها در زمان اجرای اسکریپت Catalog.sql ساخته میشوند. تنها کاربر Sys دسترسی مستقیم به این اطلاعات دارد. بهتر است که تا حد ممکن از وصل شدن به اراکل با کاربر sys خودداری کنید و همچنین از دادن مجوز به کاربران دیگر برای دسترسی به دیکشنری خودداری کنید.
User Accessible Views
در زمانی که Base Table ها ساخته میشوند، اسکریپت Catalog.sql یک سری View های قابل دسترس برای کاربران که توسط آن میتوانند به اطلاعات Data Dictionary دسترسی پیدا کنند. دیکشنری دادهها که ما به آن اشاره میکنیم، همان اشاره به View های موجود میباشد نه Table های اصلی دیکشنری دادهها.
اراکل اصولا به صورت گستردهای از دیکشنری دادهها استفاده میکند. از تشخیص درستی ارتباط یک کاربر که به پایگاه داده متصل میشود تا تائید وجود Table هایی که توسط کاربر مورد پرس و جو قرار میگیرند تا مسائلی از قبیل رد یابی برای وجود Index هایی که بر روی Table ها برای افزایش کارایی سیستم وجود دارد، همه وهمه به نحوی با Data Dictionary در ارتباط میباشند و از آن استفاده میکنند. در یک دسترسی به Data Dictionary و گرفتن اطلاعات راجع به هر چیز نتایج در داخل Dictionary Cache که در داخل SGA که قبلا در بحث معماری اراکل به شرح آن پرداختیم Cache میشود.
Available Dictionary Views
اطلاعات بسیار زیادی راجع به موجودیتها و دادههای موجود در پایگاه دادهها در تعدادی محدود از Table ها که کاربر Sys مجوز دسترسی به آن را دارد وجود دارد. اراکل به شما اجازه دسترسی مستقیم به این Table ها را به طور مستقیم نمیدهد. در مقابل چندین View برای دسترسی به این اطلاعات وجود دارد. این View ها در اراکل به عنوان دیکشنری داده معرفی شده است. View های دیکشنری دادهها به شما کمک میکند تا احتیاج به دسترسی مستقیم به Table های دیکشنری دادهها نداشته باشید.
این حفاظ محکم برای دیکشنری داده به دو دلیل دارای اهمیت میباشد. دلیل اول حساس بودن Table هایی میباشد که کاربر Sys مالکیت آنها را دارد. از بین رفتن یا خراب شدن این Table ها به هر دلیل میتواند باعث خرابی شدید در پایگاه داده شما شود و یا حتی آن را غیر قابل استفاده کند. دلیل دوم اینکه استفاده از View ها بسیار قابل فهم تر و قابل استفاده تر میباشد.
مثال: به عنوان مثال اگر شما با کاربر Scott و از طریق کنسول SQL به اراکل متصل شده باشید با دستور زیر میتوانید Table هایی که کاربر Scott مالکیت آنها را دارا میباشد را مشاهده کنید.
;SQL>select table_name from user_tables
TABLE_NAME
----------------------
BONUS
DEPARTMENT
DEPT
DUMMY
EMP
EMPLOYEE
PRICES
SALGRADE
بنابراین با این select یا همان پرس و جو بر روی این View اسم تمام Table هایی را که Scott مالکیت آنها را دا شت بدست آوردیم. دو نکته بسیار مهم وجود دارد که شما باید به آن توجه داشته باشید. اول عنوان View میباشد و دوم حوزه پرس و جوی شما بر روی View که در اینجا محدود به کاربر Scott میشود. پس به دو عنوان View Topic و View Scope توجه داشته باشید.
Discerning A Dictionary View's Scope
View های دیکشنری داده بسته به مجوز کاربر برای دیدن آنها به سه دسته مختلف تقسیم میشوند. در زیر به شرح این سه دسته خواهیم پرداخت.
User
در این View ها شما میتوانید Object هایی از پایگاه داده را که شما مالک آن هستید را مشاهده کنید. این View ها کمترین حوزه کاری را در بر میگیرند به این دلیل که فقط Object هایی را که در درون Schema کاربری شما هستند نمایش داده میشوند. بنابراین اگر شما با کاربر John به پایگاه متصل شوید با پرس و جو از دیکشنری دادهها نمیتوانید Table های مربوط به Scott را مشاهده کنید.
All
این قسمت شامل View هایی میشود که شما مالک آنها نمی باشید ولی به آنها دسترسی دارید. این View ها Scope وسیعتری را نسبت به User Views در بر دارد زیرا شامل Object هایی میشود که شما مالک آنها هستید و Object هایی که به آن مجوز دسترسی دارید. برای دسترسی به یک Object در پایگاه دادهها باید یکی از شرایط زیر را داشته باشد.
1- شما خالق آن Object باشید.
2- مالک یک Object در پایگاه داده به شما مجوز دسترسی داده باشد.
3- به کاربر Public مجوز دسترسی به Object های مورد نظر داده شده باشد.
نکته: کاربر Public یک کاربر خاص میباشد که در آینده بیشتر راجع به آن صحبت خواهیم کرد. اگر روی یک Object به این کار بر مجوز داده شود آنگاه تمام کاربران به آن Object دسترسی خواهند داشت.
DBA
این View ها به شما اجازه دیدن تمام Object های داخل پایگاه داده شما را میدهد.شما باید برای دستزسی به DBA Views باید مجوز Select_Catalog_Role را داشته باشید.
Identifying a Dictionary View's Topic
قسمت دوم در دیکشنری داده که بسیار حائز اهمیت میباشد عنوان View های موجود در دیکسنری داده میباشد که در قسمت پایین به شرح آنها خواهیم پرداخت.
USER_OBEJECTS, ALL_OBJECTS, DBA_OBJECTS
اطلاعاتی در مورد object هایی که کاربر مالک آنهاست یا اطلاعات در مورد object هایی که کاربر به آنها دسترسی دارد و یا اطلاعات در مورد تمام object های درون یک پایگاه را به شما میدهد.
USER_TABLES, ALL_TABLES, DBA_TABLES
اطلاعاتی در مورد Table هایی که کاربر مالک آنهاست یا اطلاعات در مورد Table هایی که کاربر به آنها دسترسی دارد و یا اطلاعات در مورد تمام Table های درون یک پایگاه را به شما میدهد.
USER_INDEXES, ALL_INDEXES, DBA_INDEXES
اطلاعاتی در مورد Index هایی که کاربر مالک آنهاست یا اطلاعات در مورد Index هایی که کاربر به آنها دسترسی دارد و یا اطلاعات در مورد تمام Index های درون یک پایگاه را به شما میدهد.
USER_VIEWS, ALL_VIEWS, DBA_VIEWS
اطلاعاتی در مورد View هایی که کاربر مالک آنهاست یا اطلاعات در مورد View هایی که کاربر به آنها دسترسی دارد و یا اطلاعات در مورد تمام View های درون یک پایگاه را به شما میدهد.
USER_SEQUENCES, ALL_SEQUENCES, DBA_SEQUENCES
اطلاعاتی در مورد Sequence هایی که کاربر مالک آنهاست یا اطلاعات در مورد Sequence هایی که کاربر به آنها دسترسی دارد و یا اطلاعات در مورد تمام Sequence های درون یک پایگاه را به شما میدهد.
USER_USERS, ALL_USERS, DBA_USERS
اطلاعاتی در مورد کاربری که به پایگاه متصل است یا تمامی کاربرانی که در پایگاه تعریف شدهاند را میتوانید با پرس وجو از View های موجود کسب کنید.
USER_CONSTRAINTS, ALL_CONSTRAINTS, DBA_CONSTRAINTS
اطلاعاتی در مورد Constraint هایی که کاربر مالک آنهاست یا اطلاعات در مورد Constraint هایی که کاربر به آنها دسترسی دارد و یا اطلاعات در مورد تمام Constraint های درون یک پایگاه را به شما میدهد.
USER_CONS_COLUMNS, ALL_CONS_COLUMNS, DBA_CONS_COLUMNS
اطلاعاتی را در مورد ستونهایی ازTable هایی که شما مالک آن هستید یا مجوز دسترسی دارید یا تمام ستونهای موجود درTable های یک پایگاه به شما میدهد.
USER_IND_COLUMNS, ALL_IND_COLUMNS, DBA_IND_COLUMNS
اطلاعاتی راجع به ستونهایی از Table ها که دارای Index میباشند و شما مالک آنها میباشید و یا مجوز دسترسی دارید و یا اطلاعاتی راجع به تمام Index های موجود در پایگاه داده بدست آورید.
USER_TAB_COLUMS, ALL_TAB_COLUMNS, DBA_TAB_COLUMNS
اطلاعات در مورد ستونهای Table هایی که شما مالکیت آنه را دارید و یا ستونهایی که مجوز دسترسی دارید یا تمام ستونهای پاگاه داده را به شما میدهد.
USER_ROLES, ALL_ROLES, DBA_ROLES
با پرس و جو از View های بالا میتوانید اطلاعاتی راجع به Role هایی که دارید و یا Role های کاربرانی که شما مجوز دیدن آنها را دارید و یا Role های تمام کاربران پیگاه داده اراکل مشاهده کنید.
USER_TAB_PRIVS, ALL_TAB_PRIVS, DBA_TAB_PRIVS
اطلاعاتی در مورد مجوز دسترسی بر روی Object هایی که شما مالک آنها میباشید و یا Object هایی که شما برای دیدن مجوز دسترسی آنها دسترسی دارید و یا اطلاعاتی در مورد مجوز دسترسی بر روی کل Object های Database به شما میدهد.
USER_SYS_PRIVS, ALL_SYS_PRIVS, DBA_SYS_PRIVS
علاوه بر در برگرفتن حالت قبل System Previlage های پایگاه را نیز به شما نمایش میدهد.
USER_SOURCE, ALL_SOURCE, DBA_SOURCE
اطلاعاتی را در مورد سورس کدهای برنامه PL/SQL که کاربر مجوز دسترسی به آنها را دارد و یا به او مجوز داده شده و یا تمامی سورس کدهای موجود در اراکل را میدهد.
USER_TRIGGERS, ALL_TRIGGERS, DBA_TRIGGERS
اطلاعاتی در مورد Trigger هایی که کاربر مالک آنهاست یا مجوز دسترسی دارد یا تمام Trigger های موجود در پایگاه به شما میدهد.
DBA_PROFILES
اطلاعاتی را درباره پروفایل کاربران در اراکی به شما میدهد شما از پروفایل کاربران به منظور محدود کردن دسترسی آنها از منابع فیزیکی سیستم استفاده میکنید مانند محدود کردن استفاده از حافظه.
DBA_TABLESPACES,DBA_TS_QUTAS
اطلاعات در مورد Tables Space ها و سهمیه استفاده کاربران در هر Table Space را نمایش میدهد.
DBA_DATAFILES, DBA_SEGMENT, DBA_EXTENTS, DBA_FREE_SPACE
اطلاعات جامعی را در مورد Data file های پیگاه داده اراکل به شما میدهد.