Obsługa kostki z partycją federowaną i rozwiązywanie problemów

Poniżej przedstawiono wskazówki ułatwiające obsługę kostek Essbase z partycjami federowanymi oraz rozwiązywanie ewentualnych problemów.

Przyjęto tu założenie, że została utworzona partycja federowana oraz że użytkownik zapoznał się z informacjami przedstawionymi w poprzednich tematach.

Modelowanie i testowanie kostek z partycjami federowanymi

Jeśli podczas projektowania kostki z partycją federowaną tworzenie trwa zbyt długo, należy skorzystać z tych wytycznych dotyczących testowania. Mogą być one przydatne w przypadku zastosowania podejścia fazowego do rozwiązywania problemów lub monitorowania wydajności.

  • Rozpocząć projekt partycji federowanej w środowisku testowym.

  • Zacząć od modeli kostek mających następujące cechy:

    • niezbyt wiele poziomów

    • niezbyt wiele współużytkowanych elementów lub atrybutów

  1. Podczas tworzenia partycji federowanej zaplanować operacje offline na czas, w którym nie będzie można kierować zapytań do instancji.

  2. Stopniowo rozłączać aktywne sesje użytkowników Essbase, używając polecenia alter application disable commands i/lub polecenia disable connects narzędzia MaxL (aby uniemożliwić użytkownikom podejmowanie nowych działań), a następnie poleceń alter system logout session i/lub kill request (jeśli trzeba zakończyć aktywne sesje, które nie wymagają ukończenia). Należy pamiętać, że MaxL nie umożliwia przerywania żądań, które mogą być uruchomione w Autonomous Data Warehouse. Jeśli polecenia zostaną wyłączone w aplikacji, należy pamiętać, aby włączyć je ponownie po utworzeniu partycji federowanej.

  3. Dostosować limity czasu:
    • Proxy HTTPS w sieci klienta - dostosować limity czasu w sieci klienta
    • Urządzenie równoważenia obciążenia - zwiększyć limit czasu LoadBalance do 1260 sekund (21 minut)
    • Zwiększyć limity czasu HTTPD do 21 minut
      /etc/httpd/conf.d/00_base.conf:ProxyTimeout 1260
      /etc/httpd/conf.d/00_base.conf:Timeout 1260
    • Limit czasu APS/JAPI:
      • Na stronie Konsola w internetowym interfejsie Essbase wybrać kartę Konfiguracja i zanotować wartość ustawienia olap.server.netSocketTimeOut. Wartość 200 ms znaczy, że każde zliczenie 5 dla tych właściwości daje 1 sekundę czasu oczekiwania.
      • Aby ustawić limit czasu APS/JAPI równy 30 minut, określić wartość 9000 w ustawieniu olap.server.netRetryCount.
  4. Utworzyć partycję federowaną.
  5. Wycofać dostosowania limitu czasu, dokonane w punkcie 3.
  6. Ponownie umożliwić użytkownikom dostęp do systemu, używając polecenia alter application enable commands i/lub connects, jeśli uprzednio wyłączono im możliwość dostępu.
  7. Dla raportów opartych na kostce Essbase z partycją federowaną dostroić QRYGOVEXECTIME na wartość większą niż oczekiwany czas wykonywania zapytań w odniesieniu do partycji federowanych. Należy pamiętać, że ustawienie QRYGOVEXECTIME nie umożliwia przerywania żądań, które mogą być uruchomione w Autonomous Data Warehouse.
  8. Po ukończeniu testowania i dostrajania w środowisku programistycznym wykonać powyższe kroki od 1 do 7 w celu dodania partycji federowanej do środowiska produkcyjnego.

Uwaga:

Jeśli podczas tworzenia partycji federowanej zostanie wyświetlony komunikat o błędzie "Nie udało się zapisać struktury", należy poczekać na ukończenie sesji, a następnie odświeżyć okno przeglądarki. Gdy partycja federowana zostanie utworzona, należy zweryfikować ją w narzędziu SQL Developer. Jeśli weryfikacja w narzędziu SQL Developer przebiegnie pomyślnie, będzie to oznaczać, że partycja federowana jest gotowa do użycia. Jeśli weryfikacja w narzędziu SQL Developer zakończy się niepowodzeniem, to trzeba naprawić model oraz dostroić limity czasu, jak opisano to wcześniej w punkcie 3.

Środki ostrożności dotyczące metadanych kostek z partycjami federowanymi

Jeśli Essbase ma partycję federowaną, należy zachować ostrożność podczas edytowania struktury kostki. W przypadku dodawania elementów lub zmieniania ich nazw należy upewnić się, że zmiany metadanych są także odzwierciedlane w tabeli faktów w Autonomous Data Warehouse.

Jeśli struktura Essbase utraci synchronizację z tabelą faktów w Autonomous Data Warehouse, partycja federowana stanie się niepoprawna lub nie będzie poprawnie działać. Aby rozwiązać ten problem, należy usunąć partycję federowaną, wprowadzić zmiany w strukturze i tabeli faktów, a następnie ponownie utworzyć partycję federowaną.

Jeśli partycja federowana stanie się niepoprawna, może występować błąd, z którym jest skojarzony komunikat rozpoczynający się od ciągu Błąd Essbase (1040235): Odległe ostrzeżenie z partycji federowanej.

Zmiany struktury Essbase następujących typów będą powodować, że partycja federowana stanie się niepoprawna:

  • Dodawanie i usuwanie wymiarów oraz zmienianie ich nazw

  • Dodawanie i usuwanie elementów składowanych w wymiarze przestawnym oraz zmienianie ich nazw

  • Zmiana elementu ze składowanego na dynamiczny

W przypadku innych niewymienionych powyżej typów zmian struktury Essbase (takich jak dodanie elementu wymiaru nieprzestawnego lub zmiana jego nazwy) należy wprowadzić odpowiednią zmianę we właściwym wierszu danych w tabeli faktów. W przeciwnym razie partycja federowana może nie działać poprawnie.

Jeśli z wyprzedzeniem wiadomo, że metadane struktury Essbase zostaną zmienione, lepiej jest najpierw usunąć partycję federowaną, wprowadzić zmiany struktury i zaktualizować tabelę faktów, a następnie utworzyć ponownie partycję federowaną.

Jeśli jednak metadane Essbase zostaną zmienione, przez co partycja federowana stanie się niepoprawna, należy wykonać następującą czynność:

  1. Usunąć partycję federowaną i powiązane z nią połączenie (jeśli nie jest używane w inny sposób), jak opisano w temacie Usuwanie partycji federowanej.

    Ze schematu użytkownika partycji federowanej w Autonomous Data Warehouse usunąć ręcznie wszystkie wygenerowane przez Essbase tabele i inne obiekty, których nie udało się usunąć wraz z partycją federowaną.

  2. Upewnić się, że zmiany struktury zostały wprowadzone w kostce Essbase.

  3. Ponownie utworzyć tabelę faktów. Zob. Tworzenie tabeli faktów.

  4. Utworzyć ponownie połączenie z Autonomous Data Warehouse. Może to być połączenie globalne (dostępne za pośrednictwem głównej ikony "Źródła" w internetowym interfejsie Essbase) albo połączenie należące do źródeł zdefiniowanych tylko dla aplikacji. Postępować zgodnie z instrukcjami podanymi w temacie Tworzenie połączenia dla partycji federowanych.

  5. Utworzyć ponownie partycję federowaną, jak opisano w temacie Tworzenie partycji federowanej.

Sposób postępowania w przypadku zmiany szczegółów połączenia z bazą danych

Jeśli szczegóły połączenia z Autonomous Data Warehouse używanego przez Essbase na potrzeby partycji federowanej zostaną zmienione, konieczne będzie usunięcie i ponowne utworzenie partycji federowanej oraz wyczyszczenie powiązanych obiektów i tabel metadanych ze schematu bazy danych.

Partycję federowaną trzeba będzie usunąć i utworzyć ponownie, jeśli po utworzeniu partycji federowanej wystąpi dowolne z następujących zdarzeń:

  • Zmiana portu używanego przez Autonomous Data Warehouse

  • Zmiana nazwy połączenia

  • Na potrzeby połączenia jest używany portfel i przełączono się z jednej nazwy usługi na inną (w celu zmiany wydajności lub współbieżności)

  • Aktualizacja struktury spowodowała zmianę mapowania elementów na tabelę faktów, przez co partycja federowana nie jest już zsynchronizowana. Zob. Środki ostrożności dotyczące metadanych kostek partycji federowanej, aby zapoznać się ze szczegółowymi informacjami.

Jeśli z wyprzedzeniem wiadomo, że szczegóły połączenia zostaną zmienione, lepiej jest usunąć partycję federowaną przed wprowadzeniem tych zmian oraz utworzyć ją ponownie już po ich wprowadzeniu. Jeśli jednak połączenie zostanie zmienione, przez co partycja federowana stanie się niepoprawna, należy wykonać poniższe etapy.

Usuwanie partycji federowanej

Należy usunąć partycję federowaną i powiązane z nią połączenie (jeśli nie jest używane w inny sposób), jak opisano w temacie Usuwanie partycji federowanej.

Czyszczenie obiektów powiązanych i tabel metadanych partycji federowanej

Ze schematu użytkownika partycji federowanej w Autonomous Data Warehouse usunąć wszystkie wygenerowane przez Essbase tabele i inne obiekty, których nie udało się usunąć wraz z partycją federowaną.

  1. Połączyć się za pomocą protokołu SSH z hostem Serwer Essbase jako użytkownik opc.

                      ssh -i MPOCI_KEY.pem opc@100.xxx.xxx.xxx
                   
  2. Zmienić użytkownika na oracle (i przejść do jego katalogu podstawowego).

                      sudo su - oracle
                   
  3. Przejść do katalogu aplikacji.

                      cd /u01/data/essbase/app
                   
  4. Za pomocą aplikacji Essbase i nazwy kostki określić unikatowy prefiks powiązany z obiektami i metadanymi partycji federowanej.

    1. Pobrać nazwę aplikacji (AppName). W nazwie rozróżniana jest wielkość liter, więc należy zwrócić na to uwagę. W tym przykładzie AppName = Sample.

      ls
      Sample
    2. Zliczyć liczbę znaków (appx) w nazwie aplikacji.

      Przykład: appx = 6.

    3. Przejść do katalogu kostki i pobrać nazwę kostki (DbName). W nazwie rozróżniana jest wielkość liter, więc należy zwrócić na to uwagę. W tym przykładzie DbName = Basic.

      cd /Sample
      ls
      Basic
    4. Zliczyć liczbę znaków (dby) w nazwie kostki.

      Przykład: dby = 5.

    5. Skonstruować Prefiks w następujący sposób:

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

      Przykład:

      <Prefix> = ESSAV_6Sample_5Basic_
  5. Za pomocą SQL Developer lub innego narzędzia połączyć się z bazą danych Oracle jako użytkownik schematu, z którym połączona jest partycja federowana.

  6. Uruchomić instrukcję SELECT, aby utworzyć ofertę obiektów powiązanych z aplikacją partycji federowanej. Są to obiekty, które zostaną wyczyszczone na następnym etapie.

    Instrukcja SELECT ma następujący format:

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

    Przykład:

    SELECT * FROM user_OBJECTS WHERE OBJECT_NAME like 'ESSAV_6Sample_5Basic_%';
  7. Uruchomić składowaną procedurę PL/SQL służącą do czyszczenia wszystkich perspektyw analitycznych, pakietów, hierarchii, tabel i innych obiektów powiązanych z wartością Prefiks.

    Przykład

    Zastąpić ESSAV_6Sample_5Basic_ wybraną wartością Prefiks.

    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. Usunąć i zaktualizować powiązane tabele dotyczące metadanych. Najpierw należy pobrać wartości ESSBASE_INSTANCE_UNIQUE_ID i OTL_ID.

    1. Połączyć się za pomocą protokołu SSH z hostem Serwer Essbase jako użytkownik opc.

                              ssh -i MPOCI_KEY.pem opc@100.xxx.xxx.xxx
                           
    2. Zmienić użytkownika na oracle (i przejść do jego katalogu podstawowego).

                              sudo su - oracle
                           
    3. Wyszukać proces Agent Essbase.

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

      Powyższe polecenie powinno zwrócić listę procesów, która zaczyna się od oracle, po którym następują dwa ID procesów, na przykład:

      oracle   10769  19563 ...

      Pierwszy ID procesu to <PID>, który zostanie użyty na następnym etapie.

    4. Za pomocą polecenia strings przechwycić wartość ESSBASE_INSTANCE_UNIQUE_ID.

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

      Przykład:

                              strings /proc/10769/environ | grep ESSBASE_INSTANCE_UNIQUE_ID
                           

      Powyższe polecenie powinno zwrócić wartość ESSBASE_INSTANCE_UNIQUE_ID, na przykład:

      ESSBASE_INSTANCE_UNIQUE_ID=EWRnHFlQteCEzWUhF7P3TPKunf3bYs
    5. Za pomocą SQL Developer lub innego narzędzia połączyć się z bazą danych Oracle jako użytkownik schematu, z którym połączona jest partycja federowana.

    6. Uruchomić instrukcję SELECT, aby uzyskać wartość OTL_ID.

      Instrukcja SELECT ma następujący format:

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

      Przykład

      Zastąpić ESSAV_6Sample_5Basic wartością AppName, a EWRnHFlQteCEzWUhF7P3TPKunf3bYs wartością ESSBASE_INSTANCE_UNIQUE_ID.

      SELECT OTL_ID FROM ESSAV_OTL_MTD_VERSION where APPNAME ='ESSAV_6Sample_5Basic' and "JAGENT_INSTANCE_ID"='EWRnHFlQteCEzWUhF7P3TPKunf3bYs';
    7. Powyższe zapytanie powinno zwrócić wartość OTL_ID, na przykład:

      62
    8. Uruchomić składowaną procedurę PL/SQL służącą do usuwania tabel dotyczących metadanych powiązanych z wartością OTL_ID.

      Przykład

      Zastąpić 62 wartością 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. Uruchomić instrukcję UPDATE, aby ustawić status tabeli ESSAV_OTL_MTD_VERSION na nieaktywny.

      Przykład

      Zastąpić ESSAV_6Sample_5Basic wartością AppName, a EWRnHFlQteCEzWUhF7P3TPKunf3bYs wartością ESSBASE_INSTANCE_UNIQUE_ID.

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

Utworzyć ponownie połączenie i partycję federowaną

  1. Utworzyć ponownie połączenie z Autonomous Data Warehouse. Może to być połączenie globalne (dostępne za pośrednictwem głównej ikony "Źródła" w internetowym interfejsie Essbase) albo połączenie należące do źródeł zdefiniowanych tylko dla aplikacji. Postępować zgodnie z instrukcjami podanymi w temacie połączenia. Upewnić się, że połączenie zostało przetestowane i zapisane.

  2. Utworzyć ponownie partycję federowaną, jak opisano w temacie Tworzenie partycji federowanej.

  3. Jeśli nadal będzie występował błąd połączenia, taki jak Błąd Essbase (1350012): Próba połączenia się z OCI zakończyła się niepowodzeniem, przejrzeć stronę https://support.oracle.com/rs?type=doc&id=2925030.1.

Tworzenie kopii zapasowej i odtwarzanie aplikacji z partycją federowaną

Partycje federowane nie są migrowane wraz z aplikacjami Essbase. Podczas przygotowań do przeniesienia aplikacji i kostki na inny serwer albo migracji do innej wersji Essbase należy usunąć partycję federowaną i utworzyć ją ponownie w nowym środowisku.

Aby utworzyć kopię zapasową kostki z partycją federowaną, należy:

  1. Utworzyć kopię zapasową aplikacji bez danych, ale ze wszystkimi innymi elementami, które mogą być potrzebne (takimi jak właściwości konfiguracji, filtry, zmienne, skrypty obliczeń i inne artefakty). W tym celu można użyć funkcji Eksport LCM (lub zlecenia Eksportuj LCM w internetowym interfejsie Essbase).

  2. Sporządzić kopię zapasową tabeli faktów. Zob. Sporządzanie zapasowej kopii bazy danych Autonomous Database i jej odtwarzanie.

  3. Usunąć definicję partycji federowanej z kostki, wykonując kroki opisane w temacie Usuwanie partycji federowanej.

Aby odtworzyć kostkę z partycją federowaną z kopii zapasowej, należy:

  1. Utworzyć ponownie aplikację, używając funkcji LcmImport: odtwarzanie plików kostek (lub zlecenia Importuj LCM w interfejsie internetowym Essbase).

  2. W razie potrzeby przywrócić tabelę faktów w Autonomous Data Warehouse.

  3. Utworzyć ponownie połączenie z Autonomous Data Warehouse. Zalecane jest użycie nowej nazwy połączenia, aby uniknąć występowania błędów.

  4. Utworzyć ponownie partycję federowaną.