إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

مواضيع عشوائية في Pl/sql ومميزات جديدة لاتفوتكم


3 رد (ردود) على هذا الموضوع

#1 sky information

sky information

    عضو نشط

  • الأعضــاء
  • 337 مشاركة

تاريخ المشاركة 19 April 2007 - 11:14 PM

مواضيع عشوائية في PL/SQL:
-------------------------------------------------------------------------------------------------
اخترت بعض من المواضيع التي لا غنى عنها وأتمنى أن تستفيدون منها

1- التعامل مع عروض قاموس البيانات .
2- عروض قاموس البيانات المهمة .
3- طريقة الوصول إلى العروض.
4- عروض جديدة قدمت في اوراكل 10G .
5- طريقة التعامل مع الكائنات المعطلة INVALID OBJECTS .
6- طريقة التعامل مع الكائنات المعطلة باستخدام الحزمة Utl_recom المقدمة في 10g .


الجزء الأول
التعــــــــــامل مع عروض قاموس البيانات( (Data dictionary views :


عندما تنشئ أو تستبدل (pl/sql program ) ان مصدر الكود لهذا البرنامج ومحتوياته يخزن في قاعدة البيانات بنفسه ويستعرض من خلال النطاق الواسع لقاموس البيانات (Data Dictionary)

من هنا نحصل على فوائد عديدة للسببين رئيسيين :

-معلومات عن الكود المتاح إليك عن طريق لغة sql

تستطيع ان تكتب استعلامات وحتى (PL/SQL programs) لقراءة محتوى عروض قاموس البيانات والحصول على المعلومات المفيدة عن هذا الكود .

- تدير قاعدة البيانات التبعيات بين الكائنات المخزنة
على سبيل المثال , إذا وظيفة مخزنة تعتمد على جدول ما وبناء ذلك الجدول قد غير فيه ان حالة الوظيفة آليا ستتغير إلى ((Invalid بناء على ذلك تستطيع توثيق ما كتب وما تغير وغير ذلك .

عروض قاموس البيانات لـ( PL/SQL Programmers) :

إن قاموس بيانات الاوراكل مثل الغابة المعشبة مليئة بالمعلومات الهائلة . هنالك المئات من العروض مبنية على المئات من الجداول والكثير من العلاقات الداخلية المعقدة و الأكواد الخاصة.
لنأخذ النظرة الأقرب حول العروض الرئيسية أولا من المهم معرفة ان هنالك ثلاثة انواع او مستويات لعروض قاموس البيانات :

1- USER_* :

تعرض معلومات عن التركيبات التي يمتلكها المستخدم (في مخطط المستخدم) ويمكن الوصول لها بواسطة جميع المستخدمين وليس بها عمود للمالكowner .
2- All_* :

تعرض معلومات حول جميع الكائنات التي يسمح للمستخدم الوصول إليها بما فيها الكائنات المملوكة للمستخدم و الكائنات التي منح المستخدمون الأخرون حق الوصول إليها للمستخدم .
يمكن الوصول الى جميع هذه العروض بواسطة جميع المستخدمين وكل عرض به عمود للمالكowner لأن بعض هذه الكائنات يمكن ان يوجد في مخططات المستخدمين الأخرين .

3- DBA_* :

تعرض معلومات عن جميع التركيبات في قاعدة البيانات.وهي تعرض ما بمخططات جميع المستخدمين ويمكن الوصول إلى هذه المخططات بواسطة مدير قاعدة البيانات وهي توفر معلومات
عن جميع الكائنات في قاعدة البيانات وبها عمود للمالك owner .


بخصوص هذه الجزئية راجع الرابط التالي ..... هنا



الجزء الثاني:
عروض قاموس البيانات المهمة


التالية هي بعض عروض pl/sql الأكثر احتمالا للحصول على المفيد :


User_dependencies - :

هذا العرض غالبا يستخدم من قبل الأوراكل لتأشير عطل الكائنات((objects invalid حينما يكون ضروري .
User_errors - :

هي المجموعة الحالية لأخطاء كل الكائنات المخزنة التي تمتلكها وتستطيع ايضا عرض الأخطاء بواسطة الأمر show errors

User_objects - :

هي الكائنات التي تمتلكها في المخطط, على سبيل المثال تستطيع استخدام هذا العرض لمعرفة الكائنات المعطلة (invalid) وغير ذلك من الفوائد .

User_object_size - :

هي حجم الكائنات التي تمتلكها , تستطيع استعماله لمعرفة البرامج الكبيرة في بيئتك

User_plsql_object_settings - :

قدم في (oracle database 10g Release 1) ويعطي معلومات حول خصائص كائنات pl/sql التي ممكن ان تعدل من خلال الأوامر (Alter,set,ddl) .

- user_procedures :

قدم في(oracle database 9i Release 1) ويعطي معلومات عن البرامج المخزنة مثل الوضع Authid لـ(Procedures,functions).

User_source - :

يحتوي على نص مصدر الكود لجميع الكائنات التي تملكها, وفي قاعدة بيانات اوراكل 9i وما فوق
تتضمن ايضا مصدر(Trigger,java ) هذا عرض جدا مفيد لأنك تستطيع تحليل جميع مصادر الأكواد .

User_triggers - :

يحوي جميع الزنادات التي تمتلكها و أي اعمدة عرفت مع الزنادات .

User_arguments - :

ويحوي جميع الباراميترات في كلا من (function,procedure) في مخطط المستخدم .
تستطيع ان تعرض تراكيب هذه العروض اما باستخدام الأمر Describe او بالإشارة إلى توثيق الأوراكل الملائم .


عرض وبحث مصدر الكود
يجب عليك دائما ان تصون مصدر الكود في ملفات نصية او عن طريق (أداة تطوير صممت خصوصا لتخزين و إدارة( (pl/sql codes خارج قاعدة البيانات .
ان العرض User_source يحوي جميع مصادر الأكواد للكائنات التي يمتلكها المستخدم الحالي ان هيكل بناء User_source كالتالي :

Name - :
اســـــــــــــم الكائن .
- Type :
نوع الكائن (متراوح من وحدات برامج pl/sql إلى مصدر الجافا , مصدر الزناد) .
Line - :
رقم السطـــــــــــــــــر.
- Text :
نص مصدر الكــــــــــــــــــود .

يعتبر User_source مصدر ثمين للمطورين , بالنوع الصحيح من الاستعلامات يمكن ان تعمل
اشياء مثل :

+ عرض نص الكود للحصول على رقم السطر .
+ معرفة الضعف المحتمل في مصدر الكود .
+ الكثير من المميزات .


استعمال User_object_size :
هذا العرض يعطيك المعلومات التالية حول البرامج المخزنة في قاعدة البيانات :
Source_size - :
حجم المصـــــــــــــــدر بالبايتات .
- Parsed_size :

حجم تعريـــــــب الكائن بالبايتات .
- Code_size :
حجم الكـــــــــــــــــــود بالبايتات هذا الكود يجب ان يكون في الذاكرة عندما ينفذ الكائن .

الحصول على خصائص الكود المخزن :
إن العرض User_plsql_object_settings)) قدم في (Oracle database 10g release 1)
وهو يزود بالمعلومات التالية حول (compiler settings) لكائنات pl/sql المخزنة :

- PL/SQL_OPTIMIZE_LEVEL :
مستوى تحسين الكفائة الذي كان يستخدم في تجميع (compilation) الكائن .
- PL/SQL_CODE_TYPE :
نمط التجميع للكائن .
PL/SQL_DEBUG - :
يشير سواء إلى الكائن او ليس الكائن الذي جمع بالتنقيح (debugging).
PL/SQL_WARNINGS - :
الأوضاع التحذيرية لـ(compiler) الذي استخدم في تجميع الكائن .
- NLS_LENGTH_SEMANTICS :
معرفة رموز طول (NLS ( الذي كانت تستعمل في تجميع الكائن .

نهاية الجزء الثاني ........................................

الجزء الثالث
طريقة الوصول إلى العروض



نتعلم الآن طريقة الوصول لهذه العروض................................................ مثال
العرض User_objects يحتوي على المعلومات الرئيسية حول الكائن

Object_name :
اسم الكائن.
Object_type :
نوع الكائن (Package,function,procedure) ... الخ.
Status :
حالة الكائن هل هو معطل او لا (Valid or Invalid)
Last_ddl_time :
يشير إلى اخر وقت قد غير في هذا الكائن .

السكربت التالي يعرض حالة كائنات pl/sql

SET PAGESIZE 66
COLUMN object_type FORMAT A20
COLUMN object_name FORMAT A30
COLUMN status FORMAT A10
BREAK ON object_type SKIP 1
SPOOL psobj.lis
SELECT object_type, object_name, status
FROM user_objects
WHERE object_type IN (
'PACKAGE', 'PACKAGE BODY', 'FUNCTION', 'PROCEDURE',
'TYPE', 'TYPE BODY', 'TRIGGER')
ORDER BY object_type, status, object_name
/
SPOOL OFF
مخرجات هذا السكربت تحتوي على( نوع,اسم,حالة) الكائن

نهاية الجزء الثالث....................................................


الجزء الرابع
التعامل مع الكائنات المعطلة



إعادة تجميع الكود المعطــــــل:
حينما يطرأ تغير لكائن في قاعدة البيانات ,فإن الاوراكل تستعمل عروضها المتعلقة بالتبعية مثل
Public_Dependencies)) لتمييز كل الكائنات التي تعتمد على الجسم المتغير ثم يؤشر الكائنات التابعة كعاطلة ((Invalid على سبيل المثال , إذا وظيفة مخزنة تعتمد على جدول ما وبناء ذلك الجدول قد غير فيه ان حالة الوظيفة آليا ستتغير إلى ((Invalid . هذا كل ما يحصل بشكل آلي . بعد ذلك الاوراكل سيحاول إعادة تجميع البرامج العاطلة تلقائيا حينما تنفذ.
تستطيع ايضا إعادة تجميع الكائن بشكل يدوي , عموما إعادة التجميع يمكن ان تأخذ تماما وقت طويل

إعادة تجميع وحدات البرامج الفردية :

يمكن ان تستخدم الأمر Alter لإعادة تجميع البرنامج الواحد هذه بعض الأمثلة لاستخدام أوامر DLL :
Alter function_name compile reuse settings -
Alter package package_name compile reuse settings –
Alter package package_name compile specification reuse settings -
Alter package package_name compile body reuse settings -


أما في حالة كون هنالك مجموعة من الكائنات المعطلة من الطبيعي انك لن تستخدم الأمر Alterلكل كائن , لذا تستطيع ان تكتب استعلام بسيط يولد الأوامر اللازمة

SELECT 'ALTER ' || object_type || ' ' || object_name
|| ' COMPILE REUSE SETTINGS;'
FROM user_objects
WHERE status = 'INVALID';

استخدام Utl_recom :

ابتداء من (Oracle database 10g release 1) الحزمة الداخلية Utl_recom تقدم برنامجا بواسطتهم تستطيع إعادة تجميع أي كائن عاطل في المخطط
(and Recomp_Parallel Recomp_Serial) لاستخدام هذه الحزمة يجب أن تتصل كـ(SYSDBA)
هذا مثال لاستخدام (Serial version) لإعادة تجميع الكائنات المعطلة في مخطط المستخدم Scott
Call utl_recomp.recomp_serial('SCOTT');

إذا كانت عندك معالجات متعددة إن (version parallel)قد يساعدك في إكمال إعادة التجميع بسرعة اكبر . وهذا مثال :

Call utl_recomp.recomp_parallel(4,'SCOTT'); 

تعرض الاوراكل ايضا برنامج DBMS_UTILITY.RECOMPILE_SCHEMA لإعادة تجميع الكائنات المعطلة ومن فوائد استخدام هذا البرنامج على utl_recomp)) انك لن تحتاج الاتصال ك (SYSDBA) .
على كل حال يوصى تجنب استخدام DBMS_UTILITY.RECOMPILE_SCHEMA
لأنه في بعض الحالات لا يبدو فعال لإعادة تجميع الكائنات المعطلة.

تحياتي للجميع..........................................




وهذ الملف ملف مرفق  MCD.doc   74كيلو   165 عدد مرات التحميل

#2 SpaceToon

SpaceToon

    مشترك

  • الأعضــاء
  • 53 مشاركة

تاريخ المشاركة 20 April 2007 - 03:52 AM

شكرا جزيلا
جزاك الله خيرا

#3 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 20 April 2007 - 01:56 PM

That was really a good lesson ....... I hope to keep on
God bless you



#4 sky information

sky information

    عضو نشط

  • الأعضــاء
  • 337 مشاركة

تاريخ المشاركة 21 April 2007 - 12:27 AM

شكر لكم جميعا