Oracle: 用数据交换方式把表数据迁移到分区表实例
http://tech.ddvip.com 2008年08月27日 社区交流
内容摘要: 本文介绍了在Oracle中用数据交换方式把数据迁移到分区表的实例。
--把kingstar.emp表的数据迁移到kingstar.EMP_partition分区表中
--创建数据源表结构
droptablekingstar.emp;
createtablekingstar.empasselect*fromscott.empwhere1=2;
altertablekingstar.EMP
addconstraintPK_EMPprimarykey(EMPNO)
usingindex
tablespaceUSERS
pctfree10
initrans2
maxtrans255
storage
(
initial64K
minextents1
maxextentsunlimited
);
truncatetablekingstar.emp;
--插入数据
insertintokingstar.empvalues(1,' 蔡浪','D',0,to_date('2008080112:22:13','yyyymmddhh24:mi:ss'),1000,1000,10);
insertintokingstar.empvalues(2,' 蔡星','D',1,to_date('2008090113:23:12','yyyymmddhh24:mi:ss'),5000,5000,10);
commit;
--查看迁移表中的数据
select*fromkingstar.emp;
11 蔡浪D02008-8-112:22:131000.001000.0010
22 蔡星D12008-9-113:23:125000.005000.0010
--创建分区表 结构与kingstar.emp一样
-- Create table
createtablekingstar.EMP_partition
(
EMPNONUMBER(4),
ENAMEVARCHAR2(10),
JOBVARCHAR2(9),
MGRNUMBER(4),
HIREDATEDATE,
SALNUMBER(7,2),
COMMNUMBER(7,2),
DEPTNONUMBER(2)
)
tablespaceKINGSTAR
partitionbyrange(hiredate)
(partitionemp_maxvalueslessthan(maxvalue))--由于交换数据时需指定分区,所以这里不做详细分区,数据交换完后进行分区的拆分
;
--进行数据交换
altertablekingstar.EMP_partitionexchangepartitionemp_maxwithtablekingstar.emp;
--查分区表数据
select*fromkingstar.EMP_partition;
11 蔡浪D02008-8-112:22:131000.001000.0010
22 蔡星D12008-9-113:23:125000.005000.0010
--查源表数据已被清空
select*fromkingstar.emp;
--往源表插数据,索引失效
insertintokingstar.empvalues(1,' 蔡浪','D',0,to_date('2008080112:22:13','yyyymmddhh24:mi:ss'),1000,1000,10);
insertintokingstar.empvalues(2,' 蔡星','D',1,to_date('2008090113:23:12','yyyymmddhh24:mi:ss'),5000,5000,10);
第1行出现错误:
ORA-01502:索引'KINGSTAR.PK_EMP'或这类索引的分区处于不可用状态
--索引重建
alterindexkingstar.pk_emprebuild;
--再插入数据可以完成
insertintokingstar.empvalues(1,' 蔡浪','D',0,to_date('2008080112:22:13','yyyymmddhh24:mi:ss'),1000,1000,10);
insertintokingstar.empvalues(2,' 蔡星','D',1,to_date('2008090113:23:12','yyyymmddhh24:mi:ss'),5000,5000,10);
--查询数据
select*fromkingstar.emp;
11 蔡浪D02008-8-112:22:131000.001000.0010
22 蔡星D12008-9-113:23:125000.005000.0010
--拆分分区,只能将一个分区插成两个分区,并且指定插分后的第一个分区的内容如to_date('200809','YYYYMM')就是该分区emp_200808存放200808这个月数据
--也就是相当于定义分区时的 partition emp_200808 values less then(to_date('200809','yyyymm'))
-- into (partition emp_200810,partition emp_maxes); 指定拆分出来的less than 的分区名字和maxvalue的分区名字
altertablekingstar.emp_partitionsplitpartitionemp_maxat(to_date('200809','YYYYMM'))into(partitionemp_200808,partitionemp_max);
altertablekingstar.emp_partitionsplitpartitionemp_maxat(to_date('200810','YYYYMM'))into(partitionemp_200809,partitionemp_max);
altertablekingstar.emp_partitionsplitpartitionemp_maxat(to_date('200811','YYYYMM'))into(partitionemp_200810,partitionemp_upper);
altertablekingstar.emp_partitionsplitpartitionemp_upperat(to_date('200812','YYYYMM'))into(partitionemp_200811,partitionemp_max);
--查询分区数据
select*from kingstar.emp_partitionpartition(emp_200808);
11 蔡浪D02008-8-112:22:131000.001000.0010
--修改分区名字
altertablekingstar.emp_partitionrenamepartitionemp_maxtoemp_upper;
作者:loncai 责编:豆豆技术应用
- Oracle 10g 教程
- Oracle 故障处理
- Oracle 存储过程
- Oracle 备份恢复
- Oracle 性能调优
- Oracle 9i 教程
- Oracle 11g 教程
- Oracle 启动
- Oracle 命令
- Oracle 数据库管理
- Oracle 时间
- Oracle 密码
- Oracle 用户
- Oracle 常见错误
- Oracle 建数据表
- Oracle 索引
- Oracle 数据库连接
- Oracle 锁
- Oracle RAC 专题
- Oracle exp/imp 命令
- Oracle 表空间
- Oracle 查询
- Oracle 函数
- Oracle PL/SQL 专题
- 更多Oracle 专题>>>