8. 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
データ
ディクショナリ
データベース内のオブジェクト定義や
ユーザ情報などを管理するための内部表
この情報を使って、実行前に解析を行う。
9. 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’
10. 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
11. 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
A
B block
12. Oracle Database の処理(更新)
次の操作が行われた時を例にします。
(Public LAN)
SGA
A
B
A
B
1. セッション1でINSIGHTテーブルを
SELECT ・・ WHERE COL1=‘A’ FOR UPDATE
でデータ”A”をロックします
2. セッション2でINSIGHTテーブルを
SELECT ・・ WHERE COL1=‘B’ FOR UPDATE
でデータ”B”をロックします
3. セッション1でデータ”A”を”P”にUPDATE
UPDATE ・・ SET COL1=‘P’ WHERE COL1=‘A’
4. セッション2でデータ”B”を”Q”にUPDATE
UPDATE ・・ SET COL1=‘Q’ WHERE COL1=‘B’
5. セッション1でCOMMIT
6. セッション2でCOMMIT
TX
TX
P
Q
A
B
P
Q
block
UNDO
REDO
24. データ更新
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.データ更新処理
25. 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.1
WHERE 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の内容
計算式は、固定値に変換されて生成
26. 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が生成される
33. 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","CO
MM","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の内容(追加設定後)
プライマリーキーまたは、全カラムの条件が付加されて生成
34. 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';
35. プライマリキーを持つ表への追加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
36. プライマリキーを持たない表への追加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
38. プライマリキーを持つ表への追加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
39. プライマリキーを持たない表への追加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
40. Attunity Replicate Architecture
SQL加工 SQL実行
Source DB Target DB
SQL
Data
Capture
SQL
Data
Apply
V$LOGMNR_CONTENTS
EMP
DEPT
SALGRADE
EMP
DEPT
SALGRADE
SQL
SQL
SQL