关于分区表的move操作(r2笔记90天)
关于分区表的move操作还是很值得深究的一个问题。如果分区表中含有lob字段,难度还会加大。 对于普通的表而言,做move操作室理所当然,oracle提供的方式很直接快捷。当然了这个命令也不是高可用的范畴。但是对于数据重组还是很方便快捷的。
一般来说,如果尝试对分区表进行move操作,会得到如下的错误警告。
SQL> alter table charge move tablespace large_data;
alter table charge move tablespace large_data
*
ERROR at line 1:
ORA-14511: cannot perform operation on a partitioned object
这个时候可以使用如下的sql语句生成动态sql来做partition级别的move操作。
比如对下面3个大表,如下的sql就可以生成成百上千条语句来完成partition级别的move操作。
select 'alter table '||table_name||' move partition '||partition_name||' tablespace large_data;' from user_tab_partitions where table_name in ('CHARGE','MEMO','CHARGE_REL')
如果表中含有lob字段,可能会碰到如下的问题
alter table memo move partition xxxx tablespace large_data;
*
ERROR at line 1:
ORA-01658: unable to create INITIAL extent for segment in tablespace DATAS01
碰到这种问题,一般有以下的几种原因,一种需要查看quota的情况,是否在对应的表空间中含有足够的quota 一种就是查看表空间的存储情况,是否有足够的空间。 如果空间有限,而且有的分区没有数据,可以开启延迟加载的方式。启用deferred_segment
expdp/impdp 使用数据泵是一种很好的选择,可以很方便的进行数据结构的dump到处,然后在导入的时候直接做remap_tablespace,这个功能是exp/imp所无法企及的。 推荐使用impdp的remap功能。 perl/shell 当然了,可以利用exp+imp+shell/perl的方式来解析dump文件 可以参考如下的博文。 http://blog.itpub.net/23718752/viewspace-1160404/ 里面详细讨论了解析dump文件的一些细节。 dbms_metadata.get_ddl 如果源shema可以随时访问到,在条件允许的时候可以直接通过dbms_metadata来生成对应的创建语句,可以在此基础上进行表空间的重新手工mapping。 这个过程看似简单,其实还要考虑很多的细节。分区的分区太多,很容易就超过最大字符长度了,需要自己把握控制。 exchange partition 这种方式可能风险有些大,不过在某些情况下也是一种方案,可以通过exchange partition的形式来完成表空间的重新映射。 使用普通表来和分区做一个交换。 不过以上的方法都不太适合高可用的情况,不过downtime的时间也是需要考虑的,需要最大程度的减少操作时间,毕竟使用分区表的环境中,数据都是很大的,这个也需要大家斟酌。表空间的变更是目的,但是数据的重组就牵扯了数据的导出,导入之类的工作,大道至简,但是细节太多,还是需要多加注意。
- XMLHttpRequest对象如何兼容各浏览器使用?
- Java使用wsdl生成axis版本webservice服务端/客户端代码
- Java微信支付快速入门&工具类
- redis集群 - linux安装与配置笔记
- Apache RocketMQ 4.0.0 - linux安装与配置笔记
- 数据库连接池-tomcat-jdbc食用笔记
- Java.NIO编程一览笔录
- Hbase 学习(三)Coprocessors
- Spring4+Spring MVC+MyBatis整合思路
- Zookeeper ACL权限配置及zkclient示例
- Spring Session 实现分布式会话管理
- 通过ambari安装hadoop集群(一)
- Hbase 学习(十) HBase Snapshots
- sqoop 常用命令整理(二)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PyQt5 技术篇-设置窗口相对桌面位置,按屏幕比例
- Go语言(十五) 反射
- SpringBoot应用跨域访问解决方案
- Spring Boot 2.2都有哪些新变化
- Go语言(十四)日志项目
- 如何在Spring Boot中使用Cookies
- 在SpringBoot中使用flyway管理数据库版本状态
- 使用Spring Data JPA进行数据分页与排序
- 搭建一个高可用负载均衡的集群架构(第二部分)
- 在PyTorch中使用Seq2Seq构建的神经机器翻译模型
- 理解 ECMAScript 规范(1)
- 使用 NodeJS 实现 JWT 原理
- 搭建一个高可用负载均衡的集群架构(第一部分)
- Java Stream函数式编程第三篇:管道流结果处理
- MySQL慢查询日志