`

oracle移动表或移动索引

阅读更多
缘起一个表空间太大,删除数据后由于文件尾被用,无法resize,打算把所有表空间上的对象move到一个临时存储的表空间做整理。

move一个表到另外一个表空间时,索引不会跟着一起move,而且会失效。(LOB类型例外)move,我们分为:
*
普通表move
*
分区表
move
*LONG,LOB
大字段类型move来进行测试和说明。

索引的move,我们通过rebuild来实现

SQL> select * from v$version;

Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production
PL/SQL Release 9.2.0.6.0 - Production
CORE 9.2.0.6.0 Production
TNS for Solaris: Version 9.2.0.6.0 - Production
NLSRTL Version 9.2.0.6.0 - Production

一:move普通表、索引基本语法:

alter table tab_name move tablespace tbs_name;

move过的普通表,在不用到失效的索引的操作语句中,语句执行正常,但如果操作的语句用到了索引(主键当做唯一索引),则此时报告用到

的索引失效,语句执行失败,其他如外键,非空约束,缺省值等不会失效。

我们需要重新创建主键或索引,基本语法为:
alter index index_name rebuild;
alter index pk_name rebuild;

如果我们需要move索引,则使用rebuild语法:
alter index index_name rebuild tablespace tbs_name;
alter index pk_name rebuild tablespace tbs_name;

提示:查询表所具有的索引,可以使用user_indexes视图(索引和主键都在这个视图里可找到)。

二:move分区表及索引和普通表一样,索引会失效,区别的仅仅是语法而已。

分区基本语法:特别提醒注意,如果是单级分区,则使用关键字PARTITION,如果是多级分区,则使用SUBPARTITION替代PARTITION如果分区或分区索引比较大,可以使用并行moverebuildPARALLEL (DEGREE 2);如:
ALTER TABLE PART_ALARMTEXTDATA move SUBPARTITION ALARMTEXTDATA_050910_ATD01 TABLESPACE users PARALLEL (DEGREE 2);
ALTER INDEX GLOBAL_ALARMTEXTDATA REBUILD tablespace users PARALLEL (DEGREE 2);
ALTER INDEX LOCAL_ALARMTEXTDATA REBUILD SUBPARTITION ALARMTEXTDATA_050910_ATD01 TABLESPACE users PARALLEL (DEGREE 2);

移动表的某个分区:
================
ALTER TABLE tab_name move PARTITION partition_name TABLESPACE tbs_name;

重建全局索引:
================
ALTER INDEX global_index REBUILD;

ALTER INDEX global_index REBUILD tablespace tbs_name;

重建局部索引:
================
ALTER TABLE tab_name MODIFY PARTITION partition_name REBUILD UNUSABLE LOCAL INDEXES;

ALTER INDEX local_index_name REBUILD PARTITION partition_name TABLESPACE tbs_name;

提示:
USER_PART_TABLES
USER_IND_PARTITIONS
USER_IND_SUBPARTITIONS
USER_LOB_PARTITIONS
USER_LOB_SUBPARTITIONS
USER_PART_INDEXES
USER_PART_LOBS
可查询分区相关内容,同时,分区对象,也是segment,所以也可在dba_segments里查的到。

三:move LONG,LOB类型据说DBMS_REDEFINITION包可以提供一些方便,没用过。

I:LONG类型
long
类型不能通过MOVE来传输特别提示,尽量不要用LONG类型,特难管理。参考:http://www.anysql.net/2005/12/long_vs_lob.html
1
LONG不能使用insert into ... select ...等带select的模式。
create table t123 (id int,en long);

insert into t123(id,en) select * from t123;
报告错误,可以用pl/sql来帮助解决,如:
declare
cursor cur_t123 is select * from t123;
use_t123 cur_t123%rowtype;
begin

open cur_t123;
loop
fetch cur_t123 into use_t123;
exit when cur_t123%notfound;

insert into t123(id,en) values (use_t123.id,use_t123.en);

end loop;
close cur_t123;

end;
/

对有LONG类型字段的表的转移,可以使用:
create
新表的方法。
* create
一个新的表,存储在需要转移的表空间。
*
创建新的索引(使用tablespace 子句指定新的表空间)。
*
把数据转移过来方法一:用COPY的方法:
copy from bigboar/bigboar@bigboar_sid insert t123(id,en) using select id,en from t123;
方法二:PL/SQL(如上)方法三:直接就把LONG转换成CLOB类型
create table t321(id int,en clob) tablespace users;
insert into t321(id,en) select id,to_lob(en) from t123;
方法四:exp/imp
exp
bigboar/bigboar file=a.dat tables=t123
imp
bigboar/bigboar file=a.dat full=y IGNORE =y
* drop
掉旧表。
* rename
新表为旧表表名。

II:LOB类型在建立含有lob字段的表时,oracle会自动为lob字段建立两个单独的segment,一个用来存放数据(segment_type=LOBSEGMENT),另一个用来存

放索引(segment_type=LOBINDEX)。默认它们会存储在和表一起的表空间。我们对表MOVE时,LOG类型字段和该字段的索引不会跟着MOVE,必须要单独来进行MOVE,语法如下如:
alter table t321 move tablespace users;
alter table t321 move lob(en) store as (tablespace users);

分享到:
评论

相关推荐

    Oracle 分区表 分区索引

    ### Oracle 分区表与分区索引详解 #### 一、Oracle分区概述 在Oracle数据库中,分区技术是一种非常有效的管理大型表和索引的方法。通过将一个大的表或索引分成多个较小的部分(分区),可以显著提高查询性能,并...

    oracle移动数据文件

    当oracle数据库文件过大时,如何将其移动到其他存储设备。

    oracle全表扫描的3种优化手段

    当索引选择性较差或者表较小的时候,Oracle可能会选择全表扫描而非索引扫描。全表扫描虽然能够快速获取数据,但其也会带来较大的IO负载,尤其是在大型表中。因此,对全表扫描进行优化是提高数据库性能的重要方面之一...

    在oracle两个表空间之间移动表

    Oracle提供了多种方法来实现这一目标,包括直接移动表、重建索引以及使用导出导入的方式等。 #### 二、Oracle 8i及以后版本中的表移动方法 对于Oracle 8i及以后的版本,可以直接使用`ALTER TABLE`命令来移动表至...

    如何移动Oracle数据库的表空间

    例如,可以在Sun Solaris或Windows 2000平台上的Oracle数据库间移动表空间,但不能跨平台移动。 2. **字符集兼容**:源数据库和目标数据库的字符集及民族字符集必须相同。 3. **无同名表空间**:不能将表空间...

    oracle查询表碎片

    - 该查询只针对表`Q_ACCT_PROCESS`进行,如果需要查询多个表或所有表的情况,可以修改`WHERE`子句。 - 计算浪费空间时,采用了默认的PCTFREE值10%,如果实际环境中设置了不同的PCTFREE值,则需要调整对应的计算公式...

    关于oracle clob 类型字段重建索引SQL及修复用户表空间索引空间的存储过程

    总之,管理Oracle数据库中CLOB类型的字段和表空间索引空间是一项重要的任务,直接影响到系统的性能和稳定性。通过合理的索引重建和表空间管理,可以确保数据库高效运行,并减少不必要的维护成本。在实践中,应结合...

    Oracle 表空间 收缩

    -- 移动索引 SELECT DISTINCT 'ALTER INDEX ' || segment_name || ' REBUILD TABLESPACE REPORT_TS_BAK;' FROM dba_extents WHERE tablespace_name = 'REPORT_TS' AND block_id > 15728640; ``` 5. **执行脚本**...

    ORACLE重建索引总结

    Oracle数据库中的索引是提升查询性能...2. 重建索引有删除重建(不推荐)、`ALTER INDEX REBUILD`(推荐,尤其是在线模式)和`ALTER INDEX COALESCE`(节省空间,但不能移动索引)等方式,根据实际需求选择合适的方法。

    Oracle分区表培训

    总的来说,Oracle分区表培训内容涵盖了分区表的原理、创建、索引构建、元数据管理以及实际操作,这些都是提升数据库性能和管理效率的关键技能。通过深入学习和实践这些示例,员工将能够更好地应对大数据环境下的挑战...

    oracle查看表空间表信息

    ### Oracle 查看表空间表信息 在Oracle数据库管理中,了解如何查看表空间表信息是一项重要的技能。这有助于DBA(数据库管理员)或开发人员更好地理解数据库结构、优化查询性能以及进行必要的维护工作。 #### 标题...

    ORACLE修改表空间方法

    在Oracle数据库系统中,表空间(Tablespace)是存储数据对象如表、索引、视图等的基础单元。它管理数据库的数据存储空间。当需要扩展数据库容量或优化存储配置时,可能需要对表空间进行修改。这篇教程将详细介绍如何...

    oracle表空间变动注意事项

    3. **使用压缩技术**:启用行级或表级压缩,减少数据占用空间,提高I/O效率。 ### 四、最佳实践 1. **备份数据**:在进行任何表空间变动操作之前,务必先备份数据,以防万一出现问题时能够及时恢复。 2. **性能...

    移动通信领域超大型ORACLE数据库的设计

    表空间设计应遵循一定的原则,如大表和大索引单独分配tablespace,根据读写频率进行对象分组,表和索引分开放置,且存在于相同tablespace的表(或索引)的extent大小最好成倍数,以优化空间利用和减少碎片。...

    oracle查询表空间状态及迁移表.zip_oracle_oracle查询表空间状态_oracle迁移表_状态空间

    在Oracle数据库管理中,了解表空间(Tablespace)的状态至关重要,因为它们是存储数据库对象(如表、索引和视图)的主要容器。本篇将深入探讨如何查询Oracle数据库的表空间状态以及如何迁移表到其他表空间。首先,...

    oracle-临时表空间

    移动索引至其他表空间 同样地,可以先查询需要移动的索引: ```sql SELECT ii.index_name, ii.table_name, ii.tablespace_name, ii.temporary FROM user_indexes ii WHERE index_name LIKE '%EMP_PK%'; ``` 之后...

    SQL Server和Oracle中索引介绍

    然而,频繁更改的列或宽键(多列或大列组合)不适合建立聚集索引,因为这会导致大量的数据行移动和维护成本。 非聚集索引则独立于数据行的物理顺序,它们包含索引键值和指向数据行的指针。这允许数据按非聚集键的...

    Oracle lite 10g移动数据库使用指南

    Oracle Lite 10g是一款轻量级的数据库管理系统,专为移动设备和嵌入式系统设计,它提供了在分布式环境中高效存储和管理数据的能力。Oracle Lite 10g的使用涵盖了多个方面,包括安装配置、数据库创建、数据同步、安全...

    oracle修改表空间的全部步骤,包含bob,clob字段

    在Oracle数据库管理中,修改表空间是一项常见的维护任务,尤其当需要优化存储、解决空间不足或进行数据迁移时。本文将详细阐述如何在Oracle中修改表空间,包括处理BLOB和CLOB字段的具体步骤。 ### 修改表空间的背景...

Global site tag (gtag.js) - Google Analytics