4.9 GeoRaster操作の進行状況の監視およびレポート

GeoRasterでは、多くの操作の実行の進行状況を監視およびレポートできます(「GeoRasterでの操作の進行状況のレポート」のリストを参照)。次に、操作の進行状況をレポートする場合の基本ステップを示します。

  1. SDO_GEOR_UTL.createReportTableプロシージャを使用して、適切なユーザーのスキーマにレポート表を作成します。(これは、操作を監視する前に1回コールする必要があります。)

    EXECUTE SDO_GEOR_UTL.createReportTable;
    
  2. 操作を実行および監視するユーザー・セッションで、次のアクションを実行します。

    1. SDO_GEOR_UTL.enableReportを使用して監視を有効化します。(後でステータス・レポートを取得するために、このプロシージャをコールする必要があります。)

      EXECUTE SDO_GEOR_UTL.enableReport;
      
    2. オプションで、SDO_GEOR_UTL.setClientIDを使用してクライアントIDを設定します。クライアントIDを使用して、操作を実行するユーザー・セッションを識別します。このプロシージャがコールされない場合、クライアントIDはデフォルトでSQLセッションIDになります。たとえば:

      EXECUTE SDO_GEOR_UTL.setClientID(100);
      
    3. オプションで、SDO_GEOR_UTL.setSeqIDを使用して順序IDを設定します。順序IDを使用して、同じSQLセッション内の繰返し操作を識別します。このプロシージャがコールされない場合、順序IDはデフォルトで0になります。たとえば:

      EXECUTE SDO_GEOR_UTL.setSeqID(1);
      
    4. 監視対象の操作を実行します。たとえば:

      -- Generate pyramid for georid=6. The progress of this generatePyramid call 
      -- can be monitored by step 3.
      DECLARE
        gr sdo_georaster;
      BEGIN
         SELECT georaster INTO gr 
          FROM georaster_table WHERE georid = 6 FOR UPDATE;
        sdo_geor.generatePyramid(gr, 'rLevel=5, resampling=NN');
        UPDATE georaster_table SET georaster = gr WHERE georid = 6;
         COMMIT;
      END;
      /
      
    5. オプションで、監視対象の追加操作ごとに、ステップcおよびdを繰り返します。たとえば:

      EXECUTE SDO_GEOR_UTL.setSeqID(2);
      -- Generate pyramid for georid=7. The progress of this generatePyramid call
      -- can be monitored by step 3.
      DECLARE
        gr sdo_georaster;
      BEGIN
         SELECT georaster INTO gr 
          FROM georaster_table WHERE georid = 7 FOR UPDATE;
        sdo_geor.generatePyramid(gr, 'rLevel=5, resampling=NN');
        UPDATE georaster_table SET georaster = gr WHERE georid = 7;
         COMMIT;
      END;
      /
      
    6. オプションで、SDO_GEOR_UTL.disableReportを使用して監視を無効化します。このプロシージャがコールされない場合、監視はユーザー・セッションの終了時に自動的に停止します。

      EXECUTE SDO_GEOR_UTL.disableReport;
      
  3. 同じユーザーの別のセッションから、実行ステータス・レポートを取得します。

    クライアントIDおよび順序IDによって識別される特定の操作の進行状況を取得するには、SDO_GEOR_UTL.getProgressファンクションを使用します。このファンクションは、完了の割合を反映した0から1の間の数値として進行状況を戻します。たとえば、次の問合せは、操作が55%完了したことを示しています。

    SELECT sdo_geor_utl.getProgress(100, 2) progress FROM DUAL;
     
    PROGRESS
    --------
        0.55
     
    1 row selected.
    

    クライアントIDおよび順序IDによって識別される特定の操作のステータス・レポートを取得するには、SDO_GEOR_UTL.getStatusReportファンクションを使用します。このファンクションは、操作の進行状況とその他の情報を記述した文字列の配列を戻します。たとえば:

    -- Check the status of the generatePyramid on georid=6
    SELECT sdo_geor_utl.getStatusReport(100, 1) FROM DUAL;
    SDO_GEOR_UTL.GETSTATUSREPORT(100,1)
    -----------------------------------------------------------------------------
    SDO_STRING2_ARRAY('31-OCT-11 02.20.04.854558 PM', 'GeneratePyramid', 'RDT:RDT_1', 'RID:6', '100% complete', 'operation completed')
     
    1 row selected.
    
    -- Check the status of the generatePyramid on georid=7
    SELECT sdo_geor_utl.getStatusReport(100, 2) FROM DUAL;
     
    SDO_GEOR_UTL.GETSTATUSREPORT(100,2)
    -----------------------------------------------------------------------------
    SDO_STRING2_ARRAY('31-OCT-11 02.20.08.854558 PM', 'GeneratePyramid', 'RDT:RDT_1', 'RID:7', '55% complete', 'operation completed')
     
    1 row selected.
    

    監視対象のすべての操作のステータスを取得するには、次の文を入力します。

    SELECT * from the (select sdo_geor_utl.getAllStatusReport() FROM DUAL); 
    COLUMN_VALUE
    ------------------------------------------------------------------------------
    SDO_STRING2_ARRAY('Client:100', 'Sequence:1', '31-OCT-11 02.20.04.854558 PM', 'GeneratePyramid', 'RDT:RDT_1', 'RID:6', '100% complete', 'operation completed')
    SDO_STRING2_ARRAY('Client:100', 'Sequence:2', '31-OCT-11 02.20.08.854558 PM', 'GeneratePyramid', 'RDT:RDT_1', 'RID:7', '55% complete', NULL)
     
    2 rows selected.
    

レポート表を消去または削除する必要がある場合、それぞれSDO_GEOR_UTL.clearReportTableまたはSDO_GEOR_UTL.dropReportTableプロシージャを使用します。

EXECUTE SDO_GEOR_UTL.clearReportTable;
-- or:
EXECUTE SDO_GEOR_UTL.dropReportTable;