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);
也可以直接使用下面语句进行查询自动生成:
select 'alter table ' || tsb.table_name || ' move tablespace ' ||
tsb.TABLESPACE_NAME || ' LOB(' || tsb.col ||') STORE AS (TABLESPACE 迁移到的表空间名字);'from (select table_name,ltrim(sys_connect_by_path(column_name, ','), ',') as col,TABLESPACE_NAMEfrom (select table_name,column_name,TABLESPACE_NAME,row_number() over(partition by table_name order by column_name) rn,count(*) over(partition by table_name) cntfrom (SELECT cols.table_name,cols.column_name,cols.data_type,dd.TABLESPACE_NAMEFROM all_tab_cols colsleft join all_tables ddon dd.table_name = cols.table_nameWHERE cols.table_name in(select ui.table_namefrom user_indexes uiwhere ui.index_type = 'LOB')and data_type like '%LOB')) awhere level = cntstart with rn = 1connect by prior table_name = table_nameand prior rn = rn - 1) tsb;5.迁移基本类型的索引
执行下面的SQL
select 'alter index ' ||index_name || ' rebuild tablespace 目标表空间名称;' from user_indexes
将结果集导出,然后在导出的文件里面把查询拼接的SQL全部复制到plsql里面执行,如果遇到提示直接跳过。
6.数据导出
由于在迁移索引的时候,造成了对索引值的影响,如果使用普通的exp命令导出,下次导入的时候会报错,针对这个问题,使用下面的命令来导出数据,让数据保持一致性,再次导入的时候就不会存在错误了
导出命令:exp 用户名/密码@数据库名 file=导出文件路径 consistent=y
consistent=y表示保持文件的完整性
说明:只需要在迁移后第一次导出的时候使用上面命令导出即可,之后的数据导入,导出都不按正常的步骤来,不需要加consistent=y 如果遇到导入索引报错,参考分区数据导入报错问题解决方案
oracle导入数据的时候,有时会出现分区数据不能导入的问题,以及在迁移表空间的时候可能存在的索引状态为'UNUSABLE'的隐患,下面为解决方案:
--查询出所有的状态为UNUSABLE的索引,并生成出来SQL
select 'alter index ' || index_name || ' rebuild ;' from user_indexes where status='UNUSABLE';--例子: alter index PK_UN_ORGANIZATION_FUNCTION rebuild ; alter index PK_OA_NOTICE rebuild ; alter index AK_KEY_2_CORE_MES rebuild ; alter index PK_CORE_MESSAGE_POOL rebuild ; alter index AK_KEY_2_CORE_LOG rebuild ; alter index PK_CORE_LOG rebuild ; alter index PK_UN_ORGANIZATION_BASIS rebuild ; alter index PK_OA_ORGCONFIG rebuild ;执行查询产生的SQL语句即可