1.创建一个新的表空间 newspaces (原来的表空间oldspaces)
2.从原来的表空间里面导出数据(test.dmp),然后在新的表空间里面导入之前导出的数据(test.dmp),选择从用户到用户的方式导入
3.执行下面这个SQL:
select 'alter table ' ||table_name || ' move tablespace 目标表空间名称;' from user_all_tables
将结果集导出,然后在导出的文件里面把查询拼接的SQL全部复制到plsql里面执行。
说明:至此表迁移以及完成,但由于表里面涉及到索引,所以我们还必须将索引页迁移过来,迁移索引之前,因为存在有的索引是大字段(LOB)类型的,还需要先处理大字段。
4.处理大字段
执行下面这个SQL,查询出存在大字段的表
select ui.table_name from user_indexes ui where ui.index_type='LOB'
接下来需要一个个点开查看存在大字段的表,找出使用大字段的列
把表的名称,和大字段的列名放到下面的SQL中执行(同一个表,可以把所有的列名都放在一个SQL里面执行,多个表,创建多条SQL来处理):
ALTER TABLE 表明 move tablespace govhrdb LOB(列名1,列名2) STORE AS (TABLESPACE ywj);
5.迁移基本类型的索引
执行下面的SQL
select 'alter index ' ||index_name || ' rebuild tablespace 目标表空间名称;' from user_indexes
将结果集导出,然后在导出的文件里面把查询拼接的SQL全部复制到plsql里面执行,如果遇到提示直接跳过。
6.数据导出
由于在迁移索引的时候,造成了对索引值的影响,如果使用普通的exp命令导出,下次导入的时候会报错,针对这个问题,使用下面的命令来导出数据,让数据保持一致性,再次导入的时候就不会存在错误了
导出命令:exp 用户名/密码@数据库名 file="" consistent=y
说明:只需要在迁移后第一次导出的时候使用上面命令导出即可,之后的数据导入,导出都不按正常的步骤来,不需要加consistent=y 如果遇到导入索引报错,参考分区数据导入报错问题解决方案