Oracle資料庫關於錶行連線和行遷移處理方案
如果資料庫中存在行連結,行遷移,將會嚴重影響資料庫的效能。因此,我們應該想辦法消除行連結和行遷移。這樣的操作是否影響表的正常操作(比如現在使用者正在使用這些表,我們做行連結,行遷移操作)。
STEP1:首先建立資料字典表CHAINED_ROWS
資料字典表CHAINED_ROWS用於接收ANALYZE...LIST CHAINED ROWS的資料,由指令碼UTLCHAIN.SQL或指令碼UTLCHN1.SQL建立。
STEP2:對錶進行分析
ANALYZE TABLE t_bs_hotal LIST CHAINED ROWS;
執行這個命令將會把分析的結果寫入表CHAINED_ROWS中
STEP3:查出連結行或者遷移行
SELECT *
FROM CHAINED_ROWS
WHERE TABLE_NAME = t_bs_hotal;
OWNER_NAME TABLE_NAME CLUST... HEAD_ROWID TIMESTAMP
---------- ---------- -----... ------------------ ---------
TT t_bs_hotal... AAAAluAAHAAAAA1AAA 23-MAR-2011
TT t_bs_hotal... AAAAluAAHAAAAA1AAB 23-MAR-2008
從資料字典表中CHAINED_ROWS查詢出連結行或者遷移行。該語句將列出表t_bs_hotal中存在的連結行或者遷移行。如果表中存在連結行或者遷移行,請執行下面的步驟;如果該語句沒有任何輸出,說明該表不存在連結行或者遷移行。
STEP4:建立中間表
CREATE TABLE int_t_bs_hotal
AS SELECT *
FROM t_bs_hotal
WHERE ROWID IN
(SELECT HEAD_ROWID
FROM CHAINED_ROWS
WHERE TABLE_NAME = t_bs_hotal);
中間表int_t_bs_hotal用於臨時存放連結行或者遷移行。該表的結構必須和表t_bs_hotal(本例中的表)的結構完全相同。執行完上面的命令,連結行或者遷移行已經被插入到中間表int_t_bs_hotal中。
STEP5:從已經存在的表t_bs_hotal中刪除連結行和遷移行
DELETE FROM t_bs_hotal
WHERE ROWID IN
(SELECT HEAD_ROWID
FROM CHAINED_ROWS
WHERE TABLE_NAME = t_bs_hotal);
STEP6:把中間表中的資料插入已經存在的表t_bs_hotal中
INSERT INTO t_bs_hotal
SELECT *
FROM int_t_bs_hotal;
這一步使原來的資料行被重新插入,從而消除行遷移。
STEP7:連結行的消除
如果CHAINED_ROWS中存在連結行,只能通過提高資料塊(Data Block)的大小,使一行資料能夠被容納在一個資料塊中。但是,如果列的型別是LONG,或者是寬度比較大的CHAR,VARCHAR2,行連結將無法避免的。
STEP1:首先建立資料字典表CHAINED_ROWS
資料字典表CHAINED_ROWS用於接收ANALYZE...LIST CHAINED ROWS的資料,由指令碼UTLCHAIN.SQL或指令碼UTLCHN1.SQL建立。
STEP2:對錶進行分析
ANALYZE TABLE t_bs_hotal LIST CHAINED ROWS;
執行這個命令將會把分析的結果寫入表CHAINED_ROWS中
STEP3:查出連結行或者遷移行
SELECT *
FROM CHAINED_ROWS
WHERE TABLE_NAME = t_bs_hotal;
OWNER_NAME TABLE_NAME CLUST... HEAD_ROWID TIMESTAMP
---------- ---------- -----... ------------------ ---------
TT t_bs_hotal... AAAAluAAHAAAAA1AAA 23-MAR-2011
TT t_bs_hotal... AAAAluAAHAAAAA1AAB 23-MAR-2008
從資料字典表中CHAINED_ROWS查詢出連結行或者遷移行。該語句將列出表t_bs_hotal中存在的連結行或者遷移行。如果表中存在連結行或者遷移行,請執行下面的步驟;如果該語句沒有任何輸出,說明該表不存在連結行或者遷移行。
STEP4:建立中間表
CREATE TABLE int_t_bs_hotal
AS SELECT *
FROM t_bs_hotal
WHERE ROWID IN
(SELECT HEAD_ROWID
FROM CHAINED_ROWS
WHERE TABLE_NAME = t_bs_hotal);
中間表int_t_bs_hotal用於臨時存放連結行或者遷移行。該表的結構必須和表t_bs_hotal(本例中的表)的結構完全相同。執行完上面的命令,連結行或者遷移行已經被插入到中間表int_t_bs_hotal中。
STEP5:從已經存在的表t_bs_hotal中刪除連結行和遷移行
DELETE FROM t_bs_hotal
WHERE ROWID IN
(SELECT HEAD_ROWID
FROM CHAINED_ROWS
WHERE TABLE_NAME = t_bs_hotal);
STEP6:把中間表中的資料插入已經存在的表t_bs_hotal中
INSERT INTO t_bs_hotal
SELECT *
FROM int_t_bs_hotal;
這一步使原來的資料行被重新插入,從而消除行遷移。
STEP7:連結行的消除
如果CHAINED_ROWS中存在連結行,只能通過提高資料塊(Data Block)的大小,使一行資料能夠被容納在一個資料塊中。但是,如果列的型別是LONG,或者是寬度比較大的CHAR,VARCHAR2,行連結將無法避免的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25533574/viewspace-691271/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料庫中資料行遷移與行連結Oracle資料庫
- 模擬Oracle行遷移和行連結Oracle
- Oracle資料庫(DataGuard)遷移方案(上)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(中)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(下)Oracle資料庫
- Oracle資料庫(資料泵)遷移方案(上)Oracle資料庫
- Oracle資料庫(資料泵)遷移方案(下)Oracle資料庫
- Oracle 行遷移 & 行連結的檢測與消除Oracle
- 杉巖資料銀行Documentum遷移方案
- 備忘錄:關於.net程式連線Oracle資料庫Oracle資料庫
- Oracle impdp遷移資料後主鍵丟失故障處理Oracle
- OGG資料庫遷移方案(一)資料庫
- OGG資料庫遷移方案(二)資料庫
- OGG資料庫遷移方案(三)資料庫
- OGG資料庫遷移方案(四)資料庫
- 資料庫邏輯遷移方案資料庫
- 資料庫連線異常處理思路資料庫
- JDBC連線批量處理資料入庫JDBC
- 無外網Oracle資料庫遷移Oracle資料庫
- 異構資料庫資料遷移 oracle to mysql之oracle sqlloader和mysql load data資料庫OracleMySql
- Oracle資料庫關於SQL的執行計劃(轉)Oracle資料庫SQL
- 行連線的處理方式指引
- 從 Oracle 到 TiDB,全鏈路資料遷移平臺核心能力和杭州銀行遷移實踐OracleTiDB
- tomcat連線處理機制和執行緒模型Tomcat執行緒模型
- Python 連線 Oracle資料庫PythonOracle資料庫
- 關於資料庫事務併發的理解和處理資料庫
- X7一體機資料庫遷移問題處理資料庫
- Kettle資料庫資源庫連線執行示例資料庫
- 關於禪道的資料遷移
- Oracle 19c adg全庫遷移資料Oracle
- 資料庫遷移資料庫
- 使用instantclient連線oracle資料庫clientOracle資料庫
- [Navicate]Navicate連線Oracle資料庫Oracle資料庫
- Python 連線mysql資料庫進行操作PythonMySql資料庫
- Fastdfs資料遷移方案AST
- 亞馬遜宣佈永久關閉 Oracle 資料庫:已完成遷移亞馬遜Oracle資料庫
- 資料庫平滑遷移方案與實踐分享資料庫
- 聊聊國產資料庫遷移中的表連線效能問題資料庫
- EF Core 小技巧:遷移已經應用到資料庫,如何進行遷移回退操作?資料庫