ORACLE碎片整理二(轉載)
由於經常delete,insert,update資料,所以會在表空間留下一些碎片,造成查詢速度變慢,表空間得不到很好的利用。
為了消除碎片可以採用移動表的方法解決;就是一個表空間的所有表移動到一個乾淨的表空間中,由於對錶進行了移動,在表上建立的索引將
失效,所以在移動表的同時也要將表的索引重建。
可以採用如下一個儲存過程來完成表移動:
/*
功能:為資料表改變表空間,或在同一表空間下移動到不同的資料段。
說明:為了消除表空間的碎片,可以將一個表空間的表移動到另一個表空間,
並重建被移動表的索引。
作者:陳利, 2008年4月2日
*/
create or replace procedure p_remove_all_table
(source_space_name in varchar2,--源表空間
dest_space_name in varchar2)--目的表空間
as
sqlt varchar(200);
begin
--取所有非臨時表
for tab in (select table_name, tablespace_name from user_tables
where tablespace_name=source_space_name and temporary = 'N') loop
if dest_space_name is null then
--如果為null,則在本表空間下移動
sqlt := 'alter table ' || tab.table_name || ' move';
elsif upper(dest_space_name) <> tab.tablespace_name then
--如果目標表空間和現在的表空間不一致,則移動到新的表空間
sqlt := 'alter table ' || tab.table_name || ' move tablespace ' || dest_space_name;
else
--如果目標表空間和現在的表空間要同,則跳過
goto continue;
end if ;
begin
--dbms_output.put_line(sqlt);
EXECUTE IMMEDIATE sqlt;
exception when others then
--列印錯誤資訊
dbms_output.put_line('移動表'|| tab.table_name ||'失敗');
dbms_output.put_line('==錯誤資訊'||substr(sqlerrm, 1, 100));
goto continue;
end;
--重建索引
for idx in(select a.index_name,a.tablespace_name from user_indexes a
where a.table_name=tab.table_name ) loop
sqlt := 'alter index ' || idx.index_name || ' rebuild ';
/*if upper(idx_spacename) <> idx.tablespace_name then
sqlt := 'alter index ' || idx.index_name || ' rebuild tablespace ' || tablespace_name;
else
--原空間重建索引
sqlt := 'alter index ' || idx.index_name || ' rebuild ';
end if;*/
EXECUTE IMMEDIATE sqlt;
end loop;
<
null;
end loop;
end;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7478833/viewspace-450285/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE碎片整理一(轉載)Oracle
- Oracle資料庫碎片整理(轉)Oracle資料庫
- oracle 碎片整理Oracle
- oracle表碎片整理Oracle
- oracle碎片整理方法Oracle
- Oracle資料表碎片整理Oracle
- Oracle 資料庫碎片整理Oracle資料庫
- Oracle資料庫碎片整理Oracle資料庫
- Oracle資料庫表碎片整理Oracle資料庫
- ORACLE表空間的碎片整理Oracle
- Oracle 資料庫碎片整理(zt)Oracle資料庫
- Oracle 資料庫整理表碎片Oracle資料庫
- oracle表碎片以及整理(高水位線)Oracle
- MySQL表碎片整理MySql
- JAVA8 新特性(二)轉載整理Java
- 教你用Ghost整理系統磁碟碎片(轉)
- Oracle 整理表碎片、釋放表的空間Oracle
- MysqL碎片整理優化MySql優化
- mysql之 OPTIMIZE TABLE整理碎片MySql
- windows10系統磁碟碎片整理在哪 win10如何開啟磁碟碎片整理WindowsWin10
- 如何避免SHRINKDATABASE & SHRINKFILE 產生索引碎片(轉載)Database索引
- Oracle 表碎片Oracle
- oracle碎片清理Oracle
- 驗證Oracle 10g線上整理碎片索引是否失效過程Oracle 10g索引
- ORACLE正規表示式函式詳解--轉載整理Oracle函式
- 硬碟加速和磁碟碎片整理軟體硬碟
- MySQL碎片整理小節--例項演示MySql
- MySQL的 data_free,表碎片整理MySql
- MySQL資料碎片的整理和分析MySql
- ORACLE碎片問題Oracle
- Oracle 20c 新特性:Online SecureFiles Defragmentation 線上的 LOB 碎片整理OracleFragment
- 為什麼Linux不需要碎片整理?Linux
- win10系統無法整理磁碟碎片提示已由其它程式建立了計劃磁碟碎片整理的解決方法Win10
- [轉載]資料系統整理(一)
- MySQL垂直和水平切分-轉載整理MySql
- oracle毛病(二) (轉)Oracle
- 轉載oracle awrOracle
- Android ListVeiw控制元件(轉載整理)Android控制元件