博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle迁移表空间
阅读量:5046 次
发布时间:2019-06-12

本文共 2462 字,大约阅读时间需要 8 分钟。

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_NAME
from (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) cnt
from (SELECT cols.table_name,
cols.column_name,
cols.data_type,
dd.TABLESPACE_NAME
FROM all_tab_cols cols
left join all_tables dd
on dd.table_name = cols.table_name
WHERE cols.table_name in
(select ui.table_name
from user_indexes ui
where ui.index_type = 'LOB')
and data_type like '%LOB')) a
where level = cnt
start with rn = 1
connect by prior table_name = table_name
and 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语句即可

转载于:https://www.cnblogs.com/yuanliye/p/3986188.html

你可能感兴趣的文章
获取手机验证码修改
查看>>
数据库连接
查看>>
python中数据的变量和字符串的常用使用方法
查看>>
等价类划分进阶篇
查看>>
delphi.指针.PChar
查看>>
Objective - C基础: 第四天 - 10.SEL类型的基本认识
查看>>
java 字符串转json,json转对象等等...
查看>>
极客前端部分题目收集【索引】
查看>>
第四天 selenium的安装及使用
查看>>
关于js的设计模式(简单工厂模式,构造函数模式,原型模式,混合模式,动态模式)...
查看>>
KMPnext数组循环节理解 HDU1358
查看>>
android调试debug快捷键
查看>>
【读书笔记】《HTTP权威指南》:Web Hosting
查看>>
Inoodb 存储引擎
查看>>
数据结构之查找算法总结笔记
查看>>
Linux内核OOM机制的详细分析
查看>>
Android TextView加上阴影效果
查看>>
Requests库的基本使用
查看>>
C#:System.Array简单使用
查看>>
C#inSSIDer强大的wifi无线热点信号扫描器源码
查看>>