マテリアライズドビューとトランザクションログ
この時点でDBTRANユーティリティを使ってDEMOデータベースのトランザクションログの内容を見ると、次のようになっています。
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
--CONNECT-1010-0000975095-DBA-2011-02-02 11:38 --BEGIN TRANSACTION-1010-0000975106 BEGIN TRANSACTION GO --SQL-1010-0000975109 BEGIN SET TEMPORARY OPTION first_day_of_week = '7'; SET TEMPORARY OPTION date_order = 'YMD'; SET TEMPORARY OPTION nearest_century = '50'; SET TEMPORARY OPTION date_format = 'YYYY-MM-DD'; SET TEMPORARY OPTION timestamp_format = 'YYYY-MM-DD HH:NN:SS.SSS'; SET TEMPORARY OPTION time_format = 'HH:NN:SS.SSS'; SET TEMPORARY OPTION default_timestamp_increment = '1'; SET TEMPORARY OPTION timestamp_with_time_zone_format = 'YYYY-MM-DD HH:NN:SS.SSS+HH:NN'; CREATE materialized VIEW groupo.shirt_products( prod_id,prod_name,prod_description,prod_size,prod_color,prod_quantity,prod_unit_price ) AS SELECT products.id,products.name,products.description,products.SIZE,products.color,products.quantity,products.unitprice FROM GROUPO.products WHERE products.name LIKE '%shirt%'; SET TEMPORARY OPTION first_day_of_week = ; SET TEMPORARY OPTION date_order = ; SET TEMPORARY OPTION nearest_century = ; SET TEMPORARY OPTION date_format = ; SET TEMPORARY OPTION timestamp_format = ; SET TEMPORARY OPTION time_format = ; SET TEMPORARY OPTION default_timestamp_increment = ; SET TEMPORARY OPTION timestamp_with_time_zone_format = ; END GO --COMMIT-1010-0000976304 COMMIT WORK GO --BEGIN TRANSACTION-1010-0000976307 BEGIN TRANSACTION GO --SQL-1010-0000976310 comment TO preserve format ON VIEW groupo.shirt_products IS 'create materialized view groupo.shirt_products( prod_id, prod_name, prod_description, prod_size, prod_color, prod_quantity, prod_unit_price) as select "id", "name", "description", "size", color, quantity, unitprice from products where "name" like ''%shirt%''' GO --COMMIT-1010-0000976661 COMMIT WORK GO --BEGIN TRANSACTION-1010-0000976664 BEGIN TRANSACTION GO --SQL-1010-0000976667 CREATE UNIQUE INDEX products ON groupo.shirt_products(prod_id ASC) GO --COMMIT-1010-0000976745 COMMIT WORK GO --BEGIN TRANSACTION-1010-0000976748 BEGIN TRANSACTION GO --SQL-1010-0000976751 ALTER materialized VIEW groupo.shirt_products immediate refresh GO --COMMIT-1010-0000976826 COMMIT WORK GO --CHECKPOINT-0000-0000976829-2011-02-02 11:39 --BEGIN TRANSACTION-1010-0000976859 BEGIN TRANSACTION GO --SQL-1010-0000976862 refresh materialized VIEW groupo.shirt_products GO --COMMIT-1010-0000976921 COMMIT WORK GO --BEGIN TRANSACTION-1010-0000976924 BEGIN TRANSACTION GO --UPDATE-1010-0000977130 UPDATE GROUPO.Products SET Description='Modified' WHERE ID=300 GO --UPDATE-1010-0000977152 UPDATE GROUPO.Products SET Description='Modified' WHERE ID=301 GO --UPDATE-1010-0000977174 UPDATE GROUPO.Products SET Description='Modified' WHERE ID=302 GO --COMMIT-1010-0000977494 COMMIT WORK GO |
上に示したトランザクションログの内容に関して、指摘しておきたいことがいくつかあります。
-
CREATE MATERIALIZED VIEW
文が含まれているバッチ(18~40行目)に注目してください。ここでは、CREATE MATERIALIZED VIEW
文の発行に必要だった接続オプションが再設定されています。 -
このトランザクションログでは、
REFRESH MATERIALIZED VIEW
文が独立した文として記録されています(85行目)。デフォルトでは、REFRESH MATERIALIZED VIEW
文はWITH
句が指定されていなければWITH SHARE MODE
ロックを使用します。即時メンテナンス型のビューで使用できるロックモードは、WITH SHARE MODE
とWITH EXCLUSIVE MODE
とWITH ISOLATION LEVEL SERIALIZABLE
だけです。 -
shirt_productsマテリアライズドビューのローの変更は、トランザクションログには現れていません。このビューは即時メンテナンスされるビューなので、トランザクションログには、
UPDATE
文によるベーステーブルの変更(93~106行目)だけが記録されていれば十分です。このログがリカバリー処理で再生される場合は、トランザクションログ内の3つのUPDATE
文によってマテリアライズドビューへの変更が自動的に呼び出されます。