`
desert3
  • 浏览: 2160388 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

oracle rebuild index and table move and rename

阅读更多
Oracle里大量删除记录后,表和索引里占用的数据块空间并没有释放。
table move可以释放已删除记录表占用的数据块空间,整理碎片。如果将表格用move方式整理碎片后,索引将失效,这时需要将索引重建。
重建索引可以释放已删除记录索引占用的数据块空间。重建索引不仅能增加索引表空间空闲空间大小,还能够提高查询性能。
--table move
alter table tbl move; 

--rebuild索引
alter index idx_tbl_col rebuild;
alter index idx_tbl_col rebuild online;

--rename
ALTER INDEX employee_idx RENAME TO employee_index_Newname;

普通情况下建立索引或者rebuild索引时,oracle会对基表加share锁,由于share锁和 row-X是不兼容的,也就是说,在建立索引期间,无法对基表进行DML操作。
是否加online,要看你的系统需求。因为不加online时rebuild会阻塞一切DML操作。
当我们对索引进行rebuild时,如果不加online选项,oracle则直接读取原索引的数据;当我们添加online选项时,oracle是直接扫描表中的数据
索引在重建时,查询仍然可以使用旧索引。实际上,oracle在rebuild时,在创建新索引过程中,并不会删除旧索引,直到新索引rebuild成功。
从这点可以知道rebuild比删除索引然后重建索引的一个好处是不会影响原有的SQL查询,但也正由于此,用rebuild方式建立索引需要相应表空间的空闲空间是删除重建方式的2倍。

可以通过如下的sql看到rebuild前后的索引空间大小
Select Segment_Name, Sum(bytes) / 1024 / 1024/1024 as Gsize
From User_Extents
Group By Segment_Name
order by Gsize desc


不能直接rebuild整个分区索引
对于非组合索引,需要rebuild每个分区(partition),不能直接rebuild整个索引
对于组合索引,需要rebuild每个子分区(subpartition),不能直接rebuild整个索引,也不能直接rebuild分区
使用下面的sql可以生成相应的rebuild语句,注意是否加上online
非组合索引:
select 'alter index ' || index_owner || '.' ||index_name ||' rebuild partition ' || PARTITION_NAME || ' nologging parallel ;'
from dba_ind_partitions
where index_owner = 'USER_NAME'
AND INDEX_NAME = 'idx_tbl_col'


组合索引:
select 'alter index ' || index_owner || '.' ||index_name ||' rebuild subpartition ' || subpartition_name || '  parallel ;'
from dba_ind_subpartitions where index_owner='&index_owner' and index_name='&index_name';


参考rebuild 分区索引
分享到:
评论

相关推荐

    SAP_very_useful_Oracle_SQL_cmd.zip_SAP_SAP rebuild index_Table

    本压缩包“SAP_very_useful_Oracle_SQL_cmd.zip_SAP_SAP rebuild index_Table”提供了与SAP系统相关的一系列Oracle数据库操作的实用工具,主要涉及表的管理和索引重建。 首先,解锁阴影实例(unlock shadow ...

    Oracle更改表空间(table、index、lob)

    ### Oracle更改表空间(table、index、lob) 在Oracle数据库管理中,更改表空间是一项重要的维护任务,尤其是在需要重新组织数据或优化存储时。本文将详细介绍如何通过SQL命令来更改表空间中的表(table)、索引...

    如何一次性利用生成的脚本rebuild所有table的index

    SELECT TABLE_NAME, INDEX_NAME FROM INFORMATION_SCHEMA.INDEXES WHERE TABLE_SCHEMA = 'your_schema' AND TABLE_NAME NOT IN ('sysdiagrams') OPEN indexCursor FETCH NEXT FROM indexCursor INTO @tableName, @...

    ORACLE重建索引总结

    1. 扫描方式差异:`REBUILD`通常使用`INDEX FAST FULL SCAN`或`TABLE FULL SCAN`,取决于统计信息的成本。`REBUILD ONLINE`则执行表扫描,两者均涉及排序操作。 2. `REBUILD`会阻塞DML操作,而`REBUILD ONLINE`不会...

    oracle表空间变动注意事项

    3. **移动表和索引到新表空间**:使用`ALTER TABLE MOVE`和`ALTER INDEX REBUILD`命令。 ### 三、表空间变动后可能出现的问题及解决方案 #### 问题1:索引失效 在移动表时,如果表上存在索引,可能会导致索引失效...

    index rebuild

    根据提供的信息,我们可以总结出以下关于“索引重建(Index Rebuild)”的相关知识点: ### 索引重建概述 **索引重建**是数据库管理中的一个重要操作,它涉及删除现有的索引并重新创建它。这个过程可以帮助优化...

    ORACLE的数据段压缩技术.doc

    ALTER TABLE <table_name> MOVE ... COMPRESS; ``` 例如,压缩名为 `T1` 的表: ```sql SQL> alter table T1 move compress; Table altered. ``` 对于分区表,由于其特殊的结构,不能直接对整个表执行 `MOVE ...

    oracle分区表分区索引.docx

    SELECT * FROM ALL_IND_PARTITIONS WHERE INDEX_OWNER='MMS' AND INDEX_NAME='I_MMDATA_PRODUCT_ID' AND (PARTITION_NAME LIKE 'P2018%' OR PARTITION_NAME LIKE 'P2019%'); ``` Oracle 分区表分区索引是提高数据...

    Oracle 11g详细操作

    - 重命名列:`ALTER TABLE table_name RENAME COLUMN old_name TO new_name;` - 添加约束:`ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (column_name);` - 删除约束:`ALTER TABLE ...

    Oracle表删除大量数据(千万)后查询变慢问题(原因分析)

    解决方法是重建索引,使用 alter index XXX rebuild 语句可以快速重建索引。 在解决问题之前,首先需要使用 delete 语句删除大量数据,然后使用 truncate table 语句清空表空间。接着,使用 analyze table 语句重新...

    如何重建索引

    - `REBUILD`命令使用`INDEX FAST FULL SCAN`(或`TABLE FULL SCAN`,具体取决于统计信息的成本)来读取原索引中的数据。 - `REBUILD ONLINE`则执行表扫描获取数据。 2. **性能考量:** - `REBUILD`方式耗时较长...

    oracle数据查询慢如何优化.txt

    SELECT 'ALTER INDEX ' || A.OWNER || '.' || A.INDEX_NAME || ' REBUILD NOLOGGING ONLINE;' FROM DBA_INDEXES A WHERE A.TABLE_NAME = 'WWFF' AND A.STATUS <> 'VALID' AND A.PARTITIONED <> 'YES'; ``` 2....

    oracle高水位.txt

    ALTER INDEX IDX_ID REBUILD ONLINE; ``` 在移动表之后,可能还需要对表上的索引进行相应的调整。这里使用的是`REBUILD ONLINE`方式,这种方式可以在不锁定表的情况下完成索引的重建工作,对于大型数据库来说是...

    Oracle高级详细资料

    通过使用DBMS_REDEFINITION、ALTER TABLE MOVE或ALTER INDEX REBUILD等方式,可以有效地整理和合并碎片,提高数据库的存储效率和查询速度。 再者,回滚段(ROLLBACK SEGMENTS)管理是Oracle事务处理的关键部分。...

    Oracle重构索引

    Oracle提供了多种方法来帮助我们重构索引,包括`DROP AND RECREATE`、`REBUILD`以及`REBUILD ONLINE`等方式。本文将详细介绍这些不同的索引重构方法,并通过实例展示它们的特点和适用场景。 #### 二、索引重构的...

    数据库优化以及操作说明

    @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationLevel1 = 5, @...

    Oracle事例

    alter table TABLE_NAME add constraint KEY_NAME primary key (TABLE_COLUMN) using index tablespace TABLE_SPACE_NAME; 2.增加外键 alter table TABLE_NAME add constraint FK_NAME foreign key (TABLE_COLUMN)...

    Oracle多个表空间合并成一个表空间,验证通过

    SELECT 'ALTER INDEX ' || index_name || ' REBUILD TABLESPACE HGZDZX_GZNZJY;' FROM user_indexes WHERE index_name NOT LIKE '%$$'; ``` ##### 第七步:确认合并结果 最后,执行以下 SQL 语句来确认所有表空间...

    查询SQL Server Index上次Rebuild时间的方法

    在SQL Server中,索引重建(Rebuild)是一项重要的维护任务,它有助于优化查询性能,通过重新组织数据页和消除碎片。然而,系统并不直接记录每个索引的最后一次重建时间。当你需要确认某个索引何时进行了重建时,...

    最全的oracle常用命令大全.txt

    where c.owner = upper('&table_owner') and c.table_name = upper('&table_name') and c.owner = cc.owner and c.constraint_name = cc.constraint_name order by cc.position; 8、存储函数和过程 查看函数...

Global site tag (gtag.js) - Google Analytics