演習: 自動ゾーン・マップの使用

この演習では、自動ゾーン・マップを有効にする方法と、介入なしにユーザー表に対して自動ゾーン・マップがどのように作成およびメンテナンスされるかを示します。

  1. 新しい演習を開始する前に、演習の環境の推奨事項を参照してください。
  2. 演習の第1部では、DBAの介入のもとでゾーン・マップがどのように作成され表示されるかを示します。
    1. /home/oracle/labs/M104784GC10/setup_zonemap.shシェル・スクリプトを使用して、PDB20SALES.ZM_TABLE表を作成します。
      $ cd /home/oracle/labs/M104784GC10
      $ /home/oracle/labs/M104784GC10/setup_zonemap.sh
      SQL*Plus: Release 20.0.0.0.0 - Production on Tue Feb 25 10:37:32 2020
      Version 20.2.0.0.0
      
      Copyright (c) 1982, 2020, Oracle.  All rights reserved.
      
      
      Connected to:
      Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
      Version 20.2.0.0.0
      
      
      System altered.
      
      Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
      Version 20.2.0.0.0
      
      SQL*Plus: Release 20.0.0.0.0 - Production on Tue Feb 25 10:37:33 2020
      Version 20.2.0.0.0
      
      Copyright (c) 1982, 2020, Oracle.  All rights reserved.
      
      
      Connected to:
      Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
      Version 20.2.0.0.0
      
      SQL> shutdown immediate
      Database closed.
      Database dismounted.
      ORACLE instance shut down.
      SQL> exit
      Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
      Version 20.2.0.0.0
      
      SQL*Plus: Release 20.0.0.0.0 - Production on Tue Feb 25 10:37:58 2020
      Version 20.2.0.0.0
      
      Copyright (c) 1982, 2020, Oracle.  All rights reserved.
      
      Connected to an idle instance.
      
      SQL> STARTUP
      ORACLE instance started.
      
      Total System Global Area 1426062424 bytes
      Fixed Size                  9567320 bytes
      Variable Size             855638016 bytes
      Database Buffers          553648128 bytes
      Redo Buffers                7208960 bytes
      Database mounted.
      Database opened.
      SQL> ALTER PLUGGABLE DATABASE all OPEN;
      
      Pluggable database altered.
      
      SQL> exit
      Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
      Version 20.2.0.0.0
      
      SQL*Plus: Release 20.0.0.0.0 - Production on Tue Feb 25 10:38:32 2020
      Version 20.2.0.0.0
      
      Copyright (c) 1982, 2020, Oracle.  All rights reserved.
      
      
      Connected to:
      Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
      Version 20.2.0.0.0
      
      SQL> drop user sales cascade;
      drop user sales cascade
                *
      ERROR at line 1:
      ORA-01918: user 'SALES' does not exist
      
      
      SQL> create user sales identified by password;
      
      User created.
      
      SQL> grant create session, create table, unlimited tablespace to sales;
      
      Grant succeeded.
      
      SQL> EXIT
      Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
      Version 20.2.0.0.0
      
      SQL*Plus: Release 20.0.0.0.0 - Production on Tue Feb 25 10:38:33 2020
      Version 20.2.0.0.0
      
      Copyright (c) 1982, 2020, Oracle.  All rights reserved.
      
      
      Connected to:
      Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
      Version 20.2.0.0.0
      
      SQL> CREATE TABLE sales_zm (sale_id NUMBER(10), customer_id NUMBER(10));
      
      Table created.
      
      SQL>
      SQL>  DECLARE
        2    i NUMBER(10);
        3  BEGIN
        4    FOR i IN 1..80
        5    LOOP
        6      INSERT INTO sales_zm
        7      SELECT ROWNUM, MOD(ROWNUM,1000)
        8      FROM   dual
        9      CONNECT BY LEVEL <= 100000;
       10      COMMIT;
       11    END LOOP;
       12  END;
       13  /
      
      PL/SQL procedure successfully completed.
      
      SQL>
      SQL> EXEC dbms_stats.gather_table_stats(ownname=>NULL, tabname=>'SALES_ZM')
      
      PL/SQL procedure successfully completed.
      
      SQL> EXIT
      Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
      Version 20.2.0.0.0
      $
    2. SALESとしてPDB20にログインし、統計トレースでセッションを設定し、SALES_ZM表を数回問い合せて"consistent gets (一貫性読取り)"値を確認します。
      $ sqlplus sales@PDB20
      
      Enter password: password
      
      SQL> SET AUTOTRACE ON STATISTIC
      SQL> SELECT COUNT(DISTINCT sale_id) FROM sales_zm WHERE customer_id = 50;  
      
      COUNT(DISTINCTSALE_ID)
      ----------------------
                         100
      
      Statistics
      ----------------------------------------------------------
               44  recursive calls
               12  db block gets
            15248  consistent gets
                4  physical reads
             2084  redo size
              582  bytes sent via SQL*Net to client
              432  bytes received via SQL*Net from client
                2  SQL*Net roundtrips to/from client
                2  sorts (memory)
                0  sorts (disk)
                1  rows processed
      
      SQL>
    3. ゾーン・マップを作成します。属性クラスタリングは表のプロパティであるため、既存の行は並べ替えられません。したがって、表を移動して行をまとめてクラスタ化します。
      SQL> ALTER TABLE sales_zm ADD CLUSTERING BY LINEAR ORDER (customer_id) WITH MATERIALIZED ZONEMAP;
      
      Table altered.
      
      SQL> ALTER TABLE sales_zm MOVE;
      
      Table altered.
      
      SQL>
    4. 問合せを再実行して、"consistent gets"値を確認します。
      SQL> SELECT COUNT(DISTINCT sale_id) FROM sales_zm WHERE customer_id = 50;  
      
      COUNT(DISTINCTSALE_ID)
      ----------------------
                         100
      
      Statistics
      ----------------------------------------------------------
               67  recursive calls
                8  db block gets
              900  consistent gets
                0  physical reads
             1464  redo size
              582  bytes sent via SQL*Net to client
              432  bytes received via SQL*Net from client
                2  SQL*Net roundtrips to/from client
                0  sorts (memory)
                0  sorts (disk)
                1  rows processed
      
      SQL>
    5. この表に対して作成されたゾーン・マップのステータスを表示します。
      SQL> SET AUTOTRACE OFF
      SQL> COL zonemap_name FORMAT A20
      SQL> SELECT zonemap_name,automatic,partly_stale, incomplete
            FROM   dba_zonemaps;
      
      ZONEMAP_NAME         AUTOMATIC PARTLY_STALE INCOMPLETE
      -------------------- --------- ------------ ------------
      ZMAP$_SALES_ZM       NO        NO           NO
      
      SQL>

      既存のビューDBA_ZONEMAPSに追加された新しい列AUTOMATICは、ゾーン・マップが自動的に作成されないことを示しています。

  3. 演習の第2部では、自動ゾーン・マップを有効にしてから、ゾーン・マップが自動的に作成されていることを確認する方法と、自動ゾーン・マップ・アクティビティ(作成およびメンテナンス)を表示する方法を示します。
    1. 表を削除します。
      SQL> DROP TABLE sales_zm PURGE;
      
      Table dropped.
      
      SQL> SELECT zonemap_name, automatic, partly_stale, incomplete
           FROM   dba_zonemaps;
      
      no rows selected
      
      SQL>
    2. ゾーン・マップの自動作成を有効にします。
      SQL> EXEC DBMS_AUTO_ZONEMAP.CONFIGURE('AUTO_ZONEMAP_MODE','ON')
      
      PL/SQL procedure successfully completed.
      
      SQL> 
    3. 表を再作成し、ダイレクト・ロードを使用して行を挿入し、表統計を収集します。
      SQL> CREATE TABLE sales_zm (sale_id NUMBER(10), customer_id NUMBER(10));
      
      Table created.
      
      SQL> DECLARE
        i NUMBER(10);
      BEGIN
        FOR i IN 1..80
        LOOP
          INSERT /*+ APPEND */ INTO sales_zm
          SELECT ROWNUM, MOD(ROWNUM,1000)
          FROM   dual
          CONNECT BY LEVEL <= 100000;
          COMMIT;
        END LOOP;
      END;
      /  2    3    4    5    6    7    8    9   10   11   12   13
      PL/SQL procedure successfully completed.
      
      SQL> EXEC dbms_stats.gather_table_stats(ownname=>NULL, tabname=>'SALES_ZM')
      
      PL/SQL procedure successfully completed.
      
      SQL>
    4. SALES_ZM表を20回以上問い合せて、"consistent gets"値を確認します。
      SQL> SET AUTOTRACE ON STATISTIC
      SQL> SELECT COUNT(DISTINCT sale_id) FROM sales_zm WHERE customer_id = 50;  
      
      COUNT(DISTINCTSALE_ID)
      ----------------------
                         100
      
      Statistics
      ----------------------------------------------------------
               44  recursive calls
               12  db block gets
            15248  consistent gets
                4  physical reads
             2084  redo size
              582  bytes sent via SQL*Net to client
              432  bytes received via SQL*Net from client
                2  SQL*Net roundtrips to/from client
                2  sorts (memory)
                0  sorts (disk)
                1  rows processed
      
      SQL> /
      
      COUNT(DISTINCTSALE_ID)
      ----------------------
                         100
      
      Statistics
      ----------------------------------------------------------
               44  recursive calls
               12  db block gets
            15248  consistent gets
                4  physical reads
             2084  redo size
              582  bytes sent via SQL*Net to client
              432  bytes received via SQL*Net from client
                2  SQL*Net roundtrips to/from client
                2  sorts (memory)
                0  sorts (disk)
                1  rows processed
      
      SQL> /
      
      COUNT(DISTINCTSALE_ID)
      ----------------------
                         100
      
      Statistics
      ----------------------------------------------------------
               44  recursive calls
               12  db block gets
            15248  consistent gets
                4  physical reads
             2084  redo size
              582  bytes sent via SQL*Net to client
              432  bytes received via SQL*Net from client
                2  SQL*Net roundtrips to/from client
                2  sorts (memory)
                0  sorts (disk)
                1  rows processed
      
      SQL>
    5. ゾーン・マップの作成を担当するバックグラウンド・プロセスのウェイクアップが遅いため、/home/oracle/labs/M104784GC10/zonemap_exec.sql SQLスクリプトを使用してウェイクアップを早めます。
      SQL> @/home/oracle/labs/M104784GC10/zonemap_exec.sql
      Connected.
      
      PL/SQL procedure successfully completed.
      
      Connected.
      SQL>
    6. 作成されたゾーン・マップのステータスを表示します。
      SQL> SELECT zonemap_name, automatic, partly_stale, incomplete
           FROM   dba_zonemaps;
      
      ZONEMAP_NAME         AUTOMATIC PARTLY_STALE INCOMPLETE
      -------------------- --------- ------------ ------------
      ZMAP$_SALES_ZM       YES       NO           NO
      
      SQL>
    7. 自動ゾーン・マップのタスク・アクションを表示します。自動ゾーン・マップの作成が確認されるまで、DBA_ZONEMAP_AUTO_ACTIONSビューを複数回問い合せます。
      SQL> SELECT task_id, msg_id, action_msg  FROM dba_zonemap_auto_actions;
      
         TASK_ID     MSG_ID
      ---------- ----------
      ACTION_MSG
      --------------------------------------------------------------------------------
               6         35
      BS:Current execution task id: 6 Execution name: SYS_ZMAP_2020-04-06/07:56:54 Tas
      k Name: ZMAP_TASK1
      
               6         36
      BS:******** Zonemap Background Action Report for Task ID: 6 ****************
      
               6         37
      BS:****** End of Zonemap Background Action Report for Task ID: 6 **********
      
               6         21
      BS:Current execution task id: 6 Execution name: SYS_ZMAP_2020-04-06/07:34:36 Tas
      k Name: ZMAP_TASK1
      
               6         22
      BS:******** Zonemap Background Action Report for Task ID: 6 ****************
      
               6         23
      TP:Trying to create zonemap on table: SALES_ZM owner:SALES
      
               6         24
      AL:Block count : 15447, sample percent is : 3.236874
      
               6         25
      TP:col name:CUSTOMER_ID: clustering ratio: .98
      
               6         26
      TP:col name:SALE_ID: clustering ratio: .09
      
               6         27
      TP:Candidate column list:SALE_ID
      
               6         28
      TP:New zonemap name: ZMAP$_SALES_ZM
      
               6         29
      TP:Creating new zonemap ZMAP$_SALES_ZM on table SALES_ZM owner SALEStable space
      USERS
      
               6         30
      BS:succesfully created zonemap: ZN:ZMAP$_SALES_ZM BT:SALES_ZM SN:SALES CL:SALE_I
      D CT:+00 00:00:01.605120 TS:2020-04-06/07:34:39 DP:4
      
               6         31
      BS:****** End of Zonemap Background Action Report for Task ID: 6 **********
      
               6         32
      BS:Current execution task id: 6 Execution name: SYS_ZMAP_2020-04-06/07:43:46 Tas
      k Name: ZMAP_TASK1
      
               6         33
      BS:******** Zonemap Background Action Report for Task ID: 6 ****************
      
               6         34
      BS:****** End of Zonemap Background Action Report for Task ID: 6 **********
      
      
      17 rows selected.
      
      SQL>

      自動タスク実行のアクティビティ・レポートを表示する別の方法として、DBMS_AUTO_ZONEMAP.ACTIVITY_REPORT関数を使用します。

      SQL> SELECT dbms_auto_zonemap.activity_report(systimestamp-2, systimestamp, 'TEXT') FROM dual;
      
      DBMS_AUTO_ZONEMAP.ACTIVITY_REPORT(SYSTIMESTAMP-2,SYSTIMESTAMP,'TEXT')
      --------------------------------------------------------------------------------
      /orarep/autozonemap/main%3flevel%3d GENERAL SUMMARY
      -------------------------------------------------------------------------------
       Activity Start    04-APR-2020 16:45:33.000000000 +00:00
       Activity End      06-APR-2020 16:45:33.656170000 +00:00
       Total Executions  1
      -------------------------------------------------------------------------------
      
      EXECUTION SUMMARY
      -------------------------------------------------------------------------------
       zonemaps created                      1
       zonemaps compiled                     0
       zonemaps dropped                      0
       Stale zonemaps complete refreshed     0
       Partly stale zonemaps fast refreshed  0
       Incomplete zonemaps fast refreshed    0
      -------------------------------------------------------------------------------
      
      NEW ZONEMAPS DETAILS
      -------------------------------------------------------------------------------
       Zonemap         Base Table  Schema  Operation time  Date created         DOP  C
      olumn list
        ZMAP$_SALES_ZM  SALES_ZM    SALES   00:00:01.68     2020-04-06/16:45:04  2    S
      ALE_ID
      -------------------------------------------------------------------------------
      
      ZONEMAPS MAINTENANCE DETAILS
      -------------------------------------------------------------------------------
       Zonemap  Previous State  Current State  Refresh Type  Operation Time  Dop  Date
       Maintained
      -------------------------------------------------------------------------------
      
      FINDINGS
      -------------------------------------------------------------------------------
       Execution Name  Finding Name  Finding Reason  Finding Type  Message
      
      
      SQL>

      すべての実行で作成されたゾーン・マップの数を確認する場合は、次の問合せを実行します。

      SQL> SELECT * FROM dba_zonemap_auto_actions
      WHERE action_msg LIKE '%succesfully created zonemap:%' ORDER BY TIME_STAMP;
      
         TASK_ID     MSG_ID
      ---------- ----------
      EXEC_NAME
      --------------------------------------------------------------------------------
      ACTION_MSG
      --------------------------------------------------------------------------------
      TIME_STAMP
      ---------------------------------------------------------------------------
               6         49
      SYS_ZMAP_2020-04-06/16:45:01
      BS:succesfully created zonemap: ZN:ZMAP$_SALES_ZM BT:SALES_ZM SN:SALES CL:SALE_I
      D CT:+00 00:00:01.681134 TS:2020-04-06/16:45:04 DP:2
      06-APR-20 04.45.04.000000000 PM
      
      SQL>
    8. SALES_ZM表のSALE_ID列の値を更新します。/home/oracle/labs/M104784GC10/zonemap_update.sql SQLスクリプトを実行します。
      SQL> @/home/oracle/labs/M104784GC10/zonemap_update.sql
      8000 rows updated.
      
      8000 rows updated.
      
      8000 rows updated.
      
      8000 rows updated.
      
      Commit complete.
      
      SQL>
    9. ゾーン・マップ・メンテナンスのステータスを表示します。
      SQL> SELECT zonemap_name, automatic, partly_stale, incomplete
           FROM   dba_zonemaps;
      
      ZONEMAP_NAME         AUTOMATIC PARTLY_STALE INCOMPLETE
      -------------------- --------- ------------ ------------
      ZMAP$_SALES_ZM       YES       YES         NO
      
      SQL>
    10. 自動ゾーン・マップ・メンテナンスに対するアクションが表示されるまで、アクティビティ・レポートを表示します。
      SQL> SELECT dbms_auto_zonemap.activity_report(systimestamp-2, systimestamp, 'TEXT') FROM dual;
      
      DBMS_AUTO_ZONEMAP.ACTIVITY_REPORT(SYSTIMESTAMP-2,SYSTIMESTAMP,'TEXT')
      --------------------------------------------------------------------------------
      /orarep/autozonemap/main%3flevel%3d GENERAL SUMMARY
      -------------------------------------------------------------------------------
       Activity Start    04-APR-2020 16:47:10.000000000 +00:00
       Activity End      06-APR-2020 16:47:10.417146000 +00:00
       Total Executions  1
      -------------------------------------------------------------------------------
      
      EXECUTION SUMMARY
      -------------------------------------------------------------------------------
       zonemaps created                      1
       zonemaps compiled                     0
       zonemaps dropped                      0
       Stale zonemaps complete refreshed     0
       Partly stale zonemaps fast refreshed  1
       Incomplete zonemaps fast refreshed    0
      -------------------------------------------------------------------------------
      
      NEW ZONEMAPS DETAILS
      -------------------------------------------------------------------------------
       Zonemap         Base Table  Schema  Operation time  Date created         DOP  C
      olumn list
       ZMAP$_SALES_ZM  SALES_ZM    SALES   00:00:01.60     2020-04-06/07:34:39  4    S
      ALE_ID
      -------------------------------------------------------------------------------
      
      ZONEMAPS MAINTENANCE DETAILS
      -------------------------------------------------------------------------------
       Zonemap         Previous State  Current State  Refresh Type  Operation Time  Do
      p  Date Maintained
       ZMAP$_SALES_ZM  PARTLY_STALE    VALID          REBUILD       00:00:01.77     0
         2020-04-06/08:41:24
      -------------------------------------------------------------------------------
      
      FINDINGS
      -------------------------------------------------------------------------------
       Execution Name  Finding Name  Finding Reason  Finding Type  Message
      
      SQL>

      ゾーン・マップのメンテナンスを担当するバックグラウンド・プロセスが非常に迅速にウェイクアップし、ゾーンマップがすでに再構築されている可能性があります。その場合、"ZONEMAPS MAINTENANCE DETAILS"に情報が表示されません。

    11. ゾーン・マップのメンテナンスを担当するバックグラウンド・プロセスのウェイクアップが遅い可能性があります。/home/oracle/labs/M104784GC10/zonemap_exec.sql SQLスクリプトを使用して、ウェイクアップを早めます。
      SQL> @/home/oracle/labs/M104784GC10/zonemap_exec.sql
      Connected.
      
      PL/SQL procedure successfully completed.
      
      Connected.
      SQL>
    12. アクティビティ・レポートを表示します。
      SQL> SELECT zonemap_name, automatic, partly_stale, incomplete
           FROM   dba_zonemaps;  
      
      ZONEMAP_NAME         AUTOMATIC PARTLY_STALE INCOMPLETE
      -------------------- --------- ------------ ------------
      ZMAP$_SALES_ZM       YES       NO           NO
      
      SQL> SELECT dbms_auto_zonemap.activity_report(systimestamp-2, systimestamp, 'TEXT') FROM dual;
      
      DBMS_AUTO_ZONEMAP.ACTIVITY_REPORT(SYSTIMESTAMP-2,SYSTIMESTAMP,'TEXT')
      --------------------------------------------------------------------------------
      /orarep/autozonemap/main%3flevel%3d GENERAL SUMMARY
      -------------------------------------------------------------------------------
       Activity Start    04-APR-2020 16:51:21.000000000 +00:00
       Activity End      06-APR-2020 16:51:21.228968000 +00:00
       Total Executions  2
      -------------------------------------------------------------------------------
      
      EXECUTION SUMMARY
      -------------------------------------------------------------------------------
       zonemaps created                      1
       zonemaps compiled                     0
       zonemaps dropped                      0
       Stale zonemaps complete refreshed     0
       Partly stale zonemaps fast refreshed  1
       Incomplete zonemaps fast refreshed    0
      -------------------------------------------------------------------------------
      
      NEW ZONEMAPS DETAILS
      -------------------------------------------------------------------------------
       Zonemap         Base Table  Schema  Operation time  Date created         DOP  C
      olumn list
       ZMAP$_SALES_ZM  SALES_ZM    SALES   00:00:01.68     2020-04-06/16:45:04  2    S
      ALE_ID
      -------------------------------------------------------------------------------
      
      ZONEMAPS MAINTENANCE DETAILS
      -------------------------------------------------------------------------------
       Zonemap         Previous State  Current State  Refresh Type  Operation Time  Do
      p  Date Maintained
       ZMAP$_SALES_ZM  PARTLY_STALE    VALID          REBUILD       00:00:05.25     0
         2020-04-06/16:48:30
      -------------------------------------------------------------------------------
      
      FINDINGS
      -------------------------------------------------------------------------------
       Execution Name  Finding Name  Finding Reason  Finding Type  Message
      
      
      SQL>
    13. 表を削除します。
      SQL> DROP TABLE sales_zm PURGE;
      
      Table dropped.
      
      SQL> SELECT zonemap_name, automatic, partly_stale, incomplete
           FROM   dba_zonemaps;
      
      no rows selected
      
      SQL> EXIT
      $