Professional Documents
Culture Documents
الجزء الول
obaysalah@hotmail.com
1
الفهرس
3 الهداء 1
4 المقدمة 2
160 Oracle Net Services & Database Link & metrlized View 10
2
الهداء
3
المقدمة
هذا هو الجزء الول من الكتاب العربى لدارة قاعدة البيانات اوركل والذى هو على جزئين ،وحسبى
من هذا الكتاب أنى كتبته لى ولمثالى ،فأنا اول المستفدين منه ،فإنى اعود له كل مره وقد خططته بيدى فأجد
فيه المعلومة الشاردة التى تعودت أن اصل اليها بعد بحث عميق.
هذا الكتاب يقول لك هكذا تنجز مهامك فى إدارة قاعدة البيانات بأسط الطرق وبأقل جهد ودون تًكلف او
تعقيد ،حاولت أن اتناول فيه المادة العلمية بإسلوب سهل بسيط ؛ فكنت احيانا أجمع عدة مواضيع فى فصل واحد
لرتباطهما فى الفكرة والمضمون ،واحيانا اقدم واحيانا اُرجئ الى حيث تكون المعلومة افيد واقيم.
أما الجانب العملى فكان له اوًفر الحظ والنصيب ،فقد طرحته فى شكلين ،الول كتابة النصوص العملية
فى قوالب بحيث يستطيع القارئ نسخها وتنفيذها او تعديلها متى شاء ،والثانى صور لتنفيذ النصوص على محرر
ال SQL*PLUSلتثبت لك الفكرة بأكثر من طرح.
املى أن يستفيد القارئ العربى من هذا الكتاب الذى ناقشت فيه جزء من اهم المواضيع المتعلقة بإدارة
قاعدة البيانات اوركل ،وبقىَ الجزء الخر سوف اطرحه فى الجزء الثانى من الكتاب والذى سوف يكون بين
يديك قريبا لو امًد ال لنا فى العمار.
وقبل البدء لى عندك طلب ايها القارئ ،دعوة خالصة منك أن يعفو ال عنى فإنى ل أعلم أحد عنده
من الذنوب مثل ما لدى ولكن أسأل ال أن يديم علينا ستره فى الدنيا والخره.
4
5
عند الحديث عن قواعد البيانات لبد من البدء عن مكونات قاعدة البيانات وطريقة
عملها حتى يتسنى لنا بعد ذلك الحديث عن التفاصيل التى ل يمكن إستيعابها حتى نفهم تكوينها وطريقة
عملها أولً .
ً
6
Oracle Instance Oracle Database
قاعدة البيانات اوركل تتكون من جزئين رئيسيين وهما Oracle Instanceو Oracle Database
وسنتحدث عن كل منها بالتفصيل فيما بعد .
7
:Oracle Instance 1.1
8
وهى تتكون من جزئين رئيسيين كما فى الشكل اعله -:
•Memory Structure
•Background Processes
وهى تتكون لحظة فتح ال Instanceوهى عبارة عن جزء من الذاكرة يتم تخصيصه لعمل قاعدة
البيانات اوركل وهى تتكون من جزئيين -:
وتسمى ايضا Shared Global Areaوهى جزء من الذاكرة يخصص للمعلومات التى تكون
مشتركة ومتاحة لجميع مستخدمى قواعد البيانات ،وتحتوى على معلومات التحكم التى تستخدم من قبل
ال Oracle Serverوهى تتكون فى ال Virtual Memoryوتتكون لحظة فتح ال ، Instanceومقاس
9
هذه الذاكرة يتحدد بواسطة المتغير SGA_MAX_SIZEفى ملف المتغيرات (، )Parameter File
وهى ذاكرة Dynamicأى يمكن تغيير مقاسها دون إغلق قاعدة البيانات وهى تتكون من قسمين -:
Mandatory Memory -1
Optional Memory -2
وهكذا باقى اجزاء الذاكرة يتم التعديل بنفس الطريقة السابقة .
Redo Log Buffer -3ويتم تحديد مقاس هذا الجزء من الذاكرة بواسطة المتغير
. LOG_BUFFER
10
Shared Pool SHAREAD_POOL_SIZE Library cache Oracle need to allocate
Shared SQL Areas* & deallocate memory
Oracle 6 thru 10g as SQL or Procedural
Private SQL Areas* Code is executed based
PL/SQL Procedures* on the individual needs
and Packages of users sessions and in
accordance to the LRU
Various Control*
algorithm
Structure
Highly accessed
memory structure that
Dictionary Cache provide information on
Row Cache * object structure to SQL
statements being parsed
Redo Log Buffer LOG_BUFFER Redo entries * Holds changes made to
data and allows for
Oracle 6 thru 10g reconstruction of data
in the case of failure
Database Buffer DB_2K_CACHE_SIZE Write List * Holds copies of data
Cache DB_4K_CACHE_SIZE requested by SQL and
DB_8K_CACHE_SIZE LRU List * reduces requests to disk
DB_16K_CACHE_SIZE by having data in
Oracle 6 thru 10g DB_32K_CACHE_SIZE memory
DB_KEEP_CACHE_SIZ You may have many
E different buffer caches
DB_RECYCLE_CACHE that help segregate on
_SIZE usage patterns
Large Pool LARGE_POOL_SIZE Shared server * For large memory
allocations
Oracle XA *
Form Oracle 8i I/O Server Processes
Backup & Restore
Java Pool JAVA_POOL_SIZE Run stats* Memory available for
the java memory
From Oracle 8i Methods* manager to use for all
Classes* things Java
Session code*
Data in JVM
Streams Pool STREAMS_POOL_SIZE Stream activity* New to Oracle 10g
Memory available for
From Oracle 10g Stream Processing
11
يمكن معرفة مقاس ال SGAبالنظر فى ملف المتغيرات ( ، )Parameters Fileاو عن طريق كتابة
المر التالى -:
SQL> SHOW SGA
:Related Views
* V$SGA
12
وق بل الحد يث عن ال Background Processesل بد من الذ كر بأن هناك ثل ثة انواع من ال
-: Processes
-: Userو هو يبدأ الع مل عند ما يطلب الم ستخدم الت صال بقوا عد البيانات process -1
عن طريق احد ادوات قواعد البيانات .
ـد طلب
ـال بال Instancesبعـ
ـة التصـ
ـم انشاؤه لحظـ
-: Serverويتـ Process -2
ال User Processالتصال بقواعد البيانات فيتم التحقق من المستخدم فلحظة التصال هى لحظة إنشاء
ال Server Processو هو يكون ب ين ال User Processوال ، Instanceفل كل User Processفى
قاعدة البيانات Server Processخاص به هذا إذا ك نا نع مل فى بيئة ال Dedicated Serverأ ما إذا
ل ،عموما سنناقش هذا المر لحقا .
كنا نعمل فى بيئة ال Shared Serverفالمر يختلف قلي ً
- :Background Processes -3وهـو موضوع نقاشنـا فـى هذه الفقرة وهـى عبارة عـن معالجات
تعمـل فـى قاعدة البيانات بحيـث تقوم بمهام مختلفـة تبدأ العمـل لحظـة فتـح ال ، Instanceوتنقسـم الى
قسمين-:
13
: Optional -2وبدونها تستطيع ال Instanceالعمل وهذا النوع يعمل فى بعض الحوال التى يتم
فيه تهيئة قاعدة البيانات للعمل على خيارات معينة .
14
: (System Monitor (SMON -1
وأقصى عدد لهذا ال Processفى قاعدة البيانات هو ، 1ويقوم بعمل السترجاع (
)Recoveryإذا حصل مشكلة فى ال ، Instanceواذا كنا نعمل على البيئة (RAC) Real
Application Clustersوهى عمل اكثر من Instanceفى قاعدة البيانات الواحدة فإن ال SMON
فى ال Instanceالسليمة يستطيع عمل Recoveryلل Instanceالخرى التى حدث فيها مشكلة .
15
:(Database Writer (DBWn -4
وأقصى عدد لهذا ال Processفى قاعدة البيانات هو ، 20ويقوم بكتابة البيانات الموجودة فى ال
Database Buffer Cacheلل ، Datafilesويمكن تهيئة قاعدة البيانات لتعمل بأكثر من DBWn
حسب الحاجة واقصلى عدد . 20والمتغير الذي يتحكم فى عدد هذا ال Processهو
. DB_WRITER_PROCESSES
16
تعديله عند اخر ، SCNبحيث يتم تزامن كامل لقاعدة البيانات ونضمن أنه يمكن استرجاع قاعدة البيانات
فى حال حدوث مشكلة .
ويتم عمل ال CKPTفى الحالت التالية -:
-1لحظة حدوث .Log Switch
-2عند وصول الزمن المحدد فى المتغير LOG_CHECKPOINT_TIMEOUT
-3عند ما يصل عدد ال BLOCKSالمحدد فى المتغير
LOG_CHECKPOINT_INTERVAL
-4عند وصول عدد ال Bufferالمحدد فى المتغير . FAST_START_IO_TARGET
-5عند تنفيذ الوامر التالية -:
;SQL> ALTER SYSTEM SWITCH LOGFILE
;SQL> ALTER SYSTEM CHECKPOINT
17
يتم التحكم فى عدد, Archive Log Mode يعمل إذا كانت قاعدة البيانات تعمل فى النمطProcess
. LOG_ARCHIVE_MAX_PROCESSES عن طريق المتغيرProcess هذا ال
:(Recovery Writer(RVWR -2
عندProcess نستفيد من هذا الOracle 10g تم استحداثه فى الصدارةProcess هذا ال
. سنناقش هذا الموضوع لحقا، Flashback Database عملية ال
-: وهو الجزء الثانى من مكونات قاعدة البيانات اوركل كما ذكرنا سابقا
Oracle Database server = Oracle Instance + oracle Database
-: ويحتوى هذا الجزء من مجموعة من الملفات
-: Control files -1
18
فى قاعدة البيانات بجانب انه يحتوى عن المعلومات وهو الملف المسؤل عن التزامن
الساسية عن قاعدة البيانات كإسم قاعدة البيانات وبدونه ل تعمل قاعدة البيانات إذ أنه يحتوى على
مسارات ملفات قاعدة البيانات وإذا تمت إضافة ملف فى قاعدة البيانات يتم تحديث ال Control file
اوتومتيكيا .
-5الملفات الخرى-:
* Parameter fileويستخدم لعمل تهيئة لل Oracle Instanceلحظة
تشغيلها
* Password fileويسمح هذا الملف للمستخدمين التصال بقاعدة البيانات عن
بعد كمدراء لقاعدة البيانات ،وليس لتخزين كلمات السر للمستخدمين فى قاعدة البيانات كما يتصور
البعض .
-:Tablespace and Data File
وهنا لبد من الحديث إلى انه يمكن تقسيم قاعدة البيانات الى (: )Physical & Logical
19
:Physicalحيث يمكن التعامل مع هذا النوع سواء كانت قاعدة البيانات مفتوحة أو مغلقة بحيث
يمكن التعامل مع هذا النوع عن طريق نظام التشغيل أو عن طريق قاعدة البيانات.
:Logicalول نستطيع التعامل مع هذا النوع إلى أذا كانت قاعدة البيانات مفتوحة.
20
قاعدة البيانات فيزيائيا تتقسم إلى ملفات تخزينية يمكن أن تشاهد عن طريق نظام التشغيل وهى ملفات ال
، Data filesوكذلك قاعدة البيانات تنقسم إلى وحدات تخزين منطقية ( )Logicalوتسمى هذه الوحدات
. Tablespace
21
ال Tablespaceوهو وحدة منطقية يحتوى على Data fileواحد أو أكثر وكل Data fileينتمى فى
الحقيقة إلى Tablespaceواحد .
يمكن إنشاء Bigfile Tablespacesبحيث يحتوى على ملف Data fileواحد ولكن كبير جدا بحيث
يكون اكبر من . 4GB
ال Tablespaceيتكون من مجموعة من الوحدات المنطقية الصغر وهى تسمى Segmentsوهى
وحدات منطقية يتكون منها ال Tablespaceبحيث تنتمى ال Segmentل Tablespaceواحد فقط
وهى تتكون من مجموعة من الوحدات المنطقية الصغر التى تسمى Extentsوهى ايضا وحدات منطقية
تنتمى كل Extentل Segmentواحد وتتكون أيضا ال Extentsمن مجموعة أخرى أصغر وهى
أصغر وحدة منطقية تسمى ال . Blocks
وعند إنشاء قاعدة البيانات يتم تحديد حجم ال Blockلقاعدة البيانات ،ويمكن أن يكون حجم ال Block
3BKاو 5BKأو غيره وأكبر حجم لل Blockيتوقف على نظام التشغيل ،وقبل الصدار Oracle 9i
Releaseكانت قاعدة البيانات تعمل على حجم واحد لل Blockوابتدا ًء من الصدار Oracle 9i
Releaseأمكن لقاعدة البيانات العمل بأحجام مختلفة من الل Block
22
!D
فانفترض أن هذا الشكل يمثل Tablepaceيسمى . Usersهذا ال Tablespaceيحتوى على ملفين من
ال Data file ( (D1&D2هذا ال Tablespaceيحتوى على مجموعة من ال Segments
)(T1&T2&T3ال Segmentالول T1مقسم إلى مجموعة من ال Extentsوكل Extentبالطبع
مكون من مجموعة من ال ، Blocksنلحظ هنا أن ال Segment T1يمتد على كل من الملفين (
)D1&D2أى أن جزء من ال Segmentفى الملف D1والجزء الخر فى الملف D2لكن فى الوقت
نفسه هو ينتمى ل Tablespaceواحد .
قبل نهاية هذا الباب فلنتابع معا هذا السناريو وهو يوضح خطوات عمل قاعدة البيانات :
23
1 Instance
SGA
Database
3 Server LogWriter
Writer
process )(LGWR
2 )(DBWn
User process
24
Instance
SGA
Database
Server LogWriter
Writer
10 process )(LGWR
)(DBWn
4
The user updates a row.
-4هنا المستخدم طلب تعديل صف .
-5ال Server Processيستقبل هذا الطلب ويقوم بعمل اختبار لل Shared Poolهل هذا
الطلب موجود فى ال Shared SQL Areaإذا كان موجود يقوم بالتأكد من أن للمستخدم
صلحية الوصول لهذا البيانات ،اما إذا كان هذا الطلب غير موجود يقوم بإنشاء Shared
SQL Areaجديد .
-6فى هذه المرحلة يقوم ال Server Processبجلب البيانات المطلوبة من ال Data fileمن
الجدول أو من ال Data Blockالمخزنة فى ال . SGA
-7بعد جلب البيانات هنا يقوم ال Serverبتعديل الجدول فى ال . SGA
-8لحظة عمل Commitيقوم ال LGWRبكتابة العملية فى ال . Redo Log File
-9يقوم ال DBWnبكتابة التعديلت فى ال Diskاى فى ال . Data File
-10اخيرا يرسل ال Server Processيرسل رسالة بنجاح أو فشل العملية .
25
26
النقاط الرئيسية التى سنناقشها فى هذا الباب -:
•فهم الشروط الضرورية لنشاء قاعدة البيانات .
•إنشاء قاعدة بيانات بالطريقة اليدوية .
27
•إنشاء قاعدة البيانات بالداة . DBCA
من أهم مهام مدير قاعدة البيانات هو التخطيط لقاعدة البيانات ،إذ ل يتصور مديرا ناجحا لقاعدة
البيانات ل يخطط بصورةٍ ما لقاعدة بياناته ،فما نوع البيانات التى سوف نخزنها فى كل Tablespace
وكم Data fileفى كل Tablespaceوكيف سيتم تخزين ملفات قاعدة البيانات فيزيائيا على الديسك ،
وكيف سيتم عمل نسخ احتياطى لقاعدة البيانات ،وكيف نحافظ على قاعدة البيانات ،وكيف نستطيع رفع
الداءة فى قاعدة البيانات وغيرها من السئلة التى يجب ان تجد لها جوابا .
بعد ذلك يجب أن نحدد ما نحتاجه من الذاكرة والديسك المناسب حسب متطلبات قاعدة البيانات
وعموما يجب وضع هذه العتبارات عند إنشاء قاعدة البيانات .
فى الحقيقة يمكن إنشاء قاعدة البيانات أثناء إنزال الوركل عن طريق ال OUI (Oracle
)Universal Installerوذلك بواسطة الداة DBCAولكن قد نحتاج لنشاء قاعدة بيانات أخرى .،
28
عند إنشاء قاعدة بيانات اوركل يجب مراعاة النقاط التية-:
-1كم عدد ال Applicationالتى تعمل على قاعدة البيانات .
-2عدد المستخدمين إذ نحتاج وضع المتغير processفى ملف المتغيرات ()parameter file
.
-3مساحة الذاكرة SGAفهذه الذاكرة مطلوبة لعمل ال Instanceوهى ل تقبل المشاركة بين
أكثر من Instanceأى لكل Instanceذاكرة SGAخاصة بها .
-4كذلك ال Block_Sizeالذى يعتمد عليه ال . Row_Size
-5هل يمكن إغلق قاعدة البيانات لعمل النسخ الحتياطى .
قبل البدء يجب الشارة إلى أننا سنستخدم نظام التشغيل . windows
D:\ORACLE\PRODUCT\10.2.0>SET ORACLE_SID=OBAY
29
-2إنشاء Oracle Serviceوذلك لننا نعمل على نظام التشغيل WINDOWSإذ نحتاج لل
Serviceلكل Instanceتعمل فى نظام التشغيل WINDOWSول يلزمنا ذلك فى نظام
التشغيل . LINUX
وهى بإختصار عبارة عن SERVICEيتم إنشاؤها فى ال . WINDOWS
D:\ORACLE\PRODUCT\10.2.0\DB_1>ORADIM –NEW –SID
%ORACLE_SID% INTPWD PASSWORD –STARTMODE M
يمكن التحقق من النشاء عن طريق نظام التشغيل بالذهاب الى الٍ. Services
-3إنشاء ملف المتغيرات ( -: )Parameter Fileوذلك بنسخ الملف من المسار التالى :
D:\ORACLE\PRODUCT\10.2.0\db_1\database\copy
init.ora INITobay.ora
اما إذا كنا نعمل على نظام التشغيل لينكس ( )UNUXفإن المسار سيكون :
$ORACLE_HOME/DB
نتابع الخطوات السابقة :
30
بالطبع نحتاج لتعديل ملف المتغيرات حسب المعطيات الجديدة ،على سبيل المثال -:
31
CONTROL_FILES =
(‘D:\oracle\product\10.1.0\oradata\OBAY\CONTROL01.
CTL,
D:\oracle\product\10.1.0\oradata\OBAY\CONTROL02.CT
L,
D:\oracle\product\10.1.0\oradata\OBAY\CONTROL03.CT
L(
UNDO_MANAGEMENT = AUTO
undo_tablespace = ‘UNDO'
DB_NAME = OBAY
DB_BLOCK_SIZE = 8192
background_dump_dest =
'D:\oracle\product\10.1.0\admin\obay\bdump’
user_dump_dest =
'D:\oracle\product\10.1.0\admin\obay\udump'
core_dump_dest =
'D:\oracle\product\10.1.0\admin\obay\cdump'
32
الن نقوم بإنشاء قاعدة البيانات-5
33
كما ذكرت سابقا أنت تستطيع إنشاء قاعدة البيانات حسب متطلباتك الخاصة وليست فقط كما
هو مذكور فى النموزج أعله ,لكن لبد من إنشاء () SYSTEM & SYSAUX TABLESPACE
.
إذا حدث خطأ اثناء إنشاء قاعدة البيانات فإن الخطأ سيكتب فى الملف Alert Logالموجود فى المسار
المحدد فى ملف المتغيرات بالمتغير ال . BACKGROUND_DUMP_DEST
أما إذا ظهرت الرسالة ORA-01031اثناء إنشاء قاعدة البيانات فهذا يعنى ان مستخدم نظام التشغيل
ليس عضوا فى المجموعة ORA_DBAفيجب إضافته فى المجموعة .
بعد إنشاء قاعدة البيانات يمكن تشغيلها فى الوضع MOUNTاو فتحها للستخدام .
D:\ORACLE\PRODUCT\10.1.0\DB_1\RDBMS\ADMIN\CATALOG.
SQL
34
ولكن يجب تشغيل الملف على المستخدم . SYS
D:\ORACLE\PRODUCT\10.1.0\DB_1\RDBMS\ADMIN\CATPROC.
SQL
35
وهى أداة اصدرتها اوركل لعدة اغراض -:
-1إنشاء قاعدة البيانات .
-2إعادة تهيثة قاعدة البيانات .
-3حذف قاعدة البيانات .
-4إنشاء قوالب لقاعدة البيانات (. )Templates
36
هنا الخيارات المتاحة للمستخدم ،سنختار بالطبع الخيار الول إنشاء قاعدة بيانات .
إذا اخترت الخيار الثانى سيعرض لى قواعد البيانات الموجودة عندى ومن ثم اختار قاعدة البيانات المراد
إعادة تهيئتها ،وبعد ذلك سيعرض لى بعض الخيارات لعادة تهيئتها .
الخيار الثالث بالطبع استطيع من خلله خذف قاعدة البيانات ،فقط ما على إل أن اختار قاعدة البيانات
المراد حزفها .
الخيار الخير هو إما لنشاء قالب جديد وهو القالب الذى ستكون عليه قاعدة البيانات ( )Templateأو
حذف قالب موجود .
فى هذه الخطوة نختار القالب ( )Templateالذى يتناسب مع مع متطلباتنا إذا لم يوجد نستطيع إنشاء قالب
بالخيار الرابع (. )Manage Template
ولنفترض أننا اخترنا القالب . General Purpose
37
نختار هنا اسم قاعدة البيانات واسم ال )Instance (SIDوليس بالضرورى أن يكون نفس السم .
هنا بعض الخيارات كعمل نسخ احتياطى كل فترة معينة او تشغيل اليميل للرسال والستقبال .
38
يمكن عمل كلمة سر واحدة لكل المستخدمين كما فى الخيار الول ويمكن تحديد كلمة سر لكل مستخدم
كما فى الخيار الثانى .
هنا نحدد طريقة تخزين الملفات ،وقد اخترنا الطريقة الولى وهى ادارة الملفات عن طريق نظام التشغيل.
الطريقة الثانى هى طريقة تخزين وإدارة الية ولها ميزات سنتعرف عليها لحقا .
39
نختار هنا مكان تخزين ملفات قاعدة البيانات .ولنفترض هنا الخيار الول وهو يعنى التخزين حسب ما
هو محدد فى القالب الذى اخترناه والذى كان . General Purpose
يمكن فى هذه الخطوة أن نحدد Flash Recovery Areaوهى مكان لتخزين وإدارة عمليات النسخ
الحتياطى والسترجاع وسنتحدث عنها لحقُا ,كما يمكن تشغيل الرشيف كما سنعرف لحقا .
40
كما يمكن مشاهدة بعض المتغيرات والمعلومات عن قاعدة البيانات بالذهاب ال File Location
. Variables
فى هذه الشاشة يمكن أن نغير فى حجم الذاكرة ونحدد حجم ال Blockلقاعدة البيانات وغيرها من
المتغيرات الموجودة فى ملف المتغيرات .
41
هنا يمكن مشاهدة اماكن تخزين ملفات قاعدة البيانات .
نختار هنا الخيار الول لنشاء قاعدة البيانات ،كما يمكن حفظ خطوات انشاء قاعدة البيانات كقالب وذلك
باختيار الخيار الثانى .
عند الضغط على الخيار Finishتظهر الصفحة التالية -:
42
وهى عبار عن تفاصيل ومعلومات عن قاعدة البينات التى نريد إنشاءها بالطبع يمكن حفظها بالضغط
على الخيار حفظ .
43
44
فى الباب السابق قمنا بإنشاء قاعدة البيانات وسنناقش فى هذا الفصل كيفية التحكم فى قاعدة
البيانات ،وهو امر مهم لمدير قاعدة البيانات .
45
تخيل أنك مدير لقاعدة بيانات عملقة ،يتتطلب منك المرأن تكون هذه القاعدة متاحة للجميع
حتى زمن محدد بعد هذا الوقت تكون متاحة لعدد معين للمستخدمين ،هذا العدد من المستخدمين بعد زمن
اخر يستطيع فقط القراءة أى ل يستطيع الكتابة والتعديل ول المسح .
هل تخيلت معى العمل الذى ينتظرك ؛ بالطبع عملً كبيرا لكن ليس صعبا إذا عرفت ماذا تريد أن
تفعل بالضبط .
والن اول ما يجب أن تعرفه أنك تستطيع أن تتحكم فى قاعدة البيانات إذا كانت تعمل فى نظام التشغيل
ل STOPليقاف العمل وكذلك START
ويندوز عن طريق ال Servicesوهناك عدة خيارات أو ً
ل (& Manual Disabled
للتشغيل وايضا RESTARTلعادة التشغيل وكذلك هنا خيارات اخرى مث ً
.& (Automatic
:Automaticوالمعنى أنه لحظة تشغيل نظام التشغيل تعمل ال Servicesاليا إذا كانت فى الخيار
.START
:Manualوهى أن تقوم بعمل تشغيل يدوى لل Servicesبعد تشغيل نظام التشغيل.
:Disabledوالمعنى إيقاف عمل ال Servicesمهما كان حالتها.
46
ملف المتغيرات (:)Initialization Parameter File
وهذا الملف شأنه عجيب إذ ل تعمل قاعدة البيانات دون هذا الملف لذا كان لزاما أن نتحدث عنه
فى هذا الفصل فهو اول ملف تحتاجه قاعدة البيانات عند تشغيلها ،فهو يحتوى على إسم قاعدة البيانات
وكذلك اسم ومكان ال Control Filesوايضا عن طريقه تتهيأ الذاكرة (. )SGA
فلحظة تشغيل قاعدة البيانات يتم قراءة هذا الملف فيتم تكوين الذاكرة ويتم معرفة اسم ومكان
ملف ال .Control Files
وهذا الملف قد يكون -:
ويكون اسمه ( :(Static Parameter File (PFILE.1
، )initSID.oraحيث ال SIDهو اسم ال .Instance
وهو ملفى نصى نستطيع أن نجرى عليه التغيرات التى
نحتاجها ثم نحفظه وذلك عن طريق نظام التشغيل ،ولكى
يحدث التاثير فى
قاعدة البيانات لبد من إغلقها وفتحها من جديد .
وهذا نموزج لملف : PFILE
47
يكو ن اسمه :(Persistent Parameter File (SPFILE.2
، spfileSID.oraحيث ال SIDهو اسم ال ، Instanceوهو ملف ثنائى ل نستطيع
التغيير فيه إلى عن طريق الوركل بواسطة المر -:
ALTER SYSTEM SET %PARAMETER%=VALUE
;ALTER SYSTEM SET undo_tablespace = UNDO
وقد ل نحتاج لعادة تشغي قاعدة البيانات حتى تحدث التأثيرات وذلك حسب العامل . SCOPE
=ALTER SYSTEM SET parameter = value [SCOPE
]MEMORY|SPFILE|BOTH
يمكن إنشاء ملف ال SPFILEمن الملف PFILEولكن يجب أن يملك المستخدم الصلحية
.SYSDBA
;CREATE SPFILE FROM PFILE
48
كما يمكن إنشاء ملف ال PFILEمن الملف .SPFILE
لتشغيل قاعدة البيانات يلزمك تحديد الحالة التى تريد أن تعمل بها قاعدة بياناتك -:
.NOMOUNT-1
.MOUNT-2
.OPEN-3
OPEN
STARTUP All files opened as
described by the control
file for this instance
Control file
opened for this
instance
Instance
started
:NOMOUNT
نشغل ال Instanceفى هذه الحالة إذا أردنا أن نقوم بإنشاء قاعدة بيانات أو لعادة إنشاء ملف
ال ، Control Filesوعند تشغيل ال Instanceفى هذه الحالة تحدث الخطوات التالية -:
-1قراءة ملف المتغيرات وذلك حسب الترتيب التالى -:
ل .spfileSID.ora
او ً *
* اذا لم يجده بيحث عن .spfile.ora
إذا لم يجده يبحث عن .initSID.ora *
49
-2تكوين ال .SGA
-3تشغيل ال .background processes
-4فتح ملف ال alertSID.logوملف ال . trace files
:MOUNT
تشغل ال Instanceفى هذه الحالة عند إجراء بعض العمليات على قاعدة البيانات
كتغيير اسم ال Data filesأو انجاز استرجاع كلى لقاعدة البيانات او تشغيل قاعدة البيانات فى ب
ل ،وعند تشغيل ال Instanceفى هذه الحالة تحدث الخطوات التالية
عض الوضاع كوضع الرشيف مث ُ
-:
-1الوصول الى ملف ال Control filesوفتحه بعدما تم تحديده بواسطة ملف المتغيرات .
-2قراءة ملف ال Control filesلتحديد ملفات ال Data Filesومعرفة حالتها وكذلك لتحديد
ملفات ال . Redo log Files
:OPEN
هذا هو الوضع الصلى عند تشغيل قاعدة البيانات بحيث تكون ال Instanceمفتوحة وقاعدة
البيانات متاحة بحيث يستطيع المستخدمين التصال بقاعدة البيانات وتنفيذ عملياتهم .
واثناء التشغيل فى هذه الحالة تحدث الخطوات التالية -:
50
-1فتح ملفات ال .Online Data Files
-2فتح ملفات ال .Online Redo Log Files
أو
ل فى الوضع
هكذا تكون قاعدة البيانات متاحة للمستخدمين ،وإذا كانت قاعدة البيانات مفتوحة مث ً
NOMOUNT OR MOUNTوأردت أن تفتحها فى الوضع OPENيلزمك استخدام المر
.ALTER
51
إغلق قاعدة البيانات (:)Shutting Down The Database
عند إغلق قاعدة البيانات يجب أن تملك الصلحية SYSDBA OR SYSOPERوهناك عدة
اوضاع لغلق قاعدة البيانات -:
.NORMAL-1
.TRANSACTIONAL-2
.IMMEDIATE-3
.ABORT-4
52
:NORMAL -1
وهو الوضع الصلى لغلق قاعدة البيانات واثناء الغلق تحدث الخطوات التالية -:
•ل يسمح بإتصال مستخدم جديد بقاعدة البيانات .
• Oracle Serverينتظر كل المستخدمين من انهاء اتصالهم قبل
اكمال إغلق قاعدة البيانات.
•كل البيانات الموجود فى ال Bufferيجب أن تكتب فى الديسك.
•إنهاء ال Background Processesوكذلك إالغاء ال SGAمن
الذاكرة.
•إغلق قاعدة البيانات.
يتم إغلق ملفات قاعدة البيانات قبل أغلق •
ال .Instance
•ل تحتاج لعملية إسترجاع لل Instanceعند فتح قاعدة البيانات من
جديد.
53
: TRANSACTIONAL -2
فى هذا الوضع من الغلق تحدث الخطوات التالية -:
•كل المستخدمين ل يستطيعون بدء عمليات جديدة .
•عند إنتهاء المستخدم من العملية ( )Transactionالحالية يتم قطع
إتصاله بقاعدة البيانات.
•لحظة إنتهاء كل العمليات ( )Transactionsفى قاعدة البيانات يتم
إغلق قاعدة البيانات .
ل تحتاج لعملية إسترجاع لل Instanceعند فتح قاعدة •
البيانات من جديد.
:IMMEDIATE-3
فى هذا الوضع من الغلق تحدث الخطوات التالية -:
•العمليات الحالية فى قاعدة البيانات يتم قطعها مباشرةً .
• Oracle Serverل ينتظر المستخدميين الحاليين فى قاعدة البيانات
حتى ينهوا إتصالهم.
• Oracle Serverيقوم بعمل تراجع للعمليات النشطة حاليا فلى ال
.Instance
•يتم إغلق ملفات قاعدة البيانات قبل أغلق ال .Instance
•ل تحتاج لعملية إسترجاع لل Instanceعند فتح قاعدة البيانات من
جديد .
54
:ABORT -4
فى هذا الوضع من الغلق تحدث الخطوات التالية -:
•العمليات الحالية فى قاعدة البيانات يتم قطعها مباشرةً .
•ل ينتظر المستخدميين الحاليين فى قاعدة البيانات حتى ينهوا
إتصالهم.
•البيانات الموجودة فى ال Bufferل تكتب فى الديسك.
•العمليات التى لم يتم تثبيتها ل يتم التراجع عنها .
•يتم إنهاء ال Instanceدون إغلق ملفات قاعدة البيانات.
•عند فتح قاعدة البيانات من جديد نحتاج لعمل إسترجاع لل
.Instance
يمكن فتح قاعدة البيانات فى الوضع Read Onlyوذلك لعدم اجراء أى تعديلت على قاعدة اليبانات .
اثناء فتح قاعدة البيانات فى الوضع Read Onlyيمكن القيام ببعض المهام -:
-1تنفيذ إستعلم .
-2وضع ملفات ال Data Filesفى الوضع . and online offline
-3إنجاز إسترجاع لملفات .offline data file and tablespace
55
Opening a Database in Restricted Mode:
فى هذا الوضع يمنع دخول المستخدمين لقاعدة البيانات إل إذا كان المستخدم يملك صلحية
RESTRICTED SESSION PRIVILEGE.
فى الحقيقة هذا الوضع مفيد فى البعض الحيان مثلً اثناء قيامك بعمل تصدير Exportلقاعدة البيانات
ول تريد من المستخدمين من الدخول لقاعدة البيانات .
او
56
الن كل المستخدمين الذين ل يملكون صلحية ال RESTRICTED SESSION PRIVILEGEل
يستطيعون دخول قاعدة البيانات .
الن يمكن إنهاء كل اتصالت المستخدمين الذين اتصلوا قبل تطبيق النمط RESTRICTED
SESSIONوذلك على خطوتين -:
-1تحديد ال SESSIONالتى نريد إلغاءها وذلك عن طريق الستعلم التى :
SELECT SID, SERIAL# FROM V$SESSION
-2إلغاء ال .SESSION
57
58
تحدثنا سابقا ان التخزين فى قاعدة البيانات يكون على حالتين الول التخزين المنطقى Logical
فى ال Tablespacesوالثانى Physicalفى ال . Data Files
بمعنى اخر أنه ل يوجد Data Filesفى قاعدة البيانات ل ينتمى ل . Tablespace
59
وعموما فى هذا الفصل سنتحدث عن -:
-1مفاهيم عامة عن ال .Tablespaces
-2إنشاء ال .Tablespaces
-3إدارة ال .Tablespaces
-4كيفية الحصول على معلومات عن ال .Tablespaces
60
-1مفاهيم عامة عن ال :Tablespaces
61
الشكل اعله يوضح الخيارات المتاحة لل Tablespacesوهى :
:Space Management in Tablespacesوهى كيفية إدارة المساحة - 1
فى ال Tablespacesوهناك نوعان-:
.Locally Managed Tablespaces -1
هنا يتم إدارة ال Extentsفى ال Tablespaceعن طريق ال Tablespaceبواسطة
ال ،Bitmapsفلحظة تخصيص ال Extentsأو تحريرها يقوم ال Oracle Serverبتغير
ال قيمة ال Bitmapللحالة الجديدة .وهذا النوع من الدارة هو الصل عند إنشاء
Tablespaceفى الصدار ، Oracle 10gوقد صار هذا النوع متاح إبتداء من الصدار , Oracle 8i
ولنه ل يحدث تعديل فى ال Dictionary Dataفإنه ل يتم .Generate Undo Information
لتحويل إدارة ال Tablespaceمن ال Data Dictionaryالى Locallyنستخدم
DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL
:Logging-2
62
:Yes-1المعنى لحظة تغير الكائنات فى ال Tablespacesفانه يتم
كتابة التغييرات فى ال .Redo Log Files
:NO-2المعنى لحظة تغير الكائنات فى ال Tablespacesفانه ل يتم
كتابة كل التغييرات فى ال .Redo Log Files
:Mode -3
:Read Only -1المعنى هنا أننا ل نستطيع الكتابة أو التعديل أو المسح على البيانات
الموجودة فى ال ، Tablespaceبالطبع ل نستطيع أن نضع كل من
ال( ) System & Sysaux Tablspaceفى الوضع Read
.Only
:Read and write -2المعنى أننا نستطيع الكتابة أو التعديل أو المسح على البيانات
الموجودة فى ال .Tablespace
:Views -4
وهى الستعلمات لمعرفة معلومات عن ال Tablespacesوال ..Data Files
DBA_TABLESPACES
V$TABLESPACE
DBA_DATA_FILES
V$DATAFILE
DBA_TEMP_FILES
V$TEMPFILE
:Contains -5
: Permanent -1وهو لتخزين الكائنات المستديمة فى قاعدة البيانات .
:Temporary -2لتخزين الكائنات المؤقتة فى قاعدة البيانات لذلك تحتاج قاعدة
مثلً لعمليات ترتيب البيانات. البيانات ،
:Undo -3تستخدمه ال Database Serverلتخزين ال Undo Informationوهو
فى قاعدة البيانات ويتم إنشاءه أثناء إنشاء قاعدة البيانات ويمكن اضافة اخرى عندما ضرورى
نحتاج لذلك لكن فى الوقت الواحد يعمل Undoواحد فقط يحدد عن طريق ملف المتغيرات
. .%Undo_Tablespace=%Value
.
:Status -6
63
:Online -1أى أن ال Tablespaceمتاح لجميع المستخدمين .
:Offline -2اى أن ال Tablespaceغير متاح للمستخدمين وهناك عدة خيارات لهذا الوضع
( . ) Normal & Temporary & Immediate & For Recoverل يمكن وضع
( )System & Undo Tablespaceفى الوضع .Offline
:SQL -7
:Create -1لنشاء ال .Tablespace
:Alter -2لجراء تغيرات على ال .Tablespace
:Drop -3لحذف ال .Tablespace
:Type -8
:Small Tablespace -1وهو Tablespaceيحتوى على Data Fileواحد أو أكثر وهو
الصل عند إنشاء .Tablespace
:Big Tablespace -2وهو نوع جديد من ال Tablespaceصار متاح فى الصدار
، Oracle 10gبحيث تصل مساحته الى )Terabytes(TB 128ويحتوى على ملف
واحد فقط . data File
64
يستخدم هذا ال Tablespaceمن قبل ال Oracle Serverلدارة قاعدة البيانات ،حيث يحتوى
على ال Data Dictionaryوالجداول التى تحتوى على معلومات إدارية حول قاعدة البيانات ،كذلك
يحتوى على (.)Sys Schema
:Temp -3
وهو Tablespaceيستخدم لتخزين الجداول والمراجع المؤقتة ،مثل عند الترتيب .وقد يكون
هناك أكثر من Temporary Tablespaceفى قاعدة البيانات الواحدة ولكن يعمل واحد فى اللحظة على
قاعدة البيانات .
:Undo -4
يستخدم هذا ال Tablespaceمن قبل ال Oracle Serverلتخزين ال Undo
Information
،هل فكرت كيف يمكن التراجع عن عملية تعديل لحقل معين ،المعلومات القديمة يتم حفظها فى هذا ال
.Tablespace
عملى:
65
Locally Managed فإن الصل هوTablespace بما أننا لم نحدد نوع إدارة ال
.Tablespace
66
. الموجودةData File الطريقة الثانية زيادة حجم ال
Tablespace موجود على نظام التشغيل ويمكن إستخدامه عند إنشاءData File بهذه الطريقة يظل ال
. جديد
68
:Offline الى الوضعTablespace تحويل ال-6
69
. فى قاعدة البياناتDefault Temporary Tablespace هو الTablespace وحتى يكون هذا ال
70
.Group اخر لنفس الTablespace أنشاء
71
DBA_DATA_FILES
DBA_TEMP_FILES
72
:Control File
او يمكن أن نسميه ملف التحكم وهو ملف ثنائى اى ل يمكن قراءته إذ أنه ليس نصيا ،
وبدونه ل تعمل قاعدة البيانات ،وييم قراءته فى الوضع ، Mountإذا يمكن أن نفتح قاعدة البيانات فى
الوضع Nomountحتى لو فقدنا ملف ال . Control File
73
وبالطبع يكون تابع لقاعدة بيانات واحدة ،ويتم تحديثه فقط عن طريق ال Oracle Serverاثناء
عمل قاعدة البيانات فل يستطيع مدير قاعدة البيانات تحديثه .
إذا فقدنا ال Control Fileنحتاج لسترجاعه قبل فتح قاعدة البيانات من جديد .
يتم إنشاؤه أثناء إنشاء قاعدة البيانات ،كما يمكن زيادة عدد ال Control Fileبعد إنشاء قاعدة
البيانات حتى نستطيع السترجاع إذا فقدنا احد ال . Control File
74
الن نفترض أن لدينا قاعدة البيانات اسمها OBAYتحتوى على 3ملفات من ال Control
Filesنريد أن نضيف لها ملف Control Fileاخر .
سنقوم بعمل هذا السناريو فى حالين -:
الحال الول :باستخدام ال .SPFILE
الحال الثانى :باستخدام ال .init.ora
-2يلزمنا إغلق قاعدة البيانات الن حتى يتم تحديث التعديل السابق .
-3عن طريق نظام التشغيل نقوم بعمل نسخ لحد ملفات ال Control Filesال موجودة الن ونضعه
ونسميه كما حددناه فى المتغير Control_Files
75
-4الن يمكن فتح قاعدة البيانات .
وهكذا قاعدة البيانات الن تعمل باربعة من ال Control Filesبدلً من ثلثة .
لحظ أن العملية تتطلب إغلق لقاعدة البيانات ومن ثم عمل نسخ على نظام التشغيل ومن ثم فتح
قاعد البيانات من جديد .
76
الحالة الثانية (-: )init.ora
فى الحالة الولى قاعدة البيانات كانت تعمل على ملف المتغيرات ( )SPFILEوالن نفترض
أن قاعدة البيانات تعمل على ملف المتغيرات (-: )initobay.ora
-1قفل قاعدة البيانات .
77
عند كتابة المر اعله سيفتح ملف المتغيرات ونعدل فى المتغير Control_Filesبحيث نكتب المسار
الجديد واسم الملف الجديد ،ولنفترض أن اسمه CONTROL05فى نفس المسار .
78
تغيير إسم قاعدة البيانات -:
هل فكرت يوما تغيير إسم قاعدة بياناتك ؛ لشك أنك فكرت فى هذا لكن كيف الطريق إلى ذلك ،
فى الحقيقة المر جدُ يسير .فتغيير إسم قاعدة البيانات يلزم تعديل ملفين اثنين هما ملف المتغيرات
Parameter Fileوملف التحكم . Control Fileواليك الخطوات -:
79
-2الن نقوم نقوم بتغيير إسم قاعدة البيانات على ملف التحكم ال . Control Fileلكن المشكلة أن هذا
الملف ليس نصيا حتى نستطيع تعديله ،فهو ملف ثنائى ،لذا يمكن اللجوء لعمل نسخ احتياطى لهذا الملف
ك . Trace File
نتيجة هذا النسخ الحتياطى Trace Fileعباره عن ملف نصى يحتوى على كود يمكن ان
يستعمل لنشاء Control Fileجديد ،كما يمكن التعديل فى هذا الكود .بحيث نغير اسم قاعدة البيانات .
يوجد هذا الملف فى المسار المعرف فى المتغير . user_dump_dest
والن نجرى عملية النسخ الحتياطى .
80
ما يهمنا فى هذا الملف هو ما قمنا بتظليله ،والن نقوم بعمل نسخ لهذا الجزء المظلل ونحفظه
فى ملف جديد ولنفترض أن اسمه . Control.trc
بالطبع إذا قمنا بعمل نسخ احتياطى لل Control Fileبالطريقة اعله ثم بعد ذلك قمنا بتغير
تكوينات قاعدة البيانات مثلً إضافة Tablespaceأو ، Data Fileفيلزمنا تعديل ال Trace File
بالتعديلت الجديدة فى حال استخدمناه لنشاء .Control File
يكون شكل الملف Control.trcكالتى :
هذا هو الملف Control.trcالذى سنستخدمه لنشاء ال Control Fileالجديد ولكن قبل ذلك يلزمنا
تعديل ما قمت بتظليله على النحو التالى -:
81
بعد إجراء هذه التعديلت يلزمنا الحفظ .
-4تغيير إسم قاعدة البيانات على الملف INITobay.oraوهو ملف المتغيرات ( )PFILEالتى تعمل به
قاعدة البيانات الحالية .
نغير إسم قاعدة البيانات db_nameمن OBAYالى TESTثم نحفظ التعديلت .
82
-6تشغيل قاعدة البيانات فى الوضع . NOMOUNT
-7الن نقوم بإنشاء ال Control Fileباستخدام ال Trace Fileالذى قمنا بانشاءه سابقا .
83
:Redo Log Files
84
هذا الملف لتسجيل التغييرات التى تحصل على البيانات بحيث يتم تسجيل التغييرات التى تم تثبيتها او ل ،
نستفيد من هذا الملفات فى استرجاع قاعدة البيانات فى حال حدوث فشل .بحيث تكون هناك بعض
البيانات لم تكتب فى ال Data Filesبينما كتبت فى هذا الملفات .
يكون هذا الملف فى شكل GROUPبحيث تعمل كل قاعدة البيانات على على القل باثنين من ال
. Groups
إذا يستخدم هذا الملف اساسا لعملية السترجاع فى حالة حدوث خطا إذ يحتوى على التغييرات التى
تحصل على البيانات .
ولضمان الحفاظ على هذا الملف فإن كل Groupينتظم فى شكل Membersوكل ال Member
داخل ال Groupهى نسخة طبق الصل الهدف منها تقليل نسبة خطر الفقدان .
LGWR Background Processيقوم بكتابة البيانات الموجود ال Redo log Bufferالى ال Redo
.Log Files
85
لحظة ملئ ال Redo Log Fileفان ال LGWRيقوم بالتحول لل Redo Log Fileالخرى فى عملية
تعرف بال . Log Switch
إذا فال Oracle Serverيقوم بكتابة كل التغيرات على قاعدة البيانات فى ال . Redo Log Bufferهذه
المتغيرات تكتب من ال Bufferإلى ال Redo Log Fileعن طريق ال LGWRفى الحالت التالية
-:
-1لحظة نثبيت العمليات (.)Commit
-2لحظة إمتلء ال Bufferالى الثلث .
-3قبل عملية .DBWn
إذا عملية ال Log Switchتحدث اليًا دون تدخل من مدير قاعدة البيانات ،لكن قد يحتاج مدير قاعدة
البيانات احيانا لعمل هذه المهمة يدويا من خلل المر التالى -:
كذلك عملية ال Checkpointتحدث اليا عند حدوث ال Log Switchوهى تقوم بعمل تعديل لل
Headerلكل ال Data Filesوال Control Filesللشارة بأن اكمل بنجاح .
ايضا يمكن عمل Checkpointاليا عن طريق مدير قاعدة البيانات بالمر التالى -:
86
: Online Redo Log Files Group إضافة
وذلك عن، جديدOnline Redo Log Files Group فى بعض الحيان نحتاج لضافة
-: طريق المر التالى
87
-: Groups للMembers ولضافة
كذلك ل يمكن حذف، Groups مع ملحظة أن قاعدة اليببانات تعمل على القل على اثنين من ال
. current or active Groups
تظل الملفات موجودة على مستوى نظام التشغيلOracle عن طريق الGroup أيضا عند حذف ال
.
88
-:Online Redo Log Members حذف
فهى ضمنا تعنى، Group فى الMembers وهى لحل مشكلة العطل الذى يحدث لكل ال
. Redo Log Files إعادة إنشاء لل
Clearing فإن عملية الArchive log إذا كانت قاعدة البيانات تعمل فى الوضع
عموما سنتحدث عن موضوع الرشيف لحقا ولكن، لم تتم ارشفتهGroup 2 اعله ستفشل إذا كان ال
لحل
-: هذا الشكال يمكن تعديل المر السابق للتى
89
ولكن يجب قبل القيام بهذا المر بعمل نسخ إحتياطى كامل لقاعدة البيانات ( . )Full Backup
90
91
92
سنتطرق قى هذا الفصل لكل من التى-:
وهذا الفصل من الهمية بمكان ،بحيث يعتبر من اهم اولويات مدير قاعدة البيانات .
فالفكرة الساسية تقوم على أن الوصول لقاعدة البيانات يتطلب وجود مستخدم يمتلك صلحية
الوصول ،إذا ل يمكن ان تظل قاعدة البيانات متاحة للجميع .
واول ما يمكن مناقشته هنا كيفية إنشاء مستخدم فى قاعدة البيانات .فمدير قاعدة البيانات يجب مراعاة
التى عند إنشاء المستخدمين -:
-1ان يكون اسم المستخدم فريدا فى قاعدة البيانات وأن ل يتعدى عدد حروفه 30حرفا ،وايضا ل
ل.
يحتوى على مساحات ويبتدئ بحرف اى ليس رقما مث ً
-2وسيلة التحقق .سواء اكان ذلك عن طريق قاعدة البيانات او عن طريق نظام التشغيل او غيره .
93
Default Tablespace -3وهو ال Tablespaceالذى يستخدم لنشاء وتخزين كائنات المستخدم .
Temporary Tablespace -4وهو ال Tablespaceالذي يستخدم لنشاء الكائنات المؤقتة للمستخدم .
-5ال Profileللمستخدم وهو لدارة الموارد وكلمة السر للمستخدم .
عند إنشاء مستخدم فى قاعدة اليبانات يتم خلق Schemaوهى مجموعة الكائنات الممتلكة للمستخدم
وتكون اسم ال Schemaبنفس اسم المستخدم .
ولنفترض اننا الن نريد إنشاء مستخدم . TEST
فى السناريو السابق قمنا بخلق مستخدم اسمه TESTوكلمة السر لهذا المستخدم ايضا TEST
،هذه المستخدم ينشئ ويخزن الكائنات فى ، Users Tablespaceكما يخزن الكائنات المؤقتة فى
. Temp Tablespaceهذا المستخدم يجب عليه تغيير كلمة السر عند اول دخول كما نشاهد ادناه ،
ايضا هذا المستخدم ACCOUNTغير مغلق اى يمكن التصال بعد تغيير كلمة السر.
94
بمعنى اخر إذا كان Default Temporary Tablespaceفى قاعدة البيانات هو Tempوكان ال
Default Tablespaceفى قاعدة البيانات هو Usersفل يلزمنا تحديد ذلك عند إنشاء المستخدم إذا كنا
ل نريد تغيير ال .Default
كذلك الحال بالنسبة لل Profileفإنه إذا لم يتم تحديده فسوف يُمنح ال . Default Profile
:QUOTA
وهى الحصة المتاحة للمستخدم لنشاء الكائنات فى ال Tablespacesوبدونها يكون المستخدم
عاجز عن إنشاء اى كائن .
لذا يمكن لمدير قاعدة البيانات منع المستخدم من إنشاء أى كائن عن طريق منحه حصة Quota
تساوى صفر فى ال . Tablespace
كذلك يستطيع مدير قاعدة البيانات منح المستخدم حصة Quotaغير محدودة فى ال Tablespace
عن طريق منحه . Unlimited
يمكن منح الحصة للمستخدم اثناء النشاء او بعد ذلك .
فلنفترض الن اننا نريد منح حصة تساوى صفر للمستخدم TESTفى . Users Tablespace
ولنفترض الن اننا نريد منحه حصه غير محدودة فى . Users Tablespace
95
هناك خيار اخر وهو منح هذا المستخدم صلحية تسمى . Unlimited Tablespaceوهى صلحية
تسمح لهذا المستخدم حصة غير محدودة فى ال .Tablespaces
كما ذكرنا سابقا يمكن منح الحصة اثناء خلق إنشاء المستخدم كالتى -:
96
وهى تكون كالتى .identified by password -:
:Externalويكون التحقق عن طريق نظام التشغيل بحيث يستطيع المستخدم التصال بقاعدة
البيانات دون إدخال اسم المستخدم وكلمة السر لقاعدة البيانات .وذلك لن كلمة السر لقاعدة البيانات
غير مستخدمة فى هذا النوع من التحقق .
يتطلب هذا النوع من التحقق تهيئة المتغير OS_AUTHENT_PREFIXبحيث يحتوى على قيمة
حرفية هى $OPSفى الصل ،بالطبع نستطيع تغيره كما نشاء ،هذا المتغير نحتاجه عند عملية
التحقق من المستخدم الذى يريد التصال بقاعدة البيانات .
ولنفترض أننا قمنا بتغيير المتغير اعله الى القيمة ، OBAYومستخدم نظام التشغيل الذى نستخدمه
هو ADMINISTRATORإذا يلزمنا إنشاء مستخدم فى قاعدة البيانات اسمه
OBAYADMINISTRATORونختار طريق التحقق . External
97
بالطبع نحتاج لغلق قاعدة البيانات وفتحها من جديد .
98
الن المستخدم OBAYADMINISTRATORيستطيع التصال بقاعدة البيانات مباشرة ودون التحقق
من قاعدة البيانات فالتحقق يتم عن طريق نظام التشغيل.
الصلحيات (:)Privilege
كل المستخدمين الذين قمنا بخلقهم فى السناريوهات السابقة ل يستطيعون التصال بقاعدة البيانات
ل عن القيام بأى مهام اخرى إذ ليس لديهم صلحيات لذلك .
فض ً
فى الخطوات السابقة قمنا بخلق المستخدم وحددنا له طريقة التحقق ومنحناه الحصة المطلوبة
وحددنا له ال Profileلدارة كلمة السر والموارد ،لكن ينتظرنا الن أن نعطيه صلحيات للعمل فى
قاعدة البيانات .ويكون منح الصلحيات عن طريق مدير قاعدة البيانات او ممن يملك الصلحيات .
: SYSDBA & SYSOPERهذه الصلحيات تسمح للمستخدم إغلق وفتح قاعدة البيانات.
: CREATE TABLESPACEتسمح للمستخدم إنشاء .Tablespace
عموما يمكن استعراض كل الصلحيات System Privilegesالمتاحة لمدير قاعدة البيانات عن طريق
الستعلم التى -:
يجب مراعاة الكلمة ANYعند منح الصلحيات ،ولتوضيح هذا المعنى نلحظ الفرق بين الصلحيتين :
99
:SELECT TABLEتسمح للمستخدم عمل SELECTعلى الجداول التى يملكها المستخدم.
:SELECT ANY TABLEتسمح للمستخدم عمل استعلم SELECTعلى الجداول التى يملكها
المستخدمين الخرين.
هناك خيار عند منح الصلحيات System Privilegesللمستخدم وهو الخيار WITH ADMIN
.OPTION
هذا الخيار يعنى ان المستخدم بعد أن يملك الصلحية يستطيع منحها لغيره من المستخدمين .
تخيل معى هذا السناريو وهو أن مدير قاعدة البيانات منح المستخدم TESTصلحية
CREATE TABLESPACEعن طريق الخيار ، WITH ADMIN OPTIONقام المستخدم
TESTبإنشاء Tablespaceومن ثم منح هذه الصلحية لمستخدم اخر اسمه .TEST1
اراد مدير قاعدة البيانات سحب الصلحية CREATE TABLESPACEمن المستخدم .TEST
100
اول سيستم سحب الصلحية من المستخدم دون التاثير على المهام التى نفذها بواسطة هذه الصلحية
وهى هنا انشاء ال .Tablespace
ثانيا :المستخدم TEST1ل يتاثر بسحب الصلحيات من المستخدم TEST
هذا المستخدم يستطيع معرفة ما يمكله من صلحيات System Privilegesعن طريق الستعلم -:
للستعلم :
DBA_ROLES
USER_ROLE_PRIVS
DBA_ROLE_PRIVS
ROLE_ROLE_PRIVS
ROLE_SYS_PRIVS
ROLE_TAB_PRIVS
SESSION_PRIVS
-:Privileges Object -2وهو لتمكين المستخدم للوصول واستعمال الكائن المعين ،بدون هذه
الصلحيات المستخدم له الصلحيات على الكائنات التى يملكها فقط .
101
المستخدم فى قاعدة البيانات له صلحيات بالطبع على الكائنات التى يملكها ،يستطيع المستخدم ان يمنح
صلحيات لمستخدم اخر للوصول للكائنات التى يملكها ،وكذلك مدير قاعدة البينات يستطيع منح
صلحيات للمستخدمين للوصول لكائنات يملكها مستخدم اخر .
نفترض ان المستخدم TESTيملك جدول اسمه ، EXAMPLEهذا المستخدم يريد منح صلحية
SELECTعلى هذا الجدول للمستخدم .TEST1
ماذا لو اراد مدير قاعدة البيانات منح صلحية SELECTعلى الجدول EXAMPLEالذى يمتلكه
المستخدم TESTللمستخدم .TEST1
كذلك يمكن استخدام الخيار WITH GRANT OPTIONعند منح الصلحيات Objects
Privilegesإشارة إلى أن هذا المستخدم بعد ان يملك هذه الصلحية يمكن أن يمنحها غيره من
المستخدمين .
102
الن المستخدم TEST1يستطيع منح صلحية SELECTعلى الجدول EXAMPLEالذى
يملكه المستخدم TESTلغيره من المستخدمين .
;SHOW USER
103
الن المستخدم TEST1يستطيع منح صلحية SELECTعلى الجدول EXAMPLEالذى يمتلكه
104
لحظ ان المستخدم فقد صلحية عمل اسنعلم SELECTعلى الجدول . EXAMPLE
105
يمكن الستعلم عن ال Objects Privilegesبعدة طرق منها :
DBA_TAB_PRIVS
ALL_TAB_PRIVS
USER_TAB_PRIV
DBA_COL_PRIVS
ALL_COL_PRIVS
USER_COL_PRIVS
SESSION_PRIVS
-:ROLES
تخيل معى انك تعمل مدير لقاعدة بيانات بها اكثر من 100مستخدم ،هؤلء المستخدمين على
مستويات مختلفة من الصلحيات ،ولنفترض انهم على خمسة مستويات .
ما العمل إذا ؟ هل تمنح كل مستخدم صلحياته بمفرده ؟ يلزمك إذا عملً شاقا طويلً .
الحل بكل بساطة هو فى ال .ROLES
106
الفكرة هى انه يمكن دمج مجموعة من الصلحيات فى كائن واحد يسمى ، ROLEفالسناريو
السابق لمدير قاعدة البينات الذى يدير قاعدة بيانات بها اكثر من 100مستخدم على مستويات مختلفة
وهى خمسة مستويات ابسط مما تتخيل ،يلزمنا المرإنشاء خمسة من ال ROLESبعد ذلك نمنح
الصلحيات لهذه ال ROLESحسب المستويات ومن ثم منحها للمستخدمين .
هذا الحل يسهل علينا عملية ادارة الصلحيات فبدل من ادارة اكثر من 100مستخدم يلزمنا المر ادارة
خمسة من ال .ROLES
كذلك عند تعديل اى من ال ROLESفإن التعديل ينعكس اليا على المستخدمين فيسهل علينا
عملية التعديل ،كذلك هذه العملية تحسن الداة .
يجب مراعاة أن إسم ال ROLEان يكون فريدا فى قاعدة البيانات بحيث يكون السم لم يستعمل
كمستخدم ول ك Rolesفى قاعدة البيانات.
بالطبع يمكن انشاء ROLEومنحها درجة من السرية عن طريق منحها كلمة سر للتحقق .
107
ملحظة :يمكن اختيار الخيار WITH ADMIN OPTIONعند منح ال . ROLEهذا الخيار يمكن
المستخدم بعد امتلك ال ROLESمنحها لغيره من المستخدمين .
كذلك يمكن اجراء تعديلت على ال ROLESولنفترض مثلً اننا نريد عمل كلمة سر لل OBAY
. ROLE
108
:PROFILES
وهو لإدارة كلمة السر وكذلك الموارد ،فبعد كم سيتم انهاء كلمة السر؟ وماهى عدد
المحاولت الفاشلة قبل ان يتم اغلق حسابك ؟ وكم SESSIONيسمح للمستخدم فتحها فى قاعدة
البيانات؟ وغيره من السئلة التى يجب عنها ال .PROFILE
وكما ذكرنا سابقا اى مستخدم فى قاعدة البيانات لبد أن يكون له PROFILEإذا لم يتم تحديد
ذلك عند النشاء فان ال ORCLE SERVERسوف يمنح المستخدم PROFILEيسمى DEFAULT
هذا ال PROFILEيتم خلقه مع إنشاء قاعدة البيانات ول يمن حزفه من قاعدة البيانات .
بالطبع يمكن إنشاء وتعديل وحذف PROFILEمن قاعدة البيانات .
109
أما بالنسبة بالمصادر المتاحة فيتم تحديد التى :
:CONNECT TIMEلتحديد الدقائق المسموح بها للمستخدم المتصل بقاعدة البيانات قبل قطع اتصاله
اليا.
:IDLE TIMEلتحديد الدقائق المسموح بها للمستخدم المتصل بقاعدة البيانات ان يظل عاطل عن
العمل قبل قطع اتصاله الياُ.
:CONCURRENT SESSIONSلتحديد عدد ال SESSEIONSالمسموح بها للمستخدم للتصال
بقاعدة البيانات.
:PRIVATE SGAلتحديد المساحة المتاحة للمستخدم فى ال PRIVATE SGAهذا إذا كنا نعمل فى
الوضع .SHARED SERVER
110
اعلهPROFILE ماذا لو اردنا تعديل ال
111
اذا اردنا معرفة كل ال PROFILESالموجودة فى قاعدة البيانات
112
DROP PROFILE NEWPROFILE CASCADE;
113
114
فى الحقيقة هذا الفصل من الهمية بمكان ،فالحفاظ على بقاء واتاحة قاعدة البيانات هو المر الهم
لمدير قاعدة البيانات ،لذا كان لزاما على مدير قاعدة البيانات تأمين قاعدة البيانات حتى ل تكون فى
مهب الريح.
وحسب ملحظتى فإن هذا الجانب ل يحظى بالهتمام الكبر بالنسبة لمديرى قاعدة البيانات بل يكون
التركيز دائما على وضع استراتيجيات مناسبة للنسخ الحتياطى ،رغم أن أننا نلجأ كثيرا لسترجاع النسخ
الحتياطية نتيجة تقصيرنا فى جانب تأمين قاعدة البيانات ،فلنرفع إذا شعار الوقاية خير من العلج ،
ونبادر فى تأمين قاعدة البيانات .
115
المر ليس معقدا لكن يعتمد على التخطيط ،خصوصا إذا كانت قاعدة البيانات ضخمة وعدد المستخدمين
كبير .
-1التأكد من تأمين الشبكة :اعرف أن المر ليس من مهامك ادرك هذا جديدا لكن اجلس مع المسؤول
من تأمين الشبكة وتأكد من إنتفاء جميع المخاطر ،لن تجد هذه النقطة فى كتب اوركل ؛ بل هى تجربة
شخصية وانا اعمل فى مؤسسة مالية فى احد الدول العربية لول أن النسخ الحتياطى ( )Backupكان
حاضرا ؛ لكنا الن فى احد سجون المن القتصادى لهفوة قام بها المسؤول من تأمين الشبكة استطاع من
116
خللها احد القراصنة الدخول للمخدم وتعطيل قاعدة البيانات ،كنت واثقا من عدم مسؤليتى من هذا
الختراق لكن مشكلتنا فى كثير من الدول العربية أننا لم نستطيع بعد استيعاب مفهوم التخصصية .
-2حماية ال :DATA DICTIONARYكل المعلومات التى نحتاجها عن قاعدة البيانات موجودة فى
ال DATA DICTIONARYلذا كان لزاما على مدير قاعدة البيانات حمايتها .
وذلك بوضغ القيمة FALSEفى المتغير .O7_DICTIONARY_ACCESSIBILITY
بهذه التهيئة نضمن ان اى مستخدم يملك صلحية الوصول الى كل جدول * ANY TABLE
ل DROP ANY TABLEل يستطيع مسح ال .DATA DICTIONARY
مث ً
كذلك هذه التهيئة تمنع المستخدم SYSمن الدخول لقاعدة البيانات بدون الصلحية .SYSDBA
-3سحب الصلحية الغير مهمة من : PUBLIC
وهو ، DATABASE SERVER USER GROPلن كل الصلحيات التى تمنح لل PUBLIC
يستطيع استخدمها مستخدمى قاعدة البيانات لذا يجب سحب كل الصلحيات غير المهمة من ال
.PUBLIC
117
الن كل المستخدمين فى قاعدة البيانات يمكنهم استخدام هذه الصلحية .
-4منع التحقق من بعد عن طريق نظام التشغيل :وذلك بوضع القيمة FALSEفى المتغير
، REMOTE_OS_AUTHETحتى نمنع التصال عن بعد بقاعدة البيانات بواسطة التحقق عن
طريق نظام التشغيل .هذا المتغير فى الصل يأخذ القيمة FALSEفى اوركل . 10g
تحدثنا سابقا عن طرق التحقق من المستخدين وذكرنا أن احد الطرق هو عن طريق نظام التشغيل
. EXTERNAL
118
-2مراقبة قاعدة البيانات -:))MONITORING OR AUDITING
مراقبة قاعدة البيانات هو جزء من تأمين قاعدة البيانات ونستطيع من خلل عملية المراقبة ايجاد كثير
من الجابات لبعض المور التى ستظل غامضة لول عملية المراقبة ،ويمكن تقسيم عملية المراقبة الى
ثلث انواع -:
:Standard Database Auditing -1وهو لمتابعة وحفظ معلومات عن عمليات التصال وقطع
التصال بقاعدة البيانات ،وايضا متابعة أستخدام () System Privileges and Object Privileges
داخل قاعدة البيانات ،كعمليات النشاء والحذف والستعلم والتعديل وغيره من العمليات .
:Value-based auditing -2فى النوع الول تابعنا عمليات التصال وكذلك متابعة العمليات داخل
قاعدة البيانات ،ولكن قد نحتاج للحفاظ عل القيم التى يتم تغيرها فى قاعدة البيانات .
:Fine-grained auditing -3هذا النوع لحفظ عبارات ال SQLالتى تم تنفيذها فى قاعدة البيانات .
ولكن قبل التفصيل فى انواع المراقبة لبد من الشارة أن قاعدة البيانات اوركل 10gلبد من تهيئتها
قبل بدء فى عمليات المراقبة بواسطة المتغير AUDIT_TRAILالذى يأخذ أحد القيم التالية -:
:NONE -1وهى تعنى أن قاعدة البيانات غير جاهزة لعملية المراقبة .
:DB -2وهى تعنى ان معومات المراقبة يتم حفظها فى قاعدة البيانات فى جداول تنتمى للمستخدم
. SYS
:OS -3وهى تعنى أن معلومات المراقبة يتم حفظها على مستوى نظام التشغيل ،فإذا كنا نعمل على
بيئة ويندوز Widowsفان البيانات تحفظ فى ال ، Event Logاما إذا كنا نعمل على UNIX or
LINUXفإن المعلومات تخزن كملفات فى المسار المحدد على المتغير . AUDIT_FILE_DEST
119
الصدار اوركل 10gيدعم مختلف انواع المراقبة ،بحيث يستطيع مدير قاعدة البيانات مراقبة كل
الحداث التى تحدث فى قاعدة البيانات ،تخيلت معى حجم البيانات التى يتم تخزينها إذا قمنا بمراقبة كل
ما يحدث فى قاعدة البيانات ل شك أن ذلك سينعكس سلبا على أداء قاعدة البيانات لذا كان لزاما على
مدير قاعدة البيانات التركيز فى المراقبة بحيث يتم مراقبة ما نحتاجه دون الفراط فى المراقبة .
فإذا أردنا مثلً مراقبة بعض الجداول فالفضل التركيز على تحديد العمليات التى يجب متابعتها
مثلً فقط الحذف ،اما اذا قمت بمتابعة كل ما يحدث للجداول فإن ذلك سيؤثر على اداء قاعدة البيانات
فسوف يتم متابعة الستعلم والتعديل والمسح وغيره ،إذا التركيز امر مهم فى عملية المراقبة .
واول ما يلزمنا فعله هو تهيئة قاعدة البيانات بتغير قيمة المتغير AUDIT_TRAILمن القيمة
NONEالى احد القيم التالية ( )DB OR OSولنفترض هنا أننا نريد تخزين معلومات المراقبة داخل
قاعدة البيانات إذا نختار القيمة .DB
نقوم بتحويل قيمة المتغير AUDIT_TRAILال القيمة DBمع مراعاة أن هذا المتغير غير اّلى ،أى
يحتاج إلى إغلق وفتح قاعدة البيانات حتى تتأثر قيمة المتغير .
120
:Standard Database Auditing -1
كما ذكرنا سابقا هذا النوع من المراقبة يتركز على مراقبة عملية التصال بقاعدة البيانات وكذلك
متابعة إستخدام (. ) System Privileges and Object Privileges
كما يجب الذكر أن هناك خيارين أثناء عملية المراقبة (BY SESSION & BY
، ) ACCESS
121
:BY SESSIONوهى تعنى تخزين حقل واحد من المعلومات أثناء عمليات المراقبة لنوع معين من
العمليات لكل ، SESSIONولتضح الرؤية أكثر لنفترض أننا قمنا بمراقبة عملية التعديل على جداول
مستخدم معين ولنفترض أنه ، Xفقام احد المستخدمين بفتح SESSIONواستخدم هذه ال SESSION
لتعديل 5جداول تنتمى للمستخدم .Xفإن عملية المراقبة ستقوم بتخزين حقل واحد فقط لعملية التعديل ما
دام أنه قام بالتعديل بنفس ال ، SESSIONاى بمعنى اخر أنها توازى عبارة GROUP BY
.SESSION
:BY ACCESSيمكن اتخاذ نفس المثال السابق ،لكن هنا سيتم تخزين 5حقول كل حقل هو عبارة
عن عملية التعديل التى حدثت لكل جدول.
ل شك أن الخيار BY SESSIONقد ل يكون كافيا احيانا لمعرفة تفاصيل معلومات المراقبة لذا قد نلجأ
للخيار BY ACCESSالذى نجد فيه تفاصيل أكثر لكن بالطبع يزيد عمليات تخزين المعلومات.
فى هذا النوع من المراقبة كما ذكرنا الفضل فيه عملية التركيز ويكون التركيز بتحديد المستخدم
كذلك بتحديد نجاح او فشل العملية (. )SUCCESSFUL OR NOT SUCCESSFUL
122
ماذا الن لو قام المستخدم TESTبالتصال بقاعدة البيانات
الن مدير قاعدة البيانات يستطيع أن يشاهد معلومات عن عملية التصال اعله
SELECT
SERNAME,TERMINAL,ACTION_NAME,EXTENDED_TIMESTAMP
;FROM DBA_AUDIT_SESSION
ظهر لمدير قاعدة البيانات ان المستخدم TESTقام بالتصال بقاعدة البيانات بالتاريخ والزمن
المحدد من الجهاز NBSكما يمكن استعراض معلومات اخرى عن اسم مستخدم الجهاز وغيره من
المعلومات .
SELECT
USERNAME,TERMINAL,ACTION_NAME,TO_CHAR(EXTENDED_TIM
ESTAMP,'DD-MM-YYYY:HH-MI-
('SS'(,TO_CHAR(LOGOFF_TIME,'DD-MM-YYYY:HH-MI-SS
;FROM DBA_AUDIT_SESSION
123
الن يظهر لمدير قاعدة البيانات الن المستخدم TESTقام بقطع التصال بقاعدة البيانات فى الزمن
المحدد اعله ،اى أنه ظل متصل بقاعدة البيانات حوالى 21دقيقة .
يمكن ايضا استعلم معلومات التصال وقطع التصال بقاعدة البيانات بواسطة الجدول
. DBA_AUDIT_TRAIL
إذا معلومات التصال وقطع التصال بقاعدة البيانات متوفرة فى كل من (
)DBA_AUDIT_SESSION & DBA_AUDIT_TRAIL
يمكن لمدير قاعدة البيانات الستعلم عن خيارات المراقبة التى قام بتهيئتها فى قاعدة البيانات بواسطة
DBA_OBJ_AUDIT_OPTS
DBA_STMT_AUDIT_OPTS
DBA_PRIV_AUDIT_OPTS
بالطبع يمكن إلغاء عملية المراقبة ،فلو أردنا إلغاء عملية مراقبة إتصال المستخدم TESTالتى قمنا
بمراقبتها سابقا.
الن لو قمنا بعملية استعلم لعرض خيارات المراقبة التى قمنا بتهيئتها فلن نجد خيار مراقبة اتصال
المستخدم .TEST
124
* :SQL STATEMENT AUDITING
تخيل معى أن مدير قاعدة البيانات يريد مراقبة عمليات ال DDLمثل إنشاء او حذف جدول .فى
هذا النوع من المراقبة يمكن التركيز بواسطة تحديد المستخدم وكذلك بواسطة نجاح او فشل العملية ،لكن
ل بإنشاء جدول فى SCHEMAلمستخدم اخر فإن
هذا فى إطار ما يملك المستخدم ،فلو قام مستخدم مث ً
هذا النوع من المراقبة يدخل فيما يسمى SYSTEM PRIVILEGE AUDITINGوهو ما سنناقشه
لحقا ،أما هنا فقط فى اطار ما يمكلك المستخدم فقط .
ولنفترض أننا نريد مراقبة عملية إنشاء الجداول بواسطة المستخدم TESTداخل مساحته اى فى نفس ال
.SCHEMA
125
ستظهر المعلومات لمدير قاعدة البيانات .
SELECT USERNAME,OWNER,TO_CHAR(TIMESTAMP,'DD-MM-
YYYY:HH-MI-SS'(,OBJ_NAME,ACTION_NAME FROM
;'DBA_AUDIT_TRAIL WHERE OWNER='TEST
لكن لو قام المستخدم TESTمثلً بإنشاء جدول فى SCHEMAاخرى فإن خيارات المراقبة اعله لن
تاتى بمعلومات اللهم إل إذا رقبنا الصلحية CREATE ANY TABLEوهو ما سنناقشه فى الخطوة
القادمة .
يمكن الستعلم عن الخيار التى قمنا بتهيئتها لمراقبة SQL STATEMENTبواسطة :
DBA_STMT_AUDIT_OPTS
DBA_PRIV_AUDIT_OPTS
126
* :SYSTEM PRIVILEGE AUDITING
وذلك لمراقبة عمليات استخدام الصلحيات SYSTEM PRIVILEGESداخل قاعدة البيانات ،
مثلً الصلحية ، CREATE ANT TABLEبالطبع يمكن تركيز عملية مراقبة الصلحيات بواسطة
مستخدم معين كذلك بواسطة نجاح العملية أو فشلها ،فى الصل يتم تخزين عمليات مراقبة الصلحيات
SYSTEM PRIVILEGESكحقل لكل عملية وذلك لستخدام الخيار BY ACCESSفى الصل
لكن بالطبع يمكن استعمال الخيار BY SESSIONلتقليل عمليات تخزين المعلومات فيتم تخزين حقل
واحد لكل SESSIONقامت بإستخدام الصلحية المراقبة .
ولنفترض أننا نريد مراقبة الصلحية CREATE ANY TABLEللمستخدم ، TESTاى بمعنى اخر
أننا نريد مراقبة كل الجداول التى يقوم المستخدم TESTبإنشاءها فى SCHEMAاخرى .
127
. أخرىSCHEMA وهى تعنى إنشاء جدول فىCREATE ANY TABLE اى مستخدما الصلحية
.EMP المستخدم
SELECT
USERNAME,OWNER,OBJ_NAME,ACTION_NAME,TO_CHAR(TIMEST
AMP,'DD-MM-YYYY:HH-MI-SS'( FROM DBA_AUDIT_OBJECT
WHERE USERNAME='TEST';
128
نعم لقد قام المستخدم TESTبإنشاء جدول EMPLOYEEفى المستخدم EMPفى الزمن
المحدد اعله .
بالطبع يمكن متابعة باقى الصلحيات مثلً ))DROP ANY TABLEوغيرها من
الصلحيات .SYSTEM PRIVILEGES
129
* :OBJECT PRIVILEGE AUDITING
وهذا النوع لمراقبة العمليات التى تحدث على الكائنات من جداول TABLESومناظير VIEWS
وغيرها من الكائنات .
يمكن التركيز بواسطة تحديد المستخدم وكذلك بواسطة نجاح أو فشل العملية .الصل فى هذا النوع من
المراقبة أن تكون BY SESSIONولكن يمكن تحديد الخيار .BY ACCESS
SELECT USERNAME,TO_CHAR(TIMESTAMP,'DD-MM-YY:HH-
MI-SS'(,OBJ_NAME,ACTION_NAME FROM DBA_AUDIT_TRAIL
'WHERE USERNAME='TEST' AND OBJ_NAME='USER_MASTER
;'AND ACTION_NAME='INSERT
130
للستعلم عن خيارات تهيئة مراقبة ال .OBJECT PRIVILEGES
لحظ أنه مقابل الحقل INSوجدت القيمة A/Aاى أنه تتم مراقبة عملية ال INSERTبواسطة الخيار
BY ACCESSسواء نجحت العملية أو فشلت ،اما إذا كان الخيار WHENEVER
SUCCESSFULفإن القيمة ستكون .-/A
هكذا نكون قد ناقشنا الخيارات المتاحة للمراقبة التى تنتمى للجزء الول Standard Database
Auditingوهى :
.SESSION AUDITING
SQL STATEMENT AUDITING
SYSTEM PRIVILEGE AUDITING
131
OBJECT PRIVILEGE AUDITING
بالطبع هذا النوع من المراقبة Value-Based Auditingيقلل من أداء قاعدة البيانات اكثر من
النوع Standard Database Auditingوذلك لن ال Triggerيتم تنفيذه بعد كل عملية تعديل أو مسح
.
ولنفترض الن أننا نريد مراقبة وحفظ القيم المعدلة فى الحقل BOOK_NAMEالموجودة فى
الجدول BOOKالمملوك للمستخدم .TEST
يلزم مدير قاعدة البيانات اولً تحديد المعلومات التى يريد حفظها ولنفترض أنها -:
IP Address -1للجهاز الذى استخدم للتصال بقاعدة البيانات .
132
-2اسم مستخدم نظام التشغيل الذ قام بالتصال بقاعدة البيانات .
-3التاريخ والزمن .
-4قيمة الحقل قبل التعدل وبعد التعديل .
ثانيا :يلزم مدير قاعدة البيانات إنشاء الجدول لتخزين المعلومات عن عمليات التعديل ,
133
.Trigger ثالثا يقوم مدير قاعدة البيانات بإنشاء ال
134
هكذا تم إنشاء ال Triggerولنفترض الن أن المستخدم TESTقام بتعديل فى الجدول .BOOK
يستطيع مدير قاعدة البيانات متابعة ذلك التعديل بواسطة الجدول .BOOK_AUDIT
SELECT OS_USER,TO_CHAR(UPDATE_DATE,'DD-MM-YY:HH-
;MI-SS'(,IP_ADDRESS,OLD_NEW_NAME FROM BOOK_AUDIT
135
:DISABLE POLICY -4لتعطيل عمل .POLICY AUDIT
ولنفترض الن أننا نريد حفظ عبارات ال SELECTالتى تحدث للجدول BOOKالمملوك للمستخدم
. TESTوحتى ل نحفظ كل عبارات ال SELECTالتى تحدث للجدول BOOKفمن الممكن التركيز
على بعض الحقول وذلك بإستخدام بعض الشروط .
ل .WHERE BOOK_NO=1
مث ً
وذلك لتركيز عملية المراقبة .
مدير قاعدة البيانات دائما يجب ان يراعى أن ل يفرط فى عملية المراقبة ،بل يركز دائما على المطلوب
.
الن نقوم بتنفيذ الجراء ADD_POLICYوذلك لضافة AUDIT POLICYتقوم بحفظ عبارات
ال SELECTالتى تنفذ على الجدول BOOKوذلك حسب الشروط التى نحددها .
بالطبع هذا الجراء Procedureيحتوى على مجموعة من المتغيرات يجب أن نحدد لها قيم ،هذه
المتغيرات سنتحدث عنها بشى من التفصيل لحقا .
136
DECLARE
OBJECT_SCHEMA VARCHAR2(200(;
OBJECT_NAME VARCHAR2(200(;
POLICY_NAME VARCHAR2(200(;
AUDIT_CONDITION VARCHAR2(200(;
AUDIT_COLUMN VARCHAR2(200(;
HANDLER_SCHEMA VARCHAR2(200(;
HANDLER_MODULE VARCHAR2(200(;
ENABLE BOOLEAN;
STATEMENT_TYPES VARCHAR2(200(;
AUDIT_TRAIL BINARY_INTEGER;
AUDIT_COLUMN_OPTS BINARY_INTEGER;
BEGIN
OBJECT_SCHEMA := 'TEST';
OBJECT_NAME := 'BOOK';
POLICY_NAME := 'BOOK_SELEC';
AUDIT_CONDITION := 'BOO_NO=1';
AUDIT_COLUMN := 'BOOK_NAME';
HANDLER_SCHEMA := NULL;
HANDLER_MODULE := NULL;
ENABLE := TRUE;
STATEMENT_TYPES := 'SELECT';
AUDIT_TRAIL := 1;
AUDIT_COLUMN_OPTS := 0;
SYS.DBMS_FGA.ADD_POLICY ( OBJECT_SCHEMA,
OBJECT_NAME, POLICY_NAME, AUDIT_CONDITION,
AUDIT_COLUMN, HANDLER_SCHEMA, HANDLER_MODULE, ENABLE,
STATEMENT_TYPES, AUDIT_TRAIL, AUDIT_COLUMN_OPTS (;
COMMIT;
END;
/
وهى تعنى المستخدم الذى يحتوى الجدول او الكائن الذ نريد مراقبة:OBJECT_SCHEMA
. عليهSELECT عبارات ال
137
:OBJECT_NAMEوهو الكائن الذى نريد مراقبة عبارات ال SELECTعليه.
ENABLE :لتفعيل عمل AUDIT POLICYويأخذ هذا المتغير القيمة TRUEفى الصل.
138
الن ماذا لو قام المستخدم EMPبعمل استعلم على الجدول BOOKالمنتمى للمستخدم TESTبنفس
الشروط المذكورة اعله ؟
139
.يستطيع مدير قاعدة البيانات الن متابعة هذا الستعلم
SELECT
USERHOST,OS_USER,DB_USER,TO_CHAR(TIMESTAMP,'DD-MM-
YY:HH-MI-SS'(,SQL_TEXT FROM DBA_FGA_AUDIT_TRAIL
WHERE DB_USER='EMP;
بعمل إستعلم اخر لم تتحق فيه الشروط الموضحة فى الجراءEMP لو قام المستخدم
. فإن معلومات هذا الستعلم لن تظهر لمدير قاعدة البياناتADD_POLICY
التى تعمل فى قاعدةAUDIT_POLICIES بالطبع يستطيع مدير قاعدة البيانات الستعلم عن
. البيانات
.DBA_AUDIT_POLICIES
SELECT
POLICY_NAME,OBJECT_SCHEMA,OBJECT_NAME,POLICY_COLUM
N,SEL FROM DBA_AUDIT_POLICIES;
140
.DISABLE_POLICY بواسطة الجراءAUDIT POLICY يمكن تعطيل هذه ال
DECLARE
OBJECT_SCHEMA VARCHAR2(200(;
OBJECT_NAME VARCHAR2(200(;
POLICY_NAME VARCHAR2(200(;
BEGIN
OBJECT_SCHEMA := 'TEST';
OBJECT_NAME := 'BOOK';
POLICY_NAME := 'BOOK_SELECT';
SYS.DBMS_FGA.DISABLE_POLICY ( OBJECT_SCHEMA,
OBJECT_NAME, POLICY_NAME (;
COMMIT;
END;
/
141
DECLARE
OBJECT_SCHEMA VARCHAR2(200(;
OBJECT_NAME VARCHAR2(200(;
POLICY_NAME VARCHAR2(200(;
BEGIN
OBJECT_SCHEMA := 'TEST';
OBJECT_NAME := 'BOOK';
POLICY_NAME := 'BOOK_SELECT';
SYS.DBMS_FGA.ENABLE_POLICY ( OBJECT_SCHEMA,
OBJECT_NAME, POLICY_NAME (;
COMMIT;
END;
/
142
DECLARE
OBJECT_SCHEMA VARCHAR2(200(;
OBJECT_NAME VARCHAR2(200(;
POLICY_NAME VARCHAR2(200(;
BEGIN
OBJECT_SCHEMA := 'TEST';
OBJECT_NAME := 'BOOK';
POLICY_NAME := 'BOOK_SELECT';
SYS.DBMS_FGA.DROP_POLICY ( OBJECT_SCHEMA,
OBJECT_NAME, POLICY_NAME (;
COMMIT;
END;
/
فى قاعدةPOLICY فلن تجد هذه الAUDIT_POLICIES الن لو قمت بعمل إستعلم عن ال
البيانات
143
144
145
-: Oracle Net Services -1
أن يكون لديك مخدم Server Databaseيحتوى على قاعدة البيانات يتصل به جميع Client
Applicationاو جميع الجهزة التى تحتوى على برامج تحتاج للتصال بقاعدة البيانات هذا هو المر
الطبيعى والمعتاد والذى تعمل به اغلب الشركات فى العالم ،إذ ل يتصور أن تكون جميع الجهزة التى
تحتوى على برامج تحتاج للتصال بقاعدة البيانات تحتوى ايضا على قاعدة البيانات ،وإل فإننا نحتاج
لقاعدة البيانات لكل جهاز يحتوى عل برنامج وهذا غير مفبول عقلً ول عملً.
وإذا سلمنا بأن يكون لدينا مخدم يحتوى على قاعدة البيانات Database Serverتستطيع
جميع الجهزة التى تحتوى على برامج تحتاج لقاعدة البيانات التصال بهذا المخدم ،فإن محور حديثنا
فى هذا الفصل سينصب على كيفية إنجاح هذا التصال .
إذا المر سيكون على جانبين :الجانب الول وهو جانب المخدم Database Serverوكيف
يستطيع خدمة جميع الطلبات التى تصله للتصال بقاعدة البيانات .
اما الجانب الثانى وهو جانب ال Client Applicationوهو الجهاز الذى يريد التصال بقاعدة
البيانات ،وكيف يستطيع الوصول لقاعدة البيانات ؟
والن سنتحدث عن الجانب الول وهو جانب المخدم Database Serverوكيف يستطيع خدمة جميع
الطلبات للتصال بقاعدة البيانات ؟
فى هذا الجانب يستطيع المخدم Database Serverخدمة طلبات التصال بقاعدة البيانات بواسطة ال
Oracle Net Listenerوهو المسؤول عن عملية معالجة طلبات ال Clientsللتصال بقاعدة البيانات ،
فبدون ال Listenerمحاولة عملية التصال بقاعدة البيانات من خارج المخدم ستبوء بالفشل ،لكن عملية
محاولة التصال بقاعدة البيانات من داخل المخدم ل تحتاج لل Listenerإذ أنه متخصص لستقبال
الطلبات الخارجية .
يستطيع مستمع واحد One Listenerخدمة عدد من ال ، Database Instancesوهو فى الصل عبار
عن ملف يوجد فى المسار التى إذا كنا نعمل على نظام التشغيل .WINDOWS
ORACLE_HOME%\NETWORK\ADMIN\LISTENER.ORA%
أما إذا كنا نعمل على نظام التشغيل UNIX
ORACLE_HOME/NETWORK/ADMIN/LISTENER.ORA$
يستطيع مدير قاعدة البيانات تحرير وتهيئة هذا الملف ليستقبل طلبات التصال بقاعدة البيانات ،
146
هذا نموذج لملف ال Listenerبحيث يحتوى على One Listenerيسمى Listenerيعمل فى المخدم
nbsويراقب ال Port 1521مستخدما ، TCP PROTOCOLهذا المستمع يخدم INSTANCE
تسمى .ORCL
بالطبع يستطيع مدير قاعدة البيانات إضافة مستمع LISTENERجديد ولنفترض أننا نريد إضافة مستمع
جديد يسمى LISTENER1يعمل فى نفس المخدم NBSيراقب ال PORT 1521ويخدم نفس ال
INSTANCEالتى تسمى ORCLمستخدما . TCP PROTOCOL
147
لحظت التعديلت الجديدة فى الملف :وهى إضافة مستمع جديد يسمى .LISTENER1
148
الوامر المعروضة ه المتاحة للتعامل مع ال .LISTENER
وهى اوامر لتشغيل وايقاف وعرض حالة المستمع وكذلك وضع كلمة سر وتغيرها للمستمع كنوع من
التحقق ،وكذلك إعادة تشغيل المستمع ليستوعب ما تم تحديثه من تهيئة لملف ال LISTERNER.ORA
وغيره من الوامر ،وبما أننا اضفنا مستمع جديد اسميناه LISTENER1فالفضل أن نقوم بتشغيل هذا
المستمع ،لكن يجب التنبيه إلى أنه عند كتابة المر LISTENERفإنه يتم التعامل مع المستمع الصل
اى DEFAULTوالذى هنا هو LISTENERلذا إذا اردنا أن نتعامل مع المستمع غير الصلى فامامنا
احد خياران:
الول :تحيد إسم المستمع عند توجيه المر
الن قمنا بتشغيل المستمع الجديد الذى انشأناه وهو المستمع ، LISTENER1ولو لم نكتب إسم المستمع
بعد المر STARTلتم التعامل مع المستمع الصلى وهو المستمع .LISTENER
149
الن LISTENER1هو ال .DEFAULT LISTENER
بعد إنشاء المستمع LISTENER1وتشغيله يمكن متابعته عن طريق ال SERVICESإذا كنا نعمل عل
نظام التشغيل .WINDOWS
الن المستمع LISTENER1يستطيع استقبال طلبات التصال بقاعدة البيانات على ال PORT 1521
ل TCP PROTOCOLليخدم .ORCL INSTANCE
فى المخدم NBSمستعم ً
إذا أردنا مراقبة ومعرفة معلومات عن المستمع فالفضل استخدام المر STATUSاو
SERVICEلعرض معلومات عن المستمع مثل اسم المستمع واصداره ومتى تم تشغبله وال services
التى يخدمها ،ومسار ملف ال LISTENER.ORAوغيرها من المعلومات.
150
كما ذكرنا أن مستمع واحد يستطيع خدمة عدد من ال INSTANCESكما يمكن ان يتشارك
عدد من المستمعين LISTENERSفى خدمة INSTANCEواحدة ،كما يمكن ان يكون هناك عدد
من ال INSTANCESفى الجهاز الواحد فيكون لكل واحد منها مستع يخدمها .
151
-3البروتكول Protocolالذى يستخدمه المستمع.
-4اسم ال serviceاو ال Instanceالذى يخدمه المستمع.
CONN SYSTEM/SYS@NBS:1521/OBAY
وهذا النوع هو اسهل طرق التصال من حيث أنه ل يحتاج لتهيئة فى ال .Client
152
بحيث نقوم بعمل اسم مستعار لكل المعلومات المطلوبة اثناء عملية التصال وهى (& host
)protocol & port & service nameبحيث يمثل هذا السم المستعار المعلومات اعله ،فل نحتاج
اثناء عملية التصال سواء كتابة السم المستعار مع اسم المستخدم وكلمة السر
، username/password@aliasنستطيع وضع قائمة من عمليات تهيئة السماء المستعارة التى تمثل
مجموعة التصالت بقاعدة البيانات فى الملف .tnsnames.ora
153
:SERVICE_NAMEاسم ال INSTANCEالتى تريد التصال بها.
من الممكن القيام بعمل اختبار لل Oracle Net Service aliasesبواسطة المر tnspingثم بعده
نكتب السم المستعار . aliases
154
واخرى تسمى .ORCL
نحتاج الن ربط قاعدة البيانات OBAYمع قاعدة البيانات ، ORCLولنفترض أن المستخدم
TESTفى قاعدة البيانات OBAYيحتاج لعمل استعلم على الجدول EMPLOYEEالمملوك
للمستخدم VBSالموجود فى قاعدة البيانات ، ORCLإذا نحتاج لعمل Database Linkبين المستخدم
TESTفى قاعدة البيانات OBAYوبين المستخدم VBSفى قاعدة البيانات .ORCL
لكن قبل إنشاء ال Database Linkلبد من الشارة إلى أن المستخدم الذى يقوم بإنشاء ال
Database Linkلبد أن يكون لديه الصلحية .CREATE DATABASE LINK
والن المستخدم TESTفى قاعدة البيانات OBAYسيقوم بعمل Database Linkبينه وبين
المستخدم VBSفى قاعدة البيانات .ORCL
155
ل أننا نعمل على قاعدة البيانات OBAYوتأكدنا ثانيا أن
فى الخطوة السابقة تأكدنا او ً
المستخدم TESTيملك الصلحية .CREATE DATABASE LINK
ثانيا :يقوم المستخدم TESTبإختبار ال Oracle Net Service aliasesالموجودة فى ملف ال
tnsnames.oraوذلك للتأكد من سلمة التصال بقاعدة البيانات الخرى وهى هنا . ORCL
156
فى بعد الحيان يكون اسم ال Database Linkمصحوبا بإسم الجدول طويل فمن الفضل إنشاء
مرادف synonymلتسهيل واختصار كتابة العبارات خصوصا تلك التى يتكرر كتابتها.
تجدر الشارة هنا بأن نقول انك تستطيع من خلل ال Database Linkإجراء عمليات ال DMLوهى
( ) SELECT & INSERT & UPDATE &DELETEلكن من المتعذر اجراء عمليات ال DDL
مثل .CREATE & ALTER & DROP
157
ما قمنا به فى الخطوات السابقة هو ربط المستخدم TESTفى قاعدة البيانات OBAYمع
المستخدم VBSفى قاعدة البيانات ORCLعن طريق DATABASE LINKتسمى .TESTVBS
بالطبع لنشاء هذا النوع نحتاج للصلحية .CREATE PUBLIC DATABASE LINK
158
فى قاعدة البياناتDATABASE LINK للستعلم عن ال
DBA_DB_LINKS
USER_DB_LINKS
ALL_DB_LINKS
V$DBLINK
159
كما يمكن حذف ال PUBLIC DATABASE LINK
عند مناقشتنا لل Database Linkعرفنا كيف يمكن ربط قاعدة بيانات بأخرى وكيف يمكن
الوصول للكائنات فى قاعدة بيانات من قاعدة بيانات اخرى ،ولكن قد تحتاج فى بعض الحيان لنقل
وتحديث البيانات الموجودة فى قاعدة البيانات الى قاعدة بيانات أخرى .
كأن تكون مثلً مديرا لمجموعة صيدليات ؛ كل صيدلية تحتوى على قاعدة بيانات ولكن على
رأس كل ساعة تحتاج لجلب جميع حسابات الصيدليات من قواعد البيانات الموزعة الى قاعدة البيانات
الرئيسية ،هذه هى مهمة ال Materialized Views؛ ولكن لل Materialized Viewsمهام اخرى
ليست هنا مجال تفصيلها.
160
سنستخدم هنا نفس المثال الذى استخدمناه فى ال ، Database Linkولنفترض هنا أن قاعدة
البيانات OBAYهى قاعدة البيانات الرئيسية التى ستستقبل البيانات ،ولنفترض أننا سنستقبل البيانات
فى المستخدم ، TESTأما قاعدة البيانات الخرى ORCLوالتى تحتوى على الجدول الرئيسى
ولنفترض أنه EMPLOYEEالمملوك للمستخدم VBSالذى نحتاج الى نقل وتحديث بياناته كل ثانية
الى قاعدة البيانات الرئيسية .OBAY
بالطبع نحتاج قبل كل شئ لعمل Database Linkبين المستخدم TESTفى قاعدة البيانات
OBAYوبين المستخدم VBSفى قاعدة البيانات ، ORCLوذلك لعملية نقل وتحديث بيانات الجدول
EMPLOYEEمن قاعدة البيانات ORCLإلى قاعدة البيانات .OBAY
أيضا عملية تحديث البيانات ( )Refreshبين الجدول الرئيسى وال Materialized Viewsتنقسم
الى ثلث أنواع :
-:REFRESH FASTفى هذا النوع من التحديث يتم فقط نقل البيانات التى تغيرت بعد اخر -1
تحديث فهو ل يحتاج لنقل جميع البيانات ف الجدول وانما فقط ما تم تغيره بعد اخر تحديث ،هذا النوع
بفى الغالب يختصر الزمن .
:REFRESH COMPLETE -2أما فى هذا النوع من التحديث يقوم بنقل جميع بيانات الجدول من
المصدر الى ال Materialized Viewsفيقوم بعمل إعادة كتابة البيانات القديمة واضافة البيانات
الجديدة .ف الغالب ان هذا النوع يتطلب زمن اكثر من النوع .FAST
:REFRESHهذا النوع بيدأ اول بتطبيق النوع FASTإذا فشلت العملية كأن لم يجد FORCE -3
مثلً ال Materialized Views Logsفى جانب المصدر .ففى هذه الحالة يطبق النوع
.COMPLETE
إذا لم يحدد نوع التحديث اثناء إنشاء ال Materialized Viewsفان الصل DEFAULTهو
.FORCE
161
تخزينها فى ال ، Materialized View Logsوهو عبارة عن جدول يتم إنشاؤه فى قاعدة البيانات بل
وفى المستخدم الذى يملك الجدول المصدر وذلك عن طريق المر التالى :
فلحظة كتابة المر اعله ؛ قاعدة البيانات تقوم بإنشاء جدول بالصيغة
>MLOG$_<TABLE_NAME
كذلك عند تحديد الخيار Fast Refreshعند إنشاء ال Materialized Viewsيجب أن نكون
قمنا بإنشاء ال Materialized View Logsفى المستخدم الذى يحوى الجدول المصدر وإل ظهرت لنا
رسالة خطأ.
قد يكون فى الشرح السابق نوع من التعقيد لكن ل عليك ركز معى فى السناريو الذى سننفذه معا
خطوة خطوة ابتدا ًء من إنشاء المستخدمين وحتى عمل ال Materialized Viewsوهذا هو بيت القصيد.
162
قاعدة البيانات الولى تسمى ، OBAYسنقوم بإنشاء مستخدم فيها يسمى MAIN؛ وسنقوم
بإنشاء Materialized Viewsفى هذا المستخدم لجلب بيانات موجودة فى الجدول EMPLOYEE
المملوك للمستخدم SUBالموجود فى قاعدة البيانات .ORCL
واليك الخطوات -:
-1سنقوم بإنشاء المستخدم MAINفى قاعدة البيانات OBAYوسنمنحه الصلحيات الكافية.
-2فى الجانب الخر نتأكد من الجدول المصدر وهو هنا EMPLOYEEوالتأكد كذلك أنه يحتوى على
PRIMARY KEY CONSTRAINTحتى نستطيع إنشاء MATERIALIZED VIEWSفى
قاعدة البيانات الخرى بإستخدام الخيار .WITH PRIMARY KEY
163
SELECT * FROM EMPLOYEE;
SELECT
OWNER,CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME
FROM USER_CONSTRAINTS;
CONSTRAINT PRIMARY يحتوى على حقلين ويحتوى كذلك علىEMPLYEE إذا الجدول
.KEY
164
نقومEMPLOYEE الذى يحوى الجدول المصدرSUB وفى المستخدمORCL فى قاعدة البيانات-4
.MATERIALIZED VIEW LOG بإنشاء
165
CREATE MATERIALIZED VIEW EMPLOYEE_MV
REFRESH FAST
START WITH SYSDATE
NEXT SYSDATE + 1/(24*60*60(
WITH PRIMARY KEY
AS SELECT * FROM EMPLOYEE@MAINSUB;
ستلحظ أنه كل ثانيةMATERIALIZED VIEW الن يمكن الستعلم عن الجدول المصدر وال-6
]تكون النتيجة متطابقة بين الجدول المصدرSYSDATE +1/(24*60*60[ كما حددنا ذلك
.EMPLOYEE_MV وهىMATERIALIZED VIEW وبين الEMPLOYEE
166
;SELECT * FROM EMPLOYEE_MV
-7الن لو قمنا بإضافة حقل جديد فى الجدول المصدر ثم بعد ذلك أعدنا عمليات الستعلم اعله.
167
ستنعكس الضافة فى الجدول المصدر EMPLOYEEعلى EMPLOYEE_MV
MATERIALIZED VIEWبعد ثانية واحدة من الضافة فى الجدول المصدر.
يستطيع مدير قاعدة البياناات عمل إستعلم عن ال MATERIALIZED VIEWSالتى تعمل فى قاعدة
البيانات بواسطة الجدول
DBA_MVIEWS
168
نستطيع أن نحصل على معلومات اخرى من نفس الجدول.
.DBA_JOBS للستعلم عن ال JOBSبواسطة الجدول
169
170
171
:UNDO MANAGEMENT -1
فى الفصل الثالث من هذا الكتاب تحدثت عرضا عن ال Undo Tablespaceوذكرت أنه
يستخدم من قبل ال Oracle Serverلتخزين ال ، Undo Informationلكن هل فكرت يوما فى عملية
ال ROLLBACK؟ وهل سألت نفسك كيف يمكنك التراجع عن عمليات التعديل التى قمت بها فى
بعض الحقول؟ ،رغم أنه تم تغير القيم القديمة الى القيم الجديدة .
السناريو بإختصار أنه عند إجراء عملية تعديلت على البيانات فى قاعدة البيانات فإن ال
Oracle Serverيقوم يتخزين القيم القديمة فى ال Undo Tablespaceقبل ان يتم تغييرها بالقيم
الجديدة ،هذا السناريو يتيح لنا فرصة التراجع عن العمليات متى احتجنا إلى ذلك بشرط أن تكون القيم
القديمة ما زالت موجودة فى ال Undo Tablespaceإذ ل يتصور أن تظل هذه القيم موجودة إلى
172
مالنهاية فهو فى اخر المر Tablespaceله سعة محدودة وكذلك له فترة احتفاظ بالمعلومات محدودة
يقوم بتهيئتها مدير قاعدة البيانات حسب ما يراه مناسبا ،نستطيع كذلك من خلل هذا السناريو ان ننجز
عملية ال Flashback Queriesإذا توفرت القيم القديمة سنتحدث عن ال Flashback Queriesفى
هذا الفصل ولكن عموما هو عبارة عن استعلم عن قيم لكن فى الماضى عند زمن معين .
فى الصدارات السابقة كان يتم تخزين القيم التى تم تعديلها فى قاعدة البيانات فى Rollback
Segmentولكن بعد الصدار Oracle9iفصاعدا قدمت شركة اوركل خيار جديد هو Undo
Segmentمع إبقاء الخيار الول متاحا ،ولكن تنصح شركة اوركل بقوة استخدام ال Undo
.Segment
قد يكون فى قاعدة البيانات الواحدة اكثر من Undo Tablespaceلكن ل يمكن ان يعمل فى
اللحظة الواحدة اكثر من Undo Tablespaceويتم تحديد عمل ال Undo Tablespaceفى قاعدة
البيانات بواسطة المتغير .Undo_Tablespace
قاعدة البيانات اوركل Oracle Database10gتتيح خيار ادرة اليا لل Undo Tablespace
وهو Automatic Undo Managementويتم تهيئته بواسطة المتغير
UNDO_MANAGEMENTبحيث يأخذ القيمة ، AUTOأما خيار الدارة اليدوى Manual
Undo Magamenetفهو خيار مكلف ويحتاج لعمل اكثر من مدير قاعدة البيانات .
أما خيار الدارة Automatic Undo Managementفهو يقلل العبء من مدير قاعدة
البيانات بحيث تكون إدراته فقط على مستوى ال .Tablespace
مدير قاعدة البيانات ينتظره تهيئة المساحة المناسبة لل Undo Tablespaceوذلك حسب المعلومات
التى سيتم تخزينها ،كذلك لبد من تهيئة فترة الحتفاظ Undo Retentionللبيانات فى ال Undo
Segmentوذلك بواسطة المتغير UNDO_RETENTIONالذى يأخذ قيمة هى فترة الحتفاظ
بالثوانى .
الصل فى هذا المتغير هو أن يأخذ القيمة 0وهى تعنى Automaticاى يعنى محاولة الحتفاظ
بالمعومات حتى تنتهى ،على أن يتم الحتفاظ بالمعلومات على القل 15دقيقة ،لكن يمكن تحديد قيمة
اخرى هى فترة الحتفاظ بالثوانى واقصى قيمة هى .232
174
وعموما Undo informationاى المعلومات الموجودة فى ال Undo Segmentsتنقسم الى ثلث
حالت -:
:Uncommitted Undo Information -1وهى المعلومات التى لم يتم تثبيتها إلى الن وذلك لن
العمليات مازالت مستمرة ،هذا النوع من المعلومات ل يمكن حذفها واعادة الكتابة فيها .
:Committed Undo Information -2وهى ل نحتاجها لعمليات مستمرة ،ولكن لن فترة الحفاظ
لم تنتهى بعد " ،"Unexpiredهذا النوع من العمليات نحتفظ به قدر المكان ما لم يؤدى ذلك لفشل بعض
العمليات نتيجة عدم وجود مساحة فى ال Undo Tablespaceفى هذه الحالة يتم اعادة الكتابة فى هذه
المعلومات ،ولكن قد يقوم مدير قاعدة البيانات بتهيئة ال Undo Tablespaceبحيث نضمن عدم مسح
واعادة الكتابة فيها وذلك باستخدام الخيار .Guaranteeing Undo Retention
:Expired Undo Information -3وهى ل نحتاجها لعمليات مستمرة ،وكذلك فترة الحتفاظ بها
انتهت فيمكن اعادة الكتابة فيها متى ما احتجنا لمساحة فى ال .Undo tablespace
من المشاكل التى تحدث كثيرا والتى يجب لمدير قاعدة البيانات مراعاتها -:
-1مشكلة المساحة :Undo Tablespace Space Errorويجب على مدير قاعدة البيانات مراقبة
مساحة ال Undo Tablespaceفالعمليات التى ل تجد مساحة فى ال Undo Tablespaceتعطى رسالة
الخطأ.
ORA-01650: unable to extend rollback segment
:Snapshot too old” Error“ -2وهذا الخطأ يظهر عند تنفيذ استعلم يحتاج لمعلومات Undo
Informationقد تم مسحها واعادة الكتابة فيها ،لذا يجب على مدير قاعدة البيانات مراعاة فترة
175
Guaranteeing وكذلك المساحة المناسبة مع مراعاةUNDO_RETENTION الحتفاظ المناسبة
.Undo Retention
:Flashbach Technology -2
176
:C- Flashback Version Query
From Oracle10g & Do use Undo
177
Tablespaceمثلً بسبب طول المدة وإعادة كتابة بيانات جديدة فى البيانات المطلوبة لذا على مدير
قاعدة البيانات تحديد فترة احتفاظ Retentionمناسبة.
ولنتصور الن السناريو التالى حتى نستوعب عملية ال Flashback Queryبصورة اوضح:
لدينا الن جدول يسمى Employeeيحتوى على على مجموعة من الحقول.
178
بقى لدينا فقط 5حقول .
ماذا لو قمنا الن بعمل استعلم على الجدول ولكن فى فترة زمنية فى الماضى ولنفترض انها قبل 20
دقائق .
بالطبع سيبحث عن هذه المعلومات فى ال Undo segementsويقوم بعرضها ،أما إذا لم يجدها
فستظهر رسالة خطأ.
اى هذه المعلومات غير متوفرة حاليا فى ال .Undo Tablespace
179
هذه هى نتيجة الستعلم ،عرض 8حقول ،لكن ما هو متاح حاليا هو 5حقول فقط.
هكذا قمنا بعرض معلومات فى الماضى ،لكن ماذا لو أردنا أن نأتى بهذه المعلومات فى الحاضر أى
تظل هذه المعلومات موجودة فى الجدول ،يمكن أن ننشئ جدول جديد من المعلومات المستعرض ومن ثم
نقوم بحذف الجدول Employeeوإعادة تسمية الجدول الجديد الى .Employee1
180
ثم نقوم بإعادة تسمية للجدول EMPLOYEE1إلى .EMPLOYEE
فى الخطوات السابقة قمنا بعمل استعلم فى Sessionمعينة عن بيانات فى لحظة معينة فى
الماضى ،ولكن من الممكن كذلك أن نضع كل هذه الٍ Sessionفى لحظة معينة من الماضى ،بحيث
تكون نتيجة جميع الستعلمات لقاعدة البيانات من خلل هذه الٍ Sessionفى نقطة معينة من الماضى
يتم تحديدها اثناء عمل ال ، Flashbackولكن باقى الٍ Sessionsالتى تعمل على قاعدة البيانات ترى
قاعدة البيانات فى الوقت الحقيقى الن ؛ ما عدا هذه ال Sessionالتى ترى قاعدة البيانات فى لحظة
معينة من الماضى ،يتم ذلك من خلل الحزمة .DBMS_FLASHBACK
للرجوع بال Sessionالحالية للماضى يوما كاملً نقوم بتنفيذ الجراء PROCEDURE
PACKAGE ENABLE_AT_TIMEالموجود فى الحزمة DBMS_FLASHBACK
DECLARE
;QUERY_TIME TIMESTAMP
BEGIN
;(QUERY_TIME := TO_TIMESTAMP(SYSDATE -1
SYS.DBMS_FLASHBACK.ENABLE_AT_TIME ( QUERY_TIME
;(
;COMMIT
;END
/
181
هكذا خلل هذه ال Sessionجميع الستعلمات ترى قاعدة البيانات كما لو كنا بالمس.
لبد من الشارة إلى أنه من خلل هذا النمط ل يمكن إجراء عمليات ال DMLماعدا .SELECT
182
:B- Flashback Table
ويسمى ايضا Flashback Table Queryواستحدث هذا النوع فى الصدار Oracle10g
ويعتمد اساسا على ال ، Undo Tablespaceوهو الرجوع بالجدول الى فترة زمنية فى الماضى ويعتمد
اساسا الى الذهاب الى ال Undo Segmentsوارجاع الجدول الى لحظة معينة فى الماضى مستفيدا من
المعلومات الموجودة ، Undo Segmentsفقد تكون جرت على الجدول عدد من التعديلت سنجدها فى
ال ، Undo Tablespaceبالطبع قد تفشل عملية ال Flashback Tableإذا لم نجد المعلومات
المطلوبة فى ال Undo Tablespaceنتيجة لنتهاء فترة الحتفاظ بالمعلومات المطلوبة مثلً.
فلنستعرض كل الجدولين.
183
ونقوم بإضافة موظف جديد فى جدول الموظفين EMPبحيث ينتمى الموظف الجديد للدارة الجديدة.
184
.Flashback Table نحتاجة لعمل ال
، EMP_NO=3 إلى ما قبل حذف الحقلEMP للجدولFlashback Table الن لنقوم بعمل
Enable Row Movement وذلك لننا نحتاج لعملFlashback Table فشلت عملية السترجاع
. ليوضح للوركل عمليات التعديلData Dictionary يتم وضعه فى الFlag وهو عبار عن،
185
رسالة خطأ اخرى ،هل عرفت لماذا ؟ لنه قد تم إنتهاك القيد Foreign Key Constraintإذ ل يمكن
إعادة الموظف رقم 3الى الجدول EMPوهو ينتمى الى الدارة تم حذفها ‘ فهو يبتمى للدارة رقم 3قد
تم حذفها ،فما الحل إذا؟
لقد تمت عملية ال Flashback Tablesبنجاح وليس ضروريا أن نقوم بترتيب الجدول فى
عبارة ال Flashbackوذلك لن القيود Constraintيتم التأكد منها بعد نهاية العملية .Transaction
186
ملحظة :لو فشلت محاولة استرجاع جدول Flashback Tableفى اى عملية فإن العملية
تتوقف ومن ثم يتم التراجع ROLLBACKعن العملية كلها ،اى لو نجحت عملية استرجاع الجدول
DEPTفى العملية السابقة ولكن فشلت عملية استرجاع الجدول EMPفإن العملية برمتها ستفشل ويتم
التراجع عن العملية كلها.
كما ل حظت عملية ال Flashback Tableلسيت مضمونة النجاح ،فقد تفشل فى احد السبابا
التالية -:
-1إذا تم انتهاك احد القيود .Constraint Violated
-2إذا لم يتم عمل Enable Row Movementللجدول المطلوب استرجاعه.
-3إذا لم تتوفر المعلومات المطلوبة فى ال :Undo Tablespace ، ORA-08180
”no snapshot found based on specified time
-4ل يمكن عمل Flashback Tableلجدول فى .Sys Schema
187
SELECT SALARY,VERSIONS_XID AS
XID,VERSIONS_STARTSCN,VERSIONS_ENDSCN,VERSIONS_O
PERATION FROM SALARY VERSIONS BETWEEN SCN
;MINVALUE AND MAXVALUE WHERE EMP_NO=1
لحظ معى قيمة المرتب ابتداءً كانت 1000وكانت نتيجة عمل Insertكما هو موضح
بالحرف ، Iبعد ذلك تم تعديلها الى القيمة 1500نتيجة عمل Updateكما هو موضح بالحرف ،U
وايضا تم تعديله مرة اخرى الى القيمة 2000بواسطة المر Updateكما هو موضح بالحرف .U
لقد قمنا فى المثال السابق بعرض المعلومات مستخدمين ال ، SCNكما يمكن إستخدام ال
. Timestamp
.
188
:D- Flashback Transaction
Undo Data يتم استخدام الFlashback Table and Flashback versions فى كل من
Undo Data For فإنه يقوم بإسترجاع جميع الFlashback Transaction أما ال، للكائنات
، اى على مستوى العمليات مهما كانت العمليات مرتبطة بعدد من الكائناتtransaction
: التالىView نستخدم الFlashback Transaction للستعلم عن ال
.FLASHBACK_TRANSACTION_QUERY
DESC FLASHBACK_TRANSACTION_QUERY;
189
ولن البيانات الموجودة فى هذا ال Viewحساسة جدا لذلك فإن هذا ال Viewمحمى بواسطة
الصلحية .SELECT ANY TRANSACTION PRIVILEGE
ولن استعلم جميع العمليات على قاعدة البيانات يأتى بعدد كبير جدا من المعلومات ،فمن
الفضل التركيز فى الستعلم بواسطة الشروط ،فلو أنى مثلً أريد استعراض العمليات التى تمت على
جدول معين فمن الفضل تحديد الشرط ‘WHERE TABLE_NAME=’TABLE_NAME
ولنفترض الن أنى اريد عمل استعلم عن العمليات التى حدثت على الجدول .SALARY
190
SELECT SALARY,VERSIONS_XID AS
XID,VERSIONS_STARTSCN,VERSIONS_ENDSCN,VERSIONS_O
PERATION FROM SALARY VERSIONS BETWEEN SCN
MINVALUE AND MAXVALUE WHERE EMP_NO=1;
191
هكذا استخدمنا .FLASHBACK_VERSIONS AND FLASHBACK_TRANSACTION
بكل بساطة سلة المهملت RECYCLE BINفى قاعدة البيانات اوركل تشبه الى حد كبير
سلة المهلت فى نظام التشغيل ويندوز .WINDOWS
لحظت معى كيف أنه رغم أننا قمنا بحذف الجدول USER_MASTERإل أن ما زال موجودا فى
سلة المهملت ويمكننا كذلك استرجاعه .
لقد قمنا بإسترجاع الجدول من سلة المحذوفات لكن قد تفشل عملية السترجاع إذا قمنا بإنشاء جدول بنفس
193
السم قبل عملية السترجاع لذلك يمكن اعادة تسميته لتفادى عملية تضارب السماء.
194
ل يوجد الن الجدول MASTERفى سلة المهملت .
كذلك يمكن حذف الجدول عن طريق المستخدم دون وضع الجدول فى سلة المهملت وانما حذفه مباشرة
من قاعدة البيانات بواسطة المر DROP TABLE <TABLE_NAME> PURGE
إذا من الحالت التى يتم فيها حذف الجداول من قاعدة البيانات دون المرور بسلة المهملت -:
-1استخدام المر .DROP TABLE <TABLE_NAME> PURGE
-2لحظة حذف ال TABLESPACEالذى يحوى الجداول بواسطة المر
.DROP TABLESPACE <TABLESPACE_NAME> INCLUDING CONTENTS
-3عند حذف المستخدم الذى يحوى الجداول بواسطة المر
.DROP USER <USER_NAME> CASCADE
ال Flashback Databaseهى إرجاع قاعدة البيانات الى نقطة زمنية معينة فى الماضى ،
بحيث جميع التعديلت التى حدثت فى قاعدة البيانات من تلك النقطة الى الن كأن لم تكن.
نستفيد من ال Flashback Databaseفى حالة حدوث اخطاء منطقية ،كأن يحذف مدير قاعدة
البيانات مستخدم عن طريق الخطأ أو عمل ، Truncate Tableأما الخطاء الفيزيائية كأن نفقد Data
195
Fileاو غيره من الملفات فل نستطيع الستفادة من ال Flashback Databaseوكل ما نستطيعه هو
عمل استرجاع للملفات من النسخ الحتياطى بالطريقة التقلدية.
عملية ال Flashback Databaseهى عملية سريعة جدا للرجوع بقاعدة البيانات لفترة زمنية
فى الماضى مقارنة بعملية السترجاع من ملفات النسخ الحتياطى بالطريقة التقلدية وذلك لننا ل نحتاج
ارجاع ملفات النسخ الحتياطى لقاعدة البيانات.
هذا السناريو يشبه الى حد كبير سناريو ال Redo Log Bufferوال Redo Log Filesولكن
الختلف فى أنه ليس كل التعديلت تكتب فى ال Flashback Bufferكما يحدث فى ال Redo Log
Bufferوإنما ، Complete Block Imagesكذلك ال Flashback Logesل تتم ارشفته كما يحدث
لل .Redo Log Files
196
لتهيئة ال Flashback Databaseنتبع الخطوات التية-:
-1التأكد من أن قاعدة البيانات تعمل فى النمط .Archive Log Mode
تحدثنا فى فصول سابقة على أن قاعدة البيانات تعمل على القل على اثنين من Redo Log
Filesوهى ملفات تحوى على التعديلت التى تمت فى قاعدة البيانات .
وأن Background Process LGWRيقوم بكتابة التعديلت الموجودة فى ال Redo Log
Bufferويضعها فى ال ، Redo Log Filesوتكون عملية الكتابة بشكل دورى بين ال Redo Log
ويتم إعادة الكتابة فى ال ، Redo Logsمما يؤدى لفقدان البيانات الموجودة فيه لذا كان الحل هو تشغيل
قاعدة البيانات فى النمط Archive Log Modeبحيث يتم إنشاء Background Processجديد يسمى
ARCnبحيث يقوم بعمل نسخ لملفات ال Redo Log Filesبحيث ل نفقد البيانات الموجودة فى هذه
الملفات والتى نعتمد عليها فى عملية السترجاع Recovery؛ والتى بدونها تفشل عملية ال
.Recovery
197
كما ذكرت سابقا يمكن تحديد اتجاهات اخرى للرشيف ،كما يمكن تهيئة متغيرات اخرى لكنها غير
ل LOG_ARCHIVE_FORMATهذا المتغير لتحديد الفورمات التى يخرج بها ملف
ضرورية مث ً
الرشيف ،فى الصل يأخذ القيمة .
حيث-:
-Bنغلق قاعدة البيانات ونفتحها فى الوضع ، Mountثم ننفذ المر ALTER DATABASE
.ARCHIVELOG
198
ALTER DATABASE ARCHIVELOG;
. للرشيفREDO LOG FILE يتم عمل نسخ لملف الSWITCH LOGFILE لحظة عمل
199
كما يمكن الستعلم عن ملفات الرشيف
201
ALTER DATABASE FLASHBACK ON;
202
لمعرفة كيفية استخدام ال Flashback Databaseنتابع معا هذا السناريو:
-1مدير قاعدة البيانات قام بحذف المستخدم TESTعن طريق الخطأ.
203
-2اغلق قاعدة البيانات وفتحها فى الوضع Mountومن ثم عمل Flashback Databaseللزمن
54-55-08:12-06_17وهو الوقت ما قبل حذف المستخدم .TEST
أما إذا لم نكن نعرف مثلً وقت حذف المستخدم المستخدم TESTفليس عندنا حل سواء التخمين
ومن ثم فتح قاعدة البيانات فى الوضع Read Onlyوالتأكد من جدوى السترجاع وقد نلجأ لغلق
204
قاعدة البيانات وفتحها مرة اخرى ومن ثم إعادة ال Flashback Databaseلوقت اخر ،ولن نفتح
قاعدة البيانات مباشرة فى الوضع Resetlogsلن الخيار Restlogsيقوم بإعادة تهيئة ال Log
Sequence Numberويبدأ بأخذ القيمة ( )001من جديد.
205