您可以使用以下準則來維護含同盟分割區的 Essbase 立方體或排解其問題。
本主題假設您已建立同盟分割區,並已複查先前主題中詳述的資訊。
設計同盟分割區立方體時,建立所需的時間如果太長,請依照以下的測試準則進行。這些準則對於採用階段方式進行除錯或監督效能相當實用。
在測試環境開始同盟分割區專案。
從具有下列特徵的立方體模型開始進行:
沒有許多層級
沒有許多共用成員或屬性
建立同盟分割區時,請在不允許對執行處理進行查詢時排定離線作業。
使用 MaxL alter application disable commands
和 (或) disable connects
(以防止開始任何新的使用者作業),後面接著 alter system logout session
和 (或) kill request
(如果需要終止任何不需要完成的作用中階段作業),逐步中斷作用中 Essbase 使用者階段作業連線。請注意,MaxL 無法終止任何仍在自治式資料倉儲執行的要求。如果您在應用程式中停用命令,請記得在建立同盟分割區之後重新啟用命令。
/etc/httpd/conf.d/00_base.conf:ProxyTimeout 1260
/etc/httpd/conf.d/00_base.conf:Timeout 1260
olap.server.netRetryCount
設為 9000。註:
如果在建立同盟分割區時看到「無法儲存大綱」錯誤,請等待階段作業完成再重新整理瀏覽器。如果已建立同盟分割區,請在 SQL Developer 中進行驗證。同盟分割區在 SQL Developer 中驗證後便可供使用。如果未在 SQL Developer 中驗證,則需要修正模型,並且如上述步驟 3 所述進行逾時調整。Essbase 如果含有同盟分割區,在編輯立方體大綱時請務必小心謹慎。若新增或重新命名成員,請確定中繼資料變更也會顯示在自治式資料倉儲的事實表格中。
Essbase 大綱如果與自治式資料倉儲中的事實表格不同步,同盟分割區將會變為無效或無法正確運作。若要修正此問題,您必須刪除同盟分割區、變更大綱和事實表格,然後重新建立同盟分割區。
同盟分割區若變為無效,您會見到以下列為開頭的錯誤:Essbase 錯誤 (1040235):同盟分割區發出遠端警告
。
下列類型的 Essbase 大綱變更將會導致同盟分割區變為無效:
新增、重新命名或移除維度
新增、重新命名或移除旋轉維度中儲存的成員
將任何成員從已儲存變更為動態
對於上方未提及的其他 Essbase 大綱變更類型 (例如,新增或重新命名非旋轉維度成員),則應該對事實表格中受影響的資料列進行對應的變更。否則,同盟分割區會無法正常運作。
如果您事先知道 Essbase 大綱中繼資料將會變更,則最好先移除同盟分割區、進行大綱變更、更新事實表格,然後重新建立同盟分割區。
不過,如果 Essbase 中繼資料變更並導致同盟分割區變為無效,請採取以下動作:
移除同盟分割區和其連線 (若未使用),如移除同盟分割區中所述。
從自治式資料倉儲的同盟分割區使用者綱要中,手動刪除所有 Essbase 產生的表格以及其他無法隨同盟分割區移除的物件。
確定 Essbase 立方體已完成大綱變更。
再次建立事實表格。請參閱建立事實表格。
重新建立自治式資料倉儲連線。這可以是全域連線 (位於 Essbase Web 介面中的主要來源圖示底下),或在專為該應用程式定義的來源中。請依照建立同盟分割區的連線中的指示操作。
重新建立同盟分割區,如建立同盟分割區中所述。
Essbase 用於同盟分割區的自治式資料倉儲連線詳細資訊如果有所變更,您必須刪除並重新建立同盟分割區,並且清除資料庫綱要中的關聯物件和中繼資料表格。
同盟分割區建立後若發生以下任一事件,您必須刪除並重新建立同盟分割區:
自治式資料倉儲連接埠變更
連線名稱變更
連線使用公事包,且您從一個服務名稱變更為另一個 (進行效能或並行變更)
大綱更新變更了事實表格的成員對應,導致同盟分割區變為不同步。請參閱同盟分割區立方體的中繼資料預防措施。
如果您事先知道連線詳細資訊將會變更,則最好在變更前移除同盟分割區,並在變更後重新建立同盟分割區。不過,如果連線變更並導致同盟分割區變為無效,請採取以下步驟。
刪除同盟分割區
移除同盟分割區和其連線 (若未使用),如移除同盟分割區中所述。
清除同盟分割區相關物件和中繼資料表格
從自治式資料倉儲的同盟分割區使用者綱要中,刪除所有 Essbase 產生的表格以及其他無法隨同盟分割區移除的物件。
以 opc 使用者身分透過 SSH 連線至 Essbase 伺服器主機。
ssh -i MPOCI_KEY.pem opc@100.xxx.xxx.xxx
變更為 Oracle 使用者 (然後前往其本位目錄)。
sudo su - oracle
瀏覽至應用程式目錄。
cd /u01/data/essbase/app
使用 Essbase 應用程式和立方體名稱,識別您同盟分割區物件和中繼資料的唯一首碼。
取得應用程式名稱 (AppName)。名稱有大小寫之別,因此會擷取完全相符的大小寫。在本範例中,AppName = Sample。
ls
Sample
計算應用程式名稱中的字元數 (appx)。
範例:appx = 6。
瀏覽至立方體目錄並取得立方體名稱 (DbName)。名稱有大小寫之別,因此會擷取完全相符的大小寫。在本範例中,DbName = Basic。
cd /Sample
ls
Basic
計算立方體名稱中的字元數 (dby)。
範例:dby = 5。
將首碼建置為:
ESSAV_<appx><AppName>_<dby><DbName>_
範例:
<Prefix> = ESSAV_6Sample_5Basic_
使用 SQL Developer 或其他工具,以同盟分割區所連線之綱要的使用者身分,連線至 Oracle Database。
執行 SELECT 敘述句來建立您同盟分割區應用程式的物件清單。以下是您將在下一個步驟中清除的物件。
SELECT 敘述句格式為:
SELECT * FROM user_OBJECTS WHERE OBJECT_NAME like '<Prefix>%';
範例:
SELECT * FROM user_OBJECTS WHERE OBJECT_NAME like 'ESSAV_6Sample_5Basic_%';
執行預存 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; /
刪除並更新關聯的中繼資料相關表格。首先,您需要取得 ESSBASE_INSTANCE_UNIQUE_ID 和 OTL_ID 的值。
以 opc 使用者身分透過 SSH 連線至 Essbase 伺服器主機。
ssh -i MPOCI_KEY.pem opc@100.xxx.xxx.xxx
變更為 Oracle 使用者 (然後前往其本位目錄)。
sudo su - oracle
搜尋 Essbase 代理程式處理作業。
ps -ef | grep ESSS | grep -v "grep"
以上命令會傳回以 oracle
為開頭且後面接著兩個處理作業 ID 的處理作業清單;例如:
oracle 10769 19563 ...
假設第一個處理作業 ID 為 <PID>
,您將在下一個步驟中使用。
使用 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
使用 SQL Developer 或其他工具,以同盟分割區所連線之綱要的使用者身分,連線至 Oracle Database。
執行 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';
以上查詢會傳回 OTL_ID 的值;例如:
62
執行預存 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; /
執行 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;
重新建立連線和同盟分割區
重新建立自治式資料倉儲連線。這可以是全域連線 (位於 Essbase Web 介面中的主要來源圖示底下),或在專為該應用程式定義的來源中。請依照連線中的指示操作。請務必測試並儲存該連線。
重新建立同盟分割區,如建立同盟分割區中所述。
若您持續看到連線錯誤,例如 Essbase 錯誤(1350012):嘗試連線至 OCI 失敗
,請參閱 https://support.oracle.com/rs?type=doc&id=2925030.1。
同盟分割區並不會隨 Essbase 應用程式一起移轉。在準備將您的應用程式和立方體搬移至其他伺服器或移轉至其他 Essbase 版本時,您必須刪除同盟分割區,然後在新環境中重新建立。
備份同盟分割區立方體的作業如下:
備份應用程式時不包含資料,但包含您可能需要的所有項目 (例如,組態特性、篩選條件、變數、計算命令檔和其他使用者自建物件)。若要這樣做,請使用 LCM 匯出 (或 Essbase Web 介面中的匯出 LCM 工作)。
備份事實表格。請參閱備份和回復自治式資料庫。
刪除立方體的同盟分割區定義,請依照移除同盟分割區中的步驟操作。
從備份回復同盟分割區立方體的作業如下:
重新建立應用程式,請使用 LcmImport:回復立方體檔案 (或 Essbase Web 介面中的匯入 LCM 工作)。
如有需要,請回復自治式資料倉儲上的事實表格。
重新建立連線來連線至自治式資料倉儲。建議使用新的連線名稱以避免發生錯誤。
重新建立同盟分割區。