行鏈結與行遷移

2021-06-24 18:12:02 字數 1349 閱讀 8816

行鏈結與行遷移這兩種情況下,表中的行可能對乙個資料塊來說太大了,在第一中情況下,當第一次插入的時候,行對資料塊來說太大了,這種情況下,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的列都無可避免的由鏈結。

行鏈結與行遷移

行遷移 行遷移一般產生在更新操作中,當更新操作導致行長增加了,而block的自由空間已經沒有,這時oracle把整行記錄遷移到乙個新的block中,並在原來block中存放新block的鏈結,行遷移產生。2.行鏈結與行遷移的檢測 1 建立chained rows表 利用oracle資料庫自身提供的指...

行遷移和行鏈結

oracle會將整行的資料遷移到乙個新的資料塊上,而將該行原先的空間只放乙個指標,指向該行的新的位置,並且該行原先空間的剩餘空間不再被資料庫使用,這些剩餘的空間我們將其稱之為空洞,這就是產生表碎片的主要原因,表碎片基本上也是不可避免的,但是我們可以將其降到乙個我們可以接受的程度。注意,即使發生了行遷...

mysql有行遷移嗎 行連線 行遷移

1.檢測行遷移和行連線 select value from v sysstat where name table fetch continued row 上面反回的是由語句訪問的鏈結行的數量。2.獲得表的鏈結行的數目 分析表 analyze table owner.table name comput...