redo log files
redo log files
redo log files
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
بسم االله الرحمن الرحيم<br />
السلام علكيم ورحمة االله وبركاته:<br />
هذا الكتاب للراغبين في القيام بإمتحانات الأوراكل<br />
رقم<br />
1z0-031 المسمى بإسم:<br />
9 وبالتحديد للإمتحان الثاني<br />
Oracle 9i DBA Fundamentals I<br />
عسى أن ینفعكم وبالتوفیق إن شاء االله تعالى.<br />
أخوكم محمد.<br />
ھذا الكتاب مجاني وغیر مخصص للبیع<br />
نسخة مجانیة في موقع<br />
http://book.arabsbook.com/<br />
2
المكونات:<br />
الفصل الأول: مكونات الأوراكل. (4)<br />
الفصل الثاني: تنصیب و إدارة الأوراكل. (26)<br />
الفصل الثالث: تكوين الداتا بیس واستخدام الداتا ديكشینوري. (51)<br />
الفصل الرابع: ملفات الكنترول و الريدو لوج. (63)<br />
الفصل الخامس: ملفات الداتا والتیبل سبیس. (76)<br />
الفصل السادس: السیجمنت و خصائص التخزين. (95)<br />
الفصل السابع: إدارة التابل و الإندكس والكونیسترانیت.(106)<br />
الفصل الثامن :<br />
إدارة الیوزرز و باسورد سیكیورتي و الريسورسیس.(133)<br />
الفصل التاسع<br />
:<br />
إدارة البريفلیج و أوديوتین و الرولز. (146)<br />
الفصل العاشر: الدعم العالمي.(164)<br />
3
ORACLE ARCHITECTURE<br />
4
ORACLE SERVER<br />
ھو نظام لادارة قواعد البیانات و یتكون من مكونیین اساسیین ھما<br />
:<br />
ORACLE INSTANCE, ORACLE DATABASE<br />
.Process structure لتتمكن من<br />
Memory Structure<br />
: ORACLE INSTANCE<br />
و<br />
من أھم مكونات الأوراكل یحتوي على<br />
الوصول الى البیانات "Data" یجب أن یكون ال Instance في وضعیة العمل، أي انھ یتم من خلالھ<br />
الحصول على البیانات المطلوبة، ولا یستطیع ال Instance فتح و تشغیل أكثر من واحد فقط<br />
في نفس الوقت، ولكن من الممكن لأكثر من Instance العمل على ذات ال .Database<br />
Database<br />
1.1 رسم<br />
: ORACLE DATABASE<br />
عبارة عن مجموعة من الملفات لحفظ البیانات واستعادتھا عند الطلب وینقسم الى قسمین ھما Logical<br />
. Physical structure و structure<br />
. Database<br />
اما ال<br />
اما ال<br />
Logical یتكون من أقسام لتخزین وادارة ال<br />
Physical یتكون من الملفات الحقیقیة الموجودة على الكمبیوتر أو السریفر<br />
.<br />
مثال:<br />
Logical<br />
عندما تشاھد صورة على موقع انترنت فإنك تشاھد الجزء ال أما الملف الحقیقي للصورة والذي<br />
مخزن في السیرفر یكون الجزء ال یكون ھنالك ارتباط بین الجزئین بحیث اذا حذف أحدھما یجب<br />
حذف الجزء الأخر، اذ لا فائدة من إبقاء ملف الصورة ال Physical في السیرفر اذا كنت لا ترید عرض<br />
الصورة على الأنترنت.<br />
.Physical<br />
5
ویتكون<br />
Database physical structure من ثلاث ملفات ھي<br />
:<br />
---------------------------------------------------------------------------------------------------<br />
:Control <strong>files</strong><br />
.Oracle Database<br />
ملفات التحكم تحتوي على المعلومات اللازمة للمحافظة على ال Database ویجب ان<br />
یتوفر على الأقل ملف واحد لیعمل<br />
:Data Files<br />
:Redo Log Files<br />
الملفات التي یتم تخزین المعلومات والبیانات داخلھا.<br />
تقوم بتسجیل جمیع المتغیرات التي طرأت على ال Database مثل أضافة أو حذف<br />
بعض البیانات "Data" لنتمكن من استعادة البیانات في حدوث ضیاع بیانات بشكل مفاجئ (مثلاً: انقطاع<br />
التیار الكھربائي قبل حفظ البیانات المتغیرة).<br />
-------------------------------------------------------------------------------------------------------<br />
لیست ضمن ال Database انما ضمن ال<br />
ویوجد ملفات أخرى في ال<br />
ویجب أن تتواجد لتشغیل واستخدام واغلاق ال<br />
.Oracle Server<br />
Database مثل:<br />
physical ولكنھا<br />
.Privileges مثل Instance الذي یحتوى على المعلومات اللازمة للدخول الى ال :Password File<br />
:Archived Redo Log <strong>files</strong> عبارة عن نسخ ل<br />
أي ضیاع للبیانات.<br />
:Parameter File<br />
Structure<br />
Redo Log Files للمزید من الأمان في حالة حدوث<br />
تخزن المواصفات الخاصة لل Instance مثلاً حجم الذاكرة الممنوحة لل Memory<br />
ومواصفات أخرى نتطرق لھا لاحقاً.<br />
1.2 رسم<br />
6
أما ال Logical Structure یتكون من:<br />
.Tablespaces<br />
:Tablespaces<br />
كل<br />
تنقسم ال Database الى وحدات أصغر تسمى ال<br />
ان یتكون من واحد أو أكثر .Tablespace یوفر الأوراكل System Tablespace في بدایة تكوین ال<br />
Database كحد أدني ضروري لعمل ال<br />
Database یجب<br />
.Database<br />
:Segments<br />
ینقسم ال Tablespace الى وحدات أصغر تسمى ال<br />
.Segments<br />
:Extent<br />
ینقسم ال Segments الى وحدات أصغر تسمى ال<br />
.Extents<br />
:Blocks<br />
البیانات.<br />
تنقسم ال Extent الى وحدات أصغر تسمى ال Blocks وھي أصغر وحدات تخزین و قراءة<br />
سوف یتم التطرق لاحقاً بالتفاصیل في الكتاب لمكونات ال .Logical Structure<br />
رسم 1.3<br />
7
ORACLE MEMORY STRUCTURE<br />
یتكون من منطقتین تعرفان باسم<br />
Instance الخاص بال Memory structure<br />
:<br />
:System Global Area (SGA)<br />
الذي تم<br />
وھي ال<br />
التحدث عنھ مسبقاً (راجع الرسم 1.1) والتي ھي أحد أھم مكونات ال Instance وتحجز المساحة الخاصة لھا<br />
من الذاكرة (أو تبدأ بالعمل) عند تشغیل ال .Instance وھي ذاكرة مشتركة بین الأوامر "Processes" التي<br />
SQL Query Process وایضاً مشتركة بین مستخدمي ال<br />
تأتي لل<br />
المختلفین، وتعرف ایضاً باسم<br />
Database<br />
.Shared Global Area :<br />
Instance مثل<br />
وھي المساحة المخصصة من الذاكرة ل<br />
على معلومات حول ال .Server Process وھي ذاكرة خاصة<br />
وتعرف ایضاً باسم<br />
User Process وتحتوي<br />
:Program Global Area (PGA)<br />
لأمر "Process"<br />
.Process Global Area أو Private Global Area :<br />
سوف یتم التطرق لاحقاً ل<br />
.Server Process و User Process<br />
واحد فقط.<br />
1.4 رسم<br />
8
SYSTEM GLOBAL AREA (SGA)<br />
جمیع مستخدمي ال Database یتشاركون البیانات الموجودة في ھذه المنطقة حیث یتم تخزین البیانات<br />
المشتركة من مختلف الأوامر Processes" "Database لكي تسھل عملیة استخراج البیانات یقوم ال<br />
Oracle بحجز المساحة المخصصة لھ من الذاكرة عند بدایة تشغیل ال Instance ویقوم بتحریر المساحة<br />
عند انھاء عمل ال ،Instance وتقسم الى عدة أقسام منھا أقسام اساسیة ضروریة ومنھا أقسام اختیاریة.<br />
.<br />
الرسم رقم 1.5 یوضح الأقسام الاساسیة والأقسام الاختیاریة (الأقسام الاختیاریة باللون الاحمر)، وسوف یتم<br />
التطرق الى كل قسم على حده.<br />
رسم 1.5<br />
)<br />
تعتبر ال SGA ذاكرة مرنة داینامیكیة أي ان باستطاعة أقسامھا ان تكبر أو تصغر في الحجم دون أغلاق ال<br />
لأسباب مختلفة مثل كثرة العمل كثرة الأوامر) على أحد أقسامھا اذ أن زیادة العمل على احد<br />
الأقسام یتتطلب ذاكرة اضافیة ولكن لا یمكن للذاكرة العامة لل SGA ان تتخطى الحد الأعلى المحدد بالعامل<br />
.SGA_MAX_SIZE "Parameter"<br />
Instance<br />
ملاحظة:SGA_MAX_SIZE ھي احد مكونات ال Initialization Parameter File<br />
التطرق لھا لاحقاً.<br />
التي سوف یتم<br />
تذكر: ال<br />
مثال تطبیقي<br />
Parameter File<br />
:1.1<br />
التي جاء ذكرھا قبل قلیل.<br />
لمعرفة حجم ال SGA الحالي اكتب التالي في برنامج :SQLPLUS<br />
SHOW SGA;<br />
ال Total System Global Area تمثل حجم ال SGA الحالي.<br />
9
مثال:<br />
اذا كانت الذاكرة المخصصة لل SGA حوالي 100 میغا بایت والتي تعتبر "SGA_MAX_SIZE" وكان<br />
التوزیع المبدئي للذاكرة على الأقسام المختلفة على النحو التالي:<br />
=Shared Pool Area 50 میغا بایت<br />
=Database Buffer Cache<br />
25 میغا بایت<br />
=Redo Log Buffer 10 میغا بایت (منطقة ثابتة غیر متغیرة)<br />
باقي الأقسام = 15 میغا بایت. (الأقسام المتغیرة)<br />
الذاكرة الكاملة = 100 میغا بایت<br />
Shared Pool Area بحیث<br />
أن 50 میغا بایت لم تعد تكفي، فبمقدور<br />
وزاد ضغط العمل على<br />
Pool Area بان تأخذ ذاكرة اضافیة من باقي الأقسام ولكن لا یمكن للذاكرة الكاملة بأن تزید عن<br />
بایت.<br />
Shared<br />
100 میغا<br />
=Shared Pool Area 60 میغا بایت<br />
=Database Buffer Cache<br />
10=Redo Log Buffer<br />
=<br />
20 میغا بایت<br />
میغا بایت (منطقة ثابتة غیر متغیرة)<br />
باقي الأقسام 10 میغا بایت (الأقسام المتغیرة)<br />
الذاكرة الكاملة = 100 میغا بایت<br />
الذاكرة في ال<br />
SGA عبارة عن وحدات متواصلة تسمى<br />
Granules وحجم ال Granule یعتمد على<br />
.SGA_MAX_SIZE<br />
SGA_MAX_SIZE أصغر من 128 میغا بایت, اذاً حجم كل Granule یساوي 4 میغا بایت أما اذا كان<br />
حجم ال SGA_MAX_SIZE اكبر من 128 میغا بایت اذاً حجم كل Granule یساوي 16 میغا بایت.<br />
الحد الأدني من عدد ال<br />
Granules لل SGA ھو<br />
ثلاث.<br />
واحد<br />
واحد<br />
واحد<br />
Granule للمنطقة الثابتة في SGA مثل<br />
Redo Log Buffer<br />
Shared Pool Area ل Granule<br />
Database Buffer Cache ل Granule<br />
ملاحظة: یمكن الحصول عن بیانات عن ال<br />
منV$BUFFER_POOL. Granules<br />
10
:SHARED POOL AREA<br />
تستخدم لحفظ أخر أو أحدث أوامر ال SQL و PL/SQL وأخر البیانات(المعلومات) المستخرجة من ال<br />
تتكون من قسمین ھما<br />
.Data Dictionary Cache و Library Cache :<br />
.Data Dictionary<br />
1.6 رسم<br />
باعتبارھا منطقة مھمھ جداً فمن الممكن تغیر حجمھا داینامیكیاً (بدون اغلاق ال<br />
یتجاوزالزیادة في المساحة مساحة ال SGA<br />
محددة من قبل العامل "Parameter"<br />
(Instance بحیث لا<br />
المحدده بالعامل "Parameter" .SGA_MAX_SIZE<br />
یعتبر حجم ال SHARED POOL AREA<br />
SHARED_POOL_SIZE<br />
مثال تطبیقي1.2:<br />
لمعرفة الحجم الحالي ل<br />
Shared Pool Area اكتب التالي:<br />
SHOW PARAMETER SHARED_POOL_SIZE;<br />
في الكمبیوتر الخاص بي الحجم ھو<br />
لتغییر مساحة ال<br />
: 46 MB و یظھر كالتالي = 46137344<br />
Shared Pool Area<br />
داینامیكیاً اكتب التالي:<br />
ALTER SYSTEM SET SHARED_POOL_SIZE= 64M;<br />
في حالة نجاح الأمر یظھر الجواب التالي من .System altered : SQL PLUS<br />
أما في حالة عدم وجود ذاكرة أضافیة لان تضاف ل Shared Pool Area یظھر الجواب<br />
التالي:grow .Insufficient memory to<br />
11
:Library Cache<br />
تحتوي على :<br />
- المنطقة رقم :1 Statements SQL Shared<br />
- المنطقة رقم Packages: 2 PL/SQL Procedures or<br />
مثال:<br />
عندما یقوم مستخدم لل Database بطلب جملة ال SQL فإن الجملة وطریقة انجاز مھامھا تخزن في<br />
المنطقة رقم 1 وبذلك یسھل عملیة تكرار انجاز "Execute" من الذاكرة بسرعة أكبر في حال تم<br />
طلب نفس الجملة من مستخدم أخر وبذلك تكون العملیة أسرع وتخفف العبئ على ما یعرف باسم<br />
.PL/SQL وكذلك ینطبق الحال على ،Compilations<br />
خطوات عملیة:<br />
ال SQL<br />
select * from employees; :<br />
:1<br />
: 2<br />
یقوم المستخدم الأول بطلب جملة ال SQL التالیة<br />
الخطوة بدراسة الجملة ومعرفة المراحل التي سوف یتم بعدھا<br />
یقوم ال<br />
الخطوة انجاز"Execute" الجملة على اعتبار أن ھذه الجملة لیست مخزنة في ال .Library Cache<br />
یتم تخزین الجملة ومراحل انجازھا في .Library Cache<br />
الخطوة یتم اظھار البیانات الناتجة من جملةال SQL للمستخدم الأول، وبذلك تكون جملة ال SQL تم<br />
الخطوة انجازھا وتم تسجیل جمیع المراحل التي مرت بھا الجملة في ال .Library Cache<br />
یقوم المستخدم الثاني بعد قلیل بكتابة نفس جملة ال SQL وھي<br />
الخطوة فینفذ<br />
بدراسة الجملة فیجد انھا موجوده في ال<br />
یقوم ال<br />
الخطوة مراحل انجاز الجملة دون دراسة الجملة باعتبار ان المراحل التي تمت لانجاز الجملة مخزنة في ذاكرة ال<br />
select * from employees;<br />
Library Cache<br />
Server Process<br />
Server Process<br />
:3<br />
:4<br />
:5<br />
:6<br />
.Library Cache<br />
الخطوة 7:<br />
یتم اظھار البیانات المطلوبة للمستخدم الثاني بسرعة أكبر.<br />
:Data Dictionary Cache<br />
المكون الثاني ل SHARED POOL AREA والتي یحتوي على بیانات من ال Data Dictionary<br />
وھي تعمل بنفس طریقة ال<br />
. Library Cache<br />
حول: etc… .Tables, Indexes, Privileges,<br />
وعندما تمتلئ منطقة Library Cache أو Data Dictionary Cache یقوم الأوراكل باخراج أقدم<br />
بیانات لم یتم تكرار طلبھا لتعوض ببیانات جدیدة وتعرف الطریقة باسم:<br />
Least Recently Used (LRU)<br />
12
:DATABASE BUFFER CACHE<br />
یتم تخزین فیھا أحدث البیانات التى تم استخراجھا من الملفات الفیزیائیة Files" "Data ، وفي حالة طلب<br />
ذات البیانات من ذات المستخدم أو من مستخدمین أخریین لل Database یتم استخراج البیانات من الذاكرة<br />
ولیس من<br />
.Data Files<br />
ملاحظة: تتم ادارتھا ایضاً بنظام<br />
.Least Recently Used (LRU)<br />
مثال:<br />
Database بطلب<br />
بیانات محددة من ال Database عن طریق مثلاً جملة ال SQL<br />
عندما یقوم مستخدم لل<br />
وبذلك یسھل<br />
فإن البیانات المستخرجة من ال Data Files تخزن في ال<br />
عملیة استخراج البیانات وبسرعة أكبر في حال تم طلب نفس الجملة من ذات المستخدم أو مستخدم أخر وبذلك<br />
یخف العبئ على ما یعرف باسم .Input/Output Load<br />
راجع الرسم 1.7 لمزید من التوضیح.<br />
الخطوات المبینة على الرسم<br />
Database Buffer Cache<br />
.<br />
:1.7<br />
:1<br />
:2<br />
یقوم المستخدم الأول بطلب بیانات من الDatabase<br />
الخطوة بدراسة الطلب ویحضر ال<br />
یقوم ال<br />
الخطوة الFiles Data على اعتبار أن ھذه البیانات المطلوبة لیست مخزنة في ال<br />
یتم احضار البیانات من ال Data Files وتخزن البیانات في<br />
الخطوة یتم اظھار البیانات المطلوبة للمستخدم الأول.<br />
الخطوة یقوم مستخدم أخر بعد قلیل بطلب ذات البیانات من ال .Database<br />
الخطوة یقوم ال Instance بدراسة الطلب فیجد ان البیانات المطلوبة تم استخراجھا قبل قلیل من ال<br />
الخطوة فیستخرج البیانات من ذاكرة ال<br />
Data Files ومازالت مخزنة في ال<br />
Database Buffer Cache دون الحاجة الى استخراج البیانات من القرص الطلب حیث توجد ملفات<br />
،Data Files ومن ثم یتم اظھار البیانات للمستخدم الثاي بسرعة أكبر وجھد أقل.<br />
Server Process البیانات من<br />
.Database Buffer Cache<br />
.Database Buffer Cache<br />
Database Buffer Cache<br />
Server process<br />
:3<br />
:4<br />
:5<br />
:6<br />
وتتكون ال Database Buffer Cache من ثلاثة أجزاء مستقلة تسمى<br />
:Default یخزن في ھذا القسم البیانات التي لیست من ضمن الأقسام الأخرى<br />
:Sub Cache<br />
.(Keep, Recycle)<br />
بمساحتھا العامل "Parameter" .DB_CACHE_SIZE<br />
"Parameter" تحافظ على البیانات المخزنة ولا تستبدل، ویتحكم بمساحتھا العامل :Keep<br />
.DB_KEEP_CACHE_SIZE<br />
:Recycle یتم ازالة البیانات من ھذه المنطقة عند عدم الحاجة الیھا مجدداً، ویتحكم بمساحتھا العامل<br />
.DB_RECYCLE_CACHE_SIZE "Parameter"<br />
ملاحظة: مساحة ال Default لا یمكن أن تكون ان تساوي صفر أبداً.<br />
ویتحكم<br />
13
رسم 1.7<br />
14
مثال تطبیقي<br />
:1.3<br />
لمعرفة أحجام أقسام ال<br />
Database Buffer Cache<br />
SHOW PARAMETER DB_CACHE_SIZE;<br />
لتغییر مساحة ال Database Buffer Cache<br />
اكتب التالي:<br />
داینامیكیاً اكتب التالي:<br />
ALTER SYSTEM SET DB_CACHE_SIZE= 30 M;<br />
:Data Block and Data Buffer<br />
البیانات المخزنة في ملفات الأوراكل تكون مخزنة بشكل كتل ولذلك یطلق علیھا اسم Blocks أما البیانات<br />
.Data Buffer وحجم ال Buffer ھو نفسھ<br />
المخزنة في ال<br />
Database Buffer Cache فتعرف باسم<br />
حجم Block والمحدد بالعامل "Parameter" .DB_BLOCK_SIZE<br />
:Data Buffer Advisory Parameter (DB_CACHE_ADVICE)<br />
یساعد مدیر البیانات (DBA) على ادارة ال Database Buffer Cache وخاصة في أوقات الذروة حیث<br />
یقوم باظھار احصائیات ومعلومات عن مختلف ال<br />
یمكن الحصول على البیانات التي ینتجھا العامل "Parameter"<br />
ولھ ثلاث حالات ھي:<br />
. Database buffer cache<br />
من .V$DB_CACHE_ADVICE<br />
:OFF<br />
:ON<br />
:READY<br />
لا یوجد مساحة في الذاكرة مخصصة لھ وبالتالي لا یقوم بتكوین أي بیانات<br />
یقوم بتكوین البیانات ولھ مساحة مخصصة في الذاكرة.<br />
یوجد مساحة في الذاكرة مخصصة لھ ولكنھ في وضعیة الاستعداد ولا یقوم بتكوین اي بیانات.<br />
ربما تتسائل لماذا اذاً توجد الحالة READY لماذا لم بتم الاكتفاء بأول حالتیین فقط؟<br />
الجواب على ذلك یكمن في ان انتقال العامل "Parameter" من وضعیة ال OFF الى ON قد یؤدي الى<br />
أخطاء في الذاكرة أو فشل عملیة التحویل.<br />
مثال تطبیقي<br />
:1.4<br />
لمعرفة الوضع الحالي اكتب التالي:<br />
SHOW PARAMETER DB_CACHE_ADVICE;<br />
یمكن تغییر وضیعة العامل "Parameter" DB_CACHE_ADVICE داینامیكیاً بكتابة<br />
:<br />
ALTER SYSTEM SET DB_CACHE_ADVICE = READY;<br />
ملاحظة: قد تفشل المحاولة اذا كان الوضع الابتدائي .OFF<br />
15
:REDO LOG BUFFER<br />
من أھم اسس حمایة البیانات اذ تحتوي على بیانات عن جمیع المتغیرات التي طرأت على ال<br />
التغیرات الناتجھ عن أوامر .INSERT,DELETE,ALTER,DROP, CREATE<br />
باسم<br />
المتغیرات التي حدثت في ال Database تسجل في ال<br />
محددة من قبل العامل "Parameter" .LOG_BUFFER<br />
مساحة ال<br />
مثال تطبیقي<br />
Database مثل<br />
.Redo Entries<br />
Redo Log Buffer<br />
Redo Log Buffer<br />
:1.5<br />
لمعرفة الحجم الحالي اكتب التالي:<br />
SHOW PARAMETER LOG_BUFFER;<br />
لا یمكن تغییر وضیعة العامل "Parameter" LOG_BUFFER داینامیكیا.<br />
تذكر: ان Redo Log Buffer منطقة ثابتة غیر متغیرة.<br />
16
:LARGE POOL<br />
ھي منطقة ذاكرة اختیاریة ولیست اساسیة (اجباریة) یمكن لل DBA ان یقوم بتشكیلھا حین الحاجة الیھا حیث<br />
توفر ذاكرة كبیرة لعملیات عدیدة مثل .BACKUP and RESTORE<br />
ملاحظات:<br />
1- علمیة ال BACKUP ھي العملیة التي یقوم فیھا ال DBA بحفظ نسخ "Copies" من البیانات غالباً<br />
على أقراص صلبة Hard disk لكي یتمكن من المحافظة على البیانات واسترجاعھا RESTORE عند<br />
الحاجة.<br />
2- ال Large Pool لا تعمل بنظام ال .LRU<br />
3- مساحة ال<br />
Large Pool<br />
محددة من قبل العامل "Parameter" .LARGE_POOL_SIZE<br />
4- یمكن تغیر المساحة داینامیكاً باستخدام ALTER SYSTEM كما عو الحال مع ال<br />
وغیرھا.<br />
5- تعمل ال Large Pool فقط في بیئة ال<br />
سوف یتم التطرق لاحقاً ل .Shared Server<br />
Shared Pool<br />
.Shared Server<br />
:JAVA POOL<br />
ھي منطقة ذاكرة اختیاریة اخرى توفر ذاكرة لعملیات ال Java المختلفة وتعمل بنفس فكرة ال SQL أو<br />
مساحة ال متحكمة من قبل العامل<br />
PL/SQL في ال<br />
Java Pool ،Shared Pool<br />
.JAVA_POOL_SIZE "Parameter"<br />
17
،<br />
CONNECTION<br />
Database<br />
بال .Instance<br />
لكي تستطیع الدخول الى ال للقیام بعلمیات مختلفة مثل استخراج بیانات عبر جمل ال SQL<br />
یجب أولاً ان یكون المستخدم متصلاً<br />
یقوم المستخدم باستخدام أحد البرامج التي یمكن عبرھا الاتصال بال Instance مثل SQLPLUS فینشئ ما<br />
وبعد ان یتم الدخول الى ال Oracle Server ویتم الاتصال بال<br />
یعرف باسم<br />
یقوم ال Server Process بعملیة الوسیط بین المستخدم<br />
ینشئ ما یعرف باسم<br />
.SQL حیث یقوم بتنفیذ العملیات التي طلبھا المستخدم مثل جمل ال Instance<br />
Instance<br />
User<br />
.User Process<br />
.Server Process<br />
Process وال<br />
1.8 رسم<br />
:Process<br />
تعریف ال Process بشكل عام في الأوراكل ھي العملیة أو الوظیفة التي تنفذ مجموعة من الخطوات أو<br />
مھمات محددة.<br />
یوجد ثلاث أنواع من ال Processes في الأوراكل ھم: Process, User Process , Server<br />
.Background Process<br />
سوف یتم التطرق لاحقاً ل .Background Process<br />
.Oracle Server<br />
Oracle Server سواء بإرادة<br />
:Session<br />
یبدأ ال Session عند دخول<br />
ال Session ھو حالة الاتصال الموجودة بین المستخدم و ال<br />
المستخدم ال Oracle Server وینتھي عند خروج المستخدم من ال<br />
المستخدم (عند انتھاء المھمة) أو لا ارادیاً (عند حدوث عطل ما).<br />
یمكن للمستخدم الواحد این یكوٌن أكثر من Session واحد في نفس الوقت اذا استخدم أكثر من برنامج مثل<br />
SQL PLUS و ORACLE FORMS عدا بعض الحالات القلیلة.<br />
18
:PROCESSING A STATEMENT (DML)<br />
الخطوات التي تمر عبرھا جمل ال SQL<br />
(جمل ال (DML ملخصة في الخطوات التالیة:<br />
یتم الاتصال بال<br />
.Server Process و User Process وتكوین Instance<br />
اذا كانت البیانات المطلوبة غیر متوفرة في ال<br />
Process باحضار البیانات من<br />
Server فیقوم ال Database Buffer Cache<br />
.Data Files<br />
یقوم ال Server Process بوضع قیود "Locks" على البیانات التي یتم تعدیلھا، ویتم تخزین<br />
البیانات السابقة (قبل التعدیل)<br />
حتى یستطیع المستخدم باسترجاع البیانات الأصلیة غیر المعدلة اذا تم اختیار Rollback عوضاً<br />
عن .Commit<br />
اذا تم اختیار Commit فإن البیانات المعدلة یتم نقلھا الى<br />
في منطقة تسمى ROLLBACK (SEGMENT) BLOCK<br />
. Data Files<br />
•<br />
•<br />
•<br />
•<br />
19
PROGRAM GLOBAL AREA (PGA)<br />
ھي منطقة ذاكرة غیر مشتركة و خاصة لعملیة واحدة فقط Process" ". تخصص ذاكرة ال PGA لكل<br />
و تزال ذاكرة ال PGA عند نھایة العملیة<br />
PGA مكونات ال ،"Process" على البیانات الخاصة لتلك العملیة PGA وتحتوي ذاكرة ال . "Process"<br />
تعتمد على تعریف ال Server حیث یوجد تعریفان ھما Dedicated وShared.<br />
واحد<br />
یتكون<br />
في نظام ال<br />
(مستخدم واحد)، أما في ال Shared Server فیتم المشاركة في ال Server Process من قبل أكثر من<br />
User Process (یمكن ان یكون ھناك أكثر من Server Processes و لیس بالضرورة واحد فقط أي مثلاً<br />
یمكن ان یوجد خمسة Server Processes یتشارك بھم خمسین مستخدم<br />
User Process واحد خاص لطلبات Server Process<br />
(User Processes<br />
عملیة Process" " عند بدایة العملیة Process" "<br />
Dedicated Server<br />
بعض مكونات ال :PGA<br />
:SORT AREA<br />
Distinct , Order By, Group By,<br />
.Intersect<br />
حیث تخصص لأي طلب من قبل ال Process یحتوي على الأوامر التالیة:<br />
أو ال<br />
Union, Minus, مثل Set Operators<br />
•<br />
User<br />
:SESSION INFORMATION<br />
.Privileges<br />
حیث تخصص لمعلومات المستخدم مثل ال<br />
•<br />
20
BACKGROUND PROCESSES<br />
.Instance<br />
Background<br />
تكون ال Background Processes متوفرة وجاھزة للعمل بعد تشغیل ال<br />
كل Background Process مسؤول عن مھمات خاصة، ویوجد نوعیین من<br />
أختیاري و أو إجباري).<br />
.Background Processes<br />
Processes ھما إلزامي )<br />
تذكر: الرسم رقم 1.1 ومكان وجود ال<br />
أمثلة:<br />
Database Writer (DBWn)<br />
Log Writer (LGWR)<br />
System Monitor (SMON)<br />
Process Monitor (PMON)<br />
Checkpoint (CKPT)<br />
Archiver (ARCn)<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
21
Data الى ال Database Buffer Cache<br />
:DATABASE WRITER (DBWn)<br />
یقوم بكتابة البیانات المتغیرة Buffers" "Dirty من ال<br />
Files كما ھو موضح بالرسم 1.9، وبذلك یتم تفرغة Buffers باستمرار من أجل البیانات المتغیرة اللاحقة.<br />
تذكر: أن البیانات المخزنة في ال Instance تسمى Buffers والبیانات المخزنة في ال<br />
Data Files تسمى<br />
.Blocks<br />
وتعمل ال DBWn عند حدوث أحد الأحداث التالیة:<br />
.Checkpoint<br />
Dirty Buffers (أو ال<br />
عند حودث<br />
Buffers الممتلئة بالبیانات المتغیرة) یصل الى الحد الأعلى<br />
عدد ال<br />
المسموح فیھ.<br />
عند عدم وجود من Buffers" "Free فارغة بعد البحث عنھا من قبل ال<br />
عند وضع Tablespace سواء من النوع العادي أو المؤقت في حالة الإغلاق ."Offline"<br />
عند وضع Tablespace في حالة القراءة فقط (اي لا یمكن تغییر البیانات بل فقط الاطلاع<br />
. Process<br />
علیھا)"Only ."Read<br />
عند وضع Tablespace في حالة ال .Backup<br />
عند استخدام أوامر Drop و<br />
عند حدوث<br />
.Table الخاصة بال Truncate<br />
.Timeout<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
سوف یتم التطرق لاحقاً ل Checkpoint و ال .Tablespace<br />
الرسم 1.9<br />
22
:LOG WRITER (LGWR)<br />
یقوم بنقل البیانات المخزنة في ال<br />
یساعد على اخلاء ذاكرة لل<br />
Log Buffer Cache الى ال Redo Log Files بشكل دوري مما<br />
.1.10<br />
Redo Entries الجدیدة ،<br />
كما ھو موضح بالرسم<br />
تذكر: أن البیانات المخزنة في ال<br />
وتعمل ال LGWR عند حدوث أحد الأحداث التالیة:<br />
.Redo Entries تسمى Redo Log Buffer<br />
عند امتلاء ثلث ال .Redo Log Buffer<br />
عند وجود بیانات في ال Redo Log Buffer حجمھا<br />
قبل ان تقوم ال DBWn بنقل البیانات من ال<br />
كل<br />
عند<br />
اكبر من 1. MB<br />
. Data Files الى ال Database Buffer Cache<br />
3 ثوان.<br />
.Transaction Commit<br />
•<br />
•<br />
•<br />
•<br />
•<br />
الرسم 1.10<br />
23
:SYSTEM MONITOR (SMON)<br />
في حالة حدوث اي عطل مفاجئ لل Instance جمیع البیانات الموجودة في ال Instance (مثل بیانات ال<br />
(Database Buffer Cache التي لم یتم نقلھا الى ال Data Files على القرص الصلب تضیع أو تمسح.<br />
بعد ھذه الحالة من ضیاع بیانات ال Instance یعمل ال SMON بشكل اتوماتیكي لاسترجاع بیانات ال<br />
.Instance Recovery و تسمى العملیة ب Instance<br />
ویقوم ال SMON بتأدیة عدد من الوظائف ھي:<br />
استرجاع البیانات المتغیرة التي تم تسجیل ما طرأ علیھا من تغیر في ال<br />
یتم تسجیلھا في ال .Data Files حیث یقوم ال SMON بقراءة ال<br />
التغیرات التي طرأت على البیانات و تغییر البیانات في ال<br />
اعادة تجھیز ال Database لیتمكن المستخدم من الدخول مجدداً<br />
الغاء جمیع ال Transactions التي لم یحدث لھا Commit وازالة القیود عن البیانات " Data<br />
Redo Log Files ولكن لم<br />
Redo Log Files و معرفة<br />
.Data Files<br />
.<br />
.Data Files<br />
. "Lock<br />
تحریر ال Temporary Segments واستعادة مساحتھا الى ال<br />
جمع المساحات الخالیة الصغیرة الضائعة التي تنشئ بین البیانات نتیجة للتغیرات التي تحدث و<br />
تعیدھا الى المساحة الخالیة الرئیسیة.<br />
•<br />
•<br />
•<br />
•<br />
•<br />
تذكر: أن ال LGWR یعمل قبل ال .DBWn<br />
سوف یتم التطرق لاحقاًفي الفصول التالیة لل .Temporary Segment<br />
:PROCESS MONITOR (PMON)<br />
في حالة حدوث أي عطل لل Processes قد یؤدي الى مشاكل داخلیة في ال Database فیقوم ال PMON<br />
بتنظیف أخطاء ال<br />
.Processes<br />
ویقوم ال PMON بتأدیة عدد من الوظائف ھي:<br />
Tables<br />
تحریر كل المصادر وال Locks على ال أو ال Rows التي وضعھا ال<br />
ال Transaction الخاص بالمستخدم (اي الغاء اي تعدیلات لم یتم حدوث<br />
اعادة<br />
Process الفاشل.<br />
(Rollback)<br />
Commit لھا)<br />
•<br />
•<br />
24
Database Buffer Cache الى ال<br />
:CHECKPOINT (CKPT)<br />
ال Checkpoint ھي عملیة كتابة جمیع البیانات المتغیرة في<br />
من فوائد ال Checkpoint ان البیانات التي تتغیر باستمرار تنقل بشكل نظامي و<br />
دوري الى ال Data Files وبذلك یتم حفظ البیانات بشكل أمن.<br />
ال<br />
ال<br />
Data<br />
.Control Files و ال Data Files Header<br />
.DBWn عبر ال Files<br />
"Update" یقوم بتجدید Checkpoint Process<br />
من البیانات التي تجدد "Update" :<br />
رقم ال<br />
رقم ال Checkpoint في ال<br />
رقم ال<br />
ال SCN في ال<br />
اسماء ال<br />
.Data Files Header في ال Checkpoint<br />
.Control Files<br />
.Control Files في ال Log Sequence<br />
.Control Files<br />
.Archived Log<br />
•<br />
•<br />
•<br />
•<br />
•<br />
سوف یتم التطرق لاحقاًفي الفصول التالیة لل Data Files Header و ال Log Sequence وال SCN<br />
واسماء ال .Archived Log<br />
Archived الى Redo Log Files<br />
:ARCHIVER (ARCn)<br />
ھو اختیاري و لیس اجباري ووظیفتھ تكمن في نقل بیانات ال<br />
باعتباره اختیاري فلھ حالتیین إما یعمل أو مغلق. و لوضعھ في وضیعة العمل یجب أن یكون ال<br />
Database في وضعیة ال ،ARCHIVELOG وفي حال تم وضع ال Database تحت ھذه الوضعیة فإن<br />
ARCn یعمل.<br />
اذاً ھناك حالتیین لوضعیة ال Database تحددان عمل أو ایقاف ال ARCn ھما:<br />
Process<br />
.Log Files<br />
:Archive<strong>log</strong><br />
عند امتلاء الملف الأول من ملفات ال Redo Log Files یتم البدأ في كتابة البیانات في الملف الثاني وتسمى<br />
، ثم یقوم ال ARCn بشكل أوتوماتیكي بنقل بیانات الملف الأول الى ال<br />
ھذه العملیة Log Switch<br />
.Archived Log Files<br />
رسم 1.11<br />
: NoArchive<strong>log</strong><br />
عند امتلاء جمیع ملفات ال<br />
على البیانات السابقة ، ولكن لا یتم كتابة البیانات فوق البیانات السابقة قبل ان یحدث<br />
أو مجموعة الملفات الممتلئة.<br />
Redo Log Files یتم اعادة كتابة البیانات "Overwrite" في الملف الأول<br />
Checkpoint للملف<br />
سوف یتم التطرق لاحقاً لكیفیة وضع ال Database تحت حالة ال Archive<strong>log</strong> أو حال .Noarchive<strong>log</strong><br />
25
INSTALLING & MANAGING<br />
ORACLE<br />
26
DATABASE ADMINISTRATION TOOLS<br />
یتوفر عدد من الأدوات "Tools" في الاوراكل أھمھا :<br />
ORACLE UNIVERSAL INSTALLER (OUI)<br />
ORACLE DATABASE CONFIGURATION ASSISTANT<br />
SQL PLUS<br />
ORACLE ENTERPRISE MANAGER (OEM)<br />
PASSWORD FILE UTILITY<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:ORACLE UNIVERSAL INSTALLER (OUI)<br />
الاوراكل. في نظام الویندوز "Windows" تستطیع بدأ ال<br />
یمكن استخدام ال<br />
.runInstaller فیجب كتابة Unix أما في نظام ال ، Setup.exe بالضغط على ملف التنصیب ال OUI<br />
"Install" لتنصیب OUI<br />
الرسم 2.1 یوضح ال OUI في نظام الویندوز ."Windows"<br />
الرسم 2.1<br />
27
من أھم ممیزات ال<br />
:OUI<br />
یمكن تنصیب الأوراكل اكثر من مرة على ذات موقع التخزین مثل الDisk Hard باستخدام اسم<br />
مخلتف لل ORACLE HOME الموضح في رسم (أسفل كلمة (Destination و یمكن<br />
تنصیب نسخة قدیمة Version" "Old للاوراكل مع نسخة جدیدة Version" "New في ذات<br />
الموقع.<br />
2.1<br />
یمكن تنصیب الأوراكل من الإنترنت عبر وصلة ال HTTP حیث تواجد نسخة الأوراكل، وبذلك یمكن<br />
تنصیب الأوراكل من قبل فرع شركة في دولة غیر الدولة التي یوجد بھا مقرھا الأصلي (حیث تتواجد<br />
نسخة الأوراكل).<br />
یمكن أن یستعمل لإزالة الأوراكل من الجھاز أو السیرفر<br />
(Uninstall or Deinstall)<br />
یعمل بعدد مختلف من اللغات مثل الانجلیزي و الفرنسي و الألماني و غیرھا.<br />
یمكن ان یعمل تحت الأنظمة التي لا توفر نظام ال GUI والتي تكون فیھا الأوامر بشكل كتابي<br />
Command ولیس كما في ال Windows الذي یعمل تحت نظام ال GUI مثل الرسم<br />
وتسمى الطریقة باسم الطریقة الصامتة Mode" "Silent ویتم استعمال ملف یسمى<br />
.2.1<br />
Response<br />
.File<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:Response File<br />
ھو ملف name.txt) (any<br />
مثل بیانات ال ) Source و ال .(Destination<br />
یحفظ البیانات اللازمة لعملیة التنصیب مثل البیانات المطلوبة في الرسم<br />
2.1<br />
:ORACLE DATABASE CONFIGURATION ASSISTANT<br />
یستخدم للأغراض التالیة (انظر الرسم 2.2):<br />
تكوین البیانات ."Database"<br />
حذف البیانات ."Database"<br />
تعدیل خواص البیانات ."Database"<br />
ادارة ال<br />
.Templates<br />
•<br />
•<br />
•<br />
•<br />
سوف یتم التطرق لاحقاًفي فصل أخر لجمیع الأغراض.<br />
28
2.2 رسم<br />
:SQL PLUS<br />
ھي اداة تمكن المستخدم من التفاعل مع البیانات، حیث تمكن المستخدم من الدخول الى البیانات، استخراج<br />
بیانات، اضافة بیانات، تعدیل بیانات، واغلاق البیانات ."Database" من المفروض أن تكون قد عملت مع<br />
ال SQL PLUS خلال دراستك لل SQL وتعرفت علیھ جیداً.<br />
2.3 رسم<br />
29
:ORACLE ENTERPRISE MANAGER (OEM)<br />
ھو نظام أداري یعمل على التحكم بمكونات الأوراكل وادارة البیانات من خلال نظام ال GUI(اي یتم القیام<br />
بمعظم الأوامر من خلال استعمال الفأرة .("Mouse"<br />
من أھم مكونات ال :OEM<br />
CONSOLE<br />
ORACLE MANAGEMENT SERVER<br />
MANAGED NODES<br />
•<br />
•<br />
•<br />
2.4 رسم<br />
:Console<br />
أداة Tool" "GUI<br />
من الأدوات الھامة حیث تعمل كمحطة لإدارة جمیع المھمات في أوراكل. من ھنا یمكن<br />
التحكم بالInstance ویمكن التحكم بال Tables و غیرھا و تنفیذ المھمات عن طریق الفأرة "Mouse"<br />
والإختیارات المتعددة عوضاً عن تنفیذ المھمات بواسطة جمل ال .SQL<br />
30
2.5 رسم<br />
من الملاحظ من الرسم 2.4 أن ال Console یستطیع الدخول الى<br />
:Standalone بطریقة مباشرة دون الحاجة الى<br />
عبر ال :OMS عبر ال<br />
Oracle Server بطریقتیین ھما:<br />
.Oracle Management Server (سھم رقم (2<br />
.Oracle Management Server (أسھم رقم (1<br />
:DBA Tools<br />
ھي مجموعة من البرامج التي یمكن تشغیلھا من ال :Console<br />
."Database" یستخدم لتشغیل واغلاق ومراقبة البیانات :Instance Manager<br />
.Privileges و Users Accounts یستخدم لإدارة :Security Manager<br />
Tablespaces وال Data Files وغیرھا.<br />
.Indexes وال Views و Tables<br />
:Storage Manager یستخدم للتحكم في ال<br />
:Schema Manager یستخدم لتكوین وادارة ال<br />
:SQL PLUS Worksheet اداة لكتابة جمل ال SQL وتنفیذھا.<br />
:Oracle Management Server (OMS)<br />
أھم مكونات ال Oracle Enterprise Manager یقوم بدور الوسیط بین ال Console و ال<br />
Nodes في تبادل البیانات بالاضافة الى ادارة User Accounts وعملیات مختلفة مثل<br />
یقوم باستعمال ال Repository لتخزین بیانات النظام Data" "System وبیانات البرامج والأدوات و<br />
بیانات ال<br />
Managed<br />
.Jobs, Events<br />
.Managed Nodes<br />
31
:Managed Nodes<br />
قد تتكون ال Node من ال Database وخدمات أخرى. یوجد على كل Node ما یعرف<br />
باسم Oracle Intelligent Agent یقوم بالتواصل مع OMS ویؤدي المھام المرسلة من قبل ال<br />
وھو یعمل بشكل منفرد ویمكن ان یؤدي مھام مثل اغلاق و تشغیل ال Database ویلزم<br />
واحد فقط على كل<br />
.Node<br />
،Console<br />
Oracle Intelligent Agent<br />
:PASSWORD FILE UTILITY<br />
تعرف باسم Orapwd وتستخدم في تكوین ال<br />
لتكوین ال Password File یجب اتباع القاعدة التالیة:<br />
.Password File<br />
$ORAPWD FILE = filename PASSWORD = yourpassword ENTRIES=number;<br />
حیث ان ال File ھو اسم الملف وموقعھ على الجھاز، وال Password ھي كلمة السر الخاصة ب<br />
و ،SYSOPER وال Entries تمثل العدد الأقصى من المستخدمیین الذین یحق لھم الدخول<br />
الى ال<br />
SYSDBA<br />
.SYSOPER او SYSDBA في ھیئة Database<br />
عندما تقوم بالدخول كمستخدم ال SYSDBA فانك تدخل الى SYS Schema ولیس ال Schema الخاص<br />
بك وكذلك عند الدخول كمستخدم ال SYSOPER فانك تدخل الى .PUBLIC Schema<br />
تذكر: ملف ال Password File من الفصل الأول.<br />
32
AUTHENTICATION METHODS<br />
للقیام بالمھمات الإداریة للبیانات "Database" یقوم الأوراكل بتكوین اثنین<br />
تكوین البیانات "Database" ھما SYS و ال SYSTEM الذین یملكان جمیع ال<br />
الأوراكل أو ما یسمى ال .DBA Role<br />
User Accounts عند بدایة<br />
Privileges في<br />
ملاحظة: كلمة السر لل SYS عند بدایة تكوین البیانات ھي change_on_install اما كلمة السر لل<br />
.manager ھي SYSTEM<br />
ملاحظة2: یعتبر ال SYS ھو المالك "Owner"<br />
ل<br />
.Database Data Dictionary<br />
ھناك طریقتتین یمكن السماح فیھا للمستخدمین الذین یملكون ال DBA Role الدخول الى ال<br />
Database<br />
وادارة البیانات ھما: Password File Authentication وAuthentication .Operating System<br />
:PASSWORD FILE AUTHENTICATION<br />
لقد تطرقنا قبل قلیل لل Password File Utility والتي تستخدم في ھذا النظام، ولتشغیل ھذا النظام یجب<br />
اتباع الخطوات التالیة:<br />
تكوین ملف ال<br />
.ORAPWD عن طریق ال Password File<br />
وضع ال REMOTE_LOGIN_PASSWORDFILE الذي ھو أحد مكونات ال<br />
.EXCLUSIVE الى الحالة Initialization Parameter File<br />
اعطاء "Grant"<br />
ال Privileges الخاص ب SYSDBA أو SYSOPER الى المستخدمین<br />
الجدد الذین تم اختارھم للحصول ال<br />
.DBA Role<br />
-1<br />
-2<br />
-3<br />
مثال تطبیقي<br />
الخطوة<br />
:2.1<br />
1: اكتب التالي في ال SQL PLUS<br />
$ORAPWD FILE=c:\oracle_home\ora92\dbs\myfile PASSWORD=newadmin<br />
ENTRIES=5;<br />
SHOW PARAMETER REMOTE_LOGIN_PASSWORDFILE;<br />
2: الخطوة<br />
اذا كانت الحالة غیر EXCLUSIVE فیجب تغییر الحالة في ال<br />
الخطوة<br />
.Initialization Parameter File<br />
:3<br />
GRANT SYSDBA TO Ahmad;<br />
للدخول الى ال Database اكتب التالي:<br />
CONNECT sys/newadmin AS SYSDBA;<br />
33
:OPERATING SYSTEM AUTHENTICATION<br />
بمجرد الدخول الى ال Operating System (مثال: الویندوز) تستطیع الدخول الى ال Database دون<br />
الحاجة الى كلمة سر أو اسم مستخدم.<br />
ملاحظة: یجب أن یكون ال REMOTE_LOGIN_PASSWORDFILE في حالة NONE لیعمل<br />
النظام.<br />
مثال تطبیقي<br />
:2.2<br />
بعد الدخول الى ال SQLPLUS اكتب التالي:<br />
CONNECT / AS SYSDBA;<br />
حالات ال<br />
:Remote_Login_Passwordfile<br />
یوجد ثلاثة حالات یمكن وضع ال Remote_Login_Passwordfile فیھا ھي:<br />
:EXCLUSIVE<br />
اعطاء "Grant"<br />
تحدد ان Instance واحد فقط یمكن ان یستخدم ال<br />
ال<br />
أخرین، وھي ضروریة لنظام ال .Password File Authentication<br />
Password File ویمكن<br />
SYSOPER Privileges أو ال SYSDBA Privileges<br />
لمستخدمین<br />
:SHARED تحدد ان باستطاعة أكثر من Instance استخدام ال Password File ولكن لا یمكن<br />
اضافة مستخدمین أخریین لل SYSDBA أو SYSOPER والمستخدم الوحید المعرف في الملف<br />
ھو .SYS<br />
.Operating System Authentication ضروري لنظام :NONE<br />
•<br />
•<br />
•<br />
34
OPTIMAL FLEXIBLE ARCHITECTURE<br />
یعتبر ال OFA نظام لترتیب و توزیع ملفات ال Database المختلفة على حسب نوعھا أو استخدامھا، وھو<br />
معتمد في جمیع الأنظمة التي یعمل بھا الأوراكل مثل .Windows, UNIX<br />
باستخدام نظام ال OFA یمكن ان نحقق عدة فوائد منھا سھولة التمییز بین الملفات المختلفة وسھولة ایجادھا<br />
وسھولة ادارة الأوراكل بتوزیع الملفات كلٌ حسب نوعھ، وتسھیل التحكم في التوسع الذي یطرأ على ال<br />
Database في المستقبل.<br />
و باستخدام نظام الOFA نستطیع:<br />
اعتماد اسلوب ثابت لتسمیة الملفات لكي نستطیع ایجاد الملفات بسھولة.<br />
تفریق ملفات ال<br />
.Oracle Database عن Oracle Software<br />
تفریق ملفات النسخ المختلفة "Versions" من الأوراكل.<br />
تفریق ملفات ال Data <strong>files</strong> عن ملفات ال Control Files عن ملفات ال<br />
.Redo Log Files<br />
•<br />
•<br />
•<br />
•<br />
2.6 رسم<br />
كما تلاحظ توزیع ملفات ال Database المختلفة الى مجلدات مختلفة. فمثلاً تجد ملف ال<br />
تحت مجلد ال بالمقابل تجد ملفات ال<br />
Password File<br />
Control Files تحت مجلد oradata وھكذا...<br />
dbs<br />
35
INITIALIZATION PARAMETER FILE<br />
لتشغیل ال Instance یجب توفر ال<br />
لنفس ال ھنالك نوعان من ال<br />
.Initialization Parameter File یمكن استعمال<br />
Initialization Parameter File ھما:<br />
.Database<br />
أكثر من ملف<br />
:PFILE یطلق علیھ اسم الملف الثابت File" "Static ویعرف باسم<br />
initSID.ora<br />
:SPFILE<br />
یطلق علیھ اسم الملف المقاوم File" "Persistent ویعرف باسم<br />
spfileSID.ora<br />
•<br />
•<br />
ملاحظة: ال SID عبارة عن رمز لإسم ال .Instance فاذا كان اسم ال "DbB" Instance فیكون اسم<br />
الملف<br />
.(initDbB.ora)<br />
بعض محتویات ال<br />
:Initialization Parameter File<br />
SGA وال Instance<br />
العوامل "Parameters"<br />
الخاصة بال<br />
اسم ال Database التي یعمل علیھ ال .Instance<br />
اسماء و مواقع ال<br />
بیانات عن ال<br />
تحدید إما Archive<strong>log</strong>أو<br />
مثل ال .SGA_MAX_SIZE<br />
.Control Files<br />
.Undo Segment<br />
.Noarchive<strong>log</strong><br />
•<br />
•<br />
•<br />
•<br />
•<br />
2.7 رسم<br />
)<br />
:PFILE<br />
ھو ملف من نوعیة ال TXT الذي یمكن فتحھ وتغییره بواسطة ال Notepad وغیرھا من برامج الكتابة.<br />
یتم قراءة محتویاتھ عند بدایة تشغیل ال Instance ومعظم العوامل "Parameters" الموجودة داخلھ لا<br />
تعمل بشكل داینامیكي یستلزم اغلاق وفتح ال Instance من جدید لكي یحدث التغییر) عدا بعض العوامل<br />
التي یمكن تعدل داینامیكیاً في الذاكرة ولكن تظل في ال PFILE كما ھي (أي انھ عند<br />
تشغیل ال Instance مرة أخرى یرجع الوضع الى قبل التعدیل الداینامیكي).<br />
یوفر ال OUI ملف مبدئي عند بدایة تكوین ال Database اسمھ init.ora یمكن استعمالھ لتكوین ال<br />
"Parameters"<br />
.PFILE<br />
36
بعض مكونات ال :PFILE<br />
db_block_size=4096<br />
db_cache_size=33554432<br />
open_cursors=300<br />
background_dump_dest=C:\oracle2\ora92\admin\dbname\bdump<br />
core_dump_dest=C:\oracle2\ora92\admin\dbname\cdump<br />
timed_statistics=TRUE<br />
user_dump_dest=C:\oracle2\ora92\admin\dbname\udump<br />
db_domain=oracle<br />
remote_<strong>log</strong>in_passwordfile=EXCLUSIVE<br />
control_<strong>files</strong>=("C:\oracle2\ora92\oradata\dbname\CONTROL01.CTL",<br />
"C:\oracle2\ora92\oradata\dbname\CONTROL02.CTL",<br />
"C:\oracle2\ora92\oradata\dbname\CONTROL03.CTL")<br />
compatible=9.0.0<br />
db_name=dbname<br />
instance_name=dbname<br />
java_pool_size=33554432<br />
large_pool_size=1048576<br />
shared_pool_size=33554432<br />
processes=150<br />
fast_start_mttr_target=300<br />
sort_area_size=524288<br />
undo_management=AUTO<br />
undo_tablespace=UNDOTBS<br />
قواعد ال :PFILE<br />
كل العوامل "Parameters" اختیاریة، أي اذا لم یحدد ال DBA قیمة العوامل "Parameters"<br />
أو لم یتم كتابة العامل "Parameter" في ملف ال PFILE یقوم الأوراكل بتحدید العامل<br />
"Default Value" و تكون قیمتھ ھي القیمة المحددة سلفاً من قبل الأوراكل "Parameter"<br />
ترتیب العوامل "Parameters" في ال PFILE غیر مھم.<br />
اذا كان ھناك أكثر من قیمة للعامل "Parameter" الواحد فیجب وضع القیم داخل قوسین و<br />
تفریقھم بفاصلة كما في<br />
.Control_Files<br />
تحدد قیمة العامل "Paramter" بھذه الصیغة<br />
یمكن استعمال<br />
الأوراكل).<br />
(العامل =<br />
(#)<br />
القیمة).<br />
في الملف لوضع ملاحظات داخل الملف (ھذه البیانات لل DBA ولا یقرأھا<br />
•<br />
•<br />
•<br />
•<br />
•<br />
37
)Oracle Server<br />
:SPFILE<br />
فتحھ و تعدیلھ) ویمكن تعدیل جمیع<br />
ھو ملف من نوعیة ال binary الذي یقوم بادارتھ ال<br />
قیم العوامل "Parameters" الموجودة داخلھ بشكل داینامیكي (اي باستخدام ال (ALTER SYSTEM<br />
بحیث یتم تعدیل بیانات ال SPFILE في الذاكرة أو الملف أو الأثنین معاً (أي انھ عند تشغیل ال<br />
مرة أخرى تكون التغیرات التي اجریت على ال SPFILE بواسطة ال ALTER SYSTEM موجودة<br />
وثابتة).<br />
لا یقوم الأوراكل بتكوین ملف SPFILE ابتدائي كما یحدث مع ال PFILE ولكن یتم تكوین ال SPFILE<br />
من ال PFILE كا سیأتي شرحھ بعد قلیل.<br />
لتعدیل العوامل "Parameters" داخل SPFILE یجب اتباع القاعدة التالیة:<br />
Instance<br />
ALTER SYSTEM SET PARAMETER = VALUE [SCOPE = SCOPE_VALUE];<br />
ملاحظة: استخدام ال ] [ في القواعد یدل على أن ھذا الجزء اختیاري و في حالة لم یتم كتابتھ یختار الأوراكل<br />
ال وال Default یكون أحد الحلات الأكثر شیوعاً وھي تم اختیارھا مسبقاً من قبل مبرمجي<br />
الأوراكل.<br />
. Default<br />
أما حالات<br />
ال SCOPE_VALUE<br />
ثلاث ھي:<br />
:MEMORY یتم تغییر قیمة "Value" ال Parameter فقط في الذاكرة، أي عند تشغیل ال<br />
Instance مرة أخرى تلغى التغیرات.<br />
:SPFILE یتم تغییر قیمة "Value" ال Parameter في ملف ال SPFILE فقط.<br />
"Value" یتم تغییر قیمة :BOTH<br />
معاً.<br />
للعامل "Parameter"<br />
في ملف ال SPFILE والذاكرة<br />
•<br />
•<br />
•<br />
ملاحظة: اذا لم یتم كتابة الجزء SCOPE=SCOPE_VALUE فیعتبر الأوراكل انھا<br />
BOTH) ھي ال<br />
.(Default<br />
SCOPE=BOTH<br />
مثال تطبیقي<br />
:2.3<br />
ALTER SYSTEM SET SHARED_POOL_SIZE = 33554432<br />
SCOPE=SPFILE;<br />
بعض مكونات ال :SPFILE<br />
*. background_dump_dest='C:\oracle2\ora92\admin\dbname\bdump'<br />
*. compatible='9.0.0' *.db_block_size=4096 *.db_cache_size=33554432<br />
*. db_domain='oracle'<br />
………………<br />
38
لیست كل العوامل "Parameters" في ال SPFILE اختیاریة، یوجد سبع عوامل "Parameters" یجب<br />
ان تحدد ھي:<br />
.BACKGROUND_DUMP_DEST<br />
USER_DUMP_DEST<br />
DB_NAME<br />
SHARED_POOL_SIZE<br />
COMPATIBLE<br />
DB_BLOCK_BUFFERS<br />
CONTROL_FILES<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
سوف یتم التطرق لاحقاً للعوامل "Parameters" الجدیدة لاحقاً.<br />
:Create SPFILE<br />
SYSDBA ROLE أو<br />
یمكن تكوین ال SPFILE من ال PFILE<br />
باتباع القاعدة التالیة:<br />
اذا كان المستخدم یملك<br />
SYSOPER Role<br />
CREATE SPFILE [='location and name'] FROM PFILE[='location and name'];<br />
یمكن اھمال ذكر اسم و موقع ملف ال SPFILE في القاعدة اذ یمكن للأوراكل تكوین الأسم على النمط<br />
وفي الموقع ال Default وھو ضمن المجلد كذلك الحال بالنسبة لل<br />
المذكور سابقاً<br />
PFILE حیث یختار الأوراكل الملف المعرف بالأسم initSID.ora وضمن المجلد<br />
.dbs<br />
.dbs<br />
(spfileSID.ora)<br />
ملاحظة: قد یختلف الموقع ال Default من نسخة أوراكل الى أخرى. بعض نسخ الأوراكل تكَون الملف ضمن<br />
المجلد<br />
.database<br />
مثال تطبیقي<br />
:2.4<br />
من ال SQL PLUS<br />
CONNECT / AS SYSDBA;<br />
CREATE SPFILE FROM PFILE;<br />
39
یمكن تعدیل ال SPFILE من ال CONSOLE باتخاذ الخطوات التالیة:<br />
ادخل الى .Enterprise Manager Console<br />
اختر الوضع .Standalone<br />
اضغط على قائمة ال Database ثم قائمة "اسم ال "Database<br />
یطلب منك الاسم و كلة السر.<br />
اكتب اسم ال SYSTEM وكلمة السر الخاص بھ.<br />
تأكد من وضع<br />
اضغط على قائمة ال<br />
اضغط على<br />
اضغط على<br />
.SYSDBA الى الحالة Connect as<br />
.Instance<br />
.Configuration<br />
.All Initialization Parameter<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
2.8 رسم<br />
40
START UP A DATABASE<br />
یوجد ثلاث حالات یمكن أن نبدأ تشغیل ال Database ولكل منھا خاصیتھ والوظائف التي یمكن اجرائھا في<br />
تلك الحالة، الحالات الثالثة بالترتیب<br />
.NOMOUNT , MOUNT , OPEN :<br />
:NOMOUNT<br />
تسمى عملیة<br />
ال<br />
Staring the Instance<br />
.Oracle Database<br />
یمكن القیام بوظیفتین في ھذه الحالة ھما:<br />
لأنھ في ھذه المرحلة فقط یبدأ تشغیل ال Instance دون باقي أجزاء<br />
تكوین ال Database عبر جملة ال .(CREATE DATABASE) SQL<br />
تكوین أواعادة تكوین ملفات ال<br />
.Control Files<br />
•<br />
•<br />
سوف یتم التطرق لاحقاً لكیفیة تكوین ال Database باسخدام جمل ال .SQL<br />
یتم في ھذه المرحلة عدة أمور ھي:<br />
تتم قراءة ملف ال Initialization Parameter File بحیث یبحث الأوراكل على ملف<br />
إن لم یجد یبحث عن PFILE وإن لم یجد تتم قراءة الملف .init.ora<br />
حجز مساحة من الذاكرة لل .SGA<br />
بدأ ال<br />
وملفات تسمى ال<br />
فتح ملف یسمى<br />
.Trace Files<br />
.Background Processes<br />
alertSID.<strong>log</strong><br />
SPFILE<br />
•<br />
•<br />
•<br />
•<br />
سوف یتم التطرق لاحقاً لل alertSID.<strong>log</strong><br />
و .Trace Files<br />
ملاحظة: یجب تحدید قیمة العامل "Parameter" DB_NAME لكي یعمل ال .NOMOUNT<br />
:MOUNT<br />
في ھذه المرحلة یمكن القیام بوظائف مھمة مثل:<br />
.Data Files<br />
تغییر "Rename"<br />
اسماء ال<br />
امكانیة وضع ال Database تحت وضعیة ال ARCHIVELOG أو .NOARCHIVELOG<br />
عمل صیانة "Recovery" لل<br />
.Database<br />
•<br />
•<br />
•<br />
یتم في ھذه المرحلة عدة أمور ھي:<br />
فتح وقراءة ملفات ال<br />
ربط ال<br />
.Control Files<br />
Instance بال Database<br />
الذي سوف یعمل علیھا.<br />
•<br />
•<br />
41
:OPEN<br />
ھي الحالة العادیة التي تم العمل فیھا بواسطة ال SQLPLUS ویتم اجراء تعدیل وحذف واضافة بیانات<br />
وغیرھا من المھام.<br />
یتم في ھذه المرحلة عدة أمور ھي:<br />
فتح ال<br />
فتح ال<br />
. Online Data Files<br />
.Online Redo Log Files<br />
•<br />
•<br />
Data Files وال<br />
Redo Files او في حالة حذفھا أو نقلھا من مواقعھا المحددة<br />
في حالة فشل فتح ملفات ال<br />
في ال Control Files فلا یمكن ان تعمل الحالة .OPEN<br />
ملاحظة: اسماء ومواقع ال Control Files مخزنة في ال<br />
Redo Log Files فھي مخزنة في ال<br />
اسماء و مواقع ال<br />
Initialization Parameter Files اما<br />
.Control Files<br />
Data Files وال<br />
:STARTUP Command<br />
لتشغیل ال Database في احدى الحلات المذكورة سابقاً تستعمل القاعدة التالیة:<br />
STARTUP [FORCE] [RESTRICT] [PFILE='location and name']<br />
[OPEN [recover] [database’s name] | MOUNT | NOMOUNT ] ;<br />
."OR" (<br />
ملاحظة: استخدام ال |<br />
ان یكتبا معاً.<br />
في القواعد یدل على انھا<br />
) وأ فمثلاً لا یمكن لل MOUNT و ال OPEN<br />
: أوامر القاعدة<br />
:PFILE سبق ذكر ان الأوراكل یبحث عن الملف عند بدایة مرحلة ال NOMOUNT ولكن یمكن للمستخدم<br />
تحدید ملف محدد عوضاً على ان یقوم الأوراكل بالبحث عنھ.<br />
:RECOVER خاصة فقط بمرحلة ال OPEN اذ لا یمكن كتابتھا مع ال ،MOUNT وعند استخدامھا<br />
یقوم الأوراكل بعمل عملیة ال RECOVERY للبیانات.<br />
:RESTRICT تحدد المستخدمین الذین یحق لھم الدخول الى ال Database وھم من یملك ال<br />
Restricted Session Privilege التي سوف یتم التطرق لھا لاحقاً.<br />
:FORCE اذا كان ال Instance یعمل في احد الحالات فیمكن اغلاقھ ثم تشغیلھ مباشرة في الحالة العادیة.<br />
اذاً ھي مثل عملیة ال "Restart" في الویندوز.<br />
42
مثال تطبیقي<br />
:2.5<br />
لاستخدام قاعدة ال STARTUP یمكن القیام بالتالي:<br />
ادخل الى ال SQLPLUS أو عبر ال<br />
ادخل اسم المستخدم و كلمة السر.<br />
یجب الدخول الى SYSDBA عن طریق<br />
اغلق ال Database بواسطة الجملة التالیة:<br />
.Command Prompt<br />
CONNECT \ AS SYSDBA;<br />
SHUTDOWN;<br />
-1<br />
-2<br />
-3<br />
-4<br />
STARTUP;<br />
STARTUP MOUNT;<br />
STARTUP NOMOUNT;<br />
في ھذه الجملة یعتبر الأوراكل انھا OPEN باعتبارھا ال<br />
.Default<br />
:ALTER DATABASE Command<br />
یمكن ان تستخدم في عدد من الوظائف منھا<br />
:<br />
-1<br />
تغییر حالة ال<br />
Database من :<br />
.MOUNT الى NOMOUNT<br />
OPEN الى MOUNT<br />
•<br />
•<br />
یمكن استخدام أمر ال ALTER DATABASE باتباع القاعدة التالیة:<br />
ALTER DATABASE [database's name] MOUNT | OPEN;<br />
مثال تطبیقي<br />
:2.6<br />
بینما یتم استخدام حالة ال NOMOUNT یمكن التحویل الى ال MOUNT بكتابة التالي:<br />
ALTER DATABASE MOUNT;<br />
2- لوضع ال Database في حالة القراءة فقط Database" :"Read-Only<br />
یمكن فتح ال Database في حالة OPEN بدون السماح بتغییر البیانات في ال<br />
القاعدة التالیة:<br />
Database باستخدام<br />
ALTER DATABASE [database's name] OPEN READ WRITE | READ ONLY;<br />
مع العلم أن READ WRITE ھي ال<br />
.Default<br />
43
مثال تطبیقي<br />
بینما ال<br />
:2.7<br />
"READ WRITE" في الحالة العادیة Database<br />
یمكن التحویل بكتابة الجملة التالیة:<br />
ALTER DATABASE OPEN READ ONLY;<br />
من الوظائف التي یمكن القیام بھا بینما ال Database في وضعیة ال :READ ONLY<br />
استخراج بیانات عبر جمل ال .SQL<br />
تغییر وضعیة ال<br />
القیام بعملیة ال Recovery على ال<br />
وال<br />
.Tablespaces<br />
.Online و Offline بین Data Files<br />
Offline Data Files<br />
•<br />
•<br />
•<br />
:Restricted Mode<br />
یمكن تشغیل ال Database في ھذه الحالة لإعطاء المجال للمستخدمین الذي یملكون<br />
Restricted Session Privilege من القیام بمھات خاصة.<br />
مثال تطبیقي 2.8:<br />
لتشغیل ال Database في حالة ال : Restricted<br />
یمكن تحویل الحالة بشكل داینامیكي باستخدام:<br />
STARTUP RESTRICTED;<br />
ALTER SYSTEM ENABLE RESTRICTED SESSION;<br />
ALTER SYSTEM DISABLE RESTRICTED SESSION;<br />
(Restricted<br />
:Kill a Session<br />
یرید ال DBA (أو من یملك الصلاحیات) باخراج<br />
في بعض الأوقات (وخاصة بعد وضع ال<br />
بعض المستخدمین من ال للقیام ببعض المھمات. یمكن القیام بھذه المھمة عبر:<br />
ALTER SYSTEM KILL SESSION 'SID, SERIAL#';<br />
Database<br />
ال SID ھو رقم ال Session الخاص (یعطى لكل Session عند بدایة تشغیلھ رقم خاص بھ) یمكن استخراجھ<br />
من .V$SESSION<br />
ال SERIAL# ھو رقم أخر ممیز "Unique" یعطى لكل Session ویمكن استخراجھ من ایضاً من ال<br />
.V$SESSION<br />
44
مثال تطبیقي<br />
:2.9<br />
یمكن القیام بعملیة Session" "Kill باتخاذ الخطوات التالیة:<br />
•<br />
یجب أن یكون ھنالك أكثر من مستخدم یعملون على ال Database في نفس الوقت، للقیام بذلك<br />
ادخل الى SQLPLUS أولاً باسم مستخدم ثم افتح ال SQLPLUS مرة أخرى وادخل باسم<br />
مستخدم اخر.<br />
استخدم SYSTEM و استخدم username = SCOTT , password =TIGER<br />
• یتم كتابة الجملة التالیة من ال :SYSTEM<br />
SELECT USERNAME, SID, SERIAL#<br />
FROM V$SESSION<br />
WHERE USERNAME = 'SCOTT';<br />
• یظھر الناتج التالي (یختلف من جھاز الى أخر)<br />
USERNAME<br />
SID SERIAL#<br />
------------------ ---------- ------------------------------<br />
SCOTT 9 51<br />
یكتب مستخدم ال SYSTEM التالي:<br />
ALTER SYSTEM KILL SESSION '9, 51';<br />
یتم اغلاق ال Session الخاص بالمستخدم .SCOTT یقوم ال PMON بمھامھ مباشرة لمعالجة<br />
الأثار التي یمكن ان تنجم عن أغلاق ال Session الخاص بالمستخدم SCOTT واذا قام SCOTT<br />
بطلب جملة SQL تظھر الرسالة التالیة: YOUR SESSION HAS BEEN KILLED<br />
•<br />
•<br />
2.9 رسم<br />
45
SHUTTING DOWN THE DATABASE<br />
یمكن اقفال ال Database في اربع حالات ھي: TRANSACTIONAL, NORMAL,<br />
.IMMEDIATE, ABORT<br />
ملاحظة: عادةً ما تكون عملیة اغلاق ال Database من أجل عملیة ال .Backup<br />
ملاحظة2: لإغلاق ال<br />
.SYSOPER أو SYSDBA تحتاج الى Database<br />
لإغلاق ال Database في احدى الحلات المذكورة تستعمل القاعدة التالیة:<br />
SHUTDOWN [NORMAL] | [TRANSACTIONAL] | [IMMEDIATE] | [ABORT];<br />
مع العلم أن NORMAL ھي ال ،Default أي عند كتابة ال SHUTDOWN بدون أي من الحالات<br />
الأربع یفترض الأوراكل أنھا الحالة ال<br />
.Default<br />
:NORMAL<br />
في حالة اغلاق ال Database بھذه الحالة یتم التالي:<br />
لا یسمح بدخول مستخدمیین جدد لل .Database<br />
لا یغلق ال Database قبل خروج جمیع المستخدمین منھ، أي ان الأوراكل ینتظر حتى یفرغ<br />
المستخدمیین من مھامھم ثم خروجھم لكي یتم اعلاق ال<br />
یتم نقل بیانات ال Redo Log Buffer الى ال<br />
یتم نقل بیانات ال<br />
في حال وجود عملیات لم یتم حدوث COMMIT فیحدث لھا .ROLLBACK<br />
انھاء وجود ال<br />
ازالة مساحة ال SGA من الذاكرة.<br />
اغلاق ال Database ثم اغلاق ال .Instance<br />
.Database<br />
.Redo Log Files<br />
.Data Files الى ال Database Buffer Cache<br />
.Background Processes<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
ملاحظة: لا یستلزم ان تتم عملیة Recovery للبیانات التي كانت موجودة في ال Instance باعتبار انھا<br />
نقلت الى الملفات الفیزیائیة. وعملیة ال Recovery ھي العملیة المشابھھ لوظائف الPMON و SMON<br />
.<br />
:TRANSACTIONAL<br />
في حالة اغلاق ال Database بھذه الحالة یتم جمیع خطوات ال NORMAL عدا الإختلافات التالیة:<br />
لا یغلق ال Database قبل انھاء المھمات التي طلبھا جمیع المستخدمین منھ، أي أن الأوراكل ینتظر<br />
حتى یفرغ المستخدمیین من مھامھم التي طلبوھا قبل حدوث أمر الاغلاق ولا ینتظر أن یخرج<br />
المستخدمین من ال Database لتتم عملیة الاغلاق كما یحدث في ال .NORMAL<br />
لا یسمح بالقیام بمھمات جدیدة من قبل المستخدمین بعد أمر الإغلاق.<br />
یتم اخراج المستخدم من ال Database عند انتھاء المھمات التي طلبت قبل عملیة الاغلاق.<br />
•<br />
•<br />
•<br />
ملاحظة: لا یستلزم ان تتم عملیة Recovery عند تشغیل ال Instance مرة أخرى.<br />
46
:IMMEDIATE<br />
في حالة اغلاق ال Database بھذه الحالة یتم جمیع خطوات ال NORMAL عدا الإختلافات التالیة:<br />
یتم اغلاق ال Database فوراً دون انتظار خروج المستخدمین أو انھاء مھامھم التي طلبوھا قبل<br />
أمر الاغلاق.<br />
المھمات التي تم طلبھا قبل أمر الاغلاق تلغى وأیة تعدیلات طرأت على البیانات بسببھا تزال وتمسح<br />
(بشرط ان تكون المھمة ما تزال تعمل عند أمر الإغلاق) ویحدث لھا .ROLLBACK<br />
•<br />
•<br />
ملاحظة: لا یستلزم ان تتم عملیة Recovery عند تشغیل ال Instance مرة أخرى.<br />
:ABORT<br />
في بعض الحلات الخاصة عند عدم استطاعة الأوراكل اغلاق ال Database بأحد الحلات الثلاث السابقة یتم<br />
استخدام ھذه الحالة.<br />
في حالة اغلاق ال Database بھذه الحالة یتم التالي:<br />
یتم اغلاق ال Database فوراً دون انتظار خروج المستخدمین أو انھاء مھامھم التي طلبوھا قبل<br />
أمر الاغلاق.<br />
المھمات التي تم طلبھا قبل أمر الاغلاق تلغى و أیة تعدیلات طرأت على البیانات بسببھا تزال وتمسح<br />
(بشرط ان تكون المھمة ما تزال تعمل عند أمر الإغلاق) ولا یحدث لھا .ROLLBACK<br />
لا یتم نقل بیانات ال Redo Log Buffer الى ال<br />
لا یتم نقل بیانات ال<br />
المھمات التي لم یحدث لھا COMMIT لا یحدث لھا .ROLLBACK<br />
Instance بشكل فوري.<br />
یتم اغلاق ال<br />
.Redo Log Files<br />
Data Files الى ال Database Buffer Cache<br />
Database وال<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
ملاحظة: یستلزم ان تتم عملیة Recovery عند تشغیل ال Instance مرة أخرى.<br />
ملاحظة2: تأثیرات ال STARTUP FORCE و عند حدوث أي عطل في ال Instance یؤدي الى اغلاقھ<br />
ھي ذات التأثیرات<br />
لل .SHUTDOWN ABORT<br />
47
DIAGNOSTIC FILES<br />
تعتبر ملفات ال Diagnostic ملفات مھمة لإدارة ال Instance لأنھا تخزن بیانات حول العملیات المختلفة<br />
التي تجرى على ال یوجد عدد من ملفات ال Diagnostic منھا:<br />
.Database<br />
:ALERT LOG FILE<br />
.Database<br />
یتم تخزین البیانات حول العملیات أو المھام الیومیة التي تجرى على ال<br />
•<br />
Background<br />
:BACKGROUND TRACE FILES<br />
.Processes<br />
یتم تخزین بیانات حول ال<br />
•<br />
:USER TRACE FILE<br />
یتم تخزین بیانات حول الأخطاء الفادحة التي یقوم بھا المستخدمون<br />
والتي قد تؤدي الى تعطل ال Database وبذلك تساعد على اكتشاف الاسباب التي أدت لتعطل ال<br />
.Database<br />
•<br />
:ALERT LOG FILE<br />
لكل Instance ملف Alert Log بحیث اذا لم یقم المستخدم بتكوینھ یقوم الأوراكل خلال بدأ ال<br />
بتكوین الملف (خلال مرحلة ال (NOMOUNT وھو یعرف باسم<br />
ھو المرجع الأول في البحث عن الأخطاء (تشخیص) التي حدثت في ال Database بشكل یومي.<br />
موقع ال<br />
Instance<br />
Alert Log یعتبر ال .alertSID.<strong>log</strong><br />
.BACKGROUND_DUMP_DEST "Parameter" محدد من قبل العامل Alert File<br />
تذكر: جاء ذكر العامل "Parameter" BACKGROUND_DUMP_DEST في موضوع ال<br />
.SPFILE<br />
یتم تخزین البیانات عدیدة في<br />
Alert Log File منھا:<br />
Instance<br />
.Background Processes<br />
توقیت بدأ تشغیل ال وتوقیت الاغلاق.<br />
توقیت بدأ تشغیل ال<br />
بیانات حول ال .Log Switch<br />
بیانات حول الاخطاء التي<br />
بیانات حول تكوین ال .Tablespaces<br />
بیانات حول تكوین ال<br />
جمل ال SQL التي تحتوي على الأمر .ALTER<br />
Online Redo Log File الذي یتم العمل علیھ من قبل ال<br />
رقم ال<br />
ظھرت Messages" ."Error<br />
.Undo Segments<br />
Log Sequence الخاص بال<br />
LGWR<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
سوف یتم التطرق لاحقاً لل .Undo Segments<br />
تذكر: جاء ذكر ال<br />
Log Sequence Number في الفصل الأول.<br />
48
.Background Processes<br />
:BACKGROUND TRACE FILES<br />
یتم تكوین الملفات فقط عندما<br />
یتم تخزین بیانات حول الاخطاء التي تحدثھا ال<br />
تحدث الأخطاء (أي انھ في حال عدم حدوث اخطاء لا تكون الملفات متواجده).<br />
موقع الملفات محدد من قبل العامل "Parameter" .BACKGROUND_DUMP_DEST<br />
:USER TRACE FILE<br />
یتم تخزین بیانات حول الأخطاء الفادحة التي یقوم بھا المستخدمون والتي قد تؤدي الى تعطل ال<br />
وبیانات حول ال SQL التي تم طلب مراقبتھا ."Trace" موقع الملف محدد من قبل العامل<br />
Database<br />
.USER_DUMP_DEST "Parameter"<br />
یتحكم في حجم الملف العامل "Parameter" MAX_DUMP_FILE_SIZE و المحدد ب 10 میغا<br />
بایت. یمكن تشغیل أو ایقاف الملف في ال Session الواحد او في ال Instance (كل ال التي<br />
موجودة في ال (Instance عبر كتابة التالي:<br />
في ال :Session<br />
في ال<br />
Sessions<br />
ALTER SESSION SET SQL_TRACE = TRUE;<br />
:Instance<br />
او عند وضع قیمة العامل "Parameter" التالي في ال<br />
:Initialization Parameter File<br />
SQL_TRACE = TRUE<br />
وبذلك یتم تعقب "Trace" جمیع جمل ال SQL وتسجیل بیانات حولھا والأخطاء التي سببتھا.<br />
تذكر: جاء ذكر العامل "Parameter" USER_DUMP_DEST في موضوع ال .SPFILE<br />
.(trc) بالرمز Trace Files<br />
فمثلاً ملفات ال Background Trace تسمى بالقاعدة<br />
تعرف ملفات ال<br />
التالیة: ) كما الملفات الموجودة في نسخة الأوراكل الخاصة بي)<br />
dbname) dbnamePMON.trc ھو اسم ال Instance في جھازي والذي یحدد عند عملیة التنصیب).<br />
sidPROCESSNAME.trc مثل<br />
وكذلك الحال بالنسبة لملفات ال User Trace في تسمى بالقاعدة التالیة في نسخة الأوراكل الخصة بي:<br />
.ORA00853.trc مثل ORAPID.trc<br />
ملاحظة: قد تختلف قاعدة التسمیة من نسخة أوراكل الى أخرى ولكن ال Trace Files تنتھي دائماً ب<br />
(.trc)<br />
49
ORACLE MANAGED FILES (OMF)<br />
تسھل ال OMF ادارة عدد من ملفات الأوراكل اذ یكفي تحدید مواقع الملفات فیقوم الأوراكل بالاھتمام<br />
بالملفات و تكوینھا وحذفھا وتسمیتھا. یمكن تحدید مواقع الملفات باستخدام عاملین "Parameters" اثنین<br />
جدیدن من عوامل ملف ال Initialization Parameter File اضیفا في النسخة التاسعة من الأوراكل<br />
"Oracle9i" ھما:<br />
:DB_CREATE_FILE_DEST<br />
الذي یحدد مواقع ال<br />
.Data Files<br />
:DB_CREATE_ONLINE_LOG_DEST_n<br />
.Control Files<br />
خمسة.<br />
یحدد مواقع ملفات ال Redo Log وال<br />
یدل الحرف (n) على رقم العامل "Parameter" بیحث یكون من واحد الى<br />
•<br />
•<br />
ملاحظة: یمكن استخدام أحدھما أو كلاھما, ولا یشترط استخدام الاثنین معاً.<br />
ترتبط كل Tablespace بملف من ملفات ال<br />
اي انھ عند حذف ال Tablespace یجب حذف ملف ال<br />
Tablespace ارتباط بملفات من<br />
Data Files المرتبط معھا وإلا قد یسبب مشاكل عند عملیة ال ،Backup اذ انھ لا فائدة من حفظ ال<br />
Files باعتبار ال Tablespace تم حذفھا.<br />
یجب على ال DBA البحث عن الملف المرتبط وحذفھ بطریقة عادیة (كما یتم حذف أي ملف في الویندوز أو<br />
أو غیرھا). أما اذا تم استخدام طریقة ال OMF یقوم الأوراكل بحذف ال<br />
ال DBA أي بطریقة أوتوماتیكیة وھذه أحد فوائد استخدام ال .OMF<br />
(Physical-Logical ) Data Files بحیث یكون لكل<br />
.Data Files<br />
Data<br />
Data Files دون تدخل<br />
ال UNIX<br />
یتم استخدام<br />
(ora_)<br />
في بدایة اسماء ملفات ال OMF للدلالة علیھا.<br />
مثال تطبیقي<br />
:2.10<br />
DB_CREATE_FILE_DEST = 'C:\oracle\ora92\oradata\u01'<br />
DB_CREAE_ONLINE_LOG_DEST_1 = 'C:\oracle\ora92\oradata\u02'<br />
DB_CREAE_ONLINE_LOG_DEST_2 = 'C:\oracle\ora92\oradata\u03'<br />
یمكن تغییر القیم "Values" بشكل داینامیكي باستخدام .ALTER SYSTEM<br />
ALTER SYSTEM SET<br />
DB_CREATE_FILE_DEST='C:\oracle\ora92\oradata\u04';<br />
(2.10<br />
بعد ان یتم تحدید العوامل "Parameter" (كما في المثال تتم عملیة تكوین ال Database باستخدام<br />
اذا فشل تكوین ال Database یقوم الأوراكل بحذف الملفات التي تكونت<br />
من خلال .OMF<br />
أمر .CREATE DATABASE<br />
یمكن الحصول على معلومات حول الملفات التي تكونت بطریقة ال OMF من DBA_DATAFILE و<br />
.V$LOGFILE<br />
50
CREATING A DATABASE &<br />
USING THE DATA DICTIONARY<br />
51
PRE-CREATING STAGES<br />
عملیة تكوین ال Database تحتاج الى تخطیط وتحضیر مسبق، یجب على ال DBA اعداد التالي:<br />
الحجم الكافي لكل من القرص الصلب Disk" "Hard و الذاكرة في السیرفر.<br />
دراسة نوعیة النظام System" "Operating الموجود في السیرفر.<br />
وضع خطة لتوزیع الملفات في موقع التخزین لحمایة ملفات ال<br />
تحدید العوامل<br />
یمكن تغییره بعد عملیة التنصیب.<br />
اختیار نظام الحمایة<br />
.Database<br />
DB_BLOCK_SIZE وخاصة ال Initialization Parameters<br />
(Password File او Operating System )<br />
الذي لا<br />
و توفر ال .SYSDBA<br />
معرفة اذا كان یراد تكوین Database جدیدة أو یراد نقل ال Database الموجودة من نسخة<br />
أوراكل أقدم الى نسخة أجد ، عند ذلك یجب استخدام ال<br />
Data Migration Assistant<br />
تحدید الطریقة التي سوف یتم بھا تكوین ال Database الجدیدة ، إما عن طریق استخدام<br />
CREATE DATABASE في ال SQL (تسمى الطریقة الیدویة) او عن طریق<br />
.Configuration Assistant<br />
وضع خطة عملیة دوریة لإجراء عملیة ال .Backup<br />
Database<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
نقاط مھمة:<br />
-1<br />
ینصح بتوزیع ملفات ال Control File على مواقع مختلفة أو أقراص صلبة مختلفة.<br />
2- ینصح بتوزیع الملفات المتشابة في مجموعات ال Redo Log الى مواقع مختلفة أو أقراص مختلفة.<br />
-4<br />
3- وضع نظام لتسمیة الملفات لیتسنى ایجادھا بسھولة.<br />
تفریق عناصر ال Database التي لھا مراحل حیاة مختلفة(قصیرة أو طویلة) الى مواقع مختلفة لكي یقل<br />
ما یعرف باسم .Disk Fragmentation<br />
5- تفریق ال Tables وال Indexes الى Tablespaces مختلفة لتنظیم عملیة ال .Input/Output<br />
52
DATABASE CONFIGURATION ASSISTANT<br />
یمكن عبر ال(DBCA)<br />
القیام بالتالي: Options, Create a Database, Configure Database<br />
.Delete a Database, and Manage Templates<br />
Database<br />
:CREATE A DATABASE<br />
للقیام بتكوین Database جدیدة أو القالب ."Template" والقالب عبارة عن اختیار ال<br />
Options وحفظھا لكي یتسنى استخدامھا في موقع أخر. مثلاً یمكن ان یقوم الفرع الأساسي للشركة بتكوین<br />
قالب ال Database وتوزیعھ على الفروع لتكوین Databases متشابھ في جمیع الفروع.<br />
ھما:<br />
یمكن تكوین نوعین من<br />
القوالب "Templates"<br />
بدون ال :Data Files فقط اختیارت ال Database دون الملفات (لمعرفة الاخیارات اضغط على<br />
تكمن فائدتھ انھ یمكن تغییر جمیع الأختیارات وال Initialization<br />
."Template" بعد تكوین القالب Parameters<br />
Data<br />
.("Show Details"<br />
مع ال :Data Files یكون القالب متكوناً من اختیارات ال Database مع وجود ملفات ال<br />
Redo Log Groups بشكل أوتوماتیكي، یمكن تغییر<br />
یتم تكوین ال<br />
لا یمكن حذف ال Data Files وتكوینھا من جدید وكذلك<br />
اسماء ومواقع ال<br />
ینطبق الحال على ،Tablespaces ولا یمكن تعدیل ال<br />
Initialization Parameters بعد تكوین<br />
Control Files و ال<br />
،Data Files ولكن<br />
.Files<br />
القالب ."Template"<br />
•<br />
•<br />
یوجد عدد من القوالب المعدة مسبقاً Name" "Template تظھر بالرسم 3.1:<br />
3.1 رسم<br />
53
بعد أن یتم اختیار أحد القوالب "Templates" یطلب اختیار اسم ال Database واسم ال<br />
المعرف بالرمز .SID<br />
Instance<br />
3.2 رسم<br />
في حال تم اختیار القالب Database" "New یتم اختیار الممیزات "Features"<br />
ال<br />
التي ترید استخدامھا في<br />
.Database<br />
3.3 رسم<br />
54
المرحلة التالیة یتم اختیار البیئة التي سوف یعمل بھا ال<br />
.Database<br />
3.4 رسم<br />
بعد ذلك یتم تحدید عوامل "Parameters" ال<br />
Initialization Parameter File المختلفة.<br />
3.5 رسم<br />
55
یتم بعد ذلك عرض اسماء الملفات الفیزیائیة وال Tablespaces ومواقعھا ولدیك الخیار بحذف أو اضافة<br />
ملفات اخرى.<br />
3.6 رسم<br />
في المرحلة التالیة یتم اختیار نوعیة التكوین، ھل ترید تكوین Database أو ترید تكوین فقط قالب<br />
التي یمكن استخدامھا مع أمر<br />
أو ھل ترید تكوین جمل<br />
SQL Scripts<br />
"Template"<br />
.CREATE DATABASE<br />
3.7 رسم<br />
56
:CONFIGURE DATABASE OPTIONS<br />
یمكن تعدیل ال Database التي تم تكوینھا سابقاً من ناحیة ال Oracle Features والبیئة التي تعمل علیھا<br />
.(Dedicated Server أو Shared Server)<br />
:DELETE A DATABASE<br />
لحذف Database تم تكوینھا سابقاً<br />
:MANAGE A TEMPLATE<br />
یمكن استخدامھا لتكوین قالب "Template" أو لحذف قالب "Template" موجود. عند تكوین قالب<br />
"Template" جدید یمكن الاختیار بین ثلات خیارات ھي:<br />
من قالب "Template" أخر موجود، اذ یمكن تعدیل مواصفات القالب "Template" لصنع قالب<br />
جدید.<br />
(تم تكوینھا سابقاً) ، اذ یمكن تكوین قالب "Template"<br />
من مواصفات<br />
مشابھ لمواصفات ال Database ولكن دون ملفات ال<br />
من Database موجودة، اذ یمكن تكوین نسخة مطابقة ل Database موجودة مع ال<br />
Files وجمیع البیانات.<br />
Data<br />
.Data Files<br />
"Template"<br />
Database موجودة<br />
•<br />
•<br />
•<br />
3.8 رسم<br />
57
CREATE A DATABASE MANUALLY<br />
یمكن تكوین ال Database بطریقة یدویة باستخدام الأمر .CREATE DATABASE<br />
الخطوات المتبعة تتلخص بالتالي:<br />
تحدید اسم ال Instance وال .Database<br />
تحدید ال Database Character Set التي سوف نتطرق لھا لاحقاً في فصل أخر.<br />
تجھیز ملف ال<br />
تشغیل ال Database في الوضعیة ،NOMOUNT عبر ال .SYSDBA<br />
.Initialization Parameter File<br />
كتابة الأمر .CREATE DATABASE<br />
تشغیل ال SQL SCRIPTS لتكوین ال . Data Dictionary<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
ملاحظة: اذا كنت تقوم بتكوین ال Database على نظام ال UNIX یجد تحدید ما یعرف یاسم ال<br />
Environmental Variables ومنھا :<br />
"Directory" ھو الموقع :ORACLE_BASE<br />
الذي یحوي كل ملفات الأوراكل Tree" ."Top of<br />
وھنا یتم تخزین كل نسخ الأوراكل المختلفة ."Versions"<br />
:ORACLE_HOME موقع ال<br />
.Oracle Software<br />
:ORACLE_SID تحدد اسم ال Instance والذي یجب ان یكون غیر متشابھ مع اسم Instance أخر.<br />
:ORA_NLS33 لتحدید Set" "Database Character غیر<br />
:PATH مواقع<br />
.$ORACLE_HOME\bin<br />
:LD_LIBRARY_PATH<br />
.$ORACLE_HOME\lib<br />
برامج الأوراكل مثل ال ،SQLPLUS ومن المفترض ان تكون<br />
ملفات أخرى تسمى<br />
التي تم تحدیدھا مسبقاً ."Default"<br />
Oracle Library Files وعادة ما تكون<br />
یمكن تكوین Database بشكل یدوي باستخدام القاعدة التالیة:<br />
CREATE DATABASE [name of database]<br />
[CONTROLFILE REUSE]<br />
[LOGFILE [GROUP number] C1<br />
[MAXLOGFILES number]<br />
[MAXLOGMEMBERS number]<br />
[MAXLOGHISTORY number]<br />
[MAXDATAFILES number]<br />
[MAXINSTANCES number]<br />
[ARCHIVELOG | NOARCHIVELOG]<br />
[CHARACTER SET char]<br />
[NATIONAL CHARACTER SET char]<br />
[DATAFILE C1 [C2]]<br />
[DEFAULT TEMPORARY TABLESPACE tablespace_name C1 [C3]]<br />
[UNDO TABLESPACE tablespace_name DATAFILE C1 [C2]]<br />
[SET TIME_ZONE [time_zone_region]]<br />
58
أما ال الرموز ال<br />
،C1<br />
C3،C2 فترمز الى جزء من القاعدة تم تخفیفة الى رموز لسھولة قراءة القاعدة:<br />
'filename' [SIZE number] [K | M] [REUSE] =C1<br />
[AUTOEXTEND OFF | ON [NEXT number [K | M]]=C2<br />
[MAXSIZE UNLIMITED | number [K | M]]]<br />
EXTENT MANAGEMENT LOCAL UNIFORM [SIZE number] [K | M]<br />
=C3<br />
اي انھ في الجملة الثالثة تكون القاعدة:<br />
[LOGFILE [GROUP number] 'filename' [SIZE number] [K | M] [REUSE]<br />
ملاحظة: جملة ال CREATE DATABASE ھي الجملة الإلزامیة الوحیدة و الباقي اختیاري.<br />
ملاحظة2: عند عدم استخدام كلمة ال SIZE یجب استخدام كلمة ال REUSE والعكس صحیح.<br />
أما أوامر القاعدة فھي<br />
:<br />
database] :[name of اسم ال Database المراد تكوینھ.<br />
.DB_NAME<br />
في حال عدم كتابتھ یؤخذ قیمة العامل<br />
"Overwrite" یمكن استخدامھا لطلب اعادة استخدام :[CONTROLFILE REUSE]<br />
المعرفة في ال<br />
ملفات ال<br />
ملفات جدیدة.<br />
number] :[MAXLOGFILES تحدد العدد الأقصى لمجموعات ال<br />
یمكن تكوینھا في ال Database على مدى حیاة ال ،Database العدد الأدنى ھو 2.<br />
number] :[MAXLOGMEMBERS تحدد العدد الأقصى لملفات ال Redo Log ضمن<br />
المجموعات.<br />
number] :[MAXLOGHISTORY تحدد عدد ال<br />
Initialization Parameter File عوضاً عن تكوین<br />
Redo Log Files التي<br />
Archived Log Files التي تسخدم في<br />
Control Files<br />
عملیة ال .Media Recovery<br />
:[AUTOEXTEND] سوف نتطرق لھا لاحقاً.<br />
:[MAXDATAFILES] تحدد العدد الأقصى من ال Data Files الذي یمكن تكوینھ على مدى<br />
حیاة ال .Database<br />
:[MAXINSTANCES] تحدد العدد الأقصى من ال Instances الذین یستطیعون العمل على ال<br />
Database في نفس الوقت.<br />
char] :[CHARACTER SET سوف نتطرق لھا لاحقاً.<br />
SET] :[NATIONAL CHARACTER سوف نتطرق لھا لاحقاً.<br />
لتكوین ال<br />
Tablespace التي سوف نتطرق لھا لاحقاً، اذا لم تحدد یقوم الأوراكل بتكوینھا للمستخدم.<br />
TABLESPACE] :[UNDO لتكوین ال Undo Tablespace التي سوف نتطرق لھا لاحقاً.<br />
Default Temporary<br />
:[DEFAULT TEMPORARY TABLESPACE]<br />
.Database تحدید وقت ال :[SET TIME_ZONE]<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
59
:3.1<br />
CREATE DATABASE db01<br />
CONTROLFILE REUSE<br />
LOGFILE<br />
GROUP 1 ('C: \oracle\ora92\oradata\db01\<strong>log</strong>101.<strong>log</strong>') SIZE 10M<br />
GROUP 2 ('C: \ oracle\ora92\oradata\db01\<strong>log</strong>201.<strong>log</strong>') SIZE 10M<br />
GROUP 3 ('C: \ oracle\ora92\oradata\db01\<strong>log</strong>301.<strong>log</strong>') SIZE 10M<br />
MAXLOGFILES 4<br />
MAXLOGMEMBERS 2<br />
MAXLOGHISTORY 0<br />
MAXDATAFILES 254<br />
MAXINSTANCES 2<br />
ARCHIVELOG<br />
CHARACTER SET AL32UTF8<br />
NATIONAL CHARACTER SET AL16UTF16<br />
DATAFILE 'C: \oracle\ora92\oradata\db01\system01.dbf' SIZE 100M<br />
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED<br />
UNDO TABLESPACE UNDO01<br />
DATAFILE 'C: \oracle\ora92\oradata\db01\undo01.dbf' SIZE 40M<br />
DEFAULT TEMPORARY TABLESPACE TEMP01 TEMPFILE<br />
'C: \oracle\ora92\oradata\db01\temp01.dbf' SIZE 20M<br />
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K<br />
SET TIME_ZONE = 'CANADA /YUKON'<br />
;<br />
مثال تطبیقي<br />
الأخطاء التي قد تؤدي الى فشل تكوین ال Database بشكل یدوي:<br />
أخطاء في كتابة جمل ال .SQL<br />
طلب تكوین ملفات موجودة مسبقاً (تأكد من ان اسم الملف غیر مستخدم)<br />
مشاكل أو اخطاء ناتجة من نظام التشغیل System" ."Operating<br />
•<br />
•<br />
•<br />
لأعادة تكوین ال Database بعد محاولة فاشلة یجب:<br />
اغلاق ال .Instance<br />
حذف أي ملفات تكونت من ال CREATE DATABASE التي فشلت.<br />
تصحیح سبب الفشل ، مثل تعدیل جملة ال SQL التي تحوي أخطاء.<br />
تشغیل ال Instance في وضعیة ال NOMOUNT والقیام تكوین ال Database من جدید.<br />
•<br />
•<br />
•<br />
•<br />
ملاحظة: لا یتكون ال Data Dictionary بعد الانتھاء من تكوین ال Database بشكل یدوي، ولكن یتم<br />
تكوین ال<br />
.V$DATAFILE مثل ال Dynamic Views<br />
تذكر: تغییر كلمة السر لكل من المستخدمین SYS و SYSTEM لأخذ الأمان.<br />
تذكر: ان استخدام ال (OMF) Oracle Managed Files یسھل عملیة تكوین ال .Database<br />
60
DATA DICTIONARY<br />
یعتبر ال Data Dictionary أحد أھم مكونات ال ،Database اذ یتكون من مجموعة من ال Tables وال<br />
Views التي تحتوي معلومات قیمة عن ال .Database تستخدم ال Data Dictionary لقراءة البیانات<br />
فقط ولا یمكن تعدیل بیاناتھا بواسطة ال ،DBA ولكن یقوم ال Oracle بتعدیل البیانات الموجودة عند حدوث<br />
ال<br />
أوامر ال<br />
طلب المستخدم الدخول الى ال ، Database اذ یقوم بالتأكد من وجود اسم المستخدم وبیانات المستخدم مثل<br />
ال .User Privileges<br />
(DDL) .Data Definition Language یستخدم الأوراكل Data Dictionary ایضاّ عند<br />
یتكون ال Data Dictionary من عنصرین ھما:<br />
.Base Tables في ال Database<br />
تعتبر أول<br />
:BASE TABLES یتم تخزین بیانات حول ال<br />
من ال Database یتم تكوینھ، ویتم تكوینھا بشكل أتوماتیكي من قبل الأوراكل<br />
باستخدام الملف "Script" المسمى باسم .sql.bsq لا یجب تعدیل ال<br />
لأنھا ضروریة لتشغیل ال ،Database ولكن یمكن تعدیل واحدة فقط وھي ال ، مع العلم أنھ<br />
یتم تخزین البیانات في ال Base Tables بشكل مشفر.<br />
Base Tables أوالعبث بھا<br />
AUD$<br />
جزء "Object"<br />
:DICTIONARY VIEWS تقوم بتلخیص وترتیب بیانات المخزنة في ال<br />
تسھل استخراج البیانات و قرائتھا. یتم تكوینھا باستخدام الملف "Script" المسمى باسم<br />
Base Tables لكي<br />
.cata<strong>log</strong>.sql<br />
•<br />
•<br />
بیانات ال :Data Dictionary<br />
یوفر ال Data Dictionary بیانات مھمة حول:<br />
معلومات تفصیلیة حول جمیع عناصر "Objects" ال Database مثل ال Indexes, Tables,<br />
Views, Synonyms, Data <strong>files</strong>, Control Files وغیرھا.<br />
بیانات حول المساحة المشغولة والمساحة الفارغة في ال .Database<br />
بیانات حول المستخدمین ."Users"<br />
بیانات تفصیلیة لل Privileges و ال Roles الممنوحة لكل مستخدم.<br />
•<br />
•<br />
•<br />
•<br />
بیانات حول ال<br />
Auditing التي سوف نتطرق لھا في فصل أخر.<br />
•<br />
بیانات حول ال<br />
. Integrity Constraint<br />
•<br />
61
QUERYING DATA DICTIONARY<br />
تتوزع ال Dictionary Views الى ثلاث مجموعات عي:<br />
:DBA_ تحتوي ال Views على جمیع بیانات العناصر "Objects" في ال ،Database وھي<br />
خاصة لل DBA و كل مستخدم لدیھ ال اللازمة للدخول الى بیاناتھا.<br />
Privileges<br />
:ALL_ تحتوي على بیانات حول جمیع العناصر "Objects" التي یستطیع المستخدم استخراج<br />
البیانات منھا، سواء ما كان منھا ضمن ال Schema الخاصة بالمستخدم أو مستخدمین أخرین أو<br />
ال .Public Schema<br />
:USER_ تحتوي على بیانات حول العناصر "Object" التي یملكھا المستخدم (أي العناصر في<br />
ال Schema الخاصة بالمستخدم).<br />
•<br />
•<br />
•<br />
یمكن معرفة جمیع ال<br />
.DICTIONARY view<br />
Views المتوفرة في ال Data Dictionary من خلال البیانات المعروضة من ال<br />
مثال تطبیقي<br />
:3.2<br />
SELECT * FROM DBA_OBJECTS;<br />
SELECT * FROM ALL_OBJECTS;<br />
SELECT * FROM USER_OBJECTS;<br />
SELECT * FROM DICTIONARY;<br />
Database في<br />
DYNAMIC PERFORMANCE<br />
،Database یقوم<br />
Tables<br />
Oracle Server بتسجیل بیانات حول عمل ال<br />
طوال فترة عمل ال<br />
الذاكرة على شكل وعند اغلاق ال Database أو اغلاق السیرفر تضیع البیانات من الذاكرة.<br />
تعتبر ال Dynamic Performance View من ضمن ال ،SYS Schema وھي تستخدم بشكل اساسي<br />
لمراقبة ال Database ولا یسمح القیام بأوامر<br />
Language(DML) Data Manipulation علیھا.<br />
لمعرفة ال Views المتوفرة یمكن استخدام ،V$FIXED_TABLE ولمعرفة ال Columns ضمن ال<br />
.V$INSTANCE استخدم Views<br />
ملاحظة: یرمز لل<br />
.V$ بالرمز Dynamic Performance Views<br />
62
CONTROL & REDO LOG FILES<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
63
CONTROL FILE<br />
<br />
<br />
یعتبر Control File ضروري جدً لتشغیل وعمل ال ،Database حیث تتم قرائتھ من قبل ال<br />
Server قبل بدء تشغیل ال ،Database اذ یحتوي على بیانات مھمة حول ال Database مثل اسماء<br />
تتم تغیر بیاناتھ أو تجدیدھا "Update" عبر ال<br />
ومواقع ملفات ال<br />
اذ لا یستطیع أي مستخدم أو ال DBA القیام بھذه المھمة.<br />
ولا یستطیع ال<br />
یتم تكوین ال Control File بعد تكوین ال<br />
واحد فقط على الأقل لتشغیل ال<br />
العمل على أكثر من Database واحدة ویلزم<br />
Oracle<br />
Oracle Server فقط ،<br />
Control File الواحد<br />
Database<br />
Database مباشرة<br />
Control File<br />
،<br />
.Data Files<br />
ملاحظة: تسمى عملیة تكوین أكثر من نسخة متطابقة من ملفات ال Control Files (ینطبق الحال على ال<br />
Redo Log ایضا) بعملیة ال ، Multiplex ویفضل توزیعھا على مواقع أو اقراص صلبة مختلفة.<br />
ملاحظة2: ملفات ال<br />
تذكر: تتم قراءة ملفات ال<br />
.Binary من نوعیة ال Control Files<br />
.Mount في مرحلة ال Control File<br />
تذكر2: ملف ال SPFILE من نوعیة ال .Binary<br />
یوجد عوامل "Parameters" تحدد حجم ال<br />
Control File وھي:<br />
MAXLOGFILES<br />
MAXLOGMEMBERS<br />
MAXLOGHISTORY<br />
MAXINSTANCES<br />
MAXDATAFILES<br />
•<br />
•<br />
•<br />
•<br />
•<br />
یحتوي ال Control File على البیانات التالیة:<br />
اسم ال Database التي یعمل لھا ال<br />
تاریخ وتوقیت تكوین ال<br />
اسماء ومواقع ملفات ال<br />
اسماء ال<br />
معلومات حول ال<br />
معلومات حول<br />
معلومات حول عملیة ال .Backup<br />
توقیت بدء و توقف ال<br />
الرقم الحالي ل<br />
.Control File<br />
.Database<br />
.Redo Log و ال Data Files<br />
.Tablespaces<br />
.Checkpoint<br />
.Archived Log File<br />
.Undo Segment<br />
.Log Switch والذي یتم تخزینھ عند حدوث Log Sequence Number<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
تذكر: یحتوي ال alertSID.<strong>log</strong> ایضاً على<br />
.Log Sequence Number<br />
64
MULTIPLEXING CONTROL FILES<br />
للحمایة من أیة خلل قد یحدث لل Database نتیجة تعطل ال Control File ینصح بشدة بالقیام بعملیة ال<br />
Control File بیحث یتم تخزین النسخ المتطابقة في مواقع تخزین مختلفة لكي یتسنى<br />
استعادة Control File في حال تعطلھ أو ضیاع بیاناتھ.<br />
للقیام بعملیة ال Multiples یجب استخدام إما ال SPFILE أو ال init.ora<br />
.<br />
Multiplex لل<br />
ملاحظة: یمكن عمل ثمانیة نسخ لل<br />
.Control File<br />
:MULTIPLEXING USING SPFILE<br />
للقیام ب Control File Multiples بواسطة ال SPFILE یجب إتباع الخطوات التالیة:<br />
تغییر ملف ال SPFILE<br />
كما في المثل التالي:<br />
ALTER SYSTEM SET CONTROL_FILES =<br />
('…\ora01\oradata\db01\ctr001.ctl', '…\ora02\oradata\db01\ctr002.ctl',<br />
'…\ora03\oradata\db01\ctr003.ctl', '…\ora04\oradata\db01\ctr004.ctl')<br />
SCOPE=SPFILE;<br />
لكي تتم التغیرات یجب اغلاق ال<br />
Database بكتابة التالي:<br />
SHUTDOWN;<br />
نسخ ملف ال Control File الى المواقع التي حددت بالنقطة الأولى (القیام بعملیة النسخ كما في<br />
نظام التشغیل ، اي في الویندوز یستخدم الفأرة مع<br />
.(PASTE و COPY<br />
•<br />
•<br />
•<br />
STARTUP<br />
• تشغیل ال Database بكتابة التالي:<br />
:MULTIPLEXING USING init.ora<br />
للقیام ب Control File Multiples بواسطة ال init.ora یجب إتباع الخطوات التالیة:<br />
یجب اغلاق ال<br />
نسخ ملف ال<br />
Database بكتابة التالي:<br />
SHUTDOWN;<br />
Control File الى المواقع<br />
الجدیدة التي سوف تحدد في النقطة الثالثة.<br />
تعدیل العامل "Parameter" CONTROL_FILES في ملف ال init.ora كما في المثال:<br />
•<br />
•<br />
•<br />
CONTROL_FILES =(…\disk1\ctr01.ctl, …\disk2\ctr02.ctl)<br />
<br />
تشغیل ال<br />
.Database<br />
•<br />
<br />
65
ملاحظة: استخدام الثلاث نقاط (...) في المثال السابق للاختصار فقط.<br />
:USING OMF<br />
<br />
.Oracle Managed Files Control File یمكن<br />
OMF طبقاً لطریقة ال Control Files<br />
Initialization Parameter Files في ال CONTROL_FILES "Parameter"<br />
عامل "Parameters" ال .DB_CREATE_ONLINE_LOG_DEST_nOMF<br />
Control File في ال<br />
یمكن تسھیل إدارة ملفات ال<br />
تكوین ال<br />
باستخدام ال<br />
بشكل أتوماتیكي عند تكوین ال Database اذا لم یتم تحدید العامل<br />
وتم تحدید<br />
بعد تكوین ال Control File بطریقة ال OMF یجب تسجیل اسم وموقع ال<br />
، PFILE اما اذا كنت تستخدم ال SPFILE فإن الاسماء تسجل بشكل اتوماتیكي.<br />
:DATA DICTIONARY & CONTROL FILE<br />
یمكن استخراج بیانات ال<br />
Control File من ال Data Dictionary عبر:<br />
:V$CONTROLFILE تعرض اسماء ال<br />
انھا دائما فارغة إلا في حال ضیاع ملف من ملفات ال<br />
(STATUS) والحالة الحالیة Control Files<br />
.INVALID فتصبح Control File<br />
اذ<br />
•<br />
SELECT STATUS, NAME FROM V$CONTROLFILE;<br />
:V$PARAMETER تعرض اسماء وقیم "Values" جمیع العوامل "Parameter" من<br />
ضمنھا طبعاً ال<br />
.Control Files<br />
•<br />
SELECT NAME, VALUE FROM V$PARAMETER<br />
WHERE NAME = 'control_<strong>files</strong>';<br />
:V$CONTROLFILE_RECORD_SECTION تعرض بیانات عن الأجزاء المختلفة من<br />
ال .Control File<br />
•<br />
SELECT TYPE, RECORD_SIZE, RECORDS_TOTAL, RECORD_USED<br />
FROM V$CONTROLFILE_RECORD_SECTION;<br />
:SHOW PARAMTER یمكن استخدام ھذه للحصول على مواقع واسماء ال<br />
Control Files<br />
•<br />
SHOW PARAMETER CONTROL_FILES;<br />
ملاحظة: یمكن الحصول ایضاً على اسماء ال Control Files بعد تكوینھا من ملف ال .alertSID.<strong>log</strong><br />
<br />
<br />
<br />
66
REDO LOG FILES<br />
تعتبر ملفات ال Redo Log ضروریة جداً لعمل ال ، Database اذ یتم تخزین كل ما جرى ویجري على<br />
البیانات من تغیرات لكي یتم استعادة البیانات "Recovery" في حالة حدوث ضیاع للبیانات عند حدوث عطل<br />
مفاجئ. تنقسم ملفات ال Redo Log الى مجموعات "Groups" كل مجموعة تحوي أعضاء<br />
،"Members" و الأعضاء "Members" ضمن المجموعة الواحدة عبارة عن نسخ متطابقة<br />
تحوي على نفس البیانات ویتم نقل البیانات لھا في نفس الوقت.<br />
یتطلب الأوراكل على الأقل مجموعتین من مجموعات ال<br />
المجموعة یكون لھ نفس الحجم وذات ال<br />
یقوم الأوراكل بواسطة ال LGWR بنقل بیانات ال<br />
تتم الكتابة على مجموعة واحدة فقط وعندما تمتلئ المجموعة الأولى یقوم ال LGWR بكتابة البیانات في<br />
المجموعة الثانیة وبعد إمتلاء المجموعة الأخیرة یعود ال LGWR بالكتابة في المجموعة الأولى ، وتسمى<br />
ھذه العملیة بال Log Switch وتسمى المجموعة التي یتم نقل البیانات لھا باسم المجموعة الحالیة أو<br />
Redo Log Files وكل عضو "Member" ضمن<br />
.Log Sequence Number<br />
Redo Log Buffer الى ال Redo Log Files حیث<br />
"Copies"<br />
."Current Online Redo Log Group"<br />
ملاحظة: یمكن تحدید الحد الأعلى للمجموعات و الأعضاء بواسطة MAXLOGMEMBERS و<br />
.CREATE DATABASE في جملة ال MAXLOGFILES<br />
تذكر: یتم تخزین بیانات حول ال Log Switch في ال<br />
.Alert Log File<br />
4.1 رسم<br />
Log Sequence Number معرفة برقم ممیز یسمى Redo Log File<br />
یمنحھ الأوراكل لكل<br />
كل مجموعة<br />
مجموعة عند بدایة كتابة البیانات بھا حیث یتم تجدید الرقم "Overwritten" كل مرة یتم إعادة استخدام<br />
المجموعة.<br />
تذكر: یتم تخزین<br />
Log Sequence Number في:<br />
Control File<br />
Data Files Header<br />
•<br />
•<br />
67
Alert Log File<br />
•<br />
Log Sequence Number في ال<br />
Log<br />
Alert<br />
:Checkpoint<br />
تعرضنا لل Checkpoint في الفصل الأول وذكرنا انھ یقوم بكتابة ال<br />
ونتطرق لل Checkpoint مرة أخرى لأن العلاقة بین ال Checkpoint وال<br />
Switch متزامنة بحیث عند حودث ال Log Switch تحدث عملیة ال .Checkpoint ویقوم ال<br />
Log File بتخزین معلومات حول ال Checkpoint كما یقوم بذلك مع ال Log Switch ولكن یجب وضع<br />
التالي LOG_CHECKPONT_TO_ALERT في حالة True عكس الحالة<br />
.False وھي<br />
.Control File<br />
العامل "Parameter"<br />
الإفتراضیة "Default"<br />
یمكن ان تحدث عملیة ال Checkpoint عند:<br />
حدوث عملیة .Log Switch<br />
عند إغلاق ال Database بأي حالة عدا ال .ABORT<br />
عندما یحدد العامل "Parameter" FAST_START_MTTR_TARGET الذي یحدد كمیة<br />
البیانات المتغیرة Buffers" "Dirty التي یستطیع ال DBWn كتابتھا.<br />
عندما طلب ال DBA یمكن القیام بھا بكتابة جملة SQL كما في المثال 4.1.<br />
عندما تكتب جملة ال SQL التالیة:<br />
ALTER TABLESPACE OFFLINE NORMAL.<br />
عندما تكتب جملة ال SQL التالیة: .ALTER TABLESPACE READ ONLY<br />
عندما تكتب جملة ال SQL التالیة: .ALTER TABLESPACE BEGIN BACKUP<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
مثال تطبیقي<br />
:4.1<br />
للقیام بعملیة ال Checkpoint بواسطة ال SQL یجب كتابة التالي:<br />
ALTER SYSTEM CHECKPOINT;<br />
اذا تم تحدید العامل "Parameter"<br />
FAST_START_MTTR_TARGET = 400<br />
یدل على عملیة ال Recovery یجب أن لا یزید وقتھا عن 400 ثانیة حیث أن من ضمن عملیة ال<br />
Recovery عملیة ال<br />
.Log Switch وعملیة ال Checkpoint<br />
یمكن أن یتم طلب عملیة ال Log Switch ایضاً بواسطة ال SQL عبر التالي:<br />
ALTER SYSTEM SWITCH LOGFILE;<br />
68
MAINTAINING REDO LOG FILES<br />
سوف نتطرق الى عدد من المھام التي یمكن اجرائھا لل Redo Log Files لحمایتھا أو لتعدیلھا.<br />
Redo Log Files<br />
:MULTIPLEXING<br />
، بحیث یقوم ال<br />
لحمایة ال Database یجب القیام بعملیة ال Multiplex على ال<br />
LGWR بكتابة ذات البیانات على النسخ المتشابھ في نفس الوقت. كل النسخ المتشابھ تكون ضمن مجموعة<br />
و یطلق على النسخ المتشابھ اسم .Members یفضل فصل النسخ المتشابھ عن بعض وابقائھا<br />
في موقع مختلف أو على قرص صلب مختلف (أو أي وسیلة لحفظ البیانات) كما في الرسم<br />
في ذات المجموعة على قرصین مختلفین<br />
الأعضاء<br />
في حال عدم توفر أي عضو "Member" من أي مجموعة لنقل البیانات إلیھ یتم اغلاق ال<br />
وتبدأ عملیة Recovery لل<br />
Database أو یمكن<br />
یمكن تكوین أكثر من مجموعة من مجموعات ال<br />
اضافة مجموعة أخرى لاحقاً.<br />
4.1 یظھرأن<br />
.(Disk1, Disk2)<br />
Database<br />
Redo Log Files عند تكوین ال<br />
(Member1 , Member2)<br />
.Instance<br />
"Group"<br />
نقاط مھمة في عملیة ال :Multiplex<br />
ینصح بتفریق الأعضاء ضمن المجموعة الواحدة الى مواقع أو اقراص صلبة مختلفة، لكي لا یحدث<br />
أغلاق لل Database في حال تعطل القرص الصلب الذي یحوي الملفات.<br />
ینصح بتفریق ال<br />
مختلفة أو مواقع مختلفة لكي لا یحدث تداخل بین عمل ال LGWR و ال .ARCn<br />
Online Redo Log Files عن ال Archived Log Files الى أقراص<br />
ینصح بتفریق ملفات ال Redo Log و ملفات ال Data Files الى مواقع أو اقراص مختلفة، لكي<br />
لا یحدث تداخل بین<br />
ال DBWn وال .LGWR<br />
•<br />
•<br />
•<br />
:SIZING ONLINE REDO LOG FILES<br />
أصغر حجم یمكن ان یكون علیة ال<br />
نظام التشغیل (مثل ویندوز أو .(UNIX<br />
یمكن لل DBA تحدید حجم ال<br />
، 50 KB ھو Redo Log File<br />
Redo Log Files بالأخذ بالمعطیات التالیة:<br />
أما اكبر حجم ھو أكبر حجم یسمح بھ<br />
الجحم المتوفر على القرص الصلب أو أي<br />
.Storage Device<br />
عدد مرات ال Log Switch و ال Checkpoint التي یمكن أن تحدث.<br />
الحجم المتوقع لل Redo Entries والذي یعتمد على العملیات التي تجري على ال<br />
والتي تؤدي الى تغییر البیانات.<br />
Database<br />
•<br />
•<br />
•<br />
69
:ADDING ONLINE GROUP<br />
في حال وجد ال DBA أن ال Database بحاجة الى مجموعة جدیدة ، یمكن تكوینھا كما في المثال 4.2:<br />
مثال تطبیقي<br />
:4.2<br />
ALTER DATABASE ADD LOGFILE GROUP 4<br />
('…\oradata\db01\<strong>log</strong>11.<strong>log</strong>' , '…\oradata\db02\<strong>log</strong>12.<strong>log</strong>') SIZE 5M;<br />
:ADDING ONLINE MEMBER<br />
یمكن اضافة أعضاء جدد للمجموعات الموجودة باستخدام القاعدة التالیة:<br />
ALTER DATABASE [database's name] ADD LOGFILE MEMBER<br />
['filename' [REUSE] , 'filename' [REUSE], ….]<br />
TO [ GROUP number | ('filename', 'filename', …);<br />
في حالة وجود اسم العضو على الجھاز وبنفس الحجم (أي الملف موجود مسبقاً) یجب استخدام كلمة<br />
REUSE اما بالنسبة الى الجملة الأخیرة فلدیك خیاران إما أن تذكر رقم المجموعة أو اسماء الأعضاء<br />
الحالیین في المجموعة التي ترید اضافة عضو جدید لھا.<br />
ملاحظة: یمكن اضافة عضو جدید باستخدام ال<br />
مثال تطبیقي<br />
.Console في ال Storage Manager<br />
ALTER DATABASE ADD LOGFILE MEMBER<br />
'…\oradata\db04\<strong>log</strong>41.<strong>log</strong>' TO GROUP 1,<br />
'…\oradata\db04\<strong>log</strong>42.<strong>log</strong>' TO GROUP 2,<br />
'…\oradata\db04\<strong>log</strong>43.<strong>log</strong>' TO GROUP 3,<br />
'…\oradata\db04\<strong>log</strong>44.<strong>log</strong>' TO GROUP 4;<br />
:4.3<br />
أو بالطریقة الثانیة:<br />
ALTER DATABASE ADD LOGFILE MEMBER<br />
'…\oradata\db04\<strong>log</strong>14.<strong>log</strong>'<br />
TO ('…\oradata\db01\<strong>log</strong>11.<strong>log</strong>' , '…\oradata\db02\<strong>log</strong>12.<strong>log</strong>' ,<br />
'…\oradata\db03\<strong>log</strong>13.<strong>log</strong>');<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم و كلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على ال<br />
اضغط على<br />
اكتب اسم العضو الجدید ثم اضغط .Apply<br />
.Normal<br />
.Storage Manager<br />
.Redo Log Groups<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
70
:DROPPING ONLINE LOG GROUP<br />
اذا أردت زیادة حجم أحدى مجموعات ال Redo Log یمكن ازالة المجموعة وتكوین مجموعة جدیدة بحجم<br />
أكبر، حیث تستطیع ازالة مجموعة من مجموعات ال Redo Log باتباع القاعدة التالیة:<br />
Active<br />
ALTER DATABASE [database' name]<br />
DROP LOGFILE [GROUP number | ('filename',….);<br />
یجب أن لا تكون المجموعة المزالة ھي المجموعة الحالیة "Current" أو ان تكون في وضعیة بل<br />
یجب أن تكون في وضعیة لا یسمح الأوراكل بحذف المجموعة اذا كان ذلك سوف یؤدي الى بقاء<br />
مجموعة واحدة فقط ، اذ أن الأوراكل یحتاج على الأقل الى مجموعتین من مجموعات ال<br />
باتباع القاعدة السابقة یمكن حذف المجموعة من تعریف الأوراكل فقط ، اما ملفات ال Redo Log الحقیقیة<br />
لا تمسح ویجب حذفھا بطریقة یدویة<br />
الموجودة في الموقع المحدد (كما في المثال 4.3:<br />
(كما في أوامر نظام التشغیل، في الویندوز استخدم أمر<br />
مثال تطبیقي<br />
.Redo Log Files<br />
ملف (<strong>log</strong>14.<strong>log</strong><br />
.(Delete<br />
.Inactive<br />
:4.4<br />
ALTER DATABASE DROP LOGFILE GROUP 4;<br />
أو بذكر أسم أحد أعضاء المجموعة كما في المثال 4.3.<br />
یمكن أیضا تحویل حالة ال<br />
Redo Log File الى حالة ال Inactive بواسطة الجملة التالیة:<br />
ALTER SYSTEM SWITCH LOGFILE;<br />
سوف نتطرق الى الحلات التي یمكن أن تكون علیھا المجموعة أو العضو بعد قلیل.<br />
:DROPPING ONLINE LOG MEMBER<br />
كما یمكن حذف مجموعة یمكن حذف عضو (أو أكثر) من المجموعة ولكن یجب أن یبقى على الأقل عضو فعال<br />
في المجموعة وإلا فإن أوراكل لن یسمح بعملیة الحذف. كما في حذف المجموعة یجب أن لا یكون<br />
العضو ھو العضو الحالي "Current" و الملفات الفیزیائیة لا تحذف من مكان تواجدھا. یوجد حالة أخرى لا<br />
یسمح الأوراكل بحذف العضو، ذلك عندما یكون ال Database في حالة ال Archive<strong>log</strong> ولم یتم عمل<br />
Archive للمجوعة التي ینتمى لھا العضو.<br />
"Valid"<br />
یمكن حذف عضو باتباع القاعدة التالیة:<br />
ALTER DATABASE [database's name]<br />
DROP LOG MEMBER 'filename','filename',…<br />
71
مثال تطبیقي<br />
:4.5<br />
ALTER DATABASE DROP LOG MEMBER '…\oradata\db04\<strong>log</strong>4.<strong>log</strong>';<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم و كلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على ال<br />
اختر العضو المراد حذفھ واضعط على رسم سلة المھملات.<br />
اضغط على<br />
.Normal<br />
.Storage Manager<br />
، Redo Log Groups ثم<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:RENAMING LOG MEMBER<br />
اذا كنت ترید نقل عضو"Member" من موقع الى أخر أو ترید تغییر اسم العضو یجب اتباع التالي:<br />
اغلق ال .Database<br />
انسخ الملف الفیزیائي (الخاص بالعضو) الى الموقع الجدید (لنقل الملف) ، أوقم بتغییر اسم الملف<br />
(لتغییر اسم الملف).<br />
قم بتشغیل ال Database في حالة ال .MOUNT<br />
اكتب الجملة التالیة<br />
ALTER DATABASE RENAME FILE 'old Filename' TO 'newFilename';<br />
قم بتشغیل ال Database وقم بعملیة Backup لل Control File على اعتبار أن محتویاتھ<br />
تغیرت.<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:CLEARING ONLINE REDO LOG FILES<br />
في حال حدوث فساد للبیانات الموجودة داخل ملفات ال Redo Log یمكن تنظیف الملفات باستخدام القاعدة<br />
التالیة:<br />
ALTER DATABASE [database's name]<br />
CLEAR [UNARCHIVED] LOGFILE GROUP number | 'filename' ,…..;<br />
یمكن العدول عن عملیة حذف ثم اضافة ملف Redo Log بالقیام بتنظیف محتویات الملف لما توفره العملیة<br />
من تسھیلات، اذ یمكن تنظیف مجموعة من مجموعات ال Redo Log حتى ولو وجد مجموعتیین فقط<br />
وبداخل كل مجموعة عضو واحد فقط ، ویمكن تنظیف المجموعة اذا كانت ال Database في حالة ال<br />
Archive<strong>log</strong> ولم یحدث عملیة Archive للمجموعة ولكن یجب استخدام كلمة UNARCHIVED في<br />
القاعدة.<br />
72
مثال تطبیقي<br />
:4.6<br />
لتنظیف مجموعة من مجموعات ال Redo Log اكتب التالي:<br />
ALTER DATABASE CLEAR LOGFILE GROUP 3;<br />
أو بذكر اسماء أعضاء المجموعة عوضاً عن المجموعة ورقمھا كما جاء سابقاً.<br />
:USING OMF<br />
لتسھیل عملیة ادارة ال Redo Log Files ینصح باستخدام ال OMF التي جاء شرحھا سابقاً. بواسطة ال<br />
OMF تكوین عملیة تكوین مجموعة جدیدة أو حذف مجموعة أسھل و یقوم الأوراكل بحذف الملفات<br />
الفیزیائیة الموجودة في موقع التخزین بشكل أتوتوماتیكي عند حذف أي مجموعة.<br />
لاستخدام طریقة ال ، OMF یجب تحدید العامل DB_CREATE_ONLINE_LOG_DEST_n في<br />
ال Initialization Parameter File وللقیام بعملیة ال Multiplex على ال<br />
استبدال ال n في العامل Parameter" " برقم من 1 الى 5.<br />
مثال تطبیقي<br />
Redo Log Files یجب<br />
:4.7<br />
لحذف مجموعة تعتمد على نظام ال OMF یجب كتابة:<br />
أما لإضافة مجموعة یجب كتابة:<br />
ALTER DATABASE DROP LOGFILE GROUP 3;<br />
ALTER DATABASE ADD LOGFILE;<br />
حیث یقوم الأوراكل بتحدید رقم المجموعة واختیار اسماء الأعضاء أوتوماتیكیاً.<br />
للقیام بعملیة ال Multiplex یجب تحدید التالي في ال<br />
:Initialization Parameter File<br />
DB_CREATE_ONLINE_LOG_DEST_1 = '…\oradata\db01'<br />
DB_CREATE_ONLINE_LOG_DEST_2 = '…\oradata\db02'<br />
DB_CREATE_ONLINE_LOG_DEST_3 = '…\oradata\db03'<br />
73
:QUERYING LOG FILE INFORMATION<br />
یمكن الحصول على معلومات حول المجموعات و الأعضاء من خلال:<br />
V$LOG<br />
V$LOGFILE<br />
•<br />
•<br />
:V$LOG<br />
تحتوى على بیانات حول المجموعات وأحجامھا والحالة التي ھي فیھا، یوجد 7 حالات یمكن أن تتواجد فیھا<br />
المجموعة وھم:<br />
:UNUSED<br />
تدل على أن المجموعة لم تستخدم على الأطلاق في تخزین البیانات ، غالباً ما یكون<br />
ھذا النوع للمجموعات المضافة حدیثاً.<br />
تدل على المجموعة الحالیة التي یستخدمھا ال LGWR في نقل بیانات ال<br />
Redo<br />
:CURRENT<br />
.Log Buffer<br />
:ACTIVE<br />
تدل على أن المجموعة جاھزة لعملیة ال .Recovery<br />
:CLEARING تدل أن المجموعة في حالة تنظیف لبیاناتھا بعدما طلب ال DBA ذلك بواسطة<br />
جملة ال SQL التي تطرقنا لھا قبل قلیل وبعد ان تنظف المجموعة تتحول الحالة الى .UNUSED<br />
.SQL تدل أن المجموعة تم تنظیفھا بعد طلب جملة ال :CLEARING_CURRENT<br />
:INACTIVE تدل على أن ال Database لیس بحاجة الى المجموعة ولا تلزم في عملیة ال<br />
، Recovery وھذا ھو النوع الذي یمكن حذف.<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:V$LOGFILE<br />
تحتوى على بیانات حول أعضاء المجموعات. یوجد 4 حالات یمكن أن یتواجد فیھا العضو وھم:<br />
:INVALID<br />
:STALE<br />
:DELETED<br />
فارغ :"Blank"<br />
تدل على أن ملف العضو لا یعمل.<br />
تدل على أن بیانات العضو غیر مكتملة.<br />
تدل على أن العضو لا یستخدم.<br />
تدل على أن العضو یتم استخدامھ.<br />
•<br />
•<br />
•<br />
•<br />
مثال تطبیقي<br />
:4.8<br />
SELECT GROUP# , SEQUENCE#, BYTES, MEMBERS, STATUS<br />
FROM V$LOG;<br />
SELECT GROUP#, STATUS, TYPE, MEMBER FROM V$LOGFILE;<br />
74
ARCHIVED LOG FILES<br />
من أھم الأمور التي یجب تحدیدھا من قبل ال DBA ھو قرار وضع ال Database في وضعیة ال<br />
.Noarchive<strong>log</strong> توجد ال Database في الحالة الأفتراضیة "Default" في وضعیة<br />
ال Noarchive<strong>log</strong> ولكن وضعیة ال Archive<strong>log</strong> مفیدة جداً حیث أن من فوائدھا تسھیل عملیة ال<br />
البیانات التي حدث لھا یمكن أن تتم عملیة ال<br />
Archive لملفات ال Redo Log بطریقتیین ھما: یدویة أو أوتوماتیكیة والذي یتحكم بھا عامل من عوامل<br />
ال<br />
عندما تكون قیمة ال LOG_ARCHIVE_START تساوي True فإن عملیة ال<br />
بشكل أتوتوماتیكي للمجموعة الممتلئة بواسطة ال ARCn بعد حدوث عملیة .Log Switch<br />
أما عندما تكون قیمة ال ARCHIVE_START_LOG تساوي ، False فأن عملیة ال<br />
یجب أن تحدث بطریقة یدویة عبر استخدام جمل ال .SQL<br />
Archiving تحدث<br />
Archiving<br />
.Commit<br />
Archive<strong>log</strong> أو<br />
"Recovery" وتضمن استعادة Backup<br />
.LOG_ARCHIVE_START ھو Intialazation Parameter File<br />
ملاحظات:<br />
یتم تخزین بیانات في ال Control File اذا تمت عملیة ال Archiving بنجاح.<br />
یمكن القیام بعملیة Multiplex لملفات ال .Archived Redo Log<br />
لا یمكن لل Archived Redo Log أن تتبع نظام ال .OMF<br />
•<br />
•<br />
•<br />
تذكر: لا یمكن استخدام ال Redo Log File حتى تتم عملیة ال Checkpoint ویتم عملیة Archiving<br />
إما عند حالة Noarchive<strong>log</strong> فقط عملیة ال<br />
للملف (ھذه الحالة تحدث عندما یكون الوضع<br />
Checkpoint یجلب أن تحدث).<br />
، Archive<strong>log</strong><br />
:QUERYING ARCHIVED REDO LOG<br />
یمكن الحصول على بیانات حول عملیة ال Archiving من V$INSTANCE<br />
أو من ال<br />
.Console<br />
مثال تطبیقي<br />
:4.9<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
SELECT ARCHIVER FROM V$INSTANCE;<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم و كلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على ال ، Instance Manager ثم اضغط على .Configuration<br />
اضغط على كلمة ال .Recovery<br />
.Normal<br />
•<br />
•<br />
•<br />
•<br />
•<br />
75
DATA FILES & TABLESPACES<br />
76
TABLESPACE<br />
Logical و<br />
Segment و<br />
كما عرفنا سابقأ أن ال Database تنقسم الى Physical بحیث تكون ال Tablespace ھي<br />
أحدى مكونات ال Logical بالإضافة الى Extents وBlocks .Data لا یمكن لل<br />
العمل لأكثر من Database واحدة ولكن بالمقابل یمكن لل Tablespace أن تحتوي على<br />
أكثر من<br />
یوجد نوعان من أنواع ال<br />
Tablespace ھما:<br />
Tablespace<br />
.Data File<br />
:SYSTEM TABLESPACE ھي ال Tablespace التي تتكون مباشرة مع تكوین ال<br />
Database لأنھا ضروریة لعمل ال Database ولا یمكن لل Database العمل بدونھا. تحتوي<br />
تحتوي ایضاً<br />
على بیانات ال Data Dictionary وبرامج ال PL/SQL مثل<br />
ویمكن أن تحتوي على البیانات "Data" ولكن لا<br />
یفضل جمع البیانات في ال System Tablespace بل في النوع الثاني من ال .Tablespace<br />
.Stored Units<br />
على ال SYSTEM UNDO SEGMENT<br />
:NON-SYSTEM TABLESPACE لإضافة مرونة على التحكم بال ، Database ینصح<br />
باضافة Tablespaces الى ال Database لتخزین البیانات على مختلف أنواعھا. من فوائد<br />
استعمالھا أنھا تقوم بفصل<br />
أي أنھا تفصل البیانات على حسب أختلافھا ومن فوائد استعمالھا ایضاً أن ال DBA<br />
یستطیع التحكم بحجم المساحة الممنوحة لكل مستخدم في ال<br />
Application عن ، Temporary Data عن ، Undo Data<br />
،<br />
.Database<br />
Data<br />
•<br />
•<br />
:CREATING TABLESPACES<br />
یمكن تكوین Tablespace باستخدام القاعدة التالیة:<br />
ملاحظة: الكلمات التي تحتھا خط في القاعدة ھي ال<br />
أما ال الرموز ال<br />
CREATE TABLESPACE tablespace's name<br />
[DATAFILE C1]<br />
[MINIMUM EXTENT number [K | M]]<br />
[BLOCKSIZE number [K] ]<br />
[LOGGING | NOLOGGING]<br />
[DEFAULT C2]<br />
[ONLINE | OFFLINE]<br />
[PERMANENT | TEMPORARY]<br />
.Default<br />
،C1<br />
C2، فترمز الى جزء من القاعدة تم تخفیفھ الى رموز لسھولة قراءة القاعدة:<br />
'filename' [SIZE number [K | M] [REUSE] | REUSE] [AUTOEXTEND …] =C1<br />
STORAGE (INITIAL number K|M NEXT number K|M =C2<br />
MINEXTENTS number PCTINCREASE number MAXEXTENTS number)<br />
سوف یأتي شرح بالتفصیل لعوامل ال C2 المبینة (… Next, (Initial, و جملة ال .AUTOEXTEND<br />
77
أما أوامر القاعدة فھي<br />
:<br />
EXTENT] :[MINIMUM تحدد حجم جمیع ال Extents الذین ینتمون الى ال<br />
Tablespace بحیث یكون الحجم مضاعفات الرقم الموجود بجانب الجملة، یعني اذا كان الرقم ھو 4<br />
فیكون أحجام ال Extents مضاعفات ھذا الرقم<br />
لتحدید حجم ال Block Size تعرفنا الى العامل DB_BLOCK_SIZE<br />
والذي یحدد الحجم المسمى بال Standard ولكن یسمح الأوراكل بوجود أربعة أحجام أخرى لل<br />
Block Size تسمى Non-Standard في حالة أن حجم ال Standard لا یناسب ال<br />
Tablespace وعندئذ یمكن تحدید ال Block Size بواسطة ھذه الجملة ویكون حجم ال<br />
Non-<br />
.(4, 8, 16,…)<br />
Tables و Indexes وغیرھا<br />
.Redo Log Files<br />
Indexes و Tables<br />
.Redo Log Files<br />
:[BLOCKSIZE]<br />
.32KB الى 2KB بین Standard<br />
:[LOGGING] تحدد أن جمیع عناصر ال Tablespace من<br />
یجب أن یتم كتابة المتغیرات التي تطرأ علیھا الى ال<br />
:[NOLOGGING] تحدد أن جمیع عناصر ال Tablespace من<br />
وغیرھا یجب أن لا یتم كتابة المتغیرات التي تطرأ علیھا الى ال<br />
"Storage Parameters" تحدد عوامل خاصة تسمى عوامل التخزین :[DEFAULT [C2<br />
التي سوف نتطرق لھا لاحقاً.<br />
:[OFFLINE] یوجد عدد من الحالات التي یمكن أن تكون علیھا ال Tablespace بعد تكوینھا<br />
والحالة تحدد أنھا غیر جاھزة للاستخدام (ضد<br />
:[PERMANENT] تحدد أن نوعیة ال Tablespace من النوع الذي یحمل بیانات دائمة.<br />
:[TEMPORARY] تحدد أن نوعیة ال Tablespace من النوع الذي یحمل بیانات مؤقتھ.<br />
.(Online<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
مثال تطبیقي<br />
:5.1<br />
لتكوین ال Tablespace باستخدام جملة ال SQL یمكن كتابة:<br />
CREATE TABLESPACE user_data<br />
DATAFILE '…\oradata\db01\userdata01.dbf' SIZE 50M<br />
AUTOEXTEND ON NEXT 5M MAXSIZE 100M<br />
LOGGING<br />
OFFLINE<br />
TEMPORARY<br />
DEFAULT STORAGE (INITIAL 1M NEXT 1M MINEXTENTS 2<br />
PCTINCREASE 0 MAXEXTENTS<br />
999)<br />
;<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
.Standalone<br />
Database<br />
ادخل الى ال Console عبر<br />
اضغط على اسم ال لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم و كلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على ال<br />
اضغط على Tablespace ثم بواسطة الضغط بالزر الیمین للفأرة على ال Tablespace تظھر<br />
أوامر ، اختر<br />
تظھر نافذة جدیدة ، ادخل البیانات المطلوبة مثل اسم ال Tablespace وال<br />
وباقي البیانات ، ثم اضغط .CREATE<br />
لل<br />
.Normal<br />
Data Files التابعین<br />
.Storage Manager<br />
.Create<br />
Tablespace<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
78
MANAGING TABLESPACES SPACE<br />
Tablespace<br />
یكون لكل عنصر<br />
عندما یتم تخصیص مساحة لأي عنصر داخل ال<br />
مجموعة من ال ،Extents ویمكن ادارة مساحة ال Extent بطریقتین ھما:<br />
Segment<br />
Dictionary Managed وTablespace Locally Managed Tablespace<br />
ملاحظة: لا یمكن تغییر طریقة إدارة ال Extents بعد تحدیدھا.<br />
تحوي على<br />
Data Files التابعة لل<br />
Free Blocks<br />
:LOCALLY MANAGED TABLESPACE<br />
تتبع ال Tablespace ھذه الطریقة عندما یتم تخزین معلومات ال Extents في ال<br />
یتم تخزین البیانات على شكل Bitmap (خریطة بایتات) والتي تدل على ال<br />
وعندا یحدث أي تعدیل على ال Blocks یقوم الأوراكل بتجدید بیانات<br />
و ال<br />
الBitmap لتوافق التغیرات التي طرأت.<br />
.Tablespace<br />
،Extents في ال Used Blocks<br />
من فوائد استخدام طریقة ال :Locally Managed<br />
تخفف الضغط على ال .Data Dictionary<br />
حجم ال Extent یمكن أن یقدر بشكل أوتوماتیكي و جمیع ال Extents تكون بنفس الحجم.<br />
عدم الحاجة الى جمع المساحات الخالیة الصغیرة الضائعة التي تنشئ بین البیانات نتیجة للتغیرات<br />
التي تحدث وتعیدھا الى المساحة الخالیة الرئیسیة وتسمى ھذه العملیة Coalescing Space<br />
) بمعنى أخر أنھا تمنع حدوث عملیات عدیدة تسبب ضغط على ال<br />
.(Database<br />
•<br />
•<br />
•<br />
لتكوین Tablespaces تتبع ھذه الطریقة ،<br />
یجب اضافة الجملة التالیة الى قاعدة<br />
:CREATE TABLESPACE<br />
EXTENT MANAGEMENT LOCAL<br />
[AUTOALLOCATE | UNIFORM [SIZE number [K|M] ] ]<br />
نقاط مھمة:<br />
1- لا یمكن استخدام جملة ال<br />
[DEFAULT C2]<br />
2- لا یمكن استخدام كلمة ال .TEMPORARY<br />
3- لا یمكن استخدام جملة ال .MINIMUM EXTENT<br />
أما أوامر الجملة فھي<br />
:<br />
:AUTOALLOCATE یقوم الأوراكل بتحدید حجم ال Extents ولا یستطیع الDBA فعل ذلك.<br />
.DBA من قبل ال Extents یتم تحدید حجم ال :UNIFORM<br />
•<br />
•<br />
79
مثال تطبیقي<br />
:5.2<br />
یمكن تكوین<br />
Tablespace تتبع طریقة ال Locally Managed بكتابة التالي:<br />
CREATE TABLESPACE app_data<br />
DATAFILE '…\oradata\db01\appdata01.dbf' SIZE 250M<br />
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K;<br />
أو اذا تم كتابة التالي فقط ، فتعتبر Locally Managed ویؤخذ ال<br />
:Autoallocate وھو Default<br />
CREATE TABLESPACE app_data<br />
DATAFILE '…\oradata\db01\appdata01.dbf' SIZE 250M;<br />
:DICTIONARY MANAGED TABLESPACE<br />
تتبع ال Tablespace ھذه الطریقة عندما یتم تخزین معلومات ال<br />
من فوائد استخدام طریقة ال Dictionary Managed انھا توفر مرونة في تحدید حجم كل<br />
ولكن في المقابل تلزم الحاجة الى جمع المساحات الخالیة<br />
حده باستخدام جملة ال<br />
الصغیرة الضائعة التي تنشئ بین البیانات نتیجة للتغیرات التي تحدث و تعیدھا الى المساحة الخالیة الرئیسیة ،<br />
أي حدوث عملیات قد تسبب مزید من الضغط على ال .Database<br />
.Data Dictionary في ال Extents<br />
Segment على<br />
.[DEFAULT C2]<br />
لتكوین Tablespaces تتبع ھذه الطریقة ، یجب اضافة الجملة التالیة الى قاعدة<br />
:CREATE TABLESPACE<br />
مثال تطبیقي<br />
EXTENT MANAGEMENT DICTIONARY [DEFAULT C2]<br />
:5.3<br />
CREATE TABLESPACE app_data<br />
DATAFILE '…\oradata\db01\appdata01.dbf' SIZE 250M<br />
EXTENT MANAGEMENT DICTIONARY<br />
DEFAULT STORAGE (INITIAL 1M NEXT 1M] ;<br />
ملاحظة: یمكن تغییر قیم العوامل ضمن الجملة [C2 [DEFAULT أو جملة ال<br />
EXTENT باستخدام الأمر ، ALTER TABLESPACE أو عبر ال<br />
MINIMUM<br />
.Console<br />
80
مثال تطبیقي<br />
:5.4<br />
لتغییر جملة ال :Minimum Extent<br />
ALTER TABLESPACE app_data MINIMUM EXTENT 2M;<br />
لتغییر جملة ال Storage… :Default<br />
ALTER TABLESPACE user_data<br />
DEFAULT STORAGE (<br />
INITIAL 2M<br />
NEXT 2M<br />
MINEXTENTS 1500);<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم و كلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على ال<br />
اضغط على Tablespace ثم الضغط بالزر الیمین للفأرة على اسم ال Tablespace المراد تغیر<br />
خواصھا لتظھر قائمة أوامر، أختر من الأوامر<br />
تظھر نافذة جدیدة ، اضغط على كلمة Storage ثم أدخل التغیرات المطلوبة، ثم اضغط .Apply<br />
.Normal<br />
.View\Edit Details<br />
.Storage Manager<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
تذكر: أنھ لا یمكن تغییر خواص ال Storage لل Tablespace التي تتبع طریقة ال .Locally Managed<br />
81
NON-SYSTEM TABLESPACES<br />
، Database منھا<br />
Non-System Tablespaces<br />
.Temporary Tablespace و Undo Tablespace Permanent Tablespace<br />
Database عن<br />
Permanent Tablespace فوظائفھا<br />
Tablespace الخاص<br />
ولكل منھا وظائف مختلفة في ال<br />
یوجد أكثر من<br />
و<br />
تخزین البیانات "Data" لفصل بیانات ال<br />
أما<br />
بیانات ال Data Dictionary و لسھولة التحكم في البیانات بحیث اذا تم حذف ال<br />
بھا لا یؤثر ذلك على عمل ال Data Dictionary و لتخفیف الضغط على ال System Tablespace وال<br />
Database بشكل عام.<br />
:UNDO TABLESPACE<br />
تستخدم لحفظ ال Undo Segment ولا یمكن أن تحتوي على غیرھا. یتم إدارة ال Extents بطریقة ال<br />
و یمكن تكوینھا باتباع القاعدة التالیة (أو تكوینھا عند تكوین ال Database<br />
CREATE UNDO TABLESPACE tablespace_name<br />
[DATAFILE C1]<br />
EXTENT MANAGEMENT LOCAL<br />
[AUTOALLOCATE | UNIFORM [SIZE number [K|M] ] ]<br />
Locally Managed<br />
باستخدام :(CREATE DATABASE<br />
ملاحظة: تستخدم ال Undo Tablespace في ال<br />
نتطرق لھا في فصل أخر مع ال<br />
مثال تطبیقي<br />
Automatic Undo Management التي سوف<br />
.Undo Segment<br />
:5.5<br />
CREATE UNDO TABLESPACE undo01<br />
DATAFILE '…\oradata\db01\undo101.dbf' SIZE 50M;<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على ال<br />
اضغط على Tablespace ثم الضغط بالزر الیمین للفأرة على اسم ال Tablespace المراد تغیر<br />
خواصھا لتظھر قائمة أوامر، أختر من الأوامر<br />
تظھر نافذة جدیدة ، أختر Undo عوضأ عن Permanent ثم ادخل البیانات المطلوبة مثل اسم ال<br />
Tablespace ثم أضغط<br />
.Normal<br />
.Create<br />
.Storage Manager<br />
.Create<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
تذكر: بیانات ال<br />
Undo Segment<br />
.Initialization Parameter File<br />
تخزن في ال<br />
Control File و ال Alert Log File و ال<br />
82
:TEMPORARY TABLESPACE<br />
توفر المساحة اللازمة لعملیات ال Sort المختلفة الناتجة عن أوامرعدة مثل Order By أوBy .Group<br />
بمعنى أخر أنھا تخزن البیانات المؤقتة Data" ،"Temporary وتحوي ما یعرف ب<br />
والتي تتكون في ال Tablespace عند أول عملیة Sort تطلب من ال .Instance یمكن إدارة ال<br />
بالطریقتین و لكن ینصح باستخدام .Locally Managed<br />
Sort Segment<br />
Extents<br />
ملاحظة: تستطیع ال Sort Segment التوسع في المساحة بحجز المزید من ال Extents لكي یتم تغطیة<br />
المساحة اللازمة لعملیات ال<br />
Sort المختلفة.<br />
یمكن تكوین ال Temporary Tablespace باستخدام جملة CREATE TABLESPACE مع إضافة<br />
كلمة TEMPORARY في الجملة و لكن یفضل استخدام القاعدة التالیة لتكوین :Locally Managed<br />
CREATE TEMPORARY TABLESPACE temp's name<br />
TEMPFILE 'filename'<br />
EXTENT MANAGEMENT LOCAL<br />
[AUTOALLOCATE | UNIFORM [SIZE number [K|M] ] ]<br />
مثال تطبیقي<br />
:5.6<br />
CREATE TEMPORARY TABLESPACE temp01<br />
TEMPFILE '…\oradata\db05\temp01.dbf ' SIZE 200M<br />
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M;<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على ال<br />
اضغط على Tablespace ثم بواسطة الضغط بالزر الیمین للفأرة على ال Tablespace تظھر<br />
أوامر ، اختر<br />
تظھر نافذة جدیدة ، أختر الخیار Temporary عوضأ عن Permanent ثم ادخل البیانات<br />
المطلوبة مثل اسم ال Tablespace و أدخل البیانات التابعة لقسم ال Storage مثل ال<br />
ثم أضغط<br />
.Size<br />
.Normal<br />
.Storage Manager<br />
.Create<br />
.Create<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
یعتبر TEMPFILE (الذي استخدم في القاعدة) متطابقاً لل DATAFILE<br />
عدا في الاختلافات التالیة:<br />
لا یمكن وضعھ في حالة القراءة فقط .Read-Only<br />
لا یمكن تغییر اسم الملف.<br />
لا یمكن أن یتم لھ عملیة .Recovery<br />
لا یمكن تكوینھ باستخدام ال .ALTER DATABASE<br />
دائماً في وضعیة ال .NOLOGGING<br />
لا یمكن استخدامھا مع جملة ال .CREATE CONTROLFILE<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
83
:Default Temporary Tablespaces<br />
باستخدام قاعدة CREATE DATABASE یمكن تكوین Default Temporary Tablespace والتي<br />
تحمي ال Database من استخدام ال System Tablespace عوضاً عن ال Temporary في تنفیذ<br />
عملیات ال Sorts والتي قد تؤدي الى مشاكل عدة في ال System Tablespace وازدیاد نسبة ال<br />
.System Tablespace داخل ال Fragmentation<br />
في حال لم یتم تكوین ال Temporary Tablespace مع تكوین ال Database وتم تكوینھا بعد ذلك ،<br />
یمكن تحدید أنھا ال Default Temporary بواسطة أمر ،ALTER DATABASE وجمیع<br />
المستخدمین الذین كانوا یستخدمون ال System Tablespace لعملیات ال Sorts یتم تحویلھم بشكل<br />
أوتوماتیكي الى ال<br />
ملاحظة: اذا اراد ال DBA تغییر ال<br />
أخرى لتكون ھي ال<br />
.Default Temporary Tablespace<br />
Temporary الى Default Temporary Tablespace<br />
.ALTER DATABASE یمكن استخدام ، Default<br />
Tablespace<br />
ملاحظة2: اذا تم تكوین ال Default Temporary Tablespace بواسطة CREATE<br />
.Locally Managed فإنھا تتبع طریقة ال DATABASE<br />
قیود ال<br />
:Default Temporary Tablespace<br />
لا یمكن حذف ال Default Temporary Tablespace إلا بعد تحویلھا الى Temporary<br />
.ALTER DATABASE أخرى بواسطة ال Tablespace<br />
لا یمكن تحویل ال<br />
لا یمكن وضعھا في حالة ال<br />
.Permanent الى Default Temporary<br />
.Offline<br />
•<br />
•<br />
•<br />
مثال تطبیقي<br />
:5.7<br />
لتعریف ال<br />
أخرى یجب كتابة التالي:<br />
Temporary Tablespace<br />
كنوعیة ال Default أو لتغییر ال Default Temporary الى<br />
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp02;<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على ال<br />
اضغط على Tablespace ثم بواسطة الضغط بالزر الیمین للفأرة على ال Tablespace تظھر<br />
أوامر ، اختر<br />
تظھر نافذة جدیدة ، أختر الخیار Temporary عوضأ عن Permanent ثم ادخل البیانات<br />
المطلوبة مثل اسم ال Tablespace وأدخل البیانات التابعة لقسم ال Storage مثل ال<br />
یجت تحدید الخانة<br />
.Normal<br />
.Storage Manager<br />
.Create<br />
.Size<br />
.Create ثم أضغط Set as Default Temporary Tablespace<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
84
ALTERING A TABLESPACE<br />
یمكن تعدیل Tablespaces أو حذفھم بواسطة أمر ،ALTER TABLESPACE بحیث یمكن تنفیذ<br />
Tablespace في وضعیة القراءة فقط<br />
بواسطة ھذا الأمر: تغییر الحالة بین<br />
تغییر حجم ال ،Tablespace وغیرھا من المھام.<br />
Offline و ، Online وضع ال<br />
، Tablespace حذف ، Read-Only<br />
:OFFLINE OR ONLINE<br />
عندما تكون ال Tablespace في حالة ،Offline لا یستطیع المستخدم استخراج البیانات المخزنة في ال<br />
Tablespace من ال .Database یمكن وضع ال Tablespace في حالة ال Offline لعدة اسباب منھا أن<br />
ال DBA یرغب في اغلاق جزء من البیانات أو عمل عملیة Backup أو Recovery على ھذا الجزء دون<br />
إغلاق ال Database بشكل تام أو نقل أو تغییر اسم Data Files لل Tablespace دون إغلاق ال<br />
Database بشكل كامل.<br />
عندما تتغیر حالة ال Tablespace من Online الى Offline أو بالعكس، یتم تخزین معلومات حول العملیة<br />
Instance تحویل حالة ال<br />
في ال Data Dictionary وفي ال<br />
بین الحالتین عند حدوث أخطاء أو مشاكل مثل عدم المقدرة على نقل البیانات الى ال .Tablespace<br />
لا یمكن وضع جمیع ال Tablespaces في حالة ال Offline اذ یسثنى كل من ال System Tablespace<br />
و ال Default Temporary وال Tablespace التي تحوي<br />
Tablespace<br />
.Active في حالة Undo Segment<br />
.Control File یمكن لل<br />
یمكن التحویل بین الحالتین باستخدام القاعدة التالیة:<br />
ALTER TABLESPACE tablespace's name<br />
ONLINE |<br />
OFFLINE [NORMAL | TEMPORARY | IMMEDIATE| FOR RECOVER]<br />
أوامر القاعدة:<br />
:NORMAL<br />
یتم كتابة جمیع البیانات المتغیرة<br />
في ذاكرة ال SGA الى ال Data Files ضمن ال Tablespace المراد إغلاقھا.<br />
:TEMPORARY توفر عملیة Checkpoint لجمیع ال<br />
Tablespace المراد إغلاقھا و لا توفر ذات العملیة لل<br />
:IMMEDIATE لا تقوم بعملیة Checkpoint على ال<br />
المراد غلقھا وبالتالي یجب القیام بعملیة Recovery عند الرغبة بتحویلھا الى<br />
Tablespace في عملیة<br />
Data Files الخاصة بال "Dirty Buffers"<br />
Online Data Files ضمن ال<br />
.Offline Data Files<br />
Tablespace ضمن ال Data Files<br />
.Online<br />
.Recovery<br />
:FOR RECOVER لاستخدام ال<br />
•<br />
•<br />
•<br />
•<br />
تذكر النقاط التالیة:<br />
أن ال DBWn یعمل عندما یتم وضع ال<br />
في حالة ال<br />
Temporary أو Permanent Tablespace<br />
.Offline<br />
Tablespace<br />
•<br />
أن وضع ال Tablespace في حالة ال<br />
Offline Normal یؤدي الى حدوث عملیة ال<br />
.Checkpoint<br />
•<br />
أنھ یمكن وضع ال Tablespace في احدى الحالتین عند تكوینھا بواسطة CREATE<br />
.TABLESPACE<br />
•<br />
85
مثال تطبیقي<br />
:5.8<br />
لوضع ال Tablespace في حالة ال Online یجب كتابة:<br />
ALTER TABLESPACE user_data ONLINE;<br />
لوضع ال Tablespace في حالة ال Offline یمكن كتابة:<br />
ALTER TABLESPACE user_data OFFLINE;<br />
ALTER TABLESPACE user_data OFFLINE IMMEDIATE;<br />
ALTER TABLESPACE user_data OFFLINE TEMPORARY;<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على ال<br />
اضغط على ال + بجانب كلمة Tablespace لیظھر قائمة بأسماء ال<br />
اضغط على اسم ال Tablespace المراد تحویل حالتھا.<br />
یظھر على النافذة الیمنى بعض خصائص ال ،Tablespace اختر Offline وحالة الإغلاق من<br />
المجموعة التي بجانبھا ثم اضغط على .Apply<br />
.Normal<br />
.Tablespaces<br />
.Storage Manager<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:READ-ONLY TABLESPACE<br />
یمكن وضع ال Tablespace في حالة القراءة فقط "Read-Only" اذا رغب ال DBA بأن تتم قراءة<br />
بیانات ال Data Files ضمن ال Tablespace دون تغییر البیانات. لكي یستطیع ال DBA وضع ال<br />
Tablespace في حالة ال Read-Only یجب أن یكون جمیع ال<br />
في وضعیة Online وإلا فأن العملیة لن تنجح ، والعكس صحیح في حال تحویل ال<br />
Read-Only الى الحالة العادیة Read-Write یحب توفر جمیع ال<br />
یمكن وضع ال Tablespace في حالة Read-Only باستخدام القاعدة التالیة:<br />
Tablespace التابعیین لل Data Files<br />
Tablespace من<br />
.Online في وضعیة Data Files<br />
ALTER TABLESPACE tablespace's name READ [ONLY | WRITE]<br />
(Tables, Indexes)<br />
من ال Read-Only Tablespace اذ أن حذف عناصر لا تكون<br />
یمكن حذف عناصر<br />
بیانات جدیدة في ال Tablespace ولا تغییر البیانات الموجودة إنما تغییر بیانات ال .Data Dictionary<br />
وفي حال كانت تجرى على ال Tablespace عدد من المھام "Transaction" عند عملیة التحویل ، یتم<br />
منع حدوث مھام جدیدة ویتم انجاز المھام التي تجري وإما أن تسجل البیانات الناتجة عن المھام عند حدوث<br />
.Rollback أو تلغى عند حدوث Commit<br />
ملاحظة: لا یمكن وضع ال<br />
.Read-Only في حالة ال System Tablespace<br />
86
مثال تطبیقي<br />
:5.9<br />
لوضع ال Tablespace في حالة ال Read-Only یجب كتابة:<br />
ALTER TABLESPACE user_data READ ONLY;<br />
لوضع ال Tablespace في الحالة العادیة:<br />
ALTER TABLESPACE user_data READ WRITE;<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على ال<br />
اضغط على ال + بجانب كلمة Tablespace لیظھر قائمة بأسماء ال<br />
اضغط على اسم ال Tablespace المراد تحویل حالتھا.<br />
یظھر على النافذة الیمنى بعض خصائص ال ،Tablespace ضع علامة في المربع بجانب كلمة<br />
.Apply ثم اضغط على ، Read Only<br />
.Normal<br />
.Tablespaces<br />
.Storage Manager<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
تذكر: أن وضع ال Tablespace في حالة ال Read-Only یؤدي الى عمل ال DBWn و حدوث عملیة ال<br />
.Checkpoint<br />
:DROPPING TABLESPACES<br />
یمكن حذف Tablespace من ال Database باستخدام القاعدة التالیة:<br />
DROP TABLESPACE tablespace's name<br />
[INCLUDING CONTENTS [AND DATAFILES] [CASCADE CONSTRAINTS]]<br />
أوامر القاعدة:<br />
:INCLUDING CONTENTS اذا كانت ال Tablespace خالیة لا تحوي أي بیانات<br />
فلا یشترط كتابة ھذه الجملة ، ولكن اذا كانت تحوي على بیانات "Data" فیجب كتابة<br />
ھذه الجملة.<br />
:AND DATAFILES كما تعرف أن لكل Tablespace مجموعة من ال<br />
لھا تكون الجزء الفیزیائي (الملفات الحقیقة) على موقع التخزین (مثل القرص الصلب). عندما لا<br />
تكتب ھذه الجملة لا تحذف ملفات ال Data Files من موقع التخزین والعكس صحیح اذ أن كتابة<br />
ھذه الجملة تؤدي الى حذف ملفات ال<br />
یجب استخدام ھذه الجملة في حالة وجود ما یعرف ب<br />
من Table توجد خارج ال Tablespace المراد<br />
حذفھا مع Primary Key أو Unique Key لTable موجودة داخل ال .Tablespace في حال<br />
وجود ھذا الرابط ولم یتم استخدام ھذه الجملة ، تفشل عملیة الحذف.<br />
Data Files التابعة<br />
"Data"<br />
Data Files بشكل أوتوماتیكي.<br />
:CASCADE CONSTRAINTS<br />
(Foreign Key) Referential Integrity<br />
•<br />
•<br />
•<br />
87
نقاط مھمة:<br />
1- یمكن حذف ال Tablespace التي توجد في وضعیة .Read-Only<br />
2- ینصح بتحویل ال Tablespace الى حالة Offline قبل حذفھا للتأكد من عدم وجود مھام أو عملیات<br />
تجري على ال ، Tablespace اذ بتحویلھا الى Offline یتم وقف العملیات الجدیدة وإنھاء المھمات الحالیة<br />
كما شرحنا قبل قلیل.<br />
3- بعد حذف ال Tablespace یتم تعدیل بیانات ال Control File لتتوافق مع التغییر الذي حدث في ال<br />
.Tablespace<br />
تذكر: أن ال<br />
Control File یحوي معلومات حول أسماء ال Tablespaces وأسماء و مواقع ال<br />
Data<br />
.Files<br />
مثال تطبیقي<br />
5.10<br />
لحذف Tablespace<br />
یمكن كتابة التالي:<br />
DROP TABLESPACE user_data<br />
INCLUDING CONTENTS AND DATAFILES;<br />
DROP TABLESPACE user_data<br />
INCLUDING CONTENTS CASCADE CONSTRAINT;<br />
DROP TABLESPACE user_data<br />
INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINT;<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على ال<br />
اضغط على ال + بجانب كلمة Tablespace لیظھر قائمة بأسماء ال<br />
حذفھا.<br />
اضغط على اسم ال<br />
استخدم الزر الیمین للفأرة اتظھر لك قائمة، اختر .Remove<br />
أختر Yes لتأكید الحذف.<br />
.Normal<br />
.Tablespaces<br />
.Storage Manager<br />
Tablespace المراد<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
88
Data Files التابعة لھا<br />
:RESIZING A TABLESPACE<br />
أو إضافة<br />
یمكن زیادة حجم ال Tablespace بزیادة حجم ال<br />
.Tablespace یمكن زیادة حجم ال Data Files بطریقة یدویة أو أوتوماتیكیة.<br />
Data Files جدیدة لل<br />
:Automatic Extension<br />
یمكن استخدام جملة ال AUTOEXTEND لزیادة حجم ال Data Files بطریقة أوتوماتیكیة أو لوقف ھذه<br />
العملیة. یمكن استخدام جملة ال AUTOEXTEND بعد تكوین ال<br />
باستخدام القاعدة التالیة:<br />
أوامر القاعدة:<br />
Tablespace أو ال Database<br />
ALTER DATABASE [database's name]<br />
DATAFILE 'filename' [SIZE number] [K | M] [REUSE]<br />
[AUTOEXTEND OFF|ON [NEXT number [K|M]]<br />
[MAXSIZE UNLIMITED | number [K |M]]<br />
:AUTOEXTEND OFF توقف عملیة زیادة حجم الملفات بشكل أوتوماتیكي.<br />
لتشغیل عملیة زیادة حجم الملفات بشكل أوتوماتیكي عند أمتلاء<br />
الملفات.<br />
:NEXT حجم الزیادة عند أمتلاء ال<br />
لتحدید الحجم الأقصى الذي یمكن أن یصل لھ حجم ال .Data Files یمكن أن یحدد<br />
الحد الأقصى أو ان یكون غیر محدد باستخدام .UNLIMITED<br />
.Data Files<br />
:AUTOEXTEND ON<br />
:MAXSIZE<br />
•<br />
•<br />
•<br />
•<br />
تذكر: تستخدم جملة ال AUTOEXTEND في قاعدة CREATE DATABASE<br />
و CREATE<br />
.TABLESPACE<br />
مثال تطبیقي<br />
لزیادة حجم ال<br />
5.11<br />
Data Files ضمن ال<br />
Tablespace بشكل أوتوماتیكي:<br />
ALTER DATABASE DATAFILE '…\oradata\db01\userdata01.dbf'<br />
AUTOEXTEND ON NEXT 10M MAXSIZE 250M;<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على ال<br />
اضغط على ال + بجانب كلمة Data Files لیظھر قائمة بأسماء ال<br />
اضغط على اسم ال Data File المراد تكبیرھا.<br />
اضغط على كلمة ال Storage لتدخل الى القسم الأخر<br />
ضع علامة في المربع ثم أكتب قیم كل من<br />
قیمة Value ثم اضغط على .Apply<br />
.Normal<br />
.Data Files<br />
.<br />
(NEXT) ، Increment واختر إما Unlimited او<br />
.Storage Manager<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
89
:Manual Extension<br />
یمكن زیادة أو انقاص حجم ال Data Files باستخدام القاعدة التالیة:<br />
ALTER DATABASE [database's name] DATAFILE 'filename', ['filename2'] …<br />
RESIZE number [K|M]<br />
سؤال: لنفرض أنھ یوجد لدینا<br />
DBA تصغیر حجمھ الى ، 60 MB فھل تنجح العملیة ؟ و كم یكون حجم ال<br />
Data File حجمھ 100 MB وھو یحوي على 70 MB بیانات ، واراد ال<br />
Data File بعد التصغیر؟<br />
جواب: نعم تنجح عملیة التصغیر ولكن یكون حجم ال Data File ھو حجم البیانات فیھ وھو 70. MB<br />
ملاحظة: یمكن تكبیر أو تصغیر حجم أكثر من ملف في نفس الوقت كما في المثال<br />
مثال تطبیقي<br />
لزیادة حجم ال<br />
5.12<br />
5.12<br />
Data Files ضمن ال<br />
Tablespace بشكل یدوي:<br />
ALTER DATABASE DATAFILE '…\oradata\db01\userdata01.dbf',<br />
'….\oradata\db01\userdata02.dbf'<br />
RESIZE 250M;<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على ال<br />
اضغط على ال + بجانب كلمة Data Files لیظھر قائمة بأسماء ال<br />
اضغط على اسم ال Data File المراد تكبیرھا أو تصغیرھا.<br />
ادخل الحجم الجدید في خانة<br />
.Normal<br />
.Data Files<br />
.Apply ثم اضغط File Size<br />
.Storage Manager<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
90
:Adding Data File<br />
یمكن اضافة<br />
Data Files الى ال<br />
Tablespace لتكبیر حجمھا عبر القاعدة:<br />
ALTER TABLESPACE tablespace's name ADD DATAFILE<br />
'filename' [SIZE number [K|M]] [REUSE] [AUTOEXTEND …] , ….<br />
ملاحظة: یمكن اضافة أكثر من ملف في نفس الوقت. استخدم فاصلة في أخر القاعدة وأعد كتابة السطر الثاني.<br />
كما في المثال<br />
مثال تطبیقي<br />
لاضافة<br />
.5.13<br />
:5.13<br />
:Tablespace الى ال Data Files<br />
ALTER TABLESPACE user_data ADD DATAFILE<br />
'…\oradata\db01\userdata01.dbf' SIZE 200M<br />
AUTOEXTEND ON NEXT 10M MAXSIZE 250M,<br />
'…\oradata\db01\userdata02.dbf' SIZE 200M<br />
AUTOEXTEND ON NEXT 10M MAXSIZE 250M;<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على ال<br />
اضغط على ال + بجانب كلمة Tablespace لیظھر قائمة بأسماء ال<br />
اضغط على اسم ال Tablespace المراد اضافة<br />
استخدم الزر الیمین للفأرة اتظھر لك قائمة،<br />
تظھر لك نافذة جدیدة ، ادخل البیانات مثل اسم الملف ثم اضغط<br />
.Normal<br />
.Tablespaces<br />
Data File لھا.<br />
.Add Datafile<br />
.Create<br />
.Storage Manager<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:MOVING DATAFILES<br />
یمكن نقل ال Data Files من موقع الى أخر باستخدام إما ALTER TABLESPACE أو ALTER<br />
.DATABASE<br />
باستخدام :Alter Tablespace<br />
یمكن نقل ملفات ال Data Files باستخدام القاعدة التالیة:<br />
ALTER TABLESPACE tablespace's name<br />
RENAME DATAFILE 'filename' , ['filename']<br />
TO 'filename' , ['filename'];<br />
91
طریقة التنفیذ:<br />
.Offline<br />
Data File الى المواقع<br />
.(PASTE و COPY<br />
ضع ال Tablespace في حالة<br />
الجدیدة (القیام بعملیة النسخ كما في نظام التشغیل ، اي في<br />
نسخ ملف ال<br />
الویندوز یستخدم الفأرة مع<br />
تنفیذ القاعدة السابقة.<br />
تحویل ال Tablespace الى الحالة<br />
یمكن حذف ال Data Files الموجودة في الموقع القدیم كما في نظام التشغیل.<br />
Online<br />
•<br />
•<br />
•<br />
•<br />
•<br />
شروط الاستخدام:<br />
یجب أن تكون ال Tablespace في حالة ال .Offline<br />
یجب تواجد ملفات ال Data Files المراد نقلھا في الموقع المحدد في القاعدة.<br />
یج ب أن تتط ابق اس ماء ال Data Files المنقول ة م ع اس ماء ال Data Files المخزن ة ف ي ال<br />
.Control File<br />
لا یمكن نقل Data Files التابعیین لل .System Tablespace<br />
•<br />
•<br />
•<br />
•<br />
مثال تطبیقي<br />
:5.14<br />
بعد تنفیذ النقطتین الأولى و الثانیة من طریقة النتفیذ:<br />
ALTER TABLESPACE app_data RENAME DATAFILE<br />
'…\oradata\db01\app01.dbf' , '…\oradata\db01\app02.dbf'<br />
TO<br />
'…\oradata\db02\app01.dbf' , ' …\oradata\db02\app02.dbf';<br />
باستخدام<br />
:Alter Database<br />
یمكن نقل ملفات ال Data Files باستخدام القاعدة التالیة:<br />
طریقة التنفیذ:<br />
ALTER DATABASE database's name<br />
RENAME FILE 'filename' , ['filename']<br />
TO 'filename' , ['filename'];<br />
اغلاق ال<br />
نسخ ملف ال<br />
الویندوز یستخدم الفأرة مع<br />
تشغیل ال Database في حالة ال<br />
تنفیذ القاعدة السابقة.<br />
تشغیل ال<br />
.Database<br />
Data File الى المواقع<br />
.(PASTE و COPY<br />
.Mount<br />
.Open في حالة Database<br />
الجدیدة (القیام بعملیة النسخ كما في نظام التشغیل ، أي في<br />
•<br />
•<br />
•<br />
•<br />
•<br />
92
شروط الاستخدام:<br />
یجب أن تكون ال Database في حالة ال .Mount<br />
یجب تواجد ملفات ال Data Files المراد نقلھا في الموقع المحدد في القاعدة.<br />
یمكن نقل<br />
.System Tablespace التابعیین لل Data Files<br />
•<br />
•<br />
•<br />
تذكر: ھي نفس القاعدة التي استخدمناھا لنقل أو تغییر اسماء ال<br />
.Redo Log Files<br />
مثال تطبیقي<br />
:5.15<br />
بعد تنفیذ الثلاث نقاط الأولى من طریقة النتفیذ:<br />
ALTER DATABASE app_data RENAME FILE<br />
'…\oradata\db01\app01.dbf'<br />
TO<br />
'…\oradata\db02\app01.dbf';<br />
:TABLESPACE WITH OMF<br />
یمكن تكوین Tablespace تتبع نظام ال OMF بتحدد العامل "Parameter"<br />
Data Files التابعیین لل Tablespace واستخدام قاعدة ال<br />
CREATE TABLESPACE مع عدة اختلافات مثل عدم الضرورة لذكر اسم ال<br />
القاعدة.<br />
Data Files في<br />
CREATE TABLESPACE tablespace's name<br />
[DATAFILE [filename] [SIZE number [K|M] ] ;<br />
DB_CREATE_FILE_DEST لل<br />
عند تكوین ال Tablespace بنظام ال OMF تكون ال<br />
:Data Files<br />
حجمھا ال 100MB Default (كما في المثال<br />
تستخدم الطریقة الأوتوماتیكیة لزیادة حجمھا<br />
للحجم<br />
(5.16<br />
(AUTOEXTEND)<br />
.(UNLIMITED)<br />
مع عدم تحدید أقصى حد<br />
•<br />
•<br />
مثال تطبیقي<br />
:5.16<br />
لتكوین Tablespace بنظام ال OMF یجب تحدید العامل "Parameter"<br />
DB_CREATE_FILE_DEST ثم كتابة التالي:<br />
CREATE TABLESPACE new_data;<br />
93
:QUERYING INFORMATION<br />
للحصول على معلومات حول ال Tablespaces یمكن استخدام:<br />
:DBA_TABLESPACES یوفر ھذا ال View معلومات حول جمیع ال Tablespaces في<br />
ال Database مثل اسم ال Tablespaces ونوعیة ال<br />
ونوعیة ادارة ال<br />
(Temporary, Undo) Tablespace<br />
(Locally, Dictionary) Extents وغیرھا.<br />
.Tablespaces توفر معلومات عن اسم و رقم ال :V$TABLESPACE<br />
•<br />
•<br />
للحصول على معلومات حول ال<br />
Data Files یمكن استخدام:<br />
:DBA_DATA_FILES یوفر معلومات حول ال<br />
Tablespace التي ینتمي لھا ال<br />
Data Files مثل اسم Data Files وال<br />
Data File وحجم ال<br />
:V$DATAFILE یوفر معلومات حول ال Data Files مثل حالة ال<br />
، حجم ال<br />
Data Files وغیرھا من المعلومات.<br />
Data File<br />
Data Files وغیرھا.<br />
(Online,Offline)<br />
•<br />
•<br />
للحصول على معلومات حول ال<br />
Temp Files یمكن استخدام:<br />
:DBA_TEMP_FILES<br />
یوفر معلومات حول ال<br />
Tablespace التي ینتمي لھا ال<br />
Temp Files مثل اسم Temp Files و ال<br />
Temp File وحجم ال<br />
:V$TEMPFILE یوفر معلومات حول ال Temp Files مثل حالة ال<br />
، حجم ال<br />
Temp Files وغیرھا من المعلومات.<br />
Temp File<br />
Temp Files وغیرھا.<br />
(Online,Offline)<br />
•<br />
•<br />
94
SEGMENTS & STORAGE<br />
STRUCTURES<br />
95
SEGMENTS<br />
ال ھي احدى مكونات ال Logical Structure وتأتي بعد ال<br />
یمكن لل Tablespace أن تحوي أكثر من Segments كما یمكن لل Segment أن تتكون من أكثر من<br />
Tablespace في الترتیب ،<br />
Segment مثل:<br />
Segment<br />
.Extent<br />
یوجد عدة أنواع من ال<br />
.TABLE SEGMENT<br />
.TABLE PARTITION SEGMENT<br />
.CLUSTER SEGMENT<br />
.INDEX SEGMENT<br />
.INDEX-ORGANIZED TABLE SEGMENT<br />
.INDEX PARTITION SEGMENT<br />
.TEMPORARY SEGMENT<br />
.UNDO SEGMENT<br />
.LOB SEGMENT<br />
.NESTED TABLE SEGMENT<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
سوف یأتي ذكر<br />
كل نوع لاحقاً.<br />
96
DATA BLOCKS<br />
Data<br />
ھي أصغر وحدة تخزین في الأوراكل ویتم تحدید حجمھا بواسطة العامل "Parameter"<br />
DB_BLOCK_SIZE عند تكوین ال Database ولا یمكن تغییر الحجم فیما بعد. یتكون ال<br />
Block من:<br />
Data, Index, )<br />
Tables التي<br />
.(or Undo<br />
Block Header ایضاً ما<br />
.Data Block في ال ( Data Rows)<br />
(Rows)<br />
Transaction Slots ھي ال Block Header<br />
للمھمات "Transactions"<br />
:BLOCK HEADER یحتوي على معلومات حول ال Data Block ونوعھ<br />
یحتوي أیضاً على ال Table Directory الذي یوفر معلومات حول ال<br />
ومن أجزاء ال<br />
لھا بیانات<br />
یعرف باسم Row Directory الذي یوفر معلومات حول البیانات المخزنة في ال Block<br />
مثل ال .Row Address الجزء الأخیر من ال<br />
التي تستخدم عندما تحدث تغیرات في البیانات "Rows" نتیجة<br />
المختلفة.<br />
."Rows" ھي المساحة التي یتم تخزین البیانات بھا :DATA SPACE<br />
Data Space وال Block Header<br />
:FREE SPACE<br />
ھي مساحة خالیة تساعد كل من ال<br />
على التوسع في الحجم اذا لزم الأمر. في حال حدوث عملیات كثیرة تسبب أخذ مساحة منھا ثم اعادة<br />
مساحة لھا بشكل متكرر یحدث Fragmentation ویقوم الأوراكل بعملیة Coalesce لھا.<br />
•<br />
•<br />
•<br />
تذكر: عملیة ال Coalescing من درس ال .Locally Managed Tablespace<br />
Data Files<br />
تذكر2: یتم تخزین رقم ال<br />
Log Sequence Number ورقم ال<br />
.Header<br />
Checkpoint في ال<br />
الرسم 6.1<br />
ملاحظة: الأسھم في الرسم 6.1 تشیر الى الطریقة التي تكبر بھا مساحة كل من ال<br />
Block Header وھي طریقة عكسیة ، من أسفل الى أعلى ومن أعلى الى أسفل على التوالي.<br />
Data Space وال<br />
97
:BLOCK STORAGE PARAMETERS<br />
عندما یتم تكوین Table أو عنصر أخر "Object" یمكن تحدید عوامل تتحكم في ال<br />
تنتمي لھذا العنصر. تحدید ھذه العوامل مھم جداً ، لأنھا تعمل على توفیر مساحة كبیرة وتحسین الاداراة<br />
والعمل.<br />
Data Blocks التي<br />
:PCTFREE عند تحدیدھا ، یتم حجز مساحة من حجم ال Block تخصص للزیادة المتوقعة في<br />
في ال<br />
البیانات Rows" "Data النانتجة من تغییر "Update"<br />
،Block الحجم ال<br />
البیانات Rows" "Data<br />
Default لھا ھو 10%.<br />
:PCTUSED تمثل الحجم الأدني للبیانات Rows" "Data في ال Block الذي اذا قل حجم<br />
المخزنة داخلھ عن حجم ال ، PCTUSED یتم تحویل ال Block الى<br />
قائمة ال ،Freelist الحجم ال<br />
Default ھو .40%<br />
البیانات Rows" "Data<br />
:FREELIST یمكن لل Segment الواحدة أن یكون لھا أكثر من Freelist واحدة بتحدید العامل<br />
Default ھو لكل<br />
Block<br />
Segment واحدة ، قائمة Freelist واحدة.<br />
،FREELISTS ال<br />
:INITRANS<br />
عند تحدیدھا یتم حجز مساحة لل Slots" "Transaction في ال<br />
Header لتخزین البیانات حول المھمات التي تجري. فھي تحدد الحد الأدنى من المھمات<br />
التي یمكن أن تجرى على ال Block في نفس الوقت. اذا تم تحدیدھا ب ، 3<br />
بحیث یمكن أجراء ثلاث مھمات على الأقل على<br />
فذلك یعني أنھ یخصص ثلاث<br />
ال Block في نفس الوقت ، وعند الضرورة یمكن تخصیص مساحة من ال<br />
Free Space في ال<br />
Block<br />
Transaction Slots<br />
"Transactions"<br />
Block لإضافة Transaction Slots أخرى، ال Default ھو .1<br />
:MAXTRANS<br />
عند تحدیدھا یتم حجز مساحة لل Slots" "Transaction في ال<br />
Header لتخزین البیانات حول المھمات التي تجري. فھي تحدد الحد الأعلى من المھمات<br />
التي یمكن أن تجرى على ال Block في نفس الوقت. اذا تم تحدیدھا ب ، 200<br />
فذلك یعني أنھ یمكن أجراء 200 مھمة على الأكثر على ال Block في نفس الوقت،<br />
Default ھو<br />
"Transactions"<br />
.255<br />
•<br />
•<br />
•<br />
•<br />
•<br />
ملاحظة: یقصد بال<br />
على استیعاب بیانات جدیدة أو ال<br />
FreeList بأنھا قائمة "List" تحدد ال Blocks التي یوجد بھا مساحة خالیة قادرة<br />
.Free Blocks<br />
-1<br />
-2<br />
مثال:<br />
في حال تم تحدید ال PCTUSED بنسبة 30% وال PCTFREE بنسبة 20%:<br />
یتم ادخال بیانات "Rows" الى ال Block الى أن تصل نسبة البیانات المدخلة الى 80% أو أقل بحیث<br />
یجب أن یظل حجم من ال Block فارغ وھو نسبة ال PCTFREE وھي كما ذكرنا 20%، وھكذا یظل حجم<br />
فارغ من ال Block في حال تغیر بیانات Rows المخزنة في ال Block مثل تحویل قیمة أحد ال<br />
COLUMN من حالة NULL الى قیمة فعلیة. ھذه المساحة الفارغة مخصصة لل Rows الموجودة في<br />
حال تغیر قیمھا ولا یمكن اضافة Rows جدیدة لتحل في الحجم الخالي الناتج من تحدید ال .PCTFREE<br />
في حال انخفاض بیانات ال Rows المخزنة في ال Block أو تم حذف عدد من ال ، Rows لا یسمح<br />
باضافة في ال Block اذا لم تنخفض بیانات ال Rows في ال Block عن الحد المحدد ب<br />
Block عن 30%، یتم تحدید أن ال Rows وھو 30%. في حال انخفاض حجم بیانات ال PCTUSED<br />
جاھز لاستقبال<br />
Rows جدیدة<br />
.(Freelist) جدیدة Rows<br />
98
MANAGING DATA BLOCKS<br />
یمكن إدارة ال<br />
Data Blocks<br />
بطریقتین احداھما یدویة والأخرى أوتوماتیكیة وھما:<br />
:MANUAL DATA BLOCK MANAGEMENT<br />
یتم استخدام Block Storage Parameters في تحدید حجم ال<br />
.Blocks<br />
Used Blocks وال<br />
:AUTOMATIC SPACE MANAGEMENT<br />
.Free Blocks یتم حفظ ال<br />
یتم استخدام Bitmap عوضاً عن Freelist لتحدید ال<br />
Blocks مختلفة تسمى (BMBs) .Bitmapped Blocks عندما یتم ادخال بیانات<br />
جدیدة ، یتم البحث في ال Bitmap عن Block یحتوي مساحة خالیة مناسبة لحجم البیانات<br />
الجدیدة المدخلة، وعند حدوث أي تعدیلات على ال Blocks (مثل زیادة المساحة الخالیة عن المساحة<br />
المشغولة) یتم تعدیل ال Bitmap لتوافق التغیرات التي طرأت.<br />
فوائد استخدام ھذه الطریقة عدیدة منھا سھولة ادارة ال Blocks اذ یتم تحدید ال PCTUSED و ال<br />
تخصیص المساحة للعناصر "Objects" بشكل أفضل ، وأداء أفضل<br />
خلال عملیات ال INSERT المتزامنة.<br />
Bitmap في<br />
"Rows"<br />
FREELIST بشكل أوتوماتیكي ،<br />
نقاط مھمة:<br />
1- یمكن استخدام ھذه الطریقة مع Locally Managed Tablespaces فقط.<br />
2- تطبق الطریقة على مستوى ال ،Tablespace أي یجب أن تكون جمیع ال Segments داخل ال<br />
Tablespace تعمل بنفس الطریقة.<br />
3- لا یمكن تغییر الطریقة الى الطریقة الیدویة بعد أن تستخدم.<br />
4- یمكن استخدام ھذه الطریقة باضافة جملة SEGMENT SPACE MANAGEMENT AUTO<br />
الى جملة .CREATE TABLESPACE<br />
5- لا یمكن استخدام الطریقة مع Tablespace تحوي أو قد تحوي على<br />
.LOBs<br />
ملاحظة: یتم تخزین بیانات كبیرة بواسطة LOBs مثل الصور والفیدیو وغیرھا وسوف یتم التطرق لھا في<br />
فصل لاحق.<br />
مثال تطبیقي<br />
:6.1<br />
CREATE TABLESPACE APP_DATA<br />
DATAFILE '…\oradata\db05\appdata04.dbf'<br />
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K<br />
SEGMENT SPACE MANAGEMENT AUTO;<br />
99
STORAGE INFORMATION<br />
للحصول على معلومات حول ال Segments یمكن استخدام:<br />
Data<br />
، Segment ال<br />
:DBA_SEGMENTS<br />
یمكن الحصول على معلومات حول اسم ال<br />
Extents في ال Segment وعدد ال<br />
Tablespace التي تحوي ال<br />
، Blocks وغیرھا من المعلومات.<br />
، Segment عدد ال<br />
•<br />
للحصول على معلومات حول ال Used Extents یمكن استخدام:<br />
:DBA_EXTENTS یوفر معلومات مثل رقم ال Extent ورقم ال Block التي ینتمي لھا وعدد<br />
ال Blocks ضمن ال Extent وغیرھا من المعلومات.<br />
•<br />
للحصول على معلومات حول ال Free Extents یمكن استخدام:<br />
:DBA_FREE_SPACE یوفر معلومات مثل اسم ال Tablespace التي تحوي ال<br />
وال Blocksالتابعة لھا وغیرھا.<br />
Extent<br />
•<br />
100
UNDO SEGMENT<br />
Undo Segment في حفظ<br />
"Transactions"<br />
. Commit<br />
نسخة عن البیانات قبل تعدیلھا بواسطة المھمات<br />
تستخدم ال<br />
التي أجریت علیھا، مثلاً لكي یتمكن الأوراكل من استعادة البیانات قبل التعدیل في حال<br />
طلب المستخدم Rollback عوضاً عن یتم استخدام ال<br />
بیانات حول المھمات "Transactions" الحالیة التي تستخدم ال<br />
من فوائد استخدام ال<br />
Undo Segment Header لتخزین<br />
.Undo Segment<br />
:Undo Segment<br />
لكي یتمكن الأوراكل من استعادة البیانات قبل التعدیل في حال طلب المستخدم Rollback عوضاً عن<br />
.Commit<br />
لكي یتمكن الأوراكل من استعادة البیانات الأصلیة في حال تعطل المھمة أو حدوث خلل طارئ لل<br />
.Recovery یتطلب عملیة ال Instance<br />
للقیام بما یعرف باسم<br />
.Read Consistency<br />
•<br />
•<br />
•<br />
ملاحظة: تستخدم المھمات المرتبطة ببعضھا Transaction" "Serial<br />
ویمكن للمھمات المتزامنة استخدام ذات ال<br />
Undo Segment ،<br />
.Undo Segment<br />
واحدة فقط<br />
تذكر: یتم تخزین معلومات حول ال<br />
Undo Segment في:<br />
.Initialization Parameter File<br />
.Alert Log File<br />
.Control File<br />
•<br />
•<br />
•<br />
تذكر2: جاء ذكر ال<br />
Undo Segment في درس:<br />
.Undo Tablespace<br />
.Offline or Online<br />
•<br />
•<br />
:System Change Number (SCN)<br />
ھو رقم ممیز Number" "Unique یتم تكوینھ عند حوث أمر ،Commit ویساعد في عملیة ال<br />
Consistency وعملیة ال .Recovery یتم تخزین ال SCN في ال<br />
و<br />
Read<br />
Redo Log ، Control Files<br />
.Block Headers<br />
، Files<br />
تذكر: یقوم ال Checkpoint بعمل تجدید لرقم ال SCN في ال .Control Files<br />
:Read Consistency<br />
ھي إمكانیة رؤیة أحد المستخدمیین البیانات الأصلیة قبل التعدیل بالرغم من قیام مستخدم أخر بتعدیل البیانات<br />
في نفس الوقت. لحدوث ال Read Consistency یجب أن یكون المستخدم الأول قد طلب البیانات قبل أن<br />
یقوم المستخدم الثاني بتأكید التعدیلات على التغیرات بواسطة ، Commit عندئذ یحضر الأوراكل البیانات<br />
المطلوبة للمستخدم الأول من ال<br />
.Undo Segment<br />
101
مثال:<br />
1- یقوم المستخدم الأول بعمل مھمات على بیانات ال Employees Tables تؤدي الى تغیر البیانات مثل<br />
.Undo Segment<br />
Select * From<br />
عملیة .UPDATE<br />
2- یقوم الأوراكل بتخزین نسخة لبیانات ال Employees Table قبل التعدیل في ال<br />
3- یقوم المستخدم الثاني بطلب استخراج البیانات عبر استخدام Query مثل<br />
،Employees وعندھا یتم تحدید رقم ال SCN الذي یستخدم لضمان عدم عرض البیانات التي یحدث لھا<br />
تغییر ولم یحدث لھا<br />
4- البیانات المعروضة على المستخدم الثاني ھي البیانات قبل التعدیلات التي أجراھا ویجریھا المستخدم الأول<br />
و ھي البیانات المخزنة في ال<br />
5- یقوم المستخدم الأول بانھاء و تأكید المھمات التي أجراھا باستخدام<br />
6- یقوم المستخدم الثاني بعد قلیل بطلب استخراج البیانات مرة أخرى<br />
7- البیانات المعروضة ھذه المرة ھي البیانات بعد التعدیلات التي أجراھا المستخدم الأول<br />
.SCN فیتم تجدید ال ، Commit<br />
.Select * From Employees<br />
.<br />
.Undo Segment<br />
.Commit<br />
:Snapshot Too Old Error<br />
عندما لا یستطیع الأوراكل توفیر خدمة ال Read Consistency یظھر ھذا الخطأ للمستخدم. یمكن أن یظھر<br />
الخطأ عندما یطلب المستخدم الثاني Query یكون البیانات المستخرجة طویلة جداً، بحیث قبل أن ینتھي ال<br />
Query من العمل یحدث أمران، الأمر الأول ھو أن المستخدم الأول طلب Commit على البیانات ، والأمر<br />
الثاني أنھ تم استخدام ذات ال Undo Segment من قبل مھمة أخرى بحیث تم تغییر البیانات<br />
في ال<br />
باستخدام العامل "Parameter" UNDO_RETENTION یمكن تحدید كم من الوقت یسمح للبیانات<br />
اذا تم تحدید قیمة العامل<br />
بالبقاء في ال Undo Table pace وبذلك توفیر خدمة ال<br />
، فھذا یعني أنھ یسمح للبیانات البقاء لمدة 15 دقیقة. یمكن تحدید العامل في ال<br />
Initialization<br />
.Undo Segment<br />
"Overwritten"<br />
.Read Consistency<br />
ب 900<br />
.ALTER SYSTEM ویمكن تعدیلھ داینامیكیاً بواسطة ، Parameter File<br />
ملاحظة: اذا كان حجم ال Undo Tablespace صغیر، یمكن أن لا تظل البیانات للوقت المحدد بالعامل<br />
، UNDO_RETENTION حیث یتم استخدام عملیات حسابیة لتبدیل البیانات المخزنة.<br />
:UNDO SEGMENT TYPES<br />
:SYSTEM UNDO SEGMENT تتكون ضمن ال System Tablespace عند تكوین ال<br />
.System Tablespace الموجودة ضمن ال "Objects" لتوفر خدماتھا للعناصر Database<br />
Database في ال Tablespaces عندما یوجد :NON-SYSTEM UNDO SEGMENTS<br />
Non-System Undo<br />
.Tablespaces<br />
غیر ال ، System Tablespace یجب توفر على الأقل واحدة من<br />
Segment في ال Database لتخدم باقي ال<br />
:DEFERRED UNDO SEGMENTS یمكن تكوینھا عند وضع ال Tablespace في حالة<br />
، Offline اذ یمكن أن تستخدم في عمل Rollback للمھمات "Transactions" التي قد تحدث<br />
عند تحویل ال Tablespace الى حالة ال .Online<br />
•<br />
•<br />
•<br />
102
MANAGING UNDO DATA<br />
یوجد نوعان لإدارة ال Undo Data في الأوراكل ھما:<br />
.AUTOMATIC UNDO MANAGEMENT<br />
.MANUAL UNDO MANAGEMENT<br />
•<br />
•<br />
سوف یتم التطرق فقط الى النوع الأول في الكتاب.<br />
:AUTOMATIC UNDO MANAGEMENT<br />
یتم تخصیص Undo Tablespace<br />
واحدة ذات مساحة كبیرة لكل .Instance یتم التحكم في البیانات<br />
الموجودة في ال Undo Tablespace بشكل أوتوماتیكي من قبل ال .Oracle Server یتم تسمیة أسماء<br />
طبقاً للطریقة التالیة _SYSSMUn$ مثل ._SYSSMU1$<br />
لكي تعمل طریقة ال<br />
حالة بالرغم أنھ یمكن أن تتواجد أكثر من Undo Tablespace في ال Database ولكن لا یمكن<br />
أن یكون أكثر من واحدة في حالة<br />
لاستخدام ھذه الطریقة یجب تحدید العامل "Parameter" UNDO_MANAGEMENT بالقیمة<br />
AUTO في ال .Initialization Parameter File لا یمكن تغییر قیمة العامل بطریقة داینامیكیة بعد<br />
تشغیل ال Database،القیمة ال<br />
التي سوف یتم التحكم بھا بواسطة<br />
لتحدید ال<br />
Management یجب تحدید العامل"Parameter" UNDO_TABLESPACE في ال<br />
، Initialization Parameter File إلا أن یكون ھنالك Undo Tablespace واحدة في ال<br />
عندئذ لا یشترط تحدید ھذا العامل ."Parameter" یمكن تغییر قیمة ھذا العامل بطریقة داینامیكیة بواسطة<br />
.ALTER SYSTEM<br />
Undo Segment<br />
Automatic Undo Management یجب توفر Undo Tablespace واحدة في<br />
.Active<br />
.Active<br />
Database<br />
Automatic Undo<br />
.MANUAL ھي Default<br />
Undo Tablespace<br />
مثال تطبیقي<br />
:6.2<br />
لتغییر قیمة العامل UNDO_TABLESPACE بشكل داینامیكي (للتحدید Tablespace أخرى في حالة<br />
:(Active<br />
ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBSPACE;<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على ال .Instance Manager<br />
اضغط على .Configuration<br />
اضغط على<br />
أختر من قائمة<br />
اضغط على .Apply<br />
.Normal<br />
قائمة .Undo<br />
.Undo Tablespace اسم ال Current Undo Tablespace<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
103
ALTER<br />
)Undo Tablespace<br />
:Snapshot Too Old Error<br />
بواسطة ال<br />
یمكن أن یحدث ھذا الخطأ ایضاً اذا ما تم تغییر ال<br />
وكان ما یزال Query یستخرج البیانات من ال Undo Tablespace<br />
التي تم تغییرھا.<br />
( Console أو عبر ال SYSTEM<br />
ملاحظات:<br />
في جملةDATABASE ، CREATE<br />
-1<br />
في حال لم یتم كتابة جملة ال UNDO TABLESPACE<br />
وكانت قیمة العامل UNDO_MANAGEMENT تساوي ، AUTO فإن الأوراكل سیرفر یقوم بتكوین<br />
.SYS_UNDOTBS بشكل أوتوماتیكي بمسمى Undo Tablespace<br />
2- یمكن حذف Undo Tablespace باستخدام جملة DROP TABLESPACE التي جاء شرحھا<br />
سابقاً، ولكن لا یمكن حذف ال Undo Tablespace اذا كانت تستخدم بواسطة ال<br />
.(Active)Instance<br />
تذكر:<br />
1- یمكن تكوین ال Undo Tablespace بطریقتیین ، إما عبر جملة ال CREATE DATABASE أو<br />
عبر جملة .CREATE UNDO TABLESPACE<br />
2- جاء ذكر ال Automatic Undo Management في درس ال .Undo Tablespace<br />
مثال تطبیقي<br />
:6.3<br />
یمكن حذف ال Undo Tablespace بواسطة DROP TABLESPACE ولكن یجب على كل المھمات<br />
التي تجري في ال Undo Tablespace أن تنھي عملھا قبل اتمام عملیة الحذف، یمكن معرفة اذا ما كان<br />
ھنالك أي عملیات تجري على ال Undo Tablespace أو أي Tablespace من خلال كتابة التالي:<br />
SELECT Z.NAME, X.STATUS<br />
FROM V$ROLLNAME Z, V$ROLLSTAT X<br />
WHERE Z.NAME IN<br />
(SELECT SEGMENT_NAME FROM DBA_SEGMENTS<br />
WHERE TABLESPACE_NAME = 'UNDOTBS')<br />
AND Z.USN = X.USN ;<br />
اذا كانت قیمة ال STATUS ھي PENDING ONLINE فھذا یعني أن ال Tablespace لا یمكن<br />
حذفھا، أما اذا كانت القیمة ھي PENDING OFFLINE فھذا یعني أنھ یمكن حذف ال .Tablespace<br />
Resource Manager للتحكم<br />
:Resource Manager<br />
بالنظام بحیث یتم منع المستخدمیین أو مجموعة من<br />
یمكن استخدام ال<br />
المستخدمیین من استھلاك مساحة كبیرة لل Undo Data بحیث یتم تخصیص مساحة قصوى "Maxsize"<br />
لكل مجموعة لاستخدامھا في تخزین ال .Undo Data یتم تخصیص مساحة قصوى بتحدید ال<br />
.UNLIMITED محدد بالقیمة "Default" والذي ھو في الحالة الإفتراضیة UNDO_POOL<br />
104
QUERYING UNDO INFORMATION<br />
یمكن استخدام ال<br />
:Undo Segment التالیة للحصول على معلومات حول ال Views<br />
:V$UNDOSTAT یساعد في تحدید حجم ال ، Undo Tablespace اذ یوفر معلومات حول<br />
وضغط البیانات علیھا خلال 10 دقائق.<br />
عمل ال<br />
Undo Tablespace<br />
•<br />
SELECT BEGIN_TIME, END_TIME, UNDOBLKS<br />
FROM V$UNDOSTAT;<br />
:DBA_ROLLBACK_SEGS للحصول على معلومات حول جمیع ال Undo Segment في<br />
ال .Database وحدھا فقط توفر بیانات حول ال<br />
.Offline Segment<br />
•<br />
SELECT SEGMENT_NAME, TABLESPACE_NAME, OWNER, STATUS<br />
FROM DBA_ROLLBACK_SEGS;<br />
.Online Segments توفر اسماء جمیع ال :V$ROLLNAME<br />
•<br />
SELECT USN, NAME FROM V$ROLLNAME;<br />
:V$ROLLSTAT توفر بیانات حول ال Online Segments مثل حجم ال Segments وعدد<br />
یمكن عمل Join مع ال V$ROLLNAME بواسطة ال .USN<br />
ال<br />
Extents وغیرھا.<br />
•<br />
SELECT A.NAME , B.EXTENTS<br />
FROM V$ROLLNAME A , V$ROLLSTAT B<br />
WHERE A.USN = B.USN;<br />
105
Managing tables & indexes &<br />
constraints<br />
106
STORING DATA<br />
یتم تخزین ال DATA في أوراكل على شكل<br />
Tables مثل:<br />
Rows و Columns في ال .Tables یوجد عدة أنواع من ال<br />
TABLES<br />
وأ( :(Regular Tables ھي ال Table التي یتم معظم العمل علیھا والتي یكون<br />
التحكم بتوزیع بال Rows فیھا من وظائف ال<br />
.Oracle Sever<br />
:PARTITIONED TABLES یكون لل Table أكثر من جزء ،"Partition" كل جزء<br />
عبارة عن كل Segment یمكن أن تتواجد في Tablespace مختلفة.<br />
Primary Key لل Table ویتم<br />
،Segment<br />
:INDEX-ORGANIZED TABLE<br />
یجب تخصیص ال<br />
تخزین ال PK وال Table في ذات المساحة ، وذلك عكس ال Regular Table التي اذا تم تكوین<br />
.("Separate Storage" لھا (الإثنان في مساحة مختلفة PK<br />
:CLUSTERED TABLE یمكن أن تتكون من Table واحدة أو مجموعة من ال<br />
یوجد ما یعرف باسم<br />
التي تستخدم مع بعضھا بحیث تتشارك نفس ال<br />
Key الذي یحدد ال Rows التي یجب أن تخزن مع بعضھا البعض.<br />
Tables<br />
Cluster<br />
.Data Blocks<br />
•<br />
•<br />
•<br />
•<br />
:DATA TYPES<br />
یوفر الأوراكل مجموعة من Data Types لتخزین البیانات ، تتبع ثلاثة أنواع ھم Collection, Scalar,<br />
.Relationship<br />
:Scalar Data Types<br />
بعض أنواع ال<br />
:Scalar Data Types<br />
:CHAR, NCHAR توفر مساحة ثابتة"Fixed-Length" لتخزین الأحرف<br />
المقصود بالمساحة الثابتة أنھ عند تخصیص مثلاً<br />
Bytes لتخزین البیانات، لا تعتبر ال 3bytes المتبقیة مساحة خالیة بل مساحة مشغولة. أقصى قیمة<br />
(مساحة) یمكن اختیارھا ھي 2000 بایت لكل Row مع العلم أن القیمة ال<br />
NCHAR عن CHAR أن الأولى یمكن أن تخزن Unicode Character التي توفر خدمة تعدد<br />
اللغات.<br />
:VARCHAR2, NVARCHAR2 توفر مساحة متغیرة "Variable-Length" لتخزین ال<br />
المقصود بالمساحة المتغیرة أنھ عند تخصیص مثلاً<br />
المخزنة في ال Column الى 15 bytes فإنھ یتم استخدام 15 Bytes فقط من المساحة الخالیة<br />
لتخزین البیانات ، ولا یتم حجز المساحة الكلیة المحددة. أقصى مساحة یمكن اختیارھا ھي<br />
بایت لكل Row مع العلم أنھ لا یوجد قیمة یجب تحدید القیمة). تختلف<br />
VARCHAR2 أن الأولى یمكن أن تخزن<br />
توفر خدمة تعدد اللغات.<br />
:NUMBER توفر مساحة متغیرة لتخزین الأرقام. یمكن أن تستوعب المساحة أرقام تتكون من<br />
خانة.<br />
10 Bytes وتم شغل 7<br />
Default ھي 1. تختلف<br />
، 20 Bytes واحتاجت البیانات<br />
4000<br />
Unicode Character التي<br />
38<br />
) Default<br />
."Characters"<br />
.Characters<br />
NVARCHAR2 عن<br />
•<br />
•<br />
•<br />
107
:DATE توفر مساحة ثابتة لتخزین التاریخ والوقت. توفر سبع خانات للقرن والسنة والیوم<br />
والساعة والدقیقة و الثانیة وأقصى تاریخ یمكن أن یخزن ھو ال31 من دیسمبر لعام ، 9999 أما أقدم<br />
تاریخ یمكن أن یخزن ھو ینایر من عام 1.4712 قبل المیلاد.<br />
توفر خدمة مماثلة لل DATE عدا أنھا توفر مساحة إضافیة لتخزین أجزاء<br />
( والعدد ال<br />
الثانیة. توفر 9 خانات لتسجیل أجزاء الثانیة<br />
توفر خدمة مماثلة لل ، TIMESTAMP إلا<br />
انھا توفر مساحة إضافیة لعرض الفارق الزمني بین المستخدم والتوقیت العالمي (توقیت جرینتش).<br />
یظھر الفارق على شكل عدد من الساعات والدقائق فقط.<br />
توفر خدمة مماثلة لل<br />
، TIMESTAMP إلا انھا توفر مساحة إضافیة لعرض ال ،Session Time Zone الذي<br />
یستخدم في إدخال البیانات بین فروع الشركات البعیدة عن بعضھا، أي في حال ادخال البیانات من قبل<br />
المستخدم الأول الذي بینھ وبین المستخدم الثاني زائد 3 ساعات زمنیة ، فإن المستخدم الثاني یرى<br />
توقیت إدخال البیانات بتوقیتھ ھو ) زائد 3 ساعات زمنیة) و لیس بتوقیت المستخدم الأول الذي أدخل<br />
البیانات. یظھر الفارق على شكل عدد من الساعات والدقائق فقط.<br />
توفر مساحة متغیرة لتخزین ال .Binary Data أقصى مساحة یمكن اختیارھا ھي<br />
بایت.<br />
:LONG RAW توفر خدمة مماثلة لل Row ولكن مساحة أكبر 2GB (لا ینصح باستخدامھا)<br />
توفر مساحة كبیرة لتخزین البیانات ، یمكن أن تصل المساحة الى 2GB (لا ینصح<br />
باستخدامھا، ویفضل استخدام CLOB أو .(NCLOB لا یمكن لل Tableأن تحوي أكثر من<br />
Default ھو 6 خانات.<br />
2000<br />
:TIMESTAMP<br />
0.987654321)<br />
:TIMESTAMP WITH TIME ZONE<br />
:TIMESTAMP WITH LOCAL TIME ZONE<br />
:ROW<br />
:LONG<br />
Long واحدة.<br />
:CLOB, NCLOB<br />
:BLOB<br />
.Documents<br />
:BFILE<br />
توفر مساحة 4GB لتخزین<br />
توفر مساحة 4GB لتخزین<br />
ال .Character Data<br />
Unstructured Data مثل Binary Images و<br />
باستخدامھا، تستطیع تخزین بیانات خارج ال Database في ملفات خارجیة، یمكن أن<br />
یصل حجم الملف الخارجي الى .4GB<br />
لتخزین رقم ممیز لكل Row في ال<br />
Database لیستطیع الأوراكل تحدید ال Row بسرعة أكبر عند البحث على البیانات. الفرق بین<br />
ROWID وUROWID أن الأخیرة توفر میزة تسجیل رقم ممیز ل<br />
أي من نوع Database اخر غیر الأوراكل).<br />
No-Oracle تتبع Rows<br />
10 bytes توفر مساحة :ROWID, UROWID<br />
)Tables<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:Collections Data Types<br />
یوجد نوعان فقط ھما:<br />
(VARRAY) :VARYING ARRAYS عبارة عن مجموعة مرتبة من البیانات التي تتكون<br />
من نفس ال Data Type (مثلاً جمیع البیانات أرقام).<br />
:NESTED TABLES عبارة عن مجموعة غیر مرتبة من ال<br />
منفصل عن ال Table بحیث یوجد وصلة "Pointer" من كل Row الى ال<br />
، Rows تخزن ال Rows بشكل<br />
.Table<br />
•<br />
•<br />
:Relationship Data Types (REFs)<br />
یتم استخدام<br />
Pointers لتدل على بیانات مخزنة في Tables مختلفة.<br />
108
MANAGING TABLES<br />
:CREATE TABLES<br />
لتكوین ، Table یتم استخدام جملة CREATE TABLE التي من المفروض قد تعرفت علیھا بالتفصیل<br />
خلال دراستك للامتحان الأول SQL" ."Introduction to لكي یستطیع المستخدم تكوین Table في ال<br />
Schema الخاص بھ ، یجب أن یكون لدیھ ، CREATE TABLE privilege أما لتكوین Table في<br />
.CREATE ANY TABLE privilege لمستخدمین أخرین، یجب أن یكون لدیھ Schemas<br />
ینصح عند تكوین ال<br />
توزیع كل<br />
:Tables<br />
Table على<br />
.Indexes أو Temporary Segments أو Segments<br />
استخدام نظام Locally Managed<br />
.Fragmentation<br />
•<br />
Tablespace مختلفة عن ال Tablespaces التي تحوي<br />
Undo<br />
•<br />
مثال تطبیقي<br />
(أي بدون استخدام جملة ال<br />
(Storage<br />
:7.1<br />
لتكوین Locally Managed Table یمكن كتابة:<br />
أو یمكن اضافة التالي:<br />
CREATE TABLE HR.TEST<br />
(FIRST VARCHAR2 (10), LAST NUMBER);<br />
CREATE TABLE HR.TEST<br />
(FIRST VARCHAR2 (10), LAST NUMBER)<br />
TABLESPACE EXAMPLE<br />
PCTFREE 10 PCTUSED 20<br />
MAXTRANS 200 MINTRANS 1;<br />
لتجنب ال<br />
على اعتبار أن ذكر ،TABLESPACE EXAMPLE یدل على اسم ال Tablespace التي تحوي ال<br />
Table وھي في ھذه الحالة .Example Tablespace وفي حال عدم ذكر ھذه الجملة یتم اختیار ال<br />
Default وھي عادة ما تكون ال .System Tablespace مع العلم أنھ تم تكوین ال Table في ال<br />
.HR الخاصة بالمستخدم Schema<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط بواسطة الزر الیمین على Table ثم اختر Create من القائمة.<br />
ادخل المعلومات المطلوبة (مثل اسم ال (Table ثم اضغط على Apply<br />
یمكن اختیار Create Using Wizard عوضاً عن Create لتسھیل تكوین ال<br />
.Normal<br />
.Table<br />
بجانب ال .Schema Manager<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
109
مثال تطبیقي<br />
لتكوین<br />
:7.2<br />
Dictionary Managed Table یمكن كتابة:<br />
في جملة ال : Storage<br />
CREATE TABLE HR.TEST2<br />
(FIRST VARCHAR2 (10), LAST NUMBER)<br />
TABLESPACE EXAMPLE<br />
PCTFREE 10 PCTUSED 20<br />
MAXTRANS 200 INITRANS 1<br />
STORAGE (INITIAL 200K NEXT 200K<br />
PCTINCREASE 50<br />
MINEXTENTS 1 MAXEXTENTS 5<br />
FREELISTS 1 FREELIST GROUPS 1<br />
BUFFER_POOL DEFAULT) ;<br />
.Extent تحدد حجم أول :INITIAL<br />
:NEXT عند زیادة حجم البیانات یتطلب ذلك اضافة ،Extent حیث تحدد جحم ال<br />
(لیست الثالثة فقط ، إنما كل ما یأتي بعد الثانیة)<br />
:PCTINCREASE تحدد حجم ال<br />
نصف حجم<br />
باضافة نسبة مئویة. مثلاً في ھذه الحالة یصبح حجم ال<br />
ال<br />
.Table التي یمكن أن تخصص لل Extents الحد الأدنى من ال :MINEXTENT<br />
.Table التي یمكن أن تخصص لل Extents الحد الأقصى من ال :MAXEXTENTS<br />
.Table التي یمكن أن تخصص لل Freelist عدد مجموعات ال :FREELIST GROUP<br />
:FREELISTS عدد ال Freelist ضمن المجموعة.<br />
:BUFFER_POOL تطرقنا لھ سابقا<br />
Extent الثانیة.<br />
Extents التالیة<br />
+200K) 300K التالیة Extents<br />
(Default, Keep, Recycle)<br />
.(Extent<br />
(%50)<br />
ملاحظة: لا یشترط كتابة كل عوامل ال ، Storage اذ یمكن أخد القیمة ال Default لكل عامل.<br />
تذكر: ینصح باستخدام ال .Locally Managed Table<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على + ال<br />
اضغط بواسطة الزر الیمین على Table ثم اختر Create من القائمة. ثم ادخل المعلومات المطلوبة<br />
مثل بیانات ال<br />
.Normal<br />
.Schema Manager<br />
Initial Size, Next Size, Increase Size by, Freelists, Groups,<br />
.Buffer pool<br />
اضغط على .Apply<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
110
:CREATING TEMPORARY TABLES<br />
یمكن تكوین Temporary Table لتخزین بیانات مؤقتھ تلزم فقط خلال القیام بأحد المھمات<br />
أو طوال فترة عمل ال ،Session أي في الحالة الأولى یتم حذف البیانات بعد الإنتھاء من<br />
المھمة (مثلاً كتابة ،(Commit أما في الحالة الثانیة یتم حذف البیانات بعد خروج المستخدم من ال<br />
"Transaction"<br />
.Database<br />
لتكوین Temporary Table یتم استخدام ،CREATE GLOBAL TEMPORARY TABLE<br />
ولتحدید اذا ما كانت البیانات سوف تحذف بعد المھمة أو بعد انتھاء ال Session یتم إضافة الجمل التالیة:<br />
تحذف البیانات بعد انتھاء المھمة.<br />
تحذف البیانات بعد انتھاء ال .Session<br />
:ON COMMIT DELETE ROWS<br />
:ON COMMIT PRESERVE ROWS<br />
•<br />
•<br />
تذكر: ال Session من الفصل الأول.<br />
ملاحظة: یمكن تكوین<br />
Views, Indexes على ال Temporary Table كأي Table أخرى.<br />
ملاحظة2: مھمات ال DML (مثل (INSERT, DELETE التي تنفذ على ال Temporary Table لا<br />
تؤدي الى تكوین بیانات في<br />
.Redo Log Files<br />
مثال تطبیقي<br />
:7.3<br />
لتكوین Temporary Table یتم حذف بیاناتھا بعد انتھاء ال :Session<br />
CREATE GLOBAL TEMPORARY TABLE TEMP_TABLE<br />
(TEMP_NAME VARCHAR2 (25), TEMP_DATE DATE)<br />
ON COMMIT PRESERVE ROWS;<br />
:ALTERING TABLES<br />
یمكن القیام بعدة مھمات باستخدام الجملة :ALTER TABLE<br />
:Changing the Block Storage Parameters<br />
یمكن تغییر قیم<br />
تنتمي لھا ال Table و .MINTRANS<br />
PCTUSED, PCTFREE, MAXTRANS,<br />
ملاحظة: یمكن تغییر بعض عوامل جملة ال Storage مثل ال<br />
.Freelists<br />
ولا یمكن تغییر ال Tablespace التي<br />
111
مثال تطبیقي<br />
:7.4<br />
ALTER TABLE HR.TEST2<br />
PCTUSED 40<br />
PCTFREE 20<br />
MAXTRANS 250;<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على + ال<br />
اضغط على +<br />
اختر اسم المستخدم الذي یملك ال Table المراد تغییر خواصھا<br />
اختر اسم ال Table من النافذة الیمنى و اضغط علیھا مرتین (أو بواسطة الزر الیمین للفأرة ، اختر<br />
.Normal<br />
(مثل (HR<br />
.Schema Manager<br />
ال .Table<br />
من القائمة Details" ."View\Edit<br />
ادخل الى قائمة ، Storage وعدل البیانات ثم اختر .Apply<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:Manual Allocating Extents<br />
یمكن اضافة Extents بشكل یدوي الى ال Table باستخدام<br />
القاعدة التالیة:<br />
اذا لم تتم كتابة جملة<br />
، NEXT أما اذا لم تتم كتابة جملة ال<br />
File ضمن ال Tablespace التي تحوي ال<br />
ALTER TABLE [schema.]table_name<br />
ALLOCATE EXTENT<br />
[<br />
SIZE number [K|M]<br />
DATAFILE ‘filename’<br />
]<br />
، یتم تحدید حجم ال<br />
Extent<br />
SIZE number [K|M]<br />
DATAFILE ‘filename’<br />
.Table<br />
بناءاً على الحجم المحدد ب<br />
، فیتم اضافة Extent الى أي<br />
Data<br />
مثال تطبیقي<br />
:7.5<br />
لإضافة Extent بشكل یدوي یمكن كتابة:<br />
ALTER TABLE HR.TEST2<br />
ALLOCATE EXTENT;<br />
112
خ أ<br />
:Moving Tables<br />
یمكن نقل<br />
أن لا تكون<br />
(Partitioned Table (بشرط Table<br />
باستخدام جملة MOVE مع .ALTER SYSTEM<br />
من<br />
عند عملیة نقل ال Table یمكن تغییر ال Storage Parameters كما في المثال<br />
Tablespace الى Tablespace رى<br />
ملاحظة: یمكن تنفیذ العملیة لتغییر خواص ال Storage Parameters دون نقل ال<br />
(بنقل ال Segment الى أخرى) كما في المثال<br />
.7.6<br />
Table الى<br />
.7.6<br />
Tablespace أخرى Table من<br />
ملاحظة2: یحب اعادة تعریف ال Indexes الخاصة بال Table التي تم نقلھا لتجنب الأخطاء.<br />
مثال تطبیقي<br />
ALTER TABLE HR.TEST2 MOVE<br />
TABLESPACE APP_DATA<br />
STORAGE (INITIAL 300K)<br />
PCTUSED 30<br />
INITRANS 2;<br />
:7.6<br />
لتغییر Storage Parameters دون نقل ال<br />
مع العلم أن موقع ال HR.TEST2 ھو ال<br />
Table الى Tablespace أخرى:<br />
ALTER TABLE HR.TEST2 MOVE<br />
TABLESPACE EXAMPLE<br />
STORAGE (INITIAL 300K)<br />
PCTUSED 30;<br />
Example Tablespace قبل المھمة.<br />
:DROPPING TABLES AND COLUMNS<br />
:Truncate a Table<br />
باستخدام أمر ، TRUNCATE TABLE یتم حذف جمیع بیانات ال Table واستعادة المساحة المشغولة<br />
(زیادة المساحة الخالیة) التي كانت تشغلھا البیانات. تعتبر TRUNCATE TABLE من أوامر ال<br />
(DDL) ،DATA DEFINITION LANGUAGE وبالتالي فإنھا لا تسبب تكون Undo Data على<br />
اعتبار أن أوامر ال DDL لا یمكن أن یحدث لھا Rollback (أي أنھ لا یمكن استعادة البیانات بعد حذفھا).<br />
ملاحظات:<br />
-1<br />
استخدام TRUNCATE TABLE یؤدي الى حذف ال Indexes الخاصة بھذه ال .Table<br />
2- لا یمكن استخدامھا على<br />
Table لھا علاقة Foreign Key مع Table أخرى.<br />
113
مثال تطبیقي<br />
:7.7<br />
یمكن للمستخدم HR كتابة التالي<br />
:<br />
TRUNCATE TABLE TEST2;<br />
أما ال DBA أو أي مستخدم أخر یملك الصلاحیات "Privileges" اللازمة، فیجب ذكر ال<br />
:Schema<br />
TRUNCATE TABLE HR.TEST2;<br />
:Drop a Table<br />
یمكن حذف Table بالكامل مع بیاناتھا باستخدام<br />
أمر .DROP TABLE یجب إضافة جملة<br />
CASCADE CONSTRAINTS اذا كان لل Table علاقة Foreign key مع Table أخرى.<br />
مثال تطبیقي<br />
:7.8<br />
لحذف Table بالكامل من ال<br />
:Database<br />
DROP TABLE HR.TEST2;<br />
:Dropping a Column<br />
یمكن حذف Column والبیانات التي یحویھا من ال Table باستخدام .ALTER TABLE قد تتطلب<br />
لل Tables التي تحوي بیانات ضخمة<br />
عملیة حذف Column مدة طولیة جداً و<br />
جداً. في ھذه الحالة، یفضل وضع ال Column ضمن قائمة ال ثم حذفھ بعد الأنتھاء من وقت<br />
الذروة (أي عندما تكون المھمات التي تجري على ال Table قلیلة).<br />
وضع ال Column في حالة ال ، UNUSED ھو مشابھ لعملیة حذفھ (لكنھ في الواقع موجود)، اذ لا یمكن<br />
استخراج البیانات من أو مشاھدتھ عند استخدام أمر .DESCRIBE<br />
استخدام أمر ALTER TABLE لحذف ، Column یسمح فقط بحذف Column واحدة كل مرة، ولكن<br />
باستخدام ، UNUSED یمكن وضع أكثر من Column في ھذه الحالة ثم حذفھا جمیعا في نفس الوقت.<br />
یجب إضافة جملة CASCADE CONSTRAINTS اذا كان لل Column علاقة Foreign key مع<br />
Column أخر.<br />
Undo Space كبیرة جداً<br />
UNUSED<br />
ملاحظة: یحب على الأقل أن یبقى Column واحد في ال Table بعد الحذف وإلا لن تنجح عملیة الحذف ،<br />
ولا یمكن استرجاع ال Column المحذوف بعد حذفھ.<br />
114
مثال تطبیقي<br />
:7.9<br />
لحذف Column بشكل مباشر:<br />
ALTER TABLE HR.TEST<br />
DROP COLUMN LAST CASCADE CONSTRAINTS;<br />
في حالة ال Column الذي یحوي بیانات كبیرة ، وتوقفت عملیة الحذف قبل حذف ال Column یمكن كتابة:<br />
لوضع ال<br />
ALTER TABLE HR.TEST<br />
DROP COLUMNS CONTINUE;<br />
:UNUSED في حالة Column<br />
ALTER TABLE HR.EMPLOYEES<br />
SET UNUSED COLUMN PHONE_NUMBER CASCADE CONSTRAINTS;<br />
لحذف ال<br />
ALTER TABLE HR.EMPLOYEES<br />
DROP UNUSED COLUMNS;<br />
:Unused Columns<br />
:QUERYING TABLE INFORMATION<br />
لمعرفة ال Unused Columns في ال ،Table یستخدم :<br />
:DBA_UNUSED_COL_TABS یوفر<br />
معلومات حول ال Columns الموضوعة في حالة<br />
، UNUSED و اسم ال Table واسم المستخدم المالك لل<br />
.Table<br />
•<br />
للحصول على معلومات حول ال<br />
Tables<br />
یمكن استخدام:<br />
:DBA_TABLES یوفر معلومات عدیدة مثل اسم ال Table واسم ال Tablespace التي تنتمي<br />
لھا ال Table و اسم المستخدم الذي یملك ال Table وخواص ال<br />
و غیرھا.<br />
.Table من ضمنھا ال "Objects" یوفر معلومات حول جمیع العناصر :DBA_OBJECTS<br />
من المعلومات المتوفرة اسم العنصر و توقیت تكوینھ و الحالة التي ھو علیھا و غیرھا من<br />
المعلومات.<br />
(PCTUSED (مثل Storage<br />
•<br />
•<br />
للحصول على معلومات حول ال Columns في ال Table یمكن استخدام:<br />
:DBA_TAB_COLUMNS یوفر معلومات عدیدة مثل اسم ال<br />
وخواص ال Column وغیرھا.<br />
Column واسم ال Table<br />
•<br />
ملاحظة: كما یوجد view باسم DBA_TABLES یوجد ایضاً USER_TABLES<br />
في الفصل الثالث.<br />
وALL_TABLES. تذكر اقسام ال<br />
Dictionary Views<br />
115
MANAGING INDEXES<br />
یساعد ال Index في تسریع استخراج البیانات من ال Tables كما یخفف من ال Input/Output<br />
الناتج عن ال Queries (لأنھ یمنع حدوث بحث كامل على ال Table للحصول على البیانات). یوجد<br />
خواص مشتركة بین ال Table و ال ،Index حیث كما أنھ یمكن تكوین<br />
Index مشابھ لل<br />
أیضاً تكوین<br />
Partitioned Table یمكن<br />
،Partitioned Index ایضاً یوجد Storage Parameters لل<br />
.Table لل Storage Parameters<br />
یمكن أن یتم تكوین ال Index ل Column واحد فقط ویسمى في ھذه الحالة ، Single Index كما<br />
ویسمى في ھذه<br />
یمكن تكوین ال Index لیشمل أكثر من Column (الحد الأقصى<br />
لا یوجد حد لعدد ال Indexes التي یمكن تكوینھا على ال ، Table ویتم<br />
ادارة ال Index من قبل ال<br />
( 32 Columns<br />
الحالة .Composite Index<br />
.Oracle Server<br />
من أنواع ال<br />
:Index<br />
Rows یمكن تكوین ھذه النوع لضمان عدم وجود بیانات متشابھ في ال :UNIQUE INDEX<br />
ضمن ال Column الذي تم تكوین Index علیھ.<br />
:NON-UNIQUE INDEX یسمح ھذه النوع بتشابھ بیانات ال Rows في ال Column الذي<br />
تم تكوین<br />
:FUNCTION-BASED INDEX یمكن تكوین ھذا النوع لتسریع استخراج البیانات من ال<br />
Columns التي تحتوي على عملیات مختلفة"Functions" مثل استخدام ال SUBSTR أو<br />
.Column أو غیرھا في ال REPLACE أو INSTR<br />
:PARTITIONED INDEX یتم تكوین أكثر من INDEX في أكثر من<br />
یستخدم لل Tables التي تحوي بیانات كبیرة جداً وغالباً ما یستخدم لل<br />
Segment في<br />
Index علیھ.<br />
Tablespaces مختلفة.<br />
.Partitioned Tables<br />
•<br />
•<br />
•<br />
•<br />
یمكن أن یتم تكوین ال Index اعتماداً على نموذجین ھما B-Tree Index أو<br />
.Bitmap Index<br />
:B-TREE INDEX<br />
التكوین الداخلى لل Index یكون على شكل شجرة لھا أصل وفروع. تتكون الشجرة من ثلاثة أجزاء ھي ال<br />
Root المتصل بال Branches المتصلة بال Leafs التي تحتوي على ال Index Entries التي تشیر أو<br />
في الرسم 7.1 یدل الرقم 1 على ال<br />
في ال Table باستخدام ال<br />
تدل على ال 2 على ال Branch والرقم 3 على ال<br />
. ROWIDs Lists<br />
.Leaf<br />
Rows<br />
، Root الرقم<br />
یتكون كل ال Index Entry من أربعة أجزاء ھي:<br />
:HEADER یتم تخزین فیھ عدد<br />
.(Composite<br />
.Column الذي یحدد حجم ال :COLUMN LENGTH<br />
.Column الذي یحدد قیمة ال :COLUMN VALUE<br />
:ROWID أرقام ال ROWIDs الخاصة بال<br />
ال Columns التي تعتمد على نوع ال Single, ) Index<br />
.Table في ال Rows<br />
•<br />
•<br />
•<br />
•<br />
116
7.1 رسم<br />
ملاحظات:<br />
Rows<br />
Table یقوم<br />
1- عندما یحدث عملیة INSERT لل الأوراكل بإضافة Index Entry جدید لیمثل ال<br />
الجدیدة المضافة.<br />
2- لا یمكن الإستفادة من B-Tree Index في ال Rows التي تحوي على .NULL أي عند البحث بواسطة<br />
فإن الأوراكل یقوم بإجراء بحث كامل<br />
على ال Table ولا یقوم باستخدام ال .Index<br />
3- یفضل استخدامھا على ال Column الذي یحوي بیانات مختلفة (ممیزة) كبیرة مثل أرقام الھاتف<br />
وعناوین الموظفین<br />
4- لا یفضل استخدامھا على ال Columns التي تتعرض لجملة ال OR بشكل مستمر.<br />
جملة WHERE عن قیمة (where last_name = null) NULL<br />
.<br />
ROWIDs<br />
:BITMAP INDEX<br />
التكوین الداخلى لل Index یشبھ تكوین ال B-Tree عدا عن استخدام یتم استخدام خریطة<br />
بحیث یمثل كل بایت . ROWID<br />
لتحدید ال<br />
Table في ال Rows<br />
بایتات "Bitmap"<br />
ملاحظات:<br />
-1<br />
یفضل استخدامھا على ال Column الذي لا یحدث لبیاناتھ تجدید مستمر Update" ."Low<br />
بشكل متكرر.<br />
2- یفضل استخدامھا عند استخدام<br />
3- یفضل استخدامھا على ال Table التي تحوي بیانات كبیرة جداً ونسبة البیانات المختلفة (الممیزة) قلیل<br />
جداً مثل نوع الإنسان (ذكر أو انثى).<br />
4- عندما یحدث تغییر لبیانات ال ،Column یتم تجدید ال Bitmap لتناسب التغییر.<br />
OR أو WHERE<br />
117
:CREATING B-TREE INDEXES<br />
قبل تكوین ال Index ینصح بالتالي:<br />
تكوین أقل عدد ممكن من ال<br />
Indexes یبطئ ھذا النوع من العملیات.<br />
وضع ال<br />
Indexes على<br />
Indexes في Tablespace خاصة.<br />
اختیار NOLOGGING لل<br />
Indexes الكبیرة.<br />
Table تجري علیھا عملیات DML كثیرة، لأن ال<br />
قیمة العامل INITRANS یجب أن تكون أكبر من مثیلتھا التي حددت على ال .Table<br />
•<br />
•<br />
•<br />
•<br />
لتكوین B-Tree Index یجب اتباع القاعدة التالیة:<br />
CREATE [UNIQUE] INDEX index_name<br />
ON [schema.]TABLE (Column [ASC | DESC] , Column [ASC|DESC] , …)<br />
[TABLESPACE tablespace_name]<br />
[PCTFREE number]<br />
[MAXTRANS number]<br />
[MINTRANS number]<br />
[LOGGING | NOLOGGING]<br />
[NOSORT]<br />
[STORAGE INITIAL number K|M NEXT number K|M …..]<br />
في القاعدة:<br />
:PCTFREE ھي المساحة التي تحجز في كل Block عند تكوین ال Index لكي تستقبل ال<br />
Oracle<br />
Indexes الجدیدة.<br />
•<br />
•<br />
•<br />
:NOSORT تحدد أن ال Rows مرتبة بالترتیب التصاعدي وبالتالي لا یجب على ال<br />
.Index عند تكوین ال Rows ترتیب ال Server<br />
Index بشكل تصاعدي أو<br />
:ASC|DESC تحدید اذا ما كان على ال<br />
تنازلي.<br />
ملاحظة: لا یمكن تحدید ال PCTUSED لل<br />
Oracle Server تكوین ال<br />
.Index<br />
مثال تطبیقي<br />
لتكوین<br />
:7.10<br />
:B-Tree Non-Unique Index<br />
CREATE INDEX ind_HR_test<br />
ON HR.TEST (FIRST)<br />
PCTFREE 30<br />
STORAGE (INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50)<br />
TABLESPACE INDX;<br />
لتكوین B-Tree Unique Index أضف كلمة UNIQUE بعد CREATE مباشرة.<br />
118
:CREATING BITMAP INDEXES<br />
لتكوین Bitmap Index یجب إضافة كلمة BITMAP الى جملة CREATE INDEX التي تم<br />
استخدامھا في المثال یمكن تحدید الحجم المخصص من الذاكرة لتخزین الBitmap بتحدید<br />
العامل CREATE_BITMAP_AREA_SIZE الذي قیمتھ في الحالة<br />
بزیادة حجم قیمة العامل، یتم تكوین ال Index بسرعة أكبر، ولكن ینصح باستخدام قیمة صغیرة اذا كانت<br />
البیانات الممیزة (المختلفة) في ال Column قلیلة جداً (بیانات مختلفة كبیرة = ذاكرة كبیرة).<br />
.8MB ھو Default<br />
.7.10<br />
مثال تطبیقي<br />
:7.11<br />
CREATE BITMAP INDEX ind_HR_jobid<br />
ON HR.JOBS (JOB_ID)<br />
PCTFREE 30<br />
STORAGE (INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50)<br />
TABLESPACE INDX;<br />
مثال تطبیقي<br />
:7.12<br />
یمكن تكوین B-Tree Index أو Bitmap Index عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على + ال<br />
اضغط على مجلد Index ثم بواسطة الزر الیمین للفأرة اختر من القائمة<br />
ادخل اسم ال Index وأختر ال Schema و ال Tablespace من القوائم ، ثم اختر ال Column<br />
أو ال Columns المراد وضع Index لھا من قائمة<br />
لتكوین ، Bitmap Index ضع علامة داخل المربع الصغیر (فوق زر بجانب كلمة<br />
.Normal<br />
.Create<br />
.Table Columns<br />
(Create<br />
.Schema Manager<br />
.Bitmap<br />
أختر باقي البیانات من القوائم الأخرى<br />
اضغط على زر<br />
(Storage, Partitions, Options)<br />
.Create<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
119
:ALTERING INDEXES<br />
یمكن القیام بعدة مھمات باستخدام جملة :ALTER INDEX<br />
:Changing the Block Storage Parameters<br />
یمكن تغییر قیم<br />
.MAXEXTENTS<br />
بعض العوامل مثل MAXTRANS ویمكن تغییر بعض عوامل جملة ال Storage مثل ال<br />
مثال تطبیقي<br />
ALTER INDEX ind_HR_jobid<br />
MAXTRANS 250<br />
STORAGE (MAXEXTENTS 200);<br />
:7.13<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على + ال<br />
اضغط على +<br />
اختر اسم المستخدم الذي یملك ال Index المراد تغییر خواصھا<br />
اختر اسم ال Index من النافذة الیمنى و اضغط علیھا مرتین (أو بواسطة الزر الیمین للفأرة ، اختر<br />
.Normal<br />
(مثل (HR<br />
.Schema Manager<br />
ال .Index<br />
من القائمة Details" ."View\Edit<br />
ادخل الى قائمة ، Storage وعدل البیانات ثم اختر .Apply<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:Allocating & Deallocating Extents<br />
یمكن اضافة<br />
بنفس الشروط.<br />
Extents الى<br />
مساحة ال Index بنفس الطریقة المستخدمة في إضافة<br />
كما یمكن حذف Extents فارغة غیر مستخدمة من مساحة ال Index بتعویض جملة ال<br />
Table الى ال Extent<br />
ALLOCATE EXTENT بالجملة التالیة:<br />
DEALLOCATE UNUSED [KEEP number [K|M]]<br />
في القاعدة:<br />
:KEEP لإبقاء مساحة خالیة من ال<br />
.Unused Extents<br />
•<br />
120
مثال تطبیقي<br />
لإضافة<br />
:7.14<br />
: Extent<br />
ALTER INDEX ind_HR_jobid<br />
ALLOCATE EXTENT SIZE 200K;<br />
لحذف مساحة خالیة<br />
ALTER INDEX ind_HR_jobid<br />
DEALLOCATE UNUSED;<br />
:(Extents)<br />
:Rebuilding Indexes<br />
Index الى<br />
لنقل ال Tablespace أخرى أو لتغییر خواص ال<br />
ALTER INDEX مع REBUILD كما توضح القاعدة:<br />
في القاعدة:<br />
Storage Parameters یمكن استخدام<br />
ALTER INDEX [schema.]Index_name REBUILD<br />
[TABLESPACE tablespace_name]<br />
[PCTFREE number]<br />
[INITRANS number]<br />
[MAXTRANS number]<br />
[LOGGING | NOLOGGING]<br />
[REVERSE | NOREVERSE]<br />
[STORAGE (INITIAL SIZE [K|M] NEXT SIZE [K|M] ….]<br />
:REVERSE یمكن تحویل ال Index الى نوع Reverse Key Index باضافة الجملة الى<br />
القاعدة. ھذا النوع یعرف بیانات ال Column بشكل عكسي ، مثلاً لو كان Order_ID یحتوي<br />
على الرقم 12345 فإن الأوراكل یعكس الرقم الى 54321 ویضیف ال Column الى ال .Index<br />
ھذا النوع بستخدم بالعادة مع ال Columns المعرفة بیاناتھا بشكل تصاعدي، اذ یتم توزیع البیانات<br />
المتقاربة الى Leafs مختلفة لیتم تسھیل أخراج البیانات بسرعة أكبر.<br />
•<br />
نتائج عملیة ال : Rebuild Index<br />
بعد انتھاء العلمیة، یتم تكوین Index جدید و حذف الأصلي، بحیث تساعد على تكوین Index جدید<br />
متكامل غیر ال Index الأصلي الذي قد یكون قد فقد جزء من مساحة نتیجة للتغیرات التي تطرأ على<br />
، وبالتالي استخدام وتخصیص<br />
ال Rows مثل حذف البیانات و تجدیدھا<br />
المساحة بشكل أفضل.<br />
(Fragmentation)<br />
خلال العملیة ، یمكن لل Queries استخدام ال Index الأصلي.<br />
•<br />
•<br />
ملاحظة: لا یمكن استخدام Rebuild لتغییر ال Index من B-Tree الى Bitmap أو بالعكس.<br />
121
مثال تطبیقي<br />
:7.15<br />
للقیام بعمیلة Rebuild على ال :Index<br />
ALTER INDEX ind_HR_Jobid REBUILD<br />
TABLESPACE INDX02;<br />
:Rebuilding ONLINE<br />
أحیاناً تستھلك عملیة Rebuild وقت كبیر جداً عندما تكون ال Table كبیرة جداً. في السابق لم یكن بالمقدور<br />
القیام بمھمات ال DML على ال Table التي یجري عملیة Rebuild Index على Index مخصصة لھا.<br />
یمكن أن تجري مھمات ال DML بینما تتم عملیة<br />
في النسخ الحدیثة من أوراكل<br />
بإضافة ONLINE الى جانب ،REBUILD ولكن لا ینصح بالقیام بمھمات كبیرة<br />
ویفضل الاقتصار على المھمات الصغیرة.<br />
(Oracle9i و Oracle8i)<br />
Rebuild Index<br />
ملاحظة: لا یسمح بكل الأحوال القیام بمھمات ال DDL على ال Table خلال ال .Rebuild Index<br />
مثال تطبیقي<br />
:7.16<br />
للقیام بعمیلة Rebuild Online على ال :Index<br />
ALTER INDEX ind_HR_Jobid REBUILD ONLINE;<br />
.Index على ال Coalesce<br />
:Coalescing Indexes<br />
یمكن التخلص من أثار ال Fragmentation في ال Index بالقیام بعملیة<br />
كما یبدو في الرسم leafs تعرضتا لعملیات أدت الى حدوث Fragmentation فأصبحت كل<br />
واحد منھما نصف ممتلئة، ولكن بعد حودث Coalesce تم دمج النصفین مع بعضھما مما نتج عن وجود<br />
Leaf فارغة تماما.<br />
،7.2 وجود 2<br />
7.2 رسم<br />
122
مثال تطبیقي<br />
:7.17<br />
للقیام<br />
بعملیة Coalescing لل<br />
:Index<br />
ALTER INDEX HR.ind_hr_jobid COALESCE;<br />
:Identify Unused Indexes<br />
یمكن وضع Index تحت المراقبة لمعرفة اذا كان یستخدم أم لا، وبالتالي حذفھ في حال عدم استخدامھ. یتم<br />
جمع المعلومات حول ال<br />
.V$OBJECT_USAGE المراقب في index<br />
ملاحظة: كل مرة یتم فیھا مراقبة ال ، Index یتم إلغاء البیانات السابقة لل Index في<br />
ال .V$OBJECT_USAGE<br />
مثال تطبیقي<br />
:7.18<br />
لوضع ال Index تحت المراقبة:<br />
لوقف مراقبة ال :Index<br />
ALTER INDEX HR.ind_hr_jobid MONITORING USAGE;<br />
ALTER INDEX HR.ind_hr_jobid NOMONITORING USAGE;<br />
:ANALYZING INDEXES<br />
یمكن استخدام جملة ANALYZE INDEX للقیام:<br />
التأكد من أن ال Blocks الخاصة بال Index لا تحتوي على بیانات فاسدة " Block<br />
."Corruption<br />
للحصول على معلومات حول ال<br />
.Index<br />
•<br />
•<br />
Index في View اسمھ<br />
Blocks المستخدم<br />
بعد القیام ب ANALYZE INDEX یتم تخزین معلومات حول ال<br />
، یعرض ھذا ال View معلومات عن عدد ال Blocks وعدد ال<br />
ولكن أھم من ذلك ھو رقمي كل من LF_ROWS و ، DEL_LF_ROWS بحیث اذا زادت النسبة بین<br />
الرقمین عن 30% (مثلاً الرقم الأول یساوي 50 والثاني یساوي 100، فھذا یعني النسبة %50) فھذا یعني<br />
أن ال Index تعرض لحذف بیانات "Rows" كثیرة مما قد ینتجھ عن Fragmentation في ال .Index<br />
INDEX_STATS<br />
123
مثال تطبیقي<br />
للقیام بعملیة<br />
:7.19<br />
:Index لل Analyze<br />
ANALYZE INDEX HR.JOB_ID_PK VALIDATE STRUCTURE;<br />
بعد ذلك استخرج المعلومات من :INDEX_STATS<br />
SELECT BLOCKS , PCT_USED, LF_ROWS , DEL_LF_ROWS<br />
FROM INDEX_STATS;<br />
یظھر في جھازي الناتج التالي:<br />
BLOCKS PCT_USED LF_ROWS DEL_LF_ROWS<br />
----------- ---------- ---------- ----------<br />
0 19 9 16<br />
وكما تلاحظ النسبة بین الرقمین لا تتجاوز ال 30%.<br />
:DROPPING INDEXES<br />
عند عدم الحاجة لل Index أو عند حدوث خلل لھ أو عند تحول حالة ال Index الى INVALID بسبب<br />
حدوث خلل لل<br />
.DROP INDEX بواسطة جملة Index یمكن حذف ال ، Instance<br />
ملاحظة: لا یمكن حذف ال Index اذا كان<br />
.FK ولدیھ علاقة مع Unique Key أو Primary Key<br />
مثال تطبیقي<br />
لحذف<br />
:7.20<br />
:Index<br />
DROP INDEX hr.ind_hr_jobid;<br />
أو عبر ال Console باتباع الخطوات التالیة:<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على + ال<br />
اضغط على +<br />
اختر اسم المستخدم الذي یملك ال Index المراد حذفھ (مثل (HR<br />
اختر اسم ال Index من النافذة الیمنى و بواسطة الزر الیمین للفأرة ، اختر من القائمة<br />
أو من القائمة الأساسیة،<br />
اختر<br />
.Normal<br />
.(Remove ثم Object<br />
.Schema Manager<br />
ال .Index<br />
)"Remove"<br />
.Yes<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
124
:QUERYING INDEX INFORMATION<br />
للحصول على معلومات حول ال Index یمكن استخدام:<br />
:DBA_INDEXES یوفر معلومات عدیدة مثل اسم ال Index ونوعھ واسم ال Tableالتي<br />
ینتمي لھا ال Index واسم المستخدم الذي یملك ال Index وخواص ال Storage وغیرھا.<br />
:DBA_IND_COLUMNS یوفر معلومات عدیدة مثل اسم ال<br />
التي وضع علیھا ال وخواص ال Column وغیرھا.<br />
Column واسم ال Index<br />
Index<br />
:DBA_IND_EXPRESSIONS<br />
یوفر معلومات حول ال<br />
.Function-Based Indexes<br />
:V$OBJECT_USAGE<br />
یوفر معلومات ناتجة عن عملیة .Monitoring Index یوفر<br />
معلومات حول مثل اسم ال Index ونوعھ واسم ال Tableالتي ینتمي لھا ال Index واذا ما كان<br />
یحرى عملیة Monitoring على ال Index أم لا ) USED التي تدل على اذا ما كان تم استخدام<br />
ال Index خلال المراقبة )، وقت بدایة وانتھاء المراقبة ."Monitoring"<br />
•<br />
•<br />
•<br />
•<br />
125
MANAGING CONSTRAINTS<br />
یمكن وضع قوانین على ال Data (مثلاً عدم السماح بوجود بیانات متشابھ في ،(Column باستخدام كل من<br />
.Integrity Constraints و ، Database Triggers ، Application Code<br />
ال Application Code عبارة عن برمجة كود محدد (مثل برمجة الجافا) یعمل كبرنامج لوحده في ال<br />
Client أو من ضمن ال Database على شكل .Procedure أما ال<br />
من تكوین ، PL/SQL یتم تنفیذھا عند حدوث مھمة محددة في ال Database مثل القیام ب INSERT أو<br />
Database Triggers فھي برامج<br />
.UPDATE<br />
:INTEGRITY CONSTRAINTS<br />
یفضل استخدام ھذا النوع عن النوعیین الأخریین لسھولة تكوینھ وتعدیلھ ، ولسھولة تشغیلھ أو وقف تشغیلھ،<br />
ولإمكانیة استخراج معلومات عنھ من ال .Data Dictionary یوجد عدة أنواع من ال<br />
Integrity<br />
Constraint ھي:<br />
:NOT NULL یحدد أنھ لا یمكن لل Column أن یحتوي على )NULL كل ال Rows یجب أن<br />
تحتوي على بیانات ، لا یمكن أن یكون أحدھا فارغاً)<br />
:UNIQUE تحدد أن القیم الموجودة في ال Column(أو أكثر من (Column ممیزة ولا یمكن<br />
أن تتشابھ، یستخدم ھذا النوع عادة عند تخصیص رقم ممیز لكل موظف في الشركة. یسمح ال<br />
UNIQUE باستخدام قیم NULL في ال<br />
:PRIMARY KEY تحدد أن ال Column (أو أكثر من (Column ھو ال<br />
في ال .Table تكون مھمة ال PK بضمان عدم تشابھ بیانات ال Rows في ال Column وعدم<br />
إحتواء ال<br />
تحدد أن ال Column (أو أكثر من (Column ھو<br />
أو في<br />
:CHECK تحدد قانون یجب على كل ال (مثل أن یكون قیم ال<br />
بجنس الإنسان، إما M أو ، F ولا یمكن ادخال أي بیانات أخرى).<br />
Primary Key<br />
Foreign Key في ال<br />
Table أخرى.<br />
Rows الخاصة<br />
.Rows<br />
.NULL على قیمة Rows<br />
:FOREIGN KEY<br />
Table في ال Unique أو PK یتصل مع ، Table<br />
Rows تنفیذه<br />
•<br />
•<br />
•<br />
•<br />
•<br />
حالات ال :Integrity Constraints<br />
Constraints<br />
في أربع حالات تؤثر على البیانات المخزنة في ال Table والبیانات الجدیدة<br />
یمكن وضع ال<br />
التي سوف یتم ادخالھا مستقبلاً:<br />
:DISABLE NOVALIDATE في حال وضع ال Constraint في ھذه الحالة، لا یتم فحص<br />
البیانات الموجودة ولا یتم فحص البیانات المستقبلیة لمعرفة اذا كانت تتطابق مع القانون أو الشرط<br />
الذي یحدده ال<br />
یتم ایقاف عمل ال Constraint وحذف ال Index المخصص لھا<br />
وعدم السماح بالقیام بأي تعدیلات على البیانات المخزنة (عدم السماح بعملیات .(DML<br />
:ENABLE NOVALIDATE لا یتم فحص البیانات المخزنة لمعرفة اذا ما كانت تتطابق مع<br />
قانون ال Constraint و لكن لا یسمح بادخال بیانات جدیدة تتعارض مع ال<br />
یتم فحص البیانات الجدیدة والبیانات المستقبلیة والتأكد أنھا تتطابق<br />
في حال وجود بیانات لا تتطابق مع ال Constraint فیجب حذفھا أو تغییرھا<br />
مع ال<br />
وإلا لا یمكن الدخول الى ھذه الحالة.<br />
.Constraint<br />
.Constraint<br />
:DISABLE VALIDATE<br />
:ENABLE VALIDATE<br />
.Constraint<br />
•<br />
•<br />
•<br />
•<br />
126
ملاحظات:<br />
-1<br />
لا ینصح التحویل من الحالة الأولى أو الثانیة مباشرة الى الحالة الرابعة ، اذ أن ذلك یؤدي الى عمل<br />
Locks على كل ال Table مما قد یؤدي الى تأخر انجاز مھمات ال ،DML لذلك ینصح بالتحویل الى حالة<br />
Enable Novalidate أولاً قبل التحویل ال<br />
.Enable Validate<br />
-2<br />
عندما یتم تحویل<br />
حالة ، Disable فإن ال Index الموجود یتم حذفھ والعكس صحیح.<br />
Constraint تستخدم Primary Key أو Unique Key من حالة Enable الى<br />
التحول من حالة Enable Novalidate الى حالة<br />
.DDL لا یوقف عملیات ال ، Enable Validate<br />
-3<br />
:CONSTRAINTS CHECKING<br />
یمكن لل Constraints أن یقوم بفحص البیانات المدخلة الى ال Table إما عند نھایة كل مھمة من مھمات<br />
ال DML و یسمى في ھذه الحالة Nondeferred أو ، Immediate أو یمكن لل Constraints أن یقوم<br />
بفحص البیانات عند كتابة Commit (قد یشمل مجموعة من المھمات) ویسمى في ھذه الحالة ،Deferred<br />
في كلتا الحالتین یتم عمل Rollback للمھمات التي انجزت اذا لم تتوافق مع قانون ال<br />
یفضل استخدام الحالة الثانیة التي تنقسم الى قسمین بحیث تستطیع أن تشابھ الحالة Nondeferred والحالة<br />
Deferred معاً، القسمین ھما:<br />
.Constraint<br />
.Nondeferred تعمل كعمل ال :INITIALLY IMMEDIATE<br />
.Deferred<br />
•<br />
•<br />
:INITIALLY DEFERRED تعمل كمل ال<br />
لوضع ال Constraint في احدى الحالتین یتم استخدام القاعدة التالیة:<br />
SET CONSTRAINT | CONSTRAINTS<br />
(constraint_name | ALL)<br />
(IMMEDIATE | DEFERRED)<br />
یمكن أیضاً استخدام ALTER SESSION كما في القاعدة (تعمل في ال Session المحدد فقط):<br />
ALTER SESSION<br />
SET CONSTRAINT[S] = (IMMEDIATE | DEFERRED | DEFAULT)<br />
مثال تطبیقي<br />
لتغییر حالة كل ال<br />
:7.21<br />
:Deferred الى Constraints<br />
SET CONSTRAINTS ALL DEFERRED;<br />
127
:CREATING CONSTRAINTS<br />
یمكن تكوین ال<br />
یمكن تكوین ال Constraints في ال Column-Level أو في ال Table-Level على أن الأخیرة تسمح<br />
بتكوین ال Constraint لأكثر من Column واحد وھذا لا تسمح بھ الأولى.<br />
یجب أن یكون للمستخدم REFERENCES Privilege اللازمة لكي یستطیع تكوین<br />
Schemas أخرى غیر ال Schema الخاص بھ.<br />
.ALTER TABLE أو جملة CREATE TABLE باستخدام جملة Constraints<br />
Constraints في<br />
لتكوین Constraints في ال :Column-Level<br />
CREATE TABLE table_name<br />
(column_name TYPE [CONSTRAINT constraint_name] C1 | C2 | C3 | C4| C5)<br />
[NOT DEFERRABLE | DEFERRABLE [INITIALLY (IMMEDIATE |<br />
DEFERRED)] ]<br />
[DISABLE | ENABLE [VALIDATE | NOVALIDATE]<br />
أما ال ,C1 ,C2 ,C3 C4 فھي أنواع ال :Constraints<br />
[NOT] NULL =C1<br />
UNIQUE [USING INDEX ….] =C2<br />
PRIMARY KEY [USING INDEX…] =C3<br />
REFERENCES [schema.] table_name [(column_name)] [ON DELETE =C4<br />
CASCADE]<br />
CHECK (condition) =C5<br />
اما جملة USING INDEX فھي تتطابق مع جملة CREATE INDEX عدا استخدام USING عوضاً<br />
وعدم<br />
وعدم تحدید الجزء<br />
ذكر اسم ال .Index<br />
،ON [schema.]TABLE (Column [ASC | DESC]<br />
عن CREATE<br />
في القاعدة:<br />
:ON DELETE CASCADE تضمن حذف البیانات المرتبطة في ال Child بواسطة FK مع<br />
ال Parent (راجع الأمتحان الأول .(Introduction to SQL<br />
•<br />
:Column-Level<br />
مثال تطبیقي 2.22:<br />
لتكوین Constraints في ال<br />
CREATE TABLE hr.new_emp (<br />
Emp_id NUMBER(8) CONSTRAINT new_emp_id_pk PRIMARY KEY<br />
DEFERRABLE INITIALLY DEFERRED<br />
USING INDEX STORAGE (INITIAL 100K NEXT 100K) TABLESPACE indx,<br />
Emp_Name VARCHAR2(20) CONSTRAINT new_emp_name NOT NULL,<br />
Salary NUMBER(10) CONSTRAINT new_emp_ck CHECK (salary >0)<br />
);<br />
128
CREATE TABLE table_name<br />
(column_name TYPE , column_name TYPE, …. ,<br />
لتكوین Constraints في ال :Table-Level<br />
[CONSTRAINT constraint_name]<br />
PRIMARY KEY (column_name , column_name, …) [USING INDEX ….]<br />
| UNIQUE (column_name , column_name, …) [USING INDEX ….]<br />
| REFERENCES [schema.] table_name [(column_name, column_name, …)]<br />
[ON DELETE CASCADE]<br />
| CHECK (condition)<br />
[NOT DEFERRABLE | DEFERRABLE [INITIALLY (IMMEDIATE |<br />
DEFERRED)] ]<br />
[DISABLE | ENABLE [VALIDATE | NOVALIDATE]<br />
);<br />
ملاحظة: لا یمكن تكوین NOT NULL Constraint إلا في ال .Column-Level<br />
:Table-Level<br />
مثال تطبیقي 2.23:<br />
لتكوین Constraints في ال<br />
CREATE TABLE hr.new_emp<br />
(<br />
Emp_id NUMBER(8)<br />
Dept_id NUMBER (8)<br />
Emp_Name VARCHAR2(20) CONSTRAINT new_emp_name NOT NULL,<br />
Dept_name VARCHAR2(20),<br />
Salary NUMBER(10),<br />
CONSTRAINT new_emp_id_pk PRIMARY KEY (Emp_id , Dept_id)<br />
DEFERRABLE<br />
USING INDEX STORAGE (INITIAL 200K NEXT 200K) TABLESPACE indx<br />
CONSTRAINT new_emp_ck CHECK (salary > 0)<br />
);<br />
ملاحظة: لتكوین Constraint عبر ال Console اتبع خطوات تكوین ال Table مع التأكد من ادخال<br />
البیانات في القائمة<br />
.Table<br />
.Constraints<br />
تذكر: یفضل توزیع ال Indexes الى Tablespace مختلفة عن ال<br />
129
:USING ALTER TABLE<br />
یمكن استخدام جملة ALTER TABLE لتكوین أو تعدیل حالة ال .Constraints<br />
:Creating Constraints<br />
كما ذكرنا قبل قلیل أنھ یمكن تكوین Constraints باستخدام CREATE TABLE أو باستخدام جملة<br />
ALTER TABLE كما في المثال<br />
مثال تطبیقي<br />
لإضافة<br />
.2.24<br />
:2.24<br />
:ALTER TABLE بواسطة Constraints<br />
ALTER TABLE hr.new_emp ADD<br />
(<br />
CONSTRAINT new_emp_id_fk FOREIGN KEY (Dept_id)<br />
REFERENCES hr.departments (id)<br />
DEFERRABLE<br />
);<br />
لا یمكن تطبیق ھذا المثال على ال ، NOT NULL اذ یستخدم التالي لإضافة Constraint من ھذا النوع،<br />
أو للتحویل بین NOT NULL و :NULL<br />
ALTER TABLE hr.new_emp MODIFY Dept_name NOT NULL;<br />
:Enabling Constraints<br />
یمكن تحویل حالة ال Constraint من Disable الى Enable باستخدام .ALTER TABLE<br />
:Enable Novalidate<br />
یفضل التحویل الى ھذه الحالة أولاً قبل التحویل الى الحالة<br />
PK Constraints لأن ذلك یؤدي الى عمل Locks على كل ال Table مما قد یؤدي الى تأخر انجاز<br />
مھمات ال ،DML مما یؤدي الى تأخر عملیة التحویل. تستخدم القاعدة التالیة للتحویل من حالة<br />
الى حالة<br />
Validate لل Unique Constraints و ال<br />
Disable<br />
.Enable Novalidate<br />
ALTER TABLE [schema.] table_name<br />
ENABLE NOVALIDATE {CONSTRAINT constraint_name | PRIMARY KEY |<br />
UNIQUE (column , column2, ….) }<br />
[USING INDEX…..]<br />
بحیث یتم اضافة جملة USING INDEX في الحلات التي یتم فیھا تحویل حالة ال PK Constraint أو<br />
ال Unique Constraint فقط ویحب أن تكون الحالة التي تم تكوینھم في البدایة Deferrable ویجب أن<br />
یكون ال Index الذي تم تكوینھ في البدایة إما Disabled أو تم حذفھ.<br />
130
.Enable الى ال Disable<br />
:Enable Validate<br />
بعد عملیة<br />
ھي الحالة الإفتراضیة "Default" التي یتم فیھا التحویل من ال<br />
التحویل یتم فیھا وضع Locks على البیانات حتى تنتھي عملیة فحص البیانات الموجودة، وفي حالة عدم<br />
وجود<br />
Non-Unique اذا كان قد تم تكوین ال Constraints في البدایة بالحالة Deferrable والعكس صحیح اذ<br />
Index من نوع Unique اذا كان قد تم تكوین ال<br />
یقوم ال<br />
البدایة بالحالة<br />
Indexes لل ، PK,UNIQUE Constraints یقوم ال Oracle Server بتكوین Index من نوع<br />
Constraints في<br />
Oracle Server بتكوین<br />
.Nondeferrable<br />
تستخدم ذات القاعدة التي تستخدم للتحویل من حالة Disable الى حالة<br />
Validate) ھي ال<br />
EXCEPTIONS التي سوف نتطرق لھا بعد قلیل.<br />
Enable Novalidate مع استبدال<br />
(Default<br />
كلمة NOVALIDATE بكلمة VALIDATE<br />
وإمكانیة إضافة جملة<br />
مثال تطبیقي<br />
:2.25<br />
لتحویل الحالة الى :Novalidate<br />
لتحویل الحالة الى :Validate<br />
لتحویل الحالة باستخدام ال<br />
ALTER TABLE hr.new_emp<br />
ENABLE NOVALIDATE CONSTRAINT new_emp_id_pk;<br />
ALTER TABLE hr.new_emp<br />
ENABLE VALIDATE CONSTRAINT new_emp_id_pk;<br />
:Console<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط على +<br />
اختر اسم المستخدم الذي یملك ال Table المراد تغییر خواصھا<br />
اختر اسم ال Table من النافذة الیمنى و اضغط علیھا مرتین (أو بواسطة الزر الیمین للفأرة ، اختر<br />
.Normal<br />
(مثل (HR<br />
ال .Schema Manager<br />
ال .Table<br />
من القائمة Details" ."View\Edit<br />
ادخل الى قائمة ، Constraints ثم عدل البیانات ثم اختر .Apply<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
131
:USING EXCEPTIONS<br />
تستخدم جملة ال EXCEPTIONS لمعرفة البیانات التي تخالف ال Constraints بعرض معلومات حول<br />
ال البیانات "Rows" المخالفة لل<br />
.EXCEPTIONS Table تسمى Table في Constraint<br />
للقیام بفحص البیانات قبل القیام بتحویل ال Constraint من حالة Disable الى Enable یمكن اتباع<br />
الخطوات التالیة:<br />
تكوین ال ، Exceptions Table اذا لم یتم تكوینھا من قبل بتشغیل<br />
من داخل ال :SQLPLUS<br />
utlexcpt.sql ھو Script<br />
•<br />
ALTER<br />
تحویل ال<br />
@ C:\oracle\ora90\rdbms\admin\utlexcpt.sql<br />
Constraint الى<br />
:TABLE<br />
Enable Validate بإضافة الجملة التالیة الى<br />
EXCEPTIONS INTO system.exceptions<br />
•<br />
في حال ظھور اخطاء تمنع من تحویل حالة ال<br />
المعلومات التي تكونت في ال .Exceptions Table<br />
،Enable Validate الى Constraint<br />
استخدم<br />
•<br />
SELECT * FROM table_name<br />
WHERE ROWID IN (SELECT ROW_ID FROM EXCEPTIONS);<br />
اجراء تعدیل للبیانات المخالفة بواسطة .UPDATE TABLE<br />
تحویل ال Constraint الى Enable Validate بإستخدام .ALTER TABLE<br />
•<br />
•<br />
:QUERYING CONSTRAINTS INFORMATION<br />
للحصول على معلومات حول ال Constraints یمكن استخدام:<br />
:DBA_CONSTRAINTS یوفر معلومات عدیدة مثل اسم ال<br />
التي یوجد فیھا وغیرھا من المعلومات.<br />
Constraint ونوعھ<br />
والحالة<br />
:DBA_CONS_COLUMNS یوفر معلومات عدیدة حول ال Columns التي وضع علیھا ال<br />
.Constraints<br />
•<br />
•<br />
132
Managing USERS & password<br />
SECURITY& RESOURCES<br />
133
PASSWORD MANAGEMENT<br />
:PROFILES<br />
یستخدم ال Profile للتحكم بال Password وال Resources بواسطة ال DBA عبر تحدید عوامل<br />
"Parameters" خاصة بال من الأمور التي یمكن التحكم بھا مثلاً أن یمنع بعض المستخدمین من<br />
اجراء مھمات محددة أو إخراج المستخدم من ال Database اذا لم ینفذ مھمات لوقت محدد. عند تكوین ال<br />
الذي یخصص لجمیع المستخدمین ما<br />
لم یتم تكوین Profile جدید(كل القیم في ال Default Profile تساوي .(Unlimited یمكن أن یخصص<br />
ال Users فقط ولا یمكن تخصیصھ لل Pro<strong>files</strong> أخرى، ولا یؤثر<br />
تخصیص ال Profile على ال Session الحالیة، اذ یجب خروج المستخدم ثم دخولھ مرة أخرى الى ال<br />
Database لكي تنفذ حدود ال .Profile یتم تخصیص ال Users باستخدام جملة<br />
CREATE<br />
،Profile<br />
Default Profile بتكوین ال Oracle Sever یقوم ال ، Database<br />
Roles أو<br />
Profile لل<br />
Profile لل<br />
"Assign"<br />
.ALTER USER أو USER<br />
ملاحظة: یمكن اغلاق وتشغیل ال .(Enable, Disable) Profile<br />
:MANAGING PASSWORD<br />
بالتحكم بال Password باستخدام ال<br />
Profile<br />
یمكن:<br />
تحدید عمر محدد لكلمة السر "Password" یجب على المستخدم تغییرھا بعد انتھاء المدة.<br />
إجبار المستخدم على اختیار كلمة سر معقدة تتبع نظام محددة (مثلاً أن لا تتشابھ كلمة السر مع اسم<br />
المستخدم)<br />
اجبار المستخدم عند تغییر كلمة السر عدم اختیار كلمة سر تم استخدامھا سابقاً.<br />
اغلاق ال Account الخاص بالمستخدم عند فشل ادخال كلمة السر لعدد محدد (مثل فشل ادخال كلمة<br />
السر لثلاث مرات).<br />
•<br />
•<br />
•<br />
•<br />
:Locking Account<br />
یمكن غلق ال Account بشكل اوتوماتیكي عند فشل الدخول الى ال Account عند كتابة كلمة سر خاطئة<br />
لعدد من المرات، كما یمكن تحدید المدة التي یظل فیھا ال Account مغلق عبر تحدید العاملین التالیین:<br />
:FAILED_LOGING_ATTEMPTS عدد المرات التي یسمح فیھا ادخال كلمة سر خاظئة<br />
قبل أن یتم غلق ال ،Account مثل أن تحدد القیمة بثلاث محاولات وبعد المحاولة الثالثة یغلق ال<br />
.Account<br />
:PASSWORD_LOCK_TIME تحدد قیمتھ المدة التي یظل فیھا ال Account مغلق، وبعد<br />
انتھاء المدة یفتح ال Account بشكل أوتوماتیكي (مثلاً بعد<br />
3 أیام).<br />
•<br />
•<br />
Account<br />
كما یمكن لل DBA غلق ال أو فتحھ باستخدام جملة ،ALTER USER في حالة غلق ال<br />
Account بواسطة ال DBA لا یمكن فتحھ أوتوماتیكیاً بل یجب أن یتم فتحھ عبر ال DBA فقط.<br />
134
:Password Expiration<br />
یمكن تحدید المدة التي یجب على المستخدمین تغییر كلمة السر "Password" بشكل دوري، كأن یجبر<br />
المستخدمیین تغییر كلمة السر كل شھر. یمكن ایضاً اعطاء مھلة اضافیة عند انتھاء المدة التي یجب تغییر<br />
یظھر رسالة تحذیریة تطلب من المستخدم تغییر<br />
كلمة السر ، بحیث بعد دخول المستخدم الى<br />
كلمة السر خلال فترة محددة وإلا سوف یتم غلق ال<br />
،Database<br />
.Account<br />
:PASSWORD_LIFE_TIME المدة التي یمكن لكلمة السر أن تظل دون تغییر، في حال عدم<br />
تغییر كلمة السر خلال المدة یغلق ال Account وتتحول حالة ال<br />
:PASSWORD_GRACE_TIME بعد ان تنتھي المدة التي یمكن لكلمة السر أن تظل دون<br />
تغییر، یمكن اعطاء مدة إضافیة لتغییر كلمة السر قبل غلق ال Account مع ظھور رسالة تحذیریة<br />
لتغییر كلمة السر قبل المدة المحددة.<br />
.Expired الى Account<br />
•<br />
•<br />
مثال:<br />
عند تحدید ال PASSWORD_LIFE_TIME بمدة شھر و PASSWORD_GRACE_TIME<br />
بمدة ثلاثة أیام یحدث التالي: بعد انتھاء الشھر دون تغیییر كلمة السر وكلما دخل المستخدم الى ال<br />
تظھر رسالة تحذیریة تطالب المستخدم من تغییر كلمة السر خلال 3 أیام وإلا سوف یتم غلق ال<br />
Account<br />
.Account<br />
:Password History<br />
یمكن اجبار المستخدم على اختیار كلمة سر لم تستخدم من قبل أبداً أو منعھ من استخدام كلمة سر قدیمة خلال<br />
فترة محددة.<br />
:PASSWORD_REUSE_TIME<br />
تحدد عدد من الأیام قبل أن یتم اعادة استخدام كلمة سر<br />
قدیمة مرة أخرى.<br />
تحدد عدد المرات التي یمكن ان یتم استخدام كلمة السر<br />
القدیمة. یمكن اجبار المستخدم بعدم استخدام كلمة سر قدیمة أبداً بوضع قیمة العامل صفر.<br />
:PASSWORD_REUSE_MAX<br />
•<br />
•<br />
ملاحظة: لا یمكن تحدید قیمة للعاملیین معاً ابداً، اذا تم تحدید قیمة أحد العاملیین یجب وضع قیمة الأخر<br />
.Unlimited<br />
:Password Verification<br />
یمكن وضع قوانیین لتسمیة كلمة السر باستخدام .PL/SQL من القوانیین التي یمكن تحدیدھا أن لا تكون<br />
كلمة السر مطابقة لإسم المستخدم أو یجب أن تحتوي كلمة السر على أرقام و أحرف معاً وكل ما یساعد على<br />
تكوین كلمة سر معقدة یصعب التكھن بھا.<br />
:PASSWORD_VERIFY_FUNCTION لتحدید ال PL/SQL Function التي سوف<br />
تستخدم في وضع قوانیین على اختیار كلمة السر.<br />
•<br />
ملاحظة: یجب تكوین ال Function في ال ، SYS Schema ویجب ان تكون من نوع ،Boolean أي أن<br />
الناتج أما صح "True" أو خطأ ."False"<br />
135
VERIFY_FUNCTION ، utlpwdmg.sql ضمن ال Oracle Server<br />
التي یمكن ان<br />
یوفر ال<br />
تستخدم لوضع قوانیین لكلمة السر اذا تم تحدیدھا في .PASSWORD_VERIFY_FUNCTION<br />
قوانیین ال :VERIFY_FUNCTION<br />
أن لا یقل حجم كلمة السر عن اربع خانات، وأن یكون من ضمنھا على الأقل حرف واحد ورقم واحد و<br />
رمز خاص واحد مثل $.<br />
أن لا تتطابق كلمة السر مع اسم المستخدم.<br />
أن تختلف كلمة السر الجدیدة عن التي قبلھا على الأقل بثلاث خانات، مثلاً لو كانت كلمة السر القدیمة<br />
ھي N1E$ ، فلا تقبل كلمة السر الجدیدة اذا كانت N1Z$3على اعتبار وجود اختلافیین اثنین فقط<br />
(Z,3). ھما<br />
•<br />
•<br />
•<br />
:CREATING PROFILE TO MANAGE PASSWORD<br />
یمكن تكوین Profile لإدارة ال Password باتباع القاعدة التالیة:<br />
CREATE PROFILE profile_name LIMIT<br />
[FAILED_LOGING_ATTEMPTS number]<br />
[PASSWORD_LOCK_TIME number_of_days]<br />
[PASSWORD_LIFE_TIME number_of_days]<br />
[PASSWORD_GRACE_TIME number_of_days]<br />
[{PASSWORD_REUSE_TIME | PASSWORD_REUSE_MAX}<br />
number_of_days]<br />
[PASSWORD_VERIFY_FUNCTION {function_name | NULL | DEFAULT}]<br />
في القاعدة:<br />
PASSWORD_REUSE_MAX} :{PASSWORD_REUSE_TIME | جمع العاملیین<br />
بین } { یدل على السماح بوضع قیمة لأحدھما ولا یمكن لكلیھما كما تم ذكره مسبقاً.<br />
یمكن وضع القیمة UNLIMITED عوضاً عن<br />
.(number_of_days ،number)<br />
•<br />
•<br />
ملاحظة: كل العوامل اختیاریة واذا لم یتم كتابتھا یؤخذ القیمة ال<br />
.Unlimited وھي Default<br />
مثال تطبیقي<br />
:8.1<br />
لتكوین Profile للتحكم بكلمة السر<br />
CREATE PROFILE myprofile LIMIT<br />
FAILED_LOGING_ATTEMPTS 3<br />
PASSWORD_LOCK_TIME 5<br />
PASSWORD_LIFE_TIME 15<br />
PASSWORD_GRACE_TIME 7<br />
PASSWORD_REUSE_TIME 15<br />
PASSWORD_VERIFY_FUNCTION verify_function;<br />
:<br />
136
ملاحظة: لاستخدام الساعات أو الدقائق عوضاً عن الأیام تستخدم القیمة 1/24 للدلالة على یوم واحد ویستخدم<br />
1/1400 للدلالة على دقیقة واحدة.<br />
لتحویل<br />
:Console باستخدام ال Profile<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط بواسطة الزر الیمین للفأرة على مجلد ال Profile واختر من القائمة التي تظھر<br />
في النافذة الجدیدة، ادخل اسم ال<br />
ادخل الى قائمة Password وادخل البیانات التي ترید.<br />
اضغط على<br />
.Create<br />
.Normal<br />
ال .Security Manager<br />
.Profile<br />
.Create<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
ملاحظة: سوف یأتي لاحقاً كیفیة تخصیص<br />
."User" للمستخدم Profile<br />
:ALTERING PROFILE<br />
یمكن تغییر قیم العوامل باستخدام جملة ، ALTER PROFILE كما في المثال 8.2.<br />
مثال تطبیقي<br />
أو باستخدام ال<br />
ALTER PROFILE myprofile<br />
FAILED_LOGING_ATTEMPTS 2<br />
PASSWORD_LOCK_TIME UNLIMITED<br />
PASSWORD_LIFE_TIME 10<br />
PASSWORD_GRACE_TIME 7/24<br />
PASSWORD_REUSE_TIME 10<br />
PASSWORD_VERIFY_FUNCTION verify_function;<br />
:8.2<br />
:Console<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط على + ال Profile واختر اسم ال Profile المراد تعدیلھ.<br />
تظھر الخواص في النافذة الیمنى، عدل البیانات القائمة Password ثم اضغط علىApply<br />
.<br />
.Normal<br />
ال .Security Manager<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
ملاحظة: التعدیلات التي تحدث لل Profile بواسطة ALTER PROFILE أو عبر ال Console لا تؤثر<br />
على ال Session الحالي للمستخدمیین، بل عند دخول المستخدمیین في المرة القادمة<br />
) لا Session القادم).<br />
137
:DROPPING PROFILE<br />
یمكن حذف ال Profile باستخدام جملة DROP PROFILE عبر استخدام القاعدة التالیة:<br />
في القاعدة:<br />
DROP PROFILE profile_name [CASCADE];<br />
:CASCADE عند كتابتھا یقوم الأوراكل بحذف "Revoke" ال Profile من المستخدمیین الذین<br />
خصص لھم وتحویلھم الى ال<br />
.Default Profile<br />
•<br />
مثال تطبیقي<br />
لحذف<br />
:8.3<br />
:Profile<br />
أو باستخدام ال<br />
DROP PROFILE myprofile CASCADE;<br />
:Console<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط على + ال Profile واختر اسم ال Profile المراد حذفھ ثم بواسطة الزر الیمین للفأرة أختر<br />
من القائمة “Remove” (یمكن استخدام قائمة Remove عوضاً عن الزر الیمیین<br />
للفأرة).<br />
اختر<br />
.Normal<br />
Object ثم<br />
ال .Security Manager<br />
.Yes<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
ملاحظات:<br />
1- لا یمكن حذف ال .Default Profile<br />
2- عملیة الحذف لا توثر على ال Session الحالیة للمستخدمیین.<br />
138
RESOURCE MANAGEMENT<br />
بالتحكم بال Resources باستخدام ال Profile یمكن تنفیذ عدد من القیود منھا تحدید أقصى وقت یمكن<br />
للمستخدم ان یظل متصلاًَ بال ، Database وأقصى وقت یمكن أن یظل المستخدم في ال<br />
القیام بمھمات "Idle" ، وتحدید عدد ال Sessions التي یمكن للمستخدم أن یحصل علیھا في نفس الوقت.<br />
یجب تحدید العامل "Parameter" RESOURCE_LIMIT في<br />
مع الإعتبار أن القیمة ال<br />
بالقیمة TRUE لكي نتمكن من التحكم بال<br />
،FALSE یمكن تغییر قیمة العامل بطریقة داینامیكیة تظل ساریة المفعول الى أن یحدث إغلاق لل<br />
Database باستخدام ALTER SYSTEM كما في المثال 8.4.<br />
Database دون<br />
Initiliazation Parameter File<br />
Default ھي<br />
، Resources<br />
مثال تطبیقي<br />
:8.4<br />
لتغییر قیمة العامل RESOURCE_LIMIT بطریقة داینامیكیة:<br />
ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;<br />
للتحكم بال Resources یتم تحدید العوامل التالیة في ال<br />
:Profile<br />
:CPU_PER_SESSION یتم تحدید كم من الوقت یمكن لل Session الإستھلاك من وقت ال<br />
CPU الذي ھو المعالج "Processor" في جھاز الكمبیوتر الذي یتم فیھ كل العملیات (یمكن إطلاق<br />
علیھ اسم "عقل الكمبیوتر")، بحیث یتم تحدید قیمة العامل بأجزاء من الثانیة.<br />
یتم تحدید كم من الوقت یمكن لجملة واحدة من جمل SQL الإستھلاك من<br />
وقت ال ،CPU بحیث یتم تحدید قیمة العامل بأجزاء من الثانیة.<br />
:SESSIONS_PER_USER تحدد كم Sessions یمكن للمستخدم أن یملك في ذات الوقت.<br />
تذكر من الفصل الأول أنھ یمكن للمستخدم الواحد این یكوٌن أكثر من Session واحد في نفس الوقت<br />
اذا استخدم أكثر من برنامج مثل SQL PLUS و ORACLE FORMS عدا بعض الحالات<br />
القلیلة.<br />
:CONNECT_TIME یحدد المدة بالدقائق التي یمكن للمستخدم أو ال Session البقاء متصلاً<br />
بال ،Database بحیث عند انتھاء المدة یتم اخراج المستخدم من ال Database وإنھاء عمل ال<br />
Session وعمل Rollback للمھمات التي تعمل أو لم یحدث لھا<br />
یحدد المدة بالدقائق التي یمكن للمستخدم أو ال Session البقاء متصلاً بال<br />
.Database بدون القیام بمھمات، بحیث عند انتھاء المدة یتم اخراج المستخدم من ال Database<br />
:PRIVATE_SGA لتحدید المساحة الخاصة المحجوزة لكل Session في ال SGA (خاص فقط<br />
ب<br />
:LOGICAL_READS_PER_SESSION تحدد عدد ال Data Blocks التي یمكن قرائتھا<br />
أو استخراج البیانات منھا في ال Session (یمكن أن تمنع استخراج أحجام بیانات كبیرة).<br />
:LOGICAL_READS_PER_CALL تحدد عدد ال Data Blocks استخراج البیانات منھا<br />
لكل جملة SQL واحدة.<br />
:COMPOSITE_LIMIT ھو حاصل جمع كل من CPU_PER_SESSION و<br />
وPRIVATE_SGA وLOGICAL_READS_PER_CALL CONNECT_TIME<br />
لمعرفة القیمة الكاملة لل .Resource Cost<br />
.Commit<br />
:CPU_PER_CALL<br />
:IDLE_TIME<br />
.(Shared Server<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
139
:CREATING PROFILE TO MANAGE RESOURCES<br />
یمكن تكوین Profile لإدارة ال Resources باتباع القاعدة التالیة:<br />
في القاعدة:<br />
CREATE PROFILE profile_name LIMIT<br />
[SESSIONS_PER_USER n1]<br />
[CPU_PER_SESSION n1]<br />
[CONNECT_TIME n1]<br />
[IDLE_TIME n1]<br />
[CPU_PER_CALL n1]<br />
[LOGICAL_READS_PER_SESSION n1]<br />
[LOGICAL_READS_PER_CALL n1]<br />
[COMPOSITE_LIMIT n1]<br />
[PRIVATE_SGA n2]<br />
.UNLIMITED, DEFAULT, NUMBER ھي أحدى ھذه القیم n1:<br />
.UNLIMITED, DEFAULT, NUMBER K|M ھي أحدى ھذه القیم :n2<br />
•<br />
•<br />
مثال تطبیقي<br />
:8.5<br />
لتكوین Profile للتحكم بال<br />
: Resources<br />
CREATE PROFILE myprofile LIMIT<br />
SESSIONS_PER_USER 3<br />
CPU_PER_SESSION UNLIMITED<br />
IDLE_TIME 15<br />
CONNECT_TIME 90;<br />
لتحویل<br />
:Console باستخدام ال Profile<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط بواسطة الزر الیمین للفأرة على مجلد ال Profile واختر من القائمة التي تظھر<br />
في النافذة الجدیدة، ادخل اسم ال<br />
ادخل البیانات التي ترید في قائمة<br />
اضغط على<br />
.Create<br />
.Normal<br />
ال .Security Manager<br />
.Profile<br />
.General<br />
.Create<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
140
:USING DATABASE RESOURCE MANAGER<br />
یمكن استخدام ال Database Resource Manager لتوفیر تحكم أكبر لل<br />
Resources وكیفیة تخصیصھا. یجب أن یكون للمستخدم ال Privilege اللازمة للتحكم بال<br />
Oracle Server على ال<br />
Database<br />
.ADMINISTER_RESOURCE_MANAGER privilege وھي Resource Manager<br />
یتوزع ال Database Resource Manager الى أربعة أجزاء ھي:<br />
:CONSUMER GROUP مجموعة من المستخدمیین یتشاركون في ذات قیم ال<br />
التي یحتاجونھا (كأن یخصص Profile واحد لكل مجموعة لأن لدیھم ذات الإحتیاجات من ال<br />
Resources<br />
.(Resources<br />
:PLAN خطط لتوزیع ال<br />
:ALLOCATION METHOD طرق توزیع ال<br />
:PLAN DIRECTIVES یستخدم من قبل ال DBA لتوزیع ال PLANS على ال<br />
.Consumer Group على ال Resources<br />
.Consumer Groups لل Resources<br />
.Consumer Groups<br />
•<br />
•<br />
•<br />
•<br />
ملاحظة: معلومات أكثر حول ال Database Resource Manager وكیفیة استخدامھ في دراسة الإمتحان<br />
الرابع من امتحانات ال .Oracle9i DBA<br />
تذكر: تطرقنا لل Database Resource Manager في درس .Managing Undo Data<br />
:QUERYING INFORMATION<br />
للحصول على معلومات حول ال<br />
:Profile<br />
:DBA_PROFILES للحصول على معلومات حول قیم عوامل ال ، Profile یستخدم ال<br />
Resource_Type Column لتحدید نوع العوامل المراد استخراجھا (أما Password أو<br />
Resources وتسمى ھنا<br />
.(Kernel<br />
•<br />
SELECT * FROM DBA_PROFILES<br />
WHERE PROFILE = ‘myprofile’<br />
AND RESOURCE_TYPE = ‘KERNEL’;<br />
لمعرفة كلمة السر للمستخدم (بشكل مشفر) وحالة ال<br />
:Account<br />
:DBA_USERS معلومات حول اسم المستخدم وكلمة السر وحالة ال Account (مغلق- یعمل).<br />
•<br />
للحصول على معلومات حول ال<br />
:(COMPOSITE_LIMIT استخدام (من Resource Cost<br />
.Composite_Limit معلومات حول الأربع عوامل التي یحددھا :RESOURCE_COST<br />
•<br />
141
MANAGING USERS<br />
،<br />
.User باسم Account<br />
"Objects" لتكوین العناصر Tablespace و ، Profile و Privileges<br />
لكي یتمكن ال DBA من منح فرصة الدخول الى ال Database للموظفین یجب منح كل واحد منھم<br />
یمكن تخصیص لكل<br />
Account یتكون من اسم مستخدم وكلمة سر، یعرف ھذا ال<br />
فیھا،<br />
مستخدم ممیزات و<br />
وTablespace Temporary لتخزین البیانات المؤقتھ التي تنتج عن عملیات المستخدم، كما یمكن تحدید<br />
مساحة خاصة للمستخدم من كل Tablespace تعرف باسم<br />
تعرف باسم<br />
التي یملكھا المستخدم في ال<br />
Schema ولا یمكن للمستخدم الواحد أن یكون لھ أكثر من Schema واحدة.<br />
.Tablespace Quotas كل العناصر<br />
(Tables, Views, Indexes (مثل Database<br />
"Objects"<br />
:CREATING USERS<br />
لتكوین<br />
User جدید تستخدم القاعدة التالیة:<br />
CREATE USER user_name<br />
IDENTIFIED [BY password | EXTERNALLY]<br />
[DEFAULT TABLESPACE Tablespace_name]<br />
[TEMPORARY TABLESPACE Tablespace_name]<br />
[QUOTA {number K|M | UNLIMITED} ON Tablespace_name, …]<br />
[PASSWORD EXPIRE]<br />
[ACCOUNT {LOCK | UNLOCK}]<br />
[PROFILE {profile_name | DEFAULT}]<br />
في القاعدة:<br />
:EXTERNALLY سوف نتطرق لھا بعد قلیل.<br />
Tablespace التي سوف تخزن العناصر التي قد<br />
یكونھا المستخدم مستقبلاً.<br />
:DEFAULT TABLESPACE تحدید ال<br />
:TEMPORARY TABLESPACE تحدید ال Temporary Tablespace التي سوف<br />
یتم تخزین البیانات المؤقتة الناتجة عن مھام المستخدم.<br />
:QUOTA تحدید مساحة محددة من أي Tablespace تخصص للمستخدم لتخزین عناصر<br />
فیھا.<br />
DBA لإجبار المستخدم على تغییر كلمة السر، التي عُرفت بواسطة :PASSWORD EXPIRE<br />
عند تكوین ال ،Account عند دخول المستخدم الى ال<br />
:ACCOUNT لتحدید اذا ما كان یرید ال DBA تكوین ال Account جاھز للعمل مباشرة أو أن<br />
یكون مغلق ثم یتم فتحھ بعد فترة.<br />
:PROFILE تحدید ال Profile المخصص للمستخدم.<br />
Account مباشرة.<br />
"Objects"<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
142
مثال تطبیقي<br />
لتكوین<br />
:8.6<br />
User جدید :<br />
CREATE USER Ahmad<br />
IDENTIFIED BY newemp<br />
DEFAULT TABLESPACE data<br />
TEMPORARY TABLESPACE temp<br />
QUOTA UNLIMITED ON users<br />
QUOTA 2M ON indx<br />
QUOTA 10M ON data<br />
PASSWORD EXPIRE;<br />
لتكوین User باستخدام ال<br />
:Console<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم و كلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط بواسطة الزر الیمین للفأرة على مجلد ال Users واختر من القائمة التي تظھر<br />
في النافذة الجدیدة، ادخل البیانات في قائمة<br />
اضغط على<br />
.Create<br />
.Normal<br />
.QUOTA وقائمة General<br />
ال .Security Manager<br />
.Create<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:Operating System Authentication<br />
یمكن السماح للمستخدمیین الدخول الى ال Database دون استخدام كلمة سر ، ھذا یعني بمجرد استطاعة<br />
المستخدم الدخول الى نظام التشغیل عبر نظام الحمایة المعمول فیھ في نظام التشغیل (قد یكون كلمة سر خاصة<br />
یستطیع المستخدم الدخول الى ال Database دون الحاجة الى<br />
كلمة سر خاصة بالأوراكل. لتطبیق ھذا النظام یجب استخدام كلمة EXTERNALLY في جملة<br />
بتحدید العامل OS_AUTHENT_PREFIX یمكن تمییزاسم المستخدم في نظام<br />
التشغیل واسم المستخدم في ال ، Database حیث أن القیمة ال Default لھذا العامل ھي<br />
.OPS$<br />
بنظام التشغیل System" ("Operating<br />
.CREATE USER<br />
مثال:<br />
)<br />
اذا كان المستخدم مؤھل للدخول عبر حمایة نظام التشغیل التي تطلب من المستخدم كتابة اسم و كلمة سر)<br />
الى ال Database وكان اسم المستخدم في نظام حمایة نظام التشغیل ھو Ahmad فإن اسم المستخدم في ال<br />
.OPS$Ahmad یكون Database<br />
عندما یطلب المستخدم Ahmad الدخول الى ال ، Database فلیس مطلوباً من ادخال كلمة سر أو اسم<br />
مستخدم اذ یقوم الأوراكل بمعرفة اسم المستخدم في نظام التشغیل وربطھ مع ال<br />
الخاص بھ<br />
Account<br />
(Ahmad)<br />
.(OPS$Ahmad)<br />
143
ملاحظة: تغییر قیمة ال OS_AUTHENT_PREFIX قد یؤدي الى منع المستخدمیین من الدخول الى ال<br />
Database (الذین یسمح لھم الدخول الى Database بدون كلمة سر).<br />
یمكن استخدام عامل أخر ھو REMOTE_OS_AUTHENT لتشغیل أوغلق امكانیة الإتصال بال<br />
Remote Database عبر نظام التشغیل (لا ینصح باستخدامھ لإمكانیة حدوث اختراق لل<br />
.( Database<br />
مثال:<br />
مثال على استخدام ، REMOTE_OS_AUTHENT دخول المستخدم (لدیھ إمكانیة الدخول الى ال<br />
Database عبر حمایة نظام التشغیل) الى نظام تشغیل (مثل ال (Unix متصل مع<br />
الموجود على جھاز أخر، في حالة وضع قیمة العامل ،True فإن المستخدم یستطیع الإتصال بال<br />
،Database أما في حالة القیمة False (ھي ال فإن المستخدم لا یستطیع الإتصال بال<br />
Database ویستطیع فقط اذا كان ال Oracle Server موجود على ذات الجھاز الذي دخل إلیھ.<br />
Oracle Server<br />
(Default<br />
8.1 رسم<br />
:ALTERING USERS<br />
یمكن استخدام جملة ALTER USER لكي یتم تغییر ال<br />
Temporary أو ال Default Tablespace<br />
.Quota أو ال Tablespace<br />
مثال تطبیقي<br />
:8.7<br />
لتغییر ال Quota للمستخدم:<br />
ALTER USER Ahmad<br />
QUOTA 0 ON users;<br />
ملاحظة: في حالة تغییر قیمة ال Quota الى صفر وكان للمستخدم<br />
فإن ھذه ال Table لا یمكن أن یكبر حجمھا أبداً (لا تستطیع حجز مزید من ال<br />
،Users Tablespace في ال Table<br />
.(Extents<br />
144
أو عبر ال<br />
:Console<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط على + بجانب المجلد ،Users ثم اختر اسم المستخدم.<br />
غیر البیانات في النافذة الیمنى.<br />
اضغط على .Apply<br />
.Normal<br />
ال .Security Manager<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:DROPPING USERS<br />
یمكن حذف مستخدم من ال Database باستخدام القاعدة:<br />
في القاعدة:<br />
DROP USER user_name [CASCADE]<br />
:CASCADE باضافتھا الى الجملة یتم حذف كل العناصر "Objects" التي كونھا المستخدم في<br />
ال Schema الخاصة بھ.<br />
•<br />
ملاحظة: لا یمكن حذف مستخدم متصل بال .Database یمكن استعمال KILL SESSION لإخراج<br />
المستخدم ثم حذفھ من ال .Database<br />
مثال تطبیقي<br />
:8.8<br />
DROP USER Ahmad;<br />
لحذف مستخدم:<br />
:QUERYING INFORMATION<br />
:DBA_USERS<br />
Tablespace وال<br />
یمكن الحصول على معلومات حول اسماء المستخدمیین و ال<br />
Temporary Tablespace و اسم ال Profile وتوقیت تكوین ال<br />
وحالة ال Account لجمیع المستخدمیین وغیرھا من المعلومات.<br />
Default<br />
Profile<br />
:DBA_TS_QUOTAS<br />
.Tablespaces<br />
توفر معلومات حول ال Quotas المخصصة للمستخدمیین من ال<br />
•<br />
•<br />
145
Managing PRIVILEGES &<br />
AUDITING & ROLES<br />
146
PRIVILEGES<br />
باستخدام ال Privileges یمكن وضع حدود لكل مستخدم في ال ،Database مثال على ذلك حدود على<br />
المھام التي یستطیع تنفیذھا، وحدود على البیانات التي یستطیع تعدیلھا. یمكن إعطاء<br />
للمستخدمیین بشكل مباشر أو أن یتم عبر ال كما یمكن إعطاء Privileges عامة لجمیع<br />
المستخدمیین وذلك عبر إعطاء ال Privileges الى مجموعة تعرف باسم Public وھي مجموعة ینتمي إلیھا<br />
جمیع المستخدمیین في ال<br />
یوجد نوعیین من ال<br />
Privileges<br />
، Roles<br />
.Database<br />
Privileges ھما:<br />
."Objects" وضع حدود وقیود على العناصر :OBJECT Privileges<br />
:SYSTEM Privileges وضع حدود على المھام التي یستطیع المستخدم تنفیذھا في ال<br />
Database بشكل عام.<br />
•<br />
•<br />
Database في ال System Privileges<br />
:SYSTEM PRIVILEGES<br />
یتم تخصیصھا للمستخدمین باستخدام جملة<br />
یوجد عدد كبیر من ال<br />
GRANT ویتم إعادتھا (إلغائھا) من المستخدمین باستخدام جملة .REVOKE یمكن توزیع ال<br />
Privileges الى ثلاثة أقسام ، قسم متعلق بال Database بشكل عام ، والقسم الثاني متعلق بال<br />
الخاصة بالمستخدم ، أما القسم الثالث فمتعلق بال Schemas الخاصة بالمستخدمیین الأخرین. نسق ال<br />
في النوع الثالث والرابع متشابھ من حیث الجملة ولكن یضاف كلمة ANY للنوع الثالث، مثال<br />
على ذلك<br />
System<br />
Schema<br />
Privileges<br />
CREATE TABLE (النوع الثاني) و CREATE ANY TABLE (النوع الثالث).<br />
من ال<br />
:System Privileges<br />
ALTER SYSTEM<br />
ALTER SESSION<br />
ALTER DATABASE<br />
CREATE TABLESPACE<br />
CREATE TABLE<br />
CREATE PROCEDURE<br />
CREATE CLUSTER<br />
CREATE SESSION<br />
RESTRICTED SESSION<br />
CREATE ANY TABLE<br />
ALTER ANY TABLE<br />
DROP ANY TABLE<br />
SELECT ANY TABLE<br />
CREATE ANY INDEX<br />
ALTER ANY INDEX<br />
DROP ANY INDEX<br />
CREATE ANY SEQUENCE<br />
ALTER TABLESPACE<br />
DROP TABLESPACE<br />
UNLIMITED TABLESPACE<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
147
SELECT ANY TABLE<br />
UPDATE ANY TABLE<br />
DELETE ANY TABLE<br />
BACKUP ANY TABLE<br />
INSERT ANY TABLE<br />
GRANT ANY PRIVILEGE<br />
GRANT ANY ROLE<br />
SYSOPER<br />
SYSDBA<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
ملاحظات:<br />
-1 لا یوجد CREATE INDEX privilege أو ، ANALYZE INDEX privilege لأنھما<br />
إعطاء CREATE TABLE<br />
.Indexes<br />
مشمولتیین مع ، CREATE TABLE privilege بحیث اذا تم<br />
للمستخدم یستطیع تكوین<br />
.CREATE TABLE privilege من ضمن ال DROP TABLE Privilege -2<br />
.CREATE PROCEDURE Privilege من ضمن ال DROP PROCEDURE privilege -3<br />
.CREATE CLUSTER privilege من ضمن ال DROP CLUSTER privilege -4<br />
توفر إمكانیة استخدام أي مساحة في أي<br />
، Tablespace ولكن تخصص فقط للمستخدمیین ولا یمكن تخصیصھا لل<br />
.Roles<br />
UNLIMITED TABLESPACE privilege -5<br />
DROP<br />
6- لكي یستطیع المستخدم عمل Truncate لأي Table<br />
في أي Schema یجب أن یخصص لھ<br />
.ANY TABLE<br />
:Protecting the Dictionary<br />
ALTER ANY TABLE أو ،SELECT ANY TABLE یصبح<br />
Dictionary Objects<br />
.Database<br />
،Dictionary Objects<br />
Initialization Parameter File<br />
SYS<br />
عندما یتم منح المستخدمیین<br />
، وھذا قد یشكل خطر على ال<br />
بإمكان المستخدمیین الدخول أو استخدام ال<br />
یوفر الأوراكل العامل 07_DICTIONARY_ACCESSIBILITY من عوامل<br />
الذي یمكن ال DBA في التحكم في ال<br />
بحیث عند وضع قیمة العامل ، False یتم منع المستخدمیین من الدخول الى جمیع العناصر ضمن ال<br />
.Dictionary الذي یملك ال Schema<br />
148
:Granting System Privilege<br />
یمكن إعطاء Privileges للمستخدم باستخدام القاعدة التالیة:<br />
GRANT system_privilege , system_privilege, …<br />
TO {user_name | role_name | PUBLIC} , { user_name | role_name | PUBLIC} , ..<br />
[WITH ADMIN OPTION]<br />
في القاعدة:<br />
:Role_name كما ذكرنا سابقاً أنھ یمكن منح ال<br />
یستطیع المستخدم الذي تلقى ال<br />
لمستخدمیین أخریین.<br />
.Roles لل Privileges<br />
Privileges<br />
:WITH ADMIN OPTION<br />
إعطاءھا<br />
•<br />
•<br />
مثال:<br />
لفھم :WITH ADMIN OPTION<br />
یوجد ثلاث مستخدمیین الأول ھو ال DBA والثاني ھو Ahmad والثالث ھو<br />
.Omar<br />
CREATE ANY TABLE للمستخدم Ahmad مع استخدام ،WITH ADMIN OPTION في<br />
إعطاء CREATE ANY TABLE للمستخدم .Omar<br />
Privilege<br />
Privilege من<br />
، Omar ویجب على<br />
.DBA ال ( Privileges<br />
قام ال DBA بإعطاء<br />
أما في حال<br />
ھذه الحالة یمكن للمستخدم Ahmad<br />
عدم ذكر جملة ، WITH ADMIN OPTION فلا یمكن للمستخدم Ahamd اعطاء ال<br />
(المستخدم الذي لدیة إمكانیة منح<br />
Omar الحصول على ال<br />
للمستخدم<br />
ال<br />
مثال تطبیقي<br />
GRANT CREATE ANY TABLE TO Ahmad, Omar;<br />
GRANT ALTER ANY TABLE , ALTER ANY INDEX<br />
TO Ali WITH ADMIN OPTION;<br />
:9.1<br />
أو عبر ال<br />
:Console<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط على + بجانب المجلد ،Users ثم اختر اسم المستخدم.<br />
اختر القائمة<br />
اختر ال Privilege من القائمة العلیا ثم اضغط على المثلث المتجھ الى أسفل.<br />
ضع علامة صح في قسم Admin Option اذا كنت ترید ذلك.<br />
اضغط على .Apply<br />
.Normal<br />
ال .Security Manager<br />
.System Privileges<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
149
:Revoking System Privilege<br />
یمكن سحب أو إلغاء ال Privileges الممنوحة للمستخدم باستخدام القاعدة التالیة:<br />
REVOKE system_privilege , system_privilege, …<br />
FROM {user_name | role_name | PUBLIC} , { user_name | role_name |<br />
PUBLIC} , ..<br />
ملاحظة: في بعض الحلات عند سحب Privilege من المستخدم یحدث خلل في باقي عناصر المستخدم. مثال<br />
على ذلك الخلل الذي قد یحدثھ إلغاء CREATE TABLE من المستخدم الذي قام بتكوین<br />
وViews، في ھذه الحالة یحدث خلل لل Views لأن ال Views معتمدة على ال<br />
Tables<br />
.Tables<br />
مثال:<br />
عند عمل REVOKE ل<br />
.GRANT مع ال WITH ADMIN OPTION وتم استخدام Privilege<br />
قام ال DBA بإعطاء CREATE ANY TABLE للمستخدم Ahmad مع استخدام<br />
WITH ADMIN<br />
.Omar للمستخدم CREATE ANY TABLE بإعطاء Ahmad وقام المستخدم ،OPTION<br />
عند حدوث أمر REVOKE من قبل ال DBA لل CREATE ANY TABLE الممنوحة ل ، Ahmad<br />
لا یحدث عملیة REVOKE لل CREATE ANY TABLE من عند المستخدم<br />
Omar أي أن ،Omar<br />
مازال یملك ال .CREATE ANY TABLE<br />
مثال تطبیقي<br />
:9.2<br />
REVOKE CREATE ANY TABLE FROM Ahmad, Omar;<br />
أو عبر ال<br />
:Console<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط على + بجانب المجلد ،Users ثم اختر اسم المستخدم.<br />
اختر القائمة<br />
اختر ال Privilege من القائمة السفلى ثم اضغط على المثلث المتجھ الى أعلى.<br />
اضغط على .Apply<br />
.Normal<br />
ال .Security Manager<br />
.System Privileges<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
150
:OBJECT PRIVILEGES<br />
Table, View, Sequence,<br />
توفر ال<br />
Object Privilege إمكانیة<br />
.Procedure, Function, Package<br />
القیام بمھمات محددة على ال<br />
من ال<br />
:Object Privilege<br />
:SELECT<br />
تمكن المستخدم من استخراج أو قراءة<br />
(Query)<br />
.Table, View تمكن المستخدم من تعدیل البیانات في ال :UPDATE<br />
.Table, View تمكن المستخدم من حذف البیانات في ال :DELETE<br />
.Table, View تمكن المستخدم من إضافة بیانات الى ال :INSERT<br />
:ALTER تمكن المستخدم من تعدیل تكوین ال<br />
بیانات من ال .Table,View, Sequence<br />
.Table, Sequence, Procedure<br />
.Table, View في ال Index تمكن المستخدم من تكوین :INDEX<br />
:REFERENCES تمكن المستخدم من تكوین<br />
:EXECUTE تمكن المستخدم من تشغیل برامج<br />
.Table في ال Foreign Key<br />
ال PL/SQL مثل ال .Procedure, Function<br />
:Granting Object Privilege<br />
یمكن إعطاء Privileges للمستخدم باستخدام القاعدة التالیة:<br />
في القاعدة:<br />
GRANT object_privilege, object_privilege, … | ALL [PRIVILEGES]<br />
ON [schema.] object_name<br />
TO {user_name | role_name | PUBLIC} , ….<br />
[WITH GRANT OPTION]<br />
Object Privileges لإعطاء كل ال :ALL<br />
:WITH GRANT OPTION یستطیع المستخدم الذي تلقى ال<br />
لمستخدمیین أخریین.<br />
Privileges<br />
إعطاءھا<br />
•<br />
•<br />
ملاحظات:<br />
1- لكي یستطیع مستخدم إعطاء Object Privileges الى مستخدم أخر، یجب أن یكون ال Object في ال<br />
Schema الخاصة بھ أو تم إعطاءه<br />
2- لكل مستخدم<br />
.WITH GRANT OPTION مع استخدام Object Privilege<br />
Object Privileges<br />
كاملة على ال Objects الموجودة في ال Schema الخاصة بھ.<br />
151
مثال تطبیقي<br />
:9.3<br />
GRANT UPDATE ON hr.employees<br />
TO Ahmad<br />
WITH GRANT OPTION<br />
أو عبر ال<br />
:Console<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط على + بجانب المجلد ،Users ثم اختر اسم المستخدم الذي ترید أن تعطیھ ال<br />
Privilege مثل<br />
.Normal<br />
ال .Security Manager<br />
.Object Privileges<br />
.PM<br />
اختر القائمة<br />
اختر من القائمة العلیا الیسرى اسم المستخدم<br />
ثم اختر نوعیة ال<br />
(مثل (HR<br />
(Tables (مثل Object<br />
.PM لل Privilege<br />
(Employees<br />
اختر نوعیة ال Privilege من القائمة الیمنى (مثل<br />
اضغط على السھم المتجھ الى أسفل.<br />
اضغط على .Apply<br />
الذي یملك ال Object المراد أعطاء<br />
ثم اسم ال<br />
Objects (مثل<br />
.(Update<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:Revoking Object Privilege<br />
یمكن سحب أو إلغاء ال Privileges الممنوحة للمستخدم باستخدام القاعدة التالیة:<br />
REVOKE object_privilege, object_privilege, … | ALL [PRIVILEGES]<br />
ON [schema.] object_name<br />
FROM {user_name | role_name | PUBLIC} , ….<br />
[CASCADE CONSTRAINTS]<br />
لكي ملاحظة:<br />
تتم عملیة ال ، Revoke یجب أن یقوم بالعملیة ذات المستخدم الذي قام بعملیة .Grant<br />
في القاعدة:<br />
:CASCADE CONSTRAINTS<br />
.REFERENCES privilege<br />
لحذف ال Foreign Keys التي تكونت باستخدام<br />
•<br />
152
مثال:<br />
عند عمل REVOKE ل<br />
قام المستخدم<br />
.GRANT مع ال WITH GRANT OPTION وتم استخدام Privilege<br />
WITH GRANT مع استخدام Ahmad للمستخدم SELECT TABLE بإعطاء Ali<br />
.Omar للمستخدم SELECT TABLE بإعطاء Ahmad وقام المستخدم ،OPTION<br />
، Ahmad الممنوحة ل SELECT TABLE لل Ali<br />
Omar أي أن ،Omar<br />
SELECT TABLE ایضاً.<br />
عند حدوث أمر REVOKE من قبل ال<br />
عملیة REVOKE لل SELECT TABLE من عند المستخدم<br />
یفقد<br />
یحدث<br />
مثال تطبیقي<br />
REVOKE SELECT ON hr.employees<br />
FROM Ahmad, Omar;<br />
9.4<br />
أو عبر ال<br />
:Console<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط على + بجانب المجلد ،Users ثم اختر اسم المستخدم الذي ترید استرجاع ال<br />
منھ.<br />
اختر القائمة<br />
اختر ال Privilege من القائمة السفلى ثم اضغط على المثلث المتجھ الى أعلى.<br />
اضغط على .Apply<br />
Privileges<br />
.Normal<br />
ال .Security Manager<br />
.Object Privileges<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:QUERYING INFORMATION<br />
للحصول على معلومات حول ال<br />
:System Privileges<br />
Users,<br />
:DBA_SYS_PRIVS توفر معلومات حول ال<br />
System Privileges الممنوحة الى<br />
.Roles<br />
•<br />
:DBA_TAB_PRIVS توفر معلومات حول ال<br />
الذي منح ال<br />
Object Privileges الممنوحة والمستخدم<br />
Privileges وغیرھا.<br />
:SESSION_PRIVS توفر معلومات حول ال<br />
الحالى<br />
System Privileges الممنوحة للمستخدم<br />
.(Session)<br />
•<br />
•<br />
153
AUDITING THE DATABASE<br />
عملیة ال Auditing ھي عملیة مراقبة مھمات ال Database المختلفة بحیث یتم مراقبة أي عملیات مشتبھ<br />
في أنھا غیر مسموح فیھا كأن یقوم مستخدم غیر مسموح لھ بالدخول الى ال Database بالدخول وحذف<br />
بیانات من ال .Database یتم جمع بیانات ومعلومات حول المراقبة في AUD$ التابعة ل ، SYS schema<br />
أو یمكن جمع ھذه المعلومات في ملف خارجي في نظام التشغیل System" ."Operating لتسجیل<br />
المعلومات الناتجة عن عملیة ال ، Auditing یجب وضع قیمة العامل AUDIT_TRAIL بالقیمة<br />
أو یمكن استخدام ملف خارجي بوضع قیمة العامل ،OS أما القیمة ال Default للعامل ھي<br />
.NONE یقوم الأوراكل بعمل Auditing في بعض الحالات وإن كانت قیمة العامل ،None مثل عند تشغیل<br />
لل DBA (أو كل مستخدم یملك<br />
و إغلاق ال Instance أو لمراقبة ال<br />
مشابھ لل .(DBA<br />
لل DBA حریة تحدید اذا ما كان یرید ان تحدث عملیة ال Auditing عند المھمة المراد مراقبتھا<br />
أو لكل ال Session بغض النظر عن عدد المھمات التي تحدث(Session .(By<br />
True<br />
Privileges<br />
By<br />
)<br />
Privileges الخاصة<br />
أو ، DB<br />
(Access<br />
باستخدام عملیة ال Audit یمكن مراقبة:<br />
جمل ال SQL<br />
ال<br />
.Privileges<br />
العناصر ."Objects"<br />
•<br />
•<br />
•<br />
ملاحظة: یطلق على AUD$ اسم<br />
لل DBA تعدیلھا كما جاء ذكرھا سابقاً.<br />
Audit Trail<br />
وھي من نوع ال Base Tables وھي الوحیدة التي یمكن<br />
اذا امتلئ ملف ال Audit Trail بحیث لا یمكن إضافة معلومات المراقبة الى الملف ، تتأثر جمیع جمل ال<br />
المراقبة وعوضاً أن تظھر النتائج الطلوبة ، تظھر أخطاء Messages" ."Error ولذلك یجب تفرغة<br />
للتحكم في حجم ال<br />
ملف ال<br />
، وعدم إعطاء ال<br />
عند الضرورة فقط ، واختیار نوع المراقبة بدقة SQL أو العناصر أو ال<br />
SQL<br />
Auditing ینصح باستخدم ال ، Audit Trail<br />
Audit Trail بشكل مستمر.<br />
(Privileges<br />
) لا<br />
.By Access عوضاً عن By Session لمستخدمیین كثیرین واستخدام AUDIT ANY privileges<br />
ملاحظة: لحذف محتویات ال<br />
یمكن حمایة ملف ال Audit Trail بكتابة التالي:<br />
.TRUNCATE أو ال DELETE تستخدم جمل ال ، Audit Trail<br />
AUDIT DELETE ON SYS.AUD$ BY ACCESS;<br />
یفضل نقل ال AUD$ من ال SYSTEM TABLESPACE الى Tablespace أخرى، مع مراعاة اعادة<br />
تعریف ال Indexes على كل من ال<br />
تذكر: یجب اعادة تعریف ال Indexes عند نقل ال<br />
.(sessionid , ses$tid) التالیة Columns<br />
.Tables<br />
154
مثال تطبیقي<br />
:9.5<br />
مثال على القیام بعملیة Auditing لجمل ال :SQL<br />
لمراقبة جمل ال DDL التي تنفذ على ال : Tables<br />
مثال على القیام بعملیة Auditing لل<br />
مثال على القیام بعملیة Auditing لل<br />
AUDIT TABLE;<br />
:Privileges<br />
AUDIT CREATE ANY SEQUENCE;<br />
:Objects<br />
AUDIT UPDATE, DELETE ON HR.EMPLOYEES;<br />
:AUDITING OPTIONS<br />
یمكن استخدامھا لتحدید عملیة المراقبة بشكل أكبر.<br />
:WHENEVER SUCCESSFUL في حالة مراقبة جمل ال ، SQL یتم جمع معلومات حول<br />
الجمل التي تمت بنجاح ولا یتم تسجیل معلومات حول الجمل التي لم تنجح في القیام بمھمتھا.<br />
في حالة مراقبة جمل ال ، SQL یتم جمع<br />
معلومات حول الجمل التي لم تنجح ولا یتم تسجیل معلومات حول الجمل التي نجحت في القیام<br />
بمھمتھا.<br />
:WHENEVER NOT SUCCESSFUL<br />
.BY ACCESS<br />
.BY SESSION<br />
•<br />
•<br />
•<br />
•<br />
مثال تطبیقي<br />
:9.6<br />
لمراقبة عملیات تكوین Sessions (دخول المستخدمیین لل (Database :<br />
العملیات الناجحة فقط:<br />
العملیات التي لم تنجح:<br />
AUDIT SESSION;<br />
AUDIT SESSION WHENEVER SUCCESSFUL;<br />
AUDIT SESSION WHENEVER NOT SUCCESSFUL;<br />
155
:NOAUDITING<br />
لایقاف عملیة ال ، Aduiting تستخدم جملة NOAUDIT مع اضافة الجزء الذي تم مراقبتھ في عملیة<br />
.Auditing<br />
مثال تطبیقي<br />
:9.7<br />
للقیام بعملیة :Noauditing<br />
NOAUDIT UPDATE, DELETE ON HR.EMPLOYEES;<br />
:QUERYING INFORMATION<br />
للحصول على معلومات حول ال<br />
:Auditing<br />
.Deafult Audit Options توفر معلومات حول ال :ALL_DEF_AUDIT_OPTS<br />
.SQL توفر معلومات حول عملیات المراقبة على جمل ال :DBA_STMT_AUDIT_OPTS<br />
:DBA_PRIV_AUDIT_OPTS<br />
توفر معلومات حول عملیات المراقبة على<br />
.Privileges<br />
:DBA_OBJ_AUDIT_OPTS<br />
توفر معلومات حول عملیات المراقبة على<br />
.Objects<br />
•<br />
•<br />
•<br />
•<br />
للحصول على المعلومات الناتجة من عملیة ال :Auditing<br />
.Auditing جمیع المعلومات الناتجة من عملیة ال :DBA_AUDIT_TRAIL<br />
:DBA_AUDIT_OBJECT المعلومات الناتجة من عملیة ال<br />
.Privileges على Auditing<br />
:DBA_AUDIT_STATMENT المعلومات الناتجة من عملیة ال Auditing على جمل ال<br />
.SQL<br />
:DBA_AUDIT_SESSION المعلومات الناتجة من عملیة ال Auditing على دخول و خروج<br />
المستخدمیین من ال .Database<br />
•<br />
•<br />
•<br />
•<br />
156
MANAGING ROLES<br />
Privileges تعطى<br />
Privileges<br />
تسھل ال Roles عملیة إدارة ال Privileges لأن ال Role عبارة عن مجموعة من ال<br />
أو تلغى من المستخدمین دفعة واحدة. مثال على ذلك اذا أراد ال DBA إعطاء عشرة لكل<br />
مستخدم جدید في ال ، فیجب على ال DBA كتابة جملة GRANT عشر مرات ، وكذلك الحال<br />
مع جملة ، REVOKE اما عند استخدام ال ، Role یتم كتابة جملة GRANT أو REVOKE مرة واحدة<br />
Object Privileges معاً ، ولا ینتمى ال<br />
فقط. یمكن أن یتكون ال Role من ال<br />
Role الى أي ، Schema ویتم تخزین بیانات حول تكوینھ في ال<br />
System Privileges وال<br />
.Data Dictionary<br />
Database<br />
:CREATING ROLES<br />
یمكن تكوین Roles باستخدام القاعدة التالیة:<br />
في القاعدة:<br />
CREATE ROLE role_name [NOT IDENTIFIED<br />
| IDENTIFIED { BY password | EXTERNALLY }<br />
.Role لا یوجد حمایة على ال :NOT IDENTIFIED<br />
:IDENTIFIED یوجد حمایة على ال Role مثل استخدام كلمة السر أو غیرھا.<br />
:EXTERNALLY یستخدم حمایة خارجیة لل Role مثل حمایة نظام التشغیل.<br />
•<br />
•<br />
•<br />
ملاحظة: یوجد أنواع حمایة أخرى لل Role عدا كلمة السر أو Externally لا مجال للتطرق لھا في الكتاب.<br />
مثال تطبیقي<br />
:9.8<br />
لتكوین :Role<br />
CREATE ROLE newusers;<br />
CREATE ROLE newusers2 IDENTIFIED BY n6iut30o;<br />
أو:<br />
أو عبر ال<br />
:Console<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط على بالزر الیمین للفأرة على المجلد ، Roles ثم اختر من القائمة<br />
ادخل اسم ونظام حمایة ال Role ثم اضغط على<br />
.Normal<br />
.Create<br />
.Create<br />
ال .Security Manager<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
157
ملاحظات:<br />
-1<br />
بعد تكوین ال Role مباشرة ، تكون ال Role خالیة تماماً من أي Privileges ویمكن استخدام جملة<br />
GRANT لإعطاء ال Role مجموعة من ال<br />
.Privileges<br />
-2 لتكوین ، Role یجب أن یكون للمستخدم .CREATE ROLE privilege<br />
:PREDEFINED ROLES<br />
عند تكوین ال ، Database یتم تكوین مجموعة من ال<br />
Roles<br />
بشكل أتوماتیكي منھا:<br />
:CONNECT ال<br />
Privileges ضمن ھذا ال Role تتضمن امكانیة الإتصال بال<br />
وتكوین ، Session امكانیة تكوین كل من<br />
Database<br />
Tables, Views, Synonym, Cluster,<br />
.Database Link<br />
•<br />
Tables<br />
:RESOURCE ال<br />
.Cluster, Sequence, Functions, Procedures, Triggers<br />
Privileges ضمن ھذا ال Role تتضمن امكانیة تكوین كل من<br />
•<br />
:SELECT_CATALOG_ROLE ال<br />
Privileges ضمن ھذا ال Role تتضمن امكانیة<br />
استخراج بیانات ال Data Dictionary (عمل Query على ال<br />
.(Views وال Tables<br />
:DELETE_CATALOG_ROLE ال<br />
بیانات (استخدام (DELETE من ال .Data Dictionary<br />
:EXECUTE_CATALOG_ROLE ال<br />
Privilege ضمن ھذا ال Role تتضمن امكانیة حذف<br />
Privilege ضمن ھذا ال Role تتضمن امكانیة<br />
استخدام جملة EXECUTE في ال .Data Dictionary<br />
:EXP_FULL_DATABASE ال<br />
.Database لل Export<br />
:EXP_FULL_DATABASE ال<br />
.Database لل Import<br />
Privilege ضمن ھذا ال Role تتضمن امكانیة عمل عملیة<br />
Privilege ضمن ھذا ال Role تتضمن امكانیة عمل عملیة<br />
•<br />
•<br />
•<br />
•<br />
•<br />
ملاحظة: سوف یتم التطرق على عملیات ال Export و ال Import في دراسة الإمتحان الثالث من امتحانات<br />
.Oracle9i ال<br />
Data Dictionary Views نوع<br />
DBA_ الذي یمكن أن للمستخدم الدخول الى بیاناتھ<br />
تذكر: من أنواع ال<br />
اذا كان یملك ال .SELECT_CATALOG_ROLE<br />
158
:MODIFYING ROLES<br />
یمكن تغییر نظام حمایة ال Role أو حذف نظام الحمایة باستخدام جملة ALTER ROLE كما في<br />
المثال 9.9.<br />
ملاحظة: لتعدیل نظام حمایة ال ، Role یجب أن یكون للمستخدم<br />
.ALTER ANY ROLE privilege<br />
مثال تطبیقي<br />
:9.9<br />
لتعدیل نظام حمایة ال<br />
أو احذف نظام الحمایة:<br />
أو عبر ال<br />
:Role<br />
ALTER ROLE newusers2 IDENTIFIED EXTERNALLY;<br />
ALTER ROLE newusers NOTIDENTIFIED;<br />
:Console<br />
.Standalone<br />
Database لكي<br />
ادخل الى ال Console عبر<br />
تظھر نافذة تطلب من اسم المستخدم وكلمة السر.<br />
اضغط على اسم ال<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اسم ال Role المراد تعدیلھ.<br />
اضغط على + بجانب المجلد<br />
في النافذة الیمنى ، اختر نظام الحمایة من قائمة .Authentication<br />
اضغط على .Apply<br />
.Normal<br />
ال .Security Manager<br />
، Roles ثم اختر<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:ASSIGNING PRIVILEGES TO ROLES<br />
بعد تكوین ال Role مباشرة ، تكون ال Role خالیة تماماً من أي Privileges ویمكن استخدام جملة<br />
التي استخدمت لإعطاء Privileges الى المستخدمیین مع ذكر اسم ال Role بجانب كلمة TO<br />
عوضاً عن اسم المستخدم أو ال Public كما في المثال<br />
.9.10<br />
GRANT<br />
مثال تطبیقي<br />
:9.10<br />
لإعطاء Privileges الى ال<br />
:Roles<br />
GRANT CREATE ROLE TO adminusers;<br />
GRANT SELECT ON HR.EMPLOYEES TO newusers2;<br />
159
أو عبر ال<br />
:Console<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط على + بجانب المجلد ، Roles ثم اختر اسم ال Role المراد إضافة<br />
، Object Privileges ثم اتبع ذات الخطوات التي<br />
أختر إما قائمة<br />
تم فیھا أعطاء المستخدمیین ال<br />
اضغط على .Apply<br />
.Normal<br />
Privileges لھ.<br />
ال .Security Manager<br />
System Privileges أو قائمة<br />
.Privileges<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:ASSIGNING ROLES TO USERS<br />
یمكن إعطاء المستخدمیین ال Roles بواسطة جملة GRANT التي استخدمت لإعطاء<br />
المستخدمیین مع ذكر اسم ال Role بجانب كلمة GRANT عوضاً عن اسم ال<br />
Privileges الى<br />
Privilege<br />
.9.11<br />
كما في المثال<br />
مثال تطبیقي<br />
:9.11<br />
لإعطاء Privileges الى ال<br />
كما یمكن دمج<br />
:Roles<br />
GRANT adminusers TO Omar WITH ADMIN OPTION;<br />
GRANT newusers TO Khaled;<br />
Roles ببعضھا.<br />
GRANT newusers TO newusers2;<br />
ملاحظات:<br />
1- المستخدم الذي یقوم بتكوین ال Role لدیھ الحق في WITH ADMIN OPTION على ذلك ال<br />
.Role<br />
2- المستخدم الذي یملك<br />
المستخدمیین.<br />
GRANT ANY ROLE privilege یستطیع إعطاء أو إلغاء ال Roles من<br />
3- یمكن تحدید عدد ال Roles التي یمكن أن تكون في الحالة Enable باستخدام عامل من عوامل ال<br />
Intialazation Parameter File ھو MAX_ENABLED_ROLES الذي قیمتھ ال Default ھي<br />
.20<br />
160
:ASSIGNING DEFAULT ROLES<br />
یمكن للمستخدم الواحد أن یملك أكثر من ، Role ولكن لیس بالضرورة أن تكون كلھا في حالة ،Enable<br />
ولكن یمكن جمع مجموعة من ال Roles لتمثل ال Default Role والذي یتم وضعھ في حالة Enable<br />
بشكل أوتوماتیكي عند دخول المستخدم الى ال لتعیین ال<br />
، Deafult Role تستخدم القاعدة:<br />
.Database<br />
ALTER USER user_name DEFAULT ROLE<br />
{ role_name , role_name | ALL [EXCEPT role_name , [role_name] ] | NONE }<br />
في القاعدة:<br />
.EXCEPT عدا المشمولییین في جملة Roles یمكن تعیین كل ال :ALL [EXCEPT…]<br />
•<br />
ملاحظة: یمكن استخدام ھذه القاعدة فقط مع ال Roles الممنوحة مباشرة للمستخدم عبر استخدام GRANT<br />
ولا تنطبق على ال Roles المدمجة ضمن<br />
.Roles<br />
مثال تطبیقي<br />
لتعیین<br />
:9.12<br />
Default Role للمستخدم:<br />
ALTER USER Ahmad DEFAULT ROLE newusers, newusers2;<br />
ALTER USER Khalid DEFAULT ROLE ALL;<br />
ALTER USER Omar DEFAULT ROLE ALL EXCEPT adminusers;<br />
ALTER USER Ali DEFAULT ROLE NONE;<br />
أو عبر ال<br />
:Console<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط على + بجانب المجلد ، Users ثم اختر اسم ال User المراد تعدیلھ.<br />
في النافذة الیمنى ، اختر قائمة ،Role ثم ضع علامة صح اسفل ال Role الذي تریده<br />
أن یكون<br />
اضغط على .Apply<br />
.Normal<br />
Deafult لل<br />
ال .Security Manager<br />
.Default<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
161
.SET ROLE باستخدام جملة Disable<br />
:ENABLING AND DISABLING ROLES<br />
لا یستطیع المستخدم<br />
یمكن تحویل حالة ال Role بین Enable و<br />
استخدام ال Role عندما تكون في حالة ، Disable ویجب تحویل حالتھا الى Enable لأستخدام ال<br />
Privileges داخلھا. تؤثر ال SET ROLE فقط على ال Session ولا تكون التغییرات دائمة ، إنما تعود ال<br />
Role لوضعھا الطبیعي بعد خروج المستخدم من ال .Database عندما یتطلب ال Role كلمة سر لتحویل<br />
حالتھ ، یحب كتابة كلمة السر في جملة ، SET ROLE ولا ینطبق الحال على ال<br />
من ضمنھ Roles تتطلب كلة سر لأن ال Deafult Role یتم تحویلھا الى حالة Enable بشكل أوتوماتیكي.<br />
یمكن تحویل حالة ال Role باستخدام القاعدة التالیة:<br />
مثال تطبیقي<br />
لتحویل حالة ال<br />
Defualt Role وإن كان<br />
SET ROLE<br />
{ role_name [IDENTIFIED BY PASSWORD] [, role_name ….]<br />
| ALL [EXCEPT [role_name, role_name,…]<br />
|NONE }<br />
:9.13<br />
:Enable الى Role<br />
SET ROLE newusers, departA_users;<br />
SET ROLE newusers2 IDENRIFIED BY n6iut30o;<br />
أو<br />
لتحویل حالة جمیع ال Roles الى Enable عدا ال<br />
لتحویل حالة جمیع ال Roles الى :Disable<br />
:adminusers<br />
SET ROLE ALL EXCEPT adminusers;<br />
SET ROLE NONE;<br />
:REMOVING ROLES FROM USERS<br />
یمكن إلغاء ال Roles من ال<br />
مثال تطبیقي<br />
Users باستخدام<br />
القاعدة التالیة:<br />
REVOKE role_name , role_name, …<br />
FROM { role_name | PUBLIC} , {role_name | PUBLIC} , ..;<br />
:9.14<br />
لإلغاء ال Role من ال<br />
أو عبر ال<br />
REVOKE newusers FROM Khaled;<br />
:Users<br />
:Console<br />
ذات الطریقة المستخدمة في إلغاء Privileges من ال<br />
.Users<br />
162
:DROPPING ROLES<br />
یمكن حذف ال Roles من ال Database وبالتالي من ال Users باستخدام القاعدة التالیة:<br />
DROP ROLE role_name ;<br />
ملاحظة: یحتاج المستخدم الى DROP ANY ROLE privilege لحذف أي Role في ال<br />
.Database<br />
مثال تطبیقي<br />
:9.15<br />
لحذف ال Role من ال :Database<br />
أو باستخدام ال<br />
DROP ROLE newusers2;<br />
:Console<br />
ادخل الى ال Console عبر .Standalone<br />
اضغط على اسم ال Database لكي تظھر نافذة تطلب من اسم المستخدم وكلمة السر.<br />
أدخل اسم المستخدم وكلمة السر مع التاكد من اختیار SYSDBA عوضاً عن<br />
اضغط على +<br />
اضغط على + ال Roles واختر اسم ال Role المراد حذفھ ثم بواسطة الزر الیمین للفأرة أختر من<br />
القائمة “Remove” (یمكن استخدام قائمة Remove عوضاً عن الزر الیمیین<br />
للفأرة).<br />
اختر<br />
.Normal<br />
Object ثم<br />
ال .Security Manager<br />
.Yes<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:QUERYING INFORMATION<br />
للحصول على معلومات حول ال<br />
:Roles<br />
:DBA_ROLES توفر معلومات حول جمیع ال Roles الموجودة في ال<br />
:DBA_ROLE_PRIVS توفر معلومات حول ال<br />
.Database<br />
Roles<br />
Roles أخرى.<br />
:ROLE_ROLE_PRIVS توفر معلومات حول ال Roles المدمجة مع<br />
الممنوحة للمستخدمین أو المدمجة مع<br />
Roles أخرى.<br />
:DBA_SYS_PRIVS توفر معلومات حول ال System Privileges الممنوحة للمستخدمین أو<br />
.Roles لل<br />
:ROLE_SYS_PRIVS توفر معلومات حول ال<br />
:ROLE_TAB_PRIVS توفر معلومات حول ال<br />
.Roles الممنوحة لل System Privileges<br />
.Roles الممنوحة لل Object Privileges<br />
:SESSION_ROLES<br />
توفر معلومات حول ال<br />
Enabled Roles للمستخدم الحالي.<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
163
GLOBALIZATION SUPPORT<br />
164
GLOBALIZATION SUPPORT<br />
المقصود بال ، Globalization Support إمكانیة استخدام لغات عالمیة وتقویمات عالمیة في الأوراكل.<br />
من الممیزات التي یوفرھا ال :Globalization Support<br />
إمكانیة حفظ واستخراج البیانات باللغة المحلیة.<br />
إمكانیة تشغیل ال<br />
إمكانیة عرض ال<br />
أمكانیة استخدام بعض التقویمات المحلیة مثل التقویم الیاباني.<br />
إمكانیة عرض الأرقام باللغة المحلیة.<br />
إمكانیة استخدام رموز العملات العالمیة.<br />
إمكانیة استخدام فارق التقویم الزمني بین الدول.<br />
إمكانیة استخدام مجموعة من النظم لتعریف اللغات"Schemes "Encoding مثل .Unicode<br />
التحویل الأوتوماتیكي بین اللغات، أي استخدام المستخدم Client لغة مختلفة عن لغة السیرفر.<br />
Database Utilities باللغة المحلیة.<br />
Error Messages باللغة المحلیة.<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
•<br />
:ENCODING SCHEMES<br />
یوفر الأوراكل مجموعة من النظم لتعریف اللغات منھا:<br />
و<br />
:SINGLE-BYTE<br />
.(WE8DEC (مثال 8-bit (US7ASCII<br />
یتم استخدام بایت واحد لتخزین حرف واحد. یوجد نوعان ھما<br />
7-bit (مثال<br />
:VARYING-WIDTH<br />
یمكن تخزین الحرف الواحد في أكثر من بایت وتستخدم ھذه الطریقة<br />
غالباً في اللغات الأسیویة مثل الصینیة والیابانیة (مثال JEUC و<br />
:FIXED-WIDTH یتم تحدید عدد محدد من البایتات لكل حرف<br />
.(AL32UTF8<br />
(مثال .(AL16UTF16<br />
:UNICODE<br />
نظام معتمد في جمیع أنحاء العالم لقدرتھ على تعریف جمیع اللغات والرموز الخاصة<br />
والرموز المستخدمة في النشر (مثل © ®). یمكن أن تتكون ال Unicode من مجموعة من النظم<br />
وFixed-Width (مثال .(UTF-16<br />
المختلفة مثل Varying-Width<br />
(مثال (UTF-8<br />
•<br />
•<br />
•<br />
•<br />
:CHOOSING CHARACTER SET<br />
خلال دراستنا لقاعدة ، CREATE DATABASE تعرفنا الى جملة CHARACTER SET التي تحدد<br />
نوعیة النظام الخاص باللغة" "Character Set الذي سوف یستخدم في ال Database (مثل<br />
یستخدم نظام ال Character set لتخزین اسماء ال<br />
Data و Columns وال Tables<br />
.(AL32UTF8<br />
في ھیئة .CHAR, VARCHAR2, LONG, CLOB القیمة ال Default لل Character Set ھي<br />
.US7ASCII<br />
Character Set الجدید<br />
لا یمكن تغییر ال Character Set بعد تكوین ال Database عدا في بعض<br />
استخدام<br />
مطابق بشكل كبیر للنوع القدیم).<br />
الأستثنائات القلیلة (مثلاً عندما یكون ال<br />
عملیة انتقاء ال Character set المناسب تعتمد على الأحتیاجات الحالیة والمستقبلیة معاً، أي في حالة<br />
وجود إحتمال استخدام لغات عدیدة في المستقبل، یفضل استخدام Character Set قادر على استیعاب لغات<br />
عدة.<br />
165
أیضاً یجب الأخذ بالإعتبار نوعیة ال Character Set المتوفرة في نظام التشغیل " Operating<br />
اذ أن الإختلاف بین النظامیین یؤدي الى عملیة تحویل یقوم بھل الأوراكل مما قي یؤدي الى حدوث<br />
عبئ وضغط من جراء عملیة التحویل ، مما قد یؤدي الى ضیاع بیانات.<br />
یعتبر استخدام Single-Byte أفضل من الناحیة الفنیة والأداء عن استخدام Varying-Width ولكن<br />
إمكانیات ال Single-Byte في تعدد اللغات محدودة جداً.<br />
"System<br />
ملاحظة: لا یمكن استخدم Fixed-Width كنظام لل<br />
.Character Set<br />
:CHOOSING NATIONAL CHARACTER SET<br />
یوجد نوع إضافي في<br />
القیمة ال<br />
الذي یستخدم لتخزین البیانات<br />
ھي .AF16UTF16 یمكن استخدام قیمتان لل<br />
لل<br />
.UTF-8 لا یمكن تغییر ال<br />
فقط ھما قیمتا ال<br />
تكوین ال Database عدا في بعض الأستثنائات القلیلة.<br />
عملیة انتقاء ال National Character Set تعتمد على اللغة المراد استخدامھا ، ففي حالة اللغات<br />
(أي أن الأحرف لا تحجز مساحة ثابتة بل متغیرة)<br />
الأوروبیة یتم حجز بین<br />
ولذلك یفضل استخدام UTF-8 لأنھا من نوع متغیر Varying-Width (من 1 بایت الى بایت<br />
تعتبر ال UTF-16 أسرع وأقل عبئ في ال Database لأنھا من النوع الثابت .Fixed-Width<br />
قاعدة CREATE DATABASE ھو NATIONAL CHARACTER SET<br />
في ھیئة Default .NCHAR, NVARCHAR2, NCLOB<br />
National Character<br />
National Character Set<br />
National Character Set بعد<br />
UTF-16 Unicode و<br />
،<br />
3)، ولكن<br />
1 Byte الى 2 Byte لكل حرف<br />
(NLS) National Language Support تساعد<br />
:USING NLS PARAMETERS<br />
یوفر الأوراكل مجموعة من العوامل یطلق علیھا اسم<br />
على تحدید أمور مختلفة عالمیاً مثل طریقة حفظ وعرض التاریخ والتوقیت، الرمز المستخدم للعملة المحلیة،<br />
الیوم الأول في الأسبوع (السبت عند المسلمین والاثنین عند الغرب) وغیرھا من الأمور.<br />
یمكن تحدید عوامل ال NLS بثلاث طرق ھي:<br />
عبر تعدیل ال<br />
باستخدام ال<br />
باستخدام جملة ال .ALTER SESSION<br />
.Initialization Parameter File<br />
) Environment Variables<br />
یستخدم في نظام الویندوز ال<br />
(Registry<br />
•<br />
•<br />
•<br />
التعدیل بواسطة جملة ALTER SESSION ھو الأقوى ثم یلیھ استخدام ال<br />
.Variables ھذا یعني اذا تم تعدیل أحد العوامل بواسطة ال<br />
جملة ال ، ALTER SESSION فإن قیمة العامل تكون ھي المحددة بجملة ال ALTER SESSION<br />
ولیس القیمة المحددة بال Initialization Parameter File أو القیمة المحددة بال<br />
Environment<br />
Initialization Parameter File وبواسطة<br />
Environment<br />
.Variables<br />
ملاحظة: بعض العوامل لا تتغیر بواسطة ALTER SESSION أو باستخدام ال Environment<br />
.Variables<br />
تذكر: جاء ذكر ال Environment Variables في الفصل الثالث.<br />
166
:NLS Parameters<br />
یوفر الأوراكل عدد من العوامل منھا:<br />
:NLS_LANGUAGE<br />
یستخدم في عرض اسماء الأیام والشھور، ویستخدم لعرض الرموز<br />
الخاصة بالتوقیت والتاریخ مثل قبل أو بعد المیلاد أو التوقیت<br />
كلغة الرسائل المعروضة في الأوراكل مثل رسائل الأخطاء Messages" "Error ، ویستخدم ایضاً<br />
في تحدید نوعیة عملیة ال .Sorting<br />
AM) (PM, ، ویستخدم<br />
(AD, BC)<br />
:NLS_TERRITORY یستخدم في تحدید طریقة عرض التاریخ ، واختیار رمز للعملة المحلیة ،<br />
تحدید أول یوم في الأسبوع وتحدید قیم تعرف باسم قیم ال .ISO<br />
.NLS_LANG<br />
•<br />
•<br />
•<br />
تشمل ال NLS_LANGUAGE قیم ال Default للعوامل التالیة:<br />
:NLS_DATE_LANGUAGE لتحدید اسماء الشھور والأیام والإختصارات المعمول بھا (مثل<br />
اختصار یوم الإثنین بالغة الإنجلیزیة .(MON<br />
:NLS_SORT لتغییر طریقة ترتیب البیانات "Sorting" في الأوراكل ، مثلاً اذا تم تحدید قیمتھا<br />
بالتالي NLS_SORT =German فإن ترتیب البیانات سوف یكون طبقاً للأبجدیة الألمانیة.<br />
•<br />
•<br />
أما ال NLS_TERRITORY فتشمل قیم ال Default للعوامل التالیة:<br />
:NLS_CURRENCY لإختیار رمز للعملة المحلیة.<br />
:NLS_ISO_CURRENCY لإختیار رمز مختصر لعملیة البلد مثل USD للدولار الأمریكي.<br />
:NLS_DATE_FORMAT لتحدید طریقة عرض التاریخ، مثلاً الأیام ثم الشھور ثم السنین.<br />
لتحدید طریقة عرض الأرقام التي تحوي على<br />
فواصل مثل الأرقام الغیر صحیحة (مثل<br />
:NLS_NUMERIC_CHARACTERS<br />
.(222.44.5<br />
•<br />
•<br />
•<br />
•<br />
Default للعوامل الأخرى ،<br />
بذلك ھو عند<br />
المقصود بأن العامل NLS_TERRITORY یشمل القیم ال<br />
تحدید قیمة ال ، NLS_TERRITORY فلیس من الضروري تحدید قیم العوامل التي یشملھا.<br />
أیضاً في حالة تحدید العامل NLS_TERRITORY والعوامل التي یشملھا ، یتم تغییر قیم العوامل التي<br />
یشملھا، حیث أن تغییر قیمة العامل NLS_TERRITORY یتم فقط في ال<br />
أو عبر جملة ال ALTER SESSION مما یجعلھ النوع الأقوى من العوامل التي یشملھا التي تتغیر عبر<br />
جمیع الطرق. مثال على ذلك اذا تم تحدید قیمة العامل NLS_CURRENCY بالقیمة £ (الباوند) في ال<br />
Initialization Parameter File ولكن ایضاً تم تحدید قیمة العملة المحلیة في<br />
¥ (الین الیاباني) فإن رمز العملیة المحلیة في الأوراكل یكون الین الیاباني.<br />
Environment Variables<br />
NLS_TERRITORY بالقیمة<br />
:NLS_LANG Parameter<br />
یمكن استخدام قیم مختلفة لكل مستخدم باستخدام ال NLS_LANG ویتم تحدیدھا فقط عبر استخدام ال<br />
تتكون من ثلاثة اقسام ھي Language و<br />
،Set معرفة بالقاعدة التالیة:<br />
Character و Territory<br />
NLS_LANG = Langugae_Territory.Charset<br />
.Environment Variables<br />
167
في القاعدة:<br />
:Language<br />
ھي موازیة للعامل NLS_LANGUAGE ویتم تعریف قیمتھا في الأوراكل عند<br />
تحدیدھا ولا یتم الأخذ بقیمة ، NLS_LANGUAGE اذ یعتبر العامل NLS_LANG ھو الأقوى<br />
في الأوراكل.<br />
:Territory ھي موازیة للعامل NLS_TERRITORY ویتم تعریف قیمتھا في الأوراكل عند<br />
تحدیدھا ولا یتم الأخذ بقیمة ، NLS_TERRITORY اذ یعتبر العامل NLS_LANG ھو<br />
الأقوى في الأوراكل.<br />
فقط.<br />
:Charset یحدد نوعیة ال<br />
Character Set للمستخدم<br />
•<br />
•<br />
•<br />
:NLS and Functions<br />
خلال دراستك للإمتحان الأول SQL" "Introduction to استخدمت ال<br />
عملیات متعددة مثل جملة ، TO_CHAR وللتذكیر راجع المثال 10.1.<br />
NLS Parameters داخل<br />
مثال تطبیقي<br />
SELECT TO_CHAR (hire_date, ‘DD.Mon.YYYY’,<br />
‘NLS_DATE_LANGUAGE = GERMAN’)<br />
FROM HR.EMPLOYEES<br />
:10.1<br />
یمكن استخدام العوامل التالیة مع :TO_CHAR<br />
NLS_DATE_LANGUAGE<br />
NLS_NUMERIC_CHARACTERS<br />
NLS_CURRENCY<br />
NLS_ISO_CURRENCY<br />
NLS_CALENDAR<br />
•<br />
•<br />
•<br />
•<br />
•<br />
یمكن استخدام العوامل التالیة مع :TO_DATE<br />
NLS_DATE_LANGUAGE<br />
NLS_CALENDAR<br />
•<br />
•<br />
یمكن استخدام العوامل التالیة مع :TO_NUMBER<br />
NLS_NUMERIC_CHARACTERS<br />
NLS_CURRENCY<br />
NLS_ISO_CURRENCY<br />
•<br />
•<br />
•<br />
168
:QUERYING INFORMATION<br />
للحصول على معلومات حول ال :NLS<br />
:NLS_DATABASE_PARAMETER توفر معلومات عن ال<br />
Character Set وال<br />
.Database المستخدم في ال National Character Set<br />
•<br />
SELECT PARAMETER, VALUE<br />
FROM NLS_DATABASE_PARAMETER<br />
WHERE PARAMETER LIKE ‘%CHARACTERSET%’;<br />
:NLS_INSTANCE_PARAMETER توفر معلومات عن قیم عوامل ال NLS المحددة في<br />
ال<br />
.Initialization Parameter File<br />
:NLS_SESSION_PARAMETER توفر معلومات عن قیم عوامل ال NLS المحددة لل<br />
Session فقط.<br />
:V$NLS_VALID_VALUES توفر معلومات حول جمیع القیم المتوفرة المسموح استخدامھا<br />
لتحدید كل من ال<br />
.Language, Territory, Character Set<br />
•<br />
•<br />
•<br />
169