行链接和行迁移案例
2015-03-31 11:55
405 查看
行链接和行迁移案例两则之间的区别:
行链接是指一个行存储在多个块中的情况,因为一个该行的长度超过了一个块的可用空间大小。(Insert)
行迁移是指一个数据行不适合放入当前块而被重新定位到另一个块,但在原始块中保留一个指针,原始块中的指针是必需的,因为索引的rowid项仍然指向原始位置.(update)
行链接通常与行的长度和oracle数据库块中的大小有关,而行迁移通常是当一个更新操作的长度增加且又要保持该行在同一块中,而该块又缺少可用空间时产生的问题,oracle在决定行连接之前先试图进行行迁移。
行连接
1、建立表
04:50:36 SQL> show user;
USER is "SCOTT"
04:50:39 SQL> create table t_row_chaining (x char(2000), y char(2000), z char(2000), q char(2000));
Table created.
04:50:51 SQL> insert into t_row_chaining values('x','y','z','q');
1 row created.
04:51:05 SQL> commit;
Commit complete.
2、执行脚本,建立行链接和行迁移视图
04:51:10 SQL> @?/rdbms/admin/utlchain.sql
Table created.
04:51:32 SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
DEPT TABLE
EMP TABLE
BONUS TABLE
SALGRADE TABLE
EMP1 TABLE
EMP5 TABLE
SALES TABLE
SYS_IOT_OVER_12021 TABLE
SALES_INFO TABLE
DEPT_EMP_CLU CLUSTER
DEPARTMENT TABLE 1
EMPLOYEE TABLE 2
TMP1 TABLE
TMP2 TABLE
T_ROW_CHAINING TABLE
CHAINED_ROWS TABLE
16 rows selected.
04:51:40 SQL> desc CHAINED_ROWS
Name Null? Type
----------------------------------------------------------------------------------- -------- --------------------------------------------------------
OWNER_NAME VARCHAR2(30)
TABLE_NAME VARCHAR2(30)
CLUSTER_NAME VARCHAR2(30)
PARTITION_NAME VARCHAR2(30)
SUBPARTITION_NAME VARCHAR2(30)
HEAD_ROWID ROWID
ANALYZE_TIMESTAMP
3、分析表的行链接信息 DATE
04:51:50 SQL> ANALYZE TABLE t_row_chaining LIST CHAINED ROWS;
Table analyzed.
04:52:09 SQL>
04:52:09 SQL> select OWNER_NAME,TABLE_NAME,HEAD_ROWID,ANALYZE_TIMESTAMP from chained_rows;
OWNER_NAME TABLE_NAME HEAD_ROWID ANALYZE_T
------------------------------ ------------------------------ ------------------ ---------
SCOTT T_ROW_CHAINING AAAC9KAAEAAAAB3AAA 25-MAR-12
-------由于插入的记录长度超过了block的free space ,发生行链接
行迁移
1、建立表
04:53:06 SQL> create table t_row_migrating (x varchar2(2000), y varchar2(2000), z varchar2(2000), q varchar2(2000));
Table created.
04:54:01 SQL> insert into t_row_migrating values ('x','y','z','q');
1 row created.
04:54:12 SQL> commit;
Commit complete.
04:54:20 SQL> delete chained_rows;
1 row deleted.
04:54:42 SQL> ANALYZE TABLE t_row_migrating LIST CHAINED ROWS;
Table analyzed.
04:54:54 SQL> select OWNER_NAME,TABLE_NAME,HEAD_ROWID,ANALYZE_TIMESTAMP from chained_rows;
no rows selected
2、对表做update 实验
04:55:03 SQL> update t_row_migrating set (x,y,z,q)=(select * from t_row_chaining);
1 row updated.
04:57:17 SQL> commit;
Commit complete.
04:57:33 SQL> ANALYZE TABLE t_row_migrating LIST CHAINED ROWS;
Table analyzed.
04:57:41 SQL> select OWNER_NAME,TABLE_NAME,HEAD_ROWID,ANALYZE_TIMESTAMP from chained_rows;
OWNER_NAME TABLE_NAME HEAD_ROWID ANALYZE_T
------------------------------ ------------------------------ ------------------ ---------
SCOTT T_ROW_MIGRATING AAAC9MAAEAAAACGAAA 25-MAR-12
04:57:53 SQL>
no rows selected
04:55:03 SQL>
----------更新后的记录变长,在block free space 无法存放,发生行迁移
本文出自 “天涯客的blog” 博客,请务必保留此出处http://tiany.blog.51cto.com/513694/816715
行链接是指一个行存储在多个块中的情况,因为一个该行的长度超过了一个块的可用空间大小。(Insert)
行迁移是指一个数据行不适合放入当前块而被重新定位到另一个块,但在原始块中保留一个指针,原始块中的指针是必需的,因为索引的rowid项仍然指向原始位置.(update)
行链接通常与行的长度和oracle数据库块中的大小有关,而行迁移通常是当一个更新操作的长度增加且又要保持该行在同一块中,而该块又缺少可用空间时产生的问题,oracle在决定行连接之前先试图进行行迁移。
行连接
1、建立表
04:50:36 SQL> show user;
USER is "SCOTT"
04:50:39 SQL> create table t_row_chaining (x char(2000), y char(2000), z char(2000), q char(2000));
Table created.
04:50:51 SQL> insert into t_row_chaining values('x','y','z','q');
1 row created.
04:51:05 SQL> commit;
Commit complete.
2、执行脚本,建立行链接和行迁移视图
04:51:10 SQL> @?/rdbms/admin/utlchain.sql
Table created.
04:51:32 SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
DEPT TABLE
EMP TABLE
BONUS TABLE
SALGRADE TABLE
EMP1 TABLE
EMP5 TABLE
SALES TABLE
SYS_IOT_OVER_12021 TABLE
SALES_INFO TABLE
DEPT_EMP_CLU CLUSTER
DEPARTMENT TABLE 1
EMPLOYEE TABLE 2
TMP1 TABLE
TMP2 TABLE
T_ROW_CHAINING TABLE
CHAINED_ROWS TABLE
16 rows selected.
04:51:40 SQL> desc CHAINED_ROWS
Name Null? Type
----------------------------------------------------------------------------------- -------- --------------------------------------------------------
OWNER_NAME VARCHAR2(30)
TABLE_NAME VARCHAR2(30)
CLUSTER_NAME VARCHAR2(30)
PARTITION_NAME VARCHAR2(30)
SUBPARTITION_NAME VARCHAR2(30)
HEAD_ROWID ROWID
ANALYZE_TIMESTAMP
3、分析表的行链接信息 DATE
04:51:50 SQL> ANALYZE TABLE t_row_chaining LIST CHAINED ROWS;
Table analyzed.
04:52:09 SQL>
04:52:09 SQL> select OWNER_NAME,TABLE_NAME,HEAD_ROWID,ANALYZE_TIMESTAMP from chained_rows;
OWNER_NAME TABLE_NAME HEAD_ROWID ANALYZE_T
------------------------------ ------------------------------ ------------------ ---------
SCOTT T_ROW_CHAINING AAAC9KAAEAAAAB3AAA 25-MAR-12
-------由于插入的记录长度超过了block的free space ,发生行链接
行迁移
1、建立表
04:53:06 SQL> create table t_row_migrating (x varchar2(2000), y varchar2(2000), z varchar2(2000), q varchar2(2000));
Table created.
04:54:01 SQL> insert into t_row_migrating values ('x','y','z','q');
1 row created.
04:54:12 SQL> commit;
Commit complete.
04:54:20 SQL> delete chained_rows;
1 row deleted.
04:54:42 SQL> ANALYZE TABLE t_row_migrating LIST CHAINED ROWS;
Table analyzed.
04:54:54 SQL> select OWNER_NAME,TABLE_NAME,HEAD_ROWID,ANALYZE_TIMESTAMP from chained_rows;
no rows selected
2、对表做update 实验
04:55:03 SQL> update t_row_migrating set (x,y,z,q)=(select * from t_row_chaining);
1 row updated.
04:57:17 SQL> commit;
Commit complete.
04:57:33 SQL> ANALYZE TABLE t_row_migrating LIST CHAINED ROWS;
Table analyzed.
04:57:41 SQL> select OWNER_NAME,TABLE_NAME,HEAD_ROWID,ANALYZE_TIMESTAMP from chained_rows;
OWNER_NAME TABLE_NAME HEAD_ROWID ANALYZE_T
------------------------------ ------------------------------ ------------------ ---------
SCOTT T_ROW_MIGRATING AAAC9MAAEAAAACGAAA 25-MAR-12
04:57:53 SQL>
no rows selected
04:55:03 SQL>
----------更新后的记录变长,在block free space 无法存放,发生行迁移
本文出自 “天涯客的blog” 博客,请务必保留此出处http://tiany.blog.51cto.com/513694/816715
相关文章推荐
- 行链接和行迁移案例
- 关于Oracle数据库中行迁移/行链接的问题
- keras系列︱迁移学习:利用InceptionV3进行fine-tuning及预测、完美案例(五)
- 【数据库】【oracle】行迁移和行链接(row chaining or row migration)
- 检查行链接和行迁移的方法
- PHP链接SQLserver数据库案例,涉及所有php和sqlserver链接失败的问题(原创)
- 行迁移与行链接
- 分布式系统迁移Docker云案例分享
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- Oracle 行迁移 & 行链接的检测与消除
- Laravel学习笔记(五)数据库 数据库迁移案例2——创建数据结构,数据表,修改数据结构
- 行链接和行迁移
- 数据库迁移必备--批量迁移链接服务器
- 大型Oracle数据库异构平台迁移案例(杭州电信)
- 大容量Oracle数据库跨平台迁移案例(杭州电信3.5T帐务系统 IBM-HP)
- SQL性能优化案例:分享一次系统迁移获得的经验
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- C# 图片加水印、防盗链接图片 案例
- 服务器(AD,DHCP,DNS,File)迁移案例
- 关于Oracle数据库中行迁移/行链接的问题