oracl普通表转换成分区表(使用id作为间隔分区)
来源:互联网 发布:亚像素边缘提取算法 编辑:程序博客网 时间:2024/06/03 16:48
网上有很多例子以时间来作为划分的,对于此大家可以自己去查找相关方法,本文针对的是采用 number型id进行分区,用这个的原因主要是当前表中日期字段好多空值,这导致后面的在线重定义有问题,遂采用id来作为间隔。
首先进入命令窗口
1.创建测试表ZPGZZDB_NEWW_TB
SQL> create table ZPGZZDB_NEWW_TB(ID NUMBER not null,SCDDID NUMBER,ZDRQ DATE, ZDR NUMBER,BMID NUMBER,DYBZ VARCHAR2(6));Table created
2.给测试表导入数据
SQL> insert into ZPGZZDB_NEWW_TB select id,scddid,zdrq,zdr,bmid,dybz from ZPGZZDB_TB;27715 rows inserted
3.给表添加主键
SQL> alter table ZPGZZDB_NEWW_TB add constraint pk_t primary key(id);Table altered
4.执行校验,看是否可以在线重定义
SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('smbf', 'ZPGZZDB_NEWW_TB',DBMS_REDEFINITION.CONS_USE_PK);PL/SQL procedure successfully completed
注意:
这一步可能会出现如下错误:
ERROR at line 1:ORA-06550: line 1, column 53:PLS-00201: identifier 'DBMS_REDEFINITION' must be declaredORA-06550: line 1, column 7:PL/SQL: Statement ignored这一步出错的原因是由于没有给‘DBMS_REDEFINITION’执行权限,只要授权一下,就不会出现这个错误: smbf为数据库用户名
GRANT ALL ON SYS.DBMS_REDEFINITION TO smbf
5.建立中间表及分区
SQL> CREATE TABLE ZPGZZDB_NEE_TB (ID NUMBER PRIMARY KEY,SCDDID NUMBER,ZDRQ DATE,ZDR NUMBER, BMID NUMBER,DYBZ VARCHAR2(6)) PARTITION BY RANGE (ID) 2 (PARTITION p1 VALUES LESS THAN (10001) , 3 PARTITION p2 VALUES LESS THAN (20001) , 4 PARTITION p3 VALUES LESS THAN (30001) , 5 PARTITION p4 VALUES LESS THAN (40001), 6 PARTITION p5 VALUES LESS THAN (50001), 7 PARTITION p6 VALUES LESS THAN (60001), 8 PARTITION p7 VALUES LESS THAN (70001), 9 PARTITION p8 VALUES LESS THAN (80001), 10 PARTITION p9 VALUES LESS THAN (90001), 11 PARTITION p10 VALUES LESS THAN (100001), 12 PARTITION p11 VALUES LESS THAN (110001), 13 PARTITION p12 VALUES LESS THAN (120001), 14 PARTITION p13 VALUES LESS THAN (130001)) 15 ;这里建立了13个分区
6.查询下建立的分区
SQL> select partition_name from user_tab_partitions where table_name='ZPGZZDB_NEE_TB';
PARTITION_NAME
------------------------------
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
P13
13 rows selecte
7、在线重定义
SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE('smbf', ' ZPGZZDB_NEWW_TB', 'ZPGZZDB_NEE_TB ');PL/SQL procedure successfully completed
注意:
分区一定要包括表里的所有数据,因为我表里有120000条数据,所以我建立了13个分区。如果出现
ERROR at line 1:ORA-12091: cannot online redefine table "test"."T" withmaterialized viewsORA-06512: at "SYS.DBMS_REDEFINITION", line 50ORA-06512: at "SYS.DBMS_REDEFINITION", line 1343ORA-06512: at line 1这个原因就是分区表建立时,有的值没被包括在里面,所以切记最后包含的数据长度要大于当前表里的数据长度。
8、结束在线重定义
SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE('smbf', 'ZPGZZDB_NEWW_TB', ' ZPGZZDB_NEE_TB');PL/SQL procedure successfully completed9、查询分区数据
select count(*) from ZPGZZDB_NEWW_TB partition(P1);10.7.校验完数据.清空中间表
truncate table ZPGZZDB_NEE_TB;drop table ZPGZZDB_NEE_TB;
阅读全文
0 0
- oracl普通表转换成分区表(使用id作为间隔分区)
- 使用在线重定义方式将普通表转换成分区表
- ORACLE 普通表转换成分区表(在线重定义)
- oracle在线将普通表转换成分区表
- 利用REDEFINITION将普通表转换成分区表案例
- ORACLE 普通表转换成分区表(在线重定义) --转帖
- SQL Server 2005中的分区表(三):将普通表转换成分区表
- ORACLE 普通表转换成分区表(在线重定义)
- SQL Server 2005中的分区表(三):将普通表转换成分区表
- SQL Server 2005中的分区表(三):将普通表转换成分区表
- SQL Server 2005中的分区表(三):将普通表转换成分区表
- ORACLE普通表转换成分区表(在线重定义)
- SQL Server 2008中的分区表(三):将普通表转换成分区表
- 普通表转换成分区表的方发(转自david)
- ORACLE 普通表转换成分区表(在线重定义)
- SQL Server 中的分区表(三):将普通表转换成分区表
- ORACLE 普通表转换成分区表(在线重定义)
- ORACLE 普通表转换成分区表(在线重定义)
- ViewGroup事件分发机制
- 记录我的react之路 第一天
- x86-32汇编语言基础汇总
- iOS学习笔记-108.多线程07——CGD栅栏函数、延时、一次性代码
- STM32串口配置的一种方法
- oracl普通表转换成分区表(使用id作为间隔分区)
- react-native报错[NSTaggedPointerString unsignedIntValue]: unrecognized selector sent to instance的解决办法
- ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
- iOS学习笔记-109.多线程08——CGD快速迭代
- Centos7安装Nginx
- 一、CentOS6.5安装ElasticSearch5.5完整纪录与问题总结
- ORACLE 11G 性能诊断优化之ASH实战分析详解
- iOS学习笔记-110.多线程09——CGD队列组
- promise.js