23.12.2014 Views

redo log files

redo log files

redo log files

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

بسم االله الرحمن الرحيم<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!