前へ
前へ
 
次へ
次へ

アクティブではない作業領域の削除について

ホスティングされた大規模なOracle Application Expressインスタンスを管理している場合は、アクティブではない作業領域を定期的に消去すると、他のユーザーに対してリソースを開放できます。アクティブではない作業領域を消去するプロセスは、次のステップで構成されます。

  1. アクティブではない作業領域を識別します。

  2. アクティブではない作業領域に関連付けられているリソースを削除します。

  3. アクティブではない作業領域を削除します。

トピック:

アクティブではない作業領域の識別

作業領域がアクティブでないかどうかを判別する場合の最初のステップは、いくつかの基本ルールを確立することです。Application Expressエンジンのカレント・スキーマにあるOracle Application Expressアクティビティ・レコードに基づいてルールを決定する方法が一般的です。

次のDDL(データ定義言語)によって、2004年6月28日以前にリクエストされ、2004年6月10日以降アクティブではないすべての作業領域の表が作成されます。この例では、作業領域ごとにApplication Expressエンジン・スキーマ内の最新の更新に関するキーを確認することで、アクティブでないかどうかが判別されます。

ALTER SESSION SET CURRENT_SCHEMA = APEX_030200;
CREATE TABLE ws_to_purge AS
 SELECT c.security_group_id, c.company_name, c.admin_email, c.request_date,
 SYSDATE last_updated_on, 'Y' ok_to_delete
   FROM wwv_flow_provision_company c
  WHERE
c.request_date <= to_date('20040628','YYYYMMDD') AND
     (  not exists
 (SELECT NULL /* Activity Log */
        FROM wwv_flow_activity_log l
       WHERE l.security_group_id = c.security_group_id
         AND l.time_stamp > to_date('20040610','YYYYMMDD'))
 )
    AND NOT EXISTS
     (SELECT NULL /* workspace applications */
        FROM wwv_flows f
       WHERE f.security_group_id = c.security_group_id
         AND f.last_updated_on > to_date('20040610','YYYYMMDD'))
    AND NOT EXISTS
     (SELECT NULL /* Pages */
        FROM wwv_flow_steps s
       WHERE s.security_group_id = c.security_group_id
         AND s.last_updated_on > to_date('20040610','YYYYMMDD'))
    AND NOT EXISTS
     (SELECT NULL /* Regions */
        FROM wwv_flow_page_plugs p
       WHERE p.security_group_id = c.security_group_id
         AND p.last_updated_on > to_date('20040610','YYYYMMDD'))
    AND NOT EXISTS
     (SELECT NULL /* Items */
        FROM wwv_flow_step_items i
       WHERE i.security_group_id = c.security_group_id
         AND i.last_updated_on > to_date('20040610','YYYYMMDD'))
    AND NOT EXISTS
     (SELECT NULL /* Templates */
        FROM wwv_flow_templates t
       WHERE t.security_group_id = c.security_group_id
         AND t.last_updated_on > to_date('20040610','YYYYMMDD'))
    AND NOT EXISTS
     (SELECT NULL /* Files uploaded */
        FROM wwv_flow_file_objects$ o
       WHERE o.security_group_id = c.security_group_id
         AND o.created_on > to_date('20040610','YYYYMMDD'))
    AND NOT EXISTS
     (SELECT NULL /* SQL Workshop history */
        FROM wwv_flow_sw_sql_cmds s
       WHERE s.security_group_id = c.security_group_id
         AND s.created_on > to_date('20040610','YYYYMMDD'));

アクティブではない作業領域を識別した後、それらを消去できます。次の2ステップの操作で、アクティブではない作業領域を消去します。

アクティブではない作業領域に関連付けられているリソースの削除

アクティブではない作業領域を1つの表で識別した後、それらを削除します。


注意:

アクティブではない作業領域に関連付けられているスキーマ、表領域またはデータファイルを削除する前に、それらのリソースが他の作業領域またはアプリケーションで使用されていないことを確認してください。

アクティブではない作業領域に関連付けられているリソースを削除するには、次のステップを実行します。

  1. 識別したアクティブではない作業領域が含まれている表をwwv_flow_company_schemasに結合して、削除する作業領域で使用されているスキーマを識別します。

  2. アクティブではない作業領域によって排他的に使用されているスキーマ、表領域およびデータファイルをデータベースから削除します。次のような問合せを実行して、削除するスキーマを識別できます。

    SELECT s.schema
      FROM ws_to_purge ws,
           wwv_flow_company_schemas s
    WHERE s.security_group_id = ws.security_group_id
       AND ws.ok_to_delete = 'Y';
    

アクティブではない作業領域の削除

アクティブではない作業領域に関連付けられているリソースを削除すると、その作業領域を削除できます。アクティブではない作業領域は、Oracle Application Express管理サービス・アプリケーションを使用して手動で削除できます。また、次のPL/SQLの例に示すように、プログラムによって削除できます。

BEGIN 
     FOR c1 IN (SELECT security_group_id  
                 FROM ws_to_purge
                 WHERE ok_to_delete = 'Y')
     LOOP
         WWV_FLOW_PROVISIONING.TERMINATE_SERVICE_BY_SGID(c1.security_group_id);
     END LOOP;
 END;