E N D
إدارة الموارد Resources • لنفترض أنك مدير للقاعدة في إحدى البنوك أو شركات الإتصالات و تصادف وجود جدول بملايين السجلات ( جدول الإتصالات الهاتفية التي يتم إجراءها ) و جاء موظف جديد ليس له خبرة و نفذ تعليمة select أو Update بدون شرط where أو كانت نتيجة التعليمة التي نفذها تحوي على مليون أو أكثر من السجلات ؟ • فما رأيك ؟ ما الذي سيحدث على السيرفر ؟ • و هل ستتحمل الشبكة أو السيرفر هذا الضغط ؟ • ماذا لو لم يكن موظفا واحداً و كان هناك مجموعة أخرى من الموظفين لن أقول أغبياء و لكن مستهترين و لا يبالون ماذا سوف يحدث ؟ لأنك الوحيد الذي سيلام على توقف القاعدة ...ما الحل ؟؟
Resource Limit Profiles • هي مجموعة من القيم التي نضعها لكي نتحكم بحجم الذاكرة أو كمية البيانات التي يستطيع المستخدم إستغلالها ضمن جلسته الحالية . • يتم وضع هذه القيم داخل مانسميه Profile و يتم إسناده إلى مستخدم أو أكثر عن طريق تعليمات create user أو alter user . ليتم تفعيل هذه الإدارة نحتاج لأن نضع القيمة TRUE إلى البارامتر resource_limit بالطريقة التالية :
Enter user-name: system/itdbConnected to:Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsSQL> alter system set resource_limit=true;System altered.
الآن لنذكر البارامترات التي نستطيع إستخدامها : 1- cpu_per_sesison : و فيها نحدد الوقت الزمني المخصص لكل جلسة و التي تستطيع إستهلاكه من زمن المعالج ، يقاس هذا الوقت بالثانية . 2- session_per_user : كم عدد الجلسات التي يمكن لمستخدم ما أن يقوم بفتحها . (يعلم الجميع بأننا نستطيع تشغيل SQL plus أكثر من مرة و بنفس اسم المستخدم ، كل نسخة من sql plus مفتوحة ندعوها جلسة ) .. 3- connect_time : كم الوقت الزمني الذي تسمح به للمستخدم للإتصال بالقاعدة . 4-IDLE_TIME : الوقت الزمني الذي ستمح به للمستخدم أن يبقي جلسته مفتوحة دون أن يقوم بأي شيء . 5- LOGGICAL_READS_PER_SESSION : كم كمية البيانات التي تريد لمستخدم ما أن يقوم بقراءتها خلال الجلسة الكاملة .. تقاس هذه الكمية بعدد بلوكات البيانات Data Block .. و لكي نفهمها بطريقة مبسطة لإغنها المعادلة التالية : العدد * 4 كيلو بايت ( في العادة ) ... 6- Private_SGA : و هي المساحة المخصصة من الذاكرة لكل جلسة يقوم بفتحها . 7- CPU_PER_CALL : و هو الزمن الأقصى الذي يسمح لتعليمة المستخدم أن تأخذ من زمن المعالج . 8- LOGICAL_READS_PER_CALL : كم كمية البيانات التي تريد لمستخدم ما أن يقوم بقراءتها خلال التعليمة الواحدة . لنتقل إلى التطبيق العملي : تعليمة إنشاء Profile : CREATE PROFILE profile LIMIT[SESSIONS_PER_USER max_value][CPU_PER_SESSION max_value][CPU_PER_CALL max_value][CONNECT_TIME max_value][IDLE_TIME max_value][LOGICAL_READS_PER_SESSION max_value][LOGICAL_READS_PER_CALL max_value][COMPOSITE_LIMIT max_value][PRIVATE_SGA max_bytes]where:profile is the name of the profilemax_value is an integer, UNLIMITED, or DEFAULTmax_bytes is an integer optionally followed by K or M UNLIMITED, orDEFAULT
مثال سنسمح للمستخدم hussam بأن يفتح جلستين فقط و سنسمح له بأن يستهلك من وقت المعالج في التعليمة الواحدة دقيقتين فقط و سنسمح له بقراءة 1 ميغا بايت فقط من البيانات في التعليمة الواحدة و سنسمح له بفتح جلسة فقط لمدة ثلاثين دقيقة : • SQL> create profile hussam_prof limit 2 sessions_per_user 2 3 cpu_per_call 120 4 logical_reads_per_call 1073741824 5 connect_time 1800;Profile created.SQL> alter user hussam profile hussam_prof;User altered.
مثال انا عرفت service عند تنصيب أوراكل باسم hussam وهذا اللي وجدته بالملف متطابق مع السيرفس الموجوده في ادوات admin hussam = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = DJ36262J)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = hussam) ) ) جميل حتى الآن دخلت على الsqlplus وكتبت التالي :اسم المستخدم : sysكلمة السر : change_on_installسلسلة المضيف : EISA ، والنتيجه :
ظهر • ERROR:ORA-28009: connection to sys should be as sysdba or sysoper • غيرت سلسة المضيف إلى sysdba كما فهمت منه والنتيجه :ظهر • ERROR:ORA-12154: TNS: لايمكن تحليل اسم الخدمة
تجاهلت مشكلة sqlplus وذهبت إلى WorkSheet وكتبت الأمركود • create spfile from pfile;تم تكوين الملفيجب إغلاق القاعدة : • كود • shutdown immediate; • ثم إعادة تشغيلها من جديد : • كود • startup ; • ثمكود • alter system set OS_AUTHENT_PREFIX='' scope=spfile*
أخطاء أوراكل على نظام التشغيل ويندوز و بالعكس بالنسبة لــ Sql Plus نفذ هذه الطريقة : 1- إذهب إلى ملف tnsnames.ora و غير اسمه إلى أي شيء تريد ( و إذا بينحذف بيكون أحسن ) .. 2-إذهب إلىStart->programs->oracl-Eaisa->Integration and Migrtion tool ->net Configration Assistant -3 تظهر واجهة : إختار منها Local net service name configration .. -4 تظهر واجهة إختر منها add .. -5يطلب منك اسم السيرفس :اكتبه hussam .. -6 يطلب منك البرتوكول : إختر tcp .. -7يطلب منك اسم جهازك ... ضعه ثم next .. -8يطلب منك إجراء إختبار : أجب بالموافقة ثم التالي .. -9سيقوم بعملية إختبار .. إذا لم ينجح أول مرة إختر change login ثم ضع المستخدم System و كلمة مروره ثم test ... و سينجح بإذن الله ... إختر التالي و أنهي البرنامج ...
إدارة كلمات السر : تعتبر إدراة كلمات السر في أوراكل مشابهة لإدارة كلمات السر في local policy في الويندوز ، فهي تتحكم بعمر كلمة السر ( أي الفترة الزمنية التي يجب على المستخدم تغيير الكلمة بعدها ) أو هل يجب تكرار الكلمة أو عدد الأحرف الأصغري لها ..... إلخ و تهدف هذه الإدارة إلى جعل المستخدمين يلتزمون بقواعد تكفل لكلمات مرورهم السلامة و تقليل إحتمالات سرقتها من قبل أعضاء آخرين ... إلخ . يتم التعامل مع إدراة كلمات السر كما تعاملنا سابقاً مع إدارة الموارد فلا بد من وجود profile نضع فيه الإعدادات التي نريد للتحكم .. ما هي البارامترات التي نستطيع إستخدامها : : FAILED_LOGIN_ATTEMPTS -1 عدد مرات التي سيخطء فيها المستخدم بإدخال كلمة السر و عندها سيتم إغلاق الحساب . PASSWORD_LOCK_TIME -2 عدد أيام الفترة الزمنية للإغلاق .. PASSWORD_LIFE_TIME-3 عدد الأيام التي يجب على السمتخدم أن يقوم بتغيير كلمة مروره بعدها .. PASSWORD_GRACE_TIME-4 ما هي عدد الأيام التي تريد إعطاءها للمستخدم حتى يقوم بتغيير كلمة سره بعد إنقضاء الفترة التي حددناها في المثال السابق .. PASSWORD_REUSE_TIME-5 عدد الأيام التي ستسمح للمتخدم بعدها أن يعيد إستخدام كلمة مرور قديمة .. للتوضيح : لنفرض أن السمتخدم hussam وضعنا له القيم التالية : FAILED_LOGIN_ATTEMPS 3 PASSWORD_LOCK_TIME 2هذا يعني : عندما يحاول تسجيل الدخول بكلمة سر خاطئة أكثر من ثلاثة مرات متتالية عندها سيتم قفل حسابه لمدة يومين إثنين (إلا إذا قام المدير بفك قفل الحساب يدوياً ) قبل أن يتمكن من تسجيل الدخول مرة أخرى ..
إذا وضعنا القيم التالية : PASSWORD_LIFE_TIME : 15PASSWORD_GRACE_TIME : 2PASSWORD_REUSE_TIME : 15 لنفرض أننا الآن يوم 31/7/2006 و كلمة المرور الآن pass1 عندها : في اليوم 14/8 يجب على المستخدم أن يغيير كلمة السر بحيث لديه مهلة حتى 16/8 لعملية التغيير و لن يستطيع إستعمال كلمة سره القديمة pass1 بل يجب أن يضع كلمة مرور جديدة و لن يستطيع إعادة كلمة السر القديمة pass1 ( أي يعيد إستخدامها ) إلا بعد التاريخ 31/8 ... أرجو أن تكون الفكرة قد وصلت .لجماعة المطورين : يمكن أن يتم إجبار السمتخدم على كتابة كلمة سر تتوافق مع خوارزمية معينة تكتب بكود PL/SQL حيث يتم تمرير كلمة السر التي وضعها المستخدم إلى function الذي يتأكد من كونها متوافقة مع القواعد فيقوم بإرجاع true و إلا فيعيد false .ما رأيكم بمثال : دعونا نجبر مستخدمنا hussam على أن تكون كلمة سره تبدأ ب'a' و أن لا تكون مثل إسمه أي ‘hussam' أو أن لا تساوي 'pass' : كود
SQL> connect sys/oracle as sysdbaConnectedSQL>.create or replace function Check_pass(userid_param in varchar2 , pass in varchar2 , old_pass varchar2) return boolean as ch char; begin ch:=substr(pass,1,1); if ( ch='a') and (pass <> 'pass' ) and (pass<>'arabteam') then return true; else return false; end if; end; /Function created.
SQL> create profile hussam_pro 2 limit password_verify_function Check_pass; Profile created.SQL> alter user hussam 2 profile hussam_prof; User altered.SQL> alter user hussam 2 password expire; User altered.SQL> connect hussam/hussam; ERROR:ORA-28001: the password has expiredChanging password for hussamNew password: hussam • Retype new password: hussamERROR:ORA-28003: password verification for the specified password failedORA-28003: password verification for the specified password failedPassword unchanged
أدوات الإدارة في Oracle10g : فعلاُ يمكننا أن نقول أن شركة أوراكل قد خطت خطوة رائعة مع إصدارها 10g بأن توجهت إلى مديري القواعد و أمدتهم بعدد من الأدوات التي سهلت العمل كثيراً ، فمثلاً كنت مضطر إلى أن أحفظ مجموعة ضخمة من التعليمات لإنشاء مكونات القاعدة مثل الفضاءات الجدولية و المقاطع segments و الإمتدادات Extents .. بالإضافة إلى تعليمات إنشاء المستخدمين و حفظ الصلاحيات ... إلخ لذلك فإن دليل المديرين كان لا يفارق حقيبتي ... الآن : وفرت أواركل أداة هي Enterprise Manager التي طورتها عن الإصدار 9i و أصبحت هذه الأداة تعمل عبر مستعرض الانترنت بالاستفادة من مكونات Application Server (ليس موضوعنا الآن ) .. بالإضافة إلى Enterprise Manager ظهرت iSQL PLUS بأدائها المطور عن الإصدار 9i ... بالإضافة إلى أدوات أخرى سنتعرف عليها لاحقاً بعون الله ... الآن لنعد إلى الأداتين لنتعلم كيف نقوم بتشغيلها و إغلاقها ( ملاحظة كل التعليمات التالية يتم تنفيذها عبر محرر الأوامر Dos أو Shell الخاص بــlinux (نظام أوراكل المفضل ) ) :
1- ISQL PLUS : لتشغيل الأداة : كود • isqlplusctl start • لإيقافها : كود • isqlplusctl stop • كيف نستعرضها : تتذكرون المسار الذي طلبت منكم حفظه على الجبين ...إلخ ؟؟؟ اكتبه بالشكل التالي : كود • http://pc_name:port/isqlplus • مثلاً ( في العادة ) : كود • http://localhost:5560/isqlplus/ • إذا نسيته : يمككنك الذهاب إلى المسار التالي : كود • Oracle_home\install\portlist.ini • ستجد " iSQL*Plus HTTP port number =5560
2- Enterprise Manager :و هي الأداة التي سنستعملها كثيراً خلال دورتنا ... لتشغيل الأداة : كود • emctl start dbconsole • لإيقافها : كود • emctl stop dbconsole • لإظهار حالتها : كود • emctl status dbconsole
لأخذ العلم لمحبي الويندوز : الأداتين السابقتين يتم إنشاء Services خاصة بها تجدونها في Services داخل Administrative Tools .. و لا داعي لتشغيلها لأن تشغليها يتم أتوماتيكياً عند بدء التشغيل .. لتشغيل الأداة عبر المستعرض : تماماً كما فعلنا مع ISQL PLUS : كود • http://pc_name:port/em • مثلاً ( في العادة ) : كود • http://localhost:5500/em • إذا نسيته : يمكنك الذهاب إلى المسار التالي : كود • Oracle_home\install\portlist.ini • ستجد Enterprise Manager Console HTTP Port (dbclass) = 5500" " .. عند تشغيلها ستظهر لنا واجهة لتسجيل الدخول ، من الآن و لآخر الدورة نحتاج إلى المستخدم SYS من أجل ما نريد تنفيذه ، لذلك نضع : كود • User Name : SYSPassword : oracle Connect AS : SYSDBA • بعد تسجيل الدخول : نرى ما كنا نحتاج إلى آلاف الأكواد و التعليمات التي كنا مضطرين لكتابتها داخل SQL PLUS .... ما يهمنا الآن هو الضغط على Administration لتظهر لنا صفحة سنتعامل معها دائماً ....
ماهو المتنصت Listener : • طبعاً لسنا في عالم الجاسوسية و ليس في عالم سي أي إيه و إنما نحن في عالم أوراكل .. ما رأيك لو كان لديك شبكة تضم مجموعة من المستخدمين و يريدون استخدام أوراكل .. هل ستنصب أوراكل داتابيس Oracle Database على كل جهاز ؟؟؟ طبعاً لا ز و لماذا لا ؟ لأنك قد تريد أن يتشارك هؤلاء على قاعدة واحدة و يقومون بالتعديل و الإضافة مثلاً على جدول واحد ... الحل : أن تقوم بتنصيب Oracle Database على الجهاز الرئيسي أو أي جهاز آخر ... و البقية ؟؟؟ تقوم بتنصيب مايسمى Oracle Client (يوجد مع نفس قرص Oracle Server و تقوم بإختياره ضمن خيارات التنصيب ) .. فعلياً الأوراكل الكلاينت ليس سوى عبارة عن مجموعة من برامج SQL PLUS و بقية الأدوات التي تتيح لك الإتصال بالأوراكل داتابيس Oracle Database ... ما دخل المتنصت بكل هذا الكلام ؟؟؟المتنصت هو إداة تقوم بالإستماع على المنفذ Port لكي تستقبل طلبات المستخدمين من الأجهزة الأخرى على الشبكة الراغبين بفتح جلسة session مع الأوراكل سيرفر ... فالمتنصت ضروري جداً في حالة كون القاعدة منصبة على جهاز في شبكة و ترغب من الجميع الإتصال بها .... هل وصلت الفكرة ؟؟؟؟
يمكن أن يتواجد أكثر من متنصت واحد و ذلك إذا كان عدد أجهزة الشبكة كثيرة .. و السؤال كيف نتعامل مع المتنصت ؟؟إضافة متنصت جديد : 1- من Start->Programs->oracle10g->migration and configuration tools->Net Configuration Assistant 2- تظهر واجهة نختار منها Listener Configuration ثم Add .. 3- نضع اسم Listener .. 4-نضع البروتكول Protocol الذي نريد أن يستمع إليه المتنصت : في العادة ً نختار tcp لشبكات الويندوز و حتى شبكات Linux ، من يريد التوسع فإن الأخوة في منتدى الشبكات يمكن أن يسهموا في ذلك ... 5- نختار port الذي نريد للمتنصت أن يعمل عليه ، عند اختياره يجب عليك سؤال مدير النظام لأن هذا المدير قد يكون قد أغلق Ports من أجل حماية السيرفر .. في العادة أختار منفذ أوراكل الافتراضي 1521 ... 5-يسألنا هل نريد أن نقوم بإعداد متنصت آخر : نشكره على ذلك و نقول له لا ... ثم Next .. 6-يطلب منا هل نريد تشغيل متنصتنا الجديد .. يمكن أن نختاره ثم نضغط Next .. 7- يظهر رسالة إنتهاء العمل .... نضغط على التالي ثم نخرج من الواجهة ... سهلة أليس ذلك ؟ ... للعلم : فإن أوراكل عند تنصيبه فإنه ينشئ متنصب إفتراضي يسميه Listener يتنصت على port : 1521 .. الآن : ماذا لو أردت عدم إستقبال أي مستخدم للإتصال عبر الشبكة ؟؟؟ ماذا تفعل ؟؟؟ببساطة تغلق المتنصت listener ، كيف ؟؟من محرر الأوامر أو Shell : كود • lsnrctl stop listner_name; • ماذا لو أردنا إعادة تشغيله : كود • lsnctl start listner_name • ما لو أردنا معرفة حالته : كود • lsnctl status listener_name;
بعد جميع هذه العمليات أصبح السيرفر جاهزاً .. ما رأيكم بالمتابعة و تجهيز بقية اجهزة الشبكة ؟؟؟ما أتفقنا عليه أنه في أجهزة الكلاينت نحتاج إلى تنصيب أوراكل كلاينت Oracle Client و هذا ما تستطيع تنصيبه في نفس القرص الخاص بالأوراكل سيرفر Oracle Server سواء الإصدار 10g أو حتى 9i (لن تجده في قرص Oracle Database ) ... بعد تنصيبه يجب أن نخبر التطبيقات المختلفة أين ستوجد القاعدة ، و السؤال كيف ؟؟يتم ذلك بواسطة ما يسمى Local Net Services Naming الذي نستخدمه لكي نحدد طرق الإتصال بالقاعدة ... دقيقة واحدة : هل يذكر أحد أين استعملناه ؟؟؟ هل يذكر أحد tnsnames.ora ؟؟؟ آمل أنك تذكرتموه ... فعلياً فإن tnsnames.ora يحوي Local Net بالبنية التالية : كود • Connection_Host= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = PC_NAME "اسم الجهاز الذي يحوي القاعدة " )(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =GLOBAL_DATABASE_NAME) )
الآن لنتقل إلى الخطوات العملية التي يجب تنفيذها على أجهزة client : 1- نقوم بتشغيل Net Configuration Assistant ... 2- من الواجهة نختار كما في الصورة :
3- تظهر واجهة نختار منها add . 4-نضع اسم Service Name .. تتذكرون Global Name الذي وضعناه مع اسم SID ؟؟؟ هذا هو .. في مثالنا نضع dbclass.hussam.com .. 5- نضع اسم البرتوكول الذي سنعتمد عليه ... ضع TCP .. 6- ضع اسم الجهاز الذي يحوي القاعدة و رقم port الذي يعمل عليه المتنصت ... 7- تظهر واجهة يسأل فبها هل نريد تجربة الإتصال .. طبعاً نختار Yes ثم تظهر واجهة تبين لنا نجاح الإتصال أم عدمه .. إضغط على زر change Login و ضع كلمة المرور لــSYS أو System ثم Ok إذا نجح الإتصال فمبروك إذا لم ينجح تأكد من إعدادات الشبكة لديك ....المهم يجب أن تظهر الصورة التالية : • 8- عند الإنتهاء يطلب منك اسم NET SERVICE NAME و هو الاسم الذي ستعامل معه مستخدموك في برامجهم أي عندما سيسجلون الدخول إلى برامج Sql Plus سيضعون في Connection String ما تضعه أنت في NET SERVICE NAME