在线重定义分区表和NOLOGGING APPEND分区表对比

简介: 1、模拟大表create table tes_p(it int, ic int, im varchar2(20)); declare     i number(10);begin   for i in 1.

1、模拟大表
create table tes_p
(it int,
 ic int,
 im varchar2(20));

declare 
   i number(10);
begin
  for i in 1..1000000
  loop
  insert into tes_p
   values(i,i,'test');
  end loop;
end;
commit;
建立主键
alter table tes_p add constraint pk_t primary key (it);
方法1:在线重定义
建立中间表(分区表,你想得到的格式)
 CREATE TABLE scubagear
     (it int ,
      ic int ,
      im varchar2(20))
 PARTITION BY RANGE (ic)
     ( PARTITION s_q1 VALUES LESS THAN (333333),
       PARTITION s_q2 VALUES LESS THAN (666666),
       PARTITION s_q3 VALUES LESS THAN (10000002))

验证原表是否可以在线迁移
 exec dbms_redefinition.can_redef_table('ppzhu','tes_p');
新开启一个会话验证当前会话没有REDO产生
 select c.sid,b.NAME,a.VALUE from v$sesstat a ,v$statname b ,(select SID from v$mystat where rownum   where a.SID=c.sid and a.STATISTIC#=b.STATISTIC# and   b.name like '%redo%' and a.VALUE0 ;
 
       SID NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
 
在新开会话进行迁移
SQL> exec dbms_redefinition.start_redef_table('ppzhu','tes_p','scubagear'); -8S
 
PL/SQL procedure successfully completed
 
SQL> exec dbms_redefinition.sync_interim_table('ppzhu','tes_p','scubagear');
 
PL/SQL procedure successfully completed
 
SQL> exec dbms_redefinition.finish_redef_table('ppzhu','tes_p','scubagear'); -1s
 
PL/SQL procedure successfully completed
查看数据已经移动完成,索引已经迁移
最后由于分区表并没有主键,我们建立主键
alter table tes_p add constraint pk_t_2 primary key (it);
此时你的分区表已经转换完成
查看这样操作的日志量
 select c.sid,b.NAME,a.VALUE from v$sesstat a ,v$statname b ,(select SID from v$mystat where rownum     where a.SID=c.sid and a.STATISTIC#=b.STATISTIC# and   b.name like '%redo%' and a.VALUE0 ;
 
       SID NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       139 redo synch writes                                                        10
       139 redo synch time                                                         147
       139 redo entries                                                           9189
       139 redo size                                                          48358956  ---这里
       139 redo buffer allocation retries                                           30
       139 redo log space requests                                                   4
       139 redo log space wait time                                                 65
方法2
使用NOLOGGING方法
原表已经变化为scubagear,我们先建立分区表
 CREATE TABLE test_p2
     (it int ,
      ic int ,
      im varchar2(20))
 PARTITION BY RANGE (ic)
     ( PARTITION s_q1 VALUES LESS THAN (333333),
       PARTITION s_q2 VALUES LESS THAN (666666),
       PARTITION s_q3 VALUES LESS THAN (10000002))
让其不处于NOLOGGING模式
alter table test_p2 modify partition s_q1 nologging;
alter table test_p2 modify partition s_q2 nologging;
alter table test_p2 modify partition s_q3 nologging;
然后开启新会话进行INSERT APPEND
insert /* +append */ into test_p2 select * from scubagear; -9s
建立主键
alter table test_p2 add constraint pk_t_3 primary key (it);
这里完成了
然后RENAME
SQL> alter table  scubagear rename to test_123;
 
Table altered
 
SQL> alter table test_p2 rename to scubagear;
 
Table altered
表SCUBAGEAR已经是分区表
SQL>  select c.sid,b.NAME,a.VALUE from v$sesstat a ,v$statname b ,(select SID from v$mystat where rownum  2       where a.SID=c.sid and a.STATISTIC#=b.STATISTIC# and   b.name like '%redo%' and a.VALUE0 ;
 
       SID NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
       135 redo synch writes                                                         2
       135 redo synch time                                                          30
       135 redo entries                                                          22530
       135 redo size                                                          48463484 --这里
       135 redo buffer allocation retries                                            6
       135 redo log space requests                                                   4
       135 redo log space wait time                                                 17
 
7 rows selected


显示证明 两种方法REDO和时间差不多,时间也是相同的,不过为了可控尽量使用方法2.如果确实需要在线重定义使用方法1;

相关文章
|
Java 数据管理 关系型数据库
机票预订系统(java+mysql+navicat)
机票预订系统(java+mysql+navicat)
机票预订系统(java+mysql+navicat)
|
11月前
|
机器学习/深度学习 算法 搜索推荐
Wide和Deep模型
Wide和Deep模型
236 0
|
C# 虚拟化 索引
【WPF】UI虚拟化之------自定义VirtualizingWrapPanel
原文:【WPF】UI虚拟化之------自定义VirtualizingWrapPanel 前言 前几天QA报了一个关于OOM的bug,在排查的过程中发现,ListBox控件中被塞入了过多的Item,而ListBox又定义了两种样式的ItemsPanelTemplate。
2438 0
|
12月前
|
SQL 移动开发 Linux
linux下find、grep命令详解
linux下find、grep命令详解
341 8
|
数据采集 数据挖掘 Python
【Python DataFrame专栏】讲解DataFrame中缺失值的处理方法,包括填充、删除和插值技术。
【5月更文挑战第20天】在Python的Pandas库中处理DataFrame缺失值,包括查看缺失值(`isnull().sum()`)、填充(`fillna()`:固定值、前向填充、后向填充)、删除(`dropna()`:按行或列)和插值(`interpolate()`:线性、多项式、分段常数)。示例代码展示了这些方法的使用。
988 3
【Python DataFrame专栏】讲解DataFrame中缺失值的处理方法,包括填充、删除和插值技术。
|
网络协议 网络虚拟化
【每日一记】OSPF邻居无法建立的排错思路
【每日一记】OSPF邻居无法建立的排错思路
284 1
|
算法 数据挖掘
《数据挖掘:实用案例分析》——2.4 时序模式
本节书摘来自华章计算机《数据挖掘:实用案例分析》一书中的第2章,第2.4节,作者 张良均 陈俊德 刘名军 陈荣,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1873 0
|
运维 搜索推荐 算法
|
存储 缓存 固态存储
SSD掉电保护也是一门艺术
当你正在文思泉涌地敲打键盘赶稿件时,电脑突然抽风,然后,你就看到了绝望的蓝色(系统崩溃,电脑蓝屏了)。 其实office软件有自动保存的功能,当电脑重启,再次打开WORD文件时,会提醒你要不要导入最后自动保存的内容(这个方法不是100%管用)。
|
SQL 弹性计算 运维
MySQL 性能调优+自治服务 | 学习笔记
快速学习 MySQL 性能调优+自治服务,介绍了 MySQL 性能调优+自治服务系统机制, 以及在实际应用过程中如何使用。
MySQL 性能调优+自治服务 | 学习笔记

热门文章

最新文章