處理表的行遷移的問題
檢測遷移和連結
使用ANALYZE 命令檢測遷移和連結:
SQL> ANALYZE TABLE oe.orders COMPUTE STATISTICS;
Table Analyzed.
SQL> SELECT num_rows, avg_row_len, chain_cnt
2 FROM DBA_TABLES
3 WHERE table_name='ORDERS';
NUM_ROWS AVG_ROW_LEN CHAIN_CNT
---------- ----------- ----------
1171 67 83
使用Statspack/AWR 檢測遷移和連結:
Statistic Total per Second per Trans
table fetch continued row 34,964 0.7 0.2
先執行utlchain.sql指令碼來建立CHAINED_ROWS表
SQL> @D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlchain.sql
選擇已遷移的行
SQL> ANALYZE TABLE oe.orders LIST CHAINED ROWS;
Table analyzed.
SQL> SELECT owner_name, table_name, head_rowid
2 FROM chained_rows
3 WHERE table_name = 'ORDERS';
OWNER_NAME TABLE_NAME HEAD_ROWID
---------- ---------- ------------------
SALES ORDER_HIST AAAAluAAHAAAAA1AAA
SALES ORDER_HIST AAAAluAAHAAAAA1AAB
消除已遷移的行
匯出/匯入:
– 匯出表
– 刪除或截斷表
– 匯入表
MOVE 表命令:
– ALTER TABLE EMPLOYEES MOVE
重新定義聯機表
複製已遷移的行:
– 使用ANALYZE 查詢遷移的行
– 將遷移的行復制到新表
– 從原始表刪除遷移行
– 將行從新表複製到原始表
下面是採用MOVE表命令的方式
-- Created on 2012-5-24 by ADMINISTRATOR
declare
cursor lj is SELECT table_name, num_rows, avg_row_len, chain_cnt FROM DBA_TABLES a where a.owner='SSCP2'
and a.chain_cnt>0;
cursor sy(p_tablename in varchar2) is
select * from dba_indexes a where a.owner='SSCP2' and a.table_name=''||''||p_tablename||''||'';
sql_c varchar2(200):=null;
cl_flag number(2):=1;
begin
for r in lj loop
sql_c:=null;
sql_c:='alter table sscp2.'||r.table_name||' move';
begin
execute immediate ''||sql_c;
exception
when others then
dbms_output.put_line('執行表移動出錯的表'||r.table_name);
cl_flag:=0;
end ;
if cl_flag=1 then
for l in sy(r.table_name) loop
dbms_output.put_line(l.index_name);
sql_c:=null;
sql_c:='alter index sscp2.'||l.index_name||' rebuild';
begin
execute immediate ''||sql_c;
exception
when others then
dbms_output.put_line('重建出錯的索引'||l.index_name);
end ;
end loop;
sql_c:='analyze table sscp2.'||r.table_name||' compute statistics';
begin
execute immediate ''||sql_c;
exception
when others then
dbms_output.put_line('分析表出錯'||r.table_name);
end ;
end if;
end loop;
end;
SQL> SELECT table_name, num_rows, avg_row_len, chain_cnt FROM DBA_TABLES a where a.owner='SSCP2'
2 and a.chain_cnt>0;
TABLE_NAME NUM_ROWS AVG_ROW_LEN CHAIN_CNT
------------------------------ ---------- ----------- ----------
ABSB 2479525 114 3041
ABS8 29230869 149 195428
IDS2 453402 60 132
ICSW 78087 37 37
ICS1 759167 49 5521
IC12 729809 111 9
IC10 256770 170 62
ADS3 17472005 186 2221
ADS1 544695 130 53
ACSN 39821 90 4
ACS6 1940197 82 162
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-730801/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 對Oracle分割槽表進行表空間遷移並處理ORA-14511問題Oracle
- docker 遷移映象到其他機器執行報錯OCI 問題處理Docker
- X7一體機資料庫遷移問題處理資料庫
- 關於 Laravel 遷移遇到的問題Laravel
- 遷移學習中的BN問題遷移學習
- 自然語言處理中的遷移學習(下)自然語言處理遷移學習
- 自然語言處理中的遷移學習(上)自然語言處理遷移學習
- 遷移Qt專案的路徑問題QT
- 聊聊國產資料庫遷移中的表連線效能問題資料庫
- xtts遷移時ORA-353處理TTS
- 記錄一次XTTS遷移碰到的問題TTS
- .net異常處理的效能問題
- SpringBoot 2.6.7 處理跨域的問題Spring Boot跨域
- SpringBoot 2.7.0 處理跨域的問題Spring Boot跨域
- 【問題處理】MySQL忘記root密碼的處理辦法MySql密碼
- 處理若干行輸出的題目
- oracle系統表空間過大問題處理Oracle
- Jenkins執行遠端Windows批處理的許可權問題JenkinsWindows
- Oracle中表空間、表、索引的遷移Oracle索引
- 處理分頁的result型別問題型別
- 遷移ORACLE資料到MogDB/openGauss時的字符集問題Oracle
- 當前NLP遷移學習中的一些問題遷移學習
- golang json處理問題GolangJSON
- [git] git問題處理Git
- Laravel5.5執行表遷移命令出現表為空的解決方案Laravel
- MySQL的表碎片處理MySql
- ECharts圖座標軸文字換行問題處理Echarts
- 那些年,我們處理過的SQL問題SQL
- React TSLint中常見的問題及處理方法React
- playwright 在 Centos 的安裝和問題處理CentOS
- 使用 pytz 處理 Python 中的時區問題Python
- vue使用的props元件傳值問題處理Vue元件
- 遷移學習的基礎研究問題及適用場景遷移學習
- 雲端遷移過程中的技術問題和解決思路
- max_allowed_packet引起MySQL遷移丟失資料的問題MySql
- 記錄一次遷移環境 .env 出現的問題
- 對於數字或者字串有限的問題的處理字串
- 併發問題處理方式
- Linux 問題處理集錦Linux