概要
最小サプリメンタルロギングを設定する際の動作について検証した際のメモ
サプリメンタルロギングとは
22.10 サプリメンタル・ロギング
サプリメンタル・ロギングについて説明します。一般に、REDOログ・ファイルは、インスタンス・リカバリおよびメディア・リカバリに使用されます。
これらの操作に必要なデータは、REDOログ・ファイルに自動的に記録されます。
ただし、REDOベースのアプリケーションでは、追加の列をREDOログ・ファイルに記録する必要がある場合があります。
これらの追加の列を記録するプロセスは、サプリメンタル・ロギングと呼ばれます。
つまり、REDOログに、追加の情報を出力してくれる機能。
この追加ログを利用して、CDCツールのようなDB間でデータ連携するようなツールを使用する際に利用される機能。
最小サプリメンタルロギング
22.10.1.1 最小サプリメンタル・ロギング
最小サプリメンタル・ロギングは、LogMinerでDML変更と関連付けられたREDO操作を識別、グループ化およびマージするために必要な最小限の情報を記録します。
また、LogMiner(およびLogMinerテクノロジに基づいた他の製品)に、連鎖行や様々な記憶域構成(クラスタ表、索引構成表など)のサポートに十分な情報を確保します。
最小サプリメンタル・ロギングを有効にするには、次のSQL文を実行します。ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
検証項目
- 接続(session)のみの状態のセッション
- select実行中
- DDL
- 未コミットのトランザクションがある状態
- コミット済みのトランザクションがある状態
- コマンド実行中のトランザクション
検証
1. 接続(session)のみの状態のセッション
--session A SQL> conn /as sysdba 接続されました。 SQL> SELECT INST_ID,SID,SERIAL#,USERNAME,COMMAND,SCHEMANAME,SQL_ID,MACHINE,MODULE,PROGRAM FROM GV$SESSION WHERE STATUS='ACTIVE' AND SCHEMANAME != 'SYS'; レコードが選択されませんでした。 --session B SQL> conn scott/tiger@pdb1 接続されました。 SQL> select * from tab; TNAME TABTYPE CLUSTERID -------------------- --------------------------------------- ---------- DEPT TABLE BONUS TABLE SALGRADE TABLE DUMMY TABLE EXP TABLE EXP2 TABLE EMP_BK TABLE EMP TABLE EMP_AUTOTRACE TABLE BIG_DEPT TABLE BIG_EMP TABLE DEPT_UP TABLE EMP_UP TABLE EMP2 TABLE TAB1 TABLE T1 TABLE 16行が選択されました。 --session A SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ NO NO NO SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; データベースが変更されました。 経過: 00:00:00.71 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ YES NO NO 経過: 00:00:00.09 SQL> ALTER DATABASE DROP SUPPLEMENTAL LOG DATA; データベースが変更されました。 経過: 00:00:00.12 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ NO NO NO
2. select実行中
--session A SQL> show user ユーザーは"SYS"です。 SQL> SELECT INST_ID,SID,SERIAL#,USERNAME,COMMAND,SCHEMANAME,SQL_ID,MACHINE,MODULE,PROGRAM FROM GV$SESSION WHERE STATUS='ACTIVE' AND SCHEMANAME != 'SYS'; レコードが選択されませんでした。 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ NO NO NO --session B SQL> select count(*) from emp2; COUNT(*) ---------- 1009999 --session A SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; データベースが変更されました。 経過: 00:00:00.11 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ YES NO NO 経過: 00:00:00.01 SQL> ALTER DATABASE DROP SUPPLEMENTAL LOG DATA; データベースが変更されました。 経過: 00:00:00.10 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ NO NO NO
3. DDL
--session A SQL> show user ユーザーは"SYS"です。 SQL> SELECT INST_ID,SID,SERIAL#,USERNAME,COMMAND,SCHEMANAME,SQL_ID,MACHINE,MODULE,PROGRAM FROM GV$SESSION WHERE STATUS='ACTIVE' AND SCHEMANAME != 'SYS'; レコードが選択されませんでした。 経過: 00:00:00.04 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ NO NO NO 経過: 00:00:00.00 --session B SQL> alter table emp2 add(telno varchar(13),address1 varchar2(10)); 表が変更されました。 経過: 00:00:00.46 --session A SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; データベースが変更されました。 経過: 00:00:00.13 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ YES NO NO 経過: 00:00:00.01 SQL> ALTER DATABASE DROP SUPPLEMENTAL LOG DATA; データベースが変更されました。 経過: 00:00:00.17 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ NO NO NO
4. 未コミットのトランザクションがある状態
--session A SQL> SHOW USER ユーザーは"SYS"です。 SQL> SQL> SELECT INST_ID,SID,SERIAL#,USERNAME,COMMAND,SCHEMANAME,SQL_ID,MACHINE,MODULE,PROGRAM FROM GV$SESSION WHERE STATUS='ACTIVE' AND SCHEMANAME != 'SYS'; レコードが選択されませんでした。 経過: 00:00:00.05 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ NO NO NO 経過: 00:00:00.00 ▽session B CREATE TABLE EMP3 (EMPNO NUMBER(4) NOT NULL, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7, 2), COMM NUMBER(7, 2), DEPTNO NUMBER(2)); INSERT INTO EMP3 VALUES (7369, 'SMITH', 'CLERK', 7902, TO_DATE('17-DEC-1980', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 800, NULL, 20); INSERT INTO EMP3 VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('20-FEB-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1600, 300, 30); INSERT INTO EMP3 VALUES (7521, 'WARD', 'SALESMAN', 7698, TO_DATE('22-FEB-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1250, 500, 30); INSERT INTO EMP3 VALUES (7566, 'JONES', 'MANAGER', 7839, TO_DATE('2-APR-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 2975, NULL, 20); INSERT INTO EMP3 VALUES (7654, 'MARTIN', 'SALESMAN', 7698, TO_DATE('28-SEP-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1250, 1400, 30); INSERT INTO EMP3 VALUES (7698, 'BLAKE', 'MANAGER', 7839, TO_DATE('1-MAY-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 2850, NULL, 30); INSERT INTO EMP3 VALUES (7782, 'CLARK', 'MANAGER', 7839, TO_DATE('9-JUN-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 2450, NULL, 10); INSERT INTO EMP3 VALUES (7788, 'SCOTT', 'ANALYST', 7566, TO_DATE('09-DEC-1982', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 3000, NULL, 20); INSERT INTO EMP3 VALUES (7839, 'KING', 'PRESIDENT', NULL, TO_DATE('17-NOV-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 5000, NULL, 10); INSERT INTO EMP3 VALUES (7844, 'TURNER', 'SALESMAN', 7698, TO_DATE('8-SEP-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1500, 0, 30); INSERT INTO EMP3 VALUES (7876, 'ADAMS', 'CLERK', 7788, TO_DATE('12-JAN-1983', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1100, NULL, 20); INSERT INTO EMP3 VALUES (7900, 'JAMES', 'CLERK', 7698, TO_DATE('3-DEC-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 950, NULL, 30); INSERT INTO EMP3 VALUES (7902, 'FORD', 'ANALYST', 7566, TO_DATE('3-DEC-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 3000, NULL, 20); INSERT INTO EMP3 VALUES (7934, 'MILLER', 'CLERK', 7782, TO_DATE('23-JAN-1982', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1300, NULL, 10); 2021-09-30T16:33:01.884643+09:00 SUPPLEMENTAL LOG: Waiting for completion of transactions started at or before scn 43297944 (0x000000000294ac98) --session A SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; ###session BでCOMMITするまで返らない### --session B SQL> select * from v$transaction; ADDR XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBASQN UBAREC STATUS ---------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ------------------------------------------------ START_TIME START_SCNB START_SCNW START_UEXT START_UBAFIL START_UBABLK START_UBASQN START_UBAREC SES_ADDR FLAG ------------------------------------------------------------ ---------- ---------- ---------- ------------ ------------ ------------ ------------ ---------------- ---------- SPACE RECURSIVE NOUNDO PTX --------- --------- --------- --------- NAME ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- PRV_XIDUSN PRV_XIDSLT PRV_XIDSQN PTX_XIDUSN PTX_XIDSLT PTX_XIDSQN DSCN-B DSCN-W USED_UBLK USED_UREC LOG_IO PHY_IO CR_GET CR_CHANGE START_DA DSCN_BASE ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -------- ---------- DSCN_WRAP START_SCN DEPENDENT_SCN XID PRV_XID PTX_XID CON_ID ---------- ---------- ------------- ---------------- ---------------- ---------------- ---------- 000000007CEE5CF8 10 22 5009 11 18398 611 85 ACTIVE 06/03/21 16:36:38 43298576 0 13 11 18398 611 72 0000000085CA8EB0 7683 NO NO NO NO 0 0 0 0 0 0 0 0 1 14 99 5 4 0 21-06-03 0 0 43298576 0 0A00160091130000 0000000000000000 0000000000000000 3 経過: 00:00:00.13 SQL> select username from v$session where saddr in (select ses_addr from v$transaction); USERNAME ---------- SCOTT 経過: 00:00:00.02 SQL> commit; コミットが完了しました。 経過: 00:00:00.10 --session A データベースが変更されました。 経過: 00:01:26.04 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ YES NO NO 経過: 00:00:00.01 SQL> ALTER DATABASE DROP SUPPLEMENTAL LOG DATA; データベースが変更されました。 経過: 00:00:00.10 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ NO NO NO 経過: 00:00:00.01
5. コミット済みのトランザクションがある状態
--session A QL> SHOW USER ユーザーは"SYS"です。 SQL> SELECT INST_ID,SID,SERIAL#,USERNAME,COMMAND,SCHEMANAME,SQL_ID,MACHINE,MODULE,PROGRAM FROM GV$SESSION WHERE STATUS='ACTIVE' AND SCHEMANAME != 'SYS'; レコードが選択されませんでした。 経過: 00:00:00.04 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ NO NO NO 経過: 00:00:00.00 --session B SQL> drop table emp3 purge; 表が削除されました。 経過: 00:00:00.36 SQL> CREATE TABLE EMP3 (EMPNO NUMBER(4) NOT NULL, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7, 2), COMM NUMBER(7, 2), DEPTNO NUMBER(2)); 2 3 4 5 6 7 8 9 表が作成されました。 経過: 00:00:00.05 SQL> SQL> INSERT INTO EMP3 VALUES (7369, 'SMITH', 'CLERK', 7902, TO_DATE('17-DEC-1980', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 800, NULL, 20); INSERT INTO EMP3 VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('20-FEB-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1600, 300, 30); INSERT INTO EMP3 VALUES (7521, 'WARD', 'SALESMAN', 7698, TO_DATE('22-FEB-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1250, 500, 30); INSERT INTO EMP3 VALUES (7566, 'JONES', 'MANAGER', 7839, TO_DATE('2-APR-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 2975, NULL, 20); INSERT INTO EMP3 VALUES (7654, 'MARTIN', 'SALESMAN', 7698, TO_DATE('28-SEP-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1250, 1400, 30); INSERT INTO EMP3 VALUES (7698, 'BLAKE', 'MANAGER', 7839, TO_DATE('1-MAY-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 2850, NULL, 30); INSERT INTO EMP3 VALUES (7782, 'CLARK', 'MANAGER', 7839, TO_DATE('9-JUN-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 2450, NULL, 10); INSERT INTO EMP3 VALUES (7788, 'SCOTT', 'ANALYST', 7566, TO_DATE('09-DEC-1982', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 3000, NULL, 20); INSERT INTO EMP3 VALUES (7839, 'KING', 'PRESIDENT', NULL, TO_DATE('17-NOV-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 5000, NULL, 10); INSERT INTO EMP3 VALUES (7844, 'TURNER', 'SALESMAN', 7698, TO_DATE('8-SEP-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1500, 0, 30); INSERT INTO EMP3 VALUES (7876, 'ADAMS', 'CLERK', 7788, TO_DATE('12-JAN-1983', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1100, NULL, 20); INSERT INTO EMP3 VALUES (7900, 'JAMES', 'CLERK', 7698, TO_DATE('3-DEC-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 950, NULL, 30); INSERT INTO EMP3 VALUES (7902, 'FORD', 'ANALYST', 7566, TO_DATE('3-DEC-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 3000, NULL, 20); INSERT INTO EMP3 VALUES (7934, 'MILLER', 'CLERK', 7782, TO_DATE('23-JAN-1982', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1300, NULL, 10); 1行が作成されました。 経過: 00:00:00.06 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.01 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.01 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> SQL> commit; コミットが完了しました。 経過: 00:00:00.00 --session A SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; データベースが変更されました。 経過: 00:00:00.14 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ YES NO NO 経過: 00:00:00.01 SQL> ALTER DATABASE DROP SUPPLEMENTAL LOG DATA; データベースが変更されました。 経過: 00:00:00.12 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ NO NO NO 経過: 00:00:00.01
6. コマンド実行中のトランザクション
--session A SQL> SHOW USER ユーザーは"SYS"です。 SQL> SELECT INST_ID,SID,SERIAL#,USERNAME,COMMAND,SCHEMANAME,SQL_ID,MACHINE,MODULE,PROGRAM FROM GV$SESSION WHERE STATUS='ACTIVE' AND SCHEMANAME != 'SYS'; レコードが選択されませんでした。 経過: 00:00:00.03 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ NO NO NO 経過: 00:00:00.00 --session B SQL> drop table emp2 purge; create table emp2 as select * from emp where 0=1; alter table emp2 modify (empno number(10)); 表が削除されました。 経過: 00:00:00.39 SQL> 表が作成されました。 経過: 00:00:00.21 SQL> 表が変更されました。 経過: 00:00:00.10 --session A/session B SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; データベースが変更されました。 経過: 00:00:02.60 begin for i in 1..1000000 loop insert into emp2 (empno,ename,job,mgr,hiredate,sal,comm,deptno) values (i,DBMS_RANDOM.STRING('p',8),null,null,sysdate,null,null,null); commit; end loop; end; / --session A SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; データベースが変更されました。 経過: 00:00:02.60 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ YES NO NO 経過: 00:00:00.03 SQL> ALTER DATABASE DROP SUPPLEMENTAL LOG DATA; データベースが変更されました。 経過: 00:00:00.83 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ NO NO NO 経過: 00:00:00.03
7. 未コミットのトランザクションがある状態+トランザクション
--session A SQL> SHOW USER ユーザーは"SYS"です。 SQL> SQL> SELECT INST_ID,SID,SERIAL#,USERNAME,COMMAND,SCHEMANAME,SQL_ID,MACHINE,MODULE,PROGRAM FROM GV$SESSION WHERE STATUS='ACTIVE' AND SCHEMANAME != 'SYS'; レコードが選択されませんでした。 経過: 00:00:00.05 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ NO NO NO 経過: 00:00:00.00 --session B SQL> CREATE TABLE EMP3 (EMPNO NUMBER(4) NOT NULL, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7, 2), COMM NUMBER(7, 2), DEPTNO NUMBER(2)); 2 3 4 5 6 7 8 9 表が作成されました。 経過: 00:00:00.09 SQL> INSERT INTO EMP3 VALUES (7369, 'SMITH', 'CLERK', 7902, TO_DATE('17-DEC-1980', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 800, NULL, 20); INSERT INTO EMP3 VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('20-FEB-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1600, 300, 30); INSERT INTO EMP3 VALUES (7521, 'WARD', 'SALESMAN', 7698, TO_DATE('22-FEB-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1250, 500, 30); INSERT INTO EMP3 VALUES (7566, 'JONES', 'MANAGER', 7839, TO_DATE('2-APR-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 2975, NULL, 20); INSERT INTO EMP3 VALUES (7654, 'MARTIN', 'SALESMAN', 7698, TO_DATE('28-SEP-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1250, 1400, 30); INSERT INTO EMP3 VALUES (7698, 'BLAKE', 'MANAGER', 7839, TO_DATE('1-MAY-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 2850, NULL, 30); INSERT INTO EMP3 VALUES (7782, 'CLARK', 'MANAGER', 7839, TO_DATE('9-JUN-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 2450, NULL, 10); INSERT INTO EMP3 VALUES (7788, 'SCOTT', 'ANALYST', 7566, TO_DATE('09-DEC-1982', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 3000, NULL, 20); INSERT INTO EMP3 VALUES (7839, 'KING', 'PRESIDENT', NULL, TO_DATE('17-NOV-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 5000, NULL, 10); INSERT INTO EMP3 VALUES (7844, 'TURNER', 'SALESMAN', 7698, TO_DATE('8-SEP-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1500, 0, 30); INSERT INTO EMP3 VALUES (7876, 'ADAMS', 'CLERK', 7788, TO_DATE('12-JAN-1983', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1100, NULL, 20); INSERT INTO EMP3 VALUES (7900, 'JAMES', 'CLERK', 7698, TO_DATE('3-DEC-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 950, NULL, 30); INSERT INTO EMP3 VALUES (7902, 'FORD', 'ANALYST', 7566, TO_DATE('3-DEC-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 3000, NULL, 20); INSERT INTO EMP3 VALUES (7934, 'MILLER', 'CLERK', 7782, TO_DATE('23-JAN-1982', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1300, NULL, 10); 1行が作成されました。 経過: 00:00:00.07 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.01 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.01 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 2021-09-30T19:48:01.579421+09:00 SUPPLEMENTAL LOG: Waiting for completion of transactions started at or before scn 45408534 (0x0000000002b4e116) --session A SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; ###session BでCOMMITするまで返らない### ▽session C SQL> CREATE TABLE EMP4 (EMPNO NUMBER(4) NOT NULL, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7, 2), COMM NUMBER(7, 2), DEPTNO NUMBER(2)); 2 3 4 5 6 7 8 9 表が作成されました。 経過: 00:00:00.06 SQL> INSERT INTO EMP4 VALUES (7369, 'SMITH', 'CLERK', 7902, TO_DATE('17-DEC-1980', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 800, NULL, 20); INSERT INTO EMP4 VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('20-FEB-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1600, 300, 30); INSERT INTO EMP4 VALUES (7521, 'WARD', 'SALESMAN', 7698, TO_DATE('22-FEB-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1250, 500, 30); INSERT INTO EMP4 VALUES (7566, 'JONES', 'MANAGER', 7839, TO_DATE('2-APR-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 2975, NULL, 20); INSERT INTO EMP4 VALUES (7654, 'MARTIN', 'SALESMAN', 7698, TO_DATE('28-SEP-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1250, 1400, 30); INSERT INTO EMP4 VALUES (7698, 'BLAKE', 'MANAGER', 7839, TO_DATE('1-MAY-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 2850, NULL, 30); INSERT INTO EMP4 VALUES (7782, 'CLARK', 'MANAGER', 7839, TO_DATE('9-JUN-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 2450, NULL, 10); INSERT INTO EMP4 VALUES (7788, 'SCOTT', 'ANALYST', 7566, TO_DATE('09-DEC-1982', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 3000, NULL, 20); INSERT INTO EMP4 VALUES (7839, 'KING', 'PRESIDENT', NULL, TO_DATE('17-NOV-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 5000, NULL, 10); INSERT INTO EMP4 VALUES (7844, 'TURNER', 'SALESMAN', 7698, TO_DATE('8-SEP-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1500, 0, 30); INSERT INTO EMP4 VALUES (7876, 'ADAMS', 'CLERK', 7788, TO_DATE('12-JAN-1983', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1100, NULL, 20); INSERT INTO EMP4 VALUES (7900, 'JAMES', 'CLERK', 7698, TO_DATE('3-DEC-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 950, NULL, 30); INSERT INTO EMP4 VALUES (7902, 'FORD', 'ANALYST', 7566, TO_DATE('3-DEC-1981', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 3000, NULL, 20); INSERT INTO EMP4 VALUES (7934, 'MILLER', 'CLERK', 7782, TO_DATE('23-JAN-1982', 'DD-MON-YYYY','NLS_DATE_LANGUAGE=AMERICAN'), 1300, NULL, 10); 1行が作成されました。 経過: 00:00:00.06 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.01 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> 1行が作成されました。 経過: 00:00:00.00 SQL> commit; コミットが完了しました。 経過: 00:00:00.01 --session B SQL> select * from v$transaction; ADDR XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBASQN UBAREC STATUS ---------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ------------------------------------------------ START_TIME START_SCNB START_SCNW START_UEXT START_UBAFIL START_UBABLK START_UBASQN START_UBAREC SES_ADDR FLAG ------------------------------------------------------------ ---------- ---------- ---------- ------------ ------------ ------------ ------------ ---------------- ---------- SPACE RECURSIVE NOUNDO PTX --------- --------- --------- --------- NAME ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- PRV_XIDUSN PRV_XIDSLT PRV_XIDSQN PTX_XIDUSN PTX_XIDSLT PTX_XIDSQN DSCN-B DSCN-W USED_UBLK USED_UREC LOG_IO PHY_IO CR_GET CR_CHANGE START_DA DSCN_BASE ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- -------- ---------- DSCN_WRAP START_SCN DEPENDENT_SCN XID PRV_XID PTX_XID CON_ID ---------- ---------- ------------- ---------------- ---------------- ---------------- ---------- 000000007CF56A40 10 10 7949 11 19796 628 43 ACTIVE 06/03/21 19:47:52 45408525 0 15 11 19796 628 30 0000000085CA8EB0 7683 NO NO NO NO 0 0 0 0 0 0 0 0 1 14 99 5 4 0 21-06-03 0 0 45408525 0 0A000A000D1F0000 0000000000000000 0000000000000000 3 経過: 00:00:00.01 SQL> select username from v$session where saddr in (select ses_addr from v$transaction); USERNAME ---------- SCOTT 経過: 00:00:00.02 SQL> commit; コミットが完了しました。 経過: 00:00:00.10 --session A SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; データベースが変更されました。 経過: 00:04:08.58 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ YES NO NO 経過: 00:00:00.01 SQL> ALTER DATABASE DROP SUPPLEMENTAL LOG DATA; データベースが変更されました。 経過: 00:00:00.10 SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE; SUPPLEMENTAL_LOG_DATA_MIN SUPPLEMENTAL_LOG_DATA_PK SUPPLEMENTAL_LOG_DATA_UI ------------------------------ ------------------------------ ------------------------------ NO NO NO 経過: 00:00:00.01
結果サマリ
Case | Description |
---|---|
接続のみの状態のセッション | 即時実行可 |
select実行中 | 即時実行可 |
DDL | 即時実行可 |
未コミットのトランザクションがある状態 | トランザクションをcommit(rollback)するまで返却されない |
コミット済みのトランザクションがある状態 | 即時実行可 |
コマンド実行中のトランザクション | 即時実行可 |
未コミットトランザクション+トランザクション | トランザクションをcommit(rollback)するまで返却されない。追加でトランザクション/commitを実行した場合、即時で終了する |