甲骨文分区表的移动操作





一般来说,如果尝试对分区表进行移动操作,会得到如下的错误警告。
完成;alter table电荷移动表空间large_data;
alter table电荷移动表空间large_data
,,,,,,,,,,,*
行错误1:

,
这个时候可以使用如下的sql语句生成动态sql来做分区级别的移动操作。
比如对下面3个大表,如下的sql就可以生成成百上千条语句来完成分区级别的移动操作。

选择“alter table”| | table_name | |“移动分区”| | partition_name | |的表空间large_data; user_tab_partitions table_name在(“充电”,“备忘录”,“CHARGE_REL”)

如果表中含有lob字段,可能会碰到如下的问题

alter table备忘录xxxx移动分区表空间large_data;

,,,,,,,,,,*
行错误1:
ora - 01658:无法创建初始范围段表空间DATAS01

,碰到这种问题,一般有以下的几种原因,一种需要查看配额的情况,是否在对应的表空间中含有足够的配额
一种就是查看表空间的存储情况,是否有足够的空间。
如果空间有限,而且有的分区没有数据,可以开启延迟加载的方式。启用deferred_segment


expdp/impdp
使用数据泵是一种很好的选择,可以很方便的进行数据结构的转储到处,然后在导入的时候直接做remap_tablespace,这个功能是exp/imp所无法企及的。
推荐使用impdp的重新映射功能。

perl/壳
当然了,可以利用经验值+ imp +壳/perl的方式来解析转储文件
可以参考如下的博文。
http://blog.itpub.net/23718752/viewspace-1160404/
里面详细讨论了解析转储文件的一些细节。

dbms_metadata。get_ddl
如果源示玛可以随时访问的到,在条件允许的时候可以直接通过dbms_metadata来生成对应的创建语句,可以在此基础上进行表空间的重新手工映射。
这个过程看似简单,其实还要考虑很多的细节。分区的分区太多,很容易就超过最大字符长度了,需要自己把握控制。


交换分区
这种方式可能风险有些大,不过在某些情况下也是一种方案,可以通过交换分区的形式来完成表空间的重新映射。
使用普通表来和分区做一个交换。

不过以上的方法都不太适合高可用的情况,不过停机时间的时间也是需要考虑的,需要最大程度的减少操作时间,毕竟使用分区表的环境中,数据都是很大的,这个也需要大家斟酌。表空间的变更是目的,但是数据的重组就牵扯了数据的导出,导入之类的工作,大道至简,但是细节太多,还是需要多加注意。

: http://blog.itpub.net/23718752/viewspace-1266689/

甲骨文分区表的移动操作