بسم الله الرحمن الرحيم عند الحديث عن قواعد البيانات لابد من البدء عن مكونات قاعدة البيانات وطريقة عملها حتى يتسنى لنا بعد ذلك الحديث عن التفاصيل التى لا يمكن إستيعابها حتى نفهم تكوينها وطريقة عملها أولاً . قاعدة البيانات اوركل تتكون من جزئين رئيسيين وهما Oracle Instance و Oracle Database وسنتحدث عن كل منها بالتفصيل فيما بعد . Oracle Instance 1. 1: وهى تتكون من جزئين رئيسيين كما فى الشكل اعلاه :- • Background Processes Memory Structure 1. 1.1: وهى تتكون لحظة فتح الInstance وهى عبارة عن جزء من الذاكرة يتم تخصيصه لعمل قاعدة البيانات اوركل وهى تتكون من جزئيين :- 1-(SGA) System Global Area 2- Program Global Area (PGA) System Global Area (SGA) 1. 1.1. 1: وتسمى ايضاً Shared Global Area وهى جزء من الذاكرة يخصص للمعلومات التى تكون مشتركة ومتاحة لجميع مستخدمى قواعد البيانات ، وتحتوى على معلومات التحكم التى تستخدم من قبل الOracle Server وهى تتكون فى الVirtual Memory وتتكون لحظة فتح الInstance ، وهى ذاكرة Dynamic أى يمكن تغيير مقاسها دون إغلاق قاعدة البيانات وهى تتكون من قسمين :- 1- Mandatory Memory 2- Optional Memory : Mandatory Memory 1- Shared Pool: ويتم التحكم فى مقاس هذه الذاكرة بواسطة المتغير SHARED_POOL_SIZE ، وهكذا باقى اجزاء الذاكرة يتم التعديل بنفس الطريقة السابقة . 3- Redo Log Buffer ويتم تحديد مقاس هذا الجزء من الذاكرة بواسطة المتغير LOG_BUFFER . 2- Java Pool 3- Streams Pool *Shared SQL Areas *Private SQL Areas *PL/SQL Procedures and Packages *Various Control Structure SHAREAD_POOL_SIZE Shared Pool Oracle 6 thru 10g Dictionary Cache * Row Cache Holds changes made to data and allows for reconstruction of data in the case of failure * Redo entries LOG_BUFFER Redo Log Buffer Oracle 6 thru 10g Holds copies of data requested by SQL and reduces requests to disk by having data in memory You may have many different buffer caches that help segregate on usage patterns * Write List * LRU List DB_2K_CACHE_SIZE DB_4K_CACHE_SIZE DB_8K_CACHE_SIZE DB_16K_CACHE_SIZE DB_32K_CACHE_SIZEDB_KEEP_CACHE_SIZE DB_RECYCLE_CACHE_SIZE Database Buffer Cache For large memory allocations * Shared server * Oracle XA I/O Server Processes Backup & Restore LARGE_POOL_SIZE Large Pool Form Oracle 8i Memory available for the java memory manager to use for all things Java *Run stats *Methods *Classes *Session code Data in JVM JAVA_POOL_SIZE Java Pool From Oracle 8i New to Oracle 10g Memory available for Stream Processing *Stream activity STREAMS_POOL_SIZE Streams Pool From Oracle 10g او عن طريق كتابة الامر التالى :- SQL> SHOW SGA * V$SGA Program Global Area (PGA) 1. 1.1. 2: وتسمى أيضاً Process Global Area وهو جزء من الذاكرة يتكون خارج الInstance وهو يحتوى على معلومات خاصة للServer Process الحالى ويتكون هذا الجزء من الذاكرة لحظة إنشاء الServer Process وتنتهى لحظة إنتهاء الServer Process . وهذا الجزء ليس متاحة لباقى المتصلين أى لكل Server Process فى قاعدة البيانات PGA خاصة به تحتوى على معلومات خاصة به . وهى تحتوى على ثلاثة أجزاء :- 1- Private SQL Area 2- Session Memory 1.1. 2 Background Processes وقبل الحديث عن ال Background Processes لا بد من الذكر بأن هناك ثلاثة انواع من الProcesses :- 1- User process :- وهو يبدأ العمل عندما يطلب المستخدم الإتصال بقواعد البيانات عن طريق احد ادوات قواعد البيانات . 2- Server Process :- ويتم انشاؤه لحظة الاتصال بالInstances بعد طلب ال User Process الاتصال بقواعد البيانات فيتم التحقق من المستخدم فلحظة الاتصال هى لحظة إنشاء الServer Process وهو يكون بين الUser Process والInstance ، فلكل User Process فى قاعدة البيانات Server Process خاص به هذا إذا كنا نعمل فى بيئة الDedicated Server أما إذا كنا نعمل فى بيئة الShared Server فالأمر يختلف قليلاً ، عموماً سنناقش هذا الامر لاحقاً . 3- Background Processes: - وهو موضوع نقاشنا فى هذه الفقرة وهى عبارة عن معالجات تعمل فى قاعدة البيانات بحيث تقوم بمهام مختلفة تبدأ العمل لحظة فتح الInstance ، وتنقسم الى قسمين:- 1- Mandatory: لا بد من عملها لحظة فتح الInstance . 2- Optional : وبدونها تستطيع الInstance العمل وهذا النوع يعمل فى بعض الاحوال التى يتم فيه تهيئة قاعدة البيانات للعمل على خيارات معينة . Mandatory Processes 1. 1.2. 1: ولا يمكن لقاعدة البيانات العمل دون هذه ال Processes ، وهى:- 1- System Monitor (SMON) : ويقوم بعمل الاسترجاع (Recovery) إذا حصل مشكلة فى الInstance ، واذا كنا نعمل على البيئة (RAC) Real Application Clusters وهى عمل اكثر من Instance فى قاعدة البيانات الواحدة فإن الSMON فى الInstance السليمة يستطيع عمل Recovery للInstance الاخرى التى حدث فيها مشكلة . كذلك يستطيع الSMON عمل تنظيف للSegments المؤقتة التى لم يتم استخدامها من فترة طويلة . 2- Process Monitor (PMON) : وأقصى عدد لهذا الProcess فى قاعدة البيانات هو 1 ، ويقوم بعمل Recovery للProcess إذا حصلت مشكلة فى الUser Process ، وكذلك يقوم بتسجيل المعلومات حول الInstance والDispatcher Processes ، وايضاً يقوم بعمل اختبار للDispatcher Processes والServer Processes ويقوم بعمل إعادة تشغيل فى حالة وجود مشكلة فيهم . 3- Log Writer (LGWR) : وأقصى عدد لهذا الProcess فى قاعدة البيانات هو 1 ، ويقوم بعمل كتابة للبيانات الموجودة فى الRed Log Buffer ويكتبها فى الRedo Log Files ، 1- لحظة عمل Commit . 2- كل ثلاث ثوانى . 3- عندما يمتلئ ثلث الRedo Log Buffer . 4- لحظة عمل DBWn ، كذلك االLGWR يقوم بكتابة التزامن للRedo Log Groups فإذا حدثت مشكلة فى Redo log File فإن الLGWR يقوم بإرسال خطأ لملف Alert Log . نستفيد من عملية الLGWR فى الاسترجاع إذا حصلت مشكلة فى الInstance . 4- Database Writer (DBWn): والمتغير الذي يتحكم فى عدد هذا الProcess هو DB_WRITER_PROCESSES . ويعمل هذا الProcess بكتابة البيانات الموجودة فى الDatabase Buffer Cache للDatafiles فى الحالات الاتية :- 1- لحظة حدوث الCheckpoint وسنتحدث عن ذلك لاحقاً . 2- كل ثلاث ثوانى . 3- لحظة حدوث الLog Switch وسنتحدث عنه لاحقاً . 4- لحظة إغلاق قاعدة البيانات . 5- لحظة وصول الBlock للقيمة المحددة . 6- لحظة إمتلاء الBuffer . 7- عند عمل الاتى :- * Tablespace Offline * Tablespace Read Only * Table Drop or Truncate * Tablespace Begin Backup 5- (CKPT) Checkpoint Process: وأقصى عدد لهذا الProcess فى قاعدة البيانات هو 1 ، ويقوم بالتأكد من أن كل التعديلات التى تتم على البيانات فى الBuffer تم كتابتها وتثبيتها فى الDatafiles ومن ثم يقوم بعمل تزامن كامل لكل الDatafiles ويقوم بعمل تعديل للDatafiles headers ؛ والControl files يتم تعديله عند اخر SCN ، بحيث يتم تزامن كامل لقاعدة البيانات ونضمن أنه يمكن استرجاع قاعدة البيانات فى حال حدوث مشكلة . ويتم عمل الCKPT فى الحالات التالية :- 1- لحظة حدوث Log Switch. 2- عند وصول الزمن المحدد فى المتغير LOG_CHECKPOINT_TIMEOUT 3- عند ما يصل عدد الBLOCKS المحدد فى المتغير LOG_CHECKPOINT_INTERVAL 4- عند وصول عدد الBuffer المحدد فى المتغير FAST_START_IO_TARGET . 5- عند تنفيذ الاوامر التالية :- SQL> ALTER SYSTEM SWITCH LOGFILE; SQL> ALTER SYSTEM CHECKPOINT; 6- Recover (RECO) : وأقصى عدد لهذا الProcess فى قاعدة البيانات هو 1 ، وستخدم هذا الProcess لمعالجة مشكلة العمليات الموزعة المعلقة نتيجة مشكلة فى الشبكة او النظام ، فبعد فترة محددة يقوم الProcess بمحاولة الاتصال عن بعد ومحاولة اكمال العملية أو التراجع عنها . Optional Processes 1. 1.2. 2: ويمكن لقاعدة البيانات العمل دون هذه الProcesses ولكثرة هذه الProcesses سنتطرق لاهمها :- 1- Archiver (ARCn) : وأقصى عدد لهذا الProcess فى قاعدة البيانات هو 10 ، ويقوم بكتابة الOnline Red log Files فى ملف الارشيف (Archive Log Destination) بعد حدوث الLog Switch ، هذا الProcess يعمل إذا كانت قاعدة البيانات تعمل فى النمط Archive Log Mode , يتم التحكم فى عدد هذا الProcess عن طريق المتغير LOG_ARCHIVE_MAX_PROCESSES . 2- Recovery Writer(RVWR): هذا الProcess تم استحداثه فى الاصدارة Oracle 10g نستفيد من هذا الProcess عند عملية الFlashback Database ، سنناقش هذا الموضوع لاحقاً . 3- Lock Monitor (LMON). 4- Lock Manager DAEMON . 5- (LCKn) Lock Process . 6- Block Server Process (BSPn) . 7- َQueue Monitor (QMNn) . 8- Event Monitor (EMNn) . 9- ٍShared Server Processes (Snnn) . 10-Memory Manager (MMAN) . 11-Parallel Execution slaves (Pnnn). 12- Trace Writer (TRWR) . 13- DMON . 14- Dispatcher (Dnnn) . 15- MMON . 16- Wakeup Monitor Process (WMON) . 17- Memory Monitor Light (MMON) . 18- RBAL . 20- ASMB . 21- Change Tracking Writer (CTWR) . 22- Job Queue Monitoring (CJQn) . Oracle Database 1. 2: وهو الجزء الثانى من مكونات قاعدة البيانات اوركل كما ذكرنا سابقاً :- Oracle Database server = Oracle Instance + oracle Database ويحتوى هذا الجزء من مجموعة من الملفات :- 1- Control files :- وهو الملف المسؤل عن التزامن فى قاعدة البيانات بجانب انه يحتوى عن المعلومات الاساسية عن قاعدة البيانات كإسم قاعدة البيانات وبدونه لا تعمل قاعدة البيانات إذ أنه يحتوى على مسارات ملفات قاعدة البيانات وإذا تمت إضافة ملف فى قاعدة البيانات يتم تحديث الControl file اوتومتيكياً . 2- Redo log files :- ويستخدم هذا الملف حتى نستطيع عمل إسترجاع لقاعدة البيانات (Recover) فى حالة حدوث مشكلة فى قاعدة البيانات ، إذ أنه يحفظ التغيرات التى تحدث فى قاعدة البيانات . يتم تحديد هذا الملف عند فتح قاعدة البيانات عن طريق الParameter file ، ولحمايته من الفقدان يجب استخدام اكثر من نسخة من هذا الملف عن طريق تحديد هذه النسخ فى ملف الParameter file . 3- Database files :- وهو المخزن الحقيقى للبيانات فى قاعدة البيانات أى أنه يحتوى على الجداول والمناظير والمراجع (Table & Views & Indexes ) والكائنات الاخرى . 4- Archived redo log files :- وهو عبارة عن نسخة من ال Redo log files ونحتاجه أيضاً عند عمل إسترجاع لقاعدة البيانات (Recover) . 5- الملفات الأخرى:- * Parameter file ويستخدم لعمل تهيئة للOracle Instance لحظة تشغيلها * Password fileويسمح هذا الملف للمستخدمين الأتصال بقاعدة البيانات عن بعد كمدراء لقاعدة البيانات ، وليس لتخزين كلمات السر للمستخدمين فى قاعدة البيانات كما يتصور البعض . Tablespace and Data File:- وهنا لابد من الحديث إلى انه يمكن تقسيم قاعدة البيانات الى (Physical & Logical) : Physical: حيث يمكن التعامل مع هذا النوع سواء كانت قاعدة البيانات مفتوحة أو مغلقة بحيث يمكن التعامل مع هذا النوع عن طريق نظام التشغيل أو عن طريق قاعدة البيانات. Logical: ولا نستطيع التعامل مع هذا النوع إلى أذا كانت قاعدة البيانات مفتوحة. Tablespace and Data File:- قاعدة البيانات فيزيائياً تتقسم إلى ملفات تخزينية يمكن أن تشاهد عن طريق نظام التشغيل وهى ملفات الData files ، وكذلك قاعدة البيانات تنقسم إلى وحدات تخزين منطقية (Logical) وتسمى هذه الوحدات Tablespace . الTablespace وهو وحدة منطقية يحتوى على Data file واحد أو أكثر وكل Data file ينتمى فى الحقيقة إلى Tablespace واحد . يمكن إنشاء Bigfile Tablespaces بحيث يحتوى على ملف Data file واحد ولكن كبير جداً بحيث يكون اكبر من 4GB . الTablespace يتكون من مجموعة من الوحدات المنطقية الاصغر وهى تسمى Segments وهى وحدات منطقية يتكون منها الTablespace بحيث تنتمى الSegment لTablespace واحد فقط وهى تتكون من مجموعة من الوحدات المنطقية الأصغر التى تسمى Extents وهى ايضاً وحدات منطقية تنتمى كل Extent لSegment واحد وتتكون أيضا الExtents من مجموعة أخرى أصغر وهى أصغر وحدة منطقية تسمى الBlocks . وعند إنشاء قاعدة البيانات يتم تحديد حجم الBlock لقاعدة البيانات ، ويمكن أن يكون حجم الBlock 3BK او 5BK أو غيره وأكبر حجم للBlock يتوقف على نظام التشغيل ، وقبل الاصدار Oracle 9i Release كانت قاعدة البيانات تعمل على حجم واحد للBlock وابتداءً من الإصدار Oracle 9i Release أمكن لقاعدة البيانات العمل بأحجام مختلفة من اللBlock ولنفترض السناريو الاتى :- فانفترض أن هذا الشكل يمثل Tablepace يسمى Users . هذا الTablespace يحتوى على ملفين من الData file ( (D1&D2هذا الTablespace يحتوى على مجموعة من الSegments (T1&T2&T3) الSegment الاول T1 مقسم إلى مجموعة من الExtents وكل Extent بالطبع مكون من مجموعة من الBlocks ، نلاحظ هنا أن الSegment T1 يمتد على كل من الملفين (D1&D2) أى أن جزء من الSegment فى الملف D1 والجزء الاخر فى الملف D2 لكن فى الوقت نفسه هو ينتمى لTablespace واحد . قبل نهاية هذا الباب فلنتابع معاً هذا السناريو وهو يوضح خطوات عمل قاعدة البيانات : 1- الInstance تعمل على المخدم (Server). 2- فى هذه المرحلة المستخدم يحاول الاتصال بقاعدة البيانات عن طريق الApplication أو أحد أدوات قواعد البيانات. 3- فى هذه اللحظة تم التحقق من طلب المستخدم وتم إنشاء الاتصال وتكوين Server Process. 4- هنا المستخدم طلب تعديل صف . 5- الServer Process يستقبل هذا الطلب ويقوم بعمل اختبار للShared Pool هل هذا الطلب موجود فى الShared SQL Area إذا كان موجود يقوم بالتأكد من أن للمستخدم صلاحية الوصول لهذا البيانات ، اما إذا كان هذا الطلب غير موجود يقوم بإنشاء Shared SQL Area جديد . 6- فى هذه المرحلة يقوم الServer Process بجلب البيانات المطلوبة من الData file من الجدول أو من الData Block المخزنة فى الSGA . 7- بعد جلب البيانات هنا يقوم الServer بتعديل الجدول فى الSGA . 8- لحظة عمل Commit يقوم الLGWR بكتابة العملية فى الRedo Log File . 9- يقوم الDBWn بكتابة التعديلات فى الDisk اى فى الData File . 10- اخيراً يرسل الServer Process يرسل رسالة بنجاح أو فشل العملية . النقاط الرئيسية التى سنناقشها فى هذا الباب :- • فهم الشروط الضرورية لإنشاء قاعدة البيانات . • إنشاء قاعدة بيانات بالطريقة اليدوية . • إنشاء قاعدة البيانات بالأداة DBCA . من أهم مهام مدير قاعدة البيانات هو التخطيط لقاعدة البيانات ، إذ لا يتصور مديراً ناجحاً لقاعدة البيانات لا يخطط بصورةٍ ما لقاعدة بياناته ، وكيف سيتم عمل نسخ احتياطى لقاعدة البيانات ، بعد ذلك يجب أن نحدد ما نحتاجه من الذاكرة والديسك المناسب حسب متطلبات قاعدة البيانات وعموما يجب وضع هذه الاعتبارات عند إنشاء قاعدة البيانات . فى الحقيقة يمكن إنشاء قاعدة البيانات أثناء إنزال الاوركل عن طريق الOUI (Oracle Universal Installer) وذلك بواسطة الاداة DBCA ولكن قد نحتاج لإنشاء قاعدة بيانات أخرى ، عند إنشاء قاعدة بيانات اوركل يجب مراعاة النقاط الاتية:- 1- كم عدد الApplication التى تعمل على قاعدة البيانات . 3- مساحة الذاكرة SGA فهذه الذاكرة مطلوبة لعمل الInstance وهى لا تقبل المشاركة بين أكثر من Instance أى لكل Instance ذاكرة SGA خاصة بها . 4- كذلك الBlock_Size الذى يعتمد عليه الRow_Size .