同盟分割區立方體維護與疑難排解

您可以使用以下準則來維護含同盟分割區Essbase 立方體或排解其問題。

本主題假設您已建立同盟分割區,並已複查先前主題中詳述的資訊。

設計同盟分割區立方體模型與測試

設計同盟分割區立方體時,建立所需的時間如果太長,請依照以下的測試準則進行。這些準則對於採用階段方式進行除錯或監督效能相當實用。

  • 在測試環境開始同盟分割區專案。

  • 從具有下列特徵的立方體模型開始進行:

    • 沒有許多層級

    • 沒有許多共用成員或屬性

  1. 建立同盟分割區時,請在不允許對執行處理進行查詢時排定離線作業。

  2. 使用 MaxL alter application disable commands 和 (或) disable connects (以防止開始任何新的使用者作業),後面接著 alter system logout session 和 (或) kill request (如果需要終止任何不需要完成的作用中階段作業),逐步中斷作用中 Essbase 使用者階段作業連線。請注意,MaxL 無法終止任何仍在自治式資料倉儲執行的要求。如果您在應用程式中停用命令,請記得在建立同盟分割區之後重新啟用命令。

  3. 執行逾時調整:
    • 客戶網路上的 HTTPS 代理主機 - 調整客戶網路逾時
    • 負載平衡器 - 將負載平衡器逾時增加至 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 Web 介面主控台頁面中選取組態,並記下 olap.server.netSocketTimeOut 的值。200 毫秒的值表示每 5 個這些特性會產生 1 秒的等待時間。
      • 若要將 APS/JAPI 逾時限制設為 30 分鐘,請將 olap.server.netRetryCount 設為 9000。
  4. 建立同盟分割區
  5. 回復步驟 3 中的逾時調整。
  6. 使用 alter application enable commands 和 (或) connects (若先前停用的話),讓使用者回到系統上。
  7. 對含有同盟分割區Essbase 立方體的報表,將 QRYGOVEXECTIME 調整為大於對同盟分割區執行查詢的預期時間。請注意,QRYGOVEXECTIME 無法終止任何仍在自治式資料倉儲執行的要求。
  8. 開發環境測試與調整都完成之後,請使用上面的第 1 到第 7 步驟,將同盟分割區加到生產環境中。

註:

如果在建立同盟分割區時看到「無法儲存大綱」錯誤,請等待階段作業完成再重新整理瀏覽器。如果已建立同盟分割區,請在 SQL Developer 中進行驗證。同盟分割區在 SQL Developer 中驗證後便可供使用。如果未在 SQL Developer 中驗證,則需要修正模型,並且如上述步驟 3 所述進行逾時調整。

同盟分割區立方體的中繼資料預防措施

Essbase 如果含有同盟分割區,在編輯立方體大綱時請務必小心謹慎。若新增或重新命名成員,請確定中繼資料變更也會顯示在自治式資料倉儲的事實表格中。

Essbase 大綱如果與自治式資料倉儲中的事實表格不同步,同盟分割區將會變為無效或無法正確運作。若要修正此問題,您必須刪除同盟分割區、變更大綱和事實表格,然後重新建立同盟分割區

同盟分割區若變為無效,您會見到以下列為開頭的錯誤:Essbase 錯誤 (1040235):同盟分割區發出遠端警告

下列類型的 Essbase 大綱變更將會導致同盟分割區變為無效:

  • 新增、重新命名或移除維度

  • 新增、重新命名或移除旋轉維度中儲存的成員

  • 將任何成員從已儲存變更為動態

對於上方未提及的其他 Essbase 大綱變更類型 (例如,新增或重新命名非旋轉維度成員),則應該對事實表格中受影響的資料列進行對應的變更。否則,同盟分割區會無法正常運作。

如果您事先知道 Essbase 大綱中繼資料將會變更,則最好先移除同盟分割區、進行大綱變更、更新事實表格,然後重新建立同盟分割區

不過,如果 Essbase 中繼資料變更並導致同盟分割區變為無效,請採取以下動作:

  1. 移除同盟分割區和其連線 (若未使用),如移除同盟分割區中所述。

    自治式資料倉儲同盟分割區使用者綱要中,手動刪除所有 Essbase 產生的表格以及其他無法隨同盟分割區移除的物件。

  2. 確定 Essbase 立方體已完成大綱變更。

  3. 再次建立事實表格。請參閱建立事實表格

  4. 重新建立自治式資料倉儲連線。這可以是全域連線 (位於 Essbase Web 介面中的主要來源圖示底下),或在專為該應用程式定義的來源中。請依照建立同盟分割區的連線中的指示操作。

  5. 重新建立同盟分割區,如建立同盟分割區中所述。

資料庫連線詳細資訊變更時該怎麼做

Essbase 用於同盟分割區自治式資料倉儲連線詳細資訊如果有所變更,您必須刪除並重新建立同盟分割區,並且清除資料庫綱要中的關聯物件和中繼資料表格。

同盟分割區建立後若發生以下任一事件,您必須刪除並重新建立同盟分割區

如果您事先知道連線詳細資訊將會變更,則最好在變更前移除同盟分割區,並在變更後重新建立同盟分割區。不過,如果連線變更並導致同盟分割區變為無效,請採取以下步驟。

刪除同盟分割區

移除同盟分割區和其連線 (若未使用),如移除同盟分割區中所述。

清除同盟分割區相關物件和中繼資料表格

自治式資料倉儲同盟分割區使用者綱要中,刪除所有 Essbase 產生的表格以及其他無法隨同盟分割區移除的物件。

  1. opc 使用者身分透過 SSH 連線至 Essbase 伺服器主機。

                      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 = Sample。

      ls
      Sample
    2. 計算應用程式名稱中的字元數 (appx)。

      範例:appx = 6。

    3. 瀏覽至立方體目錄並取得立方體名稱 (DbName)。名稱有大小寫之別,因此會擷取完全相符的大小寫。在本範例中,DbName = Basic。

      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_IDOTL_ID 的值。

    1. opc 使用者身分透過 SSH 連線至 Essbase 伺服器主機。

                              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 為開頭且後面接著兩個處理作業 ID 的處理作業清單;例如:

      oracle   10769  19563 ...

      假設第一個處理作業 ID 為 <PID>,您將在下一個步驟中使用。

    4. 使用 strings 命令擷取 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. 重新建立自治式資料倉儲連線。這可以是全域連線 (位於 Essbase Web 介面中的主要來源圖示底下),或在專為該應用程式定義的來源中。請依照連線中的指示操作。請務必測試並儲存該連線。

  2. 重新建立同盟分割區,如建立同盟分割區中所述。

  3. 若您持續看到連線錯誤,例如 Essbase 錯誤(1350012):嘗試連線至 OCI 失敗,請參閱 https://support.oracle.com/rs?type=doc&id=2925030.1

備份與回復同盟分割區應用程式

同盟分割區並不會隨 Essbase 應用程式一起移轉。在準備將您的應用程式和立方體搬移至其他伺服器或移轉至其他 Essbase 版本時,您必須刪除同盟分割區,然後在新環境中重新建立。

備份同盟分割區立方體的作業如下:

  1. 備份應用程式時不包含資料,但包含您可能需要的所有項目 (例如,組態特性、篩選條件、變數、計算命令檔和其他使用者自建物件)。若要這樣做,請使用 LCM 匯出 (或 Essbase Web 介面中的匯出 LCM 工作)。

  2. 備份事實表格。請參閱備份和回復自治式資料庫

  3. 刪除立方體的同盟分割區定義,請依照移除同盟分割區中的步驟操作。

從備份回復同盟分割區立方體的作業如下:

  1. 重新建立應用程式,請使用 LcmImport:回復立方體檔案 (或 Essbase Web 介面中的匯入 LCM 工作)。

  2. 如有需要,請回復自治式資料倉儲上的事實表格。

  3. 重新建立連線來連線至自治式資料倉儲。建議使用新的連線名稱以避免發生錯誤。

  4. 重新建立同盟分割區