Oracle Chained Rows
Version 26ai

Library Note Morgan's Library Page Header
The best Oracle News for FY2026

Oracle Database 26ai will be available on generic Linux platforms in January and soon on AIX and Windows
Source Code {oracle_home}/rdbms/admin/utlchain.sql contains the DDL for creating the table CHAINED_ROWS with a ROWID data type column.

{oracle_home}/rdbms/admin/utlchn1.sql contains the DDL for creating the table CHAINED_ROWS with  UROWID data type column.

{oracle_home}/rdbms/admin/catmettypes.sql contains the DDL for creating multiple objects with a data type named CHNCNT column that contains the count of chained rows. Other references can be found in catost.sql, cdcore_str.sql, dbmsiotc.sql, dcore.sql, doptim.sql, and dpart.sql.
 
Manufacturing Chained Rows
Courtesy of Andy Hassall conn sys@pdbdev as sysdba

show parameter db_block_size

conn uwclass/uwclass

SQL> @?/rdbms/admin/utlchn1.sql

CREATE TABLE t (
col1  VARCHAR2(4000),
col2  VARCHAR2(4000));

INSERT INTO t VALUES ('x', '1');
INSERT INTO t VALUES ('xx', '2');

INSERT INTO t
(col1, col2)
VALUES
(LPAD('x',4096,'x'), LPAD('x',4096,'x'));

INSERT INTO t VALUES ('xxxx', '4');
INSERT INTO t VALUES ('xxxxx', '5');
COMMIT;

ANALYZE TABLE t LIST CHAINED ROWS INTO chained_rows;

set linesize 121
col table_name format a15
col head_rowid format a20

SELECT sys_op_rpb(rowid), table_name, head_rowid, analyze_timestamp
FROM chained_rows;

SELECT rowid, dbms_rowid.rowid_block_number(rowid) BN, sys_op_rpb(rowid), length(col1), length(col2)
FROM t;

SELECT table_name, chain_cnt
FROM user_tables
WHERE chain_cnt <> 0
ORDER BY 1;

ANALYZE TABLE t COMPUTE STATISTICS;

SELECT table_name, chain_cnt
FROM user_tables
WHERE chain_cnt <> 0
ORDER BY 1;

Related Topics
Analyze
DBMS_IOT
Tables
What's New In 21c
What's New In 26ai

Morgan's Library Page Footer
This site is maintained by Daniel Morgan. Last Updated: This site is protected by copyright and trademark laws under U.S. and International law. © 1998-2026 Daniel A. Morgan All Rights Reserved