Řešení problémů s krychlí federovaného oddílu a její údržba

Při řešení problémů s krychlemi Essbasefederovanými oddíly nebo při jejich údržbě použijte následující pokyny.

Toto téma předpokládá, že jste vytvořili federovaný oddíl a prošli jste si informace uvedené v předchozích tématech.

Modelování a testování krychlí federovaných oddílů

Když navrhujete krychli federovaného oddílu a vytvoření trvá příliš dlouho, postupujte podle těchto pokynů pro testování. Tyto pokyny mohou být užitečné pro postupné řešení problémů nebo sledování výkonu.

  • Spusťte projekt federovaného oddílu v testovacím prostředí.

  • Začněte s modely krychlí, které mají následující vlastnosti:

    • nemají mnoho úrovní

    • nemají mnoho sdílených prvků nebo atributů

  1. Při vytváření federovaného oddílu naplánujte offline operace, když nejsou povoleny dotazy vůči instanci.

  2. Postupně odpojujte aktivní uživatelské relace systému Essbase pomocí příkazu MaxL alter application disable commands nebo disable connects (abyste zabránili jakékoli nové aktivitě uživatelů), a poté příkazem alter system logout session nebo kill request (pokud potřebujete ukončit aktivní relace, které není potřebné dokončit). Všimněte si, že MaxL nemůže ukončit žádné požadavky, které mohou být spuštěny v Autonomous Data Warehouse. Pokud v aplikaci deaktivujete příkazy, nezapomeňte je po vytvoření federovaného oddílu znovu aktivovat.

  3. Proveďte ladění časového limitu:
    • HTTPS proxy v zákaznické síti – upravte časové limity zákaznické sítě
    • Nástroj pro vyrovnání zatížení – zvyšte časový limit LoadBalance na 1 260 sekund (21 minut)
    • Zvyšte časové limity HTTPD na 21 minut
      /etc/httpd/conf.d/00_base.conf:ProxyTimeout 1260
      /etc/httpd/conf.d/00_base.conf:Timeout 1260
    • Časový limit APS/JAPI:
      • Na stránce Konzola ve webovém rozhraní Essbase vyberte Konfigurace a poznamenejte si hodnotu olap.server.netSocketTimeOut. Hodnota 200 ms znamená, že každá hodnota 5 pro tyto vlastnosti dává 1 sekundu čekání.
      • Pokud chcete nastavit časový limit APS/JAPI na 30 minut, nastavte olap.server.netRetryCount na 9000.
  4. Vytvořit federovaný oddíl.
  5. Vraťte zpět úpravu časového limitu z kroku 3.
  6. Povolte uživatele zpět do systému pomocí příkazů aktivace a/nebo připojení alter application, pokud byly dříve zakázáni.
  7. U sestav na krychli Essbasefederovaným oddílem vylaďte hodnotu parametru QRYGOVEXECTIME tak, aby byla větší, než je očekávaná doba pro provedení dotazů vůči federovaným oddílům. Všimněte si, že QRYGOVEXECTIME nemůže ukončit žádné požadavky, které mohou být spuštěny v Autonomous Data Warehouse.
  8. Po dokončení testování a ladění vývojového prostředí použijte výše uvedené kroky 1 až 7 k přidání federovaného oddílu do produkčního prostředí.

Poznámka:

Pokud se při vytváření federovaného oddílu zobrazí chyba „Uložení osnovy selhalo“, počkejte na dokončení relací a poté aktualizujte obsah prohlížeče. Pokud byl federovaný oddíl vytvořen, ověřte jej v nástroji SQL Developer. Pokud federovaný oddíl projde ověřením v nástroji SQL Developer, je připraven k použití. Pokud ověřením v aplikaci SQL Developer neprojde, je třeba opravit model a vyladit časový limit, jak je popsáno výše v kroku 3.

Opatření týkající se metadat pro krychle federovaných oddílů

Pokud systém Essbase disponuje federovaným oddílem, postupujte při úpravách osnovy krychle opatrně. Pokud přidáváte nebo přejmenováváte prvky, ujistěte se, že změny metadat jsou reprezentovány i v tabulce faktů v Autonomous Data Warehouse.

Pokud dojde k narušení synchronizace osnovy Essbase s tabulkou faktů ve službě Autonomous Data Warehouse, federovaný oddíl se stane neplatným nebo nebude správně fungovat. K nápravě je nutné zrušit federovaný oddíl, provést změny v osnově a tabulce faktů a poté federovaný oddíl znovu vytvořit.

Pokud se federovaný oddíl stane neplatným, může se objevit chybová zpráva začínající textem Chyba Essbase (1040235): Vzdálená výstraha federovaného oddílu.

Následující typy změn osnovy Essbase způsobí neplatnost federovaného oddílu:

  • Přidání, přejmenování nebo odebrání dimenzí

  • Přidání, přejmenování nebo odebrání uložených prvků v kontingenční dimenzi

  • Změna libovolného prvku z uloženého na dynamický

U jiných typů změn osnovy Essbase, které nejsou uvedeny výše (například přidání nebo přejmenování prvku, který není prvkem kontingenční dimenze), byste měli provést odpovídající změnu v příslušném řádku dat v tabulce faktů. V opačném případě nemusí federovaný oddíl fungovat správně.

Pokud předem víte, že se metadata osnovy Essbase změní, je vhodné nejprve odebrat federovaný oddíl, provést změny osnovy, aktualizovat tabulku faktů a poté znovu vytvořit federovaný oddíl.

Pokud však došlo ke změně metadat Essbasefederovaný oddíl se stal neplatným, proveďte následující akci:

  1. Odeberte federovaný oddíl a k němu přiřazené připojení (pokud je jinak nepoužívané) podle pokynů uvedených v tématu Odebrání federovaného oddílu.

    V uživatelském schématu federovaného oddílu ve službě Autonomous Data Warehouse ručně odstraňte všechny tabulky generované systémem Essbase a další objekty, jejichž odebrání s federovaným oddílem selhalo.

  2. Zajistěte, aby byly změny osnovy dokončeny v krychli Essbase.

  3. Znovu vytvořte tabulku faktů. Prostudujte si téma Vytvoření tabulky faktů.

  4. Znovu vytvořte připojení k Autonomous Data Warehouse. Může se jednat o globální připojení (pod hlavní ikonou Zdroje ve webovém rozhraní Essbase) nebo o připojení definované pouze pro danou aplikaci. Postupujte podle pokynů v části Vytvoření připojení k federovaným oddílům

  5. Znovu vytvořte federovaný oddíl podle pokynů uvedených v tématu Vytvoření federovaného oddílu.

Co dělat, pokud se změnily detaily připojení k databázi

V případě změn podrobností připojení ke službě Autonomous Data Warehouse, které systém Essbase používá pro federovaný oddíl, bude nutné zrušit a znovu vytvořit federovaný oddíl a vyčistit související objekty a tabulky metadat ze schématu databáze.

Pokud po vytvoření federovaného oddílu dojde k některé z následujících událostí, bude nutné tento federovaný oddíl zrušit a znovu vytvořit:

Pokud předem víte, že dojde ke změně podrobností připojení, je vhodné federovaný oddíl před změnou odebrat a po změně jej znovu vytvořit. Pokud však došlo ke změně připojení, která způsobila zneplatnění federovaného oddílu, proveďte následující kroky.

Zrušení federovaného oddílu

Odeberte federovaný oddíl a k němu přiřazené připojení (pokud je jinak nepoužívané) podle pokynů uvedených v tématu Odebrání federovaného oddílu.

Vyčištění objektů a tabulek metadat souvisejících s federovaným oddílem

V uživatelském schématu federovaného oddílu ve službě Autonomous Data Warehouse zrušte všechny tabulky generované systémem Essbase a další objekty, jejichž odebrání s federovaným oddílem selhalo.

  1. Použijte příkaz ssh pro hostitelský počítač serveru Essbase jako uživatel opc.

                      ssh -i MPOCI_KEY.pem opc@100.xxx.xxx.xxx
                   
  2. Proveďte změnu na uživatele oracle (a přejděte do jeho domovského adresáře).

                      sudo su - oracle
                   
  3. Přejděte do adresáře aplikací.

                      cd /u01/data/essbase/app
                   
  4. Pomocí aplikace Essbase a názvu krychle identifikujte jedinečnou předponu spojenou s objekty a metadaty federovaného oddílu.

    1. Získejte název aplikace (AppName). V názvu jsou rozlišována velká a malá písmena, proto zaznamenejte přesnou kombinaci velkých a malých písmen. V uvedeném příkladu AppName = Sample.

      ls
      Sample
    2. Spočítejte počet znaků (appx) v názvu aplikace.

      Příklad: appx = 6.

    3. Přejděte do adresáře krychle a získejte název krychle (DbName). V názvu jsou rozlišována velká a malá písmena, proto zaznamenejte přesnou kombinaci velkých a malých písmen. V uvedeném příkladu DbName = Basic.

      cd /Sample
      ls
      Basic
    4. Spočítejte počet znaků (dby) v názvu krychle.

      Příklad: dby = 5.

    5. Sestavte položku Prefix jako:

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

      Příklad:

      <Prefix> = ESSAV_6Sample_5Basic_
  5. Pomocí nástroje SQL Developer nebo jiného nástroje se připojte k systému Oracle Database jako uživatel schématu, k němuž je připojen federovaný oddíl.

  6. Spuštěním příkazu SELECT vytvořte seznam objektů přidružených k vaší aplikaci federovaného oddílu. Jedná se o objekty, které v dalším kroku vyčistíte.

    Příkaz SELECT má následující formát:

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

    Příklad:

    SELECT * FROM user_OBJECTS WHERE OBJECT_NAME like 'ESSAV_6Sample_5Basic_%';
  7. Spusťte uloženou proceduru PL/SQL, která vyčistí všechna analytická zobrazení, balíčky, hierarchie, tabulky a další objekty spojené s položkou Prefix.

    Příklad

    Nahraďte řetězec ESSAV_6Sample_5Basic_ svou položkou 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. Zrušte a aktualizujte přidružené tabulky související s metadaty. Nejprve je nutné získat hodnoty pro položky ESSBASE_INSTANCE_UNIQUE_IDOTL_ID.

    1. Použijte příkaz ssh pro hostitelský počítač serveru Essbase jako uživatel opc.

                              ssh -i MPOCI_KEY.pem opc@100.xxx.xxx.xxx
                           
    2. Proveďte změnu na uživatele oracle (a přejděte do jeho domovského adresáře).

                              sudo su - oracle
                           
    3. Vyhledejte proces agentu Essbase.

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

      Výše uvedený příkaz by měl vrátit výpis procesu, který začíná řetězcem oracle následovaným dvěma ID procesu, například:

      oracle   10769  19563 ...

      Považujte první ID procesu za <PID>, které použijete v dalším kroku.

    4. Použijte příkaz strings k zachycení hodnoty položky ESSBASE_INSTANCE_UNIQUE_ID.

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

      Příklad:

                              strings /proc/10769/environ | grep ESSBASE_INSTANCE_UNIQUE_ID
                           

      Výše uvedený příkaz by měl vrátit hodnotu položky ESSBASE_INSTANCE_UNIQUE_ID, například:

      ESSBASE_INSTANCE_UNIQUE_ID=EWRnHFlQteCEzWUhF7P3TPKunf3bYs
    5. Pomocí nástroje SQL Developer nebo jiného nástroje se připojte k systému Oracle Database jako uživatel schématu, k němuž je připojen federovaný oddíl.

    6. Spuštěním příkazu SELECT získejte hodnotu položky OTL_ID.

      Příkaz SELECT má následující formát:

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

      Příklad

      Nahraďte řetězec ESSAV_6Sample_5Basic svou hodnotou položky AppName a identifikátor 'EWRnHFlQteCEzWUhF7P3TPKunf3bYs' svou hodnotou identifikátoru ESSBASE_INSTANCE_UNIQUE_ID.

      SELECT OTL_ID FROM ESSAV_OTL_MTD_VERSION where APPNAME ='ESSAV_6Sample_5Basic' and "JAGENT_INSTANCE_ID"='EWRnHFlQteCEzWUhF7P3TPKunf3bYs';
    7. Výše uvedený dotaz by měl vrátit hodnotu položky OTL_ID, například:

      62
    8. Spusťte uloženou proceduru PL/SQL ke zrušení tabulek souvisejících s metadaty a přidružených k položce OTL_ID.

      Příklad

      Nahraďte hodnotu 62 svou hodnotou položky 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. Spuštěním příkazu UPDATE nastavte tabulku ESSAV_OTL_MTD_VERSION do neaktivního statusu.

      Příklad

      Nahraďte řetězec ESSAV_6Sample_5Basic svou hodnotou položky AppName a identifikátor EWRnHFlQteCEzWUhF7P3TPKunf3bYs svou hodnotou identifikátoru ESSBASE_INSTANCE_UNIQUE_ID.

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

Opětovné vytvoření připojení a federovaného oddílu

  1. Znovu vytvořte připojení k Autonomous Data Warehouse. Může se jednat o globální připojení (pod hlavní ikonou Zdroje ve webovém rozhraní Essbase) nebo o připojení definované pouze pro danou aplikaci. Postupujte podle pokynů v části připojení Nezapomeňte připojení otestovat a uložit.

  2. Znovu vytvořte federovaný oddíl podle pokynů uvedených v tématu Vytvoření federovaného oddílu.

  3. Pokud se i nadále zobrazuje chyba připojení, například Chyba Essbase(1350012): Pokus o připojení k OCI selhal, podívejte se na https://support.oracle.com/rs?type=doc&id=2925030.1.

Záloha a obnovení aplikace federovaného oddílu

Federované oddíly nejsou migrovány společně s aplikacemi Essbase. Při přípravě přesunu aplikace a krychle na jiný server nebo migrace na jinou verzi systému Essbase je potřebné federovaný oddíl odstranit a následně jej v novém prostředí znovu vytvořit.

Chcete-li zálohovat krychli federovaného oddílu,

  1. Aplikaci zálohujte bez dat, ale včetně všech ostatních položek, které můžete potřebovat (například vlastností konfigurace, filtrů, proměnných, výpočetních skriptů a dalších artefaktů). K tomu použijte Export LCM (nebo úlohu Export LCM ve webovém rozhraní Essbase).

  2. Zálohujte tabulku faktů. Viz část Zálohování a obnova autonomní databáze.

  3. Odstraňte definici federovaného oddílu z krychle podle postupu uvedeného v tématu Odebrání federovaného oddílu.

Chcete-li obnovit krychli federovaného oddílu ze zálohy,

  1. Znovu vytvořte aplikaci pomocí LcmImport: Obnovení souborů krychle (nebo úlohy Import LCM ve webovém rozhraní Essbase).

  2. V případě potřeby obnovte tabulku faktů na Autonomous Data Warehouse.

  3. Znovu vytvořte připojení do služby Autonomous Data Warehouse. Aby se zabránilo chybám, doporučuje se použít nový název připojení.

  4. Znovu vytvořit federovaný oddíl.