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وهى عبارة عن جزء من الذاكرة يتم تخصيصه
لعمل قاعدة البيانات اوركل وهى تتكون من جزئيين -:
9
أى يمكن تغيير مقاسها دون إغلق قاعدة البيانات وهى تتكون منDynamic ذاكرة
-: قسمين
Mandatory Memory -1
Optional Memory -2
Mandatory Memory :
ويتم التحكم فى مقاس هذه الذاكرة بواسطة المتغير:Shared Pool -1
: وتحتوى على جزئين، SHARED_POOL_SIZE
Library Cache -1
Data Dictionary Cache -2
ويتم التحكم فى مقاس هذا الجزء من: Database Buffer Cache -2
. DB_CACHE_SIZE الذاكرة بواسطة المتغير
ALTER SYSTEM SET DB_CACHE_SIZE = 96M;
Optional Memory :
Large Pool -1
Java Pool -2
Streams Pool -3
10
Shared Pool SHAREAD_POOL_SIZE Library cache Oracle need to allocate
Shared SQL Areas* & deallocate memory
Oracle 6 thru 10g Private SQL Areas* as SQL or Procedural
PL/SQL Procedures* Code is executed based
and Packages on the individual needs
Various Control* of users sessions and in
Structure accordance to the LRU
algorithm
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 LRU List * requested by SQL and
DB_8K_CACHE_SIZE 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
Oracle XA * allocations
I/O Server Processes
Form Oracle 8i Backup & Restore
Java Pool JAVA_POOL_SIZE Run stats* Memory available for
Methods* the java memory
From Oracle 8i Classes* manager to use for all
Session code* things Java
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
13
:Mandatory Processes 1.1.2.1
-: وهى، Processes ول يمكن لقاعدة البيانات العمل دون هذه ال
14
وأقصى عدد لهذا ال Processفى قاعدة البيانات هو ، 1ويقوم بعمل
السترجاع ) (Recoveryإذا حصل مشكلة فى ال ، Instanceواذا كنا نعمل على
البيئة ) RAC) Real Application Clustersوهى عمل اكثر من Instanceفى قاعدة
البيانات الواحدة فإن ال SMONفى ال Instanceالسليمة يستطيع عمل Recovery
لل Instanceالخرى التى حدث فيها مشكلة .
15
لحظة حدوث ال Log Switchوسنتحدث عنه لحقا ً . -3
لحظة إغلق قاعدة البيانات . -4
لحظة وصول ال Blockللقيمة المحددة . -5
لحظة إمتلء ال . Buffer -6
عند عمل التى -: -7
* Tablespace Offline
* Tablespace Read Only
* Table Drop or Truncate
* Tablespace Begin Backup
16
: (Recover (RECO -6
وأقصى عدد لهذا ال Processفى قاعدة البيانات هو ، 1وستخدم
هذا ال Processلمعالجة مشكلة العمليات الموزعة المعلقة نتيجة مشكلة فى
الشبكة او النظام ،فبعد فترة محددة يقوم ال Processبمحاولة التصال عن بعد
ومحاولة اكمال العملية أو التراجع عنها .
17
.(Parallel Execution slaves (Pnnn-11
. (Trace Writer (TRWR -12
. DMON -13
. (Dispatcher (Dnnn -14
. MMON -15
. (Wakeup Monitor Process (WMON -16
. (Memory Monitor Light (MMON -17
. RBAL -18
. ARBx -19
. ASMB -20
. (Change Tracking Writer (CTWR -21
. (Job Queue Monitoring (CJQn -22
18
وهو عبارة عن نسخة من ال Redo log filesونحتاجه أيضا ً عند عمل
إسترجاع لقاعدة البيانات ). (Recover
-5الملفات الخرى-:
* Parameter fileويستخدم لعمل تهيئة لل Oracle Instance
لحظة تشغيلها
* Password fileويسمح هذا الملف للمستخدمين التصال
بقاعدة البيانات عن
بعد كمدراء لقاعدة البيانات ،وليس لتخزين كلمات السر للمستخدمين فى قاعدة
البيانات كما يتصور البعض .
-:Tablespace and Data File
وهنا لبد من الحديث إلى انه يمكن تقسيم قاعدة البيانات الى )& Physical
: (Logical
19
:Physicalحيث يمكن التعامل مع هذا النوع سواء كانت قاعدة البيانات مفتوحة
أو مغلقة بحيث يمكن التعامل مع هذا النوع عن طريق نظام التشغيل أو عن طريق
قاعدة البيانات.
:Logicalول نستطيع التعامل مع هذا النوع إلى أذا كانت قاعدة البيانات
مفتوحة.
قاعدة البيانات فيزيائيا ً تتقسم إلى ملفات تخزينية يمكن أن تشاهد عن طريق نظام
التشغيل وهى ملفات ال ، Data filesوكذلك قاعدة البيانات تنقسم إلى وحدات
تخزين منطقية ) (Logicalوتسمى هذه الوحدات . Tablespace
20
ال 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
21
فانفترض أن هذا الشكل يمثل 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واحد .
قبل نهاية هذا الباب فلنتابع معا ً هذا السناريو وهو يوضح خطوات عمل قاعدة
البيانات :
22
ال Instanceتعمل على المخدم ).(Server -1
فى هذه المرحلة المستخدم يحاول التصال بقاعدة البيانات عن -2
طريق ال Applicationأو أحد أدوات قواعد البيانات.
فى هذه اللحظة تم التحقق من طلب المستخدم وتم إنشاء التصال -3
وتكوين .Server Process
23
هنا المستخدم طلب تعديل صف . -4
ال Server Processيستقبل هذا الطلب ويقوم بعمل اختبار لل Shared -5
Poolهل هذا الطلب موجود فى ال Shared SQL Areaإذا كان موجود يقوم
بالتأكد من أن للمستخدم صلحية الوصول لهذا البيانات ،اما إذا كان هذا
الطلب غير موجود يقوم بإنشاء Shared SQL Areaجديد .
فى هذه المرحلة يقوم ال Server Processبجلب البيانات المطلوبة -6
من ال Data fileمن الجدول أو من ال Data Blockالمخزنة فى ال . SGA
بعد جلب البيانات هنا يقوم ال Serverبتعديل الجدول فى ال . SGA -7
لحظة عمل Commitيقوم ال LGWRبكتابة العملية فى ال Redo Log -8
. File
يقوم ال DBWnبكتابة التعديلت فى ال Diskاى فى ال . Data File -9
ً
-10اخيرا يرسل ال Server Processيرسل رسالة بنجاح أو فشل العملية .
24
25
النقاط الرئيسية التى سنناقشها فى هذا الباب -:
• فهم الشروط الضرورية لنشاء قاعدة
البيانات .
• إنشاء قاعدة بيانات بالطريقة اليدوية .
• إنشاء قاعدة البيانات بالداة . DBCA
26
من أهم مهام مدير قاعدة البيانات هو التخطيط لقاعدة البيانات ،إذ ل
يتصور مديرا ً ناجحا ً لقاعدة البيانات ل يخطط بصورةٍ ما لقاعدة بياناته ،فما نوع
البيانات التى سوف نخزنها فى كل Tablespaceوكم Data fileفى كل Tablespace
وكيف سيتم تخزين ملفات قاعدة البيانات فيزيائيا ً على الديسك ،وكيف سيتم
عمل نسخ احتياطى لقاعدة البيانات ،وكيف نحافظ على قاعدة البيانات ،وكيف
نستطيع رفع الداءة فى قاعدة البيانات وغيرها من السئلة التى يجب ان تجد لها
جوابا ً .
بعد ذلك يجب أن نحدد ما نحتاجه من الذاكرة والديسك المناسب حسب
متطلبات قاعدة البيانات وعموما يجب وضع هذه العتبارات عند إنشاء قاعدة
البيانات .
فى الحقيقة يمكن إنشاء قاعدة البيانات أثناء إنزال الوركل عن طريق ال
(OUI (Oracle Universal Installerوذلك بواسطة الداة DBCAولكن قد نحتاج
لنشاء قاعدة بيانات أخرى .،
27
مساحة الذاكرة SGAفهذه الذاكرة مطلوبة لعمل ال Instanceوهى -3
ل تقبل المشاركة بين أكثر من Instanceأى لكل Instanceذاكرة SGAخاصة
بها .
كذلك ال Block_Sizeالذى يعتمد عليه ال . Row_Size -4
هل يمكن إغلق قاعدة البيانات لعمل النسخ الحتياطى . -5
قبل البدء يجب الشارة إلى أننا سنستخدم نظام التشغيل . windows
D:\ORACLE\PRODUCT\10.2.0>SET ORACLE_SID=OBAY
28
ل. Services
يمكن التحقق من النشاء عن طريق نظام التشغيل بالذهاب الى ا ٍ
D:\ORACLE\PRODUCT\10.2.0\db_1\database\copy
init.ora INITobay.ora
اما إذا كنا نعمل على نظام التشغيل لينكس ) (UNUXفإن المسار سيكون :
$ORACLE_HOME/DB
نتابع الخطوات السابقة :
بالطبع نحتاج لتعديل ملف المتغيرات حسب المعطيات الجديدة ،على سبيل المثال
-:
29
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'
30
الن نقوم بإنشاء قاعدة البيانات-5
31
كما ذكرت سابقا ً أنت تستطيع إنشاء قاعدة البيانات حسب متطلباتك
الخاصة وليست فقط كما هو مذكور فى النموزج أعله ,لكن لبد من إنشاء )
. ( 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
32
ولكن يجب تشغيل الملف على المستخدم . SYS
D:\ORACLE\PRODUCT\10.1.0\DB_1\RDBMS\ADMIN\CATPROC
.SQL
33
حذف قاعدة البيانات . -3
إنشاء قوالب لقاعدة البيانات ). (Templates -4
هنا الخيارات المتاحة للمستخدم ،سنختار بالطبع الخيار الول إنشاء قاعدة
بيانات .
إذا اخترت الخيار الثانى سيعرض لى قواعد البيانات الموجودة عندى ومن ثم اختار
قاعدة البيانات المراد إعادة تهيئتها ،وبعد ذلك سيعرض لى بعض الخيارات لعادة
تهيئتها .
34
الخيار الثالث بالطبع استطيع من خلله خذف قاعدة البيانات ،فقط ما على إل أن
اختار قاعدة البيانات المراد حزفها .
الخيار الخير هو إما لنشاء قالب جديد وهو القالب الذى ستكون عليه قاعدة
البيانات ) (Templateأو حذف قالب موجود .
فى هذه الخطوة نختار القالب ) (Templateالذى يتناسب مع مع متطلباتنا إذا لم
يوجد نستطيع إنشاء قالب بالخيار الرابع ). (Manage Template
ولنفترض أننا اخترنا القالب . General Purpose
35
نختار هنا اسم قاعدة البيانات واسم ال (Instance (SIDوليس بالضرورى أن يكون
نفس السم .
هنا بعض الخيارات كعمل نسخ احتياطى كل فترة معينة او تشغيل اليميل للرسال
والستقبال .
يمكن عمل كلمة سر واحدة لكل المستخدمين كما فى الخيار الول ويمكن تحديد
كلمة سر لكل مستخدم كما فى الخيار الثانى .
36
هنا نحدد طريقة تخزين الملفات ،وقد اخترنا الطريقة الولى وهى ادارة الملفات
عن طريق نظام التشغيل.
ً
الطريقة الثانى هى طريقة تخزين وإدارة الية ولها ميزات سنتعرف عليها لحقا .
نختار هنا مكان تخزين ملفات قاعدة البيانات .ولنفترض هنا الخيار الول وهو يعنى
التخزين حسب ما هو محدد فى القالب الذى اخترناه والذى كان General
. Purpose
37
يمكن فى هذه الخطوة أن نحدد Flash Recovery Areaوهى مكان لتخزين وإدارة
عمليات النسخ الحتياطى والسترجاع وسنتحدث عنها لحقا ُ ,كما يمكن تشغيل
الرشيف كما سنعرف لحقا ً .
كما يمكن مشاهدة بعض المتغيرات والمعلومات عن قاعدة البيانات بالذهاب ال
. File Location Variables
38
فى هذه الشاشة يمكن أن نغير فى حجم الذاكرة ونحدد حجم ال Blockلقاعدة
البيانات وغيرها من المتغيرات الموجودة فى ملف المتغيرات .
39
نختار هنا الخيار الول لنشاء قاعدة البيانات ،كما يمكن حفظ خطوات انشاء
قاعدة البيانات كقالب وذلك باختيار الخيار الثانى .
عند الضغط على الخيار Finishتظهر الصفحة التالية -:
40
وهى عبار عن تفاصيل ومعلومات عن قاعدة البينات التى نريد إنشاءها بالطبع
يمكن حفظها بالضغط على الخيار حفظ .
41
42
فى الباب السابق قمنا بإنشاء قاعدة البيانات وسنناقش فى هذا الفصل
كيفية التحكم فى قاعدة البيانات ،وهو امر مهم لمدير قاعدة البيانات .
تخيل أنك مدير لقاعدة بيانات عملقة ،يتتطلب منك المرأن تكون هذه
القاعدة متاحة للجميع حتى زمن محدد بعد هذا الوقت تكون متاحة لعدد معين
للمستخدمين ،هذا العدد من المستخدمين بعد زمن اخر يستطيع فقط القراءة أى
ل يستطيع الكتابة والتعديل ول المسح .
ً ً
هل تخيلت معى العمل الذى ينتظرك ؛ بالطبع عمل ً كبيرا لكن ليس صعبا إذا
عرفت ماذا تريد أن تفعل بالضبط .
والن اول ما يجب أن تعرفه أنك تستطيع أن تتحكم فى قاعدة البيانات إذا كانت
تعمل فى نظام التشغيل ويندوز عن طريق ال Servicesوهناك عدة خيارات أول ً
43
STOPليقاف العمل وكذلك STARTللتشغيل وايضا ً RESTARTلعادة التشغيل
وكذلك هنا خيارات اخرى مثل ً )& .Manual Disabled & (Automatic
ً
:Automaticوالمعنى أنه لحظة تشغيل نظام التشغيل تعمل ال Servicesاليا إذا
كانت فى الخيار .START
:Manualوهى أن تقوم بعمل تشغيل يدوى لل Servicesبعد تشغيل نظام التشغيل.
:Disabledوالمعنى إيقاف عمل ال Servicesمهما كان حالتها.
44
التاثير فى
قاعدة البيانات لبد من إغلقها وفتحها من
جديد .
وهذا نموزج لملف : PFILE
وقد ل نحتاج لعادة تشغي قاعدة البيانات حتى تحدث التأثيرات وذلك حسب
العامل . SCOPE
45
وقد يأخذ العامل SCOPEاحدى ثلث قيم -:
:MEMORY -1وهى تعنى أن التغييرات تحدث فقط فى ال
Instanceالتى تعمل الن فأول إعاد ة تشغيل لقاعدة البيانات نفقد
التغييرات.
:SPFILE -2التغييرات هنا تحدث فى الملف ويحدث التاثير عند
إعادة تشغيل قاعدة البيانات.
:BOTH -3التغييرات هنا تحدث فى ال Instanceالحالية كما تحدث
أيضا فى الملف SPFILEاى أن التغييرات تظل باقية عند إعادة
تشغيل قاعدة البيانات.
والصل ان التغيرات تحدث فى كل من ال Instanceالحالية وال SPFILEاى )
(BOTHولكن يعتمد التغيير ايضا ً على المتغير فبعض المتغيرات ل يمكن تعديلها إل
بوسطة الخيار ، SPIFLEاى ل يمكن تغييرها إل بعد إغلق قاعدة البيانات.
لتشغيل قاعدة البيانات يلزمك تحديد الحالة التى تريد أن تعمل بها قاعدة
بياناتك -:
.NOMOUNT -1
.MOUNT -2
.OPEN -3
46
S
:NOMOUNT
نشغل ال Instanceفى هذه الحالة إذا أردنا أن نقوم بإنشاء قاعدة بيانات أو
لعادة إنشاء ملف ال ، Control Filesوعند تشغيل ال Instanceفى هذه الحالة
تحدث الخطوات التالية -:
-1قراءة ملف المتغيرات وذلك حسب الترتيب التالى -:
* اول ً .spfileSID.ora
* اذا لم يجده بيحث عن .spfile.ora
* إذا لم يجده يبحث عن .initSID.ora
- 2تكوين ال .SGA
- 3تشغيل ال .background processes
- 4فتح ملف ال alertSID.logوملف ال . trace files
STARTU
:MOUNT
47
تشغل ال Instanceفى هذه الحالة عند إجراء بعض العمليات على
قاعدة البيانات كتغيير اسم ال Data filesأو انجاز استرجاع كلى لقاعدة البيانات
او تشغيل قاعدة البيانات فى ب عض الوضاع كوضع الرشيف مثل ُ ،وعند تشغيل
ال Instanceفى هذه الحالة تحدث الخطوات التالية -:
الوصول الى ملف ال Control filesوفتحه بعدما تم تحديده بواسطة -1
ملف المتغيرات .
قراءة ملف ال Control filesلتحديد ملفات ال Data Filesومعرفة -2
حالتها وكذلك لتحديد ملفات ال . Redo log Files
:OPEN
هذا هو الوضع الصلى عند تشغيل قاعدة البيانات بحيث تكون ال Instance
مفتوحة وقاعدة البيانات متاحة بحيث يستطيع المستخدمين التصال بقاعدة
البيانات وتنفيذ عملياتهم .
واثناء التشغيل فى هذه الحالة تحدث الخطوات التالية -:
فتح ملفات ال .Online Data Files -1
فتح ملفات ال .Online Redo Log Files -2
أو
48
هكذا تكون قاعدة البيانات متاحة للمستخدمين ،وإذا كانت قاعدة البيانات
مفتوحة مثل ً فى الوضع NOMOUNT OR MOUNTوأردت أن تفتحها فى الوضع
OPENيلزمك استخدام المر .ALTER
49
.NORMAL -1
.TRANSACTIONAL -2
.IMMEDIATE -3
.ABORT -4
:NORMAL -1
وهو الوضع الصلى لغلق قاعدة البيانات واثناء الغلق تحدث الخطوات
التالية -:
• ل يسمح بإتصال مستخدم جديد بقاعدة البيانات .
• Oracle Serverينتظر كل المستخدمين من انهاء
اتصالهم قبل اكمال إغلق قاعدة البيانات.
• كل البيانات الموجود فى ال Bufferيجب أن تكتب فى
الديسك.
• إنهاء ال Background Processesوكذلك إالغاء ال
SGAمن الذاكرة.
• إغلق قاعدة البيانات.
يتم إغلق ملفات قاعدة البيانات •
قبل أغلق ال .Instance
• ل تحتاج لعملية إسترجاع لل Instanceعند فتح قاعدة
البيانات من جديد.
50
: TRANSACTIONAL -2
فى هذا الوضع من الغلق تحدث الخطوات التالية -:
• كل المستخدمين ل يستطيعون بدء عمليات جديدة .
• عند إنتهاء المستخدم من العملية ) (Transactionالحالية
يتم قطع إتصاله بقاعدة البيانات.
• لحظة إنتهاء كل العمليات ) (Transactionsفى قاعدة
البيانات يتم إغلق قاعدة البيانات .
ل تحتاج لعملية إسترجاع لل Instanceعند فتح •
قاعدة البيانات من جديد.
:IMMEDIATE -3
فى هذا الوضع من الغلق تحدث الخطوات التالية -:
• العمليات الحالية فى قاعدة البيانات يتم قطعها مباشرةً
.
• Oracle Serverل ينتظر المستخدميين الحاليين فى
قاعدة البيانات حتى ينهوا إتصالهم.
• Oracle Serverيقوم بعمل تراجع للعمليات النشطة
حاليا ً فلى ال .Instance
• يتم إغلق ملفات قاعدة البيانات قبل أغلق ال
.Instance
• ل تحتاج لعملية إسترجاع لل Instanceعند فتح قاعدة
البيانات من جديد .
:ABORT -4
51
فى هذا الوضع من الغلق تحدث الخطوات التالية -:
• العمليات الحالية فى قاعدة البيانات يتم قطعها مباشرةً
.
• ل ينتظر المستخدميين الحاليين فى قاعدة البيانات
حتى ينهوا إتصالهم.
• البيانات الموجودة فى ال Bufferل تكتب فى الديسك.
• العمليات التى لم يتم تثبيتها ل يتم التراجع عنها .
• يتم إنهاء ال Instanceدون إغلق ملفات قاعدة البيانات.
• عند فتح قاعدة البيانات من جديد نحتاج لعمل إسترجاع
لل .Instance
يمكن فتح قاعدة البيانات فى الوضع Read Onlyوذلك لعدم اجراء أى تعديلت على
قاعدة اليبانات .
اثناء فتح قاعدة البيانات فى الوضع Read Onlyيمكن القيام ببعض المهام -:
تنفيذ إستعلم . -1
وضع ملفات ال Data Filesفى الوضع . and online offline -2
إنجاز إسترجاع لملفات .offline data file and tablespace -3
52
Opening a Database in Restricted Mode:
فى هذا الوضع يمنع دخول المستخدمين لقاعدة البيانات إل إذا كان
RESTRICTED SESSION PRIVILEGE. المستخدم يملك صلحية
فى الحقيقة هذا الوضع مفيد فى البعض الحيان مثل ً اثناء قيامك بعمل تصدير
Exportلقاعدة البيانات ول تريد من المستخدمين من الدخول لقاعدة البيانات .
او
الن يمكن إنهاء كل اتصالت المستخدمين الذين اتصلوا قبل تطبيق النمط
RESTRICTED SESSIONوذلك على خطوتين -:
53
تحديد ال SESSIONالتى نريد إلغاءها وذلك عن طريق الستعلم -1
التى :
54
55
تحدثنا سابقا ً ان التخزين فى قاعدة البيانات يكون على حالتين الول
التخزين المنطقى Logicalفى ال Tablespacesوالثانى Physicalفى ال Data
. Files
56
57
مفاهيم عامة عن ال :Tablespaces -1
58
الشكل اعله يوضح الخيارات المتاحة لل 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
:Yes -1المعنى لحظة تغير الكائنات فى ال Tablespacesفانه يتم
كتابة التغييرات فى ال .Redo Log Files
:NO -2المعنى لحظة تغير الكائنات فى ال Tablespacesفانه ل
يتم كتابة كل التغييرات فى ال .Redo Log Files
:Mode -3
59
: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
: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
60
:Small Tablespace -1وهو Tablespaceيحتوى على Data Fileواحد أو أكثر
عند إنشاء .Tablespace وهو الصل
:Big Tablespace -2وهو نوع جديد من ال Tablespaceصار متاح فى
، Oracle 10gبحيث تصل مساحته الى (Terabytes(TB 128 الصدار
واحد فقط . ويحتوى على ملف data File
:Temp -3
وهو Tablespaceيستخدم لتخزين الجداول والمراجع المؤقتة ،مثل عند
الترتيب .وقد يكون هناك أكثر من Temporary Tablespaceفى قاعدة البيانات
الواحدة ولكن يعمل واحد فى اللحظة على قاعدة البيانات .
61
:Undo -4
لتخزين الOracle Server من قبل الTablespace يستخدم هذا ال
Undo Information
المعلومات القديمة، هل فكرت كيف يمكن التراجع عن عملية تعديل لحقل معين،
.Tablespace يتم حفظها فى هذا ال
:عملى
: جديدTablespace انشاء-1
Locally Managed فإن الصل هوTablespace بما أننا لم نحدد نوع إدارة ال
.Tablespace
62
CREATE TABLESPACE TEST DATAFILE 'D:\TEST\TEST.DBF'
SIZE 10M EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
63
.Data Files فقط دون الTablespace الطريقة الولى مسح ال
موجود على نظام التشغيل ويمكن إستخدامه عندData File بهذه الطريقة يظل ال
. جديدTablespace إنشاء
64
.Read Only فى الوضعSystem Tablespace حاول أن تضع ال
65
:Tablespace لعادة تسمية ال8-
67
:Big Tablespace إنشاء-11
68
69
:Control File
او يمكن أن نسميه ملف التحكم وهو ملف ثنائى اى ل يمكن قراءته
إذ أنه ليس نصيا ً ،وبدونه ل تعمل قاعدة البيانات ،وييم قراءته فى الوضع ، Mount
إذا ً يمكن أن نفتح قاعدة البيانات فى الوضع Nomountحتى لو فقدنا ملف ال
. Control File
وبالطبع يكون تابع لقاعدة بيانات واحدة ،ويتم تحديثه فقط عن طريق ال
Oracle Serverاثناء عمل قاعدة البيانات فل يستطيع مدير قاعدة البيانات تحديثه .
إذا فقدنا ال Control Fileنحتاج لسترجاعه قبل فتح قاعدة البيانات من
جديد .
يتم إنشاؤه أثناء إنشاء قاعدة البيانات ،كما يمكن زيادة عدد ال Control File
بعد إنشاء قاعدة البيانات حتى نستطيع السترجاع إذا فقدنا احد ال . Control File
70
-4إسم ومكان ال Data Filesوال .Redo Log Files
-5ال Redo Logالحلى وكذلك رقمه المتسلسل .
-6ومعلومات عن النسخ الحتياطى .مثل ً معومات ال . RMANسناقش ذلك لحقا ً
.
-7ومعلومات عن الرشيف .
-8يحتوى على المعلومات التالية )MAXLOGFILES . MAXLOGMEMBERS.
.(MAXLOGHISTORY. MAXDATAFILES .MAXINSTANCES
-3عن طريق نظام التشغيل نقوم بعمل نسخ لحد ملفات ال Control Filesال
موجودة الن ونضعه ونسميه كما حددناه فى المتغير Control_Files
وهكذا قاعدة البيانات الن تعمل باربعة من ال Control Filesبدل ً من ثلثة .
لحظ أن العملية تتطلب إغلق لقاعدة البيانات ومن ثم عمل نسخ على نظام
التشغيل ومن ثم فتح قاعد البيانات من جديد .
72
الحالة الثانية )-: (init.ora
فى الحالة الولى قاعدة البيانات كانت تعمل على ملف المتغيرات )
(SPFILEوالن نفترض أن قاعدة البيانات تعمل على ملف المتغيرات )
-: (initobay.ora
-1قفل قاعدة البيانات .
73
وذلك عن طريق نظام التشغيل .
عند كتابة المر اعله سيفتح ملف المتغيرات ونعدل فى المتغير Control_Files
بحيث نكتب المسار الجديد واسم الملف الجديد ،ولنفترض أن اسمه
CONTROL05فى نفس المسار .
74
بالطبع يمكن التحقق من التعديل عن طريق المر .SHOW APRAMAETERS
هل فكرت يوما ً تغيير إسم قاعدة بياناتك ؛ لشك أنك فكرت فى هذا لكن
كيف الطريق إلى ذلك ،فى الحقيقة المر جد ُ يسير .فتغيير إسم قاعدة البيانات
يلزم تعديل ملفين اثنين هما ملف المتغيرات Parameter Fileوملف التحكم Control
. Fileواليك الخطوات -:
75
-2الن نقوم نقوم بتغيير إسم قاعدة البيانات على ملف التحكم ال . Control File
لكن المشكلة أن هذا الملف ليس نصيا ً حتى نستطيع تعديله ،فهو ملف ثنائى ،لذا
يمكن اللجوء لعمل نسخ احتياطى لهذا الملف ك . Trace File
نتيجة هذا النسخ الحتياطى Trace Fileعباره عن ملف نصى يحتوى على
كود يمكن ان يستعمل لنشاء Control Fileجديد ،كما يمكن التعديل فى هذا
الكود .بحيث نغير اسم قاعدة البيانات .يوجد هذا الملف فى المسار المعرف فى
المتغير . user_dump_dest
والن نجرى عملية النسخ الحتياطى .
76
ما يهمنا فى هذا الملف هو ما قمنا بتظليله ،والن نقوم بعمل نسخ لهذا
الجزء المظلل ونحفظه فى ملف جديد ولنفترض أن اسمه . Control.trc
بالطبع إذا قمنا بعمل نسخ احتياطى لل Control Fileبالطريقة اعله ثم بعد
ذلك قمنا بتغير تكوينات قاعدة البيانات مثل ً إضافة Tablespaceأو ، Data File
فيلزمنا تعديل ال Trace Fileبالتعديلت الجديدة فى حال استخدمناه لنشاء Control
.File
يكون شكل الملف Control.trcكالتى :
77
بعد إجراء هذه التعديلت يلزمنا الحفظ .
78
-7الن نقوم بإنشاء ال Control Fileباستخدام ال Trace Fileالذى قمنا بانشاءه
سابقا ً .
79
:Redo Log Files
80
هذا الملف لتسجيل التغييرات التى تحصل على البيانات بحيث يتم تسجيل
التغييرات التى تم تثبيتها او ل ،نستفيد من هذا الملفات فى استرجاع قاعدة
البيانات فى حال حدوث فشل .بحيث تكون هناك بعض البيانات لم تكتب فى ال
Data Filesبينما كتبت فى هذا الملفات .
يكون هذا الملف فى شكل GROUPبحيث تعمل كل قاعدة البيانات على على
القل باثنين من ال . Groups
إذا ً يستخدم هذا الملف اساسا ً لعملية السترجاع فى حالة حدوث خطا ً إذ يحتوى
على التغييرات التى تحصل على البيانات .
لحظة ملئ ال Redo Log Fileفان ال LGWRيقوم بالتحول لل Redo Log File
الخرى فى عملية تعرف بال . Log Switch
81
إذا ً فال Oracle Serverيقوم بكتابة كل التغيرات على قاعدة البيانات فى ال Redo
. Log Bufferهذه المتغيرات تكتب من ال Bufferإلى ال Redo Log Fileعن طريق
ال LGWRفى الحالت التالية -:
-1لحظة نثبيت العمليات ).(Commit
-2لحظة إمتلء ال Bufferالى الثلث .
-3قبل عملية .DBWn
إذا ً عملية ال Log Switchتحدث اليا ًً دون تدخل من مدير قاعدة البيانات ،لكن قد
يحتاج مدير قاعدة البيانات احيانا ً لعمل هذه المهمة يدويا ً من خلل المر التالى -:
ايضا ً يمكن عمل Checkpointاليا ً عن طريق مدير قاعدة البيانات بالمر التالى -:
82
: Online Redo Log Files Group إضافة
، جديدOnline Redo Log Files Group فى بعض الحيان نحتاج لضافة
-: وذلك عن طريق المر التالى
83
-:Online Redo Log Groups حذف
تظل الملفات موجودة علىOracle عن طريق الGroup أيضا ً عند حذف ال
. مستوى نظام التشغيل
، Group فى الMembers وهى لحل مشكلة العطل الذى يحدث لكل ال
. Redo Log Files فهى ضمنا ً تعنى إعادة إنشاء لل
84
;ALTER DATABASE CLEAR LOGFILE GROUP 2
إذا كانت قاعدة البيانات تعمل فى الوضع Archive logفإن عملية ال
Clearingاعله ستفشل إذا كان ال Group 2لم تتم ارشفته ،عموما ً سنتحدث عن
موضوع الرشيف لحقا ً ولكن لحل
هذا الشكال يمكن تعديل المر السابق للتى -:
ولكن يجب قبل القيام بهذا المر بعمل نسخ إحتياطى كامل لقاعدة البيانات ) Full
. (Backup
85
:Redo Log File للستلم عن ال
86
87
سنتطرق قى هذا الفصل لكل من التى-:
88
وهذا الفصل من الهمية بمكان ،بحيث يعتبر من اهم اولويات مدير قاعدة
البيانات .
واول ما يمكن مناقشته هنا كيفية إنشاء مستخدم فى قاعدة البيانات .فمدير
قاعدة البيانات يجب مراعاة التى عند إنشاء المستخدمين -:
-1ان يكون اسم المستخدم فريدا ً فى قاعدة البيانات وأن ل يتعدى عدد حروفه
30حرفا ً ،وايضا ً ل يحتوى على مساحات ويبتدئ بحرف اى ليس رقما مثل ً .
-2وسيلة التحقق .سواء اكان ذلك عن طريق قاعدة البيانات او عن طريق نظام
التشغيل او غيره .
Default Tablespace -3وهو ال Tablespaceالذى يستخدم لنشاء وتخزين كائنات
المستخدم .
Temporary Tablespace -4وهو ال Tablespaceالذي يستخدم لنشاء الكائنات
المؤقتة للمستخدم .
-5ال Profileللمستخدم وهو لدارة الموارد وكلمة السر للمستخدم .
عند إنشاء مستخدم فى قاعدة اليبانات يتم خلق Schemaوهى مجموعة الكائنات
الممتلكة للمستخدم وتكون اسم ال Schemaبنفس اسم المستخدم .
ولنفترض اننا الن نريد إنشاء مستخدم . TEST
فى السناريو السابق قمنا بخلق مستخدم اسمه TESTوكلمة السر لهذا
المستخدم ايضا ً ، TESTهذه المستخدم ينشئ ويخزن الكائنات فى Users
، Tablespaceكما يخزن الكائنات المؤقتة فى . Temp Tablespaceهذا المستخدم
89
يجب عليه تغيير كلمة السر عند اول دخول كما نشاهد ادناه ،ايضا هذا المستخدم
ACCOUNTغير مغلق اى يمكن التصال بعد تغيير كلمة السر.
:QUOTA
وهى الحصة المتاحة للمستخدم لنشاء الكائنات فى ال Tablespacesوبدونها
يكون المستخدم عاجز عن إنشاء اى كائن .
لذا يمكن لمدير قاعدة البيانات منع المستخدم من إنشاء أى كائن عن طريق
منحه حصة Quotaتساوى صفر فى ال . Tablespace
كذلك يستطيع مدير قاعدة البيانات منح المستخدم حصة Quotaغير محدودة
فى ال Tablespaceعن طريق منحه . Unlimited
يمكن منح الحصة للمستخدم اثناء النشاء او بعد ذلك .
فلنفترض الن اننا نريد منح حصة تساوى صفر للمستخدم TESTفى Users
. Tablespace
90
ALTER USER TEST QUOTA UNLIMITED ON USERS;
. Unlimited Tablespace هناك خيار اخر وهو منح هذا المستخدم صلحية تسمى
.Tablespaces وهى صلحية تسمح لهذا المستخدم حصة غير محدودة فى ال
-: كما ذكرنا سابقا ً يمكن منح الحصة اثناء خلق إنشاء المستخدم كالتى
-: وسيلة التحقيق
91
وهى طريقة التحقق من المستخدمين للوصول لقاعدة البيانات ،فلحظة
إنشاء المستخدم لبد من اختيار وسيلة التحقق -:
92
بالطبع نحتاج لغلق قاعدة البيانات وفتحها من جديد .
93
الن المستخدم OBAYADMINISTRATORيستطيع التصال بقاعدة البيانات
مباشرة ودون التحقق من قاعدة البيانات فالتحقق يتم عن طريق نظام التشغيل.
الصلحيات ):(Privilege
كل المستخدمين الذين قمنا بخلقهم فى السناريوهات السابقة ل يستطيعون
التصال بقاعدة البيانات فضل ً عن القيام بأى مهام اخرى إذ ليس لديهم صلحيات
لذلك .
فى الخطوات السابقة قمنا بخلق المستخدم وحددنا له طريقة التحقق
ومنحناه الحصة المطلوبة وحددنا له ال Profileلدارة كلمة السر والموارد ،لكن
ينتظرنا الن أن نعطيه صلحيات للعمل فى قاعدة البيانات .ويكون منح الصلحيات
عن طريق مدير قاعدة البيانات او ممن يملك الصلحيات .
يجب مراعاة الكلمة ANYعند منح الصلحيات ،ولتوضيح هذا المعنى نلحظ الفرق
بين الصلحيتين :
:SELECT TABLEتسمح للمستخدم عمل SELECTعلى الجداول التى يملكها
المستخدم.
94
:SELECT ANY TABLEتسمح للمستخدم عمل استعلم SELECTعلى الجداول
التى يملكها المستخدمين الخرين.
هناك خيار عند منح الصلحيات System Privilegesللمستخدم وهو الخيار WITH
.ADMIN OPTION
هذا الخيار يعنى ان المستخدم بعد أن يملك الصلحية يستطيع منحها لغيره من
المستخدمين .
95
هذا المستخدم يستطيع معرفة ما يمكله من صلحيات System Privilegesعن
طريق الستعلم -:
للستعلم :
DBA_ROLES
USER_ROLE_PRIVS
DBA_ROLE_PRIVS
ROLE_ROLE_PRIVS
ROLE_SYS_PRIVS
ROLE_TAB_PRIVS
SESSION_PRIVS
المستخدم فى قاعدة البيانات له صلحيات بالطبع على الكائنات التى يملكها ،
يستطيع المستخدم ان يمنح صلحيات لمستخدم اخر للوصول للكائنات التى يملكها
،وكذلك مدير قاعدة البينات يستطيع منح صلحيات للمستخدمين للوصول لكائنات
يملكها مستخدم اخر .
96
ماذا لو اراد مدير قاعدة البيانات منح صلحية SELECTعلى الجدول EXAMPLE
الذى يمتلكه المستخدم TESTللمستخدم .TEST1
كذلك يمكن استخدام الخيار WITH GRANT OPTIONعند منح الصلحيات Objects
Privilegesإشارة إلى أن هذا المستخدم بعد ان يملك هذه الصلحية يمكن أن
يمنحها غيره من المستخدمين .
;SHOW USER
97
نحن الن نعمل على المستخدم .TEST
98
99
. EXAMPLE ل يملك صلحية الستعلم على الجدولTEST2 كذلك المستخدم
: ً مثل، يمكن منح الصلحية على مستوى العمود
-:ROLES
100
تخيل معى انك تعمل مدير لقاعدة بيانات بها اكثر من 100مستخدم ،هؤلء
المستخدمين على مستويات مختلفة من الصلحيات ،ولنفترض انهم على خمسة
مستويات .
ما العمل إذا ً ؟ هل تمنح كل مستخدم صلحياته بمفرده ؟ يلزمك إذا ً عمل ً
شاقا ً طويل ً .
الحل بكل بساطة هو فى ال .ROLES
يجب مراعاة أن إسم ال ROLEان يكون فريدا ً فى قاعدة البيانات بحيث يكون
السم لم يستعمل كمستخدم ول ك Rolesفى قاعدة البيانات.
بالطبع يمكن انشاء ROLEومنحها درجة من السرية عن طريق منحها كلمة سر
للتحقق .
;CREATE ROLE ROLENAME IDENTIFIED BY PASSWORD
101
;GRANT CONNECT,RESOURCE TO OBAY
;GRANT OBAY TO TEST
كذلك يمكن اجراء تعديلت على ال ROLESولنفترض مثل ً اننا نريد عمل كلمة سر
لل . OBAY ROLE
102
يمكن حذف ال ROLEعن طريق المر .
:PROFILES
وهو لإدارة كلمة السر وكذلك الموارد ،فبعد كم سيتم انهاء كلمة السر؟
وماهى عدد المحاولت الفاشلة قبل ان يتم اغلق حسابك ؟ وكم SESSIONيسمح
للمستخدم فتحها فى قاعدة البيانات؟ وغيره من السئلة التى يجب عنها ال
.PROFILE
وكما ذكرنا سابقا ً اى مستخدم فى قاعدة البيانات لبد أن يكون له
PROFILEإذا لم يتم تحديد ذلك عند النشاء فان ال ORCLE SERVERسوف يمنح
المستخدم PROFILEيسمى DEFAULTهذا ال PROFILEيتم خلقه مع إنشاء
قاعدة البيانات ول يمن حزفه من قاعدة البيانات .
بالطبع يمكن إنشاء وتعديل وحذف PROFILEمن قاعدة البيانات .
103
:PASSWORD_GRACE_TIMEلتحديد عدد اليام التى بعدها يتم اصدار تحذيرات
أنه بعد هذه الفترة سيتم إنهاء كلمة السر الحالية.
:PASSWORD_VERFY_FUNTIONلتحديد الدالة التى ترسم سياسة اختيار
كلمة السر.
104
اعلهPROFILE ماذا لو اردنا تعديل ال
105
اذا اردنا معرفة كل ال PROFILESالموجودة فى قاعدة البيانات
106
DROP PROFILE NEWPROFILE CASCADE;
107
108
فى الحقيقة هذا الفصل من الهمية بمكان ،فالحفاظ على بقاء واتاحة قاعدة
البيانات هو المر الهم لمدير قاعدة البيانات ،لذا كان لزاما ً على مدير قاعدة
البيانات تأمين قاعدة البيانات حتى ل تكون فى مهب الريح.
وحسب ملحظتى فإن هذا الجانب ل يحظى بالهتمام الكبر بالنسبة لمديرى قاعدة
البيانات بل يكون التركيز دائما ً على وضع استراتيجيات مناسبة للنسخ الحتياطى ،
رغم أن أننا نلجأ كثيرا ً لسترجاع النسخ الحتياطية نتيجة تقصيرنا فى جانب تأمين
قاعدة البيانات ،فلنرفع إذا ً شعار الوقاية خير من العلج ،ونبادر فى تأمين قاعدة
البيانات .
المر ليس معقدا ً لكن يعتمد على التخطيط ،خصوصا إذا كانت قاعدة البيانات
ضخمة وعدد المستخدمين كبير .
109
والحديث فى هذا الفصل يمكن ان يقسم الى قسمين رئيسيين -:
-1تأمين قاعدة البيانات :وهو حماية قاعدة البيانات من المخاطر الداخلية
والخارجية .
-2مراقبة قاعدة البيانات :فبعد المخاطر ناتجة عن سلوك بعض المستخدمين ،
لذا كان على مدير قاعدة البيانات مراقبة ما يراه مهما لمتابعة سلوك
المستخدين .
-1التأكد من تأمين الشبكة :اعرف أن المر ليس من مهامك ادرك هذا جديدا ً
لكن اجلس مع المسؤول من تأمين الشبكة وتأكد من إنتفاء جميع المخاطر ،لن
تجد هذه النقطة فى كتب اوركل ؛ بل هى تجربة شخصية وانا اعمل فى مؤسسة
مالية فى احد الدول العربية لول أن النسخ الحتياطى ) (Backupكان حاضرا ً ؛ لكنا
الن فى احد سجون المن القتصادى لهفوة قام بها المسؤول من تأمين الشبكة
استطاع من خللها احد القراصنة الدخول للمخدم وتعطيل قاعدة البيانات ،كنت
واثقا ً من عدم مسؤليتى من هذا الختراق لكن مشكلتنا فى كثير من الدول العربية
أننا لم نستطيع بعد استيعاب مفهوم التخصصية .
110
-2حماية ال :DATA DICTIONARYكل المعلومات التى نحتاجها عن قاعدة
البيانات موجودة فى ال DATA DICTIONARYلذا كان لزاما ً على مدير قاعدة
البيانات حمايتها .
وذلك بوضغ القيمة FALSEفى المتغير .O7_DICTIONARY_ACCESSIBILITY
111
-3الحد من الصلحيات الدارية من المستخدميين :ما الفائدة من منح كل
المستخدمين فى قاعدة البيانات ، DBA ROLEهذه ال ROLEتمنح لمدير قاعدة
البيانات وليس لكل المستخدين ،كذلك الصلحية SYSDBA & DROP AY TABLE
وغيرها من الصلحيات التى قد تسبب لك المشاكل ول حاجة لمنحها لكل
المستخدين .
112
-2مراقبة قاعدة البيانات MONITORING OR
-:((AUDITING
مراقبة قاعدة البيانات هو جزء من تأمين قاعدة البيانات ونستطيع من خلل
عملية المراقبة ايجاد كثير من الجابات لبعض المور التى ستظل غامضة لول
عملية المراقبة ،ويمكن تقسيم عملية المراقبة الى ثلث انواع -:
:Value-based auditing -2فى النوع الول تابعنا عمليات التصال وكذلك متابعة
العمليات داخل قاعدة البيانات ،ولكن قد نحتاج للحفاظ عل القيم التى يتم تغيرها
فى قاعدة البيانات .
ولكن قبل التفصيل فى انواع المراقبة لبد من الشارة أن قاعدة البيانات اوركل
10gلبد من تهيئتها قبل بدء فى عمليات المراقبة بواسطة المتغير AUDIT_TRAIL
الذى يأخذ أحد القيم التالية -:
:NONE -1وهى تعنى أن قاعدة البيانات غير جاهزة لعملية المراقبة .
:DB -2وهى تعنى ان معومات المراقبة يتم حفظها فى قاعدة البيانات فى جداول
تنتمى للمستخدم . SYS
:OS -3وهى تعنى أن معلومات المراقبة يتم حفظها على مستوى نظام التشغيل ،
فإذا كنا نعمل على بيئة ويندوز Widowsفان البيانات تحفظ فى ال ، Event Logاما
إذا كنا نعمل على UNIX or LINUXفإن المعلومات تخزن كملفات فى المسار
المحدد على المتغير . AUDIT_FILE_DEST
الصدار اوركل 10gيدعم مختلف انواع المراقبة ،بحيث يستطيع مدير قاعدة
البيانات مراقبة كل الحداث التى تحدث فى قاعدة البيانات ،تخيلت معى حجم
البيانات التى يتم تخزينها إذا قمنا بمراقبة كل ما يحدث فى قاعدة البيانات ل شك
أن ذلك سينعكس سلبا ً على أداء قاعدة البيانات لذا كان لزاما ً على مدير قاعدة
البيانات التركيز فى المراقبة بحيث يتم مراقبة ما نحتاجه دون الفراط فى
المراقبة .
فإذا أردنا مثل ً مراقبة بعض الجداول فالفضل التركيز على تحديد العمليات
التى يجب متابعتها مثل ً فقط الحذف ،اما اذا قمت بمتابعة كل ما يحدث للجداول
فإن ذلك سيؤثر على اداء قاعدة البيانات فسوف يتم متابعة الستعلم والتعديل
والمسح وغيره ،إذا التركيز امر مهم فى عملية المراقبة .
113
واول ما يلزمنا فعله هو تهيئة قاعدة البيانات بتغير قيمة المتغير AUDIT_TRAIL
من القيمة NONEالى احد القيم التالية ) (DB OR OSولنفترض هنا أننا نريد تخزين
معلومات المراقبة داخل قاعدة البيانات إذا ً نختار القيمة .DB
المتغير غير ّالى ،أى يحتاج إلى إغلق وفتح قاعدة البيانات حتى تتأثر قيمة
المتغير .
114
:Standard Database Auditing -1
كما ذكرنا سابقا ً هذا النوع من المراقبة يتركز على مراقبة عملية التصال
بقاعدة البيانات وكذلك متابعة إستخدام )( System Privileges and Object Privileges
.
كما يجب الذكر أن هناك خيارين أثناء عملية المراقبة )BY SESSION & BY
، ( ACCESS
:BY SESSIONوهى تعنى تخزين حقل واحد من المعلومات أثناء عمليات المراقبة
لنوع معين من العمليات لكل ، SESSIONولتضح الرؤية أكثر لنفترض أننا قمنا
بمراقبة عملية التعديل على جداول مستخدم معين ولنفترض أنه ، Xفقام احد
المستخدمين بفتح SESSIONواستخدم هذه ال SESSIONلتعديل 5جداول تنتمى
للمستخدم .Xفإن عملية المراقبة ستقوم بتخزين حقل واحد فقط لعملية التعديل
ما دام أنه قام بالتعديل بنفس ال ، SESSIONاى بمعنى اخر أنها توازى عبارة
.GROUP BY SESSION
:BY ACCESSيمكن اتخاذ نفس المثال السابق ،لكن هنا سيتم تخزين 5حقول
كل حقل هو عبارة عن عملية التعديل التى حدثت لكل جدول.
ل شك أن الخيار BY SESSIONقد ل يكون كافيا ً احيانا ً لمعرفة تفاصيل معلومات
المراقبة لذا قد نلجأ للخيار BY ACCESSالذى نجد فيه تفاصيل أكثر لكن بالطبع
يزيد عمليات تخزين المعلومات.
فى هذا النوع من المراقبة كما ذكرنا الفضل فيه عملية التركيز ويكون
التركيز بتحديد المستخدم كذلك بتحديد نجاح او فشل العملية )SUCCESSFUL OR
. (NOT SUCCESSFUL
115
وهى جزء من النوع الول من المراقبة ، Standard Database Auditingبحيث يتم
مراقبة عمليات التصال وقطع التصال بقاعدة البيانات ،ويمكن التركيز بتحديد
المستخدم الذى نريد مراقبة عملياتة اتصاله كما يمكن متابعة كل المستخدمين
بإستخدام المر AUDIT SESSIONكما يمكن التركيز ايضا ً بتحديد عملية نجاح أو
فشل عملية التصال .
نفترض أننا نريد مراقبة كل عمليات التصال الناجحة وقطع التصال بالنسبة
للمستخدم TESTولننا نريد معرفة وقت التصال وقطع التصال فالفضل استخدم
الخيار .BY ACCESS
AUDIT SESSION BY TEST BY ACCESS WHENEVER
;SUCCESSFUL
الن مدير قاعدة البيانات يستطيع أن يشاهد معلومات عن عملية التصال اعله
SELECT
SERNAME,TERMINAL,ACTION_NAME,EXTENDED_TIMESTAMP
;FROM DBA_AUDIT_SESSION
116
بالطبع ستظهر لمدير قاعدة البيانات معلومات اضافية
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
الن يظهر لمدير قاعدة البيانات الن المستخدم TESTقام بقطع التصال بقاعدة
البيانات فى الزمن المحدد اعله ،اى أنه ظل متصل بقاعدة البيانات حوالى 21
دقيقة .
يمكن ايضا ً استعلم معلومات التصال وقطع التصال بقاعدة البيانات بواسطة
الجدول . DBA_AUDIT_TRAIL
إذا ً معلومات التصال وقطع التصال بقاعدة البيانات متوفرة فى كل من )
(DBA_AUDIT_SESSION & DBA_AUDIT_TRAIL
يمكن لمدير قاعدة البيانات الستعلم عن خيارات المراقبة التى قام بتهيئتها فى
قاعدة البيانات بواسطة
DBA_OBJ_AUDIT_OPTS
DBA_STMT_AUDIT_OPTS
DBA_PRIV_AUDIT_OPTS
117
بالطبع يمكن إلغاء عملية المراقبة ،فلو أردنا إلغاء عملية مراقبة إتصال المستخدم
TESTالتى قمنا بمراقبتها سابقا ً.
الن لو قمنا بعملية استعلم لعرض خيارات المراقبة التى قمنا بتهيئتها فلن نجد
خيار مراقبة اتصال المستخدم .TEST
ولنفترض أننا نريد مراقبة عملية إنشاء الجداول بواسطة المستخدم TESTداخل
مساحته اى فى نفس ال .SCHEMA
SELECT USERNAME,OWNER,TO_CHAR(TIMESTAMP,'DD-MM-
YYYY:HH-MI-SS'),OBJ_NAME,ACTION_NAME FROM
;'DBA_AUDIT_TRAIL WHERE OWNER='TEST
119
يمكن إلغاء المراقبة بواسطة
120
وهى تعنى إنشاء جدول فىCREATE ANY TABLE اى مستخدما ً الصلحية
. أخرىSCHEMA
SELECT
USERNAME,OWNER,OBJ_NAME,ACTION_NAME,TO_CHAR(TIMEST
AMP,'DD-MM-YYYY:HH-MI-SS') FROM DBA_AUDIT_OBJECT
WHERE USERNAME='TEST';
121
نعم لقد قام المستخدم TESTبإنشاء جدول EMPLOYEEفى المستخدم
EMPفى الزمن المحدد اعله .
ً
بالطبع يمكن متابعة باقى الصلحيات مثل ((DROP ANY TABLEوغيرها
من الصلحيات .SYSTEM PRIVILEGES
122
وهذا النوع لمراقبة العمليات التى تحدث على الكائنات من جداول 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
123
للستعلم عن خيارات تهيئة مراقبة ال .OBJECT PRIVILEGES
لحظ أنه مقابل الحقل INSوجدت القيمة A/Aاى أنه تتم مراقبة عملية ال
INSERTبواسطة الخيار BY ACCESSسواء نجحت العملية أو فشلت ،اما إذا كان
الخيار WHENEVER SUCCESSFULفإن القيمة ستكون .-/A
هكذا نكون قد ناقشنا الخيارات المتاحة للمراقبة التى تنتمى للجزء الول Standard
Database Auditingوهى :
.SESSION AUDITING
SQL STATEMENT AUDITING
SYSTEM PRIVILEGE AUDITING
OBJECT PRIVILEGE AUDITING
124
:Value-Based Auditing -2
فى النوع الول من المراقبة Standard Database Auditingاستطعنا
مراقبة وحفظ معلومات عن العمليات التى تحدث فى قاعدة البيانات ،لكن قد
نحتاج احيانا ً لحفظ القيم التى يتم تعديلها او حذفها فى قاعدة البيانات ،هذه القيم
ل يتم حفظها فى ال . Standard Database Auditing
يعمل هذا النوع من المراقبة Value-Based Auditingمعتمدا ً على خلق
Triggerبحيث يتم تنفيذه بعد عملية التعديل أو المسح ليحفظ المعلومات والقيم
التى نريدها ويحفظها فى جدول نقوم بخلقه خصيصا ً لتخزين هذه المعلومات .
يلزم مدير قاعدة البيانات اول ً تحديد المعلومات التى يريد حفظها ولنفترض
أنها -:
IP Address -1للجهاز الذى استخدم للتصال بقاعدة البيانات .
-2اسم مستخدم نظام التشغيل الذ قام بالتصال بقاعدة البيانات .
-3التاريخ والزمن .
-4قيمة الحقل قبل التعدل وبعد التعديل .
ثانيًا :يلزم مدير قاعدة البيانات إنشاء الجدول لتخزين المعلومات عن عمليات
التعديل ,
126
هكذا تم إنشاء ال Triggerولنفترض الن أن المستخدم TESTقام بتعديل فى
الجدول .BOOK
يستطيع مدير قاعدة البيانات متابعة ذلك التعديل بواسطة الجدول
.BOOK_AUDIT
ليقاف هذ النوع من المراقبة يمكن تعطيل أو حذف هذا ال .Trigger
:(Fine-Grained Auditing (FGA -3
النواع السابقة من المراقبة تستطيع حفظ معلومات عن العمليات التى تحدث
فى قاعدة البيانات كما يمكن حفظ القيم التى تتغير ،أما هذا النوع من المراقبة
فهو لحفظ عبارات ال SQLالتى تنفذ فى قاعدة البيانات ويشمل كل من العبارات
التية (SELECT & INSERT & UPDATE & DELETE) :وذلك باستخدام
، DBMS_FGA PACKAGEهذه الحزمة تحتوى على اربعة من ال -: Procedure
SELECT OS_USER,TO_CHAR(UPDATE_DATE,'DD-MM-YY:HH-
;MI-SS'),IP_ADDRESS,OLD_NEW_NAME FROM BOOK_AUDIT
127
:ADD_POLICY -1لضافة POLICYجديدة لمراقبة عبارات ال SQLفى قاعدة
البيانات وذلك حسب القيم التى سنحددها فى الجراء .
:PROP_POLICY -2لحذف POLICY AUDITموجودة.
:ENABLE_POLICY -3لتشغيل POLICY AUDITكانت معطلة .
:DISABLE POLICY -4لتعطيل عمل .POLICY AUDIT
ولنفترض الن أننا نريد حفظ عبارات ال SELECTالتى تحدث للجدول BOOK
المملوك للمستخدم . TESTوحتى ل نحفظ كل عبارات ال SELECTالتى تحدث
للجدول BOOKفمن الممكن التركيز على بعض الحقول وذلك بإستخدام بعض
الشروط .
مثل ً .WHERE BOOK_NO=1
وذلك لتركيز عملية المراقبة .
مدير قاعدة البيانات دائما ً يجب ان يراعى أن ل يفرط فى عملية المراقبة ،بل
يركز دائما على المطلوب .
الن نقوم بتنفيذ الجراء ADD_POLICYوذلك لضافة AUDIT POLICYتقوم
بحفظ عبارات ال SELECTالتى تنفذ على الجدول BOOKوذلك حسب الشروط
التى نحددها .
128
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;
/
129
:OBJECT_NAMEوهو الكائن الذى نريد مراقبة عبارات ال SELECTعليه.
130
الن ماذا لو قام المستخدم EMPبعمل استعلم على الجدول BOOKالمنتمى
للمستخدم TESTبنفس الشروط المذكورة اعله ؟
131
.يستطيع مدير قاعدة البيانات الن متابعة هذا الستعلم
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;
SELECT
POLICY_NAME,OBJECT_SCHEMA,OBJECT_NAME,POLICY_COLUM
N,SEL FROM DBA_AUDIT_POLICIES;
132
.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;
/
133
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;
/
134
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 الن لو قمت بعمل إستعلم عن ال
فى قاعدة البيانات
135
136
-: Oracle Net Services -1
137
أن يكون لديك مخدم Server Databaseيحتوى على قاعدة البيانات يتصل به
جميع Client Applicationاو جميع الجهزة التى تحتوى على برامج تحتاج للتصال
بقاعدة البيانات هذا هو المر الطبيعى والمعتاد والذى تعمل به اغلب الشركات فى
العالم ،إذ ل يتصور أن تكون جميع الجهزة التى تحتوى على برامج تحتاج للتصال
بقاعدة البيانات تحتوى ايضا ً على قاعدة البيانات ،وإل فإننا نحتاج لقاعدة البيانات
لكل جهاز يحتوى عل برنامج وهذا غير مفبول عقل ً ول عم ً
ل.
وإذا سلمنا بأن يكون لدينا مخدم يحتوى على قاعدة البيانات Database
Serverتستطيع جميع الجهزة التى تحتوى على برامج تحتاج لقاعدة البيانات
التصال بهذا المخدم ،فإن محور حديثنا فى هذا الفصل سينصب على كيفية إنجاح
هذا التصال .
إذا ً المر سيكون على جانبين :الجانب الول وهو جانب المخدم Database
Serverوكيف يستطيع خدمة جميع الطلبات التى تصله للتصال بقاعدة البيانات .
اما الجانب الثانى وهو جانب ال Client Applicationوهو الجهاز الذى يريد
التصال بقاعدة البيانات ،وكيف يستطيع الوصول لقاعدة البيانات ؟
فى هذا الجانب يستطيع المخدم Database Serverخدمة طلبات التصال بقاعدة
البيانات بواسطة ال Oracle Net Listenerوهو المسؤول عن عملية معالجة طلبات
ال Clientsللتصال بقاعدة البيانات ،فبدون ال Listenerمحاولة عملية التصال
بقاعدة البيانات من خارج المخدم ستبوء بالفشل ،لكن عملية محاولة التصال
بقاعدة البيانات من داخل المخدم ل تحتاج لل Listenerإذ أنه متخصص لستقبال
الطلبات الخارجية .
يستطيع مدير قاعدة البيانات تحرير وتهيئة هذا الملف ليستقبل طلبات التصال
بقاعدة البيانات ،
138
هذا نموذج لملف ال Listenerبحيث يحتوى على One Listenerيسمى Listener
يعمل فى المخدم nbsويراقب ال Port 1521مستخدما ً ، TCP PROTOCOLهذا
المستمع يخدم INSTANCEتسمى .ORCL
بالطبع يستطيع مدير قاعدة البيانات إضافة مستمع LISTENERجديد ولنفترض أننا
نريد إضافة مستمع جديد يسمى LISTENER1يعمل فى نفس المخدم NBSيراقب
ال PORT 1521ويخدم نفس ال INSTANCEالتى تسمى ORCLمستخدما ً TCP
. PROTOCOL
139
لحظت التعديلت الجديدة فى الملف :وهى إضافة مستمع جديد يسمى
.LISTENER1
140
الوامر المعروضة ه المتاحة للتعامل مع ال .LISTENER
وهى اوامر لتشغيل وايقاف وعرض حالة المستمع وكذلك وضع كلمة سر وتغيرها
للمستمع كنوع من التحقق ،وكذلك إعادة تشغيل المستمع ليستوعب ما تم تحديثه
من تهيئة لملف ال LISTERNER.ORAوغيره من الوامر ،وبما أننا اضفنا مستمع
جديد اسميناه LISTENER1فالفضل أن نقوم بتشغيل هذا المستمع ،لكن يجب
التنبيه إلى أنه عند كتابة المر LISTENERفإنه يتم التعامل مع المستمع الصل اى
DEFAULTوالذى هنا هو LISTENERلذا إذا اردنا أن نتعامل مع المستمع غير
الصلى فامامنا احد خياران:
الول :تحيد إسم المستمع عند توجيه المر
الن قمنا بتشغيل المستمع الجديد الذى انشأناه وهو المستمع ، LISTENER1ولو
لم نكتب إسم المستمع بعد المر STARTلتم التعامل مع المستمع الصلى وهو
المستمع .LISTENER
141
الن LISTENER1هو ال .DEFAULT LISTENER
142
كما ذكرنا أن مستمع واحد يستطيع خدمة عدد من ال INSTANCESكما
يمكن ان يتشارك عدد من المستمعين LISTENERSفى خدمة INSTANCEواحدة
،كما يمكن ان يكون هناك عدد من ال INSTANCESفى الجهاز الواحد فيكون لكل
واحد منها مستع يخدمها .
143
فعندما يطلب البرنامج او ال Applicationالتصال بقاعدة البيانات من خلل
المستمع Listenerيحتاج لمعرفة المعلومات الموضحة اعله ليترجم ذلك فى عملية
إتصال ناجح ،أما كيف يعالج هذه المعلومات لتتم عملية التصال فهناك عدة
طرق -:
CONN SYSTEM/SYS@NBS:1521/OBAY
وهذا النوع هو اسهل طرق التصال من حيث أنه ل يحتاج لتهيئة فى ال .Client
144
هذا نموذج للملف . tnsnames.oraيستطيع هذا ال Clientالتصال بقواعد
البيانات مستخدما ً تهيئة هذا الملف .
ولنفترض أن المستخدم فى هذا ال Clientكتب العبارة التالية -:
CONN USERNAME/PASSWORD@AKSLPNT1
من الممكن القيام بعمل اختبار لل Oracle Net Service aliasesبواسطة المر
tnspingثم بعده نكتب السم المستعار . aliases
145
لقد تمت عملية الختبار بنجاح .
146
نحتاج الن ربط قاعدة البيانات OBAYمع قاعدة البيانات ، ORCL
ولنفترض أن المستخدم TESTفى قاعدة البيانات OBAYيحتاج لعمل استعلم
على الجدول EMPLOYEEالمملوك للمستخدم VBSالموجود فى قاعدة البيانات
، ORCLإذا ً نحتاج لعمل Database Linkبين المستخدم TESTفى قاعدة البيانات
OBAYوبين المستخدم VBSفى قاعدة البيانات .ORCL
او ً
ل :يتصل المستخدم TESTويتأكد أن لديه الصلحية CREATE DATABASE
.LINK
فى الخطوة السابقة تأكدنا اول ً أننا نعمل على قاعدة البيانات OBAY
وتأكدنا ثانيا ً أن المستخدم TESTيملك الصلحية .CREATE DATABASE LINK
147
ثانيا ً :يقوم المستخدم TESTبإختبار ال Oracle Net Service aliasesالموجودة فى
ملف ال tnsnames.oraوذلك للتأكد من سلمة التصال بقاعدة البيانات الخرى وهى
هنا . ORCL
148
فى بعد الحيان يكون اسم ال Database Linkمصحوبا ً بإسم الجدول طويل
فمن الفضل إنشاء مرادف synonymلتسهيل واختصار كتابة العبارات
خصوصا ً تلك التى يتكرر كتابتها.
تجدر الشارة هنا بأن نقول انك تستطيع من خلل ال Database Linkإجراء عمليات
ال DMLوهى ) ( SELECT & INSERT & UPDATE &DELETEلكن من المتعذر
اجراء عمليات ال DDLمثل .CREATE & ALTER & DROP
149
لكن هل يستطيع اى مستخدم اخر فى قاعدة البيانات OBAYاستخدام
TESTVBS DATABASE LINK؟ الجواب وبكل سهولة ل ،وذلك لن ال Database
Linkالتى قمنا بخلقها هى خاصة بالمستخدم TESTوليست لكل المستخدمين
وهى تسمى .PRIVATE DATABASE LINK
بالطبع لنشاء هذا النوع نحتاج للصلحية .CREATE PUBLIC DATABASE LINK
150
ALL_DB_LINKS
V$DBLINK
151
بالطبع نحتاج للصلحية DROP PUBLIC DATABASE LINKللحذف.
عند مناقشتنا لل Database Linkعرفنا كيف يمكن ربط قاعدة بيانات بأخرى
وكيف يمكن الوصول للكائنات فى قاعدة بيانات من قاعدة بيانات اخرى ،ولكن قد
تحتاج فى بعض الحيان لنقل وتحديث البيانات الموجودة فى قاعدة البيانات الى
قاعدة بيانات أخرى .
كأن تكون مثل ً مديرا ً لمجموعة صيدليات ؛ كل صيدلية تحتوى على قاعدة
بيانات ولكن على رأس كل ساعة تحتاج لجلب جميع حسابات الصيدليات من قواعد
البيانات الموزعة الى قاعدة البيانات الرئيسية ،هذه هى مهمة ال Materialized
Views؛ ولكن لل Materialized Viewsمهام اخرى ليست هنا مجال تفصيلها.
152
:REFRESH COMPLETE -2أما فى هذا النوع من التحديث يقوم بنقل جميع
بيانات الجدول من المصدر الى ال Materialized Viewsفيقوم بعمل إعادة كتابة
البيانات القديمة واضافة البيانات الجديدة .ف الغالب ان هذا النوع يتطلب زمن
اكثر من النوع .FAST
:REFRESH FORCE -3هذا النوع بيدأ اول بتطبيق النوع FASTإذا فشلت
العملية كأن لم يجد مثل ً ال Materialized Views Logsفى جانب المصدر .ففى هذه
الحالة يطبق النوع .COMPLETE
فلحظة كتابة المر اعله ؛ قاعدة البيانات تقوم بإنشاء جدول بالصيغة
<MLOG$_<TABLE_NAME
153
لحظة إنشاء ال Materialized Viewsبالخيار Primary Keyيجب أن يكون الجدول
المصدر يحتوى على .prmary Key Constraint
قد يكون فى الشرح السابق نوع من التعقيد لكن ل عليك ركز معى فى
السناريو الذى سننفذه معا ً خطوة خطوة ابتداًء من إنشاء المستخدمين وحتى عمل
ال Materialized Viewsوهذا هو بيت القصيد.
-2فى الجانب الخر نتأكد من الجدول المصدر وهو هنا EMPLOYEEوالتأكد كذلك
أنه يحتوى على PRIMARY KEY CONSTRAINTحتى نستطيع إنشاء
154
WITH فى قاعدة البيانات الخرى بإستخدام الخيارMATERIALIZED VIEWS
.PRIMARY KEY
155
الذى يحوى الجدول المصدرSUB وفى المستخدمORCL فى قاعدة البيانات-4
.MATERIALIZED VIEW LOG نقوم بإنشاءEMPLOYEE
156
قمنا بإنشاء ال MATERIALIZED VIEWمستخدمين الخيار FAST
REFRESHوذلك لننا قمنا بإنشاء ال MATERIALIZED VIEW LOGفى الجانب
الخر وإل ظهرت رسالة خطأ ،وكذلك استخدمنا الخيار WITH PRIMARY KEY
وذلك لن الجدول المصدر يحتوى على ، PRIMARY KEY CONSTRAINTعلى اى
حال هناك خيار اخر هو .WITH ROWID
157
;SELECT * FROM EMPLOYEE_MV
-7الن لو قمنا بإضافة حقل جديد فى الجدول المصدر ثم بعد ذلك أعدنا عمليات
الستعلم اعله.
158
ستنعكس الضافة فى الجدول المصدر EMPLOYEEعلى EMPLOYEE_MV
MATERIALIZED VIEWبعد ثانية واحدة من الضافة فى الجدول المصدر.
159
نستطيع أن نحصل على معلومات اخرى من نفس الجدول.
للستعلم عن ال JOBSبواسطة الجدول .DBA_JOBS
160
161
162
:UNDO MANAGEMENT -1
فى الفصل الثالث من هذا الكتاب تحدثت عرضا ً عن ال Undo Tablespace
وذكرت أنه يستخدم من قبل ال Oracle Serverلتخزين ال ، Undo Information
لكن هل فكرت يوما ً فى عملية ال ROLLBACK؟ وهل سألت نفسك كيف يمكنك
التراجع عن عمليات التعديل التى قمت بها فى بعض الحقول؟ ،رغم أنه تم تغير
القيم القديمة الى القيم الجديدة .
السناريو بإختصار أنه عند إجراء عملية تعديلت على البيانات فى قاعدة
البيانات فإن ال Oracle Serverيقوم يتخزين القيم القديمة فى ال Undo Tablespace
قبل ان يتم تغييرها بالقيم الجديدة ،هذا السناريو يتيح لنا فرصة التراجع عن
العمليات متى احتجنا إلى ذلك بشرط أن تكون القيم القديمة ما زالت موجودة فى
ال Undo Tablespaceإذ ل يتصور أن تظل هذه القيم موجودة إلى مالنهاية فهو فى
اخر المر Tablespaceله سعة محدودة وكذلك له فترة احتفاظ بالمعلومات محدودة
163
يقوم بتهيئتها مدير قاعدة البيانات حسب ما يراه مناسبا ً ،نستطيع كذلك من خلل
هذا السناريو ان ننجز عملية ال Flashback Queriesإذا توفرت القيم القديمة
سنتحدث عن ال Flashback Queriesفى هذا الفصل ولكن عموما ً هو عبارة عن
استعلم عن قيم لكن فى الماضى عند زمن معين .
فى الصدارات السابقة كان يتم تخزين القيم التى تم تعديلها فى قاعدة
البيانات فى Rollback Segmentولكن بعد الصدار Oracle9iفصاعدا ً قدمت شركة
اوركل خيار جديد هو Undo Segmentمع إبقاء الخيار الول متاحا ً ،ولكن تنصح
شركة اوركل بقوة استخدام ال .Undo Segment
164
الن قاعدة البيانات تحتوى على اثنين من ال Undo Tablespaceولكن يعمل
واحد فقط هو UNDOTBS1كما موضح اعله .
165
وعموما ً Undo informationاى المعلومات الموجودة فى ال Undo Segmentsتنقسم
الى ثلث حالت -:
:Uncommitted Undo Information -1وهى المعلومات التى لم يتم تثبيتها إلى الن
وذلك لن العمليات مازالت مستمرة ،هذا النوع من المعلومات ل يمكن حذفها
واعادة الكتابة فيها .
:Committed Undo Information -2وهى ل نحتاجها لعمليات مستمرة ،ولكن لن
فترة الحفاظ لم تنتهى بعد " ،"Unexpiredهذا النوع من العمليات نحتفظ به قدر
المكان ما لم يؤدى ذلك لفشل بعض العمليات نتيجة عدم وجود مساحة فى ال
Undo Tablespaceفى هذه الحالة يتم اعادة الكتابة فى هذه المعلومات ،ولكن قد
يقوم مدير قاعدة البيانات بتهيئة ال Undo Tablespaceبحيث نضمن عدم مسح
واعادة الكتابة فيها وذلك باستخدام الخيار .Guaranteeing Undo Retention
هكذا نضمن عدم مسح المعلومات التى لم تنتهى فترة احتفاظها حتى لو أدى ذلك
لفشل بعض العمليات لعدم وجود مساحة فى ال .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قد تم مسحها واعادة الكتابة فيها ،لذا يجب على مدير قاعدة
البيانات مراعاة فترة الحتفاظ المناسبة UNDO_RETENTIONوكذلك المساحة
المناسبة مع مراعاة .Guaranteeing Undo Retention
166
:Flashbach Technology -2
167
:E- Flashback Drop
From Oracle10g & Do Not use Undo
168
;SELECT * FROM EMPLOYEE
169
ماذا لو قمنا الن بعمل استعلم على الجدول ولكن فى فترة زمنية فى الماضى
ولنفترض انها قبل 20دقائق .
بالطبع سيبحث عن هذه المعلومات فى ال Undo segementsويقوم بعرضها ،أما
إذا لم يجدها فستظهر رسالة خطأ.
اى هذه المعلومات غير متوفرة حاليا ً فى ال .Undo Tablespace
هكذا قمنا بعرض معلومات فى الماضى ،لكن ماذا لو أردنا أن نأتى بهذه
المعلومات فى الحاضر أى تظل هذه المعلومات موجودة فى الجدول ،يمكن أن
ننشئ جدول جديد من المعلومات المستعرض ومن ثم نقوم بحذف الجدول
Employeeوإعادة تسمية الجدول الجديد الى .Employee1
للرجوع بال Sessionالحالية للماضى يوما ً كامل ً نقوم بتنفيذ الجراء PROCEDURE
ENABLE_AT_TIMEالموجود فى الحزمة PACKAGE DBMS_FLASHBACK
DECLARE
;QUERY_TIME TIMESTAMP
BEGIN
;)QUERY_TIME := TO_TIMESTAMP(SYSDATE -1
SYS.DBMS_FLASHBACK.ENABLE_AT_TIME ( QUERY_TIME
;)
;COMMIT
171
;END
/
هكذا خلل هذه ال Sessionجميع الستعلمات ترى قاعدة البيانات كما لو كنا
بالمس.
لبد من الشارة إلى أنه من خلل هذا النمط ل يمكن إجراء عمليات ال DML
ماعدا .SELECT
172
:B- Flashback Table
ويسمى ايضا ً Flashback Table Queryواستحدث هذا النوع فى الصدار
Oracle10gويعتمد اساسا ً على ال ، Undo Tablespaceوهو الرجوع بالجدول الى
فترة زمنية فى الماضى ويعتمد اساسا ً الى الذهاب الى ال Undo Segmentsوارجاع
الجدول الى لحظة معينة فى الماضى مستفيدا من المعلومات الموجودة Undo
، Segmentsفقد تكون جرت على الجدول عدد من التعديلت سنجدها فى ال Undo
، Tablespaceبالطبع قد تفشل عملية ال Flashback Tableإذا لم نجد المعلومات
المطلوبة فى ال Undo Tablespaceنتيجة لنتهاء فترة الحتفاظ بالمعلومات
المطلوبة مث ً
ل.
173
فلنستعرض كل الجدولين.
174
لنقوم بعرض الزمن الن
175
فشلت عملية السترجاع Flashback Tableوذلك لننا نحتاج لعمل Enable Row
،وهو عبار عن Flagيتم وضعه فى ال Data Dictionaryليوضح Movement
للوركل عمليات التعديل.
رسالة خطأ اخرى ،هل عرفت لماذا ؟ لنه قد تم إنتهاك القيد Foreign Key
Constraintإذ ل يمكن إعادة الموظف رقم 3الى الجدول EMPوهو ينتمى الى
الدارة تم حذفها ‘ فهو يبتمى للدارة رقم 3قد تم حذفها ،فما الحل إذًا؟
176
لقد تمت عملية ال Flashback Tablesبنجاح وليس ضروريا ً أن نقوم بترتيب
الجدول فى عبارة ال Flashbackوذلك لن القيود Constraintيتم التأكد منها بعد
نهاية العملية .Transaction
177
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
178
:D- Flashback Transaction
Undo يتم استخدام الFlashback Table and Flashback versions فى كل من
Undo فإنه يقوم بإسترجاع جميع الFlashback Transaction أما ال، للكائناتData
اى على مستوى العمليات مهما كانت العمليات مرتبطة بعددData For transaction
View نستخدم الFlashback Transaction للستعلم عن ال ، من الكائنات
: التالى
.FLASHBACK_TRANSACTION_QUERY
DESC FLASHBACK_TRANSACTION_QUERY;
179
حساسة جدا ً لذلك فإن هذا الView ولن البيانات الموجودة فى هذا ال
.SELECT ANY TRANSACTION PRIVILEGE محمى بواسطة الصلحيةView
ولن استعلم جميع العمليات على قاعدة البيانات يأتى بعدد كبير جدا ً من
ً فلو أنى مثل، فمن الفضل التركيز فى الستعلم بواسطة الشروط، المعلومات
أريد استعراض العمليات التى تمت على جدول معين فمن الفضل تحديد الشرط
’WHERE TABLE_NAME=’TABLE_NAME
ولنفترض الن أنى اريد عمل استعلم عن العمليات التى حدثت على الجدول
.SALARY
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;
180
Flashback سوف نستخدمها فى ال، XID=05001D0057030000 لحظ معى
.Transaction Query
181
جدول واحدا ً تم حذفه خطأ ً ،ل شك أنه حل مكلف وملكلف جدا ً من حيث الزمن
ومن حيث أننا سأفقد بعض العمليات.
فعند حذف جدول فى الصدارات السابقة من اوركل يتم تحرير المساحات
التى كان يستقلها ،أما فى الصدار Oracle10gل يتم تحرير المساحات التى
يستقلها الجدول وما يتبعه من كائنات لحظة حذف الجدول ،وإنما يتم وضع
الجدول مؤقتا ً فى سلة المهملت RECYCLE BINويظل الجدول مملوكا ً ايضا ً
للمستخدم رغم إنتقاله الى سلة المهملت ،ولكن بالطبع لحظة إنتقاله إلى سلة
المهملت يتم إعادة تسميته حتى ل يحدث تضارب فى السماء إذا أردت أن اقوم
بإنشاء جدول اخر بنفس السم ،هذا الوضع يتيح لنا فرصة استرجاع الجدول من
سلة المهملت دون الحوجة لسترجاع قاعدة البيانات ،مما يقلل لنا فترة
السترجاع وكذلك دون أن نفقد اى عمليات .
182
لحظت معى كيف أنه رغم أننا قمنا بحذف الجدول USER_MASTERإل أن ما زال
موجودا ً فى سلة المهملت ويمكننا كذلك استرجاعه .
لقد قمنا بإسترجاع الجدول من سلة المحذوفات لكن قد تفشل عملية السترجاع
إذا قمنا بإنشاء جدول بنفس
السم قبل عملية السترجاع لذلك يمكن اعادة تسميته لتفادى عملية تضارب
السماء.
FLASHBACK TABLE USER_MASTER TO BEFORE DROP
;RENAME TO 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
184
هل فكرت يوما ً ماذا تفعل لو قمت بحذف مستخدم ٍ ما خطأ ً ؟ الجواب وبكل
بساطة اقوم بعمل استرجاع لقاعدة البيانات Recoveryمن النسخ الحتياطى
.Backup
ً
هذا الحل صحيح ولكن مكلف من حيث الزمن خصوصا إذا كانت قاعدة
البيانات كبيرة ،فإسترجاع احجام كبيرة من الملفات ل بد أنه مكلف من حيث
الزمن .
ما الحل إذا ً ،الحل هو .Flashback Database
ال Flashback Databaseهى إرجاع قاعدة البيانات الى نقطة زمنية معينة فى
الماضى ،بحيث جميع التعديلت التى حدثت فى قاعدة البيانات من تلك النقطة
الى الن كأن لم تكن.
هذا السناريو يشبه الى حد كبير سناريو ال Redo Log Bufferوال Redo Log
Filesولكن الختلف فى أنه ليس كل التعديلت تكتب فى ال Flashback Bufferكما
يحدث فى ال Redo Log Bufferوإنما ، Complete Block Imagesكذلك ال
Flashback Logesل تتم ارشفته كما يحدث لل .Redo Log Files
185
،لذا فإن ال Flashback Databaseيحتاج لن تكون قاعدة البيانات فى النمط
Archive Log Modeوذلك لن الرشيف يحتوى على جميع تفاصيل التعديلت التى
حدثت فى قاعدة البيانات على خلف ، Flashback Logsإذا ال Flashback Logsمع
ال Archive Logsيستطيعان أن ينجحا عملية ال Flashback Database
حيث-:
187
. ARCHIVELOG MODE الن قاعدة البيانات تعمل فى النمط
REDO LOG FILE يتم عمل نسخ لملف الSWITCH LOGFILE لحظة عمل
.للرشيف
189
ALTER DATABASE FLASHBACK ON;
190
لمعرفة كيفية استخدام ال Flashback Databaseنتابع معا ً هذا السناريو:
-1مدير قاعدة البيانات قام بحذف المستخدم TESTعن طريق الخطأ.
191
ً-3نفتح قاعدة البيانات فى الوضع . Resetlogs
أما إذا لم نكن نعرف مثل ً وقت حذف المستخدم المستخدم TESTفليس
عندنا حل سواء التخمين ومن ثم فتح قاعدة البيانات فى الوضع Read Onlyوالتأكد
من جدوى السترجاع وقد نلجأ لغلق قاعدة البيانات وفتحها مرة اخرى ومن ثم
إعادة ال Flashback Databaseلوقت اخر ،ولن نفتح قاعدة البيانات مباشرة فى
الوضع Resetlogsلن الخيار Restlogsيقوم بإعادة تهيئة ال Log Sequence Number
ويبدأ بأخذ القيمة ) (001من جديد.
192