环境 :10G,windows
客户的oracle数据库由于维护不规范,导致现在那几个datafile大小严重不一致,有的5G,有的500M,
客户想统一搞成2G大小的我目前见解:
500M的搞成2G容易,限制最大为2g就行,
但已经存在的5G的文件,是无法resize到2G的,因为里面没3G的空闲空间,请问应该怎么做啊?
客户的oracle数据库由于维护不规范,导致现在那几个datafile大小严重不一致,有的5G,有的500M,
客户想统一搞成2G大小的我目前见解:
500M的搞成2G容易,限制最大为2g就行,
但已经存在的5G的文件,是无法resize到2G的,因为里面没3G的空闲空间,请问应该怎么做啊?
1、创建一个新的表空间即可,这个表空间的每一个数据文件都是最大2G,而不是创建多个最大值为2G的表空间,不过所有数据文件大小不得小于以前的最大大小。2、当前系统的表、索引通过DBA_TABLES、DBA_INDEXES等等信息(分区表和分区索引另当别论),根据这些信息自动生成表空间移动的脚本,其实这部分脚本都可以通过一些手段自动生成,比如我喜欢用:
select 'ALTER TABLE '||t.table_name||' MOVE TABLESPACE DST_TABLESPACE;'
FROM USER_TABLES t
where t.temporary='N' and t.partitioned='NO';
生成将当前用户下“非临时表、非分区表”的移植到指定的目标表空间的脚本,这些内容打印结果,将其拷贝到记事本内部,就直接引用执行了。移动单个表使用ALTER TABLE table_name MOVE TABLESPACE tablespace_name;而索引将其提取DDL进行重建即可,当然主要是表,其余都是比较好说,移植了表一定重编译索引,呵呵。
分区表移动的语法:
ALTER TABLE table_name MOVE PARTITION partition_name TABLESPACE tablespace_name;
二级分区表的二级分区:
ALTER TABLE table_name MOVE SUBPARTITION sub_partition_name TABLESPACE tablespace_name;