行链接与行迁移

行链接与行迁移这两种情况下,表中的行可能对一个数据块来说太大了,在第一中情况下,当第一次插入的时候,行对数据块来说太大了,这种情况下,oracle存储数据在一系列的数据块中(一个或多个)。行链接通常会在有大的行,就是行中包含long或long raw的列中,在这种情况下,行链接不可避免。在第二种情况下,原本在一个数据块中的行被更新,尺寸长了,同时数据块已经满了,这种情况下oracle迁移整行数据到一个新的数据块,oracle包含原来的行piece来指向新的数据块。迁移的数据行的rowid不变。

列出表中链接的行

通过使用analyze ...list chained rows可以查看链接和迁移的行,结果存放到chained_rows表中,创建chained_rows表需要运行utlchain.sql或utlchn1.sql。在运行完这个脚本后执行:

ANALYZE table emp_dept LIST CHAINED ROWS INTO CHAINED_ROWS
消除表迁移或表链接

查询chained_rows表

select * from chained_rows where table_name='ORDER_HIST';

这表列出了迁移或是链接的行

创建一个中间表与表有相同结构的来存放迁移和链接的行。

CREATE TABLE int_order_hist
   AS SELECT *
      FROM order_hist
      WHERE ROWID IN
         (SELECT HEAD_ROWID
            FROM CHAINED_ROWS
            WHERE TABLE_NAME = 'ORDER_HIST');

在表中删除迁移的或链接的行

DELETE FROM order_hist
   WHERE ROWID IN
      (SELECT HEAD_ROWID
         FROM CHAINED_ROWS
         WHERE TABLE_NAME = 'ORDER_HIST');

把临时表中的数据插回表

INSERT INTO order_hist
   SELECT *
   FROM int_order_hist;

删除中间表

drop table int_order_history

删除chained_rows中的内容

DELETE FROM CHAINED_ROWS
   WHERE TABLE_NAME = 'ORDER_HIST';

使用analyze再次分析。表链接的话可以通过增大数据块的大小来解决,通常包含long和大的char varchar2的列都无可避免的由链接。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值