23.12.2014 Views

redo log files

redo log files

redo log files

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

بسم االله الرحمن الرحيم<br />

السلام علكيم ورحمة االله وبركاته:‏<br />

هذا الكتاب للراغبين في القيام بإمتحانات الأوراكل<br />

رقم<br />

1z0-031 المسمى بإسم:‏<br />

9 وبالتحديد للإمتحان الثاني<br />

Oracle 9i DBA Fundamentals I<br />

عسى أن ینفعكم وبالتوفیق إن شاء االله تعالى.‏<br />

أخوكم محمد.‏<br />

ھذا الكتاب مجاني وغیر مخصص للبیع<br />

نسخة مجانیة في موقع<br />

http://book.arabsbook.com/<br />

2


المكونات:‏<br />

الفصل الأول:‏ مكونات الأوراكل.‏ (4)<br />

الفصل الثاني:‏ تنصیب و إدارة الأوراكل.‏ (26)<br />

الفصل الثالث:‏ تكوين الداتا بیس واستخدام الداتا ديكشینوري.‏ (51)<br />

الفصل الرابع:‏ ملفات الكنترول و الريدو لوج.‏ (63)<br />

الفصل الخامس:‏ ملفات الداتا والتیبل سبیس.‏ (76)<br />

الفصل السادس:‏ السیجمنت و خصائص التخزين.‏ (95)<br />

الفصل السابع:‏ إدارة التابل و الإندكس والكونیسترانیت.(‏‎106‎‏)‏<br />

الفصل الثامن :<br />

إدارة الیوزرز و باسورد سیكیورتي و الريسورسیس.(‏‎133‎‏)‏<br />

الفصل التاسع<br />

:<br />

إدارة البريفلیج و أوديوتین و الرولز.‏ (146)<br />

الفصل العاشر:‏ الدعم العالمي.(‏‎164‎‏)‏<br />

3


ORACLE ARCHITECTURE<br />

4


ORACLE SERVER<br />

ھو نظام لادارة قواعد البیانات و یتكون من مكونیین اساسیین ھما<br />

:<br />

ORACLE INSTANCE, ORACLE DATABASE<br />

.Process structure لتتمكن من<br />

Memory Structure<br />

: ORACLE INSTANCE<br />

و<br />

من أھم مكونات الأوراكل یحتوي على<br />

الوصول الى البیانات "Data" یجب أن یكون ال Instance في وضعیة العمل،‏ أي انھ یتم من خلالھ<br />

الحصول على البیانات المطلوبة،‏ ولا یستطیع ال Instance فتح و تشغیل أكثر من واحد فقط<br />

في نفس الوقت،‏ ولكن من الممكن لأكثر من Instance العمل على ذات ال .Database<br />

Database<br />

1.1 رسم<br />

: ORACLE DATABASE<br />

عبارة عن مجموعة من الملفات لحفظ البیانات واستعادتھا عند الطلب وینقسم الى قسمین ھما Logical<br />

. Physical structure و structure<br />

. Database<br />

اما ال<br />

اما ال<br />

Logical یتكون من أقسام لتخزین وادارة ال<br />

Physical یتكون من الملفات الحقیقیة الموجودة على الكمبیوتر أو السریفر<br />

.<br />

مثال:‏<br />

Logical<br />

عندما تشاھد صورة على موقع انترنت فإنك تشاھد الجزء ال أما الملف الحقیقي للصورة والذي<br />

مخزن في السیرفر یكون الجزء ال یكون ھنالك ارتباط بین الجزئین بحیث اذا حذف أحدھما یجب<br />

حذف الجزء الأخر،‏ اذ لا فائدة من إبقاء ملف الصورة ال Physical في السیرفر اذا كنت لا ترید عرض<br />

الصورة على الأنترنت.‏<br />

.Physical<br />

5


ویتكون<br />

Database physical structure من ثلاث ملفات ھي<br />

:<br />

---------------------------------------------------------------------------------------------------<br />

:Control <strong>files</strong><br />

.Oracle Database<br />

ملفات التحكم تحتوي على المعلومات اللازمة للمحافظة على ال Database ویجب ان<br />

یتوفر على الأقل ملف واحد لیعمل<br />

:Data Files<br />

:Redo Log Files<br />

الملفات التي یتم تخزین المعلومات والبیانات داخلھا.‏<br />

تقوم بتسجیل جمیع المتغیرات التي طرأت على ال Database مثل أضافة أو حذف<br />

بعض البیانات "Data" لنتمكن من استعادة البیانات في حدوث ضیاع بیانات بشكل مفاجئ ‏(مثلاً:‏ انقطاع<br />

التیار الكھربائي قبل حفظ البیانات المتغیرة).‏<br />

-------------------------------------------------------------------------------------------------------<br />

لیست ضمن ال Database انما ضمن ال<br />

ویوجد ملفات أخرى في ال<br />

ویجب أن تتواجد لتشغیل واستخدام واغلاق ال<br />

.Oracle Server<br />

Database مثل:‏<br />

physical ولكنھا<br />

.Privileges مثل Instance الذي یحتوى على المعلومات اللازمة للدخول الى ال :Password File<br />

:Archived Redo Log <strong>files</strong> عبارة عن نسخ ل<br />

أي ضیاع للبیانات.‏<br />

:Parameter File<br />

Structure<br />

Redo Log Files للمزید من الأمان في حالة حدوث<br />

تخزن المواصفات الخاصة لل Instance مثلاً‏ حجم الذاكرة الممنوحة لل Memory<br />

ومواصفات أخرى نتطرق لھا لاحقاً.‏<br />

1.2 رسم<br />

6


أما ال Logical Structure یتكون من:‏<br />

.Tablespaces<br />

:Tablespaces<br />

كل<br />

تنقسم ال Database الى وحدات أصغر تسمى ال<br />

ان یتكون من واحد أو أكثر .Tablespace یوفر الأوراكل System Tablespace في بدایة تكوین ال<br />

Database كحد أدني ضروري لعمل ال<br />

Database یجب<br />

.Database<br />

:Segments<br />

ینقسم ال Tablespace الى وحدات أصغر تسمى ال<br />

.Segments<br />

:Extent<br />

ینقسم ال Segments الى وحدات أصغر تسمى ال<br />

.Extents<br />

:Blocks<br />

البیانات.‏<br />

تنقسم ال Extent الى وحدات أصغر تسمى ال Blocks وھي أصغر وحدات تخزین و قراءة<br />

سوف یتم التطرق لاحقاً‏ بالتفاصیل في الكتاب لمكونات ال .Logical Structure<br />

رسم 1.3<br />

7


ORACLE MEMORY STRUCTURE<br />

یتكون من منطقتین تعرفان باسم<br />

Instance الخاص بال Memory structure<br />

:<br />

:System Global Area (SGA)<br />

الذي تم<br />

وھي ال<br />

التحدث عنھ مسبقاً‏ ‏(راجع الرسم 1.1) والتي ھي أحد أھم مكونات ال Instance وتحجز المساحة الخاصة لھا<br />

من الذاكرة ‏(أو تبدأ بالعمل)‏ عند تشغیل ال .Instance وھي ذاكرة مشتركة بین الأوامر "Processes" التي<br />

SQL Query Process وایضاً‏ مشتركة بین مستخدمي ال<br />

تأتي لل<br />

المختلفین،‏ وتعرف ایضاً‏ باسم<br />

Database<br />

.Shared Global Area :<br />

Instance مثل<br />

وھي المساحة المخصصة من الذاكرة ل<br />

على معلومات حول ال .Server Process وھي ذاكرة خاصة<br />

وتعرف ایضاً‏ باسم<br />

User Process وتحتوي<br />

:Program Global Area (PGA)<br />

لأمر "Process"<br />

.Process Global Area أو Private Global Area :<br />

سوف یتم التطرق لاحقاً‏ ل<br />

.Server Process و User Process<br />

واحد فقط.‏<br />

1.4 رسم<br />

8


SYSTEM GLOBAL AREA (SGA)<br />

جمیع مستخدمي ال Database یتشاركون البیانات الموجودة في ھذه المنطقة حیث یتم تخزین البیانات<br />

المشتركة من مختلف الأوامر Processes" "Database لكي تسھل عملیة استخراج البیانات یقوم ال<br />

Oracle بحجز المساحة المخصصة لھ من الذاكرة عند بدایة تشغیل ال Instance ویقوم بتحریر المساحة<br />

عند انھاء عمل ال ،Instance وتقسم الى عدة أقسام منھا أقسام اساسیة ضروریة ومنھا أقسام اختیاریة.‏<br />

.<br />

الرسم رقم 1.5 یوضح الأقسام الاساسیة والأقسام الاختیاریة ‏(الأقسام الاختیاریة باللون الاحمر)،‏ وسوف یتم<br />

التطرق الى كل قسم على حده.‏<br />

رسم 1.5<br />

)<br />

تعتبر ال SGA ذاكرة مرنة داینامیكیة أي ان باستطاعة أقسامھا ان تكبر أو تصغر في الحجم دون أغلاق ال<br />

لأسباب مختلفة مثل كثرة العمل كثرة الأوامر)‏ على أحد أقسامھا اذ أن زیادة العمل على احد<br />

الأقسام یتتطلب ذاكرة اضافیة ولكن لا یمكن للذاكرة العامة لل SGA ان تتخطى الحد الأعلى المحدد بالعامل<br />

.SGA_MAX_SIZE "Parameter"<br />

Instance<br />

ملاحظة:‏SGA_MAX_SIZE ھي احد مكونات ال Initialization Parameter File<br />

التطرق لھا لاحقاً.‏<br />

التي سوف یتم<br />

تذكر:‏ ال<br />

مثال تطبیقي<br />

Parameter File<br />

:1.1<br />

التي جاء ذكرھا قبل قلیل.‏<br />

لمعرفة حجم ال SGA الحالي اكتب التالي في برنامج :SQLPLUS<br />

SHOW SGA;<br />

ال Total System Global Area تمثل حجم ال SGA الحالي.‏<br />

9


مثال:‏<br />

اذا كانت الذاكرة المخصصة لل SGA حوالي 100 میغا بایت والتي تعتبر "SGA_MAX_SIZE" وكان<br />

التوزیع المبدئي للذاكرة على الأقسام المختلفة على النحو التالي:‏<br />

=Shared Pool Area 50 میغا بایت<br />

=Database Buffer Cache<br />

25 میغا بایت<br />

=Redo Log Buffer 10 میغا بایت ‏(منطقة ثابتة غیر متغیرة)‏<br />

باقي الأقسام = 15 میغا بایت.‏ ‏(الأقسام المتغیرة)‏<br />

الذاكرة الكاملة = 100 میغا بایت<br />

Shared Pool Area بحیث<br />

أن 50 میغا بایت لم تعد تكفي،‏ فبمقدور<br />

وزاد ضغط العمل على<br />

Pool Area بان تأخذ ذاكرة اضافیة من باقي الأقسام ولكن لا یمكن للذاكرة الكاملة بأن تزید عن<br />

بایت.‏<br />

Shared<br />

100 میغا<br />

=Shared Pool Area 60 میغا بایت<br />

=Database Buffer Cache<br />

10=Redo Log Buffer<br />

=<br />

20 میغا بایت<br />

میغا بایت ‏(منطقة ثابتة غیر متغیرة)‏<br />

باقي الأقسام 10 میغا بایت ‏(الأقسام المتغیرة)‏<br />

الذاكرة الكاملة = 100 میغا بایت<br />

الذاكرة في ال<br />

SGA عبارة عن وحدات متواصلة تسمى<br />

Granules وحجم ال Granule یعتمد على<br />

.SGA_MAX_SIZE<br />

SGA_MAX_SIZE أصغر من 128 میغا بایت,‏ اذاً‏ حجم كل Granule یساوي 4 میغا بایت أما اذا كان<br />

حجم ال SGA_MAX_SIZE اكبر من 128 میغا بایت اذاً‏ حجم كل Granule یساوي 16 میغا بایت.‏<br />

الحد الأدني من عدد ال<br />

Granules لل SGA ھو<br />

ثلاث.‏<br />

واحد<br />

واحد<br />

واحد<br />

Granule للمنطقة الثابتة في SGA مثل<br />

Redo Log Buffer<br />

Shared Pool Area ل Granule<br />

Database Buffer Cache ل Granule<br />

ملاحظة:‏ یمكن الحصول عن بیانات عن ال<br />

منV$BUFFER_POOL‏.‏ Granules<br />

10


:SHARED POOL AREA<br />

تستخدم لحفظ أخر أو أحدث أوامر ال SQL و PL/SQL وأخر البیانات(المعلومات)‏ المستخرجة من ال<br />

تتكون من قسمین ھما<br />

.Data Dictionary Cache و Library Cache :<br />

.Data Dictionary<br />

1.6 رسم<br />

باعتبارھا منطقة مھمھ جداً‏ فمن الممكن تغیر حجمھا داینامیكیاً‏ ‏(بدون اغلاق ال<br />

یتجاوزالزیادة في المساحة مساحة ال SGA<br />

محددة من قبل العامل "Parameter"<br />

(Instance بحیث لا<br />

المحدده بالعامل "Parameter" .SGA_MAX_SIZE<br />

یعتبر حجم ال SHARED POOL AREA<br />

SHARED_POOL_SIZE<br />

مثال تطبیقي‎1.2‎‏:‏<br />

لمعرفة الحجم الحالي ل<br />

Shared Pool Area اكتب التالي:‏<br />

SHOW PARAMETER SHARED_POOL_SIZE;<br />

في الكمبیوتر الخاص بي الحجم ھو<br />

لتغییر مساحة ال<br />

: 46 MB و یظھر كالتالي = 46137344<br />

Shared Pool Area<br />

داینامیكیاً‏ اكتب التالي:‏<br />

ALTER SYSTEM SET SHARED_POOL_SIZE= 64M;<br />

في حالة نجاح الأمر یظھر الجواب التالي من .System altered : SQL PLUS<br />

أما في حالة عدم وجود ذاكرة أضافیة لان تضاف ل Shared Pool Area یظھر الجواب<br />

التالي:‏grow .Insufficient memory to<br />

11


:Library Cache<br />

تحتوي على :<br />

- المنطقة رقم :1 Statements SQL Shared<br />

- المنطقة رقم Packages: 2 PL/SQL Procedures or<br />

مثال:‏<br />

عندما یقوم مستخدم لل Database بطلب جملة ال SQL فإن الجملة وطریقة انجاز مھامھا تخزن في<br />

المنطقة رقم 1 وبذلك یسھل عملیة تكرار انجاز "Execute" من الذاكرة بسرعة أكبر في حال تم<br />

طلب نفس الجملة من مستخدم أخر وبذلك تكون العملیة أسرع وتخفف العبئ على ما یعرف باسم<br />

.PL/SQL وكذلك ینطبق الحال على ،Compilations<br />

خطوات عملیة:‏<br />

ال SQL<br />

select * from employees; :<br />

:1<br />

: 2<br />

یقوم المستخدم الأول بطلب جملة ال SQL التالیة<br />

الخطوة بدراسة الجملة ومعرفة المراحل التي سوف یتم بعدھا<br />

یقوم ال<br />

الخطوة انجاز"‏Execute‏"‏ الجملة على اعتبار أن ھذه الجملة لیست مخزنة في ال .Library Cache<br />

یتم تخزین الجملة ومراحل انجازھا في .Library Cache<br />

الخطوة یتم اظھار البیانات الناتجة من جملةال SQL للمستخدم الأول،‏ وبذلك تكون جملة ال SQL تم<br />

الخطوة انجازھا وتم تسجیل جمیع المراحل التي مرت بھا الجملة في ال .Library Cache<br />

یقوم المستخدم الثاني بعد قلیل بكتابة نفس جملة ال SQL وھي<br />

الخطوة فینفذ<br />

بدراسة الجملة فیجد انھا موجوده في ال<br />

یقوم ال<br />

الخطوة مراحل انجاز الجملة دون دراسة الجملة باعتبار ان المراحل التي تمت لانجاز الجملة مخزنة في ذاكرة ال<br />

select * from employees;<br />

Library Cache<br />

Server Process<br />

Server Process<br />

:3<br />

:4<br />

:5<br />

:6<br />

.Library Cache<br />

الخطوة 7:<br />

یتم اظھار البیانات المطلوبة للمستخدم الثاني بسرعة أكبر.‏<br />

:Data Dictionary Cache<br />

المكون الثاني ل SHARED POOL AREA والتي یحتوي على بیانات من ال Data Dictionary<br />

وھي تعمل بنفس طریقة ال<br />

. Library Cache<br />

حول:‏ etc… .Tables, Indexes, Privileges,<br />

وعندما تمتلئ منطقة Library Cache أو Data Dictionary Cache یقوم الأوراكل باخراج أقدم<br />

بیانات لم یتم تكرار طلبھا لتعوض ببیانات جدیدة وتعرف الطریقة باسم:‏<br />

Least Recently Used (LRU)<br />

12


:DATABASE BUFFER CACHE<br />

یتم تخزین فیھا أحدث البیانات التى تم استخراجھا من الملفات الفیزیائیة Files" "Data ، وفي حالة طلب<br />

ذات البیانات من ذات المستخدم أو من مستخدمین أخریین لل Database یتم استخراج البیانات من الذاكرة<br />

ولیس من<br />

.Data Files<br />

ملاحظة:‏ تتم ادارتھا ایضاً‏ بنظام<br />

.Least Recently Used (LRU)<br />

مثال:‏<br />

Database بطلب<br />

بیانات محددة من ال Database عن طریق مثلاً‏ جملة ال SQL<br />

عندما یقوم مستخدم لل<br />

وبذلك یسھل<br />

فإن البیانات المستخرجة من ال Data Files تخزن في ال<br />

عملیة استخراج البیانات وبسرعة أكبر في حال تم طلب نفس الجملة من ذات المستخدم أو مستخدم أخر وبذلك<br />

یخف العبئ على ما یعرف باسم .Input/Output Load<br />

راجع الرسم 1.7 لمزید من التوضیح.‏<br />

الخطوات المبینة على الرسم<br />

Database Buffer Cache<br />

.<br />

:1.7<br />

:1<br />

:2<br />

یقوم المستخدم الأول بطلب بیانات من الDatabase<br />

الخطوة بدراسة الطلب ویحضر ال<br />

یقوم ال<br />

الخطوة الFiles Data على اعتبار أن ھذه البیانات المطلوبة لیست مخزنة في ال<br />

یتم احضار البیانات من ال Data Files وتخزن البیانات في<br />

الخطوة یتم اظھار البیانات المطلوبة للمستخدم الأول.‏<br />

الخطوة یقوم مستخدم أخر بعد قلیل بطلب ذات البیانات من ال .Database<br />

الخطوة یقوم ال Instance بدراسة الطلب فیجد ان البیانات المطلوبة تم استخراجھا قبل قلیل من ال<br />

الخطوة فیستخرج البیانات من ذاكرة ال<br />

Data Files ومازالت مخزنة في ال<br />

Database Buffer Cache دون الحاجة الى استخراج البیانات من القرص الطلب حیث توجد ملفات<br />

،Data Files ومن ثم یتم اظھار البیانات للمستخدم الثاي بسرعة أكبر وجھد أقل.‏<br />

Server Process البیانات من<br />

.Database Buffer Cache<br />

.Database Buffer Cache<br />

Database Buffer Cache<br />

Server process<br />

:3<br />

:4<br />

:5<br />

:6<br />

وتتكون ال Database Buffer Cache من ثلاثة أجزاء مستقلة تسمى<br />

:Default یخزن في ھذا القسم البیانات التي لیست من ضمن الأقسام الأخرى<br />

:Sub Cache<br />

.(Keep, Recycle)<br />

بمساحتھا العامل "Parameter" .DB_CACHE_SIZE<br />

"Parameter" تحافظ على البیانات المخزنة ولا تستبدل،‏ ویتحكم بمساحتھا العامل :Keep<br />

.DB_KEEP_CACHE_SIZE<br />

:Recycle یتم ازالة البیانات من ھذه المنطقة عند عدم الحاجة الیھا مجدداً،‏ ویتحكم بمساحتھا العامل<br />

.DB_RECYCLE_CACHE_SIZE "Parameter"<br />

ملاحظة:‏ مساحة ال Default لا یمكن أن تكون ان تساوي صفر أبداً.‏<br />

ویتحكم<br />

13


رسم 1.7<br />

14


مثال تطبیقي<br />

:1.3<br />

لمعرفة أحجام أقسام ال<br />

Database Buffer Cache<br />

SHOW PARAMETER DB_CACHE_SIZE;<br />

لتغییر مساحة ال Database Buffer Cache<br />

اكتب التالي:‏<br />

داینامیكیاً‏ اكتب التالي:‏<br />

ALTER SYSTEM SET DB_CACHE_SIZE= 30 M;<br />

:Data Block and Data Buffer<br />

البیانات المخزنة في ملفات الأوراكل تكون مخزنة بشكل كتل ولذلك یطلق علیھا اسم Blocks أما البیانات<br />

.Data Buffer وحجم ال Buffer ھو نفسھ<br />

المخزنة في ال<br />

Database Buffer Cache فتعرف باسم<br />

حجم Block والمحدد بالعامل "Parameter" .DB_BLOCK_SIZE<br />

:Data Buffer Advisory Parameter (DB_CACHE_ADVICE)<br />

یساعد مدیر البیانات (DBA) على ادارة ال Database Buffer Cache وخاصة في أوقات الذروة حیث<br />

یقوم باظھار احصائیات ومعلومات عن مختلف ال<br />

یمكن الحصول على البیانات التي ینتجھا العامل "Parameter"<br />

ولھ ثلاث حالات ھي:‏<br />

. Database buffer cache<br />

من .V$DB_CACHE_ADVICE<br />

:OFF<br />

:ON<br />

:READY<br />

لا یوجد مساحة في الذاكرة مخصصة لھ وبالتالي لا یقوم بتكوین أي بیانات<br />

یقوم بتكوین البیانات ولھ مساحة مخصصة في الذاكرة.‏<br />

یوجد مساحة في الذاكرة مخصصة لھ ولكنھ في وضعیة الاستعداد ولا یقوم بتكوین اي بیانات.‏<br />

ربما تتسائل لماذا اذاً‏ توجد الحالة READY لماذا لم بتم الاكتفاء بأول حالتیین فقط؟<br />

الجواب على ذلك یكمن في ان انتقال العامل "Parameter" من وضعیة ال OFF الى ON قد یؤدي الى<br />

أخطاء في الذاكرة أو فشل عملیة التحویل.‏<br />

مثال تطبیقي<br />

:1.4<br />

لمعرفة الوضع الحالي اكتب التالي:‏<br />

SHOW PARAMETER DB_CACHE_ADVICE;<br />

یمكن تغییر وضیعة العامل "Parameter" DB_CACHE_ADVICE داینامیكیاً‏ بكتابة<br />

:<br />

ALTER SYSTEM SET DB_CACHE_ADVICE = READY;<br />

ملاحظة:‏ قد تفشل المحاولة اذا كان الوضع الابتدائي .OFF<br />

15


:REDO LOG BUFFER<br />

من أھم اسس حمایة البیانات اذ تحتوي على بیانات عن جمیع المتغیرات التي طرأت على ال<br />

التغیرات الناتجھ عن أوامر .INSERT,DELETE,ALTER,DROP, CREATE<br />

باسم<br />

المتغیرات التي حدثت في ال Database تسجل في ال<br />

محددة من قبل العامل "Parameter" .LOG_BUFFER<br />

مساحة ال<br />

مثال تطبیقي<br />

Database مثل<br />

.Redo Entries<br />

Redo Log Buffer<br />

Redo Log Buffer<br />

:1.5<br />

لمعرفة الحجم الحالي اكتب التالي:‏<br />

SHOW PARAMETER LOG_BUFFER;<br />

لا یمكن تغییر وضیعة العامل "Parameter" LOG_BUFFER داینامیكیا.‏<br />

تذكر:‏ ان Redo Log Buffer منطقة ثابتة غیر متغیرة.‏<br />

16


:LARGE POOL<br />

ھي منطقة ذاكرة اختیاریة ولیست اساسیة ‏(اجباریة)‏ یمكن لل DBA ان یقوم بتشكیلھا حین الحاجة الیھا حیث<br />

توفر ذاكرة كبیرة لعملیات عدیدة مثل .BACKUP and RESTORE<br />

ملاحظات:‏<br />

1- علمیة ال BACKUP ھي العملیة التي یقوم فیھا ال DBA بحفظ نسخ "Copies" من البیانات غالباً‏<br />

على أقراص صلبة Hard disk لكي یتمكن من المحافظة على البیانات واسترجاعھا RESTORE عند<br />

الحاجة.‏<br />

2- ال Large Pool لا تعمل بنظام ال .LRU<br />

3- مساحة ال<br />

Large Pool<br />

محددة من قبل العامل "Parameter" .LARGE_POOL_SIZE<br />

4- یمكن تغیر المساحة داینامیكاً‏ باستخدام ALTER SYSTEM كما عو الحال مع ال<br />

وغیرھا.‏<br />

5- تعمل ال Large Pool فقط في بیئة ال<br />

سوف یتم التطرق لاحقاً‏ ل .Shared Server<br />

Shared Pool<br />

.Shared Server<br />

:JAVA POOL<br />

ھي منطقة ذاكرة اختیاریة اخرى توفر ذاكرة لعملیات ال Java المختلفة وتعمل بنفس فكرة ال SQL أو<br />

مساحة ال متحكمة من قبل العامل<br />

PL/SQL في ال<br />

Java Pool ،Shared Pool<br />

.JAVA_POOL_SIZE "Parameter"<br />

17


،<br />

CONNECTION<br />

Database<br />

بال .Instance<br />

لكي تستطیع الدخول الى ال للقیام بعلمیات مختلفة مثل استخراج بیانات عبر جمل ال SQL<br />

یجب أولاً‏ ان یكون المستخدم متصلاً‏<br />

یقوم المستخدم باستخدام أحد البرامج التي یمكن عبرھا الاتصال بال Instance مثل SQLPLUS فینشئ ما<br />

وبعد ان یتم الدخول الى ال Oracle Server ویتم الاتصال بال<br />

یعرف باسم<br />

یقوم ال Server Process بعملیة الوسیط بین المستخدم<br />

ینشئ ما یعرف باسم<br />

.SQL حیث یقوم بتنفیذ العملیات التي طلبھا المستخدم مثل جمل ال Instance<br />

Instance<br />

User<br />

.User Process<br />

.Server Process<br />

Process وال<br />

1.8 رسم<br />

:Process<br />

تعریف ال Process بشكل عام في الأوراكل ھي العملیة أو الوظیفة التي تنفذ مجموعة من الخطوات أو<br />

مھمات محددة.‏<br />

یوجد ثلاث أنواع من ال Processes في الأوراكل ھم:‏ Process, User Process , Server<br />

.Background Process<br />

سوف یتم التطرق لاحقاً‏ ل .Background Process<br />

.Oracle Server<br />

Oracle Server سواء بإرادة<br />

:Session<br />

یبدأ ال Session عند دخول<br />

ال Session ھو حالة الاتصال الموجودة بین المستخدم و ال<br />

المستخدم ال Oracle Server وینتھي عند خروج المستخدم من ال<br />

المستخدم ‏(عند انتھاء المھمة)‏ أو لا ارادیاً‏ ‏(عند حدوث عطل ما).‏<br />

یمكن للمستخدم الواحد این یكوٌن أكثر من Session واحد في نفس الوقت اذا استخدم أكثر من برنامج مثل<br />

SQL PLUS و ORACLE FORMS عدا بعض الحالات القلیلة.‏<br />

18


:PROCESSING A STATEMENT (DML)<br />

الخطوات التي تمر عبرھا جمل ال SQL<br />

‏(جمل ال (DML ملخصة في الخطوات التالیة:‏<br />

یتم الاتصال بال<br />

.Server Process و User Process وتكوین Instance<br />

اذا كانت البیانات المطلوبة غیر متوفرة في ال<br />

Process باحضار البیانات من<br />

Server فیقوم ال Database Buffer Cache<br />

.Data Files<br />

یقوم ال Server Process بوضع قیود "Locks" على البیانات التي یتم تعدیلھا،‏ ویتم تخزین<br />

البیانات السابقة ‏(قبل التعدیل)‏<br />

حتى یستطیع المستخدم باسترجاع البیانات الأصلیة غیر المعدلة اذا تم اختیار Rollback عوضاً‏<br />

عن .Commit<br />

اذا تم اختیار Commit فإن البیانات المعدلة یتم نقلھا الى<br />

في منطقة تسمى ROLLBACK (SEGMENT) BLOCK<br />

. Data Files<br />

•<br />

•<br />

•<br />

•<br />

19


PROGRAM GLOBAL AREA (PGA)<br />

ھي منطقة ذاكرة غیر مشتركة و خاصة لعملیة واحدة فقط Process" ". تخصص ذاكرة ال PGA لكل<br />

و تزال ذاكرة ال PGA عند نھایة العملیة<br />

PGA مكونات ال ،"Process" على البیانات الخاصة لتلك العملیة PGA وتحتوي ذاكرة ال . "Process"<br />

تعتمد على تعریف ال Server حیث یوجد تعریفان ھما Dedicated وShared‏.‏<br />

واحد<br />

یتكون<br />

في نظام ال<br />

‏(مستخدم واحد)،‏ أما في ال Shared Server فیتم المشاركة في ال Server Process من قبل أكثر من<br />

User Process ‏(یمكن ان یكون ھناك أكثر من Server Processes و لیس بالضرورة واحد فقط أي مثلاً‏<br />

یمكن ان یوجد خمسة Server Processes یتشارك بھم خمسین مستخدم<br />

User Process واحد خاص لطلبات Server Process<br />

(User Processes<br />

عملیة Process" " عند بدایة العملیة Process" "<br />

Dedicated Server<br />

بعض مكونات ال :PGA<br />

:SORT AREA<br />

Distinct , Order By, Group By,<br />

.Intersect<br />

حیث تخصص لأي طلب من قبل ال Process یحتوي على الأوامر التالیة:‏<br />

أو ال<br />

Union, Minus, مثل Set Operators<br />

•<br />

User<br />

:SESSION INFORMATION<br />

.Privileges<br />

حیث تخصص لمعلومات المستخدم مثل ال<br />

•<br />

20


BACKGROUND PROCESSES<br />

.Instance<br />

Background<br />

تكون ال Background Processes متوفرة وجاھزة للعمل بعد تشغیل ال<br />

كل Background Process مسؤول عن مھمات خاصة،‏ ویوجد نوعیین من<br />

أختیاري و أو إجباري).‏<br />

.Background Processes<br />

Processes ھما إلزامي )<br />

تذكر:‏ الرسم رقم 1.1 ومكان وجود ال<br />

أمثلة:‏<br />

Database Writer (DBWn)<br />

Log Writer (LGWR)<br />

System Monitor (SMON)<br />

Process Monitor (PMON)<br />

Checkpoint (CKPT)<br />

Archiver (ARCn)<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

21


Data الى ال Database Buffer Cache<br />

:DATABASE WRITER (DBWn)<br />

یقوم بكتابة البیانات المتغیرة Buffers" "Dirty من ال<br />

Files كما ھو موضح بالرسم 1.9، وبذلك یتم تفرغة Buffers باستمرار من أجل البیانات المتغیرة اللاحقة.‏<br />

تذكر:‏ أن البیانات المخزنة في ال Instance تسمى Buffers والبیانات المخزنة في ال<br />

Data Files تسمى<br />

.Blocks<br />

وتعمل ال DBWn عند حدوث أحد الأحداث التالیة:‏<br />

.Checkpoint<br />

Dirty Buffers ‏(أو ال<br />

عند حودث<br />

Buffers الممتلئة بالبیانات المتغیرة)‏ یصل الى الحد الأعلى<br />

عدد ال<br />

المسموح فیھ.‏<br />

عند عدم وجود من Buffers" "Free فارغة بعد البحث عنھا من قبل ال<br />

عند وضع Tablespace سواء من النوع العادي أو المؤقت في حالة الإغلاق ."Offline"<br />

عند وضع Tablespace في حالة القراءة فقط ‏(اي لا یمكن تغییر البیانات بل فقط الاطلاع<br />

. Process<br />

علیھا)"‏Only ."Read<br />

عند وضع Tablespace في حالة ال .Backup<br />

عند استخدام أوامر Drop و<br />

عند حدوث<br />

.Table الخاصة بال Truncate<br />

.Timeout<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

سوف یتم التطرق لاحقاً‏ ل Checkpoint و ال .Tablespace<br />

الرسم 1.9<br />

22


:LOG WRITER (LGWR)<br />

یقوم بنقل البیانات المخزنة في ال<br />

یساعد على اخلاء ذاكرة لل<br />

Log Buffer Cache الى ال Redo Log Files بشكل دوري مما<br />

.1.10<br />

Redo Entries الجدیدة ،<br />

كما ھو موضح بالرسم<br />

تذكر:‏ أن البیانات المخزنة في ال<br />

وتعمل ال LGWR عند حدوث أحد الأحداث التالیة:‏<br />

.Redo Entries تسمى Redo Log Buffer<br />

عند امتلاء ثلث ال .Redo Log Buffer<br />

عند وجود بیانات في ال Redo Log Buffer حجمھا<br />

قبل ان تقوم ال DBWn بنقل البیانات من ال<br />

كل<br />

عند<br />

اكبر من 1. MB<br />

. Data Files الى ال Database Buffer Cache<br />

3 ثوان.‏<br />

.Transaction Commit<br />

•<br />

•<br />

•<br />

•<br />

•<br />

الرسم 1.10<br />

23


:SYSTEM MONITOR (SMON)<br />

في حالة حدوث اي عطل مفاجئ لل Instance جمیع البیانات الموجودة في ال Instance ‏(مثل بیانات ال<br />

(Database Buffer Cache التي لم یتم نقلھا الى ال Data Files على القرص الصلب تضیع أو تمسح.‏<br />

بعد ھذه الحالة من ضیاع بیانات ال Instance یعمل ال SMON بشكل اتوماتیكي لاسترجاع بیانات ال<br />

.Instance Recovery و تسمى العملیة ب Instance<br />

ویقوم ال SMON بتأدیة عدد من الوظائف ھي:‏<br />

استرجاع البیانات المتغیرة التي تم تسجیل ما طرأ علیھا من تغیر في ال<br />

یتم تسجیلھا في ال .Data Files حیث یقوم ال SMON بقراءة ال<br />

التغیرات التي طرأت على البیانات و تغییر البیانات في ال<br />

اعادة تجھیز ال Database لیتمكن المستخدم من الدخول مجدداً‏<br />

الغاء جمیع ال Transactions التي لم یحدث لھا Commit وازالة القیود عن البیانات " Data<br />

Redo Log Files ولكن لم<br />

Redo Log Files و معرفة<br />

.Data Files<br />

.<br />

.Data Files<br />

. "Lock<br />

تحریر ال Temporary Segments واستعادة مساحتھا الى ال<br />

جمع المساحات الخالیة الصغیرة الضائعة التي تنشئ بین البیانات نتیجة للتغیرات التي تحدث و<br />

تعیدھا الى المساحة الخالیة الرئیسیة.‏<br />

•<br />

•<br />

•<br />

•<br />

•<br />

تذكر:‏ أن ال LGWR یعمل قبل ال .DBWn<br />

سوف یتم التطرق لاحقاًفي الفصول التالیة لل .Temporary Segment<br />

:PROCESS MONITOR (PMON)<br />

في حالة حدوث أي عطل لل Processes قد یؤدي الى مشاكل داخلیة في ال Database فیقوم ال PMON<br />

بتنظیف أخطاء ال<br />

.Processes<br />

ویقوم ال PMON بتأدیة عدد من الوظائف ھي:‏<br />

Tables<br />

تحریر كل المصادر وال Locks على ال أو ال Rows التي وضعھا ال<br />

ال Transaction الخاص بالمستخدم ‏(اي الغاء اي تعدیلات لم یتم حدوث<br />

اعادة<br />

Process الفاشل.‏<br />

(Rollback)<br />

Commit لھا)‏<br />

•<br />

•<br />

24


Database Buffer Cache الى ال<br />

:CHECKPOINT (CKPT)<br />

ال Checkpoint ھي عملیة كتابة جمیع البیانات المتغیرة في<br />

من فوائد ال Checkpoint ان البیانات التي تتغیر باستمرار تنقل بشكل نظامي و<br />

دوري الى ال Data Files وبذلك یتم حفظ البیانات بشكل أمن.‏<br />

ال<br />

ال<br />

Data<br />

.Control Files و ال Data Files Header<br />

.DBWn عبر ال Files<br />

"Update" یقوم بتجدید Checkpoint Process<br />

من البیانات التي تجدد "Update" :<br />

رقم ال<br />

رقم ال Checkpoint في ال<br />

رقم ال<br />

ال SCN في ال<br />

اسماء ال<br />

.Data Files Header في ال Checkpoint<br />

.Control Files<br />

.Control Files في ال Log Sequence<br />

.Control Files<br />

.Archived Log<br />

•<br />

•<br />

•<br />

•<br />

•<br />

سوف یتم التطرق لاحقاًفي الفصول التالیة لل Data Files Header و ال Log Sequence وال SCN<br />

واسماء ال .Archived Log<br />

Archived الى Redo Log Files<br />

:ARCHIVER (ARCn)<br />

ھو اختیاري و لیس اجباري ووظیفتھ تكمن في نقل بیانات ال<br />

باعتباره اختیاري فلھ حالتیین إما یعمل أو مغلق.‏ و لوضعھ في وضیعة العمل یجب أن یكون ال<br />

Database في وضعیة ال ،ARCHIVELOG وفي حال تم وضع ال Database تحت ھذه الوضعیة فإن<br />

ARCn یعمل.‏<br />

اذاً‏ ھناك حالتیین لوضعیة ال Database تحددان عمل أو ایقاف ال ARCn ھما:‏<br />

Process<br />

.Log Files<br />

:Archive<strong>log</strong><br />

عند امتلاء الملف الأول من ملفات ال Redo Log Files یتم البدأ في كتابة البیانات في الملف الثاني وتسمى<br />

، ثم یقوم ال ARCn بشكل أوتوماتیكي بنقل بیانات الملف الأول الى ال<br />

ھذه العملیة Log Switch<br />

.Archived Log Files<br />

رسم 1.11<br />

: NoArchive<strong>log</strong><br />

عند امتلاء جمیع ملفات ال<br />

على البیانات السابقة ، ولكن لا یتم كتابة البیانات فوق البیانات السابقة قبل ان یحدث<br />

أو مجموعة الملفات الممتلئة.‏<br />

Redo Log Files یتم اعادة كتابة البیانات "Overwrite" في الملف الأول<br />

Checkpoint للملف<br />

سوف یتم التطرق لاحقاً‏ لكیفیة وضع ال Database تحت حالة ال Archive<strong>log</strong> أو حال .Noarchive<strong>log</strong><br />

25


INSTALLING & MANAGING<br />

ORACLE<br />

26


DATABASE ADMINISTRATION TOOLS<br />

یتوفر عدد من الأدوات "Tools" في الاوراكل أھمھا :<br />

ORACLE UNIVERSAL INSTALLER (OUI)<br />

ORACLE DATABASE CONFIGURATION ASSISTANT<br />

SQL PLUS<br />

ORACLE ENTERPRISE MANAGER (OEM)<br />

PASSWORD FILE UTILITY<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:ORACLE UNIVERSAL INSTALLER (OUI)<br />

الاوراكل.‏ في نظام الویندوز "Windows" تستطیع بدأ ال<br />

یمكن استخدام ال<br />

.runInstaller فیجب كتابة Unix أما في نظام ال ، Setup.exe بالضغط على ملف التنصیب ال OUI<br />

"Install" لتنصیب OUI<br />

الرسم 2.1 یوضح ال OUI في نظام الویندوز ."Windows"<br />

الرسم 2.1<br />

27


من أھم ممیزات ال<br />

:OUI<br />

یمكن تنصیب الأوراكل اكثر من مرة على ذات موقع التخزین مثل الDisk Hard باستخدام اسم<br />

مخلتف لل ORACLE HOME الموضح في رسم ‏(أسفل كلمة (Destination و یمكن<br />

تنصیب نسخة قدیمة Version" "Old للاوراكل مع نسخة جدیدة Version" "New في ذات<br />

الموقع.‏<br />

2.1<br />

یمكن تنصیب الأوراكل من الإنترنت عبر وصلة ال HTTP حیث تواجد نسخة الأوراكل،‏ وبذلك یمكن<br />

تنصیب الأوراكل من قبل فرع شركة في دولة غیر الدولة التي یوجد بھا مقرھا الأصلي ‏(حیث تتواجد<br />

نسخة الأوراكل).‏<br />

یمكن أن یستعمل لإزالة الأوراكل من الجھاز أو السیرفر<br />

(Uninstall or Deinstall)<br />

یعمل بعدد مختلف من اللغات مثل الانجلیزي و الفرنسي و الألماني و غیرھا.‏<br />

یمكن ان یعمل تحت الأنظمة التي لا توفر نظام ال GUI والتي تكون فیھا الأوامر بشكل كتابي<br />

Command ولیس كما في ال Windows الذي یعمل تحت نظام ال GUI مثل الرسم<br />

وتسمى الطریقة باسم الطریقة الصامتة Mode" "Silent ویتم استعمال ملف یسمى<br />

.2.1<br />

Response<br />

.File<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:Response File<br />

ھو ملف name.txt) (any<br />

مثل بیانات ال ) Source و ال .(Destination<br />

یحفظ البیانات اللازمة لعملیة التنصیب مثل البیانات المطلوبة في الرسم<br />

2.1<br />

:ORACLE DATABASE CONFIGURATION ASSISTANT<br />

یستخدم للأغراض التالیة ‏(انظر الرسم 2.2):<br />

تكوین البیانات ."Database"<br />

حذف البیانات ."Database"<br />

تعدیل خواص البیانات ."Database"<br />

ادارة ال<br />

.Templates<br />

•<br />

•<br />

•<br />

•<br />

سوف یتم التطرق لاحقاًفي فصل أخر لجمیع الأغراض.‏<br />

28


2.2 رسم<br />

:SQL PLUS<br />

ھي اداة تمكن المستخدم من التفاعل مع البیانات،‏ حیث تمكن المستخدم من الدخول الى البیانات،‏ استخراج<br />

بیانات،‏ اضافة بیانات،‏ تعدیل بیانات،‏ واغلاق البیانات ."Database" من المفروض أن تكون قد عملت مع<br />

ال SQL PLUS خلال دراستك لل SQL وتعرفت علیھ جیداً.‏<br />

2.3 رسم<br />

29


:ORACLE ENTERPRISE MANAGER (OEM)<br />

ھو نظام أداري یعمل على التحكم بمكونات الأوراكل وادارة البیانات من خلال نظام ال GUI‏(اي یتم القیام<br />

بمعظم الأوامر من خلال استعمال الفأرة .("Mouse"<br />

من أھم مكونات ال :OEM<br />

CONSOLE<br />

ORACLE MANAGEMENT SERVER<br />

MANAGED NODES<br />

•<br />

•<br />

•<br />

2.4 رسم<br />

:Console<br />

أداة Tool" "GUI<br />

من الأدوات الھامة حیث تعمل كمحطة لإدارة جمیع المھمات في أوراكل.‏ من ھنا یمكن<br />

التحكم بالInstance ویمكن التحكم بال Tables و غیرھا و تنفیذ المھمات عن طریق الفأرة "Mouse"<br />

والإختیارات المتعددة عوضاً‏ عن تنفیذ المھمات بواسطة جمل ال .SQL<br />

30


2.5 رسم<br />

من الملاحظ من الرسم 2.4 أن ال Console یستطیع الدخول الى<br />

:Standalone بطریقة مباشرة دون الحاجة الى<br />

عبر ال :OMS عبر ال<br />

Oracle Server بطریقتیین ھما:‏<br />

.Oracle Management Server ‏(سھم رقم (2<br />

.Oracle Management Server ‏(أسھم رقم (1<br />

:DBA Tools<br />

ھي مجموعة من البرامج التي یمكن تشغیلھا من ال :Console<br />

."Database" یستخدم لتشغیل واغلاق ومراقبة البیانات :Instance Manager<br />

.Privileges و Users Accounts یستخدم لإدارة :Security Manager<br />

Tablespaces وال Data Files وغیرھا.‏<br />

.Indexes وال Views و Tables<br />

:Storage Manager یستخدم للتحكم في ال<br />

:Schema Manager یستخدم لتكوین وادارة ال<br />

:SQL PLUS Worksheet اداة لكتابة جمل ال SQL وتنفیذھا.‏<br />

:Oracle Management Server (OMS)<br />

أھم مكونات ال Oracle Enterprise Manager یقوم بدور الوسیط بین ال Console و ال<br />

Nodes في تبادل البیانات بالاضافة الى ادارة User Accounts وعملیات مختلفة مثل<br />

یقوم باستعمال ال Repository لتخزین بیانات النظام Data" "System وبیانات البرامج والأدوات و<br />

بیانات ال<br />

Managed<br />

.Jobs, Events<br />

.Managed Nodes<br />

31


:Managed Nodes<br />

قد تتكون ال Node من ال Database وخدمات أخرى.‏ یوجد على كل Node ما یعرف<br />

باسم Oracle Intelligent Agent یقوم بالتواصل مع OMS ویؤدي المھام المرسلة من قبل ال<br />

وھو یعمل بشكل منفرد ویمكن ان یؤدي مھام مثل اغلاق و تشغیل ال Database ویلزم<br />

واحد فقط على كل<br />

.Node<br />

،Console<br />

Oracle Intelligent Agent<br />

:PASSWORD FILE UTILITY<br />

تعرف باسم Orapwd وتستخدم في تكوین ال<br />

لتكوین ال Password File یجب اتباع القاعدة التالیة:‏<br />

.Password File<br />

$ORAPWD FILE = filename PASSWORD = yourpassword ENTRIES=number;<br />

حیث ان ال File ھو اسم الملف وموقعھ على الجھاز،‏ وال Password ھي كلمة السر الخاصة ب<br />

و ،SYSOPER وال Entries تمثل العدد الأقصى من المستخدمیین الذین یحق لھم الدخول<br />

الى ال<br />

SYSDBA<br />

.SYSOPER او SYSDBA في ھیئة Database<br />

عندما تقوم بالدخول كمستخدم ال SYSDBA فانك تدخل الى SYS Schema ولیس ال Schema الخاص<br />

بك وكذلك عند الدخول كمستخدم ال SYSOPER فانك تدخل الى .PUBLIC Schema<br />

تذكر:‏ ملف ال Password File من الفصل الأول.‏<br />

32


AUTHENTICATION METHODS<br />

للقیام بالمھمات الإداریة للبیانات "Database" یقوم الأوراكل بتكوین اثنین<br />

تكوین البیانات "Database" ھما SYS و ال SYSTEM الذین یملكان جمیع ال<br />

الأوراكل أو ما یسمى ال .DBA Role<br />

User Accounts عند بدایة<br />

Privileges في<br />

ملاحظة:‏ كلمة السر لل SYS عند بدایة تكوین البیانات ھي change_on_install اما كلمة السر لل<br />

.manager ھي SYSTEM<br />

ملاحظة‎2‎‏:‏ یعتبر ال SYS ھو المالك "Owner"<br />

ل<br />

.Database Data Dictionary<br />

ھناك طریقتتین یمكن السماح فیھا للمستخدمین الذین یملكون ال DBA Role الدخول الى ال<br />

Database<br />

وادارة البیانات ھما:‏ Password File Authentication وAuthentication .Operating System<br />

:PASSWORD FILE AUTHENTICATION<br />

لقد تطرقنا قبل قلیل لل Password File Utility والتي تستخدم في ھذا النظام،‏ ولتشغیل ھذا النظام یجب<br />

اتباع الخطوات التالیة:‏<br />

تكوین ملف ال<br />

.ORAPWD عن طریق ال Password File<br />

وضع ال REMOTE_LOGIN_PASSWORDFILE الذي ھو أحد مكونات ال<br />

.EXCLUSIVE الى الحالة Initialization Parameter File<br />

اعطاء "Grant"<br />

ال Privileges الخاص ب SYSDBA أو SYSOPER الى المستخدمین<br />

الجدد الذین تم اختارھم للحصول ال<br />

.DBA Role<br />

-1<br />

-2<br />

-3<br />

مثال تطبیقي<br />

الخطوة<br />

:2.1<br />

1: اكتب التالي في ال SQL PLUS<br />

$ORAPWD FILE=c:\oracle_home\ora92\dbs\myfile PASSWORD=newadmin<br />

ENTRIES=5;<br />

SHOW PARAMETER REMOTE_LOGIN_PASSWORDFILE;<br />

2: الخطوة<br />

اذا كانت الحالة غیر EXCLUSIVE فیجب تغییر الحالة في ال<br />

الخطوة<br />

.Initialization Parameter File<br />

:3<br />

GRANT SYSDBA TO Ahmad;<br />

للدخول الى ال Database اكتب التالي:‏<br />

CONNECT sys/newadmin AS SYSDBA;<br />

33


:OPERATING SYSTEM AUTHENTICATION<br />

بمجرد الدخول الى ال Operating System ‏(مثال:‏ الویندوز)‏ تستطیع الدخول الى ال Database دون<br />

الحاجة الى كلمة سر أو اسم مستخدم.‏<br />

ملاحظة:‏ یجب أن یكون ال REMOTE_LOGIN_PASSWORDFILE في حالة NONE لیعمل<br />

النظام.‏<br />

مثال تطبیقي<br />

:2.2<br />

بعد الدخول الى ال SQLPLUS اكتب التالي:‏<br />

CONNECT / AS SYSDBA;<br />

حالات ال<br />

:Remote_Login_Passwordfile<br />

یوجد ثلاثة حالات یمكن وضع ال Remote_Login_Passwordfile فیھا ھي:‏<br />

:EXCLUSIVE<br />

اعطاء "Grant"<br />

تحدد ان Instance واحد فقط یمكن ان یستخدم ال<br />

ال<br />

أخرین،‏ وھي ضروریة لنظام ال .Password File Authentication<br />

Password File ویمكن<br />

SYSOPER Privileges أو ال SYSDBA Privileges<br />

لمستخدمین<br />

:SHARED تحدد ان باستطاعة أكثر من Instance استخدام ال Password File ولكن لا یمكن<br />

اضافة مستخدمین أخریین لل SYSDBA أو SYSOPER والمستخدم الوحید المعرف في الملف<br />

ھو .SYS<br />

.Operating System Authentication ضروري لنظام :NONE<br />

•<br />

•<br />

•<br />

34


OPTIMAL FLEXIBLE ARCHITECTURE<br />

یعتبر ال OFA نظام لترتیب و توزیع ملفات ال Database المختلفة على حسب نوعھا أو استخدامھا،‏ وھو<br />

معتمد في جمیع الأنظمة التي یعمل بھا الأوراكل مثل .Windows, UNIX<br />

باستخدام نظام ال OFA یمكن ان نحقق عدة فوائد منھا سھولة التمییز بین الملفات المختلفة وسھولة ایجادھا<br />

وسھولة ادارة الأوراكل بتوزیع الملفات كلٌ‏ حسب نوعھ،‏ وتسھیل التحكم في التوسع الذي یطرأ على ال<br />

Database في المستقبل.‏<br />

و باستخدام نظام الOFA نستطیع:‏<br />

اعتماد اسلوب ثابت لتسمیة الملفات لكي نستطیع ایجاد الملفات بسھولة.‏<br />

تفریق ملفات ال<br />

.Oracle Database عن Oracle Software<br />

تفریق ملفات النسخ المختلفة "Versions" من الأوراكل.‏<br />

تفریق ملفات ال Data <strong>files</strong> عن ملفات ال Control Files عن ملفات ال<br />

.Redo Log Files<br />

•<br />

•<br />

•<br />

•<br />

2.6 رسم<br />

كما تلاحظ توزیع ملفات ال Database المختلفة الى مجلدات مختلفة.‏ فمثلاً‏ تجد ملف ال<br />

تحت مجلد ال بالمقابل تجد ملفات ال<br />

Password File<br />

Control Files تحت مجلد oradata وھكذا...‏<br />

dbs<br />

35


INITIALIZATION PARAMETER FILE<br />

لتشغیل ال Instance یجب توفر ال<br />

لنفس ال ھنالك نوعان من ال<br />

.Initialization Parameter File یمكن استعمال<br />

Initialization Parameter File ھما:‏<br />

.Database<br />

أكثر من ملف<br />

:PFILE یطلق علیھ اسم الملف الثابت File" "Static ویعرف باسم<br />

initSID.ora<br />

:SPFILE<br />

یطلق علیھ اسم الملف المقاوم File" "Persistent ویعرف باسم<br />

spfileSID.ora<br />

•<br />

•<br />

ملاحظة:‏ ال SID عبارة عن رمز لإسم ال .Instance فاذا كان اسم ال "DbB" Instance فیكون اسم<br />

الملف<br />

.(initDbB.ora)<br />

بعض محتویات ال<br />

:Initialization Parameter File<br />

SGA وال Instance<br />

العوامل "Parameters"<br />

الخاصة بال<br />

اسم ال Database التي یعمل علیھ ال .Instance<br />

اسماء و مواقع ال<br />

بیانات عن ال<br />

تحدید إما Archive<strong>log</strong>أو<br />

مثل ال .SGA_MAX_SIZE<br />

.Control Files<br />

.Undo Segment<br />

.Noarchive<strong>log</strong><br />

•<br />

•<br />

•<br />

•<br />

•<br />

2.7 رسم<br />

)<br />

:PFILE<br />

ھو ملف من نوعیة ال TXT الذي یمكن فتحھ وتغییره بواسطة ال Notepad وغیرھا من برامج الكتابة.‏<br />

یتم قراءة محتویاتھ عند بدایة تشغیل ال Instance ومعظم العوامل "Parameters" الموجودة داخلھ لا<br />

تعمل بشكل داینامیكي یستلزم اغلاق وفتح ال Instance من جدید لكي یحدث التغییر)‏ عدا بعض العوامل<br />

التي یمكن تعدل داینامیكیاً‏ في الذاكرة ولكن تظل في ال PFILE كما ھي ‏(أي انھ عند<br />

تشغیل ال Instance مرة أخرى یرجع الوضع الى قبل التعدیل الداینامیكي).‏<br />

یوفر ال OUI ملف مبدئي عند بدایة تكوین ال Database اسمھ init.ora یمكن استعمالھ لتكوین ال<br />

"Parameters"<br />

.PFILE<br />

36


بعض مكونات ال :PFILE<br />

db_block_size=4096<br />

db_cache_size=33554432<br />

open_cursors=300<br />

background_dump_dest=C:\oracle2\ora92\admin\dbname\bdump<br />

core_dump_dest=C:\oracle2\ora92\admin\dbname\cdump<br />

timed_statistics=TRUE<br />

user_dump_dest=C:\oracle2\ora92\admin\dbname\udump<br />

db_domain=oracle<br />

remote_<strong>log</strong>in_passwordfile=EXCLUSIVE<br />

control_<strong>files</strong>=("C:\oracle2\ora92\oradata\dbname\CONTROL01.CTL",<br />

"C:\oracle2\ora92\oradata\dbname\CONTROL02.CTL",<br />

"C:\oracle2\ora92\oradata\dbname\CONTROL03.CTL")<br />

compatible=9.0.0<br />

db_name=dbname<br />

instance_name=dbname<br />

java_pool_size=33554432<br />

large_pool_size=1048576<br />

shared_pool_size=33554432<br />

processes=150<br />

fast_start_mttr_target=300<br />

sort_area_size=524288<br />

undo_management=AUTO<br />

undo_tablespace=UNDOTBS<br />

قواعد ال :PFILE<br />

كل العوامل "Parameters" اختیاریة،‏ أي اذا لم یحدد ال DBA قیمة العوامل "Parameters"<br />

أو لم یتم كتابة العامل "Parameter" في ملف ال PFILE یقوم الأوراكل بتحدید العامل<br />

"Default Value" و تكون قیمتھ ھي القیمة المحددة سلفاً‏ من قبل الأوراكل "Parameter"<br />

ترتیب العوامل "Parameters" في ال PFILE غیر مھم.‏<br />

اذا كان ھناك أكثر من قیمة للعامل "Parameter" الواحد فیجب وضع القیم داخل قوسین و<br />

تفریقھم بفاصلة كما في<br />

.Control_Files<br />

تحدد قیمة العامل "Paramter" بھذه الصیغة<br />

یمكن استعمال<br />

الأوراكل).‏<br />

‏(العامل =<br />

(#)<br />

القیمة).‏<br />

في الملف لوضع ملاحظات داخل الملف ‏(ھذه البیانات لل DBA ولا یقرأھا<br />

•<br />

•<br />

•<br />

•<br />

•<br />

37


)Oracle Server<br />

:SPFILE<br />

فتحھ و تعدیلھ)‏ ویمكن تعدیل جمیع<br />

ھو ملف من نوعیة ال binary الذي یقوم بادارتھ ال<br />

قیم العوامل "Parameters" الموجودة داخلھ بشكل داینامیكي ‏(اي باستخدام ال (ALTER SYSTEM<br />

بحیث یتم تعدیل بیانات ال SPFILE في الذاكرة أو الملف أو الأثنین معاً‏ ‏(أي انھ عند تشغیل ال<br />

مرة أخرى تكون التغیرات التي اجریت على ال SPFILE بواسطة ال ALTER SYSTEM موجودة<br />

وثابتة).‏<br />

لا یقوم الأوراكل بتكوین ملف SPFILE ابتدائي كما یحدث مع ال PFILE ولكن یتم تكوین ال SPFILE<br />

من ال PFILE كا سیأتي شرحھ بعد قلیل.‏<br />

لتعدیل العوامل "Parameters" داخل SPFILE یجب اتباع القاعدة التالیة:‏<br />

Instance<br />

ALTER SYSTEM SET PARAMETER = VALUE [SCOPE = SCOPE_VALUE];<br />

ملاحظة:‏ استخدام ال ] [ في القواعد یدل على أن ھذا الجزء اختیاري و في حالة لم یتم كتابتھ یختار الأوراكل<br />

ال وال Default یكون أحد الحلات الأكثر شیوعاً‏ وھي تم اختیارھا مسبقاً‏ من قبل مبرمجي<br />

الأوراكل.‏<br />

. Default<br />

أما حالات<br />

ال SCOPE_VALUE<br />

ثلاث ھي:‏<br />

:MEMORY یتم تغییر قیمة "Value" ال Parameter فقط في الذاكرة،‏ أي عند تشغیل ال<br />

Instance مرة أخرى تلغى التغیرات.‏<br />

:SPFILE یتم تغییر قیمة "Value" ال Parameter في ملف ال SPFILE فقط.‏<br />

"Value" یتم تغییر قیمة :BOTH<br />

معاً.‏<br />

للعامل "Parameter"<br />

في ملف ال SPFILE والذاكرة<br />

•<br />

•<br />

•<br />

ملاحظة:‏ اذا لم یتم كتابة الجزء SCOPE=SCOPE_VALUE فیعتبر الأوراكل انھا<br />

BOTH) ھي ال<br />

.(Default<br />

SCOPE=BOTH<br />

مثال تطبیقي<br />

:2.3<br />

ALTER SYSTEM SET SHARED_POOL_SIZE = 33554432<br />

SCOPE=SPFILE;<br />

بعض مكونات ال :SPFILE<br />

*. background_dump_dest='C:\oracle2\ora92\admin\dbname\bdump'<br />

*. compatible='9.0.0' *.db_block_size=4096 *.db_cache_size=33554432<br />

*. db_domain='oracle'<br />

………………<br />

38


لیست كل العوامل "Parameters" في ال SPFILE اختیاریة،‏ یوجد سبع عوامل "Parameters" یجب<br />

ان تحدد ھي:‏<br />

.BACKGROUND_DUMP_DEST<br />

USER_DUMP_DEST<br />

DB_NAME<br />

SHARED_POOL_SIZE<br />

COMPATIBLE<br />

DB_BLOCK_BUFFERS<br />

CONTROL_FILES<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

سوف یتم التطرق لاحقاً‏ للعوامل "Parameters" الجدیدة لاحقاً.‏<br />

:Create SPFILE<br />

SYSDBA ROLE أو<br />

یمكن تكوین ال SPFILE من ال PFILE<br />

باتباع القاعدة التالیة:‏<br />

اذا كان المستخدم یملك<br />

SYSOPER Role<br />

CREATE SPFILE [='location and name'] FROM PFILE[='location and name'];<br />

یمكن اھمال ذكر اسم و موقع ملف ال SPFILE في القاعدة اذ یمكن للأوراكل تكوین الأسم على النمط<br />

وفي الموقع ال Default وھو ضمن المجلد كذلك الحال بالنسبة لل<br />

المذكور سابقاً‏<br />

PFILE حیث یختار الأوراكل الملف المعرف بالأسم initSID.ora وضمن المجلد<br />

.dbs<br />

.dbs<br />

(spfileSID.ora)<br />

ملاحظة:‏ قد یختلف الموقع ال Default من نسخة أوراكل الى أخرى.‏ بعض نسخ الأوراكل تكَون الملف ضمن<br />

المجلد<br />

.database<br />

مثال تطبیقي<br />

:2.4<br />

من ال SQL PLUS<br />

CONNECT / AS SYSDBA;<br />

CREATE SPFILE FROM PFILE;<br />

39


یمكن تعدیل ال SPFILE من ال CONSOLE باتخاذ الخطوات التالیة:‏<br />

ادخل الى .Enterprise Manager Console<br />

اختر الوضع .Standalone<br />

اضغط على قائمة ال Database ثم قائمة ‏"اسم ال "Database<br />

یطلب منك الاسم و كلة السر.‏<br />

اكتب اسم ال SYSTEM وكلمة السر الخاص بھ.‏<br />

تأكد من وضع<br />

اضغط على قائمة ال<br />

اضغط على<br />

اضغط على<br />

.SYSDBA الى الحالة Connect as<br />

.Instance<br />

.Configuration<br />

.All Initialization Parameter<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

2.8 رسم<br />

40


START UP A DATABASE<br />

یوجد ثلاث حالات یمكن أن نبدأ تشغیل ال Database ولكل منھا خاصیتھ والوظائف التي یمكن اجرائھا في<br />

تلك الحالة،‏ الحالات الثالثة بالترتیب<br />

.NOMOUNT , MOUNT , OPEN :<br />

:NOMOUNT<br />

تسمى عملیة<br />

ال<br />

Staring the Instance<br />

.Oracle Database<br />

یمكن القیام بوظیفتین في ھذه الحالة ھما:‏<br />

لأنھ في ھذه المرحلة فقط یبدأ تشغیل ال Instance دون باقي أجزاء<br />

تكوین ال Database عبر جملة ال .(CREATE DATABASE) SQL<br />

تكوین أواعادة تكوین ملفات ال<br />

.Control Files<br />

•<br />

•<br />

سوف یتم التطرق لاحقاً‏ لكیفیة تكوین ال Database باسخدام جمل ال .SQL<br />

یتم في ھذه المرحلة عدة أمور ھي:‏<br />

تتم قراءة ملف ال Initialization Parameter File بحیث یبحث الأوراكل على ملف<br />

إن لم یجد یبحث عن PFILE وإن لم یجد تتم قراءة الملف .init.ora<br />

حجز مساحة من الذاكرة لل .SGA<br />

بدأ ال<br />

وملفات تسمى ال<br />

فتح ملف یسمى<br />

.Trace Files<br />

.Background Processes<br />

alertSID.<strong>log</strong><br />

SPFILE<br />

•<br />

•<br />

•<br />

•<br />

سوف یتم التطرق لاحقاً‏ لل alertSID.<strong>log</strong><br />

و .Trace Files<br />

ملاحظة:‏ یجب تحدید قیمة العامل "Parameter" DB_NAME لكي یعمل ال .NOMOUNT<br />

:MOUNT<br />

في ھذه المرحلة یمكن القیام بوظائف مھمة مثل:‏<br />

.Data Files<br />

تغییر "Rename"<br />

اسماء ال<br />

امكانیة وضع ال Database تحت وضعیة ال ARCHIVELOG أو .NOARCHIVELOG<br />

عمل صیانة "Recovery" لل<br />

.Database<br />

•<br />

•<br />

•<br />

یتم في ھذه المرحلة عدة أمور ھي:‏<br />

فتح وقراءة ملفات ال<br />

ربط ال<br />

.Control Files<br />

Instance بال Database<br />

الذي سوف یعمل علیھا.‏<br />

•<br />

•<br />

41


:OPEN<br />

ھي الحالة العادیة التي تم العمل فیھا بواسطة ال SQLPLUS ویتم اجراء تعدیل وحذف واضافة بیانات<br />

وغیرھا من المھام.‏<br />

یتم في ھذه المرحلة عدة أمور ھي:‏<br />

فتح ال<br />

فتح ال<br />

. Online Data Files<br />

.Online Redo Log Files<br />

•<br />

•<br />

Data Files وال<br />

Redo Files او في حالة حذفھا أو نقلھا من مواقعھا المحددة<br />

في حالة فشل فتح ملفات ال<br />

في ال Control Files فلا یمكن ان تعمل الحالة .OPEN<br />

ملاحظة:‏ اسماء ومواقع ال Control Files مخزنة في ال<br />

Redo Log Files فھي مخزنة في ال<br />

اسماء و مواقع ال<br />

Initialization Parameter Files اما<br />

.Control Files<br />

Data Files وال<br />

:STARTUP Command<br />

لتشغیل ال Database في احدى الحلات المذكورة سابقاً‏ تستعمل القاعدة التالیة:‏<br />

STARTUP [FORCE] [RESTRICT] [PFILE='location and name']<br />

[OPEN [recover] [database’s name] | MOUNT | NOMOUNT ] ;<br />

."OR" (<br />

ملاحظة:‏ استخدام ال |<br />

ان یكتبا معاً.‏<br />

في القواعد یدل على انھا<br />

) وأ فمثلاً‏ لا یمكن لل MOUNT و ال OPEN<br />

: أوامر القاعدة<br />

:PFILE سبق ذكر ان الأوراكل یبحث عن الملف عند بدایة مرحلة ال NOMOUNT ولكن یمكن للمستخدم<br />

تحدید ملف محدد عوضاً‏ على ان یقوم الأوراكل بالبحث عنھ.‏<br />

:RECOVER خاصة فقط بمرحلة ال OPEN اذ لا یمكن كتابتھا مع ال ،MOUNT وعند استخدامھا<br />

یقوم الأوراكل بعمل عملیة ال RECOVERY للبیانات.‏<br />

:RESTRICT تحدد المستخدمین الذین یحق لھم الدخول الى ال Database وھم من یملك ال<br />

Restricted Session Privilege التي سوف یتم التطرق لھا لاحقاً.‏<br />

:FORCE اذا كان ال Instance یعمل في احد الحالات فیمكن اغلاقھ ثم تشغیلھ مباشرة في الحالة العادیة.‏<br />

اذاً‏ ھي مثل عملیة ال "Restart" في الویندوز.‏<br />

42


مثال تطبیقي<br />

:2.5<br />

لاستخدام قاعدة ال STARTUP یمكن القیام بالتالي:‏<br />

ادخل الى ال SQLPLUS أو عبر ال<br />

ادخل اسم المستخدم و كلمة السر.‏<br />

یجب الدخول الى SYSDBA عن طریق<br />

اغلق ال Database بواسطة الجملة التالیة:‏<br />

.Command Prompt<br />

CONNECT \ AS SYSDBA;<br />

SHUTDOWN;<br />

-1<br />

-2<br />

-3<br />

-4<br />

STARTUP;<br />

STARTUP MOUNT;<br />

STARTUP NOMOUNT;<br />

في ھذه الجملة یعتبر الأوراكل انھا OPEN باعتبارھا ال<br />

.Default<br />

:ALTER DATABASE Command<br />

یمكن ان تستخدم في عدد من الوظائف منھا<br />

:<br />

-1<br />

تغییر حالة ال<br />

Database من :<br />

.MOUNT الى NOMOUNT<br />

OPEN الى MOUNT<br />

•<br />

•<br />

یمكن استخدام أمر ال ALTER DATABASE باتباع القاعدة التالیة:‏<br />

ALTER DATABASE [database's name] MOUNT | OPEN;<br />

مثال تطبیقي<br />

:2.6<br />

بینما یتم استخدام حالة ال NOMOUNT یمكن التحویل الى ال MOUNT بكتابة التالي:‏<br />

ALTER DATABASE MOUNT;<br />

2- لوضع ال Database في حالة القراءة فقط Database" :"Read-Only<br />

یمكن فتح ال Database في حالة OPEN بدون السماح بتغییر البیانات في ال<br />

القاعدة التالیة:‏<br />

Database باستخدام<br />

ALTER DATABASE [database's name] OPEN READ WRITE | READ ONLY;<br />

مع العلم أن READ WRITE ھي ال<br />

.Default<br />

43


مثال تطبیقي<br />

بینما ال<br />

:2.7<br />

"READ WRITE" في الحالة العادیة Database<br />

یمكن التحویل بكتابة الجملة التالیة:‏<br />

ALTER DATABASE OPEN READ ONLY;<br />

من الوظائف التي یمكن القیام بھا بینما ال Database في وضعیة ال :READ ONLY<br />

استخراج بیانات عبر جمل ال .SQL<br />

تغییر وضعیة ال<br />

القیام بعملیة ال Recovery على ال<br />

وال<br />

.Tablespaces<br />

.Online و Offline بین Data Files<br />

Offline Data Files<br />

•<br />

•<br />

•<br />

:Restricted Mode<br />

یمكن تشغیل ال Database في ھذه الحالة لإعطاء المجال للمستخدمین الذي یملكون<br />

Restricted Session Privilege من القیام بمھات خاصة.‏<br />

مثال تطبیقي 2.8:<br />

لتشغیل ال Database في حالة ال : Restricted<br />

یمكن تحویل الحالة بشكل داینامیكي باستخدام:‏<br />

STARTUP RESTRICTED;<br />

ALTER SYSTEM ENABLE RESTRICTED SESSION;<br />

ALTER SYSTEM DISABLE RESTRICTED SESSION;<br />

(Restricted<br />

:Kill a Session<br />

یرید ال DBA ‏(أو من یملك الصلاحیات)‏ باخراج<br />

في بعض الأوقات ‏(وخاصة بعد وضع ال<br />

بعض المستخدمین من ال للقیام ببعض المھمات.‏ یمكن القیام بھذه المھمة عبر:‏<br />

ALTER SYSTEM KILL SESSION 'SID, SERIAL#';<br />

Database<br />

ال SID ھو رقم ال Session الخاص ‏(یعطى لكل Session عند بدایة تشغیلھ رقم خاص بھ)‏ یمكن استخراجھ<br />

من .V$SESSION<br />

ال SERIAL# ھو رقم أخر ممیز "Unique" یعطى لكل Session ویمكن استخراجھ من ایضاً‏ من ال<br />

.V$SESSION<br />

44


مثال تطبیقي<br />

:2.9<br />

یمكن القیام بعملیة Session" "Kill باتخاذ الخطوات التالیة:‏<br />

•<br />

یجب أن یكون ھنالك أكثر من مستخدم یعملون على ال Database في نفس الوقت،‏ للقیام بذلك<br />

ادخل الى SQLPLUS أولاً‏ باسم مستخدم ثم افتح ال SQLPLUS مرة أخرى وادخل باسم<br />

مستخدم اخر.‏<br />

استخدم SYSTEM و استخدم username = SCOTT , password =TIGER<br />

• یتم كتابة الجملة التالیة من ال :SYSTEM<br />

SELECT USERNAME, SID, SERIAL#<br />

FROM V$SESSION<br />

WHERE USERNAME = 'SCOTT';<br />

• یظھر الناتج التالي ‏(یختلف من جھاز الى أخر)‏<br />

USERNAME<br />

SID SERIAL#<br />

------------------ ---------- ------------------------------<br />

SCOTT 9 51<br />

یكتب مستخدم ال SYSTEM التالي:‏<br />

ALTER SYSTEM KILL SESSION '9, 51';<br />

یتم اغلاق ال Session الخاص بالمستخدم .SCOTT یقوم ال PMON بمھامھ مباشرة لمعالجة<br />

الأثار التي یمكن ان تنجم عن أغلاق ال Session الخاص بالمستخدم SCOTT واذا قام SCOTT<br />

بطلب جملة SQL تظھر الرسالة التالیة:‏ YOUR SESSION HAS BEEN KILLED<br />

•<br />

•<br />

2.9 رسم<br />

45


SHUTTING DOWN THE DATABASE<br />

یمكن اقفال ال Database في اربع حالات ھي:‏ TRANSACTIONAL, NORMAL,<br />

.IMMEDIATE, ABORT<br />

ملاحظة:‏ عادةً‏ ما تكون عملیة اغلاق ال Database من أجل عملیة ال .Backup<br />

ملاحظة‎2‎‏:‏ لإغلاق ال<br />

.SYSOPER أو SYSDBA تحتاج الى Database<br />

لإغلاق ال Database في احدى الحلات المذكورة تستعمل القاعدة التالیة:‏<br />

SHUTDOWN [NORMAL] | [TRANSACTIONAL] | [IMMEDIATE] | [ABORT];<br />

مع العلم أن NORMAL ھي ال ،Default أي عند كتابة ال SHUTDOWN بدون أي من الحالات<br />

الأربع یفترض الأوراكل أنھا الحالة ال<br />

.Default<br />

:NORMAL<br />

في حالة اغلاق ال Database بھذه الحالة یتم التالي:‏<br />

لا یسمح بدخول مستخدمیین جدد لل .Database<br />

لا یغلق ال Database قبل خروج جمیع المستخدمین منھ،‏ أي ان الأوراكل ینتظر حتى یفرغ<br />

المستخدمیین من مھامھم ثم خروجھم لكي یتم اعلاق ال<br />

یتم نقل بیانات ال Redo Log Buffer الى ال<br />

یتم نقل بیانات ال<br />

في حال وجود عملیات لم یتم حدوث COMMIT فیحدث لھا .ROLLBACK<br />

انھاء وجود ال<br />

ازالة مساحة ال SGA من الذاكرة.‏<br />

اغلاق ال Database ثم اغلاق ال .Instance<br />

.Database<br />

.Redo Log Files<br />

.Data Files الى ال Database Buffer Cache<br />

.Background Processes<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

ملاحظة:‏ لا یستلزم ان تتم عملیة Recovery للبیانات التي كانت موجودة في ال Instance باعتبار انھا<br />

نقلت الى الملفات الفیزیائیة.‏ وعملیة ال Recovery ھي العملیة المشابھھ لوظائف الPMON و SMON<br />

.<br />

:TRANSACTIONAL<br />

في حالة اغلاق ال Database بھذه الحالة یتم جمیع خطوات ال NORMAL عدا الإختلافات التالیة:‏<br />

لا یغلق ال Database قبل انھاء المھمات التي طلبھا جمیع المستخدمین منھ،‏ أي أن الأوراكل ینتظر<br />

حتى یفرغ المستخدمیین من مھامھم التي طلبوھا قبل حدوث أمر الاغلاق ولا ینتظر أن یخرج<br />

المستخدمین من ال Database لتتم عملیة الاغلاق كما یحدث في ال .NORMAL<br />

لا یسمح بالقیام بمھمات جدیدة من قبل المستخدمین بعد أمر الإغلاق.‏<br />

یتم اخراج المستخدم من ال Database عند انتھاء المھمات التي طلبت قبل عملیة الاغلاق.‏<br />

•<br />

•<br />

•<br />

ملاحظة:‏ لا یستلزم ان تتم عملیة Recovery عند تشغیل ال Instance مرة أخرى.‏<br />

46


:IMMEDIATE<br />

في حالة اغلاق ال Database بھذه الحالة یتم جمیع خطوات ال NORMAL عدا الإختلافات التالیة:‏<br />

یتم اغلاق ال Database فوراً‏ دون انتظار خروج المستخدمین أو انھاء مھامھم التي طلبوھا قبل<br />

أمر الاغلاق.‏<br />

المھمات التي تم طلبھا قبل أمر الاغلاق تلغى وأیة تعدیلات طرأت على البیانات بسببھا تزال وتمسح<br />

‏(بشرط ان تكون المھمة ما تزال تعمل عند أمر الإغلاق)‏ ویحدث لھا .ROLLBACK<br />

•<br />

•<br />

ملاحظة:‏ لا یستلزم ان تتم عملیة Recovery عند تشغیل ال Instance مرة أخرى.‏<br />

:ABORT<br />

في بعض الحلات الخاصة عند عدم استطاعة الأوراكل اغلاق ال Database بأحد الحلات الثلاث السابقة یتم<br />

استخدام ھذه الحالة.‏<br />

في حالة اغلاق ال Database بھذه الحالة یتم التالي:‏<br />

یتم اغلاق ال Database فوراً‏ دون انتظار خروج المستخدمین أو انھاء مھامھم التي طلبوھا قبل<br />

أمر الاغلاق.‏<br />

المھمات التي تم طلبھا قبل أمر الاغلاق تلغى و أیة تعدیلات طرأت على البیانات بسببھا تزال وتمسح<br />

‏(بشرط ان تكون المھمة ما تزال تعمل عند أمر الإغلاق)‏ ولا یحدث لھا .ROLLBACK<br />

لا یتم نقل بیانات ال Redo Log Buffer الى ال<br />

لا یتم نقل بیانات ال<br />

المھمات التي لم یحدث لھا COMMIT لا یحدث لھا .ROLLBACK<br />

Instance بشكل فوري.‏<br />

یتم اغلاق ال<br />

.Redo Log Files<br />

Data Files الى ال Database Buffer Cache<br />

Database وال<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

ملاحظة:‏ یستلزم ان تتم عملیة Recovery عند تشغیل ال Instance مرة أخرى.‏<br />

ملاحظة‎2‎‏:‏ تأثیرات ال STARTUP FORCE و عند حدوث أي عطل في ال Instance یؤدي الى اغلاقھ<br />

ھي ذات التأثیرات<br />

لل .SHUTDOWN ABORT<br />

47


DIAGNOSTIC FILES<br />

تعتبر ملفات ال Diagnostic ملفات مھمة لإدارة ال Instance لأنھا تخزن بیانات حول العملیات المختلفة<br />

التي تجرى على ال یوجد عدد من ملفات ال Diagnostic منھا:‏<br />

.Database<br />

:ALERT LOG FILE<br />

.Database<br />

یتم تخزین البیانات حول العملیات أو المھام الیومیة التي تجرى على ال<br />

•<br />

Background<br />

:BACKGROUND TRACE FILES<br />

.Processes<br />

یتم تخزین بیانات حول ال<br />

•<br />

:USER TRACE FILE<br />

یتم تخزین بیانات حول الأخطاء الفادحة التي یقوم بھا المستخدمون<br />

والتي قد تؤدي الى تعطل ال Database وبذلك تساعد على اكتشاف الاسباب التي أدت لتعطل ال<br />

.Database<br />

•<br />

:ALERT LOG FILE<br />

لكل Instance ملف Alert Log بحیث اذا لم یقم المستخدم بتكوینھ یقوم الأوراكل خلال بدأ ال<br />

بتكوین الملف ‏(خلال مرحلة ال (NOMOUNT وھو یعرف باسم<br />

ھو المرجع الأول في البحث عن الأخطاء ‏(تشخیص)‏ التي حدثت في ال Database بشكل یومي.‏<br />

موقع ال<br />

Instance<br />

Alert Log یعتبر ال .alertSID.<strong>log</strong><br />

.BACKGROUND_DUMP_DEST "Parameter" محدد من قبل العامل Alert File<br />

تذكر:‏ جاء ذكر العامل "Parameter" BACKGROUND_DUMP_DEST في موضوع ال<br />

.SPFILE<br />

یتم تخزین البیانات عدیدة في<br />

Alert Log File منھا:‏<br />

Instance<br />

.Background Processes<br />

توقیت بدأ تشغیل ال وتوقیت الاغلاق.‏<br />

توقیت بدأ تشغیل ال<br />

بیانات حول ال .Log Switch<br />

بیانات حول الاخطاء التي<br />

بیانات حول تكوین ال .Tablespaces<br />

بیانات حول تكوین ال<br />

جمل ال SQL التي تحتوي على الأمر .ALTER<br />

Online Redo Log File الذي یتم العمل علیھ من قبل ال<br />

رقم ال<br />

ظھرت Messages" ."Error<br />

.Undo Segments<br />

Log Sequence الخاص بال<br />

LGWR<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

سوف یتم التطرق لاحقاً‏ لل .Undo Segments<br />

تذكر:‏ جاء ذكر ال<br />

Log Sequence Number في الفصل الأول.‏<br />

48


.Background Processes<br />

:BACKGROUND TRACE FILES<br />

یتم تكوین الملفات فقط عندما<br />

یتم تخزین بیانات حول الاخطاء التي تحدثھا ال<br />

تحدث الأخطاء ‏(أي انھ في حال عدم حدوث اخطاء لا تكون الملفات متواجده).‏<br />

موقع الملفات محدد من قبل العامل "Parameter" .BACKGROUND_DUMP_DEST<br />

:USER TRACE FILE<br />

یتم تخزین بیانات حول الأخطاء الفادحة التي یقوم بھا المستخدمون والتي قد تؤدي الى تعطل ال<br />

وبیانات حول ال SQL التي تم طلب مراقبتھا ."Trace" موقع الملف محدد من قبل العامل<br />

Database<br />

.USER_DUMP_DEST "Parameter"<br />

یتحكم في حجم الملف العامل "Parameter" MAX_DUMP_FILE_SIZE و المحدد ب 10 میغا<br />

بایت.‏ یمكن تشغیل أو ایقاف الملف في ال Session الواحد او في ال Instance ‏(كل ال التي<br />

موجودة في ال (Instance عبر كتابة التالي:‏<br />

في ال :Session<br />

في ال<br />

Sessions<br />

ALTER SESSION SET SQL_TRACE = TRUE;<br />

:Instance<br />

او عند وضع قیمة العامل "Parameter" التالي في ال<br />

:Initialization Parameter File<br />

SQL_TRACE = TRUE<br />

وبذلك یتم تعقب "Trace" جمیع جمل ال SQL وتسجیل بیانات حولھا والأخطاء التي سببتھا.‏<br />

تذكر:‏ جاء ذكر العامل "Parameter" USER_DUMP_DEST في موضوع ال .SPFILE<br />

.(trc) بالرمز Trace Files<br />

فمثلاً‏ ملفات ال Background Trace تسمى بالقاعدة<br />

تعرف ملفات ال<br />

التالیة:‏ ) كما الملفات الموجودة في نسخة الأوراكل الخاصة بي)‏<br />

dbname) dbnamePMON.trc ھو اسم ال Instance في جھازي والذي یحدد عند عملیة التنصیب).‏<br />

sidPROCESSNAME.trc مثل<br />

وكذلك الحال بالنسبة لملفات ال User Trace في تسمى بالقاعدة التالیة في نسخة الأوراكل الخصة بي:‏<br />

.ORA00853.trc مثل ORAPID.trc<br />

ملاحظة:‏ قد تختلف قاعدة التسمیة من نسخة أوراكل الى أخرى ولكن ال Trace Files تنتھي دائماً‏ ب<br />

(.trc)<br />

49


ORACLE MANAGED FILES (OMF)<br />

تسھل ال OMF ادارة عدد من ملفات الأوراكل اذ یكفي تحدید مواقع الملفات فیقوم الأوراكل بالاھتمام<br />

بالملفات و تكوینھا وحذفھا وتسمیتھا.‏ یمكن تحدید مواقع الملفات باستخدام عاملین "Parameters" اثنین<br />

جدیدن من عوامل ملف ال Initialization Parameter File اضیفا في النسخة التاسعة من الأوراكل<br />

"Oracle9i" ھما:‏<br />

:DB_CREATE_FILE_DEST<br />

الذي یحدد مواقع ال<br />

.Data Files<br />

:DB_CREATE_ONLINE_LOG_DEST_n<br />

.Control Files<br />

خمسة.‏<br />

یحدد مواقع ملفات ال Redo Log وال<br />

یدل الحرف (n) على رقم العامل "Parameter" بیحث یكون من واحد الى<br />

•<br />

•<br />

ملاحظة:‏ یمكن استخدام أحدھما أو كلاھما,‏ ولا یشترط استخدام الاثنین معاً.‏<br />

ترتبط كل Tablespace بملف من ملفات ال<br />

اي انھ عند حذف ال Tablespace یجب حذف ملف ال<br />

Tablespace ارتباط بملفات من<br />

Data Files المرتبط معھا وإلا قد یسبب مشاكل عند عملیة ال ،Backup اذ انھ لا فائدة من حفظ ال<br />

Files باعتبار ال Tablespace تم حذفھا.‏<br />

یجب على ال DBA البحث عن الملف المرتبط وحذفھ بطریقة عادیة ‏(كما یتم حذف أي ملف في الویندوز أو<br />

أو غیرھا).‏ أما اذا تم استخدام طریقة ال OMF یقوم الأوراكل بحذف ال<br />

ال DBA أي بطریقة أوتوماتیكیة وھذه أحد فوائد استخدام ال .OMF<br />

(Physical-Logical ) Data Files بحیث یكون لكل<br />

.Data Files<br />

Data<br />

Data Files دون تدخل<br />

ال UNIX<br />

یتم استخدام<br />

(ora_)<br />

في بدایة اسماء ملفات ال OMF للدلالة علیھا.‏<br />

مثال تطبیقي<br />

:2.10<br />

DB_CREATE_FILE_DEST = 'C:\oracle\ora92\oradata\u01'<br />

DB_CREAE_ONLINE_LOG_DEST_1 = 'C:\oracle\ora92\oradata\u02'<br />

DB_CREAE_ONLINE_LOG_DEST_2 = 'C:\oracle\ora92\oradata\u03'<br />

یمكن تغییر القیم "Values" بشكل داینامیكي باستخدام .ALTER SYSTEM<br />

ALTER SYSTEM SET<br />

DB_CREATE_FILE_DEST='C:\oracle\ora92\oradata\u04';<br />

(2.10<br />

بعد ان یتم تحدید العوامل "Parameter" ‏(كما في المثال تتم عملیة تكوین ال Database باستخدام<br />

اذا فشل تكوین ال Database یقوم الأوراكل بحذف الملفات التي تكونت<br />

من خلال .OMF<br />

أمر .CREATE DATABASE<br />

یمكن الحصول على معلومات حول الملفات التي تكونت بطریقة ال OMF من DBA_DATAFILE و<br />

.V$LOGFILE<br />

50


CREATING A DATABASE &<br />

USING THE DATA DICTIONARY<br />

51


PRE-CREATING STAGES<br />

عملیة تكوین ال Database تحتاج الى تخطیط وتحضیر مسبق،‏ یجب على ال DBA اعداد التالي:‏<br />

الحجم الكافي لكل من القرص الصلب Disk" "Hard و الذاكرة في السیرفر.‏<br />

دراسة نوعیة النظام System" "Operating الموجود في السیرفر.‏<br />

وضع خطة لتوزیع الملفات في موقع التخزین لحمایة ملفات ال<br />

تحدید العوامل<br />

یمكن تغییره بعد عملیة التنصیب.‏<br />

اختیار نظام الحمایة<br />

.Database<br />

DB_BLOCK_SIZE وخاصة ال Initialization Parameters<br />

(Password File او Operating System )<br />

الذي لا<br />

و توفر ال .SYSDBA<br />

معرفة اذا كان یراد تكوین Database جدیدة أو یراد نقل ال Database الموجودة من نسخة<br />

أوراكل أقدم الى نسخة أجد ، عند ذلك یجب استخدام ال<br />

Data Migration Assistant<br />

تحدید الطریقة التي سوف یتم بھا تكوین ال Database الجدیدة ، إما عن طریق استخدام<br />

CREATE DATABASE في ال SQL ‏(تسمى الطریقة الیدویة)‏ او عن طریق<br />

.Configuration Assistant<br />

وضع خطة عملیة دوریة لإجراء عملیة ال .Backup<br />

Database<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

نقاط مھمة:‏<br />

-1<br />

ینصح بتوزیع ملفات ال Control File على مواقع مختلفة أو أقراص صلبة مختلفة.‏<br />

2- ینصح بتوزیع الملفات المتشابة في مجموعات ال Redo Log الى مواقع مختلفة أو أقراص مختلفة.‏<br />

-4<br />

3- وضع نظام لتسمیة الملفات لیتسنى ایجادھا بسھولة.‏<br />

تفریق عناصر ال Database التي لھا مراحل حیاة مختلفة(قصیرة أو طویلة)‏ الى مواقع مختلفة لكي یقل<br />

ما یعرف باسم .Disk Fragmentation<br />

5- تفریق ال Tables وال Indexes الى Tablespaces مختلفة لتنظیم عملیة ال .Input/Output<br />

52


DATABASE CONFIGURATION ASSISTANT<br />

یمكن عبر ال(‏DBCA‏)‏<br />

القیام بالتالي:‏ Options, Create a Database, Configure Database<br />

.Delete a Database, and Manage Templates<br />

Database<br />

:CREATE A DATABASE<br />

للقیام بتكوین Database جدیدة أو القالب ."Template" والقالب عبارة عن اختیار ال<br />

Options وحفظھا لكي یتسنى استخدامھا في موقع أخر.‏ مثلاً‏ یمكن ان یقوم الفرع الأساسي للشركة بتكوین<br />

قالب ال Database وتوزیعھ على الفروع لتكوین Databases متشابھ في جمیع الفروع.‏<br />

ھما:‏<br />

یمكن تكوین نوعین من<br />

القوالب "Templates"<br />

بدون ال :Data Files فقط اختیارت ال Database دون الملفات ‏(لمعرفة الاخیارات اضغط على<br />

تكمن فائدتھ انھ یمكن تغییر جمیع الأختیارات وال Initialization<br />

."Template" بعد تكوین القالب Parameters<br />

Data<br />

.("Show Details"<br />

مع ال :Data Files یكون القالب متكوناً‏ من اختیارات ال Database مع وجود ملفات ال<br />

Redo Log Groups بشكل أوتوماتیكي،‏ یمكن تغییر<br />

یتم تكوین ال<br />

لا یمكن حذف ال Data Files وتكوینھا من جدید وكذلك<br />

اسماء ومواقع ال<br />

ینطبق الحال على ،Tablespaces ولا یمكن تعدیل ال<br />

Initialization Parameters بعد تكوین<br />

Control Files و ال<br />

،Data Files ولكن<br />

.Files<br />

القالب ."Template"<br />

•<br />

•<br />

یوجد عدد من القوالب المعدة مسبقاً‏ Name" "Template تظھر بالرسم 3.1:<br />

3.1 رسم<br />

53


بعد أن یتم اختیار أحد القوالب "Templates" یطلب اختیار اسم ال Database واسم ال<br />

المعرف بالرمز .SID<br />

Instance<br />

3.2 رسم<br />

في حال تم اختیار القالب Database" "New یتم اختیار الممیزات "Features"<br />

ال<br />

التي ترید استخدامھا في<br />

.Database<br />

3.3 رسم<br />

54


المرحلة التالیة یتم اختیار البیئة التي سوف یعمل بھا ال<br />

.Database<br />

3.4 رسم<br />

بعد ذلك یتم تحدید عوامل "Parameters" ال<br />

Initialization Parameter File المختلفة.‏<br />

3.5 رسم<br />

55


یتم بعد ذلك عرض اسماء الملفات الفیزیائیة وال Tablespaces ومواقعھا ولدیك الخیار بحذف أو اضافة<br />

ملفات اخرى.‏<br />

3.6 رسم<br />

في المرحلة التالیة یتم اختیار نوعیة التكوین،‏ ھل ترید تكوین Database أو ترید تكوین فقط قالب<br />

التي یمكن استخدامھا مع أمر<br />

أو ھل ترید تكوین جمل<br />

SQL Scripts<br />

"Template"<br />

.CREATE DATABASE<br />

3.7 رسم<br />

56


:CONFIGURE DATABASE OPTIONS<br />

یمكن تعدیل ال Database التي تم تكوینھا سابقاً‏ من ناحیة ال Oracle Features والبیئة التي تعمل علیھا<br />

.(Dedicated Server أو Shared Server)<br />

:DELETE A DATABASE<br />

لحذف Database تم تكوینھا سابقاً‏<br />

:MANAGE A TEMPLATE<br />

یمكن استخدامھا لتكوین قالب "Template" أو لحذف قالب "Template" موجود.‏ عند تكوین قالب<br />

"Template" جدید یمكن الاختیار بین ثلات خیارات ھي:‏<br />

من قالب "Template" أخر موجود،‏ اذ یمكن تعدیل مواصفات القالب "Template" لصنع قالب<br />

جدید.‏<br />

‏(تم تكوینھا سابقاً)‏ ، اذ یمكن تكوین قالب "Template"<br />

من مواصفات<br />

مشابھ لمواصفات ال Database ولكن دون ملفات ال<br />

من Database موجودة،‏ اذ یمكن تكوین نسخة مطابقة ل Database موجودة مع ال<br />

Files وجمیع البیانات.‏<br />

Data<br />

.Data Files<br />

"Template"<br />

Database موجودة<br />

•<br />

•<br />

•<br />

3.8 رسم<br />

57


CREATE A DATABASE MANUALLY<br />

یمكن تكوین ال Database بطریقة یدویة باستخدام الأمر .CREATE DATABASE<br />

الخطوات المتبعة تتلخص بالتالي:‏<br />

تحدید اسم ال Instance وال .Database<br />

تحدید ال Database Character Set التي سوف نتطرق لھا لاحقاً‏ في فصل أخر.‏<br />

تجھیز ملف ال<br />

تشغیل ال Database في الوضعیة ،NOMOUNT عبر ال .SYSDBA<br />

.Initialization Parameter File<br />

كتابة الأمر .CREATE DATABASE<br />

تشغیل ال SQL SCRIPTS لتكوین ال . Data Dictionary<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

ملاحظة:‏ اذا كنت تقوم بتكوین ال Database على نظام ال UNIX یجد تحدید ما یعرف یاسم ال<br />

Environmental Variables ومنھا :<br />

"Directory" ھو الموقع :ORACLE_BASE<br />

الذي یحوي كل ملفات الأوراكل Tree" ."Top of<br />

وھنا یتم تخزین كل نسخ الأوراكل المختلفة ."Versions"<br />

:ORACLE_HOME موقع ال<br />

.Oracle Software<br />

:ORACLE_SID تحدد اسم ال Instance والذي یجب ان یكون غیر متشابھ مع اسم Instance أخر.‏<br />

:ORA_NLS33 لتحدید Set" "Database Character غیر<br />

:PATH مواقع<br />

.$ORACLE_HOME\bin<br />

:LD_LIBRARY_PATH<br />

.$ORACLE_HOME\lib<br />

برامج الأوراكل مثل ال ،SQLPLUS ومن المفترض ان تكون<br />

ملفات أخرى تسمى<br />

التي تم تحدیدھا مسبقاً‏ ."Default"<br />

Oracle Library Files وعادة ما تكون<br />

یمكن تكوین Database بشكل یدوي باستخدام القاعدة التالیة:‏<br />

CREATE DATABASE [name of database]<br />

[CONTROLFILE REUSE]<br />

[LOGFILE [GROUP number] C1<br />

[MAXLOGFILES number]<br />

[MAXLOGMEMBERS number]<br />

[MAXLOGHISTORY number]<br />

[MAXDATAFILES number]<br />

[MAXINSTANCES number]<br />

[ARCHIVELOG | NOARCHIVELOG]<br />

[CHARACTER SET char]<br />

[NATIONAL CHARACTER SET char]<br />

[DATAFILE C1 [C2]]<br />

[DEFAULT TEMPORARY TABLESPACE tablespace_name C1 [C3]]<br />

[UNDO TABLESPACE tablespace_name DATAFILE C1 [C2]]<br />

[SET TIME_ZONE [time_zone_region]]<br />

58


أما ال الرموز ال<br />

،C1<br />

C3،C2 فترمز الى جزء من القاعدة تم تخفیفة الى رموز لسھولة قراءة القاعدة:‏<br />

'filename' [SIZE number] [K | M] [REUSE] =C1<br />

[AUTOEXTEND OFF | ON [NEXT number [K | M]]=C2<br />

[MAXSIZE UNLIMITED | number [K | M]]]<br />

EXTENT MANAGEMENT LOCAL UNIFORM [SIZE number] [K | M]<br />

=C3<br />

اي انھ في الجملة الثالثة تكون القاعدة:‏<br />

[LOGFILE [GROUP number] 'filename' [SIZE number] [K | M] [REUSE]<br />

ملاحظة:‏ جملة ال CREATE DATABASE ھي الجملة الإلزامیة الوحیدة و الباقي اختیاري.‏<br />

ملاحظة‎2‎‏:‏ عند عدم استخدام كلمة ال SIZE یجب استخدام كلمة ال REUSE والعكس صحیح.‏<br />

أما أوامر القاعدة فھي<br />

:<br />

database] :[name of اسم ال Database المراد تكوینھ.‏<br />

.DB_NAME<br />

في حال عدم كتابتھ یؤخذ قیمة العامل<br />

"Overwrite" یمكن استخدامھا لطلب اعادة استخدام :[CONTROLFILE REUSE]<br />

المعرفة في ال<br />

ملفات ال<br />

ملفات جدیدة.‏<br />

number] :[MAXLOGFILES تحدد العدد الأقصى لمجموعات ال<br />

یمكن تكوینھا في ال Database على مدى حیاة ال ،Database العدد الأدنى ھو 2.<br />

number] :[MAXLOGMEMBERS تحدد العدد الأقصى لملفات ال Redo Log ضمن<br />

المجموعات.‏<br />

number] :[MAXLOGHISTORY تحدد عدد ال<br />

Initialization Parameter File عوضاً‏ عن تكوین<br />

Redo Log Files التي<br />

Archived Log Files التي تسخدم في<br />

Control Files<br />

عملیة ال .Media Recovery<br />

:[AUTOEXTEND] سوف نتطرق لھا لاحقاً.‏<br />

:[MAXDATAFILES] تحدد العدد الأقصى من ال Data Files الذي یمكن تكوینھ على مدى<br />

حیاة ال .Database<br />

:[MAXINSTANCES] تحدد العدد الأقصى من ال Instances الذین یستطیعون العمل على ال<br />

Database في نفس الوقت.‏<br />

char] :[CHARACTER SET سوف نتطرق لھا لاحقاً.‏<br />

SET] :[NATIONAL CHARACTER سوف نتطرق لھا لاحقاً.‏<br />

لتكوین ال<br />

Tablespace التي سوف نتطرق لھا لاحقاً،‏ اذا لم تحدد یقوم الأوراكل بتكوینھا للمستخدم.‏<br />

TABLESPACE] :[UNDO لتكوین ال Undo Tablespace التي سوف نتطرق لھا لاحقاً.‏<br />

Default Temporary<br />

:[DEFAULT TEMPORARY TABLESPACE]<br />

.Database تحدید وقت ال :[SET TIME_ZONE]<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

59


:3.1<br />

CREATE DATABASE db01<br />

CONTROLFILE REUSE<br />

LOGFILE<br />

GROUP 1 ('C: \oracle\ora92\oradata\db01\<strong>log</strong>101.<strong>log</strong>') SIZE 10M<br />

GROUP 2 ('C: \ oracle\ora92\oradata\db01\<strong>log</strong>201.<strong>log</strong>') SIZE 10M<br />

GROUP 3 ('C: \ oracle\ora92\oradata\db01\<strong>log</strong>301.<strong>log</strong>') SIZE 10M<br />

MAXLOGFILES 4<br />

MAXLOGMEMBERS 2<br />

MAXLOGHISTORY 0<br />

MAXDATAFILES 254<br />

MAXINSTANCES 2<br />

ARCHIVELOG<br />

CHARACTER SET AL32UTF8<br />

NATIONAL CHARACTER SET AL16UTF16<br />

DATAFILE 'C: \oracle\ora92\oradata\db01\system01.dbf' SIZE 100M<br />

AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED<br />

UNDO TABLESPACE UNDO01<br />

DATAFILE 'C: \oracle\ora92\oradata\db01\undo01.dbf' SIZE 40M<br />

DEFAULT TEMPORARY TABLESPACE TEMP01 TEMPFILE<br />

'C: \oracle\ora92\oradata\db01\temp01.dbf' SIZE 20M<br />

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K<br />

SET TIME_ZONE = 'CANADA /YUKON'<br />

;<br />

مثال تطبیقي<br />

الأخطاء التي قد تؤدي الى فشل تكوین ال Database بشكل یدوي:‏<br />

أخطاء في كتابة جمل ال .SQL<br />

طلب تكوین ملفات موجودة مسبقاً‏ ‏(تأكد من ان اسم الملف غیر مستخدم)‏<br />

مشاكل أو اخطاء ناتجة من نظام التشغیل System" ."Operating<br />

•<br />

•<br />

•<br />

لأعادة تكوین ال Database بعد محاولة فاشلة یجب:‏<br />

اغلاق ال .Instance<br />

حذف أي ملفات تكونت من ال CREATE DATABASE التي فشلت.‏<br />

تصحیح سبب الفشل ، مثل تعدیل جملة ال SQL التي تحوي أخطاء.‏<br />

تشغیل ال Instance في وضعیة ال NOMOUNT والقیام تكوین ال Database من جدید.‏<br />

•<br />

•<br />

•<br />

•<br />

ملاحظة:‏ لا یتكون ال Data Dictionary بعد الانتھاء من تكوین ال Database بشكل یدوي،‏ ولكن یتم<br />

تكوین ال<br />

.V$DATAFILE مثل ال Dynamic Views<br />

تذكر:‏ تغییر كلمة السر لكل من المستخدمین SYS و SYSTEM لأخذ الأمان.‏<br />

تذكر:‏ ان استخدام ال (OMF) Oracle Managed Files یسھل عملیة تكوین ال .Database<br />

60


DATA DICTIONARY<br />

یعتبر ال Data Dictionary أحد أھم مكونات ال ،Database اذ یتكون من مجموعة من ال Tables وال<br />

Views التي تحتوي معلومات قیمة عن ال .Database تستخدم ال Data Dictionary لقراءة البیانات<br />

فقط ولا یمكن تعدیل بیاناتھا بواسطة ال ،DBA ولكن یقوم ال Oracle بتعدیل البیانات الموجودة عند حدوث<br />

ال<br />

أوامر ال<br />

طلب المستخدم الدخول الى ال ، Database اذ یقوم بالتأكد من وجود اسم المستخدم وبیانات المستخدم مثل<br />

ال .User Privileges<br />

(DDL) .Data Definition Language یستخدم الأوراكل Data Dictionary ایضاّ‏ عند<br />

یتكون ال Data Dictionary من عنصرین ھما:‏<br />

.Base Tables في ال Database<br />

تعتبر أول<br />

:BASE TABLES یتم تخزین بیانات حول ال<br />

من ال Database یتم تكوینھ،‏ ویتم تكوینھا بشكل أتوماتیكي من قبل الأوراكل<br />

باستخدام الملف "Script" المسمى باسم .sql.bsq لا یجب تعدیل ال<br />

لأنھا ضروریة لتشغیل ال ،Database ولكن یمكن تعدیل واحدة فقط وھي ال ، مع العلم أنھ<br />

یتم تخزین البیانات في ال Base Tables بشكل مشفر.‏<br />

Base Tables أوالعبث بھا<br />

AUD$<br />

جزء "Object"<br />

:DICTIONARY VIEWS تقوم بتلخیص وترتیب بیانات المخزنة في ال<br />

تسھل استخراج البیانات و قرائتھا.‏ یتم تكوینھا باستخدام الملف "Script" المسمى باسم<br />

Base Tables لكي<br />

.cata<strong>log</strong>.sql<br />

•<br />

•<br />

بیانات ال :Data Dictionary<br />

یوفر ال Data Dictionary بیانات مھمة حول:‏<br />

معلومات تفصیلیة حول جمیع عناصر "Objects" ال Database مثل ال Indexes, Tables,<br />

Views, Synonyms, Data <strong>files</strong>, Control Files وغیرھا.‏<br />

بیانات حول المساحة المشغولة والمساحة الفارغة في ال .Database<br />

بیانات حول المستخدمین ."Users"<br />

بیانات تفصیلیة لل Privileges و ال Roles الممنوحة لكل مستخدم.‏<br />

•<br />

•<br />

•<br />

•<br />

بیانات حول ال<br />

Auditing التي سوف نتطرق لھا في فصل أخر.‏<br />

•<br />

بیانات حول ال<br />

. Integrity Constraint<br />

•<br />

61


QUERYING DATA DICTIONARY<br />

تتوزع ال Dictionary Views الى ثلاث مجموعات عي:‏<br />

:DBA_ تحتوي ال Views على جمیع بیانات العناصر "Objects" في ال ،Database وھي<br />

خاصة لل DBA و كل مستخدم لدیھ ال اللازمة للدخول الى بیاناتھا.‏<br />

Privileges<br />

:ALL_ تحتوي على بیانات حول جمیع العناصر "Objects" التي یستطیع المستخدم استخراج<br />

البیانات منھا،‏ سواء ما كان منھا ضمن ال Schema الخاصة بالمستخدم أو مستخدمین أخرین أو<br />

ال .Public Schema<br />

:USER_ تحتوي على بیانات حول العناصر "Object" التي یملكھا المستخدم ‏(أي العناصر في<br />

ال Schema الخاصة بالمستخدم).‏<br />

•<br />

•<br />

•<br />

یمكن معرفة جمیع ال<br />

.DICTIONARY view<br />

Views المتوفرة في ال Data Dictionary من خلال البیانات المعروضة من ال<br />

مثال تطبیقي<br />

:3.2<br />

SELECT * FROM DBA_OBJECTS;<br />

SELECT * FROM ALL_OBJECTS;<br />

SELECT * FROM USER_OBJECTS;<br />

SELECT * FROM DICTIONARY;<br />

Database في<br />

DYNAMIC PERFORMANCE<br />

،Database یقوم<br />

Tables<br />

Oracle Server بتسجیل بیانات حول عمل ال<br />

طوال فترة عمل ال<br />

الذاكرة على شكل وعند اغلاق ال Database أو اغلاق السیرفر تضیع البیانات من الذاكرة.‏<br />

تعتبر ال Dynamic Performance View من ضمن ال ،SYS Schema وھي تستخدم بشكل اساسي<br />

لمراقبة ال Database ولا یسمح القیام بأوامر<br />

Language(DML) Data Manipulation علیھا.‏<br />

لمعرفة ال Views المتوفرة یمكن استخدام ،V$FIXED_TABLE ولمعرفة ال Columns ضمن ال<br />

.V$INSTANCE استخدم Views<br />

ملاحظة:‏ یرمز لل<br />

.V$ بالرمز Dynamic Performance Views<br />

62


CONTROL & REDO LOG FILES<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

63


CONTROL FILE<br />

<br />

<br />

یعتبر Control File ضروري جدً‏ لتشغیل وعمل ال ،Database حیث تتم قرائتھ من قبل ال<br />

Server قبل بدء تشغیل ال ،Database اذ یحتوي على بیانات مھمة حول ال Database مثل اسماء<br />

تتم تغیر بیاناتھ أو تجدیدھا "Update" عبر ال<br />

ومواقع ملفات ال<br />

اذ لا یستطیع أي مستخدم أو ال DBA القیام بھذه المھمة.‏<br />

ولا یستطیع ال<br />

یتم تكوین ال Control File بعد تكوین ال<br />

واحد فقط على الأقل لتشغیل ال<br />

العمل على أكثر من Database واحدة ویلزم<br />

Oracle<br />

Oracle Server فقط ،<br />

Control File الواحد<br />

Database<br />

Database مباشرة<br />

Control File<br />

،<br />

.Data Files<br />

ملاحظة:‏ تسمى عملیة تكوین أكثر من نسخة متطابقة من ملفات ال Control Files ‏(ینطبق الحال على ال<br />

Redo Log ایضا)‏ بعملیة ال ، Multiplex ویفضل توزیعھا على مواقع أو اقراص صلبة مختلفة.‏<br />

ملاحظة‎2‎‏:‏ ملفات ال<br />

تذكر:‏ تتم قراءة ملفات ال<br />

.Binary من نوعیة ال Control Files<br />

.Mount في مرحلة ال Control File<br />

تذكر‎2‎‏:‏ ملف ال SPFILE من نوعیة ال .Binary<br />

یوجد عوامل "Parameters" تحدد حجم ال<br />

Control File وھي:‏<br />

MAXLOGFILES<br />

MAXLOGMEMBERS<br />

MAXLOGHISTORY<br />

MAXINSTANCES<br />

MAXDATAFILES<br />

•<br />

•<br />

•<br />

•<br />

•<br />

یحتوي ال Control File على البیانات التالیة:‏<br />

اسم ال Database التي یعمل لھا ال<br />

تاریخ وتوقیت تكوین ال<br />

اسماء ومواقع ملفات ال<br />

اسماء ال<br />

معلومات حول ال<br />

معلومات حول<br />

معلومات حول عملیة ال .Backup<br />

توقیت بدء و توقف ال<br />

الرقم الحالي ل<br />

.Control File<br />

.Database<br />

.Redo Log و ال Data Files<br />

.Tablespaces<br />

.Checkpoint<br />

.Archived Log File<br />

.Undo Segment<br />

.Log Switch والذي یتم تخزینھ عند حدوث Log Sequence Number<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

تذكر:‏ یحتوي ال alertSID.<strong>log</strong> ایضاً‏ على<br />

.Log Sequence Number<br />

64


MULTIPLEXING CONTROL FILES<br />

للحمایة من أیة خلل قد یحدث لل Database نتیجة تعطل ال Control File ینصح بشدة بالقیام بعملیة ال<br />

Control File بیحث یتم تخزین النسخ المتطابقة في مواقع تخزین مختلفة لكي یتسنى<br />

استعادة Control File في حال تعطلھ أو ضیاع بیاناتھ.‏<br />

للقیام بعملیة ال Multiples یجب استخدام إما ال SPFILE أو ال init.ora<br />

.<br />

Multiplex لل<br />

ملاحظة:‏ یمكن عمل ثمانیة نسخ لل<br />

.Control File<br />

:MULTIPLEXING USING SPFILE<br />

للقیام ب Control File Multiples بواسطة ال SPFILE یجب إتباع الخطوات التالیة:‏<br />

تغییر ملف ال SPFILE<br />

كما في المثل التالي:‏<br />

ALTER SYSTEM SET CONTROL_FILES =<br />

('…\ora01\oradata\db01\ctr001.ctl', '…\ora02\oradata\db01\ctr002.ctl',<br />

'…\ora03\oradata\db01\ctr003.ctl', '…\ora04\oradata\db01\ctr004.ctl')<br />

SCOPE=SPFILE;<br />

لكي تتم التغیرات یجب اغلاق ال<br />

Database بكتابة التالي:‏<br />

SHUTDOWN;<br />

نسخ ملف ال Control File الى المواقع التي حددت بالنقطة الأولى ‏(القیام بعملیة النسخ كما في<br />

نظام التشغیل ، اي في الویندوز یستخدم الفأرة مع<br />

.(PASTE و COPY<br />

•<br />

•<br />

•<br />

STARTUP<br />

• تشغیل ال Database بكتابة التالي:‏<br />

:MULTIPLEXING USING init.ora<br />

للقیام ب Control File Multiples بواسطة ال init.ora یجب إتباع الخطوات التالیة:‏<br />

یجب اغلاق ال<br />

نسخ ملف ال<br />

Database بكتابة التالي:‏<br />

SHUTDOWN;<br />

Control File الى المواقع<br />

الجدیدة التي سوف تحدد في النقطة الثالثة.‏<br />

تعدیل العامل "Parameter" CONTROL_FILES في ملف ال init.ora كما في المثال:‏<br />

•<br />

•<br />

•<br />

CONTROL_FILES =(…\disk1\ctr01.ctl, …\disk2\ctr02.ctl)<br />

<br />

تشغیل ال<br />

.Database<br />

•<br />

<br />

65


ملاحظة:‏ استخدام الثلاث نقاط (...) في المثال السابق للاختصار فقط.‏<br />

:USING OMF<br />

<br />

.Oracle Managed Files Control File یمكن<br />

OMF طبقاً‏ لطریقة ال Control Files<br />

Initialization Parameter Files في ال CONTROL_FILES "Parameter"<br />

عامل "Parameters" ال .DB_CREATE_ONLINE_LOG_DEST_nOMF<br />

Control File في ال<br />

یمكن تسھیل إدارة ملفات ال<br />

تكوین ال<br />

باستخدام ال<br />

بشكل أتوماتیكي عند تكوین ال Database اذا لم یتم تحدید العامل<br />

وتم تحدید<br />

بعد تكوین ال Control File بطریقة ال OMF یجب تسجیل اسم وموقع ال<br />

، PFILE اما اذا كنت تستخدم ال SPFILE فإن الاسماء تسجل بشكل اتوماتیكي.‏<br />

:DATA DICTIONARY & CONTROL FILE<br />

یمكن استخراج بیانات ال<br />

Control File من ال Data Dictionary عبر:‏<br />

:V$CONTROLFILE تعرض اسماء ال<br />

انھا دائما فارغة إلا في حال ضیاع ملف من ملفات ال<br />

(STATUS) والحالة الحالیة Control Files<br />

.INVALID فتصبح Control File<br />

اذ<br />

•<br />

SELECT STATUS, NAME FROM V$CONTROLFILE;<br />

:V$PARAMETER تعرض اسماء وقیم "Values" جمیع العوامل "Parameter" من<br />

ضمنھا طبعاً‏ ال<br />

.Control Files<br />

•<br />

SELECT NAME, VALUE FROM V$PARAMETER<br />

WHERE NAME = 'control_<strong>files</strong>';<br />

:V$CONTROLFILE_RECORD_SECTION تعرض بیانات عن الأجزاء المختلفة من<br />

ال .Control File<br />

•<br />

SELECT TYPE, RECORD_SIZE, RECORDS_TOTAL, RECORD_USED<br />

FROM V$CONTROLFILE_RECORD_SECTION;<br />

:SHOW PARAMTER یمكن استخدام ھذه للحصول على مواقع واسماء ال<br />

Control Files<br />

•<br />

SHOW PARAMETER CONTROL_FILES;<br />

ملاحظة:‏ یمكن الحصول ایضاً‏ على اسماء ال Control Files بعد تكوینھا من ملف ال .alertSID.<strong>log</strong><br />

<br />

<br />

<br />

66


REDO LOG FILES<br />

تعتبر ملفات ال Redo Log ضروریة جداً‏ لعمل ال ، Database اذ یتم تخزین كل ما جرى ویجري على<br />

البیانات من تغیرات لكي یتم استعادة البیانات "Recovery" في حالة حدوث ضیاع للبیانات عند حدوث عطل<br />

مفاجئ.‏ تنقسم ملفات ال Redo Log الى مجموعات "Groups" كل مجموعة تحوي أعضاء<br />

،"Members" و الأعضاء "Members" ضمن المجموعة الواحدة عبارة عن نسخ متطابقة<br />

تحوي على نفس البیانات ویتم نقل البیانات لھا في نفس الوقت.‏<br />

یتطلب الأوراكل على الأقل مجموعتین من مجموعات ال<br />

المجموعة یكون لھ نفس الحجم وذات ال<br />

یقوم الأوراكل بواسطة ال LGWR بنقل بیانات ال<br />

تتم الكتابة على مجموعة واحدة فقط وعندما تمتلئ المجموعة الأولى یقوم ال LGWR بكتابة البیانات في<br />

المجموعة الثانیة وبعد إمتلاء المجموعة الأخیرة یعود ال LGWR بالكتابة في المجموعة الأولى ، وتسمى<br />

ھذه العملیة بال Log Switch وتسمى المجموعة التي یتم نقل البیانات لھا باسم المجموعة الحالیة أو<br />

Redo Log Files وكل عضو "Member" ضمن<br />

.Log Sequence Number<br />

Redo Log Buffer الى ال Redo Log Files حیث<br />

"Copies"<br />

."Current Online Redo Log Group"<br />

ملاحظة:‏ یمكن تحدید الحد الأعلى للمجموعات و الأعضاء بواسطة MAXLOGMEMBERS و<br />

.CREATE DATABASE في جملة ال MAXLOGFILES<br />

تذكر:‏ یتم تخزین بیانات حول ال Log Switch في ال<br />

.Alert Log File<br />

4.1 رسم<br />

Log Sequence Number معرفة برقم ممیز یسمى Redo Log File<br />

یمنحھ الأوراكل لكل<br />

كل مجموعة<br />

مجموعة عند بدایة كتابة البیانات بھا حیث یتم تجدید الرقم "Overwritten" كل مرة یتم إعادة استخدام<br />

المجموعة.‏<br />

تذكر:‏ یتم تخزین<br />

Log Sequence Number في:‏<br />

Control File<br />

Data Files Header<br />

•<br />

•<br />

67


Alert Log File<br />

•<br />

Log Sequence Number في ال<br />

Log<br />

Alert<br />

:Checkpoint<br />

تعرضنا لل Checkpoint في الفصل الأول وذكرنا انھ یقوم بكتابة ال<br />

ونتطرق لل Checkpoint مرة أخرى لأن العلاقة بین ال Checkpoint وال<br />

Switch متزامنة بحیث عند حودث ال Log Switch تحدث عملیة ال .Checkpoint ویقوم ال<br />

Log File بتخزین معلومات حول ال Checkpoint كما یقوم بذلك مع ال Log Switch ولكن یجب وضع<br />

التالي LOG_CHECKPONT_TO_ALERT في حالة True عكس الحالة<br />

.False وھي<br />

.Control File<br />

العامل "Parameter"<br />

الإفتراضیة "Default"<br />

یمكن ان تحدث عملیة ال Checkpoint عند:‏<br />

حدوث عملیة .Log Switch<br />

عند إغلاق ال Database بأي حالة عدا ال .ABORT<br />

عندما یحدد العامل "Parameter" FAST_START_MTTR_TARGET الذي یحدد كمیة<br />

البیانات المتغیرة Buffers" "Dirty التي یستطیع ال DBWn كتابتھا.‏<br />

عندما طلب ال DBA یمكن القیام بھا بكتابة جملة SQL كما في المثال 4.1.<br />

عندما تكتب جملة ال SQL التالیة:‏<br />

ALTER TABLESPACE OFFLINE NORMAL.<br />

عندما تكتب جملة ال SQL التالیة:‏ .ALTER TABLESPACE READ ONLY<br />

عندما تكتب جملة ال SQL التالیة:‏ .ALTER TABLESPACE BEGIN BACKUP<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

مثال تطبیقي<br />

:4.1<br />

للقیام بعملیة ال Checkpoint بواسطة ال SQL یجب كتابة التالي:‏<br />

ALTER SYSTEM CHECKPOINT;<br />

اذا تم تحدید العامل "Parameter"<br />

FAST_START_MTTR_TARGET = 400<br />

یدل على عملیة ال Recovery یجب أن لا یزید وقتھا عن 400 ثانیة حیث أن من ضمن عملیة ال<br />

Recovery عملیة ال<br />

.Log Switch وعملیة ال Checkpoint<br />

یمكن أن یتم طلب عملیة ال Log Switch ایضاً‏ بواسطة ال SQL عبر التالي:‏<br />

ALTER SYSTEM SWITCH LOGFILE;<br />

68


MAINTAINING REDO LOG FILES<br />

سوف نتطرق الى عدد من المھام التي یمكن اجرائھا لل Redo Log Files لحمایتھا أو لتعدیلھا.‏<br />

Redo Log Files<br />

:MULTIPLEXING<br />

، بحیث یقوم ال<br />

لحمایة ال Database یجب القیام بعملیة ال Multiplex على ال<br />

LGWR بكتابة ذات البیانات على النسخ المتشابھ في نفس الوقت.‏ كل النسخ المتشابھ تكون ضمن مجموعة<br />

و یطلق على النسخ المتشابھ اسم .Members یفضل فصل النسخ المتشابھ عن بعض وابقائھا<br />

في موقع مختلف أو على قرص صلب مختلف ‏(أو أي وسیلة لحفظ البیانات)‏ كما في الرسم<br />

في ذات المجموعة على قرصین مختلفین<br />

الأعضاء<br />

في حال عدم توفر أي عضو "Member" من أي مجموعة لنقل البیانات إلیھ یتم اغلاق ال<br />

وتبدأ عملیة Recovery لل<br />

Database أو یمكن<br />

یمكن تكوین أكثر من مجموعة من مجموعات ال<br />

اضافة مجموعة أخرى لاحقاً.‏<br />

4.1 یظھرأن<br />

.(Disk1, Disk2)<br />

Database<br />

Redo Log Files عند تكوین ال<br />

(Member1 , Member2)<br />

.Instance<br />

"Group"<br />

نقاط مھمة في عملیة ال :Multiplex<br />

ینصح بتفریق الأعضاء ضمن المجموعة الواحدة الى مواقع أو اقراص صلبة مختلفة،‏ لكي لا یحدث<br />

أغلاق لل Database في حال تعطل القرص الصلب الذي یحوي الملفات.‏<br />

ینصح بتفریق ال<br />

مختلفة أو مواقع مختلفة لكي لا یحدث تداخل بین عمل ال LGWR و ال .ARCn<br />

Online Redo Log Files عن ال Archived Log Files الى أقراص<br />

ینصح بتفریق ملفات ال Redo Log و ملفات ال Data Files الى مواقع أو اقراص مختلفة،‏ لكي<br />

لا یحدث تداخل بین<br />

ال DBWn وال .LGWR<br />

•<br />

•<br />

•<br />

:SIZING ONLINE REDO LOG FILES<br />

أصغر حجم یمكن ان یكون علیة ال<br />

نظام التشغیل ‏(مثل ویندوز أو .(UNIX<br />

یمكن لل DBA تحدید حجم ال<br />

، 50 KB ھو Redo Log File<br />

Redo Log Files بالأخذ بالمعطیات التالیة:‏<br />

أما اكبر حجم ھو أكبر حجم یسمح بھ<br />

الجحم المتوفر على القرص الصلب أو أي<br />

.Storage Device<br />

عدد مرات ال Log Switch و ال Checkpoint التي یمكن أن تحدث.‏<br />

الحجم المتوقع لل Redo Entries والذي یعتمد على العملیات التي تجري على ال<br />

والتي تؤدي الى تغییر البیانات.‏<br />

Database<br />

•<br />

•<br />

•<br />

69


:ADDING ONLINE GROUP<br />

في حال وجد ال DBA أن ال Database بحاجة الى مجموعة جدیدة ، یمكن تكوینھا كما في المثال 4.2:<br />

مثال تطبیقي<br />

:4.2<br />

ALTER DATABASE ADD LOGFILE GROUP 4<br />

('…\oradata\db01\<strong>log</strong>11.<strong>log</strong>' , '…\oradata\db02\<strong>log</strong>12.<strong>log</strong>') SIZE 5M;<br />

:ADDING ONLINE MEMBER<br />

یمكن اضافة أعضاء جدد للمجموعات الموجودة باستخدام القاعدة التالیة:‏<br />

ALTER DATABASE [database's name] ADD LOGFILE MEMBER<br />

['filename' [REUSE] , 'filename' [REUSE], ….]<br />

TO [ GROUP number | ('filename', 'filename', …);<br />

في حالة وجود اسم العضو على الجھاز وبنفس الحجم ‏(أي الملف موجود مسبقاً)‏ یجب استخدام كلمة<br />

REUSE اما بالنسبة الى الجملة الأخیرة فلدیك خیاران إما أن تذكر رقم المجموعة أو اسماء الأعضاء<br />

الحالیین في المجموعة التي ترید اضافة عضو جدید لھا.‏<br />

ملاحظة:‏ یمكن اضافة عضو جدید باستخدام ال<br />

مثال تطبیقي<br />

.Console في ال Storage Manager<br />

ALTER DATABASE ADD LOGFILE MEMBER<br />

'…\oradata\db04\<strong>log</strong>41.<strong>log</strong>' TO GROUP 1,<br />

'…\oradata\db04\<strong>log</strong>42.<strong>log</strong>' TO GROUP 2,<br />

'…\oradata\db04\<strong>log</strong>43.<strong>log</strong>' TO GROUP 3,<br />

'…\oradata\db04\<strong>log</strong>44.<strong>log</strong>' TO GROUP 4;<br />

:4.3<br />

أو بالطریقة الثانیة:‏<br />

ALTER DATABASE ADD LOGFILE MEMBER<br />

'…\oradata\db04\<strong>log</strong>14.<strong>log</strong>'<br />

TO ('…\oradata\db01\<strong>log</strong>11.<strong>log</strong>' , '…\oradata\db02\<strong>log</strong>12.<strong>log</strong>' ,<br />

'…\oradata\db03\<strong>log</strong>13.<strong>log</strong>');<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم و كلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على ال<br />

اضغط على<br />

اكتب اسم العضو الجدید ثم اضغط .Apply<br />

.Normal<br />

.Storage Manager<br />

.Redo Log Groups<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

70


:DROPPING ONLINE LOG GROUP<br />

اذا أردت زیادة حجم أحدى مجموعات ال Redo Log یمكن ازالة المجموعة وتكوین مجموعة جدیدة بحجم<br />

أكبر،‏ حیث تستطیع ازالة مجموعة من مجموعات ال Redo Log باتباع القاعدة التالیة:‏<br />

Active<br />

ALTER DATABASE [database' name]<br />

DROP LOGFILE [GROUP number | ('filename',….);<br />

یجب أن لا تكون المجموعة المزالة ھي المجموعة الحالیة "Current" أو ان تكون في وضعیة بل<br />

یجب أن تكون في وضعیة لا یسمح الأوراكل بحذف المجموعة اذا كان ذلك سوف یؤدي الى بقاء<br />

مجموعة واحدة فقط ، اذ أن الأوراكل یحتاج على الأقل الى مجموعتین من مجموعات ال<br />

باتباع القاعدة السابقة یمكن حذف المجموعة من تعریف الأوراكل فقط ، اما ملفات ال Redo Log الحقیقیة<br />

لا تمسح ویجب حذفھا بطریقة یدویة<br />

الموجودة في الموقع المحدد ‏(كما في المثال 4.3:<br />

‏(كما في أوامر نظام التشغیل،‏ في الویندوز استخدم أمر<br />

مثال تطبیقي<br />

.Redo Log Files<br />

ملف (<strong>log</strong>14.<strong>log</strong><br />

.(Delete<br />

.Inactive<br />

:4.4<br />

ALTER DATABASE DROP LOGFILE GROUP 4;<br />

أو بذكر أسم أحد أعضاء المجموعة كما في المثال 4.3.<br />

یمكن أیضا تحویل حالة ال<br />

Redo Log File الى حالة ال Inactive بواسطة الجملة التالیة:‏<br />

ALTER SYSTEM SWITCH LOGFILE;<br />

سوف نتطرق الى الحلات التي یمكن أن تكون علیھا المجموعة أو العضو بعد قلیل.‏<br />

:DROPPING ONLINE LOG MEMBER<br />

كما یمكن حذف مجموعة یمكن حذف عضو ‏(أو أكثر)‏ من المجموعة ولكن یجب أن یبقى على الأقل عضو فعال<br />

في المجموعة وإلا فإن أوراكل لن یسمح بعملیة الحذف.‏ كما في حذف المجموعة یجب أن لا یكون<br />

العضو ھو العضو الحالي "Current" و الملفات الفیزیائیة لا تحذف من مكان تواجدھا.‏ یوجد حالة أخرى لا<br />

یسمح الأوراكل بحذف العضو،‏ ذلك عندما یكون ال Database في حالة ال Archive<strong>log</strong> ولم یتم عمل<br />

Archive للمجوعة التي ینتمى لھا العضو.‏<br />

"Valid"<br />

یمكن حذف عضو باتباع القاعدة التالیة:‏<br />

ALTER DATABASE [database's name]<br />

DROP LOG MEMBER 'filename','filename',…<br />

71


مثال تطبیقي<br />

:4.5<br />

ALTER DATABASE DROP LOG MEMBER '…\oradata\db04\<strong>log</strong>4.<strong>log</strong>';<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم و كلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على ال<br />

اختر العضو المراد حذفھ واضعط على رسم سلة المھملات.‏<br />

اضغط على<br />

.Normal<br />

.Storage Manager<br />

، Redo Log Groups ثم<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:RENAMING LOG MEMBER<br />

اذا كنت ترید نقل عضو"‏Member‏"‏ من موقع الى أخر أو ترید تغییر اسم العضو یجب اتباع التالي:‏<br />

اغلق ال .Database<br />

انسخ الملف الفیزیائي ‏(الخاص بالعضو)‏ الى الموقع الجدید ‏(لنقل الملف)‏ ، أوقم بتغییر اسم الملف<br />

‏(لتغییر اسم الملف).‏<br />

قم بتشغیل ال Database في حالة ال .MOUNT<br />

اكتب الجملة التالیة<br />

ALTER DATABASE RENAME FILE 'old Filename' TO 'newFilename';<br />

قم بتشغیل ال Database وقم بعملیة Backup لل Control File على اعتبار أن محتویاتھ<br />

تغیرت.‏<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:CLEARING ONLINE REDO LOG FILES<br />

في حال حدوث فساد للبیانات الموجودة داخل ملفات ال Redo Log یمكن تنظیف الملفات باستخدام القاعدة<br />

التالیة:‏<br />

ALTER DATABASE [database's name]<br />

CLEAR [UNARCHIVED] LOGFILE GROUP number | 'filename' ,…..;<br />

یمكن العدول عن عملیة حذف ثم اضافة ملف Redo Log بالقیام بتنظیف محتویات الملف لما توفره العملیة<br />

من تسھیلات،‏ اذ یمكن تنظیف مجموعة من مجموعات ال Redo Log حتى ولو وجد مجموعتیین فقط<br />

وبداخل كل مجموعة عضو واحد فقط ، ویمكن تنظیف المجموعة اذا كانت ال Database في حالة ال<br />

Archive<strong>log</strong> ولم یحدث عملیة Archive للمجموعة ولكن یجب استخدام كلمة UNARCHIVED في<br />

القاعدة.‏<br />

72


مثال تطبیقي<br />

:4.6<br />

لتنظیف مجموعة من مجموعات ال Redo Log اكتب التالي:‏<br />

ALTER DATABASE CLEAR LOGFILE GROUP 3;<br />

أو بذكر اسماء أعضاء المجموعة عوضاً‏ عن المجموعة ورقمھا كما جاء سابقاً.‏<br />

:USING OMF<br />

لتسھیل عملیة ادارة ال Redo Log Files ینصح باستخدام ال OMF التي جاء شرحھا سابقاً.‏ بواسطة ال<br />

OMF تكوین عملیة تكوین مجموعة جدیدة أو حذف مجموعة أسھل و یقوم الأوراكل بحذف الملفات<br />

الفیزیائیة الموجودة في موقع التخزین بشكل أتوتوماتیكي عند حذف أي مجموعة.‏<br />

لاستخدام طریقة ال ، OMF یجب تحدید العامل DB_CREATE_ONLINE_LOG_DEST_n في<br />

ال Initialization Parameter File وللقیام بعملیة ال Multiplex على ال<br />

استبدال ال n في العامل Parameter" " برقم من 1 الى 5.<br />

مثال تطبیقي<br />

Redo Log Files یجب<br />

:4.7<br />

لحذف مجموعة تعتمد على نظام ال OMF یجب كتابة:‏<br />

أما لإضافة مجموعة یجب كتابة:‏<br />

ALTER DATABASE DROP LOGFILE GROUP 3;<br />

ALTER DATABASE ADD LOGFILE;<br />

حیث یقوم الأوراكل بتحدید رقم المجموعة واختیار اسماء الأعضاء أوتوماتیكیاً.‏<br />

للقیام بعملیة ال Multiplex یجب تحدید التالي في ال<br />

:Initialization Parameter File<br />

DB_CREATE_ONLINE_LOG_DEST_1 = '…\oradata\db01'<br />

DB_CREATE_ONLINE_LOG_DEST_2 = '…\oradata\db02'<br />

DB_CREATE_ONLINE_LOG_DEST_3 = '…\oradata\db03'<br />

73


:QUERYING LOG FILE INFORMATION<br />

یمكن الحصول على معلومات حول المجموعات و الأعضاء من خلال:‏<br />

V$LOG<br />

V$LOGFILE<br />

•<br />

•<br />

:V$LOG<br />

تحتوى على بیانات حول المجموعات وأحجامھا والحالة التي ھي فیھا،‏ یوجد 7 حالات یمكن أن تتواجد فیھا<br />

المجموعة وھم:‏<br />

:UNUSED<br />

تدل على أن المجموعة لم تستخدم على الأطلاق في تخزین البیانات ، غالباً‏ ما یكون<br />

ھذا النوع للمجموعات المضافة حدیثاً.‏<br />

تدل على المجموعة الحالیة التي یستخدمھا ال LGWR في نقل بیانات ال<br />

Redo<br />

:CURRENT<br />

.Log Buffer<br />

:ACTIVE<br />

تدل على أن المجموعة جاھزة لعملیة ال .Recovery<br />

:CLEARING تدل أن المجموعة في حالة تنظیف لبیاناتھا بعدما طلب ال DBA ذلك بواسطة<br />

جملة ال SQL التي تطرقنا لھا قبل قلیل وبعد ان تنظف المجموعة تتحول الحالة الى .UNUSED<br />

.SQL تدل أن المجموعة تم تنظیفھا بعد طلب جملة ال :CLEARING_CURRENT<br />

:INACTIVE تدل على أن ال Database لیس بحاجة الى المجموعة ولا تلزم في عملیة ال<br />

، Recovery وھذا ھو النوع الذي یمكن حذف.‏<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:V$LOGFILE<br />

تحتوى على بیانات حول أعضاء المجموعات.‏ یوجد 4 حالات یمكن أن یتواجد فیھا العضو وھم:‏<br />

:INVALID<br />

:STALE<br />

:DELETED<br />

فارغ :"Blank"<br />

تدل على أن ملف العضو لا یعمل.‏<br />

تدل على أن بیانات العضو غیر مكتملة.‏<br />

تدل على أن العضو لا یستخدم.‏<br />

تدل على أن العضو یتم استخدامھ.‏<br />

•<br />

•<br />

•<br />

•<br />

مثال تطبیقي<br />

:4.8<br />

SELECT GROUP# , SEQUENCE#, BYTES, MEMBERS, STATUS<br />

FROM V$LOG;<br />

SELECT GROUP#, STATUS, TYPE, MEMBER FROM V$LOGFILE;<br />

74


ARCHIVED LOG FILES<br />

من أھم الأمور التي یجب تحدیدھا من قبل ال DBA ھو قرار وضع ال Database في وضعیة ال<br />

.Noarchive<strong>log</strong> توجد ال Database في الحالة الأفتراضیة "Default" في وضعیة<br />

ال Noarchive<strong>log</strong> ولكن وضعیة ال Archive<strong>log</strong> مفیدة جداً‏ حیث أن من فوائدھا تسھیل عملیة ال<br />

البیانات التي حدث لھا یمكن أن تتم عملیة ال<br />

Archive لملفات ال Redo Log بطریقتیین ھما:‏ یدویة أو أوتوماتیكیة والذي یتحكم بھا عامل من عوامل<br />

ال<br />

عندما تكون قیمة ال LOG_ARCHIVE_START تساوي True فإن عملیة ال<br />

بشكل أتوتوماتیكي للمجموعة الممتلئة بواسطة ال ARCn بعد حدوث عملیة .Log Switch<br />

أما عندما تكون قیمة ال ARCHIVE_START_LOG تساوي ، False فأن عملیة ال<br />

یجب أن تحدث بطریقة یدویة عبر استخدام جمل ال .SQL<br />

Archiving تحدث<br />

Archiving<br />

.Commit<br />

Archive<strong>log</strong> أو<br />

"Recovery" وتضمن استعادة Backup<br />

.LOG_ARCHIVE_START ھو Intialazation Parameter File<br />

ملاحظات:‏<br />

یتم تخزین بیانات في ال Control File اذا تمت عملیة ال Archiving بنجاح.‏<br />

یمكن القیام بعملیة Multiplex لملفات ال .Archived Redo Log<br />

لا یمكن لل Archived Redo Log أن تتبع نظام ال .OMF<br />

•<br />

•<br />

•<br />

تذكر:‏ لا یمكن استخدام ال Redo Log File حتى تتم عملیة ال Checkpoint ویتم عملیة Archiving<br />

إما عند حالة Noarchive<strong>log</strong> فقط عملیة ال<br />

للملف ‏(ھذه الحالة تحدث عندما یكون الوضع<br />

Checkpoint یجلب أن تحدث).‏<br />

، Archive<strong>log</strong><br />

:QUERYING ARCHIVED REDO LOG<br />

یمكن الحصول على بیانات حول عملیة ال Archiving من V$INSTANCE<br />

أو من ال<br />

.Console<br />

مثال تطبیقي<br />

:4.9<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

SELECT ARCHIVER FROM V$INSTANCE;<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم و كلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على ال ، Instance Manager ثم اضغط على .Configuration<br />

اضغط على كلمة ال .Recovery<br />

.Normal<br />

•<br />

•<br />

•<br />

•<br />

•<br />

75


DATA FILES & TABLESPACES<br />

76


TABLESPACE<br />

Logical و<br />

Segment و<br />

كما عرفنا سابقأ أن ال Database تنقسم الى Physical بحیث تكون ال Tablespace ھي<br />

أحدى مكونات ال Logical بالإضافة الى Extents وBlocks .Data لا یمكن لل<br />

العمل لأكثر من Database واحدة ولكن بالمقابل یمكن لل Tablespace أن تحتوي على<br />

أكثر من<br />

یوجد نوعان من أنواع ال<br />

Tablespace ھما:‏<br />

Tablespace<br />

.Data File<br />

:SYSTEM TABLESPACE ھي ال Tablespace التي تتكون مباشرة مع تكوین ال<br />

Database لأنھا ضروریة لعمل ال Database ولا یمكن لل Database العمل بدونھا.‏ تحتوي<br />

تحتوي ایضاً‏<br />

على بیانات ال Data Dictionary وبرامج ال PL/SQL مثل<br />

ویمكن أن تحتوي على البیانات "Data" ولكن لا<br />

یفضل جمع البیانات في ال System Tablespace بل في النوع الثاني من ال .Tablespace<br />

.Stored Units<br />

على ال SYSTEM UNDO SEGMENT<br />

:NON-SYSTEM TABLESPACE لإضافة مرونة على التحكم بال ، Database ینصح<br />

باضافة Tablespaces الى ال Database لتخزین البیانات على مختلف أنواعھا.‏ من فوائد<br />

استعمالھا أنھا تقوم بفصل<br />

أي أنھا تفصل البیانات على حسب أختلافھا ومن فوائد استعمالھا ایضاً‏ أن ال DBA<br />

یستطیع التحكم بحجم المساحة الممنوحة لكل مستخدم في ال<br />

Application عن ، Temporary Data عن ، Undo Data<br />

،<br />

.Database<br />

Data<br />

•<br />

•<br />

:CREATING TABLESPACES<br />

یمكن تكوین Tablespace باستخدام القاعدة التالیة:‏<br />

ملاحظة:‏ الكلمات التي تحتھا خط في القاعدة ھي ال<br />

أما ال الرموز ال<br />

CREATE TABLESPACE tablespace's name<br />

[DATAFILE C1]<br />

[MINIMUM EXTENT number [K | M]]<br />

[BLOCKSIZE number [K] ]<br />

[LOGGING | NOLOGGING]<br />

[DEFAULT C2]<br />

[ONLINE | OFFLINE]<br />

[PERMANENT | TEMPORARY]<br />

.Default<br />

،C1<br />

C2، فترمز الى جزء من القاعدة تم تخفیفھ الى رموز لسھولة قراءة القاعدة:‏<br />

'filename' [SIZE number [K | M] [REUSE] | REUSE] [AUTOEXTEND …] =C1<br />

STORAGE (INITIAL number K|M NEXT number K|M =C2<br />

MINEXTENTS number PCTINCREASE number MAXEXTENTS number)<br />

سوف یأتي شرح بالتفصیل لعوامل ال C2 المبینة (… Next, (Initial, و جملة ال .AUTOEXTEND<br />

77


أما أوامر القاعدة فھي<br />

:<br />

EXTENT] :[MINIMUM تحدد حجم جمیع ال Extents الذین ینتمون الى ال<br />

Tablespace بحیث یكون الحجم مضاعفات الرقم الموجود بجانب الجملة،‏ یعني اذا كان الرقم ھو 4<br />

فیكون أحجام ال Extents مضاعفات ھذا الرقم<br />

لتحدید حجم ال Block Size تعرفنا الى العامل DB_BLOCK_SIZE<br />

والذي یحدد الحجم المسمى بال Standard ولكن یسمح الأوراكل بوجود أربعة أحجام أخرى لل<br />

Block Size تسمى Non-Standard في حالة أن حجم ال Standard لا یناسب ال<br />

Tablespace وعندئذ یمكن تحدید ال Block Size بواسطة ھذه الجملة ویكون حجم ال<br />

Non-<br />

.(4, 8, 16,…)<br />

Tables و Indexes وغیرھا<br />

.Redo Log Files<br />

Indexes و Tables<br />

.Redo Log Files<br />

:[BLOCKSIZE]<br />

.32KB الى 2KB بین Standard<br />

:[LOGGING] تحدد أن جمیع عناصر ال Tablespace من<br />

یجب أن یتم كتابة المتغیرات التي تطرأ علیھا الى ال<br />

:[NOLOGGING] تحدد أن جمیع عناصر ال Tablespace من<br />

وغیرھا یجب أن لا یتم كتابة المتغیرات التي تطرأ علیھا الى ال<br />

"Storage Parameters" تحدد عوامل خاصة تسمى عوامل التخزین :[DEFAULT [C2<br />

التي سوف نتطرق لھا لاحقاً.‏<br />

:[OFFLINE] یوجد عدد من الحالات التي یمكن أن تكون علیھا ال Tablespace بعد تكوینھا<br />

والحالة تحدد أنھا غیر جاھزة للاستخدام ‏(ضد<br />

:[PERMANENT] تحدد أن نوعیة ال Tablespace من النوع الذي یحمل بیانات دائمة.‏<br />

:[TEMPORARY] تحدد أن نوعیة ال Tablespace من النوع الذي یحمل بیانات مؤقتھ.‏<br />

.(Online<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

مثال تطبیقي<br />

:5.1<br />

لتكوین ال Tablespace باستخدام جملة ال SQL یمكن كتابة:‏<br />

CREATE TABLESPACE user_data<br />

DATAFILE '…\oradata\db01\userdata01.dbf' SIZE 50M<br />

AUTOEXTEND ON NEXT 5M MAXSIZE 100M<br />

LOGGING<br />

OFFLINE<br />

TEMPORARY<br />

DEFAULT STORAGE (INITIAL 1M NEXT 1M MINEXTENTS 2<br />

PCTINCREASE 0 MAXEXTENTS<br />

999)<br />

;<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

.Standalone<br />

Database<br />

ادخل الى ال Console عبر<br />

اضغط على اسم ال لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم و كلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على ال<br />

اضغط على Tablespace ثم بواسطة الضغط بالزر الیمین للفأرة على ال Tablespace تظھر<br />

أوامر ، اختر<br />

تظھر نافذة جدیدة ، ادخل البیانات المطلوبة مثل اسم ال Tablespace وال<br />

وباقي البیانات ، ثم اضغط .CREATE<br />

لل<br />

.Normal<br />

Data Files التابعین<br />

.Storage Manager<br />

.Create<br />

Tablespace<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

78


MANAGING TABLESPACES SPACE<br />

Tablespace<br />

یكون لكل عنصر<br />

عندما یتم تخصیص مساحة لأي عنصر داخل ال<br />

مجموعة من ال ،Extents ویمكن ادارة مساحة ال Extent بطریقتین ھما:‏<br />

Segment<br />

Dictionary Managed وTablespace Locally Managed Tablespace<br />

ملاحظة:‏ لا یمكن تغییر طریقة إدارة ال Extents بعد تحدیدھا.‏<br />

تحوي على<br />

Data Files التابعة لل<br />

Free Blocks<br />

:LOCALLY MANAGED TABLESPACE<br />

تتبع ال Tablespace ھذه الطریقة عندما یتم تخزین معلومات ال Extents في ال<br />

یتم تخزین البیانات على شكل Bitmap ‏(خریطة بایتات)‏ والتي تدل على ال<br />

وعندا یحدث أي تعدیل على ال Blocks یقوم الأوراكل بتجدید بیانات<br />

و ال<br />

الBitmap لتوافق التغیرات التي طرأت.‏<br />

.Tablespace<br />

،Extents في ال Used Blocks<br />

من فوائد استخدام طریقة ال :Locally Managed<br />

تخفف الضغط على ال .Data Dictionary<br />

حجم ال Extent یمكن أن یقدر بشكل أوتوماتیكي و جمیع ال Extents تكون بنفس الحجم.‏<br />

عدم الحاجة الى جمع المساحات الخالیة الصغیرة الضائعة التي تنشئ بین البیانات نتیجة للتغیرات<br />

التي تحدث وتعیدھا الى المساحة الخالیة الرئیسیة وتسمى ھذه العملیة Coalescing Space<br />

) بمعنى أخر أنھا تمنع حدوث عملیات عدیدة تسبب ضغط على ال<br />

.(Database<br />

•<br />

•<br />

•<br />

لتكوین Tablespaces تتبع ھذه الطریقة ،<br />

یجب اضافة الجملة التالیة الى قاعدة<br />

:CREATE TABLESPACE<br />

EXTENT MANAGEMENT LOCAL<br />

[AUTOALLOCATE | UNIFORM [SIZE number [K|M] ] ]<br />

نقاط مھمة:‏<br />

1- لا یمكن استخدام جملة ال<br />

[DEFAULT C2]<br />

2- لا یمكن استخدام كلمة ال .TEMPORARY<br />

3- لا یمكن استخدام جملة ال .MINIMUM EXTENT<br />

أما أوامر الجملة فھي<br />

:<br />

:AUTOALLOCATE یقوم الأوراكل بتحدید حجم ال Extents ولا یستطیع الDBA فعل ذلك.‏<br />

.DBA من قبل ال Extents یتم تحدید حجم ال :UNIFORM<br />

•<br />

•<br />

79


مثال تطبیقي<br />

:5.2<br />

یمكن تكوین<br />

Tablespace تتبع طریقة ال Locally Managed بكتابة التالي:‏<br />

CREATE TABLESPACE app_data<br />

DATAFILE '…\oradata\db01\appdata01.dbf' SIZE 250M<br />

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K;<br />

أو اذا تم كتابة التالي فقط ، فتعتبر Locally Managed ویؤخذ ال<br />

:Autoallocate وھو Default<br />

CREATE TABLESPACE app_data<br />

DATAFILE '…\oradata\db01\appdata01.dbf' SIZE 250M;<br />

:DICTIONARY MANAGED TABLESPACE<br />

تتبع ال Tablespace ھذه الطریقة عندما یتم تخزین معلومات ال<br />

من فوائد استخدام طریقة ال Dictionary Managed انھا توفر مرونة في تحدید حجم كل<br />

ولكن في المقابل تلزم الحاجة الى جمع المساحات الخالیة<br />

حده باستخدام جملة ال<br />

الصغیرة الضائعة التي تنشئ بین البیانات نتیجة للتغیرات التي تحدث و تعیدھا الى المساحة الخالیة الرئیسیة ،<br />

أي حدوث عملیات قد تسبب مزید من الضغط على ال .Database<br />

.Data Dictionary في ال Extents<br />

Segment على<br />

.[DEFAULT C2]<br />

لتكوین Tablespaces تتبع ھذه الطریقة ، یجب اضافة الجملة التالیة الى قاعدة<br />

:CREATE TABLESPACE<br />

مثال تطبیقي<br />

EXTENT MANAGEMENT DICTIONARY [DEFAULT C2]<br />

:5.3<br />

CREATE TABLESPACE app_data<br />

DATAFILE '…\oradata\db01\appdata01.dbf' SIZE 250M<br />

EXTENT MANAGEMENT DICTIONARY<br />

DEFAULT STORAGE (INITIAL 1M NEXT 1M] ;<br />

ملاحظة:‏ یمكن تغییر قیم العوامل ضمن الجملة [C2 [DEFAULT أو جملة ال<br />

EXTENT باستخدام الأمر ، ALTER TABLESPACE أو عبر ال<br />

MINIMUM<br />

.Console<br />

80


مثال تطبیقي<br />

:5.4<br />

لتغییر جملة ال :Minimum Extent<br />

ALTER TABLESPACE app_data MINIMUM EXTENT 2M;<br />

لتغییر جملة ال Storage… :Default<br />

ALTER TABLESPACE user_data<br />

DEFAULT STORAGE (<br />

INITIAL 2M<br />

NEXT 2M<br />

MINEXTENTS 1500);<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم و كلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على ال<br />

اضغط على Tablespace ثم الضغط بالزر الیمین للفأرة على اسم ال Tablespace المراد تغیر<br />

خواصھا لتظھر قائمة أوامر،‏ أختر من الأوامر<br />

تظھر نافذة جدیدة ، اضغط على كلمة Storage ثم أدخل التغیرات المطلوبة،‏ ثم اضغط .Apply<br />

.Normal<br />

.View\Edit Details<br />

.Storage Manager<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

تذكر:‏ أنھ لا یمكن تغییر خواص ال Storage لل Tablespace التي تتبع طریقة ال .Locally Managed<br />

81


NON-SYSTEM TABLESPACES<br />

، Database منھا<br />

Non-System Tablespaces<br />

.Temporary Tablespace و Undo Tablespace Permanent Tablespace<br />

Database عن<br />

Permanent Tablespace فوظائفھا<br />

Tablespace الخاص<br />

ولكل منھا وظائف مختلفة في ال<br />

یوجد أكثر من<br />

و<br />

تخزین البیانات "Data" لفصل بیانات ال<br />

أما<br />

بیانات ال Data Dictionary و لسھولة التحكم في البیانات بحیث اذا تم حذف ال<br />

بھا لا یؤثر ذلك على عمل ال Data Dictionary و لتخفیف الضغط على ال System Tablespace وال<br />

Database بشكل عام.‏<br />

:UNDO TABLESPACE<br />

تستخدم لحفظ ال Undo Segment ولا یمكن أن تحتوي على غیرھا.‏ یتم إدارة ال Extents بطریقة ال<br />

و یمكن تكوینھا باتباع القاعدة التالیة ‏(أو تكوینھا عند تكوین ال Database<br />

CREATE UNDO TABLESPACE tablespace_name<br />

[DATAFILE C1]<br />

EXTENT MANAGEMENT LOCAL<br />

[AUTOALLOCATE | UNIFORM [SIZE number [K|M] ] ]<br />

Locally Managed<br />

باستخدام :(CREATE DATABASE<br />

ملاحظة:‏ تستخدم ال Undo Tablespace في ال<br />

نتطرق لھا في فصل أخر مع ال<br />

مثال تطبیقي<br />

Automatic Undo Management التي سوف<br />

.Undo Segment<br />

:5.5<br />

CREATE UNDO TABLESPACE undo01<br />

DATAFILE '…\oradata\db01\undo101.dbf' SIZE 50M;<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على ال<br />

اضغط على Tablespace ثم الضغط بالزر الیمین للفأرة على اسم ال Tablespace المراد تغیر<br />

خواصھا لتظھر قائمة أوامر،‏ أختر من الأوامر<br />

تظھر نافذة جدیدة ، أختر Undo عوضأ عن Permanent ثم ادخل البیانات المطلوبة مثل اسم ال<br />

Tablespace ثم أضغط<br />

.Normal<br />

.Create<br />

.Storage Manager<br />

.Create<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

تذكر:‏ بیانات ال<br />

Undo Segment<br />

.Initialization Parameter File<br />

تخزن في ال<br />

Control File و ال Alert Log File و ال<br />

82


:TEMPORARY TABLESPACE<br />

توفر المساحة اللازمة لعملیات ال Sort المختلفة الناتجة عن أوامرعدة مثل Order By أوBy .Group<br />

بمعنى أخر أنھا تخزن البیانات المؤقتة Data" ،"Temporary وتحوي ما یعرف ب<br />

والتي تتكون في ال Tablespace عند أول عملیة Sort تطلب من ال .Instance یمكن إدارة ال<br />

بالطریقتین و لكن ینصح باستخدام .Locally Managed<br />

Sort Segment<br />

Extents<br />

ملاحظة:‏ تستطیع ال Sort Segment التوسع في المساحة بحجز المزید من ال Extents لكي یتم تغطیة<br />

المساحة اللازمة لعملیات ال<br />

Sort المختلفة.‏<br />

یمكن تكوین ال Temporary Tablespace باستخدام جملة CREATE TABLESPACE مع إضافة<br />

كلمة TEMPORARY في الجملة و لكن یفضل استخدام القاعدة التالیة لتكوین :Locally Managed<br />

CREATE TEMPORARY TABLESPACE temp's name<br />

TEMPFILE 'filename'<br />

EXTENT MANAGEMENT LOCAL<br />

[AUTOALLOCATE | UNIFORM [SIZE number [K|M] ] ]<br />

مثال تطبیقي<br />

:5.6<br />

CREATE TEMPORARY TABLESPACE temp01<br />

TEMPFILE '…\oradata\db05\temp01.dbf ' SIZE 200M<br />

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M;<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على ال<br />

اضغط على Tablespace ثم بواسطة الضغط بالزر الیمین للفأرة على ال Tablespace تظھر<br />

أوامر ، اختر<br />

تظھر نافذة جدیدة ، أختر الخیار Temporary عوضأ عن Permanent ثم ادخل البیانات<br />

المطلوبة مثل اسم ال Tablespace و أدخل البیانات التابعة لقسم ال Storage مثل ال<br />

ثم أضغط<br />

.Size<br />

.Normal<br />

.Storage Manager<br />

.Create<br />

.Create<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

یعتبر TEMPFILE ‏(الذي استخدم في القاعدة)‏ متطابقاً‏ لل DATAFILE<br />

عدا في الاختلافات التالیة:‏<br />

لا یمكن وضعھ في حالة القراءة فقط .Read-Only<br />

لا یمكن تغییر اسم الملف.‏<br />

لا یمكن أن یتم لھ عملیة .Recovery<br />

لا یمكن تكوینھ باستخدام ال .ALTER DATABASE<br />

دائماً‏ في وضعیة ال .NOLOGGING<br />

لا یمكن استخدامھا مع جملة ال .CREATE CONTROLFILE<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

83


:Default Temporary Tablespaces<br />

باستخدام قاعدة CREATE DATABASE یمكن تكوین Default Temporary Tablespace والتي<br />

تحمي ال Database من استخدام ال System Tablespace عوضاً‏ عن ال Temporary في تنفیذ<br />

عملیات ال Sorts والتي قد تؤدي الى مشاكل عدة في ال System Tablespace وازدیاد نسبة ال<br />

.System Tablespace داخل ال Fragmentation<br />

في حال لم یتم تكوین ال Temporary Tablespace مع تكوین ال Database وتم تكوینھا بعد ذلك ،<br />

یمكن تحدید أنھا ال Default Temporary بواسطة أمر ،ALTER DATABASE وجمیع<br />

المستخدمین الذین كانوا یستخدمون ال System Tablespace لعملیات ال Sorts یتم تحویلھم بشكل<br />

أوتوماتیكي الى ال<br />

ملاحظة:‏ اذا اراد ال DBA تغییر ال<br />

أخرى لتكون ھي ال<br />

.Default Temporary Tablespace<br />

Temporary الى Default Temporary Tablespace<br />

.ALTER DATABASE یمكن استخدام ، Default<br />

Tablespace<br />

ملاحظة‎2‎‏:‏ اذا تم تكوین ال Default Temporary Tablespace بواسطة CREATE<br />

.Locally Managed فإنھا تتبع طریقة ال DATABASE<br />

قیود ال<br />

:Default Temporary Tablespace<br />

لا یمكن حذف ال Default Temporary Tablespace إلا بعد تحویلھا الى Temporary<br />

.ALTER DATABASE أخرى بواسطة ال Tablespace<br />

لا یمكن تحویل ال<br />

لا یمكن وضعھا في حالة ال<br />

.Permanent الى Default Temporary<br />

.Offline<br />

•<br />

•<br />

•<br />

مثال تطبیقي<br />

:5.7<br />

لتعریف ال<br />

أخرى یجب كتابة التالي:‏<br />

Temporary Tablespace<br />

كنوعیة ال Default أو لتغییر ال Default Temporary الى<br />

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp02;<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على ال<br />

اضغط على Tablespace ثم بواسطة الضغط بالزر الیمین للفأرة على ال Tablespace تظھر<br />

أوامر ، اختر<br />

تظھر نافذة جدیدة ، أختر الخیار Temporary عوضأ عن Permanent ثم ادخل البیانات<br />

المطلوبة مثل اسم ال Tablespace وأدخل البیانات التابعة لقسم ال Storage مثل ال<br />

یجت تحدید الخانة<br />

.Normal<br />

.Storage Manager<br />

.Create<br />

.Size<br />

.Create ثم أضغط Set as Default Temporary Tablespace<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

84


ALTERING A TABLESPACE<br />

یمكن تعدیل Tablespaces أو حذفھم بواسطة أمر ،ALTER TABLESPACE بحیث یمكن تنفیذ<br />

Tablespace في وضعیة القراءة فقط<br />

بواسطة ھذا الأمر:‏ تغییر الحالة بین<br />

تغییر حجم ال ،Tablespace وغیرھا من المھام.‏<br />

Offline و ، Online وضع ال<br />

، Tablespace حذف ، Read-Only<br />

:OFFLINE OR ONLINE<br />

عندما تكون ال Tablespace في حالة ،Offline لا یستطیع المستخدم استخراج البیانات المخزنة في ال<br />

Tablespace من ال .Database یمكن وضع ال Tablespace في حالة ال Offline لعدة اسباب منھا أن<br />

ال DBA یرغب في اغلاق جزء من البیانات أو عمل عملیة Backup أو Recovery على ھذا الجزء دون<br />

إغلاق ال Database بشكل تام أو نقل أو تغییر اسم Data Files لل Tablespace دون إغلاق ال<br />

Database بشكل كامل.‏<br />

عندما تتغیر حالة ال Tablespace من Online الى Offline أو بالعكس،‏ یتم تخزین معلومات حول العملیة<br />

Instance تحویل حالة ال<br />

في ال Data Dictionary وفي ال<br />

بین الحالتین عند حدوث أخطاء أو مشاكل مثل عدم المقدرة على نقل البیانات الى ال .Tablespace<br />

لا یمكن وضع جمیع ال Tablespaces في حالة ال Offline اذ یسثنى كل من ال System Tablespace<br />

و ال Default Temporary وال Tablespace التي تحوي<br />

Tablespace<br />

.Active في حالة Undo Segment<br />

.Control File یمكن لل<br />

یمكن التحویل بین الحالتین باستخدام القاعدة التالیة:‏<br />

ALTER TABLESPACE tablespace's name<br />

ONLINE |<br />

OFFLINE [NORMAL | TEMPORARY | IMMEDIATE| FOR RECOVER]<br />

أوامر القاعدة:‏<br />

:NORMAL<br />

یتم كتابة جمیع البیانات المتغیرة<br />

في ذاكرة ال SGA الى ال Data Files ضمن ال Tablespace المراد إغلاقھا.‏<br />

:TEMPORARY توفر عملیة Checkpoint لجمیع ال<br />

Tablespace المراد إغلاقھا و لا توفر ذات العملیة لل<br />

:IMMEDIATE لا تقوم بعملیة Checkpoint على ال<br />

المراد غلقھا وبالتالي یجب القیام بعملیة Recovery عند الرغبة بتحویلھا الى<br />

Tablespace في عملیة<br />

Data Files الخاصة بال "Dirty Buffers"<br />

Online Data Files ضمن ال<br />

.Offline Data Files<br />

Tablespace ضمن ال Data Files<br />

.Online<br />

.Recovery<br />

:FOR RECOVER لاستخدام ال<br />

•<br />

•<br />

•<br />

•<br />

تذكر النقاط التالیة:‏<br />

أن ال DBWn یعمل عندما یتم وضع ال<br />

في حالة ال<br />

Temporary أو Permanent Tablespace<br />

.Offline<br />

Tablespace<br />

•<br />

أن وضع ال Tablespace في حالة ال<br />

Offline Normal یؤدي الى حدوث عملیة ال<br />

.Checkpoint<br />

•<br />

أنھ یمكن وضع ال Tablespace في احدى الحالتین عند تكوینھا بواسطة CREATE<br />

.TABLESPACE<br />

•<br />

85


مثال تطبیقي<br />

:5.8<br />

لوضع ال Tablespace في حالة ال Online یجب كتابة:‏<br />

ALTER TABLESPACE user_data ONLINE;<br />

لوضع ال Tablespace في حالة ال Offline یمكن كتابة:‏<br />

ALTER TABLESPACE user_data OFFLINE;<br />

ALTER TABLESPACE user_data OFFLINE IMMEDIATE;<br />

ALTER TABLESPACE user_data OFFLINE TEMPORARY;<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على ال<br />

اضغط على ال + بجانب كلمة Tablespace لیظھر قائمة بأسماء ال<br />

اضغط على اسم ال Tablespace المراد تحویل حالتھا.‏<br />

یظھر على النافذة الیمنى بعض خصائص ال ،Tablespace اختر Offline وحالة الإغلاق من<br />

المجموعة التي بجانبھا ثم اضغط على .Apply<br />

.Normal<br />

.Tablespaces<br />

.Storage Manager<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:READ-ONLY TABLESPACE<br />

یمكن وضع ال Tablespace في حالة القراءة فقط "Read-Only" اذا رغب ال DBA بأن تتم قراءة<br />

بیانات ال Data Files ضمن ال Tablespace دون تغییر البیانات.‏ لكي یستطیع ال DBA وضع ال<br />

Tablespace في حالة ال Read-Only یجب أن یكون جمیع ال<br />

في وضعیة Online وإلا فأن العملیة لن تنجح ، والعكس صحیح في حال تحویل ال<br />

Read-Only الى الحالة العادیة Read-Write یحب توفر جمیع ال<br />

یمكن وضع ال Tablespace في حالة Read-Only باستخدام القاعدة التالیة:‏<br />

Tablespace التابعیین لل Data Files<br />

Tablespace من<br />

.Online في وضعیة Data Files<br />

ALTER TABLESPACE tablespace's name READ [ONLY | WRITE]<br />

(Tables, Indexes)<br />

من ال Read-Only Tablespace اذ أن حذف عناصر لا تكون<br />

یمكن حذف عناصر<br />

بیانات جدیدة في ال Tablespace ولا تغییر البیانات الموجودة إنما تغییر بیانات ال .Data Dictionary<br />

وفي حال كانت تجرى على ال Tablespace عدد من المھام "Transaction" عند عملیة التحویل ، یتم<br />

منع حدوث مھام جدیدة ویتم انجاز المھام التي تجري وإما أن تسجل البیانات الناتجة عن المھام عند حدوث<br />

.Rollback أو تلغى عند حدوث Commit<br />

ملاحظة:‏ لا یمكن وضع ال<br />

.Read-Only في حالة ال System Tablespace<br />

86


مثال تطبیقي<br />

:5.9<br />

لوضع ال Tablespace في حالة ال Read-Only یجب كتابة:‏<br />

ALTER TABLESPACE user_data READ ONLY;<br />

لوضع ال Tablespace في الحالة العادیة:‏<br />

ALTER TABLESPACE user_data READ WRITE;<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على ال<br />

اضغط على ال + بجانب كلمة Tablespace لیظھر قائمة بأسماء ال<br />

اضغط على اسم ال Tablespace المراد تحویل حالتھا.‏<br />

یظھر على النافذة الیمنى بعض خصائص ال ،Tablespace ضع علامة في المربع بجانب كلمة<br />

.Apply ثم اضغط على ، Read Only<br />

.Normal<br />

.Tablespaces<br />

.Storage Manager<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

تذكر:‏ أن وضع ال Tablespace في حالة ال Read-Only یؤدي الى عمل ال DBWn و حدوث عملیة ال<br />

.Checkpoint<br />

:DROPPING TABLESPACES<br />

یمكن حذف Tablespace من ال Database باستخدام القاعدة التالیة:‏<br />

DROP TABLESPACE tablespace's name<br />

[INCLUDING CONTENTS [AND DATAFILES] [CASCADE CONSTRAINTS]]<br />

أوامر القاعدة:‏<br />

:INCLUDING CONTENTS اذا كانت ال Tablespace خالیة لا تحوي أي بیانات<br />

فلا یشترط كتابة ھذه الجملة ، ولكن اذا كانت تحوي على بیانات "Data" فیجب كتابة<br />

ھذه الجملة.‏<br />

:AND DATAFILES كما تعرف أن لكل Tablespace مجموعة من ال<br />

لھا تكون الجزء الفیزیائي ‏(الملفات الحقیقة)‏ على موقع التخزین ‏(مثل القرص الصلب).‏ عندما لا<br />

تكتب ھذه الجملة لا تحذف ملفات ال Data Files من موقع التخزین والعكس صحیح اذ أن كتابة<br />

ھذه الجملة تؤدي الى حذف ملفات ال<br />

یجب استخدام ھذه الجملة في حالة وجود ما یعرف ب<br />

من Table توجد خارج ال Tablespace المراد<br />

حذفھا مع Primary Key أو Unique Key لTable موجودة داخل ال .Tablespace في حال<br />

وجود ھذا الرابط ولم یتم استخدام ھذه الجملة ، تفشل عملیة الحذف.‏<br />

Data Files التابعة<br />

"Data"<br />

Data Files بشكل أوتوماتیكي.‏<br />

:CASCADE CONSTRAINTS<br />

(Foreign Key) Referential Integrity<br />

•<br />

•<br />

•<br />

87


نقاط مھمة:‏<br />

1- یمكن حذف ال Tablespace التي توجد في وضعیة .Read-Only<br />

2- ینصح بتحویل ال Tablespace الى حالة Offline قبل حذفھا للتأكد من عدم وجود مھام أو عملیات<br />

تجري على ال ، Tablespace اذ بتحویلھا الى Offline یتم وقف العملیات الجدیدة وإنھاء المھمات الحالیة<br />

كما شرحنا قبل قلیل.‏<br />

3- بعد حذف ال Tablespace یتم تعدیل بیانات ال Control File لتتوافق مع التغییر الذي حدث في ال<br />

.Tablespace<br />

تذكر:‏ أن ال<br />

Control File یحوي معلومات حول أسماء ال Tablespaces وأسماء و مواقع ال<br />

Data<br />

.Files<br />

مثال تطبیقي<br />

5.10<br />

لحذف Tablespace<br />

یمكن كتابة التالي:‏<br />

DROP TABLESPACE user_data<br />

INCLUDING CONTENTS AND DATAFILES;<br />

DROP TABLESPACE user_data<br />

INCLUDING CONTENTS CASCADE CONSTRAINT;<br />

DROP TABLESPACE user_data<br />

INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINT;<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على ال<br />

اضغط على ال + بجانب كلمة Tablespace لیظھر قائمة بأسماء ال<br />

حذفھا.‏<br />

اضغط على اسم ال<br />

استخدم الزر الیمین للفأرة اتظھر لك قائمة،‏ اختر .Remove<br />

أختر Yes لتأكید الحذف.‏<br />

.Normal<br />

.Tablespaces<br />

.Storage Manager<br />

Tablespace المراد<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

88


Data Files التابعة لھا<br />

:RESIZING A TABLESPACE<br />

أو إضافة<br />

یمكن زیادة حجم ال Tablespace بزیادة حجم ال<br />

.Tablespace یمكن زیادة حجم ال Data Files بطریقة یدویة أو أوتوماتیكیة.‏<br />

Data Files جدیدة لل<br />

:Automatic Extension<br />

یمكن استخدام جملة ال AUTOEXTEND لزیادة حجم ال Data Files بطریقة أوتوماتیكیة أو لوقف ھذه<br />

العملیة.‏ یمكن استخدام جملة ال AUTOEXTEND بعد تكوین ال<br />

باستخدام القاعدة التالیة:‏<br />

أوامر القاعدة:‏<br />

Tablespace أو ال Database<br />

ALTER DATABASE [database's name]<br />

DATAFILE 'filename' [SIZE number] [K | M] [REUSE]<br />

[AUTOEXTEND OFF|ON [NEXT number [K|M]]<br />

[MAXSIZE UNLIMITED | number [K |M]]<br />

:AUTOEXTEND OFF توقف عملیة زیادة حجم الملفات بشكل أوتوماتیكي.‏<br />

لتشغیل عملیة زیادة حجم الملفات بشكل أوتوماتیكي عند أمتلاء<br />

الملفات.‏<br />

:NEXT حجم الزیادة عند أمتلاء ال<br />

لتحدید الحجم الأقصى الذي یمكن أن یصل لھ حجم ال .Data Files یمكن أن یحدد<br />

الحد الأقصى أو ان یكون غیر محدد باستخدام .UNLIMITED<br />

.Data Files<br />

:AUTOEXTEND ON<br />

:MAXSIZE<br />

•<br />

•<br />

•<br />

•<br />

تذكر:‏ تستخدم جملة ال AUTOEXTEND في قاعدة CREATE DATABASE<br />

و CREATE<br />

.TABLESPACE<br />

مثال تطبیقي<br />

لزیادة حجم ال<br />

5.11<br />

Data Files ضمن ال<br />

Tablespace بشكل أوتوماتیكي:‏<br />

ALTER DATABASE DATAFILE '…\oradata\db01\userdata01.dbf'<br />

AUTOEXTEND ON NEXT 10M MAXSIZE 250M;<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على ال<br />

اضغط على ال + بجانب كلمة Data Files لیظھر قائمة بأسماء ال<br />

اضغط على اسم ال Data File المراد تكبیرھا.‏<br />

اضغط على كلمة ال Storage لتدخل الى القسم الأخر<br />

ضع علامة في المربع ثم أكتب قیم كل من<br />

قیمة Value ثم اضغط على .Apply<br />

.Normal<br />

.Data Files<br />

.<br />

(NEXT) ، Increment واختر إما Unlimited او<br />

.Storage Manager<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

89


:Manual Extension<br />

یمكن زیادة أو انقاص حجم ال Data Files باستخدام القاعدة التالیة:‏<br />

ALTER DATABASE [database's name] DATAFILE 'filename', ['filename2'] …<br />

RESIZE number [K|M]<br />

سؤال:‏ لنفرض أنھ یوجد لدینا<br />

DBA تصغیر حجمھ الى ، 60 MB فھل تنجح العملیة ؟ و كم یكون حجم ال<br />

Data File حجمھ 100 MB وھو یحوي على 70 MB بیانات ، واراد ال<br />

Data File بعد التصغیر؟<br />

جواب:‏ نعم تنجح عملیة التصغیر ولكن یكون حجم ال Data File ھو حجم البیانات فیھ وھو 70. MB<br />

ملاحظة:‏ یمكن تكبیر أو تصغیر حجم أكثر من ملف في نفس الوقت كما في المثال<br />

مثال تطبیقي<br />

لزیادة حجم ال<br />

5.12<br />

5.12<br />

Data Files ضمن ال<br />

Tablespace بشكل یدوي:‏<br />

ALTER DATABASE DATAFILE '…\oradata\db01\userdata01.dbf',<br />

'….\oradata\db01\userdata02.dbf'<br />

RESIZE 250M;<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على ال<br />

اضغط على ال + بجانب كلمة Data Files لیظھر قائمة بأسماء ال<br />

اضغط على اسم ال Data File المراد تكبیرھا أو تصغیرھا.‏<br />

ادخل الحجم الجدید في خانة<br />

.Normal<br />

.Data Files<br />

.Apply ثم اضغط File Size<br />

.Storage Manager<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

90


:Adding Data File<br />

یمكن اضافة<br />

Data Files الى ال<br />

Tablespace لتكبیر حجمھا عبر القاعدة:‏<br />

ALTER TABLESPACE tablespace's name ADD DATAFILE<br />

'filename' [SIZE number [K|M]] [REUSE] [AUTOEXTEND …] , ….<br />

ملاحظة:‏ یمكن اضافة أكثر من ملف في نفس الوقت.‏ استخدم فاصلة في أخر القاعدة وأعد كتابة السطر الثاني.‏<br />

كما في المثال<br />

مثال تطبیقي<br />

لاضافة<br />

.5.13<br />

:5.13<br />

:Tablespace الى ال Data Files<br />

ALTER TABLESPACE user_data ADD DATAFILE<br />

'…\oradata\db01\userdata01.dbf' SIZE 200M<br />

AUTOEXTEND ON NEXT 10M MAXSIZE 250M,<br />

'…\oradata\db01\userdata02.dbf' SIZE 200M<br />

AUTOEXTEND ON NEXT 10M MAXSIZE 250M;<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على ال<br />

اضغط على ال + بجانب كلمة Tablespace لیظھر قائمة بأسماء ال<br />

اضغط على اسم ال Tablespace المراد اضافة<br />

استخدم الزر الیمین للفأرة اتظھر لك قائمة،‏<br />

تظھر لك نافذة جدیدة ، ادخل البیانات مثل اسم الملف ثم اضغط<br />

.Normal<br />

.Tablespaces<br />

Data File لھا.‏<br />

.Add Datafile<br />

.Create<br />

.Storage Manager<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:MOVING DATAFILES<br />

یمكن نقل ال Data Files من موقع الى أخر باستخدام إما ALTER TABLESPACE أو ALTER<br />

.DATABASE<br />

باستخدام :Alter Tablespace<br />

یمكن نقل ملفات ال Data Files باستخدام القاعدة التالیة:‏<br />

ALTER TABLESPACE tablespace's name<br />

RENAME DATAFILE 'filename' , ['filename']<br />

TO 'filename' , ['filename'];<br />

91


طریقة التنفیذ:‏<br />

.Offline<br />

Data File الى المواقع<br />

.(PASTE و COPY<br />

ضع ال Tablespace في حالة<br />

الجدیدة ‏(القیام بعملیة النسخ كما في نظام التشغیل ، اي في<br />

نسخ ملف ال<br />

الویندوز یستخدم الفأرة مع<br />

تنفیذ القاعدة السابقة.‏<br />

تحویل ال Tablespace الى الحالة<br />

یمكن حذف ال Data Files الموجودة في الموقع القدیم كما في نظام التشغیل.‏<br />

Online<br />

•<br />

•<br />

•<br />

•<br />

•<br />

شروط الاستخدام:‏<br />

یجب أن تكون ال Tablespace في حالة ال .Offline<br />

یجب تواجد ملفات ال Data Files المراد نقلھا في الموقع المحدد في القاعدة.‏<br />

یج ب أن تتط ابق اس ماء ال Data Files المنقول ة م ع اس ماء ال Data Files المخزن ة ف ي ال<br />

.Control File<br />

لا یمكن نقل Data Files التابعیین لل .System Tablespace<br />

•<br />

•<br />

•<br />

•<br />

مثال تطبیقي<br />

:5.14<br />

بعد تنفیذ النقطتین الأولى و الثانیة من طریقة النتفیذ:‏<br />

ALTER TABLESPACE app_data RENAME DATAFILE<br />

'…\oradata\db01\app01.dbf' , '…\oradata\db01\app02.dbf'<br />

TO<br />

'…\oradata\db02\app01.dbf' , ' …\oradata\db02\app02.dbf';<br />

باستخدام<br />

:Alter Database<br />

یمكن نقل ملفات ال Data Files باستخدام القاعدة التالیة:‏<br />

طریقة التنفیذ:‏<br />

ALTER DATABASE database's name<br />

RENAME FILE 'filename' , ['filename']<br />

TO 'filename' , ['filename'];<br />

اغلاق ال<br />

نسخ ملف ال<br />

الویندوز یستخدم الفأرة مع<br />

تشغیل ال Database في حالة ال<br />

تنفیذ القاعدة السابقة.‏<br />

تشغیل ال<br />

.Database<br />

Data File الى المواقع<br />

.(PASTE و COPY<br />

.Mount<br />

.Open في حالة Database<br />

الجدیدة ‏(القیام بعملیة النسخ كما في نظام التشغیل ، أي في<br />

•<br />

•<br />

•<br />

•<br />

•<br />

92


شروط الاستخدام:‏<br />

یجب أن تكون ال Database في حالة ال .Mount<br />

یجب تواجد ملفات ال Data Files المراد نقلھا في الموقع المحدد في القاعدة.‏<br />

یمكن نقل<br />

.System Tablespace التابعیین لل Data Files<br />

•<br />

•<br />

•<br />

تذكر:‏ ھي نفس القاعدة التي استخدمناھا لنقل أو تغییر اسماء ال<br />

.Redo Log Files<br />

مثال تطبیقي<br />

:5.15<br />

بعد تنفیذ الثلاث نقاط الأولى من طریقة النتفیذ:‏<br />

ALTER DATABASE app_data RENAME FILE<br />

'…\oradata\db01\app01.dbf'<br />

TO<br />

'…\oradata\db02\app01.dbf';<br />

:TABLESPACE WITH OMF<br />

یمكن تكوین Tablespace تتبع نظام ال OMF بتحدد العامل "Parameter"<br />

Data Files التابعیین لل Tablespace واستخدام قاعدة ال<br />

CREATE TABLESPACE مع عدة اختلافات مثل عدم الضرورة لذكر اسم ال<br />

القاعدة.‏<br />

Data Files في<br />

CREATE TABLESPACE tablespace's name<br />

[DATAFILE [filename] [SIZE number [K|M] ] ;<br />

DB_CREATE_FILE_DEST لل<br />

عند تكوین ال Tablespace بنظام ال OMF تكون ال<br />

:Data Files<br />

حجمھا ال 100MB Default ‏(كما في المثال<br />

تستخدم الطریقة الأوتوماتیكیة لزیادة حجمھا<br />

للحجم<br />

(5.16<br />

(AUTOEXTEND)<br />

.(UNLIMITED)<br />

مع عدم تحدید أقصى حد<br />

•<br />

•<br />

مثال تطبیقي<br />

:5.16<br />

لتكوین Tablespace بنظام ال OMF یجب تحدید العامل "Parameter"<br />

DB_CREATE_FILE_DEST ثم كتابة التالي:‏<br />

CREATE TABLESPACE new_data;<br />

93


:QUERYING INFORMATION<br />

للحصول على معلومات حول ال Tablespaces یمكن استخدام:‏<br />

:DBA_TABLESPACES یوفر ھذا ال View معلومات حول جمیع ال Tablespaces في<br />

ال Database مثل اسم ال Tablespaces ونوعیة ال<br />

ونوعیة ادارة ال<br />

(Temporary, Undo) Tablespace<br />

(Locally, Dictionary) Extents وغیرھا.‏<br />

.Tablespaces توفر معلومات عن اسم و رقم ال :V$TABLESPACE<br />

•<br />

•<br />

للحصول على معلومات حول ال<br />

Data Files یمكن استخدام:‏<br />

:DBA_DATA_FILES یوفر معلومات حول ال<br />

Tablespace التي ینتمي لھا ال<br />

Data Files مثل اسم Data Files وال<br />

Data File وحجم ال<br />

:V$DATAFILE یوفر معلومات حول ال Data Files مثل حالة ال<br />

، حجم ال<br />

Data Files وغیرھا من المعلومات.‏<br />

Data File<br />

Data Files وغیرھا.‏<br />

(Online,Offline)<br />

•<br />

•<br />

للحصول على معلومات حول ال<br />

Temp Files یمكن استخدام:‏<br />

:DBA_TEMP_FILES<br />

یوفر معلومات حول ال<br />

Tablespace التي ینتمي لھا ال<br />

Temp Files مثل اسم Temp Files و ال<br />

Temp File وحجم ال<br />

:V$TEMPFILE یوفر معلومات حول ال Temp Files مثل حالة ال<br />

، حجم ال<br />

Temp Files وغیرھا من المعلومات.‏<br />

Temp File<br />

Temp Files وغیرھا.‏<br />

(Online,Offline)<br />

•<br />

•<br />

94


SEGMENTS & STORAGE<br />

STRUCTURES<br />

95


SEGMENTS<br />

ال ھي احدى مكونات ال Logical Structure وتأتي بعد ال<br />

یمكن لل Tablespace أن تحوي أكثر من Segments كما یمكن لل Segment أن تتكون من أكثر من<br />

Tablespace في الترتیب ،<br />

Segment مثل:‏<br />

Segment<br />

.Extent<br />

یوجد عدة أنواع من ال<br />

.TABLE SEGMENT<br />

.TABLE PARTITION SEGMENT<br />

.CLUSTER SEGMENT<br />

.INDEX SEGMENT<br />

.INDEX-ORGANIZED TABLE SEGMENT<br />

.INDEX PARTITION SEGMENT<br />

.TEMPORARY SEGMENT<br />

.UNDO SEGMENT<br />

.LOB SEGMENT<br />

.NESTED TABLE SEGMENT<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

سوف یأتي ذكر<br />

كل نوع لاحقاً.‏<br />

96


DATA BLOCKS<br />

Data<br />

ھي أصغر وحدة تخزین في الأوراكل ویتم تحدید حجمھا بواسطة العامل "Parameter"<br />

DB_BLOCK_SIZE عند تكوین ال Database ولا یمكن تغییر الحجم فیما بعد.‏ یتكون ال<br />

Block من:‏<br />

Data, Index, )<br />

Tables التي<br />

.(or Undo<br />

Block Header ایضاً‏ ما<br />

.Data Block في ال ( Data Rows)<br />

(Rows)<br />

Transaction Slots ھي ال Block Header<br />

للمھمات "Transactions"<br />

:BLOCK HEADER یحتوي على معلومات حول ال Data Block ونوعھ<br />

یحتوي أیضاً‏ على ال Table Directory الذي یوفر معلومات حول ال<br />

ومن أجزاء ال<br />

لھا بیانات<br />

یعرف باسم Row Directory الذي یوفر معلومات حول البیانات المخزنة في ال Block<br />

مثل ال .Row Address الجزء الأخیر من ال<br />

التي تستخدم عندما تحدث تغیرات في البیانات "Rows" نتیجة<br />

المختلفة.‏<br />

."Rows" ھي المساحة التي یتم تخزین البیانات بھا :DATA SPACE<br />

Data Space وال Block Header<br />

:FREE SPACE<br />

ھي مساحة خالیة تساعد كل من ال<br />

على التوسع في الحجم اذا لزم الأمر.‏ في حال حدوث عملیات كثیرة تسبب أخذ مساحة منھا ثم اعادة<br />

مساحة لھا بشكل متكرر یحدث Fragmentation ویقوم الأوراكل بعملیة Coalesce لھا.‏<br />

•<br />

•<br />

•<br />

تذكر:‏ عملیة ال Coalescing من درس ال .Locally Managed Tablespace<br />

Data Files<br />

تذكر‎2‎‏:‏ یتم تخزین رقم ال<br />

Log Sequence Number ورقم ال<br />

.Header<br />

Checkpoint في ال<br />

الرسم 6.1<br />

ملاحظة:‏ الأسھم في الرسم 6.1 تشیر الى الطریقة التي تكبر بھا مساحة كل من ال<br />

Block Header وھي طریقة عكسیة ، من أسفل الى أعلى ومن أعلى الى أسفل على التوالي.‏<br />

Data Space وال<br />

97


:BLOCK STORAGE PARAMETERS<br />

عندما یتم تكوین Table أو عنصر أخر "Object" یمكن تحدید عوامل تتحكم في ال<br />

تنتمي لھذا العنصر.‏ تحدید ھذه العوامل مھم جداً‏ ، لأنھا تعمل على توفیر مساحة كبیرة وتحسین الاداراة<br />

والعمل.‏<br />

Data Blocks التي<br />

:PCTFREE عند تحدیدھا ، یتم حجز مساحة من حجم ال Block تخصص للزیادة المتوقعة في<br />

في ال<br />

البیانات Rows" "Data النانتجة من تغییر "Update"<br />

،Block الحجم ال<br />

البیانات Rows" "Data<br />

Default لھا ھو 10%.<br />

:PCTUSED تمثل الحجم الأدني للبیانات Rows" "Data في ال Block الذي اذا قل حجم<br />

المخزنة داخلھ عن حجم ال ، PCTUSED یتم تحویل ال Block الى<br />

قائمة ال ،Freelist الحجم ال<br />

Default ھو .40%<br />

البیانات Rows" "Data<br />

:FREELIST یمكن لل Segment الواحدة أن یكون لھا أكثر من Freelist واحدة بتحدید العامل<br />

Default ھو لكل<br />

Block<br />

Segment واحدة ، قائمة Freelist واحدة.‏<br />

،FREELISTS ال<br />

:INITRANS<br />

عند تحدیدھا یتم حجز مساحة لل Slots" "Transaction في ال<br />

Header لتخزین البیانات حول المھمات التي تجري.‏ فھي تحدد الحد الأدنى من المھمات<br />

التي یمكن أن تجرى على ال Block في نفس الوقت.‏ اذا تم تحدیدھا ب ، 3<br />

بحیث یمكن أجراء ثلاث مھمات على الأقل على<br />

فذلك یعني أنھ یخصص ثلاث<br />

ال Block في نفس الوقت ، وعند الضرورة یمكن تخصیص مساحة من ال<br />

Free Space في ال<br />

Block<br />

Transaction Slots<br />

"Transactions"<br />

Block لإضافة Transaction Slots أخرى،‏ ال Default ھو .1<br />

:MAXTRANS<br />

عند تحدیدھا یتم حجز مساحة لل Slots" "Transaction في ال<br />

Header لتخزین البیانات حول المھمات التي تجري.‏ فھي تحدد الحد الأعلى من المھمات<br />

التي یمكن أن تجرى على ال Block في نفس الوقت.‏ اذا تم تحدیدھا ب ، 200<br />

فذلك یعني أنھ یمكن أجراء 200 مھمة على الأكثر على ال Block في نفس الوقت،‏<br />

Default ھو<br />

"Transactions"<br />

.255<br />

•<br />

•<br />

•<br />

•<br />

•<br />

ملاحظة:‏ یقصد بال<br />

على استیعاب بیانات جدیدة أو ال<br />

FreeList بأنھا قائمة "List" تحدد ال Blocks التي یوجد بھا مساحة خالیة قادرة<br />

.Free Blocks<br />

-1<br />

-2<br />

مثال:‏<br />

في حال تم تحدید ال PCTUSED بنسبة 30% وال PCTFREE بنسبة 20%:<br />

یتم ادخال بیانات "Rows" الى ال Block الى أن تصل نسبة البیانات المدخلة الى 80% أو أقل بحیث<br />

یجب أن یظل حجم من ال Block فارغ وھو نسبة ال PCTFREE وھي كما ذكرنا 20%، وھكذا یظل حجم<br />

فارغ من ال Block في حال تغیر بیانات Rows المخزنة في ال Block مثل تحویل قیمة أحد ال<br />

COLUMN من حالة NULL الى قیمة فعلیة.‏ ھذه المساحة الفارغة مخصصة لل Rows الموجودة في<br />

حال تغیر قیمھا ولا یمكن اضافة Rows جدیدة لتحل في الحجم الخالي الناتج من تحدید ال .PCTFREE<br />

في حال انخفاض بیانات ال Rows المخزنة في ال Block أو تم حذف عدد من ال ، Rows لا یسمح<br />

باضافة في ال Block اذا لم تنخفض بیانات ال Rows في ال Block عن الحد المحدد ب<br />

Block عن 30%، یتم تحدید أن ال Rows وھو 30%. في حال انخفاض حجم بیانات ال PCTUSED<br />

جاھز لاستقبال<br />

Rows جدیدة<br />

.(Freelist) جدیدة Rows<br />

98


MANAGING DATA BLOCKS<br />

یمكن إدارة ال<br />

Data Blocks<br />

بطریقتین احداھما یدویة والأخرى أوتوماتیكیة وھما:‏<br />

:MANUAL DATA BLOCK MANAGEMENT<br />

یتم استخدام Block Storage Parameters في تحدید حجم ال<br />

.Blocks<br />

Used Blocks وال<br />

:AUTOMATIC SPACE MANAGEMENT<br />

.Free Blocks یتم حفظ ال<br />

یتم استخدام Bitmap عوضاً‏ عن Freelist لتحدید ال<br />

Blocks مختلفة تسمى (BMBs) .Bitmapped Blocks عندما یتم ادخال بیانات<br />

جدیدة ، یتم البحث في ال Bitmap عن Block یحتوي مساحة خالیة مناسبة لحجم البیانات<br />

الجدیدة المدخلة،‏ وعند حدوث أي تعدیلات على ال Blocks ‏(مثل زیادة المساحة الخالیة عن المساحة<br />

المشغولة)‏ یتم تعدیل ال Bitmap لتوافق التغیرات التي طرأت.‏<br />

فوائد استخدام ھذه الطریقة عدیدة منھا سھولة ادارة ال Blocks اذ یتم تحدید ال PCTUSED و ال<br />

تخصیص المساحة للعناصر "Objects" بشكل أفضل ، وأداء أفضل<br />

خلال عملیات ال INSERT المتزامنة.‏<br />

Bitmap في<br />

"Rows"<br />

FREELIST بشكل أوتوماتیكي ،<br />

نقاط مھمة:‏<br />

1- یمكن استخدام ھذه الطریقة مع Locally Managed Tablespaces فقط.‏<br />

2- تطبق الطریقة على مستوى ال ،Tablespace أي یجب أن تكون جمیع ال Segments داخل ال<br />

Tablespace تعمل بنفس الطریقة.‏<br />

3- لا یمكن تغییر الطریقة الى الطریقة الیدویة بعد أن تستخدم.‏<br />

4- یمكن استخدام ھذه الطریقة باضافة جملة SEGMENT SPACE MANAGEMENT AUTO<br />

الى جملة .CREATE TABLESPACE<br />

5- لا یمكن استخدام الطریقة مع Tablespace تحوي أو قد تحوي على<br />

.LOBs<br />

ملاحظة:‏ یتم تخزین بیانات كبیرة بواسطة LOBs مثل الصور والفیدیو وغیرھا وسوف یتم التطرق لھا في<br />

فصل لاحق.‏<br />

مثال تطبیقي<br />

:6.1<br />

CREATE TABLESPACE APP_DATA<br />

DATAFILE '…\oradata\db05\appdata04.dbf'<br />

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K<br />

SEGMENT SPACE MANAGEMENT AUTO;<br />

99


STORAGE INFORMATION<br />

للحصول على معلومات حول ال Segments یمكن استخدام:‏<br />

Data<br />

، Segment ال<br />

:DBA_SEGMENTS<br />

یمكن الحصول على معلومات حول اسم ال<br />

Extents في ال Segment وعدد ال<br />

Tablespace التي تحوي ال<br />

، Blocks وغیرھا من المعلومات.‏<br />

، Segment عدد ال<br />

•<br />

للحصول على معلومات حول ال Used Extents یمكن استخدام:‏<br />

:DBA_EXTENTS یوفر معلومات مثل رقم ال Extent ورقم ال Block التي ینتمي لھا وعدد<br />

ال Blocks ضمن ال Extent وغیرھا من المعلومات.‏<br />

•<br />

للحصول على معلومات حول ال Free Extents یمكن استخدام:‏<br />

:DBA_FREE_SPACE یوفر معلومات مثل اسم ال Tablespace التي تحوي ال<br />

وال Blocksالتابعة لھا وغیرھا.‏<br />

Extent<br />

•<br />

100


UNDO SEGMENT<br />

Undo Segment في حفظ<br />

"Transactions"<br />

. Commit<br />

نسخة عن البیانات قبل تعدیلھا بواسطة المھمات<br />

تستخدم ال<br />

التي أجریت علیھا،‏ مثلاً‏ لكي یتمكن الأوراكل من استعادة البیانات قبل التعدیل في حال<br />

طلب المستخدم Rollback عوضاً‏ عن یتم استخدام ال<br />

بیانات حول المھمات "Transactions" الحالیة التي تستخدم ال<br />

من فوائد استخدام ال<br />

Undo Segment Header لتخزین<br />

.Undo Segment<br />

:Undo Segment<br />

لكي یتمكن الأوراكل من استعادة البیانات قبل التعدیل في حال طلب المستخدم Rollback عوضاً‏ عن<br />

.Commit<br />

لكي یتمكن الأوراكل من استعادة البیانات الأصلیة في حال تعطل المھمة أو حدوث خلل طارئ لل<br />

.Recovery یتطلب عملیة ال Instance<br />

للقیام بما یعرف باسم<br />

.Read Consistency<br />

•<br />

•<br />

•<br />

ملاحظة:‏ تستخدم المھمات المرتبطة ببعضھا Transaction" "Serial<br />

ویمكن للمھمات المتزامنة استخدام ذات ال<br />

Undo Segment ،<br />

.Undo Segment<br />

واحدة فقط<br />

تذكر:‏ یتم تخزین معلومات حول ال<br />

Undo Segment في:‏<br />

.Initialization Parameter File<br />

.Alert Log File<br />

.Control File<br />

•<br />

•<br />

•<br />

تذكر‎2‎‏:‏ جاء ذكر ال<br />

Undo Segment في درس:‏<br />

.Undo Tablespace<br />

.Offline or Online<br />

•<br />

•<br />

:System Change Number (SCN)<br />

ھو رقم ممیز Number" "Unique یتم تكوینھ عند حوث أمر ،Commit ویساعد في عملیة ال<br />

Consistency وعملیة ال .Recovery یتم تخزین ال SCN في ال<br />

و<br />

Read<br />

Redo Log ، Control Files<br />

.Block Headers<br />

، Files<br />

تذكر:‏ یقوم ال Checkpoint بعمل تجدید لرقم ال SCN في ال .Control Files<br />

:Read Consistency<br />

ھي إمكانیة رؤیة أحد المستخدمیین البیانات الأصلیة قبل التعدیل بالرغم من قیام مستخدم أخر بتعدیل البیانات<br />

في نفس الوقت.‏ لحدوث ال Read Consistency یجب أن یكون المستخدم الأول قد طلب البیانات قبل أن<br />

یقوم المستخدم الثاني بتأكید التعدیلات على التغیرات بواسطة ، Commit عندئذ یحضر الأوراكل البیانات<br />

المطلوبة للمستخدم الأول من ال<br />

.Undo Segment<br />

101


مثال:‏<br />

1- یقوم المستخدم الأول بعمل مھمات على بیانات ال Employees Tables تؤدي الى تغیر البیانات مثل<br />

.Undo Segment<br />

Select * From<br />

عملیة .UPDATE<br />

2- یقوم الأوراكل بتخزین نسخة لبیانات ال Employees Table قبل التعدیل في ال<br />

3- یقوم المستخدم الثاني بطلب استخراج البیانات عبر استخدام Query مثل<br />

،Employees وعندھا یتم تحدید رقم ال SCN الذي یستخدم لضمان عدم عرض البیانات التي یحدث لھا<br />

تغییر ولم یحدث لھا<br />

4- البیانات المعروضة على المستخدم الثاني ھي البیانات قبل التعدیلات التي أجراھا ویجریھا المستخدم الأول<br />

و ھي البیانات المخزنة في ال<br />

5- یقوم المستخدم الأول بانھاء و تأكید المھمات التي أجراھا باستخدام<br />

6- یقوم المستخدم الثاني بعد قلیل بطلب استخراج البیانات مرة أخرى<br />

7- البیانات المعروضة ھذه المرة ھي البیانات بعد التعدیلات التي أجراھا المستخدم الأول<br />

.SCN فیتم تجدید ال ، Commit<br />

.Select * From Employees<br />

.<br />

.Undo Segment<br />

.Commit<br />

:Snapshot Too Old Error<br />

عندما لا یستطیع الأوراكل توفیر خدمة ال Read Consistency یظھر ھذا الخطأ للمستخدم.‏ یمكن أن یظھر<br />

الخطأ عندما یطلب المستخدم الثاني Query یكون البیانات المستخرجة طویلة جداً،‏ بحیث قبل أن ینتھي ال<br />

Query من العمل یحدث أمران،‏ الأمر الأول ھو أن المستخدم الأول طلب Commit على البیانات ، والأمر<br />

الثاني أنھ تم استخدام ذات ال Undo Segment من قبل مھمة أخرى بحیث تم تغییر البیانات<br />

في ال<br />

باستخدام العامل "Parameter" UNDO_RETENTION یمكن تحدید كم من الوقت یسمح للبیانات<br />

اذا تم تحدید قیمة العامل<br />

بالبقاء في ال Undo Table pace وبذلك توفیر خدمة ال<br />

، فھذا یعني أنھ یسمح للبیانات البقاء لمدة 15 دقیقة.‏ یمكن تحدید العامل في ال<br />

Initialization<br />

.Undo Segment<br />

"Overwritten"<br />

.Read Consistency<br />

ب 900<br />

.ALTER SYSTEM ویمكن تعدیلھ داینامیكیاً‏ بواسطة ، Parameter File<br />

ملاحظة:‏ اذا كان حجم ال Undo Tablespace صغیر،‏ یمكن أن لا تظل البیانات للوقت المحدد بالعامل<br />

، UNDO_RETENTION حیث یتم استخدام عملیات حسابیة لتبدیل البیانات المخزنة.‏<br />

:UNDO SEGMENT TYPES<br />

:SYSTEM UNDO SEGMENT تتكون ضمن ال System Tablespace عند تكوین ال<br />

.System Tablespace الموجودة ضمن ال "Objects" لتوفر خدماتھا للعناصر Database<br />

Database في ال Tablespaces عندما یوجد :NON-SYSTEM UNDO SEGMENTS<br />

Non-System Undo<br />

.Tablespaces<br />

غیر ال ، System Tablespace یجب توفر على الأقل واحدة من<br />

Segment في ال Database لتخدم باقي ال<br />

:DEFERRED UNDO SEGMENTS یمكن تكوینھا عند وضع ال Tablespace في حالة<br />

، Offline اذ یمكن أن تستخدم في عمل Rollback للمھمات "Transactions" التي قد تحدث<br />

عند تحویل ال Tablespace الى حالة ال .Online<br />

•<br />

•<br />

•<br />

102


MANAGING UNDO DATA<br />

یوجد نوعان لإدارة ال Undo Data في الأوراكل ھما:‏<br />

.AUTOMATIC UNDO MANAGEMENT<br />

.MANUAL UNDO MANAGEMENT<br />

•<br />

•<br />

سوف یتم التطرق فقط الى النوع الأول في الكتاب.‏<br />

:AUTOMATIC UNDO MANAGEMENT<br />

یتم تخصیص Undo Tablespace<br />

واحدة ذات مساحة كبیرة لكل .Instance یتم التحكم في البیانات<br />

الموجودة في ال Undo Tablespace بشكل أوتوماتیكي من قبل ال .Oracle Server یتم تسمیة أسماء<br />

طبقاً‏ للطریقة التالیة _SYSSMUn$ مثل ._SYSSMU1$<br />

لكي تعمل طریقة ال<br />

حالة بالرغم أنھ یمكن أن تتواجد أكثر من Undo Tablespace في ال Database ولكن لا یمكن<br />

أن یكون أكثر من واحدة في حالة<br />

لاستخدام ھذه الطریقة یجب تحدید العامل "Parameter" UNDO_MANAGEMENT بالقیمة<br />

AUTO في ال .Initialization Parameter File لا یمكن تغییر قیمة العامل بطریقة داینامیكیة بعد<br />

تشغیل ال Database‏،القیمة ال<br />

التي سوف یتم التحكم بھا بواسطة<br />

لتحدید ال<br />

Management یجب تحدید العامل"‏Parameter‏"‏ UNDO_TABLESPACE في ال<br />

، Initialization Parameter File إلا أن یكون ھنالك Undo Tablespace واحدة في ال<br />

عندئذ لا یشترط تحدید ھذا العامل ."Parameter" یمكن تغییر قیمة ھذا العامل بطریقة داینامیكیة بواسطة<br />

.ALTER SYSTEM<br />

Undo Segment<br />

Automatic Undo Management یجب توفر Undo Tablespace واحدة في<br />

.Active<br />

.Active<br />

Database<br />

Automatic Undo<br />

.MANUAL ھي Default<br />

Undo Tablespace<br />

مثال تطبیقي<br />

:6.2<br />

لتغییر قیمة العامل UNDO_TABLESPACE بشكل داینامیكي ‏(للتحدید Tablespace أخرى في حالة<br />

:(Active<br />

ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBSPACE;<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على ال .Instance Manager<br />

اضغط على .Configuration<br />

اضغط على<br />

أختر من قائمة<br />

اضغط على .Apply<br />

.Normal<br />

قائمة .Undo<br />

.Undo Tablespace اسم ال Current Undo Tablespace<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

103


ALTER<br />

)Undo Tablespace<br />

:Snapshot Too Old Error<br />

بواسطة ال<br />

یمكن أن یحدث ھذا الخطأ ایضاً‏ اذا ما تم تغییر ال<br />

وكان ما یزال Query یستخرج البیانات من ال Undo Tablespace<br />

التي تم تغییرھا.‏<br />

( Console أو عبر ال SYSTEM<br />

ملاحظات:‏<br />

في جملةDATABASE ، CREATE<br />

-1<br />

في حال لم یتم كتابة جملة ال UNDO TABLESPACE<br />

وكانت قیمة العامل UNDO_MANAGEMENT تساوي ، AUTO فإن الأوراكل سیرفر یقوم بتكوین<br />

.SYS_UNDOTBS بشكل أوتوماتیكي بمسمى Undo Tablespace<br />

2- یمكن حذف Undo Tablespace باستخدام جملة DROP TABLESPACE التي جاء شرحھا<br />

سابقاً،‏ ولكن لا یمكن حذف ال Undo Tablespace اذا كانت تستخدم بواسطة ال<br />

.(Active)Instance<br />

تذكر:‏<br />

1- یمكن تكوین ال Undo Tablespace بطریقتیین ، إما عبر جملة ال CREATE DATABASE أو<br />

عبر جملة .CREATE UNDO TABLESPACE<br />

2- جاء ذكر ال Automatic Undo Management في درس ال .Undo Tablespace<br />

مثال تطبیقي<br />

:6.3<br />

یمكن حذف ال Undo Tablespace بواسطة DROP TABLESPACE ولكن یجب على كل المھمات<br />

التي تجري في ال Undo Tablespace أن تنھي عملھا قبل اتمام عملیة الحذف،‏ یمكن معرفة اذا ما كان<br />

ھنالك أي عملیات تجري على ال Undo Tablespace أو أي Tablespace من خلال كتابة التالي:‏<br />

SELECT Z.NAME, X.STATUS<br />

FROM V$ROLLNAME Z, V$ROLLSTAT X<br />

WHERE Z.NAME IN<br />

(SELECT SEGMENT_NAME FROM DBA_SEGMENTS<br />

WHERE TABLESPACE_NAME = 'UNDOTBS')<br />

AND Z.USN = X.USN ;<br />

اذا كانت قیمة ال STATUS ھي PENDING ONLINE فھذا یعني أن ال Tablespace لا یمكن<br />

حذفھا،‏ أما اذا كانت القیمة ھي PENDING OFFLINE فھذا یعني أنھ یمكن حذف ال .Tablespace<br />

Resource Manager للتحكم<br />

:Resource Manager<br />

بالنظام بحیث یتم منع المستخدمیین أو مجموعة من<br />

یمكن استخدام ال<br />

المستخدمیین من استھلاك مساحة كبیرة لل Undo Data بحیث یتم تخصیص مساحة قصوى "Maxsize"<br />

لكل مجموعة لاستخدامھا في تخزین ال .Undo Data یتم تخصیص مساحة قصوى بتحدید ال<br />

.UNLIMITED محدد بالقیمة "Default" والذي ھو في الحالة الإفتراضیة UNDO_POOL<br />

104


QUERYING UNDO INFORMATION<br />

یمكن استخدام ال<br />

:Undo Segment التالیة للحصول على معلومات حول ال Views<br />

:V$UNDOSTAT یساعد في تحدید حجم ال ، Undo Tablespace اذ یوفر معلومات حول<br />

وضغط البیانات علیھا خلال 10 دقائق.‏<br />

عمل ال<br />

Undo Tablespace<br />

•<br />

SELECT BEGIN_TIME, END_TIME, UNDOBLKS<br />

FROM V$UNDOSTAT;<br />

:DBA_ROLLBACK_SEGS للحصول على معلومات حول جمیع ال Undo Segment في<br />

ال .Database وحدھا فقط توفر بیانات حول ال<br />

.Offline Segment<br />

•<br />

SELECT SEGMENT_NAME, TABLESPACE_NAME, OWNER, STATUS<br />

FROM DBA_ROLLBACK_SEGS;<br />

.Online Segments توفر اسماء جمیع ال :V$ROLLNAME<br />

•<br />

SELECT USN, NAME FROM V$ROLLNAME;<br />

:V$ROLLSTAT توفر بیانات حول ال Online Segments مثل حجم ال Segments وعدد<br />

یمكن عمل Join مع ال V$ROLLNAME بواسطة ال .USN<br />

ال<br />

Extents وغیرھا.‏<br />

•<br />

SELECT A.NAME , B.EXTENTS<br />

FROM V$ROLLNAME A , V$ROLLSTAT B<br />

WHERE A.USN = B.USN;<br />

105


Managing tables & indexes &<br />

constraints<br />

106


STORING DATA<br />

یتم تخزین ال DATA في أوراكل على شكل<br />

Tables مثل:‏<br />

Rows و Columns في ال .Tables یوجد عدة أنواع من ال<br />

TABLES<br />

وأ(‏ :(Regular Tables ھي ال Table التي یتم معظم العمل علیھا والتي یكون<br />

التحكم بتوزیع بال Rows فیھا من وظائف ال<br />

.Oracle Sever<br />

:PARTITIONED TABLES یكون لل Table أكثر من جزء ،"Partition" كل جزء<br />

عبارة عن كل Segment یمكن أن تتواجد في Tablespace مختلفة.‏<br />

Primary Key لل Table ویتم<br />

،Segment<br />

:INDEX-ORGANIZED TABLE<br />

یجب تخصیص ال<br />

تخزین ال PK وال Table في ذات المساحة ، وذلك عكس ال Regular Table التي اذا تم تكوین<br />

.("Separate Storage" لھا ‏(الإثنان في مساحة مختلفة PK<br />

:CLUSTERED TABLE یمكن أن تتكون من Table واحدة أو مجموعة من ال<br />

یوجد ما یعرف باسم<br />

التي تستخدم مع بعضھا بحیث تتشارك نفس ال<br />

Key الذي یحدد ال Rows التي یجب أن تخزن مع بعضھا البعض.‏<br />

Tables<br />

Cluster<br />

.Data Blocks<br />

•<br />

•<br />

•<br />

•<br />

:DATA TYPES<br />

یوفر الأوراكل مجموعة من Data Types لتخزین البیانات ، تتبع ثلاثة أنواع ھم Collection, Scalar,<br />

.Relationship<br />

:Scalar Data Types<br />

بعض أنواع ال<br />

:Scalar Data Types<br />

:CHAR, NCHAR توفر مساحة ثابتة"‏Fixed-Length‏"‏ لتخزین الأحرف<br />

المقصود بالمساحة الثابتة أنھ عند تخصیص مثلاً‏<br />

Bytes لتخزین البیانات،‏ لا تعتبر ال 3bytes المتبقیة مساحة خالیة بل مساحة مشغولة.‏ أقصى قیمة<br />

‏(مساحة)‏ یمكن اختیارھا ھي 2000 بایت لكل Row مع العلم أن القیمة ال<br />

NCHAR عن CHAR أن الأولى یمكن أن تخزن Unicode Character التي توفر خدمة تعدد<br />

اللغات.‏<br />

:VARCHAR2, NVARCHAR2 توفر مساحة متغیرة "Variable-Length" لتخزین ال<br />

المقصود بالمساحة المتغیرة أنھ عند تخصیص مثلاً‏<br />

المخزنة في ال Column الى 15 bytes فإنھ یتم استخدام 15 Bytes فقط من المساحة الخالیة<br />

لتخزین البیانات ، ولا یتم حجز المساحة الكلیة المحددة.‏ أقصى مساحة یمكن اختیارھا ھي<br />

بایت لكل Row مع العلم أنھ لا یوجد قیمة یجب تحدید القیمة).‏ تختلف<br />

VARCHAR2 أن الأولى یمكن أن تخزن<br />

توفر خدمة تعدد اللغات.‏<br />

:NUMBER توفر مساحة متغیرة لتخزین الأرقام.‏ یمكن أن تستوعب المساحة أرقام تتكون من<br />

خانة.‏<br />

10 Bytes وتم شغل 7<br />

Default ھي 1. تختلف<br />

، 20 Bytes واحتاجت البیانات<br />

4000<br />

Unicode Character التي<br />

38<br />

) Default<br />

."Characters"<br />

.Characters<br />

NVARCHAR2 عن<br />

•<br />

•<br />

•<br />

107


:DATE توفر مساحة ثابتة لتخزین التاریخ والوقت.‏ توفر سبع خانات للقرن والسنة والیوم<br />

والساعة والدقیقة و الثانیة وأقصى تاریخ یمكن أن یخزن ھو ال‎31‎ من دیسمبر لعام ، 9999 أما أقدم<br />

تاریخ یمكن أن یخزن ھو ینایر من عام 1.4712 قبل المیلاد.‏<br />

توفر خدمة مماثلة لل DATE عدا أنھا توفر مساحة إضافیة لتخزین أجزاء<br />

( والعدد ال<br />

الثانیة.‏ توفر 9 خانات لتسجیل أجزاء الثانیة<br />

توفر خدمة مماثلة لل ، TIMESTAMP إلا<br />

انھا توفر مساحة إضافیة لعرض الفارق الزمني بین المستخدم والتوقیت العالمي ‏(توقیت جرینتش).‏<br />

یظھر الفارق على شكل عدد من الساعات والدقائق فقط.‏<br />

توفر خدمة مماثلة لل<br />

، TIMESTAMP إلا انھا توفر مساحة إضافیة لعرض ال ،Session Time Zone الذي<br />

یستخدم في إدخال البیانات بین فروع الشركات البعیدة عن بعضھا،‏ أي في حال ادخال البیانات من قبل<br />

المستخدم الأول الذي بینھ وبین المستخدم الثاني زائد 3 ساعات زمنیة ، فإن المستخدم الثاني یرى<br />

توقیت إدخال البیانات بتوقیتھ ھو ) زائد 3 ساعات زمنیة)‏ و لیس بتوقیت المستخدم الأول الذي أدخل<br />

البیانات.‏ یظھر الفارق على شكل عدد من الساعات والدقائق فقط.‏<br />

توفر مساحة متغیرة لتخزین ال .Binary Data أقصى مساحة یمكن اختیارھا ھي<br />

بایت.‏<br />

:LONG RAW توفر خدمة مماثلة لل Row ولكن مساحة أكبر 2GB ‏(لا ینصح باستخدامھا)‏<br />

توفر مساحة كبیرة لتخزین البیانات ، یمكن أن تصل المساحة الى 2GB ‏(لا ینصح<br />

باستخدامھا،‏ ویفضل استخدام CLOB أو .(NCLOB لا یمكن لل Tableأن تحوي أكثر من<br />

Default ھو 6 خانات.‏<br />

2000<br />

:TIMESTAMP<br />

0.987654321)<br />

:TIMESTAMP WITH TIME ZONE<br />

:TIMESTAMP WITH LOCAL TIME ZONE<br />

:ROW<br />

:LONG<br />

Long واحدة.‏<br />

:CLOB, NCLOB<br />

:BLOB<br />

.Documents<br />

:BFILE<br />

توفر مساحة 4GB لتخزین<br />

توفر مساحة 4GB لتخزین<br />

ال .Character Data<br />

Unstructured Data مثل Binary Images و<br />

باستخدامھا،‏ تستطیع تخزین بیانات خارج ال Database في ملفات خارجیة،‏ یمكن أن<br />

یصل حجم الملف الخارجي الى .4GB<br />

لتخزین رقم ممیز لكل Row في ال<br />

Database لیستطیع الأوراكل تحدید ال Row بسرعة أكبر عند البحث على البیانات.‏ الفرق بین<br />

ROWID وUROWID أن الأخیرة توفر میزة تسجیل رقم ممیز ل<br />

أي من نوع Database اخر غیر الأوراكل).‏<br />

No-Oracle تتبع Rows<br />

10 bytes توفر مساحة :ROWID, UROWID<br />

)Tables<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:Collections Data Types<br />

یوجد نوعان فقط ھما:‏<br />

(VARRAY) :VARYING ARRAYS عبارة عن مجموعة مرتبة من البیانات التي تتكون<br />

من نفس ال Data Type ‏(مثلاً‏ جمیع البیانات أرقام).‏<br />

:NESTED TABLES عبارة عن مجموعة غیر مرتبة من ال<br />

منفصل عن ال Table بحیث یوجد وصلة "Pointer" من كل Row الى ال<br />

، Rows تخزن ال Rows بشكل<br />

.Table<br />

•<br />

•<br />

:Relationship Data Types (REFs)<br />

یتم استخدام<br />

Pointers لتدل على بیانات مخزنة في Tables مختلفة.‏<br />

108


MANAGING TABLES<br />

:CREATE TABLES<br />

لتكوین ، Table یتم استخدام جملة CREATE TABLE التي من المفروض قد تعرفت علیھا بالتفصیل<br />

خلال دراستك للامتحان الأول SQL" ."Introduction to لكي یستطیع المستخدم تكوین Table في ال<br />

Schema الخاص بھ ، یجب أن یكون لدیھ ، CREATE TABLE privilege أما لتكوین Table في<br />

.CREATE ANY TABLE privilege لمستخدمین أخرین،‏ یجب أن یكون لدیھ Schemas<br />

ینصح عند تكوین ال<br />

توزیع كل<br />

:Tables<br />

Table على<br />

.Indexes أو Temporary Segments أو Segments<br />

استخدام نظام Locally Managed<br />

.Fragmentation<br />

•<br />

Tablespace مختلفة عن ال Tablespaces التي تحوي<br />

Undo<br />

•<br />

مثال تطبیقي<br />

‏(أي بدون استخدام جملة ال<br />

(Storage<br />

:7.1<br />

لتكوین Locally Managed Table یمكن كتابة:‏<br />

أو یمكن اضافة التالي:‏<br />

CREATE TABLE HR.TEST<br />

(FIRST VARCHAR2 (10), LAST NUMBER);<br />

CREATE TABLE HR.TEST<br />

(FIRST VARCHAR2 (10), LAST NUMBER)<br />

TABLESPACE EXAMPLE<br />

PCTFREE 10 PCTUSED 20<br />

MAXTRANS 200 MINTRANS 1;<br />

لتجنب ال<br />

على اعتبار أن ذكر ،TABLESPACE EXAMPLE یدل على اسم ال Tablespace التي تحوي ال<br />

Table وھي في ھذه الحالة .Example Tablespace وفي حال عدم ذكر ھذه الجملة یتم اختیار ال<br />

Default وھي عادة ما تكون ال .System Tablespace مع العلم أنھ تم تكوین ال Table في ال<br />

.HR الخاصة بالمستخدم Schema<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط بواسطة الزر الیمین على Table ثم اختر Create من القائمة.‏<br />

ادخل المعلومات المطلوبة ‏(مثل اسم ال (Table ثم اضغط على Apply<br />

یمكن اختیار Create Using Wizard عوضاً‏ عن Create لتسھیل تكوین ال<br />

.Normal<br />

.Table<br />

بجانب ال .Schema Manager<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

109


مثال تطبیقي<br />

لتكوین<br />

:7.2<br />

Dictionary Managed Table یمكن كتابة:‏<br />

في جملة ال : Storage<br />

CREATE TABLE HR.TEST2<br />

(FIRST VARCHAR2 (10), LAST NUMBER)<br />

TABLESPACE EXAMPLE<br />

PCTFREE 10 PCTUSED 20<br />

MAXTRANS 200 INITRANS 1<br />

STORAGE (INITIAL 200K NEXT 200K<br />

PCTINCREASE 50<br />

MINEXTENTS 1 MAXEXTENTS 5<br />

FREELISTS 1 FREELIST GROUPS 1<br />

BUFFER_POOL DEFAULT) ;<br />

.Extent تحدد حجم أول :INITIAL<br />

:NEXT عند زیادة حجم البیانات یتطلب ذلك اضافة ،Extent حیث تحدد جحم ال<br />

‏(لیست الثالثة فقط ، إنما كل ما یأتي بعد الثانیة)‏<br />

:PCTINCREASE تحدد حجم ال<br />

نصف حجم<br />

باضافة نسبة مئویة.‏ مثلاً‏ في ھذه الحالة یصبح حجم ال<br />

ال<br />

.Table التي یمكن أن تخصص لل Extents الحد الأدنى من ال :MINEXTENT<br />

.Table التي یمكن أن تخصص لل Extents الحد الأقصى من ال :MAXEXTENTS<br />

.Table التي یمكن أن تخصص لل Freelist عدد مجموعات ال :FREELIST GROUP<br />

:FREELISTS عدد ال Freelist ضمن المجموعة.‏<br />

:BUFFER_POOL تطرقنا لھ سابقا<br />

Extent الثانیة.‏<br />

Extents التالیة<br />

+200K) 300K التالیة Extents<br />

(Default, Keep, Recycle)<br />

.(Extent<br />

(%50)<br />

ملاحظة:‏ لا یشترط كتابة كل عوامل ال ، Storage اذ یمكن أخد القیمة ال Default لكل عامل.‏<br />

تذكر:‏ ینصح باستخدام ال .Locally Managed Table<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على + ال<br />

اضغط بواسطة الزر الیمین على Table ثم اختر Create من القائمة.‏ ثم ادخل المعلومات المطلوبة<br />

مثل بیانات ال<br />

.Normal<br />

.Schema Manager<br />

Initial Size, Next Size, Increase Size by, Freelists, Groups,<br />

.Buffer pool<br />

اضغط على .Apply<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

110


:CREATING TEMPORARY TABLES<br />

یمكن تكوین Temporary Table لتخزین بیانات مؤقتھ تلزم فقط خلال القیام بأحد المھمات<br />

أو طوال فترة عمل ال ،Session أي في الحالة الأولى یتم حذف البیانات بعد الإنتھاء من<br />

المھمة ‏(مثلاً‏ كتابة ،(Commit أما في الحالة الثانیة یتم حذف البیانات بعد خروج المستخدم من ال<br />

"Transaction"<br />

.Database<br />

لتكوین Temporary Table یتم استخدام ،CREATE GLOBAL TEMPORARY TABLE<br />

ولتحدید اذا ما كانت البیانات سوف تحذف بعد المھمة أو بعد انتھاء ال Session یتم إضافة الجمل التالیة:‏<br />

تحذف البیانات بعد انتھاء المھمة.‏<br />

تحذف البیانات بعد انتھاء ال .Session<br />

:ON COMMIT DELETE ROWS<br />

:ON COMMIT PRESERVE ROWS<br />

•<br />

•<br />

تذكر:‏ ال Session من الفصل الأول.‏<br />

ملاحظة:‏ یمكن تكوین<br />

Views, Indexes على ال Temporary Table كأي Table أخرى.‏<br />

ملاحظة‎2‎‏:‏ مھمات ال DML ‏(مثل (INSERT, DELETE التي تنفذ على ال Temporary Table لا<br />

تؤدي الى تكوین بیانات في<br />

.Redo Log Files<br />

مثال تطبیقي<br />

:7.3<br />

لتكوین Temporary Table یتم حذف بیاناتھا بعد انتھاء ال :Session<br />

CREATE GLOBAL TEMPORARY TABLE TEMP_TABLE<br />

(TEMP_NAME VARCHAR2 (25), TEMP_DATE DATE)<br />

ON COMMIT PRESERVE ROWS;<br />

:ALTERING TABLES<br />

یمكن القیام بعدة مھمات باستخدام الجملة :ALTER TABLE<br />

:Changing the Block Storage Parameters<br />

یمكن تغییر قیم<br />

تنتمي لھا ال Table و .MINTRANS<br />

PCTUSED, PCTFREE, MAXTRANS,<br />

ملاحظة:‏ یمكن تغییر بعض عوامل جملة ال Storage مثل ال<br />

.Freelists<br />

ولا یمكن تغییر ال Tablespace التي<br />

111


مثال تطبیقي<br />

:7.4<br />

ALTER TABLE HR.TEST2<br />

PCTUSED 40<br />

PCTFREE 20<br />

MAXTRANS 250;<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على + ال<br />

اضغط على +<br />

اختر اسم المستخدم الذي یملك ال Table المراد تغییر خواصھا<br />

اختر اسم ال Table من النافذة الیمنى و اضغط علیھا مرتین ‏(أو بواسطة الزر الیمین للفأرة ، اختر<br />

.Normal<br />

‏(مثل (HR<br />

.Schema Manager<br />

ال .Table<br />

من القائمة Details" ."View\Edit<br />

ادخل الى قائمة ، Storage وعدل البیانات ثم اختر .Apply<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:Manual Allocating Extents<br />

یمكن اضافة Extents بشكل یدوي الى ال Table باستخدام<br />

القاعدة التالیة:‏<br />

اذا لم تتم كتابة جملة<br />

، NEXT أما اذا لم تتم كتابة جملة ال<br />

File ضمن ال Tablespace التي تحوي ال<br />

ALTER TABLE [schema.]table_name<br />

ALLOCATE EXTENT<br />

[<br />

SIZE number [K|M]<br />

DATAFILE ‘filename’<br />

]<br />

، یتم تحدید حجم ال<br />

Extent<br />

SIZE number [K|M]<br />

DATAFILE ‘filename’<br />

.Table<br />

بناءاً‏ على الحجم المحدد ب<br />

، فیتم اضافة Extent الى أي<br />

Data<br />

مثال تطبیقي<br />

:7.5<br />

لإضافة Extent بشكل یدوي یمكن كتابة:‏<br />

ALTER TABLE HR.TEST2<br />

ALLOCATE EXTENT;<br />

112


خ أ<br />

:Moving Tables<br />

یمكن نقل<br />

أن لا تكون<br />

(Partitioned Table ‏(بشرط Table<br />

باستخدام جملة MOVE مع .ALTER SYSTEM<br />

من<br />

عند عملیة نقل ال Table یمكن تغییر ال Storage Parameters كما في المثال<br />

Tablespace الى Tablespace رى<br />

ملاحظة:‏ یمكن تنفیذ العملیة لتغییر خواص ال Storage Parameters دون نقل ال<br />

‏(بنقل ال Segment الى أخرى)‏ كما في المثال<br />

.7.6<br />

Table الى<br />

.7.6<br />

Tablespace أخرى Table من<br />

ملاحظة‎2‎‏:‏ یحب اعادة تعریف ال Indexes الخاصة بال Table التي تم نقلھا لتجنب الأخطاء.‏<br />

مثال تطبیقي<br />

ALTER TABLE HR.TEST2 MOVE<br />

TABLESPACE APP_DATA<br />

STORAGE (INITIAL 300K)<br />

PCTUSED 30<br />

INITRANS 2;<br />

:7.6<br />

لتغییر Storage Parameters دون نقل ال<br />

مع العلم أن موقع ال HR.TEST2 ھو ال<br />

Table الى Tablespace أخرى:‏<br />

ALTER TABLE HR.TEST2 MOVE<br />

TABLESPACE EXAMPLE<br />

STORAGE (INITIAL 300K)<br />

PCTUSED 30;<br />

Example Tablespace قبل المھمة.‏<br />

:DROPPING TABLES AND COLUMNS<br />

:Truncate a Table<br />

باستخدام أمر ، TRUNCATE TABLE یتم حذف جمیع بیانات ال Table واستعادة المساحة المشغولة<br />

‏(زیادة المساحة الخالیة)‏ التي كانت تشغلھا البیانات.‏ تعتبر TRUNCATE TABLE من أوامر ال<br />

(DDL) ،DATA DEFINITION LANGUAGE وبالتالي فإنھا لا تسبب تكون Undo Data على<br />

اعتبار أن أوامر ال DDL لا یمكن أن یحدث لھا Rollback ‏(أي أنھ لا یمكن استعادة البیانات بعد حذفھا).‏<br />

ملاحظات:‏<br />

-1<br />

استخدام TRUNCATE TABLE یؤدي الى حذف ال Indexes الخاصة بھذه ال .Table<br />

2- لا یمكن استخدامھا على<br />

Table لھا علاقة Foreign Key مع Table أخرى.‏<br />

113


مثال تطبیقي<br />

:7.7<br />

یمكن للمستخدم HR كتابة التالي<br />

:<br />

TRUNCATE TABLE TEST2;<br />

أما ال DBA أو أي مستخدم أخر یملك الصلاحیات "Privileges" اللازمة،‏ فیجب ذكر ال<br />

:Schema<br />

TRUNCATE TABLE HR.TEST2;<br />

:Drop a Table<br />

یمكن حذف Table بالكامل مع بیاناتھا باستخدام<br />

أمر .DROP TABLE یجب إضافة جملة<br />

CASCADE CONSTRAINTS اذا كان لل Table علاقة Foreign key مع Table أخرى.‏<br />

مثال تطبیقي<br />

:7.8<br />

لحذف Table بالكامل من ال<br />

:Database<br />

DROP TABLE HR.TEST2;<br />

:Dropping a Column<br />

یمكن حذف Column والبیانات التي یحویھا من ال Table باستخدام .ALTER TABLE قد تتطلب<br />

لل Tables التي تحوي بیانات ضخمة<br />

عملیة حذف Column مدة طولیة جداً‏ و<br />

جداً.‏ في ھذه الحالة،‏ یفضل وضع ال Column ضمن قائمة ال ثم حذفھ بعد الأنتھاء من وقت<br />

الذروة ‏(أي عندما تكون المھمات التي تجري على ال Table قلیلة).‏<br />

وضع ال Column في حالة ال ، UNUSED ھو مشابھ لعملیة حذفھ ‏(لكنھ في الواقع موجود)،‏ اذ لا یمكن<br />

استخراج البیانات من أو مشاھدتھ عند استخدام أمر .DESCRIBE<br />

استخدام أمر ALTER TABLE لحذف ، Column یسمح فقط بحذف Column واحدة كل مرة،‏ ولكن<br />

باستخدام ، UNUSED یمكن وضع أكثر من Column في ھذه الحالة ثم حذفھا جمیعا في نفس الوقت.‏<br />

یجب إضافة جملة CASCADE CONSTRAINTS اذا كان لل Column علاقة Foreign key مع<br />

Column أخر.‏<br />

Undo Space كبیرة جداً‏<br />

UNUSED<br />

ملاحظة:‏ یحب على الأقل أن یبقى Column واحد في ال Table بعد الحذف وإلا لن تنجح عملیة الحذف ،<br />

ولا یمكن استرجاع ال Column المحذوف بعد حذفھ.‏<br />

114


مثال تطبیقي<br />

:7.9<br />

لحذف Column بشكل مباشر:‏<br />

ALTER TABLE HR.TEST<br />

DROP COLUMN LAST CASCADE CONSTRAINTS;<br />

في حالة ال Column الذي یحوي بیانات كبیرة ، وتوقفت عملیة الحذف قبل حذف ال Column یمكن كتابة:‏<br />

لوضع ال<br />

ALTER TABLE HR.TEST<br />

DROP COLUMNS CONTINUE;<br />

:UNUSED في حالة Column<br />

ALTER TABLE HR.EMPLOYEES<br />

SET UNUSED COLUMN PHONE_NUMBER CASCADE CONSTRAINTS;<br />

لحذف ال<br />

ALTER TABLE HR.EMPLOYEES<br />

DROP UNUSED COLUMNS;<br />

:Unused Columns<br />

:QUERYING TABLE INFORMATION<br />

لمعرفة ال Unused Columns في ال ،Table یستخدم :<br />

:DBA_UNUSED_COL_TABS یوفر<br />

معلومات حول ال Columns الموضوعة في حالة<br />

، UNUSED و اسم ال Table واسم المستخدم المالك لل<br />

.Table<br />

•<br />

للحصول على معلومات حول ال<br />

Tables<br />

یمكن استخدام:‏<br />

:DBA_TABLES یوفر معلومات عدیدة مثل اسم ال Table واسم ال Tablespace التي تنتمي<br />

لھا ال Table و اسم المستخدم الذي یملك ال Table وخواص ال<br />

و غیرھا.‏<br />

.Table من ضمنھا ال "Objects" یوفر معلومات حول جمیع العناصر :DBA_OBJECTS<br />

من المعلومات المتوفرة اسم العنصر و توقیت تكوینھ و الحالة التي ھو علیھا و غیرھا من<br />

المعلومات.‏<br />

(PCTUSED ‏(مثل Storage<br />

•<br />

•<br />

للحصول على معلومات حول ال Columns في ال Table یمكن استخدام:‏<br />

:DBA_TAB_COLUMNS یوفر معلومات عدیدة مثل اسم ال<br />

وخواص ال Column وغیرھا.‏<br />

Column واسم ال Table<br />

•<br />

ملاحظة:‏ كما یوجد view باسم DBA_TABLES یوجد ایضاً‏ USER_TABLES<br />

في الفصل الثالث.‏<br />

وALL_TABLES‏.‏ تذكر اقسام ال<br />

Dictionary Views<br />

115


MANAGING INDEXES<br />

یساعد ال Index في تسریع استخراج البیانات من ال Tables كما یخفف من ال Input/Output<br />

الناتج عن ال Queries ‏(لأنھ یمنع حدوث بحث كامل على ال Table للحصول على البیانات).‏ یوجد<br />

خواص مشتركة بین ال Table و ال ،Index حیث كما أنھ یمكن تكوین<br />

Index مشابھ لل<br />

أیضاً‏ تكوین<br />

Partitioned Table یمكن<br />

،Partitioned Index ایضاً‏ یوجد Storage Parameters لل<br />

.Table لل Storage Parameters<br />

یمكن أن یتم تكوین ال Index ل Column واحد فقط ویسمى في ھذه الحالة ، Single Index كما<br />

ویسمى في ھذه<br />

یمكن تكوین ال Index لیشمل أكثر من Column ‏(الحد الأقصى<br />

لا یوجد حد لعدد ال Indexes التي یمكن تكوینھا على ال ، Table ویتم<br />

ادارة ال Index من قبل ال<br />

( 32 Columns<br />

الحالة .Composite Index<br />

.Oracle Server<br />

من أنواع ال<br />

:Index<br />

Rows یمكن تكوین ھذه النوع لضمان عدم وجود بیانات متشابھ في ال :UNIQUE INDEX<br />

ضمن ال Column الذي تم تكوین Index علیھ.‏<br />

:NON-UNIQUE INDEX یسمح ھذه النوع بتشابھ بیانات ال Rows في ال Column الذي<br />

تم تكوین<br />

:FUNCTION-BASED INDEX یمكن تكوین ھذا النوع لتسریع استخراج البیانات من ال<br />

Columns التي تحتوي على عملیات مختلفة"‏Functions‏"‏ مثل استخدام ال SUBSTR أو<br />

.Column أو غیرھا في ال REPLACE أو INSTR<br />

:PARTITIONED INDEX یتم تكوین أكثر من INDEX في أكثر من<br />

یستخدم لل Tables التي تحوي بیانات كبیرة جداً‏ وغالباً‏ ما یستخدم لل<br />

Segment في<br />

Index علیھ.‏<br />

Tablespaces مختلفة.‏<br />

.Partitioned Tables<br />

•<br />

•<br />

•<br />

•<br />

یمكن أن یتم تكوین ال Index اعتماداً‏ على نموذجین ھما B-Tree Index أو<br />

.Bitmap Index<br />

:B-TREE INDEX<br />

التكوین الداخلى لل Index یكون على شكل شجرة لھا أصل وفروع.‏ تتكون الشجرة من ثلاثة أجزاء ھي ال<br />

Root المتصل بال Branches المتصلة بال Leafs التي تحتوي على ال Index Entries التي تشیر أو<br />

في الرسم 7.1 یدل الرقم 1 على ال<br />

في ال Table باستخدام ال<br />

تدل على ال 2 على ال Branch والرقم 3 على ال<br />

. ROWIDs Lists<br />

.Leaf<br />

Rows<br />

، Root الرقم<br />

یتكون كل ال Index Entry من أربعة أجزاء ھي:‏<br />

:HEADER یتم تخزین فیھ عدد<br />

.(Composite<br />

.Column الذي یحدد حجم ال :COLUMN LENGTH<br />

.Column الذي یحدد قیمة ال :COLUMN VALUE<br />

:ROWID أرقام ال ROWIDs الخاصة بال<br />

ال Columns التي تعتمد على نوع ال Single, ) Index<br />

.Table في ال Rows<br />

•<br />

•<br />

•<br />

•<br />

116


7.1 رسم<br />

ملاحظات:‏<br />

Rows<br />

Table یقوم<br />

1- عندما یحدث عملیة INSERT لل الأوراكل بإضافة Index Entry جدید لیمثل ال<br />

الجدیدة المضافة.‏<br />

2- لا یمكن الإستفادة من B-Tree Index في ال Rows التي تحوي على .NULL أي عند البحث بواسطة<br />

فإن الأوراكل یقوم بإجراء بحث كامل<br />

على ال Table ولا یقوم باستخدام ال .Index<br />

3- یفضل استخدامھا على ال Column الذي یحوي بیانات مختلفة ‏(ممیزة)‏ كبیرة مثل أرقام الھاتف<br />

وعناوین الموظفین<br />

4- لا یفضل استخدامھا على ال Columns التي تتعرض لجملة ال OR بشكل مستمر.‏<br />

جملة WHERE عن قیمة (where last_name = null) NULL<br />

.<br />

ROWIDs<br />

:BITMAP INDEX<br />

التكوین الداخلى لل Index یشبھ تكوین ال B-Tree عدا عن استخدام یتم استخدام خریطة<br />

بحیث یمثل كل بایت . ROWID<br />

لتحدید ال<br />

Table في ال Rows<br />

بایتات "Bitmap"<br />

ملاحظات:‏<br />

-1<br />

یفضل استخدامھا على ال Column الذي لا یحدث لبیاناتھ تجدید مستمر Update" ."Low<br />

بشكل متكرر.‏<br />

2- یفضل استخدامھا عند استخدام<br />

3- یفضل استخدامھا على ال Table التي تحوي بیانات كبیرة جداً‏ ونسبة البیانات المختلفة ‏(الممیزة)‏ قلیل<br />

جداً‏ مثل نوع الإنسان ‏(ذكر أو انثى).‏<br />

4- عندما یحدث تغییر لبیانات ال ،Column یتم تجدید ال Bitmap لتناسب التغییر.‏<br />

OR أو WHERE<br />

117


:CREATING B-TREE INDEXES<br />

قبل تكوین ال Index ینصح بالتالي:‏<br />

تكوین أقل عدد ممكن من ال<br />

Indexes یبطئ ھذا النوع من العملیات.‏<br />

وضع ال<br />

Indexes على<br />

Indexes في Tablespace خاصة.‏<br />

اختیار NOLOGGING لل<br />

Indexes الكبیرة.‏<br />

Table تجري علیھا عملیات DML كثیرة،‏ لأن ال<br />

قیمة العامل INITRANS یجب أن تكون أكبر من مثیلتھا التي حددت على ال .Table<br />

•<br />

•<br />

•<br />

•<br />

لتكوین B-Tree Index یجب اتباع القاعدة التالیة:‏<br />

CREATE [UNIQUE] INDEX index_name<br />

ON [schema.]TABLE (Column [ASC | DESC] , Column [ASC|DESC] , …)<br />

[TABLESPACE tablespace_name]<br />

[PCTFREE number]<br />

[MAXTRANS number]<br />

[MINTRANS number]<br />

[LOGGING | NOLOGGING]<br />

[NOSORT]<br />

[STORAGE INITIAL number K|M NEXT number K|M …..]<br />

في القاعدة:‏<br />

:PCTFREE ھي المساحة التي تحجز في كل Block عند تكوین ال Index لكي تستقبل ال<br />

Oracle<br />

Indexes الجدیدة.‏<br />

•<br />

•<br />

•<br />

:NOSORT تحدد أن ال Rows مرتبة بالترتیب التصاعدي وبالتالي لا یجب على ال<br />

.Index عند تكوین ال Rows ترتیب ال Server<br />

Index بشكل تصاعدي أو<br />

:ASC|DESC تحدید اذا ما كان على ال<br />

تنازلي.‏<br />

ملاحظة:‏ لا یمكن تحدید ال PCTUSED لل<br />

Oracle Server تكوین ال<br />

.Index<br />

مثال تطبیقي<br />

لتكوین<br />

:7.10<br />

:B-Tree Non-Unique Index<br />

CREATE INDEX ind_HR_test<br />

ON HR.TEST (FIRST)<br />

PCTFREE 30<br />

STORAGE (INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50)<br />

TABLESPACE INDX;<br />

لتكوین B-Tree Unique Index أضف كلمة UNIQUE بعد CREATE مباشرة.‏<br />

118


:CREATING BITMAP INDEXES<br />

لتكوین Bitmap Index یجب إضافة كلمة BITMAP الى جملة CREATE INDEX التي تم<br />

استخدامھا في المثال یمكن تحدید الحجم المخصص من الذاكرة لتخزین الBitmap بتحدید<br />

العامل CREATE_BITMAP_AREA_SIZE الذي قیمتھ في الحالة<br />

بزیادة حجم قیمة العامل،‏ یتم تكوین ال Index بسرعة أكبر،‏ ولكن ینصح باستخدام قیمة صغیرة اذا كانت<br />

البیانات الممیزة ‏(المختلفة)‏ في ال Column قلیلة جداً‏ ‏(بیانات مختلفة كبیرة = ذاكرة كبیرة).‏<br />

.8MB ھو Default<br />

.7.10<br />

مثال تطبیقي<br />

:7.11<br />

CREATE BITMAP INDEX ind_HR_jobid<br />

ON HR.JOBS (JOB_ID)<br />

PCTFREE 30<br />

STORAGE (INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50)<br />

TABLESPACE INDX;<br />

مثال تطبیقي<br />

:7.12<br />

یمكن تكوین B-Tree Index أو Bitmap Index عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على + ال<br />

اضغط على مجلد Index ثم بواسطة الزر الیمین للفأرة اختر من القائمة<br />

ادخل اسم ال Index وأختر ال Schema و ال Tablespace من القوائم ، ثم اختر ال Column<br />

أو ال Columns المراد وضع Index لھا من قائمة<br />

لتكوین ، Bitmap Index ضع علامة داخل المربع الصغیر ‏(فوق زر بجانب كلمة<br />

.Normal<br />

.Create<br />

.Table Columns<br />

(Create<br />

.Schema Manager<br />

.Bitmap<br />

أختر باقي البیانات من القوائم الأخرى<br />

اضغط على زر<br />

(Storage, Partitions, Options)<br />

.Create<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

119


:ALTERING INDEXES<br />

یمكن القیام بعدة مھمات باستخدام جملة :ALTER INDEX<br />

:Changing the Block Storage Parameters<br />

یمكن تغییر قیم<br />

.MAXEXTENTS<br />

بعض العوامل مثل MAXTRANS ویمكن تغییر بعض عوامل جملة ال Storage مثل ال<br />

مثال تطبیقي<br />

ALTER INDEX ind_HR_jobid<br />

MAXTRANS 250<br />

STORAGE (MAXEXTENTS 200);<br />

:7.13<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على + ال<br />

اضغط على +<br />

اختر اسم المستخدم الذي یملك ال Index المراد تغییر خواصھا<br />

اختر اسم ال Index من النافذة الیمنى و اضغط علیھا مرتین ‏(أو بواسطة الزر الیمین للفأرة ، اختر<br />

.Normal<br />

‏(مثل (HR<br />

.Schema Manager<br />

ال .Index<br />

من القائمة Details" ."View\Edit<br />

ادخل الى قائمة ، Storage وعدل البیانات ثم اختر .Apply<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:Allocating & Deallocating Extents<br />

یمكن اضافة<br />

بنفس الشروط.‏<br />

Extents الى<br />

مساحة ال Index بنفس الطریقة المستخدمة في إضافة<br />

كما یمكن حذف Extents فارغة غیر مستخدمة من مساحة ال Index بتعویض جملة ال<br />

Table الى ال Extent<br />

ALLOCATE EXTENT بالجملة التالیة:‏<br />

DEALLOCATE UNUSED [KEEP number [K|M]]<br />

في القاعدة:‏<br />

:KEEP لإبقاء مساحة خالیة من ال<br />

.Unused Extents<br />

•<br />

120


مثال تطبیقي<br />

لإضافة<br />

:7.14<br />

: Extent<br />

ALTER INDEX ind_HR_jobid<br />

ALLOCATE EXTENT SIZE 200K;<br />

لحذف مساحة خالیة<br />

ALTER INDEX ind_HR_jobid<br />

DEALLOCATE UNUSED;<br />

:(Extents)<br />

:Rebuilding Indexes<br />

Index الى<br />

لنقل ال Tablespace أخرى أو لتغییر خواص ال<br />

ALTER INDEX مع REBUILD كما توضح القاعدة:‏<br />

في القاعدة:‏<br />

Storage Parameters یمكن استخدام<br />

ALTER INDEX [schema.]Index_name REBUILD<br />

[TABLESPACE tablespace_name]<br />

[PCTFREE number]<br />

[INITRANS number]<br />

[MAXTRANS number]<br />

[LOGGING | NOLOGGING]<br />

[REVERSE | NOREVERSE]<br />

[STORAGE (INITIAL SIZE [K|M] NEXT SIZE [K|M] ….]<br />

:REVERSE یمكن تحویل ال Index الى نوع Reverse Key Index باضافة الجملة الى<br />

القاعدة.‏ ھذا النوع یعرف بیانات ال Column بشكل عكسي ، مثلاً‏ لو كان Order_ID یحتوي<br />

على الرقم 12345 فإن الأوراكل یعكس الرقم الى 54321 ویضیف ال Column الى ال .Index<br />

ھذا النوع بستخدم بالعادة مع ال Columns المعرفة بیاناتھا بشكل تصاعدي،‏ اذ یتم توزیع البیانات<br />

المتقاربة الى Leafs مختلفة لیتم تسھیل أخراج البیانات بسرعة أكبر.‏<br />

•<br />

نتائج عملیة ال : Rebuild Index<br />

بعد انتھاء العلمیة،‏ یتم تكوین Index جدید و حذف الأصلي،‏ بحیث تساعد على تكوین Index جدید<br />

متكامل غیر ال Index الأصلي الذي قد یكون قد فقد جزء من مساحة نتیجة للتغیرات التي تطرأ على<br />

، وبالتالي استخدام وتخصیص<br />

ال Rows مثل حذف البیانات و تجدیدھا<br />

المساحة بشكل أفضل.‏<br />

(Fragmentation)<br />

خلال العملیة ، یمكن لل Queries استخدام ال Index الأصلي.‏<br />

•<br />

•<br />

ملاحظة:‏ لا یمكن استخدام Rebuild لتغییر ال Index من B-Tree الى Bitmap أو بالعكس.‏<br />

121


مثال تطبیقي<br />

:7.15<br />

للقیام بعمیلة Rebuild على ال :Index<br />

ALTER INDEX ind_HR_Jobid REBUILD<br />

TABLESPACE INDX02;<br />

:Rebuilding ONLINE<br />

أحیاناً‏ تستھلك عملیة Rebuild وقت كبیر جداً‏ عندما تكون ال Table كبیرة جداً.‏ في السابق لم یكن بالمقدور<br />

القیام بمھمات ال DML على ال Table التي یجري عملیة Rebuild Index على Index مخصصة لھا.‏<br />

یمكن أن تجري مھمات ال DML بینما تتم عملیة<br />

في النسخ الحدیثة من أوراكل<br />

بإضافة ONLINE الى جانب ،REBUILD ولكن لا ینصح بالقیام بمھمات كبیرة<br />

ویفضل الاقتصار على المھمات الصغیرة.‏<br />

(Oracle9i و Oracle8i)<br />

Rebuild Index<br />

ملاحظة:‏ لا یسمح بكل الأحوال القیام بمھمات ال DDL على ال Table خلال ال .Rebuild Index<br />

مثال تطبیقي<br />

:7.16<br />

للقیام بعمیلة Rebuild Online على ال :Index<br />

ALTER INDEX ind_HR_Jobid REBUILD ONLINE;<br />

.Index على ال Coalesce<br />

:Coalescing Indexes<br />

یمكن التخلص من أثار ال Fragmentation في ال Index بالقیام بعملیة<br />

كما یبدو في الرسم leafs تعرضتا لعملیات أدت الى حدوث Fragmentation فأصبحت كل<br />

واحد منھما نصف ممتلئة،‏ ولكن بعد حودث Coalesce تم دمج النصفین مع بعضھما مما نتج عن وجود<br />

Leaf فارغة تماما.‏<br />

،7.2 وجود 2<br />

7.2 رسم<br />

122


مثال تطبیقي<br />

:7.17<br />

للقیام<br />

بعملیة Coalescing لل<br />

:Index<br />

ALTER INDEX HR.ind_hr_jobid COALESCE;<br />

:Identify Unused Indexes<br />

یمكن وضع Index تحت المراقبة لمعرفة اذا كان یستخدم أم لا،‏ وبالتالي حذفھ في حال عدم استخدامھ.‏ یتم<br />

جمع المعلومات حول ال<br />

.V$OBJECT_USAGE المراقب في index<br />

ملاحظة:‏ كل مرة یتم فیھا مراقبة ال ، Index یتم إلغاء البیانات السابقة لل Index في<br />

ال .V$OBJECT_USAGE<br />

مثال تطبیقي<br />

:7.18<br />

لوضع ال Index تحت المراقبة:‏<br />

لوقف مراقبة ال :Index<br />

ALTER INDEX HR.ind_hr_jobid MONITORING USAGE;<br />

ALTER INDEX HR.ind_hr_jobid NOMONITORING USAGE;<br />

:ANALYZING INDEXES<br />

یمكن استخدام جملة ANALYZE INDEX للقیام:‏<br />

التأكد من أن ال Blocks الخاصة بال Index لا تحتوي على بیانات فاسدة " Block<br />

."Corruption<br />

للحصول على معلومات حول ال<br />

.Index<br />

•<br />

•<br />

Index في View اسمھ<br />

Blocks المستخدم<br />

بعد القیام ب ANALYZE INDEX یتم تخزین معلومات حول ال<br />

، یعرض ھذا ال View معلومات عن عدد ال Blocks وعدد ال<br />

ولكن أھم من ذلك ھو رقمي كل من LF_ROWS و ، DEL_LF_ROWS بحیث اذا زادت النسبة بین<br />

الرقمین عن 30% ‏(مثلاً‏ الرقم الأول یساوي 50 والثاني یساوي 100، فھذا یعني النسبة %50) فھذا یعني<br />

أن ال Index تعرض لحذف بیانات "Rows" كثیرة مما قد ینتجھ عن Fragmentation في ال .Index<br />

INDEX_STATS<br />

123


مثال تطبیقي<br />

للقیام بعملیة<br />

:7.19<br />

:Index لل Analyze<br />

ANALYZE INDEX HR.JOB_ID_PK VALIDATE STRUCTURE;<br />

بعد ذلك استخرج المعلومات من :INDEX_STATS<br />

SELECT BLOCKS , PCT_USED, LF_ROWS , DEL_LF_ROWS<br />

FROM INDEX_STATS;<br />

یظھر في جھازي الناتج التالي:‏<br />

BLOCKS PCT_USED LF_ROWS DEL_LF_ROWS<br />

----------- ---------- ---------- ----------<br />

0 19 9 16<br />

وكما تلاحظ النسبة بین الرقمین لا تتجاوز ال 30%.<br />

:DROPPING INDEXES<br />

عند عدم الحاجة لل Index أو عند حدوث خلل لھ أو عند تحول حالة ال Index الى INVALID بسبب<br />

حدوث خلل لل<br />

.DROP INDEX بواسطة جملة Index یمكن حذف ال ، Instance<br />

ملاحظة:‏ لا یمكن حذف ال Index اذا كان<br />

.FK ولدیھ علاقة مع Unique Key أو Primary Key<br />

مثال تطبیقي<br />

لحذف<br />

:7.20<br />

:Index<br />

DROP INDEX hr.ind_hr_jobid;<br />

أو عبر ال Console باتباع الخطوات التالیة:‏<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على + ال<br />

اضغط على +<br />

اختر اسم المستخدم الذي یملك ال Index المراد حذفھ ‏(مثل (HR<br />

اختر اسم ال Index من النافذة الیمنى و بواسطة الزر الیمین للفأرة ، اختر من القائمة<br />

أو من القائمة الأساسیة،‏<br />

اختر<br />

.Normal<br />

.(Remove ثم Object<br />

.Schema Manager<br />

ال .Index<br />

)"Remove"<br />

.Yes<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

124


:QUERYING INDEX INFORMATION<br />

للحصول على معلومات حول ال Index یمكن استخدام:‏<br />

:DBA_INDEXES یوفر معلومات عدیدة مثل اسم ال Index ونوعھ واسم ال Tableالتي<br />

ینتمي لھا ال Index واسم المستخدم الذي یملك ال Index وخواص ال Storage وغیرھا.‏<br />

:DBA_IND_COLUMNS یوفر معلومات عدیدة مثل اسم ال<br />

التي وضع علیھا ال وخواص ال Column وغیرھا.‏<br />

Column واسم ال Index<br />

Index<br />

:DBA_IND_EXPRESSIONS<br />

یوفر معلومات حول ال<br />

.Function-Based Indexes<br />

:V$OBJECT_USAGE<br />

یوفر معلومات ناتجة عن عملیة .Monitoring Index یوفر<br />

معلومات حول مثل اسم ال Index ونوعھ واسم ال Tableالتي ینتمي لھا ال Index واذا ما كان<br />

یحرى عملیة Monitoring على ال Index أم لا ) USED التي تدل على اذا ما كان تم استخدام<br />

ال Index خلال المراقبة )، وقت بدایة وانتھاء المراقبة ."Monitoring"<br />

•<br />

•<br />

•<br />

•<br />

125


MANAGING CONSTRAINTS<br />

یمكن وضع قوانین على ال Data ‏(مثلاً‏ عدم السماح بوجود بیانات متشابھ في ،(Column باستخدام كل من<br />

.Integrity Constraints و ، Database Triggers ، Application Code<br />

ال Application Code عبارة عن برمجة كود محدد ‏(مثل برمجة الجافا)‏ یعمل كبرنامج لوحده في ال<br />

Client أو من ضمن ال Database على شكل .Procedure أما ال<br />

من تكوین ، PL/SQL یتم تنفیذھا عند حدوث مھمة محددة في ال Database مثل القیام ب INSERT أو<br />

Database Triggers فھي برامج<br />

.UPDATE<br />

:INTEGRITY CONSTRAINTS<br />

یفضل استخدام ھذا النوع عن النوعیین الأخریین لسھولة تكوینھ وتعدیلھ ، ولسھولة تشغیلھ أو وقف تشغیلھ،‏<br />

ولإمكانیة استخراج معلومات عنھ من ال .Data Dictionary یوجد عدة أنواع من ال<br />

Integrity<br />

Constraint ھي:‏<br />

:NOT NULL یحدد أنھ لا یمكن لل Column أن یحتوي على )NULL كل ال Rows یجب أن<br />

تحتوي على بیانات ، لا یمكن أن یكون أحدھا فارغاً)‏<br />

:UNIQUE تحدد أن القیم الموجودة في ال Column‏(أو أكثر من (Column ممیزة ولا یمكن<br />

أن تتشابھ،‏ یستخدم ھذا النوع عادة عند تخصیص رقم ممیز لكل موظف في الشركة.‏ یسمح ال<br />

UNIQUE باستخدام قیم NULL في ال<br />

:PRIMARY KEY تحدد أن ال Column ‏(أو أكثر من (Column ھو ال<br />

في ال .Table تكون مھمة ال PK بضمان عدم تشابھ بیانات ال Rows في ال Column وعدم<br />

إحتواء ال<br />

تحدد أن ال Column ‏(أو أكثر من (Column ھو<br />

أو في<br />

:CHECK تحدد قانون یجب على كل ال ‏(مثل أن یكون قیم ال<br />

بجنس الإنسان،‏ إما M أو ، F ولا یمكن ادخال أي بیانات أخرى).‏<br />

Primary Key<br />

Foreign Key في ال<br />

Table أخرى.‏<br />

Rows الخاصة<br />

.Rows<br />

.NULL على قیمة Rows<br />

:FOREIGN KEY<br />

Table في ال Unique أو PK یتصل مع ، Table<br />

Rows تنفیذه<br />

•<br />

•<br />

•<br />

•<br />

•<br />

حالات ال :Integrity Constraints<br />

Constraints<br />

في أربع حالات تؤثر على البیانات المخزنة في ال Table والبیانات الجدیدة<br />

یمكن وضع ال<br />

التي سوف یتم ادخالھا مستقبلاً:‏<br />

:DISABLE NOVALIDATE في حال وضع ال Constraint في ھذه الحالة،‏ لا یتم فحص<br />

البیانات الموجودة ولا یتم فحص البیانات المستقبلیة لمعرفة اذا كانت تتطابق مع القانون أو الشرط<br />

الذي یحدده ال<br />

یتم ایقاف عمل ال Constraint وحذف ال Index المخصص لھا<br />

وعدم السماح بالقیام بأي تعدیلات على البیانات المخزنة ‏(عدم السماح بعملیات .(DML<br />

:ENABLE NOVALIDATE لا یتم فحص البیانات المخزنة لمعرفة اذا ما كانت تتطابق مع<br />

قانون ال Constraint و لكن لا یسمح بادخال بیانات جدیدة تتعارض مع ال<br />

یتم فحص البیانات الجدیدة والبیانات المستقبلیة والتأكد أنھا تتطابق<br />

في حال وجود بیانات لا تتطابق مع ال Constraint فیجب حذفھا أو تغییرھا<br />

مع ال<br />

وإلا لا یمكن الدخول الى ھذه الحالة.‏<br />

.Constraint<br />

.Constraint<br />

:DISABLE VALIDATE<br />

:ENABLE VALIDATE<br />

.Constraint<br />

•<br />

•<br />

•<br />

•<br />

126


ملاحظات:‏<br />

-1<br />

لا ینصح التحویل من الحالة الأولى أو الثانیة مباشرة الى الحالة الرابعة ، اذ أن ذلك یؤدي الى عمل<br />

Locks على كل ال Table مما قد یؤدي الى تأخر انجاز مھمات ال ،DML لذلك ینصح بالتحویل الى حالة<br />

Enable Novalidate أولاً‏ قبل التحویل ال<br />

.Enable Validate<br />

-2<br />

عندما یتم تحویل<br />

حالة ، Disable فإن ال Index الموجود یتم حذفھ والعكس صحیح.‏<br />

Constraint تستخدم Primary Key أو Unique Key من حالة Enable الى<br />

التحول من حالة Enable Novalidate الى حالة<br />

.DDL لا یوقف عملیات ال ، Enable Validate<br />

-3<br />

:CONSTRAINTS CHECKING<br />

یمكن لل Constraints أن یقوم بفحص البیانات المدخلة الى ال Table إما عند نھایة كل مھمة من مھمات<br />

ال DML و یسمى في ھذه الحالة Nondeferred أو ، Immediate أو یمكن لل Constraints أن یقوم<br />

بفحص البیانات عند كتابة Commit ‏(قد یشمل مجموعة من المھمات)‏ ویسمى في ھذه الحالة ،Deferred<br />

في كلتا الحالتین یتم عمل Rollback للمھمات التي انجزت اذا لم تتوافق مع قانون ال<br />

یفضل استخدام الحالة الثانیة التي تنقسم الى قسمین بحیث تستطیع أن تشابھ الحالة Nondeferred والحالة<br />

Deferred معاً،‏ القسمین ھما:‏<br />

.Constraint<br />

.Nondeferred تعمل كعمل ال :INITIALLY IMMEDIATE<br />

.Deferred<br />

•<br />

•<br />

:INITIALLY DEFERRED تعمل كمل ال<br />

لوضع ال Constraint في احدى الحالتین یتم استخدام القاعدة التالیة:‏<br />

SET CONSTRAINT | CONSTRAINTS<br />

(constraint_name | ALL)<br />

(IMMEDIATE | DEFERRED)<br />

یمكن أیضاً‏ استخدام ALTER SESSION كما في القاعدة ‏(تعمل في ال Session المحدد فقط):‏<br />

ALTER SESSION<br />

SET CONSTRAINT[S] = (IMMEDIATE | DEFERRED | DEFAULT)<br />

مثال تطبیقي<br />

لتغییر حالة كل ال<br />

:7.21<br />

:Deferred الى Constraints<br />

SET CONSTRAINTS ALL DEFERRED;<br />

127


:CREATING CONSTRAINTS<br />

یمكن تكوین ال<br />

یمكن تكوین ال Constraints في ال Column-Level أو في ال Table-Level على أن الأخیرة تسمح<br />

بتكوین ال Constraint لأكثر من Column واحد وھذا لا تسمح بھ الأولى.‏<br />

یجب أن یكون للمستخدم REFERENCES Privilege اللازمة لكي یستطیع تكوین<br />

Schemas أخرى غیر ال Schema الخاص بھ.‏<br />

.ALTER TABLE أو جملة CREATE TABLE باستخدام جملة Constraints<br />

Constraints في<br />

لتكوین Constraints في ال :Column-Level<br />

CREATE TABLE table_name<br />

(column_name TYPE [CONSTRAINT constraint_name] C1 | C2 | C3 | C4| C5)<br />

[NOT DEFERRABLE | DEFERRABLE [INITIALLY (IMMEDIATE |<br />

DEFERRED)] ]<br />

[DISABLE | ENABLE [VALIDATE | NOVALIDATE]<br />

أما ال ,C1 ,C2 ,C3 C4 فھي أنواع ال :Constraints<br />

[NOT] NULL =C1<br />

UNIQUE [USING INDEX ….] =C2<br />

PRIMARY KEY [USING INDEX…] =C3<br />

REFERENCES [schema.] table_name [(column_name)] [ON DELETE =C4<br />

CASCADE]<br />

CHECK (condition) =C5<br />

اما جملة USING INDEX فھي تتطابق مع جملة CREATE INDEX عدا استخدام USING عوضاً‏<br />

وعدم<br />

وعدم تحدید الجزء<br />

ذكر اسم ال .Index<br />

،ON [schema.]TABLE (Column [ASC | DESC]<br />

عن CREATE<br />

في القاعدة:‏<br />

:ON DELETE CASCADE تضمن حذف البیانات المرتبطة في ال Child بواسطة FK مع<br />

ال Parent ‏(راجع الأمتحان الأول .(Introduction to SQL<br />

•<br />

:Column-Level<br />

مثال تطبیقي 2.22:<br />

لتكوین Constraints في ال<br />

CREATE TABLE hr.new_emp (<br />

Emp_id NUMBER(8) CONSTRAINT new_emp_id_pk PRIMARY KEY<br />

DEFERRABLE INITIALLY DEFERRED<br />

USING INDEX STORAGE (INITIAL 100K NEXT 100K) TABLESPACE indx,<br />

Emp_Name VARCHAR2(20) CONSTRAINT new_emp_name NOT NULL,<br />

Salary NUMBER(10) CONSTRAINT new_emp_ck CHECK (salary >0)<br />

);<br />

128


CREATE TABLE table_name<br />

(column_name TYPE , column_name TYPE, …. ,<br />

لتكوین Constraints في ال :Table-Level<br />

[CONSTRAINT constraint_name]<br />

PRIMARY KEY (column_name , column_name, …) [USING INDEX ….]<br />

| UNIQUE (column_name , column_name, …) [USING INDEX ….]<br />

| REFERENCES [schema.] table_name [(column_name, column_name, …)]<br />

[ON DELETE CASCADE]<br />

| CHECK (condition)<br />

[NOT DEFERRABLE | DEFERRABLE [INITIALLY (IMMEDIATE |<br />

DEFERRED)] ]<br />

[DISABLE | ENABLE [VALIDATE | NOVALIDATE]<br />

);<br />

ملاحظة:‏ لا یمكن تكوین NOT NULL Constraint إلا في ال .Column-Level<br />

:Table-Level<br />

مثال تطبیقي 2.23:<br />

لتكوین Constraints في ال<br />

CREATE TABLE hr.new_emp<br />

(<br />

Emp_id NUMBER(8)<br />

Dept_id NUMBER (8)<br />

Emp_Name VARCHAR2(20) CONSTRAINT new_emp_name NOT NULL,<br />

Dept_name VARCHAR2(20),<br />

Salary NUMBER(10),<br />

CONSTRAINT new_emp_id_pk PRIMARY KEY (Emp_id , Dept_id)<br />

DEFERRABLE<br />

USING INDEX STORAGE (INITIAL 200K NEXT 200K) TABLESPACE indx<br />

CONSTRAINT new_emp_ck CHECK (salary > 0)<br />

);<br />

ملاحظة:‏ لتكوین Constraint عبر ال Console اتبع خطوات تكوین ال Table مع التأكد من ادخال<br />

البیانات في القائمة<br />

.Table<br />

.Constraints<br />

تذكر:‏ یفضل توزیع ال Indexes الى Tablespace مختلفة عن ال<br />

129


:USING ALTER TABLE<br />

یمكن استخدام جملة ALTER TABLE لتكوین أو تعدیل حالة ال .Constraints<br />

:Creating Constraints<br />

كما ذكرنا قبل قلیل أنھ یمكن تكوین Constraints باستخدام CREATE TABLE أو باستخدام جملة<br />

ALTER TABLE كما في المثال<br />

مثال تطبیقي<br />

لإضافة<br />

.2.24<br />

:2.24<br />

:ALTER TABLE بواسطة Constraints<br />

ALTER TABLE hr.new_emp ADD<br />

(<br />

CONSTRAINT new_emp_id_fk FOREIGN KEY (Dept_id)<br />

REFERENCES hr.departments (id)<br />

DEFERRABLE<br />

);<br />

لا یمكن تطبیق ھذا المثال على ال ، NOT NULL اذ یستخدم التالي لإضافة Constraint من ھذا النوع،‏<br />

أو للتحویل بین NOT NULL و :NULL<br />

ALTER TABLE hr.new_emp MODIFY Dept_name NOT NULL;<br />

:Enabling Constraints<br />

یمكن تحویل حالة ال Constraint من Disable الى Enable باستخدام .ALTER TABLE<br />

:Enable Novalidate<br />

یفضل التحویل الى ھذه الحالة أولاً‏ قبل التحویل الى الحالة<br />

PK Constraints لأن ذلك یؤدي الى عمل Locks على كل ال Table مما قد یؤدي الى تأخر انجاز<br />

مھمات ال ،DML مما یؤدي الى تأخر عملیة التحویل.‏ تستخدم القاعدة التالیة للتحویل من حالة<br />

الى حالة<br />

Validate لل Unique Constraints و ال<br />

Disable<br />

.Enable Novalidate<br />

ALTER TABLE [schema.] table_name<br />

ENABLE NOVALIDATE {CONSTRAINT constraint_name | PRIMARY KEY |<br />

UNIQUE (column , column2, ….) }<br />

[USING INDEX…..]<br />

بحیث یتم اضافة جملة USING INDEX في الحلات التي یتم فیھا تحویل حالة ال PK Constraint أو<br />

ال Unique Constraint فقط ویحب أن تكون الحالة التي تم تكوینھم في البدایة Deferrable ویجب أن<br />

یكون ال Index الذي تم تكوینھ في البدایة إما Disabled أو تم حذفھ.‏<br />

130


.Enable الى ال Disable<br />

:Enable Validate<br />

بعد عملیة<br />

ھي الحالة الإفتراضیة "Default" التي یتم فیھا التحویل من ال<br />

التحویل یتم فیھا وضع Locks على البیانات حتى تنتھي عملیة فحص البیانات الموجودة،‏ وفي حالة عدم<br />

وجود<br />

Non-Unique اذا كان قد تم تكوین ال Constraints في البدایة بالحالة Deferrable والعكس صحیح اذ<br />

Index من نوع Unique اذا كان قد تم تكوین ال<br />

یقوم ال<br />

البدایة بالحالة<br />

Indexes لل ، PK,UNIQUE Constraints یقوم ال Oracle Server بتكوین Index من نوع<br />

Constraints في<br />

Oracle Server بتكوین<br />

.Nondeferrable<br />

تستخدم ذات القاعدة التي تستخدم للتحویل من حالة Disable الى حالة<br />

Validate) ھي ال<br />

EXCEPTIONS التي سوف نتطرق لھا بعد قلیل.‏<br />

Enable Novalidate مع استبدال<br />

(Default<br />

كلمة NOVALIDATE بكلمة VALIDATE<br />

وإمكانیة إضافة جملة<br />

مثال تطبیقي<br />

:2.25<br />

لتحویل الحالة الى :Novalidate<br />

لتحویل الحالة الى :Validate<br />

لتحویل الحالة باستخدام ال<br />

ALTER TABLE hr.new_emp<br />

ENABLE NOVALIDATE CONSTRAINT new_emp_id_pk;<br />

ALTER TABLE hr.new_emp<br />

ENABLE VALIDATE CONSTRAINT new_emp_id_pk;<br />

:Console<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط على +<br />

اختر اسم المستخدم الذي یملك ال Table المراد تغییر خواصھا<br />

اختر اسم ال Table من النافذة الیمنى و اضغط علیھا مرتین ‏(أو بواسطة الزر الیمین للفأرة ، اختر<br />

.Normal<br />

‏(مثل (HR<br />

ال .Schema Manager<br />

ال .Table<br />

من القائمة Details" ."View\Edit<br />

ادخل الى قائمة ، Constraints ثم عدل البیانات ثم اختر .Apply<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

131


:USING EXCEPTIONS<br />

تستخدم جملة ال EXCEPTIONS لمعرفة البیانات التي تخالف ال Constraints بعرض معلومات حول<br />

ال البیانات "Rows" المخالفة لل<br />

.EXCEPTIONS Table تسمى Table في Constraint<br />

للقیام بفحص البیانات قبل القیام بتحویل ال Constraint من حالة Disable الى Enable یمكن اتباع<br />

الخطوات التالیة:‏<br />

تكوین ال ، Exceptions Table اذا لم یتم تكوینھا من قبل بتشغیل<br />

من داخل ال :SQLPLUS<br />

utlexcpt.sql ھو Script<br />

•<br />

ALTER<br />

تحویل ال<br />

@ C:\oracle\ora90\rdbms\admin\utlexcpt.sql<br />

Constraint الى<br />

:TABLE<br />

Enable Validate بإضافة الجملة التالیة الى<br />

EXCEPTIONS INTO system.exceptions<br />

•<br />

في حال ظھور اخطاء تمنع من تحویل حالة ال<br />

المعلومات التي تكونت في ال .Exceptions Table<br />

،Enable Validate الى Constraint<br />

استخدم<br />

•<br />

SELECT * FROM table_name<br />

WHERE ROWID IN (SELECT ROW_ID FROM EXCEPTIONS);<br />

اجراء تعدیل للبیانات المخالفة بواسطة .UPDATE TABLE<br />

تحویل ال Constraint الى Enable Validate بإستخدام .ALTER TABLE<br />

•<br />

•<br />

:QUERYING CONSTRAINTS INFORMATION<br />

للحصول على معلومات حول ال Constraints یمكن استخدام:‏<br />

:DBA_CONSTRAINTS یوفر معلومات عدیدة مثل اسم ال<br />

التي یوجد فیھا وغیرھا من المعلومات.‏<br />

Constraint ونوعھ<br />

والحالة<br />

:DBA_CONS_COLUMNS یوفر معلومات عدیدة حول ال Columns التي وضع علیھا ال<br />

.Constraints<br />

•<br />

•<br />

132


Managing USERS & password<br />

SECURITY& RESOURCES<br />

133


PASSWORD MANAGEMENT<br />

:PROFILES<br />

یستخدم ال Profile للتحكم بال Password وال Resources بواسطة ال DBA عبر تحدید عوامل<br />

"Parameters" خاصة بال من الأمور التي یمكن التحكم بھا مثلاً‏ أن یمنع بعض المستخدمین من<br />

اجراء مھمات محددة أو إخراج المستخدم من ال Database اذا لم ینفذ مھمات لوقت محدد.‏ عند تكوین ال<br />

الذي یخصص لجمیع المستخدمین ما<br />

لم یتم تكوین Profile جدید(كل القیم في ال Default Profile تساوي .(Unlimited یمكن أن یخصص<br />

ال Users فقط ولا یمكن تخصیصھ لل Pro<strong>files</strong> أخرى،‏ ولا یؤثر<br />

تخصیص ال Profile على ال Session الحالیة،‏ اذ یجب خروج المستخدم ثم دخولھ مرة أخرى الى ال<br />

Database لكي تنفذ حدود ال .Profile یتم تخصیص ال Users باستخدام جملة<br />

CREATE<br />

،Profile<br />

Default Profile بتكوین ال Oracle Sever یقوم ال ، Database<br />

Roles أو<br />

Profile لل<br />

Profile لل<br />

"Assign"<br />

.ALTER USER أو USER<br />

ملاحظة:‏ یمكن اغلاق وتشغیل ال .(Enable, Disable) Profile<br />

:MANAGING PASSWORD<br />

بالتحكم بال Password باستخدام ال<br />

Profile<br />

یمكن:‏<br />

تحدید عمر محدد لكلمة السر "Password" یجب على المستخدم تغییرھا بعد انتھاء المدة.‏<br />

إجبار المستخدم على اختیار كلمة سر معقدة تتبع نظام محددة ‏(مثلاً‏ أن لا تتشابھ كلمة السر مع اسم<br />

المستخدم)‏<br />

اجبار المستخدم عند تغییر كلمة السر عدم اختیار كلمة سر تم استخدامھا سابقاً.‏<br />

اغلاق ال Account الخاص بالمستخدم عند فشل ادخال كلمة السر لعدد محدد ‏(مثل فشل ادخال كلمة<br />

السر لثلاث مرات).‏<br />

•<br />

•<br />

•<br />

•<br />

:Locking Account<br />

یمكن غلق ال Account بشكل اوتوماتیكي عند فشل الدخول الى ال Account عند كتابة كلمة سر خاطئة<br />

لعدد من المرات،‏ كما یمكن تحدید المدة التي یظل فیھا ال Account مغلق عبر تحدید العاملین التالیین:‏<br />

:FAILED_LOGING_ATTEMPTS عدد المرات التي یسمح فیھا ادخال كلمة سر خاظئة<br />

قبل أن یتم غلق ال ،Account مثل أن تحدد القیمة بثلاث محاولات وبعد المحاولة الثالثة یغلق ال<br />

.Account<br />

:PASSWORD_LOCK_TIME تحدد قیمتھ المدة التي یظل فیھا ال Account مغلق،‏ وبعد<br />

انتھاء المدة یفتح ال Account بشكل أوتوماتیكي ‏(مثلاً‏ بعد<br />

3 أیام).‏<br />

•<br />

•<br />

Account<br />

كما یمكن لل DBA غلق ال أو فتحھ باستخدام جملة ،ALTER USER في حالة غلق ال<br />

Account بواسطة ال DBA لا یمكن فتحھ أوتوماتیكیاً‏ بل یجب أن یتم فتحھ عبر ال DBA فقط.‏<br />

134


:Password Expiration<br />

یمكن تحدید المدة التي یجب على المستخدمین تغییر كلمة السر "Password" بشكل دوري،‏ كأن یجبر<br />

المستخدمیین تغییر كلمة السر كل شھر.‏ یمكن ایضاً‏ اعطاء مھلة اضافیة عند انتھاء المدة التي یجب تغییر<br />

یظھر رسالة تحذیریة تطلب من المستخدم تغییر<br />

كلمة السر ، بحیث بعد دخول المستخدم الى<br />

كلمة السر خلال فترة محددة وإلا سوف یتم غلق ال<br />

،Database<br />

.Account<br />

:PASSWORD_LIFE_TIME المدة التي یمكن لكلمة السر أن تظل دون تغییر،‏ في حال عدم<br />

تغییر كلمة السر خلال المدة یغلق ال Account وتتحول حالة ال<br />

:PASSWORD_GRACE_TIME بعد ان تنتھي المدة التي یمكن لكلمة السر أن تظل دون<br />

تغییر،‏ یمكن اعطاء مدة إضافیة لتغییر كلمة السر قبل غلق ال Account مع ظھور رسالة تحذیریة<br />

لتغییر كلمة السر قبل المدة المحددة.‏<br />

.Expired الى Account<br />

•<br />

•<br />

مثال:‏<br />

عند تحدید ال PASSWORD_LIFE_TIME بمدة شھر و PASSWORD_GRACE_TIME<br />

بمدة ثلاثة أیام یحدث التالي:‏ بعد انتھاء الشھر دون تغیییر كلمة السر وكلما دخل المستخدم الى ال<br />

تظھر رسالة تحذیریة تطالب المستخدم من تغییر كلمة السر خلال 3 أیام وإلا سوف یتم غلق ال<br />

Account<br />

.Account<br />

:Password History<br />

یمكن اجبار المستخدم على اختیار كلمة سر لم تستخدم من قبل أبداً‏ أو منعھ من استخدام كلمة سر قدیمة خلال<br />

فترة محددة.‏<br />

:PASSWORD_REUSE_TIME<br />

تحدد عدد من الأیام قبل أن یتم اعادة استخدام كلمة سر<br />

قدیمة مرة أخرى.‏<br />

تحدد عدد المرات التي یمكن ان یتم استخدام كلمة السر<br />

القدیمة.‏ یمكن اجبار المستخدم بعدم استخدام كلمة سر قدیمة أبداً‏ بوضع قیمة العامل صفر.‏<br />

:PASSWORD_REUSE_MAX<br />

•<br />

•<br />

ملاحظة:‏ لا یمكن تحدید قیمة للعاملیین معاً‏ ابداً،‏ اذا تم تحدید قیمة أحد العاملیین یجب وضع قیمة الأخر<br />

.Unlimited<br />

:Password Verification<br />

یمكن وضع قوانیین لتسمیة كلمة السر باستخدام .PL/SQL من القوانیین التي یمكن تحدیدھا أن لا تكون<br />

كلمة السر مطابقة لإسم المستخدم أو یجب أن تحتوي كلمة السر على أرقام و أحرف معاً‏ وكل ما یساعد على<br />

تكوین كلمة سر معقدة یصعب التكھن بھا.‏<br />

:PASSWORD_VERIFY_FUNCTION لتحدید ال PL/SQL Function التي سوف<br />

تستخدم في وضع قوانیین على اختیار كلمة السر.‏<br />

•<br />

ملاحظة:‏ یجب تكوین ال Function في ال ، SYS Schema ویجب ان تكون من نوع ،Boolean أي أن<br />

الناتج أما صح "True" أو خطأ ."False"<br />

135


VERIFY_FUNCTION ، utlpwdmg.sql ضمن ال Oracle Server<br />

التي یمكن ان<br />

یوفر ال<br />

تستخدم لوضع قوانیین لكلمة السر اذا تم تحدیدھا في .PASSWORD_VERIFY_FUNCTION<br />

قوانیین ال :VERIFY_FUNCTION<br />

أن لا یقل حجم كلمة السر عن اربع خانات،‏ وأن یكون من ضمنھا على الأقل حرف واحد ورقم واحد و<br />

رمز خاص واحد مثل $.<br />

أن لا تتطابق كلمة السر مع اسم المستخدم.‏<br />

أن تختلف كلمة السر الجدیدة عن التي قبلھا على الأقل بثلاث خانات،‏ مثلاً‏ لو كانت كلمة السر القدیمة<br />

ھي N1E$ ، فلا تقبل كلمة السر الجدیدة اذا كانت N1Z$3‎على اعتبار وجود اختلافیین اثنین فقط<br />

(Z,3). ھما<br />

•<br />

•<br />

•<br />

:CREATING PROFILE TO MANAGE PASSWORD<br />

یمكن تكوین Profile لإدارة ال Password باتباع القاعدة التالیة:‏<br />

CREATE PROFILE profile_name LIMIT<br />

[FAILED_LOGING_ATTEMPTS number]<br />

[PASSWORD_LOCK_TIME number_of_days]<br />

[PASSWORD_LIFE_TIME number_of_days]<br />

[PASSWORD_GRACE_TIME number_of_days]<br />

[{PASSWORD_REUSE_TIME | PASSWORD_REUSE_MAX}<br />

number_of_days]<br />

[PASSWORD_VERIFY_FUNCTION {function_name | NULL | DEFAULT}]<br />

في القاعدة:‏<br />

PASSWORD_REUSE_MAX} :{PASSWORD_REUSE_TIME | جمع العاملیین<br />

بین } { یدل على السماح بوضع قیمة لأحدھما ولا یمكن لكلیھما كما تم ذكره مسبقاً.‏<br />

یمكن وضع القیمة UNLIMITED عوضاً‏ عن<br />

.(number_of_days ،number)<br />

•<br />

•<br />

ملاحظة:‏ كل العوامل اختیاریة واذا لم یتم كتابتھا یؤخذ القیمة ال<br />

.Unlimited وھي Default<br />

مثال تطبیقي<br />

:8.1<br />

لتكوین Profile للتحكم بكلمة السر<br />

CREATE PROFILE myprofile LIMIT<br />

FAILED_LOGING_ATTEMPTS 3<br />

PASSWORD_LOCK_TIME 5<br />

PASSWORD_LIFE_TIME 15<br />

PASSWORD_GRACE_TIME 7<br />

PASSWORD_REUSE_TIME 15<br />

PASSWORD_VERIFY_FUNCTION verify_function;<br />

:<br />

136


ملاحظة:‏ لاستخدام الساعات أو الدقائق عوضاً‏ عن الأیام تستخدم القیمة 1/24 للدلالة على یوم واحد ویستخدم<br />

1/1400 للدلالة على دقیقة واحدة.‏<br />

لتحویل<br />

:Console باستخدام ال Profile<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط بواسطة الزر الیمین للفأرة على مجلد ال Profile واختر من القائمة التي تظھر<br />

في النافذة الجدیدة،‏ ادخل اسم ال<br />

ادخل الى قائمة Password وادخل البیانات التي ترید.‏<br />

اضغط على<br />

.Create<br />

.Normal<br />

ال .Security Manager<br />

.Profile<br />

.Create<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

ملاحظة:‏ سوف یأتي لاحقاً‏ كیفیة تخصیص<br />

."User" للمستخدم Profile<br />

:ALTERING PROFILE<br />

یمكن تغییر قیم العوامل باستخدام جملة ، ALTER PROFILE كما في المثال 8.2.<br />

مثال تطبیقي<br />

أو باستخدام ال<br />

ALTER PROFILE myprofile<br />

FAILED_LOGING_ATTEMPTS 2<br />

PASSWORD_LOCK_TIME UNLIMITED<br />

PASSWORD_LIFE_TIME 10<br />

PASSWORD_GRACE_TIME 7/24<br />

PASSWORD_REUSE_TIME 10<br />

PASSWORD_VERIFY_FUNCTION verify_function;<br />

:8.2<br />

:Console<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط على + ال Profile واختر اسم ال Profile المراد تعدیلھ.‏<br />

تظھر الخواص في النافذة الیمنى،‏ عدل البیانات القائمة Password ثم اضغط علىApply<br />

.<br />

.Normal<br />

ال .Security Manager<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

ملاحظة:‏ التعدیلات التي تحدث لل Profile بواسطة ALTER PROFILE أو عبر ال Console لا تؤثر<br />

على ال Session الحالي للمستخدمیین،‏ بل عند دخول المستخدمیین في المرة القادمة<br />

) لا Session القادم).‏<br />

137


:DROPPING PROFILE<br />

یمكن حذف ال Profile باستخدام جملة DROP PROFILE عبر استخدام القاعدة التالیة:‏<br />

في القاعدة:‏<br />

DROP PROFILE profile_name [CASCADE];<br />

:CASCADE عند كتابتھا یقوم الأوراكل بحذف "Revoke" ال Profile من المستخدمیین الذین<br />

خصص لھم وتحویلھم الى ال<br />

.Default Profile<br />

•<br />

مثال تطبیقي<br />

لحذف<br />

:8.3<br />

:Profile<br />

أو باستخدام ال<br />

DROP PROFILE myprofile CASCADE;<br />

:Console<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط على + ال Profile واختر اسم ال Profile المراد حذفھ ثم بواسطة الزر الیمین للفأرة أختر<br />

من القائمة “Remove” ‏(یمكن استخدام قائمة Remove عوضاً‏ عن الزر الیمیین<br />

للفأرة).‏<br />

اختر<br />

.Normal<br />

Object ثم<br />

ال .Security Manager<br />

.Yes<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

ملاحظات:‏<br />

1- لا یمكن حذف ال .Default Profile<br />

2- عملیة الحذف لا توثر على ال Session الحالیة للمستخدمیین.‏<br />

138


RESOURCE MANAGEMENT<br />

بالتحكم بال Resources باستخدام ال Profile یمكن تنفیذ عدد من القیود منھا تحدید أقصى وقت یمكن<br />

للمستخدم ان یظل متصلاًَ‏ بال ، Database وأقصى وقت یمكن أن یظل المستخدم في ال<br />

القیام بمھمات "Idle" ، وتحدید عدد ال Sessions التي یمكن للمستخدم أن یحصل علیھا في نفس الوقت.‏<br />

یجب تحدید العامل "Parameter" RESOURCE_LIMIT في<br />

مع الإعتبار أن القیمة ال<br />

بالقیمة TRUE لكي نتمكن من التحكم بال<br />

،FALSE یمكن تغییر قیمة العامل بطریقة داینامیكیة تظل ساریة المفعول الى أن یحدث إغلاق لل<br />

Database باستخدام ALTER SYSTEM كما في المثال 8.4.<br />

Database دون<br />

Initiliazation Parameter File<br />

Default ھي<br />

، Resources<br />

مثال تطبیقي<br />

:8.4<br />

لتغییر قیمة العامل RESOURCE_LIMIT بطریقة داینامیكیة:‏<br />

ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;<br />

للتحكم بال Resources یتم تحدید العوامل التالیة في ال<br />

:Profile<br />

:CPU_PER_SESSION یتم تحدید كم من الوقت یمكن لل Session الإستھلاك من وقت ال<br />

CPU الذي ھو المعالج "Processor" في جھاز الكمبیوتر الذي یتم فیھ كل العملیات ‏(یمكن إطلاق<br />

علیھ اسم ‏"عقل الكمبیوتر")،‏ بحیث یتم تحدید قیمة العامل بأجزاء من الثانیة.‏<br />

یتم تحدید كم من الوقت یمكن لجملة واحدة من جمل SQL الإستھلاك من<br />

وقت ال ،CPU بحیث یتم تحدید قیمة العامل بأجزاء من الثانیة.‏<br />

:SESSIONS_PER_USER تحدد كم Sessions یمكن للمستخدم أن یملك في ذات الوقت.‏<br />

تذكر من الفصل الأول أنھ یمكن للمستخدم الواحد این یكوٌن أكثر من Session واحد في نفس الوقت<br />

اذا استخدم أكثر من برنامج مثل SQL PLUS و ORACLE FORMS عدا بعض الحالات<br />

القلیلة.‏<br />

:CONNECT_TIME یحدد المدة بالدقائق التي یمكن للمستخدم أو ال Session البقاء متصلاً‏<br />

بال ،Database بحیث عند انتھاء المدة یتم اخراج المستخدم من ال Database وإنھاء عمل ال<br />

Session وعمل Rollback للمھمات التي تعمل أو لم یحدث لھا<br />

یحدد المدة بالدقائق التي یمكن للمستخدم أو ال Session البقاء متصلاً‏ بال<br />

.Database بدون القیام بمھمات،‏ بحیث عند انتھاء المدة یتم اخراج المستخدم من ال Database<br />

:PRIVATE_SGA لتحدید المساحة الخاصة المحجوزة لكل Session في ال SGA ‏(خاص فقط<br />

ب<br />

:LOGICAL_READS_PER_SESSION تحدد عدد ال Data Blocks التي یمكن قرائتھا<br />

أو استخراج البیانات منھا في ال Session ‏(یمكن أن تمنع استخراج أحجام بیانات كبیرة).‏<br />

:LOGICAL_READS_PER_CALL تحدد عدد ال Data Blocks استخراج البیانات منھا<br />

لكل جملة SQL واحدة.‏<br />

:COMPOSITE_LIMIT ھو حاصل جمع كل من CPU_PER_SESSION و<br />

وPRIVATE_SGA وLOGICAL_READS_PER_CALL CONNECT_TIME<br />

لمعرفة القیمة الكاملة لل .Resource Cost<br />

.Commit<br />

:CPU_PER_CALL<br />

:IDLE_TIME<br />

.(Shared Server<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

139


:CREATING PROFILE TO MANAGE RESOURCES<br />

یمكن تكوین Profile لإدارة ال Resources باتباع القاعدة التالیة:‏<br />

في القاعدة:‏<br />

CREATE PROFILE profile_name LIMIT<br />

[SESSIONS_PER_USER n1]<br />

[CPU_PER_SESSION n1]<br />

[CONNECT_TIME n1]<br />

[IDLE_TIME n1]<br />

[CPU_PER_CALL n1]<br />

[LOGICAL_READS_PER_SESSION n1]<br />

[LOGICAL_READS_PER_CALL n1]<br />

[COMPOSITE_LIMIT n1]<br />

[PRIVATE_SGA n2]<br />

.UNLIMITED, DEFAULT, NUMBER ھي أحدى ھذه القیم n1:<br />

.UNLIMITED, DEFAULT, NUMBER K|M ھي أحدى ھذه القیم :n2<br />

•<br />

•<br />

مثال تطبیقي<br />

:8.5<br />

لتكوین Profile للتحكم بال<br />

: Resources<br />

CREATE PROFILE myprofile LIMIT<br />

SESSIONS_PER_USER 3<br />

CPU_PER_SESSION UNLIMITED<br />

IDLE_TIME 15<br />

CONNECT_TIME 90;<br />

لتحویل<br />

:Console باستخدام ال Profile<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط بواسطة الزر الیمین للفأرة على مجلد ال Profile واختر من القائمة التي تظھر<br />

في النافذة الجدیدة،‏ ادخل اسم ال<br />

ادخل البیانات التي ترید في قائمة<br />

اضغط على<br />

.Create<br />

.Normal<br />

ال .Security Manager<br />

.Profile<br />

.General<br />

.Create<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

140


:USING DATABASE RESOURCE MANAGER<br />

یمكن استخدام ال Database Resource Manager لتوفیر تحكم أكبر لل<br />

Resources وكیفیة تخصیصھا.‏ یجب أن یكون للمستخدم ال Privilege اللازمة للتحكم بال<br />

Oracle Server على ال<br />

Database<br />

.ADMINISTER_RESOURCE_MANAGER privilege وھي Resource Manager<br />

یتوزع ال Database Resource Manager الى أربعة أجزاء ھي:‏<br />

:CONSUMER GROUP مجموعة من المستخدمیین یتشاركون في ذات قیم ال<br />

التي یحتاجونھا ‏(كأن یخصص Profile واحد لكل مجموعة لأن لدیھم ذات الإحتیاجات من ال<br />

Resources<br />

.(Resources<br />

:PLAN خطط لتوزیع ال<br />

:ALLOCATION METHOD طرق توزیع ال<br />

:PLAN DIRECTIVES یستخدم من قبل ال DBA لتوزیع ال PLANS على ال<br />

.Consumer Group على ال Resources<br />

.Consumer Groups لل Resources<br />

.Consumer Groups<br />

•<br />

•<br />

•<br />

•<br />

ملاحظة:‏ معلومات أكثر حول ال Database Resource Manager وكیفیة استخدامھ في دراسة الإمتحان<br />

الرابع من امتحانات ال .Oracle9i DBA<br />

تذكر:‏ تطرقنا لل Database Resource Manager في درس .Managing Undo Data<br />

:QUERYING INFORMATION<br />

للحصول على معلومات حول ال<br />

:Profile<br />

:DBA_PROFILES للحصول على معلومات حول قیم عوامل ال ، Profile یستخدم ال<br />

Resource_Type Column لتحدید نوع العوامل المراد استخراجھا ‏(أما Password أو<br />

Resources وتسمى ھنا<br />

.(Kernel<br />

•<br />

SELECT * FROM DBA_PROFILES<br />

WHERE PROFILE = ‘myprofile’<br />

AND RESOURCE_TYPE = ‘KERNEL’;<br />

لمعرفة كلمة السر للمستخدم ‏(بشكل مشفر)‏ وحالة ال<br />

:Account<br />

:DBA_USERS معلومات حول اسم المستخدم وكلمة السر وحالة ال Account ‏(مغلق-‏ یعمل).‏<br />

•<br />

للحصول على معلومات حول ال<br />

:(COMPOSITE_LIMIT استخدام ‏(من Resource Cost<br />

.Composite_Limit معلومات حول الأربع عوامل التي یحددھا :RESOURCE_COST<br />

•<br />

141


MANAGING USERS<br />

،<br />

.User باسم Account<br />

"Objects" لتكوین العناصر Tablespace و ، Profile و Privileges<br />

لكي یتمكن ال DBA من منح فرصة الدخول الى ال Database للموظفین یجب منح كل واحد منھم<br />

یمكن تخصیص لكل<br />

Account یتكون من اسم مستخدم وكلمة سر،‏ یعرف ھذا ال<br />

فیھا،‏<br />

مستخدم ممیزات و<br />

وTablespace Temporary لتخزین البیانات المؤقتھ التي تنتج عن عملیات المستخدم،‏ كما یمكن تحدید<br />

مساحة خاصة للمستخدم من كل Tablespace تعرف باسم<br />

تعرف باسم<br />

التي یملكھا المستخدم في ال<br />

Schema ولا یمكن للمستخدم الواحد أن یكون لھ أكثر من Schema واحدة.‏<br />

.Tablespace Quotas كل العناصر<br />

(Tables, Views, Indexes ‏(مثل Database<br />

"Objects"<br />

:CREATING USERS<br />

لتكوین<br />

User جدید تستخدم القاعدة التالیة:‏<br />

CREATE USER user_name<br />

IDENTIFIED [BY password | EXTERNALLY]<br />

[DEFAULT TABLESPACE Tablespace_name]<br />

[TEMPORARY TABLESPACE Tablespace_name]<br />

[QUOTA {number K|M | UNLIMITED} ON Tablespace_name, …]<br />

[PASSWORD EXPIRE]<br />

[ACCOUNT {LOCK | UNLOCK}]<br />

[PROFILE {profile_name | DEFAULT}]<br />

في القاعدة:‏<br />

:EXTERNALLY سوف نتطرق لھا بعد قلیل.‏<br />

Tablespace التي سوف تخزن العناصر التي قد<br />

یكونھا المستخدم مستقبلاً.‏<br />

:DEFAULT TABLESPACE تحدید ال<br />

:TEMPORARY TABLESPACE تحدید ال Temporary Tablespace التي سوف<br />

یتم تخزین البیانات المؤقتة الناتجة عن مھام المستخدم.‏<br />

:QUOTA تحدید مساحة محددة من أي Tablespace تخصص للمستخدم لتخزین عناصر<br />

فیھا.‏<br />

DBA لإجبار المستخدم على تغییر كلمة السر،‏ التي عُرفت بواسطة :PASSWORD EXPIRE<br />

عند تكوین ال ،Account عند دخول المستخدم الى ال<br />

:ACCOUNT لتحدید اذا ما كان یرید ال DBA تكوین ال Account جاھز للعمل مباشرة أو أن<br />

یكون مغلق ثم یتم فتحھ بعد فترة.‏<br />

:PROFILE تحدید ال Profile المخصص للمستخدم.‏<br />

Account مباشرة.‏<br />

"Objects"<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

142


مثال تطبیقي<br />

لتكوین<br />

:8.6<br />

User جدید :<br />

CREATE USER Ahmad<br />

IDENTIFIED BY newemp<br />

DEFAULT TABLESPACE data<br />

TEMPORARY TABLESPACE temp<br />

QUOTA UNLIMITED ON users<br />

QUOTA 2M ON indx<br />

QUOTA 10M ON data<br />

PASSWORD EXPIRE;<br />

لتكوین User باستخدام ال<br />

:Console<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط بواسطة الزر الیمین للفأرة على مجلد ال Users واختر من القائمة التي تظھر<br />

في النافذة الجدیدة،‏ ادخل البیانات في قائمة<br />

اضغط على<br />

.Create<br />

.Normal<br />

.QUOTA وقائمة General<br />

ال .Security Manager<br />

.Create<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:Operating System Authentication<br />

یمكن السماح للمستخدمیین الدخول الى ال Database دون استخدام كلمة سر ، ھذا یعني بمجرد استطاعة<br />

المستخدم الدخول الى نظام التشغیل عبر نظام الحمایة المعمول فیھ في نظام التشغیل ‏(قد یكون كلمة سر خاصة<br />

یستطیع المستخدم الدخول الى ال Database دون الحاجة الى<br />

كلمة سر خاصة بالأوراكل.‏ لتطبیق ھذا النظام یجب استخدام كلمة EXTERNALLY في جملة<br />

بتحدید العامل OS_AUTHENT_PREFIX یمكن تمییزاسم المستخدم في نظام<br />

التشغیل واسم المستخدم في ال ، Database حیث أن القیمة ال Default لھذا العامل ھي<br />

.OPS$<br />

بنظام التشغیل System" ("Operating<br />

.CREATE USER<br />

مثال:‏<br />

)<br />

اذا كان المستخدم مؤھل للدخول عبر حمایة نظام التشغیل التي تطلب من المستخدم كتابة اسم و كلمة سر)‏<br />

الى ال Database وكان اسم المستخدم في نظام حمایة نظام التشغیل ھو Ahmad فإن اسم المستخدم في ال<br />

.OPS$Ahmad یكون Database<br />

عندما یطلب المستخدم Ahmad الدخول الى ال ، Database فلیس مطلوباً‏ من ادخال كلمة سر أو اسم<br />

مستخدم اذ یقوم الأوراكل بمعرفة اسم المستخدم في نظام التشغیل وربطھ مع ال<br />

الخاص بھ<br />

Account<br />

(Ahmad)<br />

.(OPS$Ahmad)<br />

143


ملاحظة:‏ تغییر قیمة ال OS_AUTHENT_PREFIX قد یؤدي الى منع المستخدمیین من الدخول الى ال<br />

Database ‏(الذین یسمح لھم الدخول الى Database بدون كلمة سر).‏<br />

یمكن استخدام عامل أخر ھو REMOTE_OS_AUTHENT لتشغیل أوغلق امكانیة الإتصال بال<br />

Remote Database عبر نظام التشغیل ‏(لا ینصح باستخدامھ لإمكانیة حدوث اختراق لل<br />

.( Database<br />

مثال:‏<br />

مثال على استخدام ، REMOTE_OS_AUTHENT دخول المستخدم ‏(لدیھ إمكانیة الدخول الى ال<br />

Database عبر حمایة نظام التشغیل)‏ الى نظام تشغیل ‏(مثل ال (Unix متصل مع<br />

الموجود على جھاز أخر،‏ في حالة وضع قیمة العامل ،True فإن المستخدم یستطیع الإتصال بال<br />

،Database أما في حالة القیمة False ‏(ھي ال فإن المستخدم لا یستطیع الإتصال بال<br />

Database ویستطیع فقط اذا كان ال Oracle Server موجود على ذات الجھاز الذي دخل إلیھ.‏<br />

Oracle Server<br />

(Default<br />

8.1 رسم<br />

:ALTERING USERS<br />

یمكن استخدام جملة ALTER USER لكي یتم تغییر ال<br />

Temporary أو ال Default Tablespace<br />

.Quota أو ال Tablespace<br />

مثال تطبیقي<br />

:8.7<br />

لتغییر ال Quota للمستخدم:‏<br />

ALTER USER Ahmad<br />

QUOTA 0 ON users;<br />

ملاحظة:‏ في حالة تغییر قیمة ال Quota الى صفر وكان للمستخدم<br />

فإن ھذه ال Table لا یمكن أن یكبر حجمھا أبداً‏ ‏(لا تستطیع حجز مزید من ال<br />

،Users Tablespace في ال Table<br />

.(Extents<br />

144


أو عبر ال<br />

:Console<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط على + بجانب المجلد ،Users ثم اختر اسم المستخدم.‏<br />

غیر البیانات في النافذة الیمنى.‏<br />

اضغط على .Apply<br />

.Normal<br />

ال .Security Manager<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:DROPPING USERS<br />

یمكن حذف مستخدم من ال Database باستخدام القاعدة:‏<br />

في القاعدة:‏<br />

DROP USER user_name [CASCADE]<br />

:CASCADE باضافتھا الى الجملة یتم حذف كل العناصر "Objects" التي كونھا المستخدم في<br />

ال Schema الخاصة بھ.‏<br />

•<br />

ملاحظة:‏ لا یمكن حذف مستخدم متصل بال .Database یمكن استعمال KILL SESSION لإخراج<br />

المستخدم ثم حذفھ من ال .Database<br />

مثال تطبیقي<br />

:8.8<br />

DROP USER Ahmad;<br />

لحذف مستخدم:‏<br />

:QUERYING INFORMATION<br />

:DBA_USERS<br />

Tablespace وال<br />

یمكن الحصول على معلومات حول اسماء المستخدمیین و ال<br />

Temporary Tablespace و اسم ال Profile وتوقیت تكوین ال<br />

وحالة ال Account لجمیع المستخدمیین وغیرھا من المعلومات.‏<br />

Default<br />

Profile<br />

:DBA_TS_QUOTAS<br />

.Tablespaces<br />

توفر معلومات حول ال Quotas المخصصة للمستخدمیین من ال<br />

•<br />

•<br />

145


Managing PRIVILEGES &<br />

AUDITING & ROLES<br />

146


PRIVILEGES<br />

باستخدام ال Privileges یمكن وضع حدود لكل مستخدم في ال ،Database مثال على ذلك حدود على<br />

المھام التي یستطیع تنفیذھا،‏ وحدود على البیانات التي یستطیع تعدیلھا.‏ یمكن إعطاء<br />

للمستخدمیین بشكل مباشر أو أن یتم عبر ال كما یمكن إعطاء Privileges عامة لجمیع<br />

المستخدمیین وذلك عبر إعطاء ال Privileges الى مجموعة تعرف باسم Public وھي مجموعة ینتمي إلیھا<br />

جمیع المستخدمیین في ال<br />

یوجد نوعیین من ال<br />

Privileges<br />

، Roles<br />

.Database<br />

Privileges ھما:‏<br />

."Objects" وضع حدود وقیود على العناصر :OBJECT Privileges<br />

:SYSTEM Privileges وضع حدود على المھام التي یستطیع المستخدم تنفیذھا في ال<br />

Database بشكل عام.‏<br />

•<br />

•<br />

Database في ال System Privileges<br />

:SYSTEM PRIVILEGES<br />

یتم تخصیصھا للمستخدمین باستخدام جملة<br />

یوجد عدد كبیر من ال<br />

GRANT ویتم إعادتھا ‏(إلغائھا)‏ من المستخدمین باستخدام جملة .REVOKE یمكن توزیع ال<br />

Privileges الى ثلاثة أقسام ، قسم متعلق بال Database بشكل عام ، والقسم الثاني متعلق بال<br />

الخاصة بالمستخدم ، أما القسم الثالث فمتعلق بال Schemas الخاصة بالمستخدمیین الأخرین.‏ نسق ال<br />

في النوع الثالث والرابع متشابھ من حیث الجملة ولكن یضاف كلمة ANY للنوع الثالث،‏ مثال<br />

على ذلك<br />

System<br />

Schema<br />

Privileges<br />

CREATE TABLE ‏(النوع الثاني)‏ و CREATE ANY TABLE ‏(النوع الثالث).‏<br />

من ال<br />

:System Privileges<br />

ALTER SYSTEM<br />

ALTER SESSION<br />

ALTER DATABASE<br />

CREATE TABLESPACE<br />

CREATE TABLE<br />

CREATE PROCEDURE<br />

CREATE CLUSTER<br />

CREATE SESSION<br />

RESTRICTED SESSION<br />

CREATE ANY TABLE<br />

ALTER ANY TABLE<br />

DROP ANY TABLE<br />

SELECT ANY TABLE<br />

CREATE ANY INDEX<br />

ALTER ANY INDEX<br />

DROP ANY INDEX<br />

CREATE ANY SEQUENCE<br />

ALTER TABLESPACE<br />

DROP TABLESPACE<br />

UNLIMITED TABLESPACE<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

147


SELECT ANY TABLE<br />

UPDATE ANY TABLE<br />

DELETE ANY TABLE<br />

BACKUP ANY TABLE<br />

INSERT ANY TABLE<br />

GRANT ANY PRIVILEGE<br />

GRANT ANY ROLE<br />

SYSOPER<br />

SYSDBA<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

ملاحظات:‏<br />

-1 لا یوجد CREATE INDEX privilege أو ، ANALYZE INDEX privilege لأنھما<br />

إعطاء CREATE TABLE<br />

.Indexes<br />

مشمولتیین مع ، CREATE TABLE privilege بحیث اذا تم<br />

للمستخدم یستطیع تكوین<br />

.CREATE TABLE privilege من ضمن ال DROP TABLE Privilege -2<br />

.CREATE PROCEDURE Privilege من ضمن ال DROP PROCEDURE privilege -3<br />

.CREATE CLUSTER privilege من ضمن ال DROP CLUSTER privilege -4<br />

توفر إمكانیة استخدام أي مساحة في أي<br />

، Tablespace ولكن تخصص فقط للمستخدمیین ولا یمكن تخصیصھا لل<br />

.Roles<br />

UNLIMITED TABLESPACE privilege -5<br />

DROP<br />

6- لكي یستطیع المستخدم عمل Truncate لأي Table<br />

في أي Schema یجب أن یخصص لھ<br />

.ANY TABLE<br />

:Protecting the Dictionary<br />

ALTER ANY TABLE أو ،SELECT ANY TABLE یصبح<br />

Dictionary Objects<br />

.Database<br />

،Dictionary Objects<br />

Initialization Parameter File<br />

SYS<br />

عندما یتم منح المستخدمیین<br />

، وھذا قد یشكل خطر على ال<br />

بإمكان المستخدمیین الدخول أو استخدام ال<br />

یوفر الأوراكل العامل 07_DICTIONARY_ACCESSIBILITY من عوامل<br />

الذي یمكن ال DBA في التحكم في ال<br />

بحیث عند وضع قیمة العامل ، False یتم منع المستخدمیین من الدخول الى جمیع العناصر ضمن ال<br />

.Dictionary الذي یملك ال Schema<br />

148


:Granting System Privilege<br />

یمكن إعطاء Privileges للمستخدم باستخدام القاعدة التالیة:‏<br />

GRANT system_privilege , system_privilege, …<br />

TO {user_name | role_name | PUBLIC} , { user_name | role_name | PUBLIC} , ..<br />

[WITH ADMIN OPTION]<br />

في القاعدة:‏<br />

:Role_name كما ذكرنا سابقاً‏ أنھ یمكن منح ال<br />

یستطیع المستخدم الذي تلقى ال<br />

لمستخدمیین أخریین.‏<br />

.Roles لل Privileges<br />

Privileges<br />

:WITH ADMIN OPTION<br />

إعطاءھا<br />

•<br />

•<br />

مثال:‏<br />

لفھم :WITH ADMIN OPTION<br />

یوجد ثلاث مستخدمیین الأول ھو ال DBA والثاني ھو Ahmad والثالث ھو<br />

.Omar<br />

CREATE ANY TABLE للمستخدم Ahmad مع استخدام ،WITH ADMIN OPTION في<br />

إعطاء CREATE ANY TABLE للمستخدم .Omar<br />

Privilege<br />

Privilege من<br />

، Omar ویجب على<br />

.DBA ال ( Privileges<br />

قام ال DBA بإعطاء<br />

أما في حال<br />

ھذه الحالة یمكن للمستخدم Ahmad<br />

عدم ذكر جملة ، WITH ADMIN OPTION فلا یمكن للمستخدم Ahamd اعطاء ال<br />

‏(المستخدم الذي لدیة إمكانیة منح<br />

Omar الحصول على ال<br />

للمستخدم<br />

ال<br />

مثال تطبیقي<br />

GRANT CREATE ANY TABLE TO Ahmad, Omar;<br />

GRANT ALTER ANY TABLE , ALTER ANY INDEX<br />

TO Ali WITH ADMIN OPTION;<br />

:9.1<br />

أو عبر ال<br />

:Console<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط على + بجانب المجلد ،Users ثم اختر اسم المستخدم.‏<br />

اختر القائمة<br />

اختر ال Privilege من القائمة العلیا ثم اضغط على المثلث المتجھ الى أسفل.‏<br />

ضع علامة صح في قسم Admin Option اذا كنت ترید ذلك.‏<br />

اضغط على .Apply<br />

.Normal<br />

ال .Security Manager<br />

.System Privileges<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

149


:Revoking System Privilege<br />

یمكن سحب أو إلغاء ال Privileges الممنوحة للمستخدم باستخدام القاعدة التالیة:‏<br />

REVOKE system_privilege , system_privilege, …<br />

FROM {user_name | role_name | PUBLIC} , { user_name | role_name |<br />

PUBLIC} , ..<br />

ملاحظة:‏ في بعض الحلات عند سحب Privilege من المستخدم یحدث خلل في باقي عناصر المستخدم.‏ مثال<br />

على ذلك الخلل الذي قد یحدثھ إلغاء CREATE TABLE من المستخدم الذي قام بتكوین<br />

وViews‏،‏ في ھذه الحالة یحدث خلل لل Views لأن ال Views معتمدة على ال<br />

Tables<br />

.Tables<br />

مثال:‏<br />

عند عمل REVOKE ل<br />

.GRANT مع ال WITH ADMIN OPTION وتم استخدام Privilege<br />

قام ال DBA بإعطاء CREATE ANY TABLE للمستخدم Ahmad مع استخدام<br />

WITH ADMIN<br />

.Omar للمستخدم CREATE ANY TABLE بإعطاء Ahmad وقام المستخدم ،OPTION<br />

عند حدوث أمر REVOKE من قبل ال DBA لل CREATE ANY TABLE الممنوحة ل ، Ahmad<br />

لا یحدث عملیة REVOKE لل CREATE ANY TABLE من عند المستخدم<br />

Omar أي أن ،Omar<br />

مازال یملك ال .CREATE ANY TABLE<br />

مثال تطبیقي<br />

:9.2<br />

REVOKE CREATE ANY TABLE FROM Ahmad, Omar;<br />

أو عبر ال<br />

:Console<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط على + بجانب المجلد ،Users ثم اختر اسم المستخدم.‏<br />

اختر القائمة<br />

اختر ال Privilege من القائمة السفلى ثم اضغط على المثلث المتجھ الى أعلى.‏<br />

اضغط على .Apply<br />

.Normal<br />

ال .Security Manager<br />

.System Privileges<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

150


:OBJECT PRIVILEGES<br />

Table, View, Sequence,<br />

توفر ال<br />

Object Privilege إمكانیة<br />

.Procedure, Function, Package<br />

القیام بمھمات محددة على ال<br />

من ال<br />

:Object Privilege<br />

:SELECT<br />

تمكن المستخدم من استخراج أو قراءة<br />

(Query)<br />

.Table, View تمكن المستخدم من تعدیل البیانات في ال :UPDATE<br />

.Table, View تمكن المستخدم من حذف البیانات في ال :DELETE<br />

.Table, View تمكن المستخدم من إضافة بیانات الى ال :INSERT<br />

:ALTER تمكن المستخدم من تعدیل تكوین ال<br />

بیانات من ال .Table,View, Sequence<br />

.Table, Sequence, Procedure<br />

.Table, View في ال Index تمكن المستخدم من تكوین :INDEX<br />

:REFERENCES تمكن المستخدم من تكوین<br />

:EXECUTE تمكن المستخدم من تشغیل برامج<br />

.Table في ال Foreign Key<br />

ال PL/SQL مثل ال .Procedure, Function<br />

:Granting Object Privilege<br />

یمكن إعطاء Privileges للمستخدم باستخدام القاعدة التالیة:‏<br />

في القاعدة:‏<br />

GRANT object_privilege, object_privilege, … | ALL [PRIVILEGES]<br />

ON [schema.] object_name<br />

TO {user_name | role_name | PUBLIC} , ….<br />

[WITH GRANT OPTION]<br />

Object Privileges لإعطاء كل ال :ALL<br />

:WITH GRANT OPTION یستطیع المستخدم الذي تلقى ال<br />

لمستخدمیین أخریین.‏<br />

Privileges<br />

إعطاءھا<br />

•<br />

•<br />

ملاحظات:‏<br />

1- لكي یستطیع مستخدم إعطاء Object Privileges الى مستخدم أخر،‏ یجب أن یكون ال Object في ال<br />

Schema الخاصة بھ أو تم إعطاءه<br />

2- لكل مستخدم<br />

.WITH GRANT OPTION مع استخدام Object Privilege<br />

Object Privileges<br />

كاملة على ال Objects الموجودة في ال Schema الخاصة بھ.‏<br />

151


مثال تطبیقي<br />

:9.3<br />

GRANT UPDATE ON hr.employees<br />

TO Ahmad<br />

WITH GRANT OPTION<br />

أو عبر ال<br />

:Console<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط على + بجانب المجلد ،Users ثم اختر اسم المستخدم الذي ترید أن تعطیھ ال<br />

Privilege مثل<br />

.Normal<br />

ال .Security Manager<br />

.Object Privileges<br />

.PM<br />

اختر القائمة<br />

اختر من القائمة العلیا الیسرى اسم المستخدم<br />

ثم اختر نوعیة ال<br />

‏(مثل (HR<br />

(Tables ‏(مثل Object<br />

.PM لل Privilege<br />

(Employees<br />

اختر نوعیة ال Privilege من القائمة الیمنى ‏(مثل<br />

اضغط على السھم المتجھ الى أسفل.‏<br />

اضغط على .Apply<br />

الذي یملك ال Object المراد أعطاء<br />

ثم اسم ال<br />

Objects ‏(مثل<br />

.(Update<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:Revoking Object Privilege<br />

یمكن سحب أو إلغاء ال Privileges الممنوحة للمستخدم باستخدام القاعدة التالیة:‏<br />

REVOKE object_privilege, object_privilege, … | ALL [PRIVILEGES]<br />

ON [schema.] object_name<br />

FROM {user_name | role_name | PUBLIC} , ….<br />

[CASCADE CONSTRAINTS]<br />

لكي ملاحظة:‏<br />

تتم عملیة ال ، Revoke یجب أن یقوم بالعملیة ذات المستخدم الذي قام بعملیة .Grant<br />

في القاعدة:‏<br />

:CASCADE CONSTRAINTS<br />

.REFERENCES privilege<br />

لحذف ال Foreign Keys التي تكونت باستخدام<br />

•<br />

152


مثال:‏<br />

عند عمل REVOKE ل<br />

قام المستخدم<br />

.GRANT مع ال WITH GRANT OPTION وتم استخدام Privilege<br />

WITH GRANT مع استخدام Ahmad للمستخدم SELECT TABLE بإعطاء Ali<br />

.Omar للمستخدم SELECT TABLE بإعطاء Ahmad وقام المستخدم ،OPTION<br />

، Ahmad الممنوحة ل SELECT TABLE لل Ali<br />

Omar أي أن ،Omar<br />

SELECT TABLE ایضاً.‏<br />

عند حدوث أمر REVOKE من قبل ال<br />

عملیة REVOKE لل SELECT TABLE من عند المستخدم<br />

یفقد<br />

یحدث<br />

مثال تطبیقي<br />

REVOKE SELECT ON hr.employees<br />

FROM Ahmad, Omar;<br />

9.4<br />

أو عبر ال<br />

:Console<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط على + بجانب المجلد ،Users ثم اختر اسم المستخدم الذي ترید استرجاع ال<br />

منھ.‏<br />

اختر القائمة<br />

اختر ال Privilege من القائمة السفلى ثم اضغط على المثلث المتجھ الى أعلى.‏<br />

اضغط على .Apply<br />

Privileges<br />

.Normal<br />

ال .Security Manager<br />

.Object Privileges<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:QUERYING INFORMATION<br />

للحصول على معلومات حول ال<br />

:System Privileges<br />

Users,<br />

:DBA_SYS_PRIVS توفر معلومات حول ال<br />

System Privileges الممنوحة الى<br />

.Roles<br />

•<br />

:DBA_TAB_PRIVS توفر معلومات حول ال<br />

الذي منح ال<br />

Object Privileges الممنوحة والمستخدم<br />

Privileges وغیرھا.‏<br />

:SESSION_PRIVS توفر معلومات حول ال<br />

الحالى<br />

System Privileges الممنوحة للمستخدم<br />

.(Session)<br />

•<br />

•<br />

153


AUDITING THE DATABASE<br />

عملیة ال Auditing ھي عملیة مراقبة مھمات ال Database المختلفة بحیث یتم مراقبة أي عملیات مشتبھ<br />

في أنھا غیر مسموح فیھا كأن یقوم مستخدم غیر مسموح لھ بالدخول الى ال Database بالدخول وحذف<br />

بیانات من ال .Database یتم جمع بیانات ومعلومات حول المراقبة في AUD$ التابعة ل ، SYS schema<br />

أو یمكن جمع ھذه المعلومات في ملف خارجي في نظام التشغیل System" ."Operating لتسجیل<br />

المعلومات الناتجة عن عملیة ال ، Auditing یجب وضع قیمة العامل AUDIT_TRAIL بالقیمة<br />

أو یمكن استخدام ملف خارجي بوضع قیمة العامل ،OS أما القیمة ال Default للعامل ھي<br />

.NONE یقوم الأوراكل بعمل Auditing في بعض الحالات وإن كانت قیمة العامل ،None مثل عند تشغیل<br />

لل DBA ‏(أو كل مستخدم یملك<br />

و إغلاق ال Instance أو لمراقبة ال<br />

مشابھ لل .(DBA<br />

لل DBA حریة تحدید اذا ما كان یرید ان تحدث عملیة ال Auditing عند المھمة المراد مراقبتھا<br />

أو لكل ال Session بغض النظر عن عدد المھمات التي تحدث(‏Session .(By<br />

True<br />

Privileges<br />

By<br />

)<br />

Privileges الخاصة<br />

أو ، DB<br />

(Access<br />

باستخدام عملیة ال Audit یمكن مراقبة:‏<br />

جمل ال SQL<br />

ال<br />

.Privileges<br />

العناصر ."Objects"<br />

•<br />

•<br />

•<br />

ملاحظة:‏ یطلق على AUD$ اسم<br />

لل DBA تعدیلھا كما جاء ذكرھا سابقاً.‏<br />

Audit Trail<br />

وھي من نوع ال Base Tables وھي الوحیدة التي یمكن<br />

اذا امتلئ ملف ال Audit Trail بحیث لا یمكن إضافة معلومات المراقبة الى الملف ، تتأثر جمیع جمل ال<br />

المراقبة وعوضاً‏ أن تظھر النتائج الطلوبة ، تظھر أخطاء Messages" ."Error ولذلك یجب تفرغة<br />

للتحكم في حجم ال<br />

ملف ال<br />

، وعدم إعطاء ال<br />

عند الضرورة فقط ، واختیار نوع المراقبة بدقة SQL أو العناصر أو ال<br />

SQL<br />

Auditing ینصح باستخدم ال ، Audit Trail<br />

Audit Trail بشكل مستمر.‏<br />

(Privileges<br />

) لا<br />

.By Access عوضاً‏ عن By Session لمستخدمیین كثیرین واستخدام AUDIT ANY privileges<br />

ملاحظة:‏ لحذف محتویات ال<br />

یمكن حمایة ملف ال Audit Trail بكتابة التالي:‏<br />

.TRUNCATE أو ال DELETE تستخدم جمل ال ، Audit Trail<br />

AUDIT DELETE ON SYS.AUD$ BY ACCESS;<br />

یفضل نقل ال AUD$ من ال SYSTEM TABLESPACE الى Tablespace أخرى،‏ مع مراعاة اعادة<br />

تعریف ال Indexes على كل من ال<br />

تذكر:‏ یجب اعادة تعریف ال Indexes عند نقل ال<br />

.(sessionid , ses$tid) التالیة Columns<br />

.Tables<br />

154


مثال تطبیقي<br />

:9.5<br />

مثال على القیام بعملیة Auditing لجمل ال :SQL<br />

لمراقبة جمل ال DDL التي تنفذ على ال : Tables<br />

مثال على القیام بعملیة Auditing لل<br />

مثال على القیام بعملیة Auditing لل<br />

AUDIT TABLE;<br />

:Privileges<br />

AUDIT CREATE ANY SEQUENCE;<br />

:Objects<br />

AUDIT UPDATE, DELETE ON HR.EMPLOYEES;<br />

:AUDITING OPTIONS<br />

یمكن استخدامھا لتحدید عملیة المراقبة بشكل أكبر.‏<br />

:WHENEVER SUCCESSFUL في حالة مراقبة جمل ال ، SQL یتم جمع معلومات حول<br />

الجمل التي تمت بنجاح ولا یتم تسجیل معلومات حول الجمل التي لم تنجح في القیام بمھمتھا.‏<br />

في حالة مراقبة جمل ال ، SQL یتم جمع<br />

معلومات حول الجمل التي لم تنجح ولا یتم تسجیل معلومات حول الجمل التي نجحت في القیام<br />

بمھمتھا.‏<br />

:WHENEVER NOT SUCCESSFUL<br />

.BY ACCESS<br />

.BY SESSION<br />

•<br />

•<br />

•<br />

•<br />

مثال تطبیقي<br />

:9.6<br />

لمراقبة عملیات تكوین Sessions ‏(دخول المستخدمیین لل (Database :<br />

العملیات الناجحة فقط:‏<br />

العملیات التي لم تنجح:‏<br />

AUDIT SESSION;<br />

AUDIT SESSION WHENEVER SUCCESSFUL;<br />

AUDIT SESSION WHENEVER NOT SUCCESSFUL;<br />

155


:NOAUDITING<br />

لایقاف عملیة ال ، Aduiting تستخدم جملة NOAUDIT مع اضافة الجزء الذي تم مراقبتھ في عملیة<br />

.Auditing<br />

مثال تطبیقي<br />

:9.7<br />

للقیام بعملیة :Noauditing<br />

NOAUDIT UPDATE, DELETE ON HR.EMPLOYEES;<br />

:QUERYING INFORMATION<br />

للحصول على معلومات حول ال<br />

:Auditing<br />

.Deafult Audit Options توفر معلومات حول ال :ALL_DEF_AUDIT_OPTS<br />

.SQL توفر معلومات حول عملیات المراقبة على جمل ال :DBA_STMT_AUDIT_OPTS<br />

:DBA_PRIV_AUDIT_OPTS<br />

توفر معلومات حول عملیات المراقبة على<br />

.Privileges<br />

:DBA_OBJ_AUDIT_OPTS<br />

توفر معلومات حول عملیات المراقبة على<br />

.Objects<br />

•<br />

•<br />

•<br />

•<br />

للحصول على المعلومات الناتجة من عملیة ال :Auditing<br />

.Auditing جمیع المعلومات الناتجة من عملیة ال :DBA_AUDIT_TRAIL<br />

:DBA_AUDIT_OBJECT المعلومات الناتجة من عملیة ال<br />

.Privileges على Auditing<br />

:DBA_AUDIT_STATMENT المعلومات الناتجة من عملیة ال Auditing على جمل ال<br />

.SQL<br />

:DBA_AUDIT_SESSION المعلومات الناتجة من عملیة ال Auditing على دخول و خروج<br />

المستخدمیین من ال .Database<br />

•<br />

•<br />

•<br />

•<br />

156


MANAGING ROLES<br />

Privileges تعطى<br />

Privileges<br />

تسھل ال Roles عملیة إدارة ال Privileges لأن ال Role عبارة عن مجموعة من ال<br />

أو تلغى من المستخدمین دفعة واحدة.‏ مثال على ذلك اذا أراد ال DBA إعطاء عشرة لكل<br />

مستخدم جدید في ال ، فیجب على ال DBA كتابة جملة GRANT عشر مرات ، وكذلك الحال<br />

مع جملة ، REVOKE اما عند استخدام ال ، Role یتم كتابة جملة GRANT أو REVOKE مرة واحدة<br />

Object Privileges معاً‏ ، ولا ینتمى ال<br />

فقط.‏ یمكن أن یتكون ال Role من ال<br />

Role الى أي ، Schema ویتم تخزین بیانات حول تكوینھ في ال<br />

System Privileges وال<br />

.Data Dictionary<br />

Database<br />

:CREATING ROLES<br />

یمكن تكوین Roles باستخدام القاعدة التالیة:‏<br />

في القاعدة:‏<br />

CREATE ROLE role_name [NOT IDENTIFIED<br />

| IDENTIFIED { BY password | EXTERNALLY }<br />

.Role لا یوجد حمایة على ال :NOT IDENTIFIED<br />

:IDENTIFIED یوجد حمایة على ال Role مثل استخدام كلمة السر أو غیرھا.‏<br />

:EXTERNALLY یستخدم حمایة خارجیة لل Role مثل حمایة نظام التشغیل.‏<br />

•<br />

•<br />

•<br />

ملاحظة:‏ یوجد أنواع حمایة أخرى لل Role عدا كلمة السر أو Externally لا مجال للتطرق لھا في الكتاب.‏<br />

مثال تطبیقي<br />

:9.8<br />

لتكوین :Role<br />

CREATE ROLE newusers;<br />

CREATE ROLE newusers2 IDENTIFIED BY n6iut30o;<br />

أو:‏<br />

أو عبر ال<br />

:Console<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط على بالزر الیمین للفأرة على المجلد ، Roles ثم اختر من القائمة<br />

ادخل اسم ونظام حمایة ال Role ثم اضغط على<br />

.Normal<br />

.Create<br />

.Create<br />

ال .Security Manager<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

157


ملاحظات:‏<br />

-1<br />

بعد تكوین ال Role مباشرة ، تكون ال Role خالیة تماماً‏ من أي Privileges ویمكن استخدام جملة<br />

GRANT لإعطاء ال Role مجموعة من ال<br />

.Privileges<br />

-2 لتكوین ، Role یجب أن یكون للمستخدم .CREATE ROLE privilege<br />

:PREDEFINED ROLES<br />

عند تكوین ال ، Database یتم تكوین مجموعة من ال<br />

Roles<br />

بشكل أتوماتیكي منھا:‏<br />

:CONNECT ال<br />

Privileges ضمن ھذا ال Role تتضمن امكانیة الإتصال بال<br />

وتكوین ، Session امكانیة تكوین كل من<br />

Database<br />

Tables, Views, Synonym, Cluster,<br />

.Database Link<br />

•<br />

Tables<br />

:RESOURCE ال<br />

.Cluster, Sequence, Functions, Procedures, Triggers<br />

Privileges ضمن ھذا ال Role تتضمن امكانیة تكوین كل من<br />

•<br />

:SELECT_CATALOG_ROLE ال<br />

Privileges ضمن ھذا ال Role تتضمن امكانیة<br />

استخراج بیانات ال Data Dictionary ‏(عمل Query على ال<br />

.(Views وال Tables<br />

:DELETE_CATALOG_ROLE ال<br />

بیانات ‏(استخدام (DELETE من ال .Data Dictionary<br />

:EXECUTE_CATALOG_ROLE ال<br />

Privilege ضمن ھذا ال Role تتضمن امكانیة حذف<br />

Privilege ضمن ھذا ال Role تتضمن امكانیة<br />

استخدام جملة EXECUTE في ال .Data Dictionary<br />

:EXP_FULL_DATABASE ال<br />

.Database لل Export<br />

:EXP_FULL_DATABASE ال<br />

.Database لل Import<br />

Privilege ضمن ھذا ال Role تتضمن امكانیة عمل عملیة<br />

Privilege ضمن ھذا ال Role تتضمن امكانیة عمل عملیة<br />

•<br />

•<br />

•<br />

•<br />

•<br />

ملاحظة:‏ سوف یتم التطرق على عملیات ال Export و ال Import في دراسة الإمتحان الثالث من امتحانات<br />

.Oracle9i ال<br />

Data Dictionary Views نوع<br />

DBA_ الذي یمكن أن للمستخدم الدخول الى بیاناتھ<br />

تذكر:‏ من أنواع ال<br />

اذا كان یملك ال .SELECT_CATALOG_ROLE<br />

158


:MODIFYING ROLES<br />

یمكن تغییر نظام حمایة ال Role أو حذف نظام الحمایة باستخدام جملة ALTER ROLE كما في<br />

المثال 9.9.<br />

ملاحظة:‏ لتعدیل نظام حمایة ال ، Role یجب أن یكون للمستخدم<br />

.ALTER ANY ROLE privilege<br />

مثال تطبیقي<br />

:9.9<br />

لتعدیل نظام حمایة ال<br />

أو احذف نظام الحمایة:‏<br />

أو عبر ال<br />

:Role<br />

ALTER ROLE newusers2 IDENTIFIED EXTERNALLY;<br />

ALTER ROLE newusers NOTIDENTIFIED;<br />

:Console<br />

.Standalone<br />

Database لكي<br />

ادخل الى ال Console عبر<br />

تظھر نافذة تطلب من اسم المستخدم وكلمة السر.‏<br />

اضغط على اسم ال<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اسم ال Role المراد تعدیلھ.‏<br />

اضغط على + بجانب المجلد<br />

في النافذة الیمنى ، اختر نظام الحمایة من قائمة .Authentication<br />

اضغط على .Apply<br />

.Normal<br />

ال .Security Manager<br />

، Roles ثم اختر<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:ASSIGNING PRIVILEGES TO ROLES<br />

بعد تكوین ال Role مباشرة ، تكون ال Role خالیة تماماً‏ من أي Privileges ویمكن استخدام جملة<br />

التي استخدمت لإعطاء Privileges الى المستخدمیین مع ذكر اسم ال Role بجانب كلمة TO<br />

عوضاً‏ عن اسم المستخدم أو ال Public كما في المثال<br />

.9.10<br />

GRANT<br />

مثال تطبیقي<br />

:9.10<br />

لإعطاء Privileges الى ال<br />

:Roles<br />

GRANT CREATE ROLE TO adminusers;<br />

GRANT SELECT ON HR.EMPLOYEES TO newusers2;<br />

159


أو عبر ال<br />

:Console<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط على + بجانب المجلد ، Roles ثم اختر اسم ال Role المراد إضافة<br />

، Object Privileges ثم اتبع ذات الخطوات التي<br />

أختر إما قائمة<br />

تم فیھا أعطاء المستخدمیین ال<br />

اضغط على .Apply<br />

.Normal<br />

Privileges لھ.‏<br />

ال .Security Manager<br />

System Privileges أو قائمة<br />

.Privileges<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:ASSIGNING ROLES TO USERS<br />

یمكن إعطاء المستخدمیین ال Roles بواسطة جملة GRANT التي استخدمت لإعطاء<br />

المستخدمیین مع ذكر اسم ال Role بجانب كلمة GRANT عوضاً‏ عن اسم ال<br />

Privileges الى<br />

Privilege<br />

.9.11<br />

كما في المثال<br />

مثال تطبیقي<br />

:9.11<br />

لإعطاء Privileges الى ال<br />

كما یمكن دمج<br />

:Roles<br />

GRANT adminusers TO Omar WITH ADMIN OPTION;<br />

GRANT newusers TO Khaled;<br />

Roles ببعضھا.‏<br />

GRANT newusers TO newusers2;<br />

ملاحظات:‏<br />

1- المستخدم الذي یقوم بتكوین ال Role لدیھ الحق في WITH ADMIN OPTION على ذلك ال<br />

.Role<br />

2- المستخدم الذي یملك<br />

المستخدمیین.‏<br />

GRANT ANY ROLE privilege یستطیع إعطاء أو إلغاء ال Roles من<br />

3- یمكن تحدید عدد ال Roles التي یمكن أن تكون في الحالة Enable باستخدام عامل من عوامل ال<br />

Intialazation Parameter File ھو MAX_ENABLED_ROLES الذي قیمتھ ال Default ھي<br />

.20<br />

160


:ASSIGNING DEFAULT ROLES<br />

یمكن للمستخدم الواحد أن یملك أكثر من ، Role ولكن لیس بالضرورة أن تكون كلھا في حالة ،Enable<br />

ولكن یمكن جمع مجموعة من ال Roles لتمثل ال Default Role والذي یتم وضعھ في حالة Enable<br />

بشكل أوتوماتیكي عند دخول المستخدم الى ال لتعیین ال<br />

، Deafult Role تستخدم القاعدة:‏<br />

.Database<br />

ALTER USER user_name DEFAULT ROLE<br />

{ role_name , role_name | ALL [EXCEPT role_name , [role_name] ] | NONE }<br />

في القاعدة:‏<br />

.EXCEPT عدا المشمولییین في جملة Roles یمكن تعیین كل ال :ALL [EXCEPT…]<br />

•<br />

ملاحظة:‏ یمكن استخدام ھذه القاعدة فقط مع ال Roles الممنوحة مباشرة للمستخدم عبر استخدام GRANT<br />

ولا تنطبق على ال Roles المدمجة ضمن<br />

.Roles<br />

مثال تطبیقي<br />

لتعیین<br />

:9.12<br />

Default Role للمستخدم:‏<br />

ALTER USER Ahmad DEFAULT ROLE newusers, newusers2;<br />

ALTER USER Khalid DEFAULT ROLE ALL;<br />

ALTER USER Omar DEFAULT ROLE ALL EXCEPT adminusers;<br />

ALTER USER Ali DEFAULT ROLE NONE;<br />

أو عبر ال<br />

:Console<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط على + بجانب المجلد ، Users ثم اختر اسم ال User المراد تعدیلھ.‏<br />

في النافذة الیمنى ، اختر قائمة ،Role ثم ضع علامة صح اسفل ال Role الذي تریده<br />

أن یكون<br />

اضغط على .Apply<br />

.Normal<br />

Deafult لل<br />

ال .Security Manager<br />

.Default<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

161


.SET ROLE باستخدام جملة Disable<br />

:ENABLING AND DISABLING ROLES<br />

لا یستطیع المستخدم<br />

یمكن تحویل حالة ال Role بین Enable و<br />

استخدام ال Role عندما تكون في حالة ، Disable ویجب تحویل حالتھا الى Enable لأستخدام ال<br />

Privileges داخلھا.‏ تؤثر ال SET ROLE فقط على ال Session ولا تكون التغییرات دائمة ، إنما تعود ال<br />

Role لوضعھا الطبیعي بعد خروج المستخدم من ال .Database عندما یتطلب ال Role كلمة سر لتحویل<br />

حالتھ ، یحب كتابة كلمة السر في جملة ، SET ROLE ولا ینطبق الحال على ال<br />

من ضمنھ Roles تتطلب كلة سر لأن ال Deafult Role یتم تحویلھا الى حالة Enable بشكل أوتوماتیكي.‏<br />

یمكن تحویل حالة ال Role باستخدام القاعدة التالیة:‏<br />

مثال تطبیقي<br />

لتحویل حالة ال<br />

Defualt Role وإن كان<br />

SET ROLE<br />

{ role_name [IDENTIFIED BY PASSWORD] [, role_name ….]<br />

| ALL [EXCEPT [role_name, role_name,…]<br />

|NONE }<br />

:9.13<br />

:Enable الى Role<br />

SET ROLE newusers, departA_users;<br />

SET ROLE newusers2 IDENRIFIED BY n6iut30o;<br />

أو<br />

لتحویل حالة جمیع ال Roles الى Enable عدا ال<br />

لتحویل حالة جمیع ال Roles الى :Disable<br />

:adminusers<br />

SET ROLE ALL EXCEPT adminusers;<br />

SET ROLE NONE;<br />

:REMOVING ROLES FROM USERS<br />

یمكن إلغاء ال Roles من ال<br />

مثال تطبیقي<br />

Users باستخدام<br />

القاعدة التالیة:‏<br />

REVOKE role_name , role_name, …<br />

FROM { role_name | PUBLIC} , {role_name | PUBLIC} , ..;<br />

:9.14<br />

لإلغاء ال Role من ال<br />

أو عبر ال<br />

REVOKE newusers FROM Khaled;<br />

:Users<br />

:Console<br />

ذات الطریقة المستخدمة في إلغاء Privileges من ال<br />

.Users<br />

162


:DROPPING ROLES<br />

یمكن حذف ال Roles من ال Database وبالتالي من ال Users باستخدام القاعدة التالیة:‏<br />

DROP ROLE role_name ;<br />

ملاحظة:‏ یحتاج المستخدم الى DROP ANY ROLE privilege لحذف أي Role في ال<br />

.Database<br />

مثال تطبیقي<br />

:9.15<br />

لحذف ال Role من ال :Database<br />

أو باستخدام ال<br />

DROP ROLE newusers2;<br />

:Console<br />

ادخل الى ال Console عبر .Standalone<br />

اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.‏<br />

أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً‏ عن<br />

اضغط على +<br />

اضغط على + ال Roles واختر اسم ال Role المراد حذفھ ثم بواسطة الزر الیمین للفأرة أختر من<br />

القائمة “Remove” ‏(یمكن استخدام قائمة Remove عوضاً‏ عن الزر الیمیین<br />

للفأرة).‏<br />

اختر<br />

.Normal<br />

Object ثم<br />

ال .Security Manager<br />

.Yes<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:QUERYING INFORMATION<br />

للحصول على معلومات حول ال<br />

:Roles<br />

:DBA_ROLES توفر معلومات حول جمیع ال Roles الموجودة في ال<br />

:DBA_ROLE_PRIVS توفر معلومات حول ال<br />

.Database<br />

Roles<br />

Roles أخرى.‏<br />

:ROLE_ROLE_PRIVS توفر معلومات حول ال Roles المدمجة مع<br />

الممنوحة للمستخدمین أو المدمجة مع<br />

Roles أخرى.‏<br />

:DBA_SYS_PRIVS توفر معلومات حول ال System Privileges الممنوحة للمستخدمین أو<br />

.Roles لل<br />

:ROLE_SYS_PRIVS توفر معلومات حول ال<br />

:ROLE_TAB_PRIVS توفر معلومات حول ال<br />

.Roles الممنوحة لل System Privileges<br />

.Roles الممنوحة لل Object Privileges<br />

:SESSION_ROLES<br />

توفر معلومات حول ال<br />

Enabled Roles للمستخدم الحالي.‏<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

163


GLOBALIZATION SUPPORT<br />

164


GLOBALIZATION SUPPORT<br />

المقصود بال ، Globalization Support إمكانیة استخدام لغات عالمیة وتقویمات عالمیة في الأوراكل.‏<br />

من الممیزات التي یوفرھا ال :Globalization Support<br />

إمكانیة حفظ واستخراج البیانات باللغة المحلیة.‏<br />

إمكانیة تشغیل ال<br />

إمكانیة عرض ال<br />

أمكانیة استخدام بعض التقویمات المحلیة مثل التقویم الیاباني.‏<br />

إمكانیة عرض الأرقام باللغة المحلیة.‏<br />

إمكانیة استخدام رموز العملات العالمیة.‏<br />

إمكانیة استخدام فارق التقویم الزمني بین الدول.‏<br />

إمكانیة استخدام مجموعة من النظم لتعریف اللغات"‏Schemes "Encoding مثل .Unicode<br />

التحویل الأوتوماتیكي بین اللغات،‏ أي استخدام المستخدم Client لغة مختلفة عن لغة السیرفر.‏<br />

Database Utilities باللغة المحلیة.‏<br />

Error Messages باللغة المحلیة.‏<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

•<br />

:ENCODING SCHEMES<br />

یوفر الأوراكل مجموعة من النظم لتعریف اللغات منھا:‏<br />

و<br />

:SINGLE-BYTE<br />

.(WE8DEC ‏(مثال 8-bit (US7ASCII<br />

یتم استخدام بایت واحد لتخزین حرف واحد.‏ یوجد نوعان ھما<br />

7-bit ‏(مثال<br />

:VARYING-WIDTH<br />

یمكن تخزین الحرف الواحد في أكثر من بایت وتستخدم ھذه الطریقة<br />

غالباً‏ في اللغات الأسیویة مثل الصینیة والیابانیة ‏(مثال JEUC و<br />

:FIXED-WIDTH یتم تحدید عدد محدد من البایتات لكل حرف<br />

.(AL32UTF8<br />

‏(مثال .(AL16UTF16<br />

:UNICODE<br />

نظام معتمد في جمیع أنحاء العالم لقدرتھ على تعریف جمیع اللغات والرموز الخاصة<br />

والرموز المستخدمة في النشر ‏(مثل © ®). یمكن أن تتكون ال Unicode من مجموعة من النظم<br />

وFixed-Width ‏(مثال .(UTF-16<br />

المختلفة مثل Varying-Width<br />

‏(مثال (UTF-8<br />

•<br />

•<br />

•<br />

•<br />

:CHOOSING CHARACTER SET<br />

خلال دراستنا لقاعدة ، CREATE DATABASE تعرفنا الى جملة CHARACTER SET التي تحدد<br />

نوعیة النظام الخاص باللغة"‏ "Character Set الذي سوف یستخدم في ال Database ‏(مثل<br />

یستخدم نظام ال Character set لتخزین اسماء ال<br />

Data و Columns وال Tables<br />

.(AL32UTF8<br />

في ھیئة .CHAR, VARCHAR2, LONG, CLOB القیمة ال Default لل Character Set ھي<br />

.US7ASCII<br />

Character Set الجدید<br />

لا یمكن تغییر ال Character Set بعد تكوین ال Database عدا في بعض<br />

استخدام<br />

مطابق بشكل كبیر للنوع القدیم).‏<br />

الأستثنائات القلیلة ‏(مثلاً‏ عندما یكون ال<br />

عملیة انتقاء ال Character set المناسب تعتمد على الأحتیاجات الحالیة والمستقبلیة معاً،‏ أي في حالة<br />

وجود إحتمال استخدام لغات عدیدة في المستقبل،‏ یفضل استخدام Character Set قادر على استیعاب لغات<br />

عدة.‏<br />

165


أیضاً‏ یجب الأخذ بالإعتبار نوعیة ال Character Set المتوفرة في نظام التشغیل " Operating<br />

اذ أن الإختلاف بین النظامیین یؤدي الى عملیة تحویل یقوم بھل الأوراكل مما قي یؤدي الى حدوث<br />

عبئ وضغط من جراء عملیة التحویل ، مما قد یؤدي الى ضیاع بیانات.‏<br />

یعتبر استخدام Single-Byte أفضل من الناحیة الفنیة والأداء عن استخدام Varying-Width ولكن<br />

إمكانیات ال Single-Byte في تعدد اللغات محدودة جداً.‏<br />

"System<br />

ملاحظة:‏ لا یمكن استخدم Fixed-Width كنظام لل<br />

.Character Set<br />

:CHOOSING NATIONAL CHARACTER SET<br />

یوجد نوع إضافي في<br />

القیمة ال<br />

الذي یستخدم لتخزین البیانات<br />

ھي .AF16UTF16 یمكن استخدام قیمتان لل<br />

لل<br />

.UTF-8 لا یمكن تغییر ال<br />

فقط ھما قیمتا ال<br />

تكوین ال Database عدا في بعض الأستثنائات القلیلة.‏<br />

عملیة انتقاء ال National Character Set تعتمد على اللغة المراد استخدامھا ، ففي حالة اللغات<br />

‏(أي أن الأحرف لا تحجز مساحة ثابتة بل متغیرة)‏<br />

الأوروبیة یتم حجز بین<br />

ولذلك یفضل استخدام UTF-8 لأنھا من نوع متغیر Varying-Width ‏(من 1 بایت الى بایت<br />

تعتبر ال UTF-16 أسرع وأقل عبئ في ال Database لأنھا من النوع الثابت .Fixed-Width<br />

قاعدة CREATE DATABASE ھو NATIONAL CHARACTER SET<br />

في ھیئة Default .NCHAR, NVARCHAR2, NCLOB<br />

National Character<br />

National Character Set<br />

National Character Set بعد<br />

UTF-16 Unicode و<br />

،<br />

3)، ولكن<br />

1 Byte الى 2 Byte لكل حرف<br />

(NLS) National Language Support تساعد<br />

:USING NLS PARAMETERS<br />

یوفر الأوراكل مجموعة من العوامل یطلق علیھا اسم<br />

على تحدید أمور مختلفة عالمیاً‏ مثل طریقة حفظ وعرض التاریخ والتوقیت،‏ الرمز المستخدم للعملة المحلیة،‏<br />

الیوم الأول في الأسبوع ‏(السبت عند المسلمین والاثنین عند الغرب)‏ وغیرھا من الأمور.‏<br />

یمكن تحدید عوامل ال NLS بثلاث طرق ھي:‏<br />

عبر تعدیل ال<br />

باستخدام ال<br />

باستخدام جملة ال .ALTER SESSION<br />

.Initialization Parameter File<br />

) Environment Variables<br />

یستخدم في نظام الویندوز ال<br />

(Registry<br />

•<br />

•<br />

•<br />

التعدیل بواسطة جملة ALTER SESSION ھو الأقوى ثم یلیھ استخدام ال<br />

.Variables ھذا یعني اذا تم تعدیل أحد العوامل بواسطة ال<br />

جملة ال ، ALTER SESSION فإن قیمة العامل تكون ھي المحددة بجملة ال ALTER SESSION<br />

ولیس القیمة المحددة بال Initialization Parameter File أو القیمة المحددة بال<br />

Environment<br />

Initialization Parameter File وبواسطة<br />

Environment<br />

.Variables<br />

ملاحظة:‏ بعض العوامل لا تتغیر بواسطة ALTER SESSION أو باستخدام ال Environment<br />

.Variables<br />

تذكر:‏ جاء ذكر ال Environment Variables في الفصل الثالث.‏<br />

166


:NLS Parameters<br />

یوفر الأوراكل عدد من العوامل منھا:‏<br />

:NLS_LANGUAGE<br />

یستخدم في عرض اسماء الأیام والشھور،‏ ویستخدم لعرض الرموز<br />

الخاصة بالتوقیت والتاریخ مثل قبل أو بعد المیلاد أو التوقیت<br />

كلغة الرسائل المعروضة في الأوراكل مثل رسائل الأخطاء Messages" "Error ، ویستخدم ایضاً‏<br />

في تحدید نوعیة عملیة ال .Sorting<br />

AM) (PM, ، ویستخدم<br />

(AD, BC)<br />

:NLS_TERRITORY یستخدم في تحدید طریقة عرض التاریخ ، واختیار رمز للعملة المحلیة ،<br />

تحدید أول یوم في الأسبوع وتحدید قیم تعرف باسم قیم ال .ISO<br />

.NLS_LANG<br />

•<br />

•<br />

•<br />

تشمل ال NLS_LANGUAGE قیم ال Default للعوامل التالیة:‏<br />

:NLS_DATE_LANGUAGE لتحدید اسماء الشھور والأیام والإختصارات المعمول بھا ‏(مثل<br />

اختصار یوم الإثنین بالغة الإنجلیزیة .(MON<br />

:NLS_SORT لتغییر طریقة ترتیب البیانات "Sorting" في الأوراكل ، مثلاً‏ اذا تم تحدید قیمتھا<br />

بالتالي NLS_SORT =German فإن ترتیب البیانات سوف یكون طبقاً‏ للأبجدیة الألمانیة.‏<br />

•<br />

•<br />

أما ال NLS_TERRITORY فتشمل قیم ال Default للعوامل التالیة:‏<br />

:NLS_CURRENCY لإختیار رمز للعملة المحلیة.‏<br />

:NLS_ISO_CURRENCY لإختیار رمز مختصر لعملیة البلد مثل USD للدولار الأمریكي.‏<br />

:NLS_DATE_FORMAT لتحدید طریقة عرض التاریخ،‏ مثلاً‏ الأیام ثم الشھور ثم السنین.‏<br />

لتحدید طریقة عرض الأرقام التي تحوي على<br />

فواصل مثل الأرقام الغیر صحیحة ‏(مثل<br />

:NLS_NUMERIC_CHARACTERS<br />

.(222.44.5<br />

•<br />

•<br />

•<br />

•<br />

Default للعوامل الأخرى ،<br />

بذلك ھو عند<br />

المقصود بأن العامل NLS_TERRITORY یشمل القیم ال<br />

تحدید قیمة ال ، NLS_TERRITORY فلیس من الضروري تحدید قیم العوامل التي یشملھا.‏<br />

أیضاً‏ في حالة تحدید العامل NLS_TERRITORY والعوامل التي یشملھا ، یتم تغییر قیم العوامل التي<br />

یشملھا،‏ حیث أن تغییر قیمة العامل NLS_TERRITORY یتم فقط في ال<br />

أو عبر جملة ال ALTER SESSION مما یجعلھ النوع الأقوى من العوامل التي یشملھا التي تتغیر عبر<br />

جمیع الطرق.‏ مثال على ذلك اذا تم تحدید قیمة العامل NLS_CURRENCY بالقیمة £ ‏(الباوند)‏ في ال<br />

Initialization Parameter File ولكن ایضاً‏ تم تحدید قیمة العملة المحلیة في<br />

¥ ‏(الین الیاباني)‏ فإن رمز العملیة المحلیة في الأوراكل یكون الین الیاباني.‏<br />

Environment Variables<br />

NLS_TERRITORY بالقیمة<br />

:NLS_LANG Parameter<br />

یمكن استخدام قیم مختلفة لكل مستخدم باستخدام ال NLS_LANG ویتم تحدیدھا فقط عبر استخدام ال<br />

تتكون من ثلاثة اقسام ھي Language و<br />

،Set معرفة بالقاعدة التالیة:‏<br />

Character و Territory<br />

NLS_LANG = Langugae_Territory.Charset<br />

.Environment Variables<br />

167


في القاعدة:‏<br />

:Language<br />

ھي موازیة للعامل NLS_LANGUAGE ویتم تعریف قیمتھا في الأوراكل عند<br />

تحدیدھا ولا یتم الأخذ بقیمة ، NLS_LANGUAGE اذ یعتبر العامل NLS_LANG ھو الأقوى<br />

في الأوراكل.‏<br />

:Territory ھي موازیة للعامل NLS_TERRITORY ویتم تعریف قیمتھا في الأوراكل عند<br />

تحدیدھا ولا یتم الأخذ بقیمة ، NLS_TERRITORY اذ یعتبر العامل NLS_LANG ھو<br />

الأقوى في الأوراكل.‏<br />

فقط.‏<br />

:Charset یحدد نوعیة ال<br />

Character Set للمستخدم<br />

•<br />

•<br />

•<br />

:NLS and Functions<br />

خلال دراستك للإمتحان الأول SQL" "Introduction to استخدمت ال<br />

عملیات متعددة مثل جملة ، TO_CHAR وللتذكیر راجع المثال 10.1.<br />

NLS Parameters داخل<br />

مثال تطبیقي<br />

SELECT TO_CHAR (hire_date, ‘DD.Mon.YYYY’,<br />

‘NLS_DATE_LANGUAGE = GERMAN’)<br />

FROM HR.EMPLOYEES<br />

:10.1<br />

یمكن استخدام العوامل التالیة مع :TO_CHAR<br />

NLS_DATE_LANGUAGE<br />

NLS_NUMERIC_CHARACTERS<br />

NLS_CURRENCY<br />

NLS_ISO_CURRENCY<br />

NLS_CALENDAR<br />

•<br />

•<br />

•<br />

•<br />

•<br />

یمكن استخدام العوامل التالیة مع :TO_DATE<br />

NLS_DATE_LANGUAGE<br />

NLS_CALENDAR<br />

•<br />

•<br />

یمكن استخدام العوامل التالیة مع :TO_NUMBER<br />

NLS_NUMERIC_CHARACTERS<br />

NLS_CURRENCY<br />

NLS_ISO_CURRENCY<br />

•<br />

•<br />

•<br />

168


:QUERYING INFORMATION<br />

للحصول على معلومات حول ال :NLS<br />

:NLS_DATABASE_PARAMETER توفر معلومات عن ال<br />

Character Set وال<br />

.Database المستخدم في ال National Character Set<br />

•<br />

SELECT PARAMETER, VALUE<br />

FROM NLS_DATABASE_PARAMETER<br />

WHERE PARAMETER LIKE ‘%CHARACTERSET%’;<br />

:NLS_INSTANCE_PARAMETER توفر معلومات عن قیم عوامل ال NLS المحددة في<br />

ال<br />

.Initialization Parameter File<br />

:NLS_SESSION_PARAMETER توفر معلومات عن قیم عوامل ال NLS المحددة لل<br />

Session فقط.‏<br />

:V$NLS_VALID_VALUES توفر معلومات حول جمیع القیم المتوفرة المسموح استخدامھا<br />

لتحدید كل من ال<br />

.Language, Territory, Character Set<br />

•<br />

•<br />

•<br />

169

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!