صيانة مكعب المقطع الموحد واستكشاف أخطائه وإصلاحها

استخدم الإرشادات التالية لصيانة أو استكشاف أخطاء مكعبات Essbase التي لها مقاطع موحدة وحلها.

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

وضع نماذج مكعبات المقطع الموحد واختبارها

عند تصميم مكعب مقطع موحد، اتبع إرشادات الاختبارات هذه إذا كان تكوين المقطع يستغرق وقتًا طويلاً. يمكن أن تكون هذه الإرشادات مفيدة عند اتباع نهج مرحلي لاكتشاف أخطاء الأداء وإصلاحها أو مراقبة الأداء.

  • ابدأ مشروع المقطع الموحد في بيئة اختبار.

  • ابدأ بنماذج المكعب التي لها الخاصيات التالية:

    • ليست الكثير من المستويات

    • ليست الكثير من السمات أو الأعضاء المشتركة

  1. عند تكوين مقطع موحد، قم بجدولة العمليات بدون اتصال بالإنترنت عند عدم السماح بالاستعلامات مقابل المثيل.

  2. افصل جلسات مستخدمي Essbase النشطة تدريجيًا، باستخدام MaxL تبديل التطبيق أوامر التعطيل و/أو تعطيل الاتصال (لمنع أي نشاط مستخدم جديد)، وبعد ذلك عليك تبديل النظام وتسجيل الخروج من الجلسة و/أو إيقاف الطلب (إذا كنت بحاجة لإنهاء أي جلسات نشطة لا يجب إكمالها). لا حظ أن الأمر MaxL لا يمكنه إنهاء أي طلبات قد تكون قيد التشغيل في Autonomous Data Warehouse. إذا قمت بتعطيل الأوامر في التطبيق، فعليك تذكر إعادة تمكين الأوامر بعد تكوين المقطع الموحد.

  3. تنفيذ ضبط انتهاء المهلة:
    • وكيل HTTPS في شبكة العملاء - تعديل أوقات انتهاء مهلة شبكة العملاء
    • موازن الحمل - زيادة وقت انتهاء مهلة LoadBalance إلى 1260 ثانية (21 دقيقة)
    • زيادة وقت انتهاء مهلة HTTPD إلى 21 دقيقة
      /etc/httpd/conf.d/00_base.conf:ProxyTimeout 1260
      /etc/httpd/conf.d/00_base.conf:Timeout 1260
    • انتهاء مهلة APS/JAPI:
      • في صفحة وحدة التحكم في واجهة Essbase على الويب، حدد التكوين، ولاحظ قيمة olap.server.netSocketTimeOut. تعني القيمة 200 مللي ثانية أن كل 5 من هذه الخصائص تمنح ثانية واحدة من وقت الانتظار.
      • لتعيين حد وقت انتهاء مهلة APS/JAPI إلى 30 دقيقة، قم بتعيين olap.server.netRetryCount على 9000.
  4. تكوين المقطع الموحد.
  5. اعكس تعديلات انتهاء المهلة في الخطوة 3.
  6. تمكين المستخدمين من العودة إلى النظام باستخدام تبديل التطبيق أوامر التمكين و/أو الاتصال، إذا تم تعطيلها سابقًا.
  7. للحصول على تقارير حول مكعب Essbase بمقطع موحد، اضبط QRYGOVEXECTIME ليكون أكبر من الوقت المتوقع لتنفيذ الاستعلامات مقابل المقاطع الموحدة. لاحظ أن الأمر QRYGOVEXECTIME لا يمكنه إنهاء أي طلبات قد تكون قيد التشغيل في Autonomous Data Warehouse.
  8. بعد اكتمال اختبار بيئة التطوير وضبطها، استخدم الخطوات أعلاه من 1 إلى 7 لإضافة المقطع الموحد إلى بيئة إنتاج.

ملاحظة:

إذا رأيت خطأ "فشل حفظ الإطار العام" عند تكوين مقطع موحد، فانتظر اكتمال الجلسة، ثم قم بتجديد المستعرض. في حالة تكوين مقطع موحد، قم بالتحقق منه في SQL Developer. إذا تم التحقق منه في SQL Developers، يكون المقطع الموحد جاهزًا للاستخدام. إذا لم يتم التحقق منه في SQL Developer، يجب إصلاح النموذج وضبط انتهاء الوقت حسب الحاجة كما هو موضح في الخطوة 3.

احتياطات بيانات التعريف لمكعبات المقاطع الموحدة

عندما يحتوي Essbase على مقطع موحد، فانتبه عند تحرير الإطار العام للمكعب. إذا قمت بإضافة أعضاء أو إعادة تسميتهم، فتأكد من تمثيل تغييرات بيانات التعريف أيضًا في جدول البيانات الفعلية في Autonomous Data Warehouse.

إذا أصبح إطار Essbase العام غير متزامن مع جدول البيانات الفعلية في Autonomous Data Warehouse، فسيصبح المقطع الموحد غير صالح أو لن يعمل بشكل صحيح. لإصلاحه، يجب إسقاط المقطع الموحد، وإجراء التغييرات على الإطار العام وجدول البيانات الفعلية، ثم إعادة تكوين المقطع الموحد.

إذا أصبح أحد المقاطع الموحدة غير صالح، فقد تواجه خطأ يبدأ بـ Essbase Error(1040235): Remote warning from federated partition.

ستؤدي الأنواع التالية من تغييرات إطار Essbase العام إلى جعل المقطع الموحد غير صالح:

  • إضافة الأبعاد أو إعادة تسميتها أو إزالتها

  • إضافة الأعضاء المخزنة في البُعد المحوري أو إعادة تسميتها أو إزالتها

  • تغيير أي عضو من مخزن إلى ديناميكي

بالنسبة للأنواع الأخرى من تغييرات إطار Essbase العام غير المشار إليها أعلاه (على سبيل المثال، إضافة عضو بُعد غير محوري أو إزالته)، يجب إجراء التغييرات المقابلة لصف البيانات في جدول البيانات الفعلية. بخلاف ذلك، قد لا يعمل المقطع الموحد بشكل صحيح.

إذا كنت تعرف مقدمًا أن بيانات تعريف إطار Essbase العام ستتغير، فمن الأفضل إزالة المقطع الموحد أولاً، وإجراء تغييرات الإطار العام، وتحديث جدول البيانات الفعلية، ثم إعادة تكوين المقطع الموحد.

لكن إذا تغيرت بيانات تعريف Essbase وتسببت في جعل المقطع الموحد غير صالح، فاتخذ الإجراء التالي:

  1. قم بإزالة المقطع الموحد، والاتصال المرتبط به (إذا كان غير مستخدم)، كما هو موضح في إزالة مقطع موحد.

    من مخطط مستخدم المقطع الموحد في Autonomous Data Warehouse، احذف أي جداول تم تكوينها بواسطة Essbase وكائنات أخرى فشلت إزالتها باستخدام المقطع الموحد.

  2. تأكد من اكتمال تغييرات الإطار العام في مكعب Essbase.

  3. أعد تكوين جدول البيانات الفعلية. يرجى الاطلاع على تكوين جدول البيانات الفعلية.

  4. أعد تكوين الاتصال بـ Autonomous Data Warehouse. قد يكون هذا اتصالاً عامًا (ضمن أيقونة المصادر الرئيسية في واجهة Essbase على الويب)، أو قد يكون في المصادر المعرفة للتطبيق فقط. اتبع التعليمات الواردة في تكوين اتصال للمقاطع الموحدة.

  5. أعد تكوين المقطع الموحد، كما هو موضح في تكوين مقطع موحد.

ماذا تفعل إذا تغيرت تفاصيل اتصال قاعدة البيانات

إذا تغيرت تفاصيل اتصال Autonomous Data Warehouse الذي يستخدمه Essbase لأجل المقطع الموحد، فستحتاج إلى إسقاط المقطع الموحد وإعادة تكوينه، وتنظيف جداول بيانات التعريف والكائنات المرتبطة من مخطط قاعدة البيانات.

يجب إسقاط المقطع الموحد وإعادة تكوينه إذا وقعت أي من الأحداث التالية بعد تكوين المقطع الموحد:

  • تغيير منفذ Autonomous Data Warehouse

  • تغيير اسم اتصال

  • اتصال يستخدم محفظة، وتنتقل من اسم خدمة لآخر (لإجراء تغييرات على الأداء أو التزامن)

  • تحديث للإطار العام يقوم بتغيير رابط عضو جدول البيانات الفعلية، مما يؤدي إلى إيقاف تزامن المقطع الموحد. لمعرفة التفاصيل، يرجى الاطلاع على احتياطات بيانات التعريف لمكعبات المقاطع الموحدة.

إذا كنت تعرف مقدمًا أن تفاصيل الاتصال ستتغير، فمن الأفضل إزالة المقطع الموحد قبل حدوث التغييرات، وإعادة تكوينه بعدها. لكن، إذا تغير الاتصال وتسبب في جعل المقطع الموحد غير صالح، فاتخذ الإجراء التالي:

أسقط المقطع الموحد

قم بإزالة المقطع الموحد، والاتصال المرتبط به (إذا كان غير مستخدم)، كما هو موضح في إزالة مقطع موحد.

قم بتنظيف جداول بيانات التعريف والكائنات المرتبطة بالمقطع الموحد

من مخطط مستخدم المقطع الموحد في Autonomous Data Warehouse، أسقط أي جداول تم تكوينها بواسطة Essbase وكائنات أخرى فشلت إزالتها باستخدام المقطع الموحد.

  1. ssh إلى مضيف خادم Essbase كمستخدمopc.

                      ssh -i MPOCI_KEY.pem opc@100.xxx.xxx.xxx
                   
  2. تغيير إلى مستخدم oracle (والانتقال إلى الدليل الرئيسي الخاص به).

                      sudo su - oracle
                   
  3. الانتقال إلى دليل التطبيقات.

                      cd /u01/data/essbase/app
                   
  4. باستخدام تطبيق Essbase واسم المكعب، حدد البادئة الفريدة المرتبطة بكائنات مقطعك الموحد وبيانات التعريف.

    1. الحصول على اسم التطبيق (AppName). الاسم حساس لحالة الأحرف، لذا تأكد من الحالة الصحيحة. في هذا المثال، AppName = عينة.

      ls
      Sample
    2. قم بعد عدد الأحرف (appx) في اسم التطبيق.

      مثال: appx = 6.

    3. انتقل إلى دليل المكعب واحصل على اسم المكعب (DbName). الاسم حساس لحالة الأحرف، لذا تأكد من الحالة الصحيحة. في هذا المثال، DbName = أساسي.

      cd /Sample
      ls
      Basic
    4. قم بعد عدد الأحرف (dby) في اسم التطبيق.

      مثال: dby = 5.

    5. قم بتكوين البادئة كـ:

      ESSAV_<appx><AppName>_<dby><DbName>_

      مثال:

      <Prefix> = ESSAV_6Sample_5Basic_
  5. باستخدام SQL Developer أو أي أداة أخرى، اتصل بـ Oracle Database كمستخدم المخطط المتصل به المقطع الموحد.

  6. تشغيل عبارة SELECT لتكوين قائمة بالكائنات المرتبطة بتطبيق مقطعك الموحد. هذه هي الكائنات التي ستقوم بتنظيفها في الخطوة التالية.

    صياغة عبارة SELECT هي:

    SELECT * FROM user_OBJECTS WHERE OBJECT_NAME like '<Prefix>%';

    مثال:

    SELECT * FROM user_OBJECTS WHERE OBJECT_NAME like 'ESSAV_6Sample_5Basic_%';
  7. قم بتشغيل إجراء PL/SQL مخزن لتنظيف كل طرق العرض التحليلية والحزم والتدرجات والجداول والكائنات الأخرى المرتبطة بالبادئة.

    مثال

    استبدل ESSAV_6Sample_5Basic_ بالبادئة الخاصة بك.

    SET SERVEROUTPUT ON;
    
    declare
      prefix_str varchar2(70) := 'ESSAV_6Sample_5Basic_';
    
    BEGIN
    
      FOR c IN ( SELECT ANALYTIC_VIEW_NAME FROM user_analytic_views WHERE ANALYTIC_VIEW_NAME like prefix_str || '%' )
      LOOP
        EXECUTE IMMEDIATE 'DROP ANALYTIC VIEW "' || c.ANALYTIC_VIEW_NAME || '" ';
        DBMS_OUTPUT.PUT_LINE('ANALYTIC VIEW ' || c.ANALYTIC_VIEW_NAME || ' dropped successfully.');
      END LOOP;
    
      FOR c IN ( SELECT distinct OBJECT_NAME FROM USER_PROCEDURES WHERE OBJECT_TYPE='PACKAGE' and OBJECT_NAME like prefix_str || '%' )
      LOOP
        EXECUTE IMMEDIATE 'DROP PACKAGE "' || c.OBJECT_NAME || '" ';
        DBMS_OUTPUT.PUT_LINE('PACKAGE ' || c.OBJECT_NAME || ' dropped successfully.');
      END LOOP;
    
      FOR c IN ( SELECT distinct HIER_NAME FROM USER_HIERARCHIES WHERE HIER_NAME like prefix_str || '%' )
      LOOP
        EXECUTE IMMEDIATE 'DROP HIERARCHY "' || c.HIER_NAME || '" ';
        DBMS_OUTPUT.PUT_LINE('HIERARCHY ' || c.HIER_NAME || ' dropped successfully.');
      END LOOP;
    
      FOR c IN ( SELECT distinct DIMENSION_NAME FROM USER_ATTRIBUTE_DIM_TABLES_AE WHERE DIMENSION_NAME like prefix_str || '%' )
      LOOP
        EXECUTE IMMEDIATE 'DROP ATTRIBUTE DIMENSION "' || c.DIMENSION_NAME || '" ';
        DBMS_OUTPUT.PUT_LINE('ATTRIBUTE DIMENSION ' || c.DIMENSION_NAME || ' dropped successfully.');
      END LOOP;
    
      FOR c IN ( SELECT distinct TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME like prefix_str || '%' )
      LOOP
        EXECUTE IMMEDIATE 'DROP TABLE "' || c.TABLE_NAME || '" purge';
        DBMS_OUTPUT.PUT_LINE('TABLE ' || c.TABLE_NAME || ' dropped successfully.');
      END LOOP;
    
      FOR c IN ( SELECT distinct VIEW_NAME FROM USER_VIEWS WHERE VIEW_NAME like prefix_str || '%' )
      LOOP
        EXECUTE IMMEDIATE 'DROP VIEW "' || c.VIEW_NAME || '" ';
        DBMS_OUTPUT.PUT_LINE('VIEW ' || c.VIEW_NAME || ' dropped successfully.');
      END LOOP;
    
      FOR c IN ( SELECT distinct TYPE_NAME FROM USER_TYPES WHERE TYPE_NAME like prefix_str || '%' )
      LOOP
        EXECUTE IMMEDIATE 'DROP TYPE "' || c.TYPE_NAME || '" FORCE';
        DBMS_OUTPUT.PUT_LINE('TYPE ' || c.TYPE_NAME || ' dropped successfully.');
      END LOOP;
    
    END;
    /
    
  8. أسقط الجداول المتعلقة ببيانات التعريف ذات الصلة وقم بتحديثها. أولاً، يجب أن تحصل على قيم ESSBASE_INSTANCE_UNIQUE_ID وOTL_ID.

    1. ssh إلى مضيف خادم Essbase كمستخدمopc.

                              ssh -i MPOCI_KEY.pem opc@100.xxx.xxx.xxx
                           
    2. تغيير إلى مستخدم oracle (والانتقال إلى الدليل الرئيسي الخاص به).

                              sudo su - oracle
                           
    3. ابحث عن عملية وكيل Essbase.

                              ps -ef | grep ESSS | grep -v "grep"
                           

      يجب أن يقوم الأمر أعلاه بإرجاع قائمة عمليات تبدأ بـ oracle متبوعة بمعرفي العمليتين؛ على سبيل المثال،

      oracle   10769  19563 ...

      اعتبر أن معرف العملية الأولى هو <PID>، الذي ستستخدمه في الخطوة.

    4. استخدم أمر السلاسل لتسجيل قيمة ESSBASE_INSTANCE_UNIQUE_ID.

      strings /proc/<PID>/environ | grep ESSBASE_INSTANCE_UNIQUE_ID

      مثال:

                              strings /proc/10769/environ | grep ESSBASE_INSTANCE_UNIQUE_ID
                           

      يجب أن يقوم الأمر أعلاه بإرجاع قيمة ESSBASE_INSTANCE_UNIQUE_ID، على سبيل المثال،

      ESSBASE_INSTANCE_UNIQUE_ID=EWRnHFlQteCEzWUhF7P3TPKunf3bYs
    5. باستخدام SQL Developer أو أي أداة أخرى، اتصل بـ Oracle Database كمستخدم المخطط المتصل به المقطع الموحد.

    6. قم بتشغيل عبارة SELECT للحصول على قيمة OTL_ID.

      صياغة عبارة SELECT هي:

      SELECT OTL_ID FROM ESSAV_OTL_MTD_VERSION where APPNAME ='<AppName>' and "JAGENT_INSTANCE_ID"='<ESSBASE_INSTANCE_UNIQUE_ID>';

      مثال

      استبدل ESSAV_6Sample_5Basic بقيمة AppName لديك، واستبدل 'EWRnHFlQteCEzWUhF7P3TPKunf3bYs' بقيمة ESSBASE_INSTANCE_UNIQUE_ID.

      SELECT OTL_ID FROM ESSAV_OTL_MTD_VERSION where APPNAME ='ESSAV_6Sample_5Basic' and "JAGENT_INSTANCE_ID"='EWRnHFlQteCEzWUhF7P3TPKunf3bYs';
    7. يجب أن يقوم الاستعلام أعلاه بإرجاع قيمة OTL_ID، على سبيل المثال،

      62
    8. قم بتشغيل إجراء PL/SQL لإسقاط الجداول المتعلقة ببيانات التعريف المرتبطة بـ OTL_ID.

      مثال

      استبدل 62 بقيمة OTL_ID لديك.

      SET SERVEROUTPUT ON;
      BEGIN
        FOR c IN ( SELECT distinct TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME like 'ESSAV_MTD_62_%' )
        LOOP
          EXECUTE IMMEDIATE 'DROP TABLE "' || c.TABLE_NAME || '" purge';
          DBMS_OUTPUT.PUT_LINE('TABLE ' || c.TABLE_NAME || ' dropped successfully.');
        END LOOP;
      END;
      /
      
    9. قم بتشغيل عبارة UPDATE لتعيين جدول ESSAV_OTL_MTD_VERSION على الحالة "غير نشط".

      مثال

      استبدل ESSAV_6Sample_5Basic بقيمة AppName لديك، واستبدل EWRnHFlQteCEzWUhF7P3TPKunf3bYs بقيمة ESSBASE_INSTANCE_UNIQUE_ID.

      UPDATE "ESSAV_OTL_MTD_VERSION" SET  "OTL_STATUS" = 'INACTIVE'  where APPNAME ='ESSAV_6Sample_5Basic' and "JAGENT_INSTANCE_ID"='EWRnHFlQteCEzWUhF7P3TPKunf3bYs';
      commit;

أعد تكوين الاتصال والمقطع الموحد

  1. أعد تكوين الاتصال بـ Autonomous Data Warehouse. قد يكون هذا اتصالاً عامًا (ضمن أيقونة المصادر الرئيسية في واجهة Essbase على الويب)، أو قد يكون في المصادر المعرفة للتطبيق فقط. اتبع التعليمات الواردة في اتصال. تأكد من اختبار الاتصال وحفظه.

  2. أعد تكوين المقطع الموحد، كما هو موضح في تكوين مقطع موحد.

  3. إذا استمر ظهور خطأ الاتصال مثل Essbase Error(1350012): Attempt to connect to OCI failed، فتحقق من https://support.oracle.com/rs?type=doc&id=2925030.1.

النسخ الاحتياطي لتطبيق مقطع موحد واستعادته

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

للتمكن من نسخ مكعب المقطع الموحد احتياطيًا،

  1. انسخ التطبيق احتياطيًا، بدون البيانات، لكن بكل شيء آخر قد تحتاجه (مثل خصائص التكوين والمرشحات والمتغيرات واسكربتات الحساب والبيانات الاصطناعية الأخرى). للقيام بهذا، استخدم تصدير LCM (أو وظيفة تصدير LCM في واجهة Essbase على الويب).

  2. النسخ الاحتياطي لجدول البيانات الفعلية. يرجى الاطلاع على نسخ Autonomous Database احتياطيًا واستعادتها.

  3. حذف تعريف المقطع الموحد من المكعب، باتباع الخطوات التالية في إزالة مقطع موحد.

للتمكن من استعادة مكعب المقطع الموحد من النسخة الاحتياطية،

  1. إعادة تكوين التطبيق، باستخدام أمر LcmImport: استعادة ملفات المكعبات (أو وظيفة استيراد LCM في واجهة Essbase على الويب).

  2. عند الحاجة، استعادة جدول البيانات الفعلية في Autonomous Data Warehouse.

  3. إعادة تكوين الاتصال مع Autonomous Data Warehouse. نوصي باستخدام اسم اتصال جديد لتجنب مواجهة الأخطاء.

  4. إعادة تكوين المقطع الموحد.