insert into TAB12_2 values(1, rpad('4KB_', 4000, '*'), null) ;
insert into TAB12_2 values(2, rpad('4KB_', 4000, '*'), rpad('4KB_', 4000, '*')) ;
commit;


4000バイトの列を2つ持つテーブルに対してデータを挿入します。
一つ目のデータは4000バイトのデータを1件、二つ目は2件

SQL> analyze table TAB1_2 list chained rows ;

表が分析されました。

SQL> select HEAD_ROWID, COL1, substr(COL2, 1, 8), substr(COL3, 1, 8)
  2  from TAB1_2 a, CHAINED_ROWS b
  3  where a.ROWID = b.HEAD_ROWID ;

HEAD_ROWID               COL1 SUBSTR(COL2,1,8)                 SUBSTR(COL3,1,8)
------------------ ---------- -------------------------------- --------------------------------
AAATkbAAAAAAACUAAA          2 4KB_****                         4KB_****


analyse文で分析を実行します。
1件、行連鎖が発生しています。
先ほど、4000バイトのデータを2件挿入したため、4K+4K+αで8Kのブロックが溢れたためです。

SQL> update TAB1_3 set COL255='hoge' where COL001=0 ;

1行が更新されました。

SQL> commit;

コミットが完了しました。

SQL> analyze table TAB1_3 list chained rows ;

表が分析されました。

SQL> select TABLE_NAME, HEAD_ROWID from CHAINED_ROWS where TABLE_NAME='TAB1_3';

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

今度は列を256個持つテーブルです。
1列目のデータを更新します。
行移行は発生していません。

SQL> update TAB1_3 set COL256='hoge' where COL001=0 ;

1行が更新されました。

SQL> commit;

コミットが完了しました。

SQL> analyze table TAB1_3 list chained rows ;

表が分析されました。

SQL> select TABLE_NAME, HEAD_ROWID from CHAINED_ROWS where TABLE_NAME='TAB1_3';

TABLE_NAME                     HEAD_ROWID
------------------------------ ------------------
TAB1_3                         AAATkdAAAAAAACnAAA


今度は256列目のデータを更新してみます。
今度は行移行が発生したようです。
同じテーブルなのに更新する場所によって、行移行、行連鎖が発生します。
それは次回にでも