日期:2014-05-16  浏览次数:20970 次

数据文件如何转移到另一个表空间中
建库者犯了错误,将一张大表的所有分区都放入一个表空间。按道理应分布在4个表空间上的。现在造成一个表空间过大,其他表空间数据几乎没有。
因为此表特别大800g,执行move分区表空间,数据进行转移时,几个小时没有动静。实在不知道何时完事,而且是否会失败。
现在想到两种方式:
1、将其他无用的表空间里的已经建立起来的20g大小的文件直接转移到目前这个表空间上,应该是可以吧,就是不知道怎么写。
2、是否可以move分区后以后的表空间时,指定其不进行动态转移,而是让这个表以后只往新的表空间里入呢?

此两种方式都比较冷僻,在网上没有找到。哪位大侠帮帮忙啊

------解决方案--------------------
你这个应该就是move的了
ALTER TABLE tab_name move PARTITION partition_name TABLESPACE tbs_name parallel 10;
数据量大的话耐心等等
------解决方案--------------------
移动ORACLE数据文件 

 
使用Alter Tablespace 移动数据文件:

如果希望移动的数据文件是某个表空间的一部分,而该表空间不是SYSTEM,SYSAUX,活动的撤消表空间或临时表空间,则可使用ALTER TABLESPACE方法移动表空间,其主要原因在于:除了将移动其数据文件的表空间外,所有用户在整个操作期间都可以使用数据库的剩余部分。

使用ALTER TABLESPACE移动一个或多个数据文件的步骤如下:

(1)使用具有ALTER TABLESPACE权限的账户,对表空间进行脱机处理。

(2)使用操作系统命令移动数据文件。

(3)使用ALTER TABLESPACE改变对数据库中数据文件的引用。

(4)将表空间返回到联机状态。

示例,将数据文件从一个错误的路径'/u02'移入正确的文件路径'/u02/oradata':

SQL> alter tablespace HS_USER_DATA offline;

Tablespace altered.
SQL> ! mv  /u02/HS_USR_DAT.ORA     /u02/oradata/HS_USR_DAT.ORA
或者

SQL> ! cp  /u02/HS_USR_DAT.ORA      /u02/oradata/HS_USR_DAT.ORA
SQL> alter tablespace HS_USER_DATA rename datafile '/u02/HS_USR_DAT.ORA' to '/u02/oradata/HS_USR_DAT.ORA';

Tablespace altered.

SQL>  alter tablespace HS_USER_DATA online;

Tablespace altered.

此种方法好处是不用重启数据库,同时在移动数据文件的过程中还不影响数据其它部分的使用。
移动数据文件方法
------解决方案--------------------
CREATE TABLE t(
  tid int,
  cname varchar2(20)
)
PARTITION BY RANGE (tid) INTERVAL (1000000)
STORE IN (part01,part02,part03,part04,part05,part06,part07,part08)
(partition bef_0 VALUES LESS THAN (0) TABLESPACE part02)
PARALLEL COMPRESS;