Mentenanţa şi rezolvarea problemelor pentru cuburile cu partiţii federative

Utilizaţi următoarele instrucţiuni pentru a întreţine sau a rezolva problemele cuburilor Essbase cu partiţii federative.

Acest subiect presupune că o partiţie ca element al unei federaţii a fost creată şi au fost examinate informaţiile detaliate în subiectele anterioare.

Modelarea şi testarea cuburilor cu partiţii federative

La proiectarea unui cub cu partiţii federative, urmaţi aceste instrucţiuni de testare dacă crearea durează prea mult. Aceste instrucţiuni pot fi utile pentru utilizarea unei abordări etapizate pentru rezolvarea problemelor sau monitorizarea performanţelor.

  • Începeţi proiectul cu partiţii federative într-un mediu de testare.

  • Începeţi cu modele de cuburi care au următoarele caracteristici:

    • nu au multe niveluri

    • nu au mulţi membri partajaţi sau multe atribute partajate

  1. La crearea unei partiţii federative, programaţi operaţiuni offline când interogările nu sunt permise pentru instanţă.

  2. Deconectaţi treptat sesiunile active ale utilizatorilor Essbase, utilizând comenzi de dezactivare alter application MaxL şi/sau dezactivare conectări (pentru a împiedica orice activitate nouă a utilizatorilor), urmate de alter system deconectarea sesiunii şi/sau o cerere de oprire (dacă trebuie să deconectaţi sesiuni active care nu trebuie finalizate). Reţineţi că MaxL nu poate întrerupe nicio cerere care rulează în Autonomous Data Warehouse. Dacă dezactivaţi comenzile în aplicaţie, nu uitaţi să le reactivaţi după crearea partiţiei federative.

  3. Efectuaţi optimizarea expirărilor:
    • Proxy HTTPS în reţeaua clientului - ajustaţi limita pentru expirările din reţeaua clientului
    • Load balancer - creşteţi limita pentru expirarea LoadBalance la 1260 de secunde (21 de minute)
    • Creşteţi limita pentru expirările HTTPD la 21 de minute
      /etc/httpd/conf.d/00_base.conf:ProxyTimeout 1260
      /etc/httpd/conf.d/00_base.conf:Timeout 1260
    • Expirare APS/JAPI:
      • Pe pagina Consolă din interfaţa web Essbase, selectaţi Configuraţie şi reţineţi valoarea pentru olap.server.netSocketTimeOut. Valoarea de 200 ms înseamnă că la fiecare 5 reîncercări pentru aceste proprietăţi, se contorizează o durată de aşteptare de 1 secundă.
      • Pentru a seta limita de expirare APS/JAPI la 30 de minute, setaţi olap.server.netRetryCount la 9000.
  4. Creaţi partiţia federativă.
  5. Restabiliţi ajustările pentru expirare de la pasul 3.
  6. Permiteţi accesul utilizatorilor înapoi în sistem utilizând alter application comenzi de activare şi/sau conectări, dacă au fost dezactivate anterior.
  7. Pentru rapoartele pentru un cub Essbase cu o partiţie federativă, optimizaţi QRYGOVEXECTIME astfel încât să fie mai mare decât durata preconizată pentru executarea interogărilor pe partiţiile federative. Reţineţi că QRYGOVEXECTIME nu poate întrerupe nicio cerere care rulează în Autonomous Data Warehouse.
  8. După finalizarea testării şi optimizării în mediul de dezvoltare, urmaţi paşii de mai sus, de la 1 până la 7, pentru a adăuga partiţia federativă într-un mediu de producţie.

Notă:

Dacă apare eroarea "Eşec la salvarea structurii" când creaţi partiţia federativă, aşteptaţi finalizarea sesiunii şi apoi reactualizaţi browserul. Dacă partiţia federativă a fost creată, validaţi-o în SQL Developer. Dacă este validată în SQL Developer, atunci partiţia federativă este gata de utilizare. Dacă nu este validată în SQL Developer, atunci modelul trebuie remediat şi este necesară optimizarea expirării aşa cum se descrie mai sus, la pasul 3.

Precauţii privind metadatele pentru cuburi cu partiţii federative

Dacă Essbase are o partiţie federativă, aveţi grijă atunci când editaţi structura cubului. Dacă adăugaţi sau redenumiţi membri, nu uitaţi că modificările la metadate trebuie să fie, de asemenea, reprezentate în tabelul de fapte din Autonomous Data Warehouse.

Dacă structura Essbase nu mai este sincronizată cu tabelul de fapte din Autonomous Data Warehouse, partiţia federativă va deveni nevalidă sau nu va funcţiona corect. Pentru a remedia problema, va trebui să distrugeţi partiţia federativă, să modificaţi structura şi tabelul de fapte şi apoi să recreaţi partiţia federativă.

Dacă o partiţie federativă devine nevalidă, puteţi întâlni o eroare care începe cu Essbase Error(1040235): Remote warning from federated partition.

Următoarele tipuri de modificări aduse structurii Essbase vor provoca invalidarea unei partiţii federative:

  • Adăugarea, redenumirea sau eliminarea dimensiunilor

  • Adăugarea, redenumirea sau eliminarea membrilor stocaţi din dimensiunea pivot

  • Trecerea oricărui membru dintr-o dimensiune stocată în una dinamică

Pentru alte tipuri de modificări la proiectul Essbase care nu sunt indicate mai sus (de exemplu, adăugarea sau redenumirea unui membru al unei dimensiuni non-pivot), trebuie să efectuaţi modificarea corespunzătoare în rândul de date afectat din tabelul de fapte. În caz contrar, partiţia federativă poate să nu funcţioneze corect.

Dacă ştiţi în avans că metadatele structurii Essbase se vor modifica, cel mai bine este să eliminaţi mai întâi partiţia federativă, mă modificaţi structura, să actualizaţi tabelul de fapte şi apoi să recreaţi partiţia federativă.

Dar dacă metadatele Essbase s-au modificat şi au provocat deja invalidarea partiţiei federative, urmaţi paşii de mai jos:

  1. Eliminaţi partiţia federativă şi conexiunea asociată acesteia (dacă nu este utilizată altfel), conform descrierii din Eliminarea unei partiţii ca element al unei federaţii.

    Din schema utilizatorului cu partiţie federativă din Autonomous Data Warehouse, ştergeţi manual toate tabelele generate de Essbase şi alte obiecte care nu au putut fi eliminate cu partiţia federativă.

  2. Verificaţi dacă modificările la proiect sunt efectuate în cubul Essbase.

  3. Creaţi din nou tabelul de fapte. Consultaţi Creaţi tabelul de fapte.

  4. Creaţi din nou conexiunea la Autonomous Data Warehouse. Aceasta poate fi o conexiune globală (din pictograma Surse principale din interfaţa web Essbase) sau poate fi în Sursele definite doar pentru aplicaţie. Urmaţi instrucţiunile descrise în Creaţi o conexiune pentru partiţii ca elemente ale unei federaţii.

  5. Creaţi din nou partiţia federativă, conform descrierii din Creaţi o partiţie ca element al unei federaţii.

Ce trebuie să faceţi dacă s-au modificat datele conexiunii la baza de date

Dacă s-au modificat detaliile conexiunii la Autonomous Data Warehouse pe care le utilizează Essbase pentru o partiţie federativă, va trebui să abandonaţi şi să creaţi din nou partiţia federativă şi să curăţaţi obiectele asociate şi tabelele cu metadate din schema bazei de date.

Va trebui să distrugeţi şi să creaţi din nou partiţia federativă dacă are loc oricare dintre evenimentele următoare după ce a fost creată partiţia federativă:

Dacă ştiţi în avans că se vor modifica datele conexiunii, cel mai bine este să eliminaţi partiţia federativă înainte să aibă loc modificarea şi să o creaţi din nou după modificare. Dar dacă s-a modificat conexiunea şi ca urmare partiţia federativă a devenit nevalidă, urmaţi paşii de mai jos.

Distrugeţi partiţia federativă

Eliminaţi partiţia federativă şi conexiunea asociată acesteia (dacă nu este utilizată altfel), conform descrierii din Eliminarea unei partiţii ca element al unei federaţii.

Curăţaţi obiectele şi tabelele cu metadate corelate cu partiţia federativă

Din schema utilizatorului cu partiţie federativă din Autonomous Data Warehouse, distrugeţi toate tabelele generate de Essbase şi alte obiecte care nu au putut fi eliminate odată cu partiţia federativă.

  1. ssh către gazda Server Essbase ca utilizator opc.

                      ssh -i MPOCI_KEY.pem opc@100.xxx.xxx.xxx
                   
  2. Modificaţi la utilizatorul oracle (şi accesaţi directorul său home).

                      sudo su - oracle
                   
  3. Navigaţi la directorul de aplicaţii.

                      cd /u01/data/essbase/app
                   
  4. Utilizând aplicaţia Essbase şi numele cubului, identificaţi prefixul unic asociat cu obiectele şi metadatele partiţiei federative.

    1. Preluaţi numele aplicaţiei (AppName). Numele ţine cont de litere mari/mici, aşadar captaţi tipul exact de litere. În acest exemplu, AppName = Exemplu.

      ls
      Sample
    2. Număraţi caracterele (appx) din numele aplicaţiei.

      Exemplu: appx = 6.

    3. Navigaţi la directorul cubului şi preluaţi numele cubului (DbName). Numele ţine cont de litere mari/mici, aşadar captaţi tipul exact de litere. În acest exemplu, DbName = Basic.

      cd /Sample
      ls
      Basic
    4. Număraţi caracterele (dby) din numele cubului.

      Exemplu: dby = 5.

    5. Generaţi Prefix ca:

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

      Exemplu:

      <Prefix> = ESSAV_6Sample_5Basic_
  5. Utilizând SQL Developer sau alt instrument, conectaţi-vă la Oracle Database ca utilizatorul schemei la care este conectată partiţia federativă.

  6. Rulaţi o instrucţiune SELECT pentru a crea o listă de obiecte asociate cu aplicaţia cu partiţii federative. Acestea sunt obiectele pe care le veţi curăţa la pasul următor.

    Formatul instrucţiunii SELECT este:

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

    Exemplu:

    SELECT * FROM user_OBJECTS WHERE OBJECT_NAME like 'ESSAV_6Sample_5Basic_%';
  7. Rulaţi o procedură PL/SQL stocată, care curăţă toate vederile analitice, pachetele, ierarhiile, tabelele şi alte obiecte asociate cu Prefix.

    Exemplu

    Înlocuiţi ESSAV_6Sample_5Basic_ cu Prefix.

    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. Distrugeţi şi actualizaţi tabelele corelate cu metadatele asociate. Mai întâi, trebuie să preluaţi valorile pentru ESSBASE_INSTANCE_UNIQUE_ID şi OTL_ID.

    1. ssh către gazda Server Essbase ca utilizator opc.

                              ssh -i MPOCI_KEY.pem opc@100.xxx.xxx.xxx
                           
    2. Modificaţi la utilizatorul oracle (şi accesaţi directorul său home).

                              sudo su - oracle
                           
    3. Căutaţi procesul Agent Essbase.

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

      Comanda de mai sus trebuie să returneze o listare de procese care începe cu oracle urmat de două ID-uri de procese; de exemplu,

      oracle   10769  19563 ...

      Consideraţi că ID-ul primului proces este <PID>, pe care îl veţi utiliza la pasul următor.

    4. Utilizaţi comanda strings pentru a capta valoarea pentru ESSBASE_INSTANCE_UNIQUE_ID.

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

      Exemplu:

                              strings /proc/10769/environ | grep ESSBASE_INSTANCE_UNIQUE_ID
                           

      Comanda de mai sus trebuie să returneze valoarea pentru ESSBASE_INSTANCE_UNIQUE_ID; de exemplu,

      ESSBASE_INSTANCE_UNIQUE_ID=EWRnHFlQteCEzWUhF7P3TPKunf3bYs
    5. Utilizând SQL Developer sau alt instrument, conectaţi-vă la Oracle Database ca utilizatorul schemei la care este conectată partiţia federativă.

    6. Rulaţi o instrucţiune SELECT pentru a prelua valoarea pentru OTL_ID.

      Formatul instrucţiunii SELECT este:

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

      Exemplu

      Înlocuiţi ESSAV_6Sample_5Basic cu AppName şi 'EWRnHFlQteCEzWUhF7P3TPKunf3bYs' cu ESSBASE_INSTANCE_UNIQUE_ID.

      SELECT OTL_ID FROM ESSAV_OTL_MTD_VERSION where APPNAME ='ESSAV_6Sample_5Basic' and "JAGENT_INSTANCE_ID"='EWRnHFlQteCEzWUhF7P3TPKunf3bYs';
    7. Interogarea de mai sus trebuie să returneze valoarea pentru OTL_ID; de exemplu,

      62
    8. Rulaţi o procedură PL/SQL stocată pentru a distruge tabelele corelate cu metadatele asociate cu OTL_ID.

      Exemplu

      Înlocuiţi 62 cu 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. Rulaţi o instrucţiune UPDATE pentru a seta tabelul ESSAV_OTL_MTD_VERSION la starea Inactiv.

      Exemplu

      Înlocuiţi ESSAV_6Sample_5Basic cu AppName şi EWRnHFlQteCEzWUhF7P3TPKunf3bYs cu ESSBASE_INSTANCE_UNIQUE_ID.

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

Recreaţi conexiunea şi partiţia federativă

  1. Creaţi din nou conexiunea la Autonomous Data Warehouse. Aceasta poate fi o conexiune globală (din pictograma Surse principale din interfaţa web Essbase) sau poate fi în Sursele definite doar pentru aplicaţie. Urmaţi instrucţiunile descrise în conexiune. Nu uitaţi să testaţi şi să salvaţi conexiunea.

  2. Creaţi din nou partiţia federativă, conform descrierii din Creaţi o partiţie ca element al unei federaţii.

  3. Dacă vedeţi în continuare o eroare precum Essbase Error(1350012): Attempt to connect to OCI failed, consultaţi https://support.oracle.com/rs?type=doc&id=2925030.1.

Crearea unei copii de siguranţă şi restabilirea unei aplicaţii cu partiţii federative

Partiţiile federative nu sunt migrate cu aplicaţiile Essbase. Atunci când vă pregătiţi să vă mutaţi aplicaţiile şi cuburile pe un alt server sau să migraţi la altă versiune Essbase, trebuie să ştergeţi partiţia federativă şi să o recreaţi în noul mediu.

Pentru crearea copiei de siguranţă pentru cubul cu partiţii federative,

  1. Creaţi o copie de siguranţă a aplicaţiei fără date, dar incluzând tot ce vă mai trebuie (cum ar fi proprietăţi de configurare, filtre, variabile, script-uri de calcul şi alte artefacte). Pentru a face acest lucru, utilizaţi Export LCM (sau jobul Export LCM în interfaţa web Essbase).

  2. Realizarea copiei de siguranţă pentru tabelul de fapte. Consultaţi Realizarea copiei de siguranţă şi restabilirea pentru baza de date Autonomous Database.

  3. Ştergeţi definiţia partiţiei federative din cub, urmând paşii descrişi în Eliminarea unei partiţii ca element al unei federaţii.

Pentru restabilirea cubului cu partiţii federative din copia de siguranţă,

  1. Creaţi din nou aplicaţia, folosind LcmImport: Restaurarea fişierelor cuburilor (sau jobul Import LCM din interfaţa web Essbase).

  2. Dacă este necesar, restabiliţi tabelul de date în Autonomous Data Warehouse.

  3. Creaţi din nou conexiunea la Autonomous Data Warehouse. Se recomandă să utilizaţi un nume nou de conexiune, pentru a evita erorile.

  4. Creaţi din nou partiţia federativă.