マテリアライズドビューとトランザクションログ
この時点で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文によってマテリアライズドビューへの変更が自動的に呼び出されます。

