[B31]...

48

description

 

Transcript of [B31]...

Page 1: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita
Page 2: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

Oracle LogMinerってレプリケーションソフトでも

使われているけどどうなっている?

セッション中に覗いてみましょうか

株式会社インサイトテクノロジープロダクトコンサルティング事業部

森田 俊哉

Page 3: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

Introduction

森田 俊哉 / Toshiya Morita

株式会社インサイトテクノロジープロダクトコンサルティング事業部部長

Past Experience:• DBA & Database Condulting• Unix Admin/Project Manager• C Language Debugger Developer/Programmer

Page 4: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

Agenda

Oracleの処理の仕組み

Oracle LogMinerって何?

LogMiner検証

実際にV$LOGMNR_CONTENTSを覗いてみる

追加SUPPLEMENTAL LOGGING ?

レプリケーションソフトは、LOGMinerを使ってる

Attunity Replicate Demo

Q&A

Page 5: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

Oracle処理の仕組み

Page 6: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

9

Oracle Database の構成

Client Oracle DatabaseListener

REDO LogsControlfileData File

Server

Server

Server

SGA

LGWRCKPTSMON PMON DBWn

REDO LOG BufferDatabase BufferShared Pool

Page 7: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

データベース・バッファ・キャッシュ

データベースから取得されたデータ・ブロック(表、索引など)をキャッシュする領域

REDOログ・バッファ ディスク(REDOログ・ファイル)に書き込むまでREDO情報をキャッシュ(インスタンス・リカバリに使用)する領域

共有プール 一度実行されたSQL文の解析に使うデータや実行計画、およびユーザー間で共有できる様々な構造をキャッシュする領域

ラージ・プール(オプション)

特定の大きなプロセス(Oracleバックアップおよびリカバリ操作、I/Oサーバー・プロセスなど)が使用できるオプション領域

Javaプール(オプション)

データベース内でJavaを実行する場合に使用するオプション領域(JVM内のすべてのセッション固有のJavaコードおよびデータ)

14

SGAコンポーネントの詳細

SGAREDO LOG BufferDatabase BufferShared Pool

SQL文実行計画

検索対象データブロック

変更履歴A→B

COMMIT

Page 8: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

9

Oracle Database の処理(検索)

Client Oracle Database

REDO LogsControlfileData File

Server

SGA

LGWRCKPTSMON PMON DBWn

REDO LOG BufferDatabase BufferShared Pool

SQL解析情報

SQL実行計画

A

A

SELECT COLA FROM TABA

データディクショナリ

データベース内のオブジェクト定義や

ユーザ情報などを管理するための内部表

この情報を使って、実行前に解析を行う。

Page 9: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

9

Oracle Database の処理(更新)

Client Oracle Database

REDO LogsControlfileData File

Server

SGA

LGWRCKPTSMON PMON DBWn

REDO LOG BufferDatabase BufferShared Pool

SQL解析情報

SQL実行計画

A

A

SELECT COLA FROM TABA

データディクショナリ

ロールバックの際に使用

するため変更情報を保存

B A更新履歴

A→B

変更前に

変更履歴を残す

UPDATE TABA SET COLA=‘B’

Page 10: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

9

Oracle Database の処理(更新)

Client Oracle Database

REDO LogsControlfileData File

Server

SGA

LGWRCKPTSMON PMON DBWn

REDO LOG BufferDatabase BufferShared Pool

SQL解析情報

SQL実行計画

A

B

SELECT COLA FROM TABA

データディクショナリ

B A更新履歴

A→B

データベースで行われた変更履歴(DML,DDL処理)を格納

障害からの復旧に使用

UPDATE TABA SET COLA=‘B’

COMMIT

メモリ上の変更をいつファイルに

反映したか(チェックポイント)

他の物理ファイルの場所

A

Page 11: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

Oracle Database の処理(更新)

以下のテーブル及びデータが作成

1. CREATE TABLE INSIGHT

(COL1 VARCHAR2(1));

2. INSERT INTO INSIGHT VALULES(‘A’);

3. INSERT INTO INSIGHT VALULES(‘B’);

4. COMMIT;

INSIGHTテーブルの2件のデータは、

1つのデータブロックに格納

(Public LAN)

SGA

AB block

Page 12: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

Oracle Database の処理(更新)

次の操作が行われた時を例にします。(Public LAN)

SGA

AB

AB

1. セッション1でINSIGHTテーブルをSELECT ・・ WHERE COL1=‘A’ FOR UPDATEでデータ”A”をロックします

2. セッション2でINSIGHTテーブルをSELECT ・・ WHERE COL1=‘B’ FOR UPDATEでデータ”B”をロックします

3. セッション1でデータ”A”を”P”にUPDATEUPDATE ・・ SET COL1=‘P’ WHERE COL1=‘A’

4. セッション2でデータ”B”を”Q”にUPDATEUPDATE ・・ SET COL1=‘Q’ WHERE COL1=‘B’

5. セッション1でCOMMIT

6. セッション2でCOMMIT

TX

TX

PQ

A

B

P

Q

block

UNDO

REDO

Page 13: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

Oracle LogMiner って何…?

Page 14: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

REDOログと関連するデータ・ディクショナリに直接アクセス

REDOログは、データベース上で実行されるすべてのアクティビティの完全な記録。

データ・ディクショナリは、内部オブジェクト識別子およびタイプを外部名とデータ形式へ変

換する際に使用されます。

LogMinerはデータベースで実行される各論理操作を動的なビュー

V$LOGMNR_CONTENTSに提供

各行には、変更のロールバックに使用できるSQL UNDO文と、元の操作が詳細に記述されて

いるSQL REDO文が含まれます。

LOGMinerとは?

データ・ディクショナリREDOログ

V$LOGMNR_CONTENTS

Page 15: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

アプリケーション・レベルで発生したエラーなどデータベースの論

理的破損が発生した時期を特定。

DML文の事後監査、コミットされたトランザクション、アップデー

トしたユーザー

リカバリを行うために必要なSQLを特定。

どの表にどんな更新が多いかなどの統計情報を取得し、チューニン

グ時の優先順位を決定することができる。

LOGMinerで出来ること

Page 16: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

V$LOGMNR_CONTENTS(Oracleマニュアルから一部抜粋)

列 データ型 説明

SCN NUMBER データベースに変更が加えられた時点のシステム変更番号(SCN)

TIMESTAMP DATE データベースに変更が加えられた時点のタイムスタンプ

SESSION# NUMBER 変更を行ったセッションのセッション番号

SERIAL# NUMBER 変更を行ったセッションのシリアル番号

USERNAME VARCHAR2(30) トランザクションを実行したユーザーの名前

OS_USERNAME VARCHAR2(4000) オペレーティング・システムのユーザー名

SQL_REDO VARCHAR2(4000) 再構成されたSQL文で、変更を実行した元のSQL文と同じ。

SQL_UNDO VARCHAR2(4000) 再構成されたSQL文で、変更を実行した元の文の結果を取り消すために使用できる

Page 17: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

LOGMiner検証実際にV$LOGMNR_CONTENTSを覗いてみる

Page 18: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

検証環境

OS:Oracle Enterprise Linux(Red Hat 4.1.2)

DB:Oracle11g(11.2.0.1)

検証スキーマ

SCOTT

テーブル

EMP

DEPT

SALGRADE

LOGMiner検証~1.検証環境

Page 19: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

LOGMiner検証~2.検証スキーマ

EMP

EMPNO NUMBER(4)

ENAME VARCHAR2(10)JOB VARCHAR2(9)MGR NUMBER(4)HIREDATE DATESAL NUMBER(7,2)COMM NUMBER(7,2)DEPTNO NUMBER(2)

DEPT

DEPTNO CHAR(5)

DNAME VARCHAR2(40)LOC CHAR(3)

SALGRADE

GRADE NUMBER(38,10)LOSAL NUMBER(38,10)HISAL NUMBER(38,10)

Page 20: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

DEPTNO DNAME LOC

10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON

50 SALES2 OSAKA

60 SALES3 TOKYO

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

7839 KING PRESIDENT 1981/11/17 5,000.00 10

7782 CLARK MANAGER 7839 1981/06/09 2,450.00 10

7934 MILLER CLERK 7782 1982/01/23 1,300.00 10

7566 JONES MANAGER 7839 1981/04/02 2,975.00 20

7788 SCOTT ANALYST 7566 1987/04/19 3,000.00 20

7876 ADAMS CLERK 7788 1987/05/23 1,100.00 20

7902 FORD ANALYST 7566 1981/12/03 3,000.00 20

7369 SMITH CLERK 7902 1980/12/17 800.00 20

7698 BLAKE MANAGER 7839 1981/05/01 2,850.00 30

7900 JAMES CLERK 7698 1981/12/03 950.00 30

7499 ALLEN SALESMAN 7698 1981/02/20 1,600.00 300.00 30

7521 WARD SALESMAN 7698 1981/02/22 1,250.00 500.00 30

7654 MARTIN SALESMAN 7698 1981/09/28 1,250.00 1,400.00 30

7844 TURNER SALESMAN 7698 1981/09/08 1,500.00 0.00 30

GRADE LOSAL HISAL

1 700 1,200

2 1,201 1,400

3 1,401 2,000

4 2,001 3,000

5 3,001 9,999

LOGMiner検証~3.検証データ

EMP表

SALGRADE表 DEPT表

Page 21: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

SUPPLEMENTAL LOGGINGの設定

まずは、現在の設定状態を確認

SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;

SUPPLEMENTAL_LOG_DATA_MIN------------------------------

NO

デフォルトでは、無効なので有効化

SQL> alter database add supplemental log data;

データベースが変更されました。

実際に変更されたか確認

SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;

SUPPLEMENTAL_LOG_DATA_MIN------------------------------

YES

LOGMiner検証~4.SUPPLEMENTAL LOGGING

Page 22: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

REDOログ切替

現在のREDOログの確認

SQL> SELECT L.GROUP#, F.MEMBER, L.STATUS

FROM V$LOG L, V$LOGFILE F WHERE L.GROUP#=F.GROUP#;

GROUP# MEMBER STATUS

-----------------------------------------------------------------------------------------------------------------------

1 /oradata/ora11g/redo1/redo01_1.log INACTIVE

1 /oradata/ora11g/redo2/redo01_2.log INACTIVE

2 /oradata/ora11g/redo1/redo02_1.log INACTIVE

2 /oradata/ora11g/redo2/redo02_2.log INACTIVE

3 /oradata/ora11g/redo1/redo03_1.log CURRENT

3 /oradata/ora11g/redo2/redo03_2.log CURRENT

REDOログの切替

SQL> ALTER SYSTEM SWITCH LOGFILE;

LOGMiner検証~5.REDOログの切替

Page 23: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

LOG Miner起動

分析対象REDOログを指定(今回は、オンラインREDOログ)

SQL> execute dbms_logmnr.add_logfile(logfilename => -

> '/home/ora102/oracle/oradata/ora102/redo01.log' -

> ,options => dbms_logmnr.new);

PL/SQLプロシージャが正常に完了しました。

LOG Miner起動

SQL> execute dbms_logmnr.start_logmnr(options => -

> dbms_logmnr.dict_from_online_catalog);

PL/SQLプロシージャが正常に完了しました。

LOGMiner検証~6.LOG Miner起動

Page 24: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

データ更新

EMPテーブル更新

SQL> DELETE FROM EMP WHERE EMPNO=7844;

SQL> ROLLBACK;

SQL> UPDATE EMP SET SAL=SAL*1.1 WHERE EMPNO=7844;

SQL> DELETE FROM EMP WHERE DEPTNO=20;

SQL> COMMIT;

SALGRADEテーブル更新

SQL> DELETE FROM SALGRADE WHERE GRADE=5;

SQL> ROLLBACK;

SQL> UPDATE SALGRADE SET HISAL=20000 WHERE GRADE=5;

SQL> COMMIT;

LOGMiner検証~7.データ更新処理

Page 25: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

SQL V$LOGMNR_CONTENTS / SQL_REDO

DELETE FROM EMP WHERE EMPNO=7844;

delete from "SCOTT"."EMP" where "EMPNO" = '7844' and "ENAME" = 'TURNER' and "JOB" = 'SALESMAN' and "MGR" = '7698' and "HIREDATE" = TO_DATE('81-09-08', 'RR-MM-DD') and "SAL" = '1500' and "COMM" = '0' and "DEPTNO" = '30' and ROWID = 'AAAD8yAAEAAA+k7AAN';

ROLLBACK;

insert into "SCOTT"."EMP“("EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO") values ('7844','TURNER','SALESMAN','7698',TO_DATE('81-09-08', 'RR-MM-DD'),'1500','0','30');

UPDATE EMP SET SAL=SAL*1.1WHERE EMPNO=7844;

update "SCOTT"."EMP" set "SAL" = '1650' where "SAL" = '1500' and ROWID = 'AAD8yAAEAAA+k7AAN';

DELETE FROM SALGRADE WHERE GRADE=5;

delete from "SCOTT"."SALGRADE" where "GRADE" = '5' and "LOSAL" = '3001' and "HISAL" = '9999‘and ROWID = 'AAAD7dAAEAAAADMAAI';

ROLLBACK;insert into "SCOTT"."SALGRADE"("GRADE","LOSAL","HISAL") values ('5','3001','9999');

UPDATE SALGRADE SET HISAL=20000 WHERE GRADE=5;

update "SCOTT"."SALGRADE" set "HISAL" = '20000‘where "HISAL" = '9999‘and ROWID = 'AAAD7dAAEAAAADMAAI';

V$LOGMNR_CONTENTSの内容

計算式は、固定値に変換されて生成

Page 26: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

SQL V$LOGMNR_CONTENTS / SQL_REDO

DELTE FROM EMP WHERE DEPTNO=20;

delete from "SCOTT"."EMP" where "EMPNO" = '7566' and “ENAME” = ‘JONES’ and "JOB" = 'MANAGER' and "MGR" = '7839' and "HIREDATE" = TO_DATE('81-04-02', 'RR-MM-DD')and "SAL" = '2975' and "COMM" IS NULL and "DEPTNO" = '20' and ROWID = 'AAAD8yAAEAAA+k7AAD';

delete from "SCOTT"."EMP" where "EMPNO" = '7788' and "ENAME" = 'SCOTT' and "JOB" = 'ANALYST' and "MGR" = '7566' and "HIREDATE" = TO_DATE('87-04-19', 'RR-MM-DD')and "SAL" = '3000' and "COMM" IS NULL and "DEPTNO" = '20' and ROWID = 'AAAD8yAAEAAA+k7AAE';delete from "SCOTT"."EMP" where "EMPNO" = '7876' and "ENAME" = 'ADAMS' and "JOB" = 'CLERK' and "MGR" = '7788' and "HIREDATE" = TO_DATE('87-05-23', 'RR-MM-DD') and "SAL" = '1100' and "COMM" IS NULL and "DEPTNO" = '20' and ROWID = 'AAAD8yAAEAAA+k7AAF';

delete from "SCOTT"."EMP" where "EMPNO" = '7902' and "ENAME" = 'FORD' and "JOB“ = 'ANALYST' and "MGR" = '7566' and "HIREDATE" = TO_DATE('81-12-03', 'RR-MM-DD')and "SAL" = '3000' and "COMM" IS NULL and "DEPTNO" = '20' and ROWID = 'AAAD8yAAEAAA+k7AAG';

delete from "SCOTT"."EMP" where "EMPNO" = '7369' and "ENAME" = 'SMITH' and "JOB" = 'CLERK' and "MGR" = '7902' and "HIREDATE" = TO_DATE('80-12-17', 'RR-MM-DD') and "SAL" = '800' and "COMM" IS NULL and "DEPTNO" = '20' and ROWID = 'AAAD8yAAEAAA+k7AAH';

V$LOGMNR_CONTENTSの内容

SQL文が5レコード更新すると各レコード毎に更新するSQLが生成される

Page 27: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

LOGMiner検証追加SUPPLEMENTAL LOGGING ?

Page 28: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

追加SUPPLEMENTAL LOGGINGの設定

最小サプリメンタル・ロギングは分析するログ・ファイルを生成する前に必

ず有効にしておかなければならない。

以下はマニュアルからの抜粋となりますが補助的なカラムが必要となる例を

示しています。

LOGMiner検証~8.追加SUPPLEMENTAL LOGGING

1.再構築されたSQL文を別のデータベースに適用するアプリケーションでは、行を一意に識別す

る列(主キーなど)で更新文を識別する必要があります。

ROWID はデータベースごとに異なり、他のデータベースでは意味を持たないため

V$LOGMNR_CONTENTS ビューによって返される再構築されたSQL に示されるROWID では識

別できません。

2.アプリケーションは、行変更の追跡をより効率的にするために、変更された列のみでなく、行

全体のビフォア・イメージを記録する必要がある場合があります。

Page 29: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

レプリケーションソフトウェア

Source DB Target DB

EMP

DEPT

SALGRADE

EMP

DEPT

SALGRADE

同期

Page 30: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

Attunity Replicate Architecture

SQL加工 SQL実行

Source DB Target DB

SQL Data

Capture

SQL DataApply

V$LOGMNR_CONTENTS

EMP

DEPT

SALGRADE

EMP

DEPT

SALGRADE

Page 31: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

追加SUPPLEMENTAL LOGGINGの設定

まずは、現在の設定状態を確認

SQL> SELECT LOG_GROUP_NAME, TABLE_NAME, ALWAYS,

LOG_GROUP_TYPE FROM USER_LOG_GROUPS;

レコードが選択されませんでした。

デフォルトでは、設定されていないなので有効化

SQL> ALTER TABLE EMP ADD SUPPLEMENTAL LOG DATA(PRIMARY KEY) COLUMNS;

表が変更されました。

SQL> ALTER TABLE DEPT ADD SUPPLEMENTAL LOG DATA(PRIMARY KEY) COLUMNS;

表が変更されました。

SQL> ALTER TABLE SALGRADE ADD SUPPLEMENTAL LOG DATA(ALL) COLUMNS;

表が変更されました。

LOGMiner検証~9.SUPPLEMENTAL LOGGING

Page 32: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

追加SUPPLEMENTAL LOGGINGの設定

実際に変更されたか確認

SQL> SELECT LOG_GROUP_NAME, TABLE_NAME, ALWAYS,

LOG_GROUP_TYPE FROM USER_LOG_GROUPS;

LOG_GROUP_NAME TABLE_NAME ALWAYS LOG_GROUP_TYPE

----------------------- --------------------- ----------- -------------------

SYS_C004204 EMP ALWAYS PRIMARY KEY LOGGING

SYS_C004205 DEPT ALWAYS PRIMARY KEY LOGGING

SYS_C004206 SALGRAD ALWAYS ALL COLUMN LOGGING

LOGMiner検証~9.SUPPLEMENTAL LOGGING

Page 33: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

SQL V$LOGMNR_CONTENTS / SQL_REDO

DELETE FROM EMP WHERE EMPNO=7844;

delete from "SCOTT"."EMP" where "EMPNO" = '7844' and "ENAME" = 'TURNER' and “JOB” = ‘SALESMAN’ and "MGR" = '7698' and "HIREDATE" = TO_DATE('81-09-08', 'RR-MM-DD') and "SAL" = '1500' and "COMM" = '0' and "DEPTNO" = '30' and ROWID = 'AAAD8yAAEAAA+k8AAN';

ROLLBACK;

insert into "SCOTT"."EMP"("EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO") values ('7844','TURNER','SALESMAN','7698',TO_DATE('81-09-08', 'RR-MM-DD'),'1500','0','30');

UPDATE EMP SET SAL=SAL*1.1 WHERE EMPNO=7844;

update "SCOTT"."EMP" set "SAL" = '1650' where "EMPNO" = '7844' and "SAL" = '1500' and ROWID = 'AAAD7cAAEAAAACUAAb';

DELETE FROM SALGRADE WHERE GRADE=5;

delete from "SCOTT"."SALGRADE" where "GRADE" = '5' and "LOSAL" = '3001' and "HISAL" = '9999' and ROWID = 'AAAD7dAAEAAAADMAAI';

ROLLBACK;insert into "SCOTT"."SALGRADE"("GRADE","LOSAL","HISAL") values ('5','3001','9999');

UPDATE SALGRADE SET HISAL=20000 WHERE GRADE=5;

update "SCOTT"."SALGRADE" set "HISAL" = '20000' where "GRADE" = '5' and "LOSAL"= '3001' and "HISAL" = '9999' and ROWID = 'AAAD7dAAEAAAADMAAI';

V$LOGMNR_CONTENTSの内容(追加設定後)

プライマリーキーまたは、全カラムの条件が付加されて生成

Page 34: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

V$LOGMNR_CONTENTSの内容(追加設定後)

プライマリーキーまたは、全カラムの条件が付加されて生成

SQL V$LOGMNR_CONTENTS / SQL_REDO

DELTE FROM EMP WHERE DEPTNO=20;

delete from "SCOTT"."EMP" where "EMPNO" = '7566' and “ENAME” = ‘JONES’ and "JOB" = 'MANAGER' and "MGR" = '7839' and "HIREDATE" = TO_DATE('81-04-02', 'RR-MM-DD')and "SAL" = '2975' and "COMM" IS NULL and "DEPTNO" = '20' and ROWID = 'AAAD8yAAEAAA+k7AAD';

delete from "SCOTT"."EMP" where "EMPNO" = '7788' and "ENAME" = 'SCOTT' and "JOB" = 'ANALYST' and "MGR" = '7566' and "HIREDATE" = TO_DATE('87-04-19', 'RR-MM-DD')and "SAL" = '3000' and "COMM" IS NULL and "DEPTNO" = '20' and ROWID = 'AAAD8yAAEAAA+k7AAE';delete from "SCOTT"."EMP" where "EMPNO" = '7876' and "ENAME" = 'ADAMS' and "JOB" = 'CLERK' and "MGR" = '7788' and "HIREDATE" = TO_DATE('87-05-23', 'RR-MM-DD') and "SAL" = '1100' and "COMM" IS NULL and "DEPTNO" = '20' and ROWID = 'AAAD8yAAEAAA+k7AAF';

delete from "SCOTT"."EMP" where "EMPNO" = '7902' and "ENAME" = 'FORD' and "JOB“ = 'ANALYST' and "MGR" = '7566' and "HIREDATE" = TO_DATE('81-12-03', 'RR-MM-DD')and "SAL" = '3000' and "COMM" IS NULL and "DEPTNO" = '20' and ROWID = 'AAAD8yAAEAAA+k7AAG';

delete from "SCOTT"."EMP" where "EMPNO" = '7369' and "ENAME" = 'SMITH' and "JOB" = 'CLERK' and "MGR" = '7902' and "HIREDATE" = TO_DATE('80-12-17', 'RR-MM-DD') and "SAL" = '800' and "COMM" IS NULL and "DEPTNO" = '20' and ROWID = 'AAAD8yAAEAAA+k7AAH';

Page 35: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

プライマリキーを持つ表への追加SUPPLEMENTAL LOGGINGの設定

LOGMiner検証~9.SUPPLEMENTAL LOGGING

UPDATE EMP SET SAL=SAL*1.1 WHERE EMPNO=7844;

update "SCOTT"."EMP" set "SAL" = '1650' where "SAL" = '1500' and ROWID = 'AAAD7cAAEAAAACUAAb';

update "SCOTT"."EMP" set "SAL" = '1650' where "EMPNO" = '7844' and "SAL" = '1500' and ROWID = 'AAAD7cAAEAAAACUAAb';

ADD SUPPLEMENTAL LOG DATA(PRIMARY KEY) COLUMNS

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA

Page 36: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

プライマリキーを持たない表への追加SUPPLEMENTAL LOGGINGの設定

LOGMiner検証~9.SUPPLEMENTAL LOGGING

UPDATE SALGRADE SET HISAL=20000 WHERE GRADE=5;

update "SCOTT"."SALGRADE" set "HISAL" = '20000‘where "HISAL" = '9999‘and ROWID = 'AAAD7dAAEAAAADMAAI';

update "SCOTT"."SALGRADE" set "HISAL" = '20000' where "GRADE" = '5' and "LOSAL"= '3001' and "HISAL" = '9999' and ROWID = 'AAAD7dAAEAAAADMAAI';

ADD SUPPLEMENTAL LOG DATA(ALL) COLUMNS

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA

Page 37: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

レプリケーションソフトは、LOGMinerを使ってるこれで実現出来る !?

Page 38: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

プライマリキーを持つ表への追加SUPPLEMENTAL LOGGINGの設定

LOGMiner検証~9.SUPPLEMENTAL LOGGING

UPDATE EMP SET SAL=SAL*1.1 WHERE EMPNO=7844;

update "SCOTT"."EMP" set "SAL" = '1650' where "SAL" = '1500' and ROWID = 'AAAD7cAAEAAAACUAAb';

update "SCOTT"."EMP" set "SAL" = '1650' where "EMPNO" = '7844' and "SAL" = '1500' and ROWID = 'AAAD7cAAEAAAACUAAb';

ADD SUPPLEMENTAL LOG DATA(PRIMARY KEY) COLUMNS

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA

Page 39: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

プライマリキーを持たない表への追加SUPPLEMENTAL LOGGINGの設定

LOGMiner検証~9.SUPPLEMENTAL LOGGING

UPDATE SALGRADE SET HISAL=20000 WHERE GRADE=5;

update "SCOTT"."SALGRADE" set "HISAL" = '20000‘where "HISAL" = '9999‘and ROWID = 'AAAD7dAAEAAAADMAAI';

update "SCOTT"."SALGRADE" set "HISAL" = '20000' where "GRADE" = '5' and "LOSAL"= '3001' and "HISAL" = '9999' and ROWID = 'AAAD7dAAEAAAADMAAI';

ADD SUPPLEMENTAL LOG DATA(ALL) COLUMNS

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA

Page 40: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

Attunity Replicate Architecture

SQL加工 SQL実行

Source DB Target DB

SQL Data

Capture

SQL DataApply

V$LOGMNR_CONTENTS

EMP

DEPT

SALGRADE

EMP

DEPT

SALGRADE

SQL

SQL

SQL

Page 41: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

複数セッションからSQLが実行

SESSION 10:00 10:01 10:02 10:03 10:04 10:05 10:06

INSERT INSERT UPDATE ROLLBACK DELETE INSERT COMMIT

INSERT UPDATE COMMIT

DELETE INSERT COMMIT DELETE INSERT COMMIT

Page 42: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

V$LOGMNR_CONTENTS(複数セッションからSQL実行した場合)

TIMESTAMP SESSION# SERIAL# USERNAME SQL_REDO

6/20 10:00 1 1 SCOTT INSERT

6/20 10:00 3 3 SCOTT DELETE

6/20 10:01 1 1 SCOTT INSERT

6/20 10:01 2 2 SCOTT INSERT

6/20 10:01 3 3 SCOTT INSERT

6/20 10:02 1 1 SCOTT UPDATE

6/20 10:02 3 3 SCOTT COMMIT

6/20 10:03 1 1 SCOTT ROLLBACK

6/20 10:03 2 2 SCOTT UPDATE

6/20 10:03 3 3 SCOTT DELETE

6/20 10:04 1 1 SCOTT DELETE

6/20 10:04 2 2 SCOTT COMMIT

6/20 10:04 3 3 SCOTT INSERT

6/20 10:05 1 1 SCOTT INSERT

6/20 10:05 3 3 SCOTT COMMIT

6/20 10:06 1 1 SCOTT COMMIT

Page 43: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

V$LOGMNR_CONTENTSで出力されている順序でそのままSQLを実

行する?

途中でROLLBACKされる場合もありレプリケーションターゲットにトラン

ザクションを混合してSQLを実行することは出来ない

複数セッションをターゲットデータベースに生成してSQLをセッシ

ョン毎に実行する?

大量のセッションがターゲットに生成されてしまう可能性が高い

ソースデータベースで実行されたSQLが複数のSQLとしてキャプチ

ャーされる

ターゲットデータベースに多数のSQLが実行されて高負荷、長時間処理を

要する可能性がある

V$LOGMNR_CONTENTSからレプリケーション

Page 44: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

Demonstration

Page 45: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

Attunity Replicate Architecture

Attunity ReplicateReplication ServerBulk Reader

CDC AgentStream Loader

Source DB Target DB

SQL Data

Capture

SQL DataApply

V$LOGMNR_CONTENTS

EMP

DEPT

SALGRADE

EMP

DEPT

SALGRADE

Page 46: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

V$LOGMNR_CONTENTS(複数セッションからSQL実行した場合)

TIMESTAMP SESSION# SERIAL# USERNAME SQL_REDO

6/20 10:00 1 1 SCOTT INSERT

6/20 10:01 1 1 SCOTT INSERT

6/20 10:02 1 1 SCOTT UPDATE

6/20 10:03 1 1 SCOTT ROLLBACK

6/20 10:00 3 3 SCOTT DELETE

6/20 10:01 3 3 SCOTT INSERT

6/20 10:02 3 3 SCOTT COMMIT

6/20 10:01 2 2 SCOTT INSERT

6/20 10:03 2 2 SCOTT UPDATE

6/20 10:04 2 2 SCOTT COMMIT

6/20 10:03 3 3 SCOTT DELETE

6/20 10:04 3 3 SCOTT INSERT

6/20 10:05 3 3 SCOTT COMMIT

6/20 10:04 1 1 SCOTT DELETE

6/20 10:05 1 1 SCOTT INSERT

6/20 10:06 1 1 SCOTT COMMIT

2

3

4

5

Page 47: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

LOGMinerを活用することでレプリケーションの構築も可能!?

Page 48: [B31] LOGMinerってレプリケーションソフトで使われているけどどうなってる? by Toshiya Morita

Oracle LOGMinerを活用してOracleの動作を確認してみよう