可迁移的表空间是为了将数据从一个DB移到另一个DB而定义的。迁移的基本概念是从数据字典中卸出表和表空间的定义,将该表空间下的数

据文件复制到目标服务器的目录下,再装入表和表空间的定义。这种方法可将大量的数据从一个DB移到另一个DB,是一种较快并且有效的方

法。表和索引都可以使用此方法进行迁移。

迁移时的限制:

1.源和目标DB必须是oracle8i以上的版本;

2.源和目标DB必须在相同的硬件和OS平台上;

3.源和目标DB的块尺寸应该一样;

4.目标DB中不能存在与源DB中要迁移的表空间相同名字的表空间;

5.要迁移的表空间应该是个自包含的表空间,即该表空间中的对象不能参考别的表空间中的对象。例如:表空间包含一个索引,该索引所

在的表也应该在该表空间中;

6.要迁移的表空间如果包含分区表,则所有分区都必须在该表空间下。

迁移的步骤:

1.检查表空间是否是自包含:

Execute sys.dbms_tts.transport_set_check(‘tablespace_name1,…’,true);

Select * from sys.transport_set_violations;

如果在执行完select后,显示“no rows selected”则表明为自包含表空间。

2.设置表空间为只读

Alter tablespace tablespace_name read only;

3.用EXPORT生成元数据卸出文件

exp file=xx.dmp transport_tablespace=y tablespaces=(tablespace_name,…) constraints=n

4.查询该表空间所对应的数据文件

select file_name,tablespace_name from dba_data_files where tablespace_name='tablespace_name’;

5.复制数据文件到目标DB的相应目录

6.修改表空间为可读写

Alter tablespace tablespace_name read write;

7.用IMPORT导入

imp file=xxx.dmp transport_tablespace=y tablespaces=tablespace_name datafiles=('/path') fromuser=('user_name') touser=

('user_name')

其中只有transport_tablespace和datafiles语句是必须提供的。如果没有指定tablespaces或tts_owners,则认为这些关键字的值与卸出文

件中的关键字相同。如没有指定fromuser和touser,则oracle将这些对象装入与源DB中拥有这些对象的用户名相同的用户中。目标DB中必须

已经存在同名用户。

8.将表空间改为可读写

Alter tablespace tablespace_name read write;