Oracle迁移表空间

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语句即可

时间: 2024-10-05 04:44:44

Oracle迁移表空间的相关文章

Oracle之表空间、索引、管理权限及角色

Oracle表空间 表空间是数据库的逻辑组成部分,从物理上讲,数据库数据存放在数据文件中 从逻辑上讲,数据库则是存放在表空间中,表空间由一个或多个数据文件组成 数据库的逻辑结构 oracle中逻辑结构包括表空间.段.区和块 说明一下数据库由表空间构成,而表空间又是由段构成,而段又是由区构成,而 区又是由oracle块构成的这样的一种结构,可以提高数据的效率 表空间用于从逻辑上组织数据库的数据.数据库逻辑上是由一个或是多个表空间组成的 通过表空间可以达到以下作用: 1.控制数据库占用的磁盘空间 2

Oracle tablespace 表空间创建和管理

1.表空间的概述 1. 表空间是数据库的逻辑组成部分. 2. 从物理上讲,数据库数据存放在数据文件中: 3. 从逻辑上讲,数据库是存放在表空间中,表空间由一个或者多个数据文件组成. 2.oracle的逻辑组成 1.oracle 的逻辑结构包含 表 空间 段 区 块 2.数据库是由表空间构成,表空间又是有段构成,段是由区构成,区是由 oracle的块构成,这样做是为了提高数据库的效率 3.作用 A.控制数据库占用的磁盘空间 B dba 可以将不同数据类型部署到不同的位置,这样 有利于i/0的性能,

Oracle Temp 表空间切换

一.TEMP表空间作用 临时表空间主要用途是在数据库进行排序运算.管理索引.访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理.当 oracle 里需要用到 sort 的时候, PGA 中 sort_area_size 大小不够时,将会把数据放入临时表空间里进行排序,同时如果有异常情况的话,也会被放入临时表空间 , 正常来说,在完成 Select 语句.create index 等一些使用 TEMP 表空间的排序操作后, Oracle 是会自动释放掉临时段的.注意这里的释放,仅仅是

Oracle建立表空间和用户

建立表空间和用户的步骤: 用户 建立:create user username identified by "password"; 授权:grant create session to username; grant create table to username; grant create tablespace to username; grant create view to username; 表空间 建立表空间(一般建N个存数据的表空间和一个索引空间): create tab

Oracle 创建表空间,用户,赋值(简装)

一, 1.Oracle 创建表空间,用户,赋值(简装) C:\Documents and Settings\Administrator>sqlplus /nologSQL> conn /as sysdba 2.删除用户drop user username cascade; 3.创建自增表表空间SQL> create tablespace 表空间 datafile 'E:\oracle\product\10.2.0\oradata\表空间.dbf' size 50m autoextend

Oracle的表空间和sqlplus

1.  表空间的概念 以前接触过的数据库都没有听到过表空间这个词,在前一段时间看到Oracle数据库的时候发现表空间无处不在.所以表空间在Oracle数据库中应该是一个很常用并且很重要的概念. 表空间是一种逻辑上的概念,逻辑上的存储单元.那么什么叫做逻辑上的存储单元呢.现在通过两张图来对比 表空间(table space)是Oracle数据库中最大的逻辑结构.从逻辑上说,Oracle数据库是由若干个表空间组成的.表空间与数据库的物理结构有着十分密切的关系,它与磁盘上若干个数据文件相对应. 从物理

第15章 oracle undo表空间管理

2015-10-23 目录 参考资料 [1] 林树泽.Oracle 11g R2 DBA操作指南[M].北京:清华大学出版社,2013 [2] Oracle undo 表空间管理 [3] undo表空间概述 [4] Oracle UNDO表空间的管理 [5] Oracle的UNDO表空间管理总结 [6] UNDO表空间的管理 [7] UNDO表空间的管理 [8] 监控和管理Oracle UNDO表空间的使用 [9] 谈谈undo表空间

基于Cordys C3版平台应用系统维护经验一则——Oracle数据库表空间满了

某日中午,有用户陆续反映系统问题,说流程送出异常.待办不消失.待办打不开等等.维护工程师开始分析问题,后台较为清晰的现象是流转日志记录插入数据失败,人工测试表插入成功,其它现象五花八门,没有规律,经过多位维护工程师的努力,终于由Oracle数据库管理工程师在16:01排除故障,系统基本恢复"正常". 故障原因是"应用系统Oracle数据库中Cordys用户所对应的表空间"满了,导致应用无法正常向数据库写入数据,造成业务数据不完整. 第二日,维护人员根据用户反馈,逐个

oracle之表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)

数据文件和日志文件是数据库中最重要的文件.它们是数据存储的地方.每个数据库至少有一个与之相关的数据文件,通常情况下不只一个,有很多.数据在数据文件中是如何组织的?要了解这些内容我们首先必须理解什么是表空间(tablespace).段(segment).区(extent).块(block),这些都是oracle数据库在数据文件中组织数据的基本单元.现在我们来理解这些概念. 块是数据存储的物理单位,也是数据文件中最基础的单位,数据直接存储在块上.是oracle空间分配的最小单位.oracle中的块大