oralce修改已有的表为分区表
来源:互联网 发布:海辉高科软件科技公司 编辑:程序博客网 时间:2024/05/21 08:45
1.利用原有表创建表——>对此新表创建分区,把原有表的数据都拷贝到新表当中,修改原来表的名称为其他名称,把新创建的表的名称改为原来表名称。
create table MESSAGE
(
ID NUMBER,
PK_ID NUMBER,
CONTENT VARCHAR2(50)
)
insert into message values(99,99,'m99');
insert into message values(199,199,'m199');
insert into message values(299,299,'m299');
insert into message values(399,399,'m399');
insert into message values(1,1,'m1');
create table MESSAGE_NEW
(
ID NUMBER,
PK_ID NUMBER,
CONTENT VARCHAR2(50)
)
partition by range(ID)
(
partition p100 values less than (100),
partition p200 values less than (200),
partition p300 values less than (300),
partition p400 values less than (400)
)
insert into message_new(id,pk_id,content) select o.id,o.pk_id,o.content from message o;
rename message to message_old;
rename message_new to message;
select * from message partition(p100)
优点:方法简单易用,由于采用DDL语句,不会产生UNDO,且只产生少量REDO,效率相对较高,而且建表完成后数据已经在分布到各个分区中了。
不足:对于数据的一致性方面还需要额外的考虑。由于几乎没有办法通过手工锁定T表的方式保证一致性,在执行CREATE TABLE语句和RENAME T_NEW TO T语句直接的修改可能会丢失,如果要保证一致性,需要在执行完语句后对数据进行检查,而这个代价是比较大的。另外在执行两个RENAME语句之间执行的对T的访问会失败。
适用于修改不频繁的表,在闲时进行操作,表的数据量不宜太大。
2.使用交换分区方法。
select * from message t
create table MESSAGE
(
ID NUMBER,
PK_ID NUMBER,
CONTENT VARCHAR2(50)
)
insert into message values(99,99,'m99');
insert into message values(199,199,'m199');
insert into message values(299,299,'m299');
insert into message values(399,399,'m399');
insert into message values(1,1,'m1');
create table MESSAGE_NEW
(
ID NUMBER,
PK_ID NUMBER,
CONTENT VARCHAR2(50)
)
partition by range(ID)
(
partition p100 values less than (100),
partition p200 values less than (200),
partition p300 values less than (300),
partition p400 values less than (400)
)
delete from message where id>100;
ALTER TABLE MESSAGE_NEW EXCHANGE PARTITION p100 WITH TABLE MESSAGE;
insert into message_new(id,pk_id,content) select o.id,o.pk_id,o.content from message o;
rename message to message_old;
rename message_new to message;
select * from message partition(p100)
不足:分区表中只能够有一个分区,或者是多个分区但是只有一个分区中有数据。
手动的为表添加分区:
alter table
TB_REAL_DATA
add partition P201303
values less than (TO_DATE(' 2013-03-31 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace NEWCGQ;
动态的为表添加分区:
create or replace procedure pro_add_partition(n number)
as
v_sql varchar2(4000);
begin
--v_sql:='alter table message add partition p500 values less than (500) tablespace users';
v_sql:='alter table message add partition p'||n||' values less than ('||n||') tablespace users';
execute immediate v_sql;
end;
- oralce修改已有的表为分区表
- 修改已有的应用程序
- 如何将oralce普通表转换为分区表
- 如何在VirtualBox里为已有的硬盘修改大小?
- 如何在VirtualBox里为已有的硬盘修改大小?
- studio修改为本地已有的gradle配置
- oralce修改表空间为自动扩展
- abap修改已有的程序
- 将已有的分区表全局索引改为本地索引
- Eclipse里修改已有的svn账号
- 为已有的类 string 扩展方法
- 在线修改大表为分区表或更改其索引
- [Oralce] 分区表和索引
- Oralce分区表查询
- Oracle-08-修改表结构(对已有的表增删改查)
- 02-SQLlite3之alter:在已有的表中添加、修改或删除列
- 【Sqlserver】修改数据库表中的数据:对缺失的数据根据已有的数据进行修补
- SQL高级语句-ALTER TABLE 在已有的表中添加、修改或删除列。
- 解决VS2008 开发Windows Mobile 项目生成速度慢的问题
- 模板的作用?
- 【欢哥列传】
- Android实例说明
- 位移进制运算
- oralce修改已有的表为分区表
- 使用Flash骨骼工具制作角色动画
- Django 模板中使用css, javascript
- U-boot-200908在FL2440上的移植(二)--uboot在norflash上运行
- 数据结构-- 哈希表
- dedecms产品特色
- CStdioFile的用法
- Django+nginx+fastcgi 配置
- dedeCMS开发环境