oracle表空间迁移

时间:2022-08-22 06:35:05

1.创建一个新的表空间 newspaces (原来的表空间oldspaces)

2.从原来的表空间里面导出数据(test.dmp),然后在新的表空间里面导入之前导出的数据(test.dmp),选择从用户到用户的方式导入

oracle表空间迁移

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 如果遇到导入索引报错,参考分区数据导入报错问题解决方案