ORACLE普通表转换成分区表的操作——在线重定义表(DBMS_REDEFINITION)
来源:互联网 发布:宋逸轩考研知乎 编辑:程序博客网 时间:2024/05/14 06:29
1.操作用户需要有以下权限
GRANT EXECUTE ON DBMS_REDEFINITION TO HAGJ;
2.需要分区的表
select * from shiyu;
3.表结构
CREATE TABLE HAGJ.SHIYU
(
LOGID CHAR(16 BYTE),
CREATETIME CHAR(19 BYTE),
LOGTYPE VARCHAR2(10 BYTE),
SAFETYLEVEL INTEGER,
TRANID CHAR(36 BYTE),
USERID CHAR(11 BYTE),
ENTID CHAR(11 BYTE),
ORGID CHAR(11 BYTE),
DEPTID CHAR(11 BYTE),
PROGRAMID VARCHAR2(120 BYTE),
LOGDESC NVARCHAR2(256),
OPRESULT NVARCHAR2(256),
COMPUTERNAME VARCHAR2(64 BYTE),
IP VARCHAR2(40 BYTE),
FORMID CHAR(16 BYTE),
MILLISECONDS INTEGER,
"QyUserId" CHAR(11 BYTE),
QYUSER NVARCHAR2(20)
)
4.创建一个与shiyu 表字段相同,但是分区的表
CREATE TABLE shiyu_temp
(
LOGID CHAR(16 BYTE),
CREATETIME CHAR(19 BYTE),
LOGTYPE VARCHAR2(10 BYTE),
SAFETYLEVEL INTEGER,
TRANID CHAR(36 BYTE),
USERID CHAR(11 BYTE),
ENTID CHAR(11 BYTE),
ORGID CHAR(11 BYTE),
DEPTID CHAR(11 BYTE),
PROGRAMID VARCHAR2(120 BYTE),
LOGDESC NVARCHAR2(256),
OPRESULT NVARCHAR2(256),
COMPUTERNAME VARCHAR2(64 BYTE),
IP VARCHAR2(40 BYTE),
FORMID CHAR(16 BYTE),
MILLISECONDS INTEGER,
"QyUserId" CHAR(11 BYTE),
QYUSER NVARCHAR2(20)
)partition by range(CREATETIME)
(
partition p1 values less than ('2017-06-01 00:00:00'),
partition p2 values less than ('2017-09-01 00:00:00'),
partition p3 values less than ('2017-12-01 00:00:00')
);
5.开始在线重定义
SQL> EXEC dbms_redefinition.start_redef_table('HAGJ', 'SHIYU','SHIYU_TEMP');
BEGIN dbms_redefinition.start_redef_table('HAGJ', 'SHIYU','SHIYU_TEMP'); END;
*
ERROR at line 1:
ORA-12089: cannot online redefine table "HAGJ"."SHIYU" with no primary key
ORA-06512: at "SYS.DBMS_REDEFINITION", line 56
ORA-06512: at "SYS.DBMS_REDEFINITION", line 1498
ORA-06512: at line 1
6.原表需要有主键,这里先添加主键
SQL> alter table shiyu add constraint pk_shiyu primary key(logid);
7.开始执行在线重定义
SQL> EXEC dbms_redefinition.start_redef_table('HAGJ', 'SHIYU','SHIYU_TEMP');
PL/SQL procedure successfully completed.
8.如果表的数据很多,7步的时候可能会很长,这期间系统可能会继续对表SHIYU进行写入或者更新数据,那么可以执行以下的语句,这样在执行最后一步的时候可以避免长时间的锁定(该过程可选可不选)
BEGIN
DBMS_REDEFINITION.SYNC_INTERIM_TABLE('HAGJ', 'SHIYU','SHIYU_TEMP');
END;
/
SQL> DECLARE
2 error_count pls_integer := 0;
3 BEGIN
4 dbms_redefinition.copy_table_dependents('HAGJ', 'SHIYU','SHIYU_TEMP',0, true, false, true, false,error_count);
5 dbms_output.put_line('errors := ' || to_char(error_count));
6 END;
7 /
PL/SQL procedure successfully completed.
SQL>
9.结束在线重定义
SQL> EXEC dbms_redefinition.finish_redef_table('HAGJ', 'SHIYU','SHIYU_TEMP');
PL/SQL procedure successfully completed
10.查看是否转换成功
SQL> select count(*) from shiyu partition(P2);
COUNT(*)
----------
2248424
SQL> select count(*) from shiyu partition(p3);
COUNT(*)
----------
3081
SQL>
11.删除中间表
SQL> drop table shiyu_temp;
Table dropped.
GRANT EXECUTE ON DBMS_REDEFINITION TO HAGJ;
2.需要分区的表
select * from shiyu;
3.表结构
CREATE TABLE HAGJ.SHIYU
(
LOGID CHAR(16 BYTE),
CREATETIME CHAR(19 BYTE),
LOGTYPE VARCHAR2(10 BYTE),
SAFETYLEVEL INTEGER,
TRANID CHAR(36 BYTE),
USERID CHAR(11 BYTE),
ENTID CHAR(11 BYTE),
ORGID CHAR(11 BYTE),
DEPTID CHAR(11 BYTE),
PROGRAMID VARCHAR2(120 BYTE),
LOGDESC NVARCHAR2(256),
OPRESULT NVARCHAR2(256),
COMPUTERNAME VARCHAR2(64 BYTE),
IP VARCHAR2(40 BYTE),
FORMID CHAR(16 BYTE),
MILLISECONDS INTEGER,
"QyUserId" CHAR(11 BYTE),
QYUSER NVARCHAR2(20)
)
4.创建一个与shiyu 表字段相同,但是分区的表
CREATE TABLE shiyu_temp
(
LOGID CHAR(16 BYTE),
CREATETIME CHAR(19 BYTE),
LOGTYPE VARCHAR2(10 BYTE),
SAFETYLEVEL INTEGER,
TRANID CHAR(36 BYTE),
USERID CHAR(11 BYTE),
ENTID CHAR(11 BYTE),
ORGID CHAR(11 BYTE),
DEPTID CHAR(11 BYTE),
PROGRAMID VARCHAR2(120 BYTE),
LOGDESC NVARCHAR2(256),
OPRESULT NVARCHAR2(256),
COMPUTERNAME VARCHAR2(64 BYTE),
IP VARCHAR2(40 BYTE),
FORMID CHAR(16 BYTE),
MILLISECONDS INTEGER,
"QyUserId" CHAR(11 BYTE),
QYUSER NVARCHAR2(20)
)partition by range(CREATETIME)
(
partition p1 values less than ('2017-06-01 00:00:00'),
partition p2 values less than ('2017-09-01 00:00:00'),
partition p3 values less than ('2017-12-01 00:00:00')
);
5.开始在线重定义
SQL> EXEC dbms_redefinition.start_redef_table('HAGJ', 'SHIYU','SHIYU_TEMP');
BEGIN dbms_redefinition.start_redef_table('HAGJ', 'SHIYU','SHIYU_TEMP'); END;
*
ERROR at line 1:
ORA-12089: cannot online redefine table "HAGJ"."SHIYU" with no primary key
ORA-06512: at "SYS.DBMS_REDEFINITION", line 56
ORA-06512: at "SYS.DBMS_REDEFINITION", line 1498
ORA-06512: at line 1
6.原表需要有主键,这里先添加主键
SQL> alter table shiyu add constraint pk_shiyu primary key(logid);
7.开始执行在线重定义
SQL> EXEC dbms_redefinition.start_redef_table('HAGJ', 'SHIYU','SHIYU_TEMP');
PL/SQL procedure successfully completed.
8.如果表的数据很多,7步的时候可能会很长,这期间系统可能会继续对表SHIYU进行写入或者更新数据,那么可以执行以下的语句,这样在执行最后一步的时候可以避免长时间的锁定(该过程可选可不选)
BEGIN
DBMS_REDEFINITION.SYNC_INTERIM_TABLE('HAGJ', 'SHIYU','SHIYU_TEMP');
END;
/
SQL> DECLARE
2 error_count pls_integer := 0;
3 BEGIN
4 dbms_redefinition.copy_table_dependents('HAGJ', 'SHIYU','SHIYU_TEMP',0, true, false, true, false,error_count);
5 dbms_output.put_line('errors := ' || to_char(error_count));
6 END;
7 /
PL/SQL procedure successfully completed.
SQL>
9.结束在线重定义
SQL> EXEC dbms_redefinition.finish_redef_table('HAGJ', 'SHIYU','SHIYU_TEMP');
PL/SQL procedure successfully completed
10.查看是否转换成功
SQL> select count(*) from shiyu partition(P2);
COUNT(*)
----------
2248424
SQL> select count(*) from shiyu partition(p3);
COUNT(*)
----------
3081
SQL>
11.删除中间表
SQL> drop table shiyu_temp;
Table dropped.
阅读全文
0 0
- ORACLE普通表转换成分区表的操作——在线重定义表(DBMS_REDEFINITION)
- Oracle在线重定义DBMS_REDEFINITION 普通表—>分区表
- 【转】Oracle在线重定义DBMS_REDEFINITION 普通表—>分区表
- ORACLE 普通表转换成分区表(在线重定义)
- ORACLE 普通表转换成分区表(在线重定义) --转帖
- ORACLE 普通表转换成分区表(在线重定义)
- Oracle 在线重定义(将普通堆表转换成分区表)
- ORACLE普通表转换成分区表(在线重定义)
- oracle 在线重定义将普通表转换成分区表
- ORACLE 普通表转换成分区表(在线重定义)
- ORACLE 普通表转换成分区表(在线重定义)
- ORACLE 普通表转换成分区表(在线重定义)
- ORACLE系统包DBMS_REDEFINITION实现表的在线重定义
- 在线重定义表(dbms_redefinition)
- DBMS_REDEFINITION在线重定义表
- DBMS_REDEFINITION在线重定义表
- DBMS_REDEFINITION在线重定义表
- 使用在线重定义方式将普通表转换成分区表
- 字符设备的组织形式与设备号的注册分配
- AndroidManifest.xml清单文件详解--uses-feature节点
- c++ const成员函数
- Pycharm 2017激活码
- 宋宝华:火焰图:全局视野的Linux性能剖析
- ORACLE普通表转换成分区表的操作——在线重定义表(DBMS_REDEFINITION)
- set的使用
- 28、android 常用颜色透明度
- 《TCP/IP详解 卷1》 笔记: ARP协议
- 【转】Eclipse使用码云上传代码和下载代码
- 线程同步
- 分别统计周期时间内数量
- 虚拟机安装时注意情况
- win7下安装git及关联使用github