Oracle-在线重定义操作文档
Oracle-在线重定义操作文档
2015年10月8日
15:51
在线重定义的大致操作流程如下:
(1)创建基础表A,如果存在,就不需要操作。
(2)创建临时的分区表B。
(3)开始重定义,将基表A的数据导入临时分区表B。
(4)结束重定义,此时在DB的 Name Directory里,已经将2个表进行了交换。即此时基表A成了分区表,我们创建的临时分区表B 成了普通表。 此时我们可以删除我们创建的临时表B。它已经是普通表。
下面看一个示例:
1. 创建基本表和索引
|
SQL> create table unpar_table (id number(10) primary key,create_date date); Table created. SQL> insert into unpar_table select rownum, created from dba_objects; 72491 rows created. SQL> create index create_date_ind on unpar_table(create_date); Index created. SQL> commit; Commit complete. |
2. 收集表的统计信息
|
SQL> exec dbms_stats.gather_table_stats(ownname=>'dev',tabname=>'unpar_table', cascade => true); PL/SQL procedure successfully completed. |
3. 创建临时分区表
|
SQL> create table par_table (id number primary key, time date) partition by range (time) (partition p1 values less than (to_date('2004-7-1', 'yyyy-mm-dd')),partition p2 values less than (to_date('2005-1-1', 'yyyy-mm-dd')),partition p3 values less than (to_date('2005-7-1', 'yyyy-mm-dd')),partition p4 values less than (maxvalue)); Table created. |
4. 进行重定义操作
4.1 检查重定义的合理性
|
SQL> exec dbms_redefinition.can_redef_table(uname=>'dev',tname=>'unpar_table'); PL/SQL procedure successfully completed. |
4.2 如果4.1 没有问题,开始重定义,这个过程可能要等一会。
这里要注意:如果分区表和原表列名相同,可以用如下方式进行:
|
SQL> BEGIN DBMS_REDEFINITION.start_redef_table( uname => 'dev', orig_table => 'unpar_table', int_table => 'par_table'); end; / BEGIN * ERROR at line 1: ORA-42016: shape of interim table does not match specified column mapping ORA-06512: at "SYS.DBMS_REDEFINITION", line 52 ORA-06512: at "SYS.DBMS_REDEFINITION", line 1646 ORA-06512: at line 2 如果分区表的列名和原表不一致,那么在开始重定义的时候,需要重新指定映射关系: SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE('dev','unpar_table','par_table','ID ID, create_date TIME',DBMS_REDEFINITION.CONS_USE_PK); PL/SQL procedure successfully completed. 这一步操作结束后,数据就已经同步到这个临时的分区表里来了。 |
4.3 同步新表,这是可选的操作
|
SQL> begin dbms_redefinition.sync_interim_table( uname => 'DEV', orig_table => 'unpar_table', int_table => 'par_table'); end; / PL/SQL procedure successfully completed. |
4.4 创建索引,在线重定义只重定义数据,索引还需要单独建立。
|
SQL> create index create_date_ind2 on par_table(time); Index created. |
4.5 收集新表的统计信息
|
SQL> exec dbms_stats.gather_table_stats(ownname=>'dev',tabname=>'par_table', cascade => true); PL/SQL procedure successfully completed. |
4.6 结束重定义
|
SQL> begin dbms_redefinition.finish_redef_table( uname => 'dev', orig_table => 'unpar_table', int_table => 'par_table'); end; / PL/SQL procedure successfully completed. 结束重定义的意义: 基表unpar_table 和临时分区表par_table 进行了交换。 此时临时分区表par_table成了普通表,我们的基表unpar_table成了分区表。 我们在重定义的时候,基表unpar_table是可以进行DML操作的。 只有在2个表进行切换的时候会有短暂的锁表。 |
5. 删除临时表
|
SQL> DROP TABLE par_table; 表已删除。 |
6. 索引重命名
|
SQL> ALTER INDEX create_date_ind2 RENAME TO create_date_ind; 索引已更改。 |
7. 验证
|
SQL> select partitioned from user_tables where table_name = 'UNPAR_TABLE'; PAR --- YES SQL> select partition_name from user_tab_partitions where table_name = 'UNPAR_TABLE'; PARTITION_NAME ------------------------------ P1 P2 P3 P4 SQL> select count(*) from unpar_table; COUNT(*) ---------- 72500 SQL> select count(*) from unpar_table partition (p4); COUNT(*) ---------- 72500 SQL> select count(*) from par_table; COUNT(*) ---------- 72500 SQL> select count(*) from unpar_table partition (p1); COUNT(*) ---------- 0 SQL> select count(*) from unpar_table partition (p2); COUNT(*) ---------- 0 |
已使用 Microsoft OneNote 2010 创建
一个用于存放所有笔记和信息的位置
Oracle-在线重定义操作文档的更多相关文章
- Oracle在线重定义(online redefinition)--将普通表改为分区表
使用Oracle的在线重定义技术,可以将Oracle的普通表改为分区表.操作如下: STEP1:测试表是否可以在线重定义,这里以unixdev数据库的LIJIAMAN.BSTEST为例 EXEC DB ...
- Oracle在线重定义DBMS_REDEFINITION 普通表—>分区表
实验环境:RHEL 6.4 + Oracle 11.2.0.3实验:在线重定义 普通表 为 分区表,包括主键对应的索引都改造为分区索引. 1,构造普通表t_objects conn test1/tes ...
- oracle在线重定义表
在一个高可用系统中,如果需要改变一个表的定义是一件比较棘手的问题,尤其是对于7×24系统.Oracle提供的基本语法基本可以满足一般性修改,但是对于把普通堆表改为分区表,把索引组织表修改为堆表等操作就 ...
- Oracle 在线重定义表分区
==================原始表================原始表=====================原始表 create table BUILDING_temp(building ...
- 通过DBMS_REDEFINITION包对表在线重定义
基础介绍 Oracle Online Redefinition可以保证在数据表进行DDL类型操作,如插入.删除数据列,分区处理的时候,还能够支持DML操作,特别是insert/update/delet ...
- oracle 11g 将非分区表转换为分区表在线重定义
--操作的用户需要有以下的权限 GRANT CONNECT, RESOURCE TO CMIGDW; GRANT EXECUTE ON DBMS_REDEFINITION TO CMIGDW; GRA ...
- Oracle 12C 新特性之在线重命名、迁移活跃的数据文件
Oracle 数据库 12c 版本中对数据文件的迁移或重命名不再需要太多繁琐的步骤,可以使用 ALTER DATABASE MOVE DATAFILE 这样的 SQL 语句对数据文件进行在线重命名和移 ...
- (Oracle)已有数据表建立表分区—在线重定义
今天在做数据抽取的时候,发现有一张业务表数据量达到了5000W,所以就想将此表改为分区表.分区表的有点如下: 1.改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度.2.增强可用性: ...
- oracle普通表转分区表(在线重定义方式)
1.1.TAB_TAOBAO_BILL 1.1.1检查下这张表是否可以在线重定义,无报错表示可以,报错会给出错误信息: exec dbms_redefinition.can_redef_table(' ...
随机推荐
- 运行时改变控件的大小(点击后立刻ReleaseCapture,然后计算位移,最后发消息改变位置)——最有趣的是TPanel其实也有窗口标题,因此可发HTCAPTION消息
//光标在控件不同位置时的样式 // 由于拐角这点手动精确实在困难 所以用范围 范围+3 这样很容易就找到这一点了 procedure CtrlMouseMove(Ctrl: TWinControl; ...
- poj3519
凡是差分约束系统的题目都是转化为d[j]-d[i]<=w[i,j]的形式然后我们建立边i-->j 边权为w[i,j]对于这道题,要求d[n]-d[1]尽可能的大设d[i]为相对差,d[1] ...
- Selenium WebDriver + Grid2 + RSpec之旅(一)----准备篇
Selenium WebDriver + Grid2 + RSpec之旅(一) ----准备篇 前言 在Web 2.0 应用中,在浏览器种类盛行的时代,我们在测试过程中不仅要模 ...
- VS 2010不显示头文件源文件和所有以前分类的文件夹,*.h 和*.cpp都显示在同一个文件
打开VS后不显示头文件源文件和所有以前分类的文件夹,*.h 和*.cpp都显示在同一个文件 点击右图红色指示显示所有文件夹按钮,就能恢复.
- Windows Server 2008 网站访问PHP响应慢的解决方法
公司新上了一个网站,但是在配置完PHP环境之后却发现了问题,访问HTML速度飞快,而访问PHP网页时就要卡顿1秒,响应很慢的样子,排除了带宽的因素之后,在百度上搜了一圈竟然解决了,现在将方法转载给大家 ...
- HDU 4720 Naive and Silly Muggles 2013年四川省赛题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4720 题目大意:给你四个点,用前三个点绘制一个最小的圆,而这三个点必须在圆上或者在圆内,判断最一个点如 ...
- iOS屏蔽高频点击技巧
例如高频率点击一个按钮或者TableViewCell,会造成功能多次重复执行,在异步网络请求时候或者多线程时候,造成的问题尤其明显. 解决方法: 声明一个属性self.actionWorking ,标 ...
- 找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数 #include<iostream>using namespace s ...
- 分布式系统里session同步的那些事儿
几周前,有个盆友问老王,说现在有多台服务器,怎么样来解决这些服务器间的session同步问题?老王一下就来精神了,因为在n年以前,老王还在学校和几个同学一起所谓创业的时候,也遇到了类似的问题.当时查了 ...
- 佛山Uber优步司机奖励政策(1月25日~1月31日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...