`
byebyegov5qq
  • 浏览: 1218167 次
文章分类
社区版块
存档分类
最新评论

使用交换表空间和传输表空间来实现大表的迁移——exchange partition

 
阅读更多

一个案例,把一张分区表倒到另外一个数据库,db和os之类环境都是一样的,数据量比较大,不加索引就有120G左右
综合考虑对数据库性能的影响,加上分区表的哥哥分区都是单独的表空间,所以决定使用交换表空间和传输表空间的方式来实现表的迁移。
源库:
1:建立中转表空间
create tablespace TS_USER_CLIENT_LOG_2 logging
datafile '/opt/oracle/oradata/xxx/ts_user_client_log_2.ora' size 5m
reuse autoextend
on next 512k maxsize 16000m extent management local
segment space management auto
uniform size 1m ;


2:建立中转表,表和索引都建立到中转表空间上
-- Create table
create table USER_CLIENT_LOG_TR2
(
USER_ID NUMBER(18) not null,
LOGIN_IP NUMBER(10) not null,
LOGIN_TIME DATE default sysdate not null,
LAST_TIME DATE,
TOTAL_COUNT NUMBER(10)
)
tablespace TS_USER_CLIENT_LOG_2;
create index IDX_USER_CLIENT_LOG_TR2 on USER_CLIENT_LOG_TR2 (LOGIN_TIME)
tablespace TS_USER_CLIENT_LOG_2;
create index IDX_USER_CLIENT_LOG_T2_UID on USER_CLIENT_LOG_TR2 (USER_ID)
tablespace TS_USER_CLIENT_LOG_2;

3:交换表空间
--alter table USER_CLIENT_LOG exchange partition P_USER_CLIENT_LOG_1
--with table USER_CLIENT_LOG_TR1 INCLUDING INDEXES without validation update global indexes;

alter table USER_CLIENT_LOG exchange partition P_USER_CLIENT_LOG_2
with table USER_CLIENT_LOG_TR2 INCLUDING INDEXES without validation;
这里的一些参数注意事项
a:Including indexes: 表明将Local indexes 一同exchange出来。此选项需要用来与之exchange的table 有建立一样的Index.

b:Without validation: with validation是验证是否rows被正确的Mapping. Without validation则是跳过此验证,在这种情况下,exchange 只做data dictionary的更新(这也是exchange快的原因,因为它根本上只是在data dictionary里将segments的归属作了变更)。这里有一个例外,如果在exchange中的table有PK或者unique constraint,是会强制作with validation,不管有没有指定without validation,这样做是为了保证constraint的完整性。如果要避免这个问题,可以在exchange之前先disable相关的constraint,在完成后再enable。

c:Update global indexes:使用此选项可避免Partitioned table的global index在exchange后被mark unusable。用这种方式在功能上不会影响到正常业务,但其过程中产生的额外loading会对业务性能的表现产生影响。如果不使用此选项,则必须在exchange后对global index进行rebuild。不过这个选项只会update被exchange出Partition的table的global index。如上的例子,表A的global index是不会被update,所以如果接下来exchange出的Partition的资料还要用的话,依然需要rebuild,但这已经不影响正常业务。

d:Drop 被exchange出来的Partition所在的Tablespace之前,注意把segments从物理上移动到归档Table A所在的Tablespace。上文提到了exchange只是在data dictionary里对segments的归属作了改变。

e:Exchange后,空的Partition可以直接DROP,无须带update global index。

4:设置传输的表空间为只读
ALTER TABLESPACE TS_USER_CLIENT_LOG2 read ONLY;

5:校验表空间是否可以传输
begin

dbms_tts.transport_set_check('TS_USER_CLIENT_LOG1', TRUE , TRUE);
end;

SELECT * FROM TRANSPORT_SET_VIOLATIONS;
如果表空间集满足自包含检查,则视图返回空记录。
不满足自包含验证,SELECT语句返回违反的信息,你可以根据其提示进行修正。

6:使用expdp传输表空间
expdp system/system DUMPFILE=TS_USER_CLIENT_LOG2.dmp LOGFILE=TS_USER_CLIENT_LOG2.log DIRECTORY=DATA_PUMP_DIR TRANSPORT_TABLESPACES=TS_USER_CLIENT_LOG2

7:拷贝expdp文件和表空间数据文件到目标库
scp /opt/oracle/pumpdata/TS_USER_CLIENT_LOG2.dmp oracle@10.55.4.45:/opt/oracle/expdp_dmp
scp /opt/oracle/oradata/pps/ts_user_client_log2.ora oracle@10.55.4.45:/opt/oracle/oradata/xxx

目标库
8:使用impdp导入传输来的表空间
impdp system/system DUMPFILE=TS_USER_CLIENT_LOG2.dmp DIRECTORY=EXPDP_DIR TRANSPORT_DATAFILES=/opt/oracle/oradata/xxx/ts_user_client_log2.ora
但是如下错误:
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/INDEX
ORA-39083: Object type INDEX failed to create with error:
ORA-01422: exact fetch returns more than requested number of rows
Failing sql is:
CREATE INDEX "IDX_USER_CLIENT_LOG_TR2" ON "USER_CLIENT_LOG_TR2" ("LOGIN_TIME") PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(SEG_FILE 8 SEG_BLOCK 140 OBJNO_REUSE 52097 INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "TS_USER_CLIENT_LOG2" PARALLEL 1
ORA-39083: Object type INDEX failed to create with error:
ORA-01422: exact fetch returns more than requested number of rows
Failing sql is:
CREATE INDEX "IDX_USER_CLIENT_LOG_T2_UID" ON "USER_CLIENT_LOG_TR2" ("USER_ID") PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(SEG_FILE 8 SEG_BLOCK 268 OBJNO_REUSE 52133 INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "TS_USER_CLIENT_LOG2" PARALLEL 1
Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS
ORA-39112: Dependent object type INDEX_STATISTICS skipped, base object type INDEX:"IDX_USER_CLIENT_LOG_TR2" creation failed
ORA-39112: Dependent object type INDEX_STATISTICS skipped, base object type INDEX:"IDX_USER_CLIENT_LOG_T2_UID" creation failed
Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYS"."SYS_IMPORT_TRANSPORTABLE_01" completed with 4 error(s) at 14:31:22

查询数据,数据文件表空间和表都已经进入数据库,但是索引失败了,总结这个错误,我查来查去查不出相似案例,也不知道是否是自己哪里写的不对了,只得到一个疑似bug的说法(实际是不是我也不知道),这里只能说如果不涉及索引的话用expdp/impdp传输表空间,含有索引的话还是用exp吧,我改用exp/imp来完成表空间传输还是很顺利的。
6-1:使用exp来传输表空间
exp userid=\'sys/sys as sysdba\' file=/opt/oracle/pumpdata/TS_USER_CLIENT_LOG2.dmp transport_tablespace=y tablespaces=TS_USER_CLIENT_LOG2
8-1:使用imp来实现
imp userid=\'sys/sys as sysdba\' file=/opt/oracle/expdp_dmp/TS_USER_CLIENT_LOG2.dmp transport_tablespace=y datafiles='/opt/oracle/oradata/xxx/ts_user_client_log2.ora'

9:目标库——交换交换表空间
alter table USER_CLIENT_LOG exchange partition P_USER_CLIENT_LOG_4
with table USER_CLIENT_LOG_TR2 INCLUDING INDEXES without validation;

10:目标库——后续中间表空间和表的处理
删除中间表空间
drop tablespace TS_USER_CLIENT_LOG_2 including contents and datafiles;

11:目标库——设置交换过来的表空间为读写
ALTER TABLESPACE TS_USER_CLIENT_LOG2 read write;

12:源数据库——表空间交换完毕,重新设置为读写
ALTER TABLESPACE TS_USER_CLIENT_LOG2 read write;

13:源数据库——交换表空间回到原分区表
alter table USER_CLIENT_LOG exchange partition P_USER_CLIENT_LOG_2
with table USER_CLIENT_LOG_TR2 INCLUDING INDEXES without validation;

14:源数据库——后续中间表空间和表的处理
删除中间表空间
drop tablespace TS_USER_CLIENT_LOG_4 including contents and datafiles;


分享到:
评论

相关推荐

    Paragon Partition Manager使用教程图解

    利用什么第三方的分区工具来实现硬盘无损分区。说到这里,大家首先想到的工具八成是PQMagic,不过在这里我给大家介绍的是Paragon公司的Partition Manager 7.0。之所以介绍它,是因为这个工具比PQMagic对中文操作系统...

    partition by 使用说明

    partition by 使用说明

    图解Partition_Manager9.0把D盘空间转给C盘

    图解Partition_Manager9.0把D盘空间转给C盘

    Partition Table Doctor分区表医生

    卸载Ubuntu时不小心破坏了Windows分区,所有资料都丢失了,试了10多种分区...网上有较高版本的Partition Table Doctor,但是功能有限制,不推荐使用。 使用方法: http://zhidao.baidu.com/question/75288531.html?si=3

    A40-T3的sys_partition.fex分区表说明

    A40-T3的sys_partition.fex分区表说明

    磁盘分区工具 傲梅分区助手 AOMEI Partition Assistant 8.7.zip

    你可以使用这个功能备份在磁盘分区中的数据,也可以迁移或传输磁盘与分区到其它存储设备,如克隆分区到固态硬盘。 分区拷贝向导:分区克隆,将分区从一个地方复制到其它地方 磁盘拷贝向导:磁盘克隆,将一个磁盘克隆...

    EFI标准中的GPT分区的实现

    pDliEx2->PartitionStyle = PARTITION_STYLE_GPT; pDliEx2->PartitionCount = 1; LARGE_INTEGER usedDisk; usedDisk.QuadPart = 512 + 33 * 512 + 33 * 512; //MBR + 主分区表的大小 + 备用...

    硬盘磁盘无损分区IMMagic Partition Resizer3.6绿色便携版

    譬如笔记本使用起来发现C盘空间快要满了,IM-Magic Partition Resizer 可以帮助您从其他分区调一些空间过来。 IM-Magic Partition Resizer是一款能在不需要格式化和重新安装系统的情况下,管理和调整用户的磁盘,...

    EASEUS Partition Master 5.5.1 Professional

    通过它你可以减小现有分区的尺寸,然后使用未分配的磁盘空间创建新的分区或者扩大其他分区的大小以便更好地管理你的数据。此外,你可以浏览磁盘和分区的属性,设置一个活动分区,改变盘符等…… 当然,免费的个人...

    分区表PARTITIONtable.rar

    分区表PARTITIONtable.rar

    SQLServer中Partition By及row_number 函数使用详解

    partition by关键字是分析性函数的一部分,partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,本文给大家介绍SQLServer中Partition By及row_number 函数使用详解,需要的朋友参考下

    Partition Bad Disk

    Partition Bad Disk(硬盘坏道扇区修复工具) 绿色破解版是一款非常优秀的可以帮助你将硬盘中的坏道扇区自动的彻底扫描检测出来,...你甚至可以用Partition Bad Disk的Super Format(超级格式化)选项来格式化这些坏道分区!

    PartitionManager9.0

    Paragon Partition Manager 9.0 有着直觉的图形使用介面和支持鼠标操作。主要功能包括:能够不损失硬盘资料下对硬盘分区做大小调整、能够将 NTFS 文件系统转换成 FAT、FAT32 或 FAT32 文件系统转换成 FAT 文件系统、...

    DM8261 Partition 1.0.0.4

    磁盘3 区域大小——根据自己制作USB-CDROM 的ISO文件自行设定,文件尽量稍多设置点空间。我的ISO文件580多兆,我设定位600MB 下面的CDROM 点击右面的光盘符号,选择到自己ISO文件所在位置,选择该文件。 然后点击...

    大数据导论-6.1.4-熟悉大数据处理技术——大数据的处理模式.pptx

    概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上...

    Partition Assistant Pro 6.2

    软件允许您创建,调整大小,移动,合并和拆分分区,而不会丢失数据以最大限度地利用磁盘空间。并且软件在用户友好的界面上为您提供了各种各样的工具,简化了您的PC磁盘分区管理,使其比以前更加安全。非常不错的一款...

    PostgreSQL表分区和子表及删除所有的数据库表.zip

    PostgreSQL表分区和子表及删除所有的数据库表 最近需求要求统计DNS近7天每天的解析情况。数据量相对大,所以我这边对表进行分区。 对每天的数据进行分区存储。主表只存储近7天的数据,7天之前的数据删掉。所以我...

    oracle表空间表分区详解及oracle表分区查询使用方法

    此文从以下几个方面来整理关于分区表的概念及操作:1.表空间及分区表的概念2.表分区的具体作用3.表分区的优缺点4.表分区的几种类型及操作方法5.对表分区的维护性操作.(1.) 表空间及分区表的概念表空间:是一个或多个...

Global site tag (gtag.js) - Google Analytics