DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1405|回复: 0
打印 上一主题 下一主题

[待整理] Oracle:用数据交换方式把表数据迁移到分区表实例

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-26 21:10:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      --把kingstar.emp表的数据迁移到kingstar.EMP_partition分区表中

  --创建数据源表结构


        drop table kingstar.emp;
  create table kingstar.emp as select * from scott.emp where 1=2;
  alter table kingstar.EMP
  add constraint PK_EMP primary key (EMPNO)
  using index
  tablespace USERS
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
  initial 64K
  minextents 1
  maxextents unlimited
  );
  truncate table kingstar.emp;


  --插入数据

        insert into kingstar.emp values (1,' 蔡浪','D',0,to_date('20080801 12:22:13','yyyymmdd hh24:mi:ss'),1000,1000,10);
  insert into kingstar.emp values (2,' 蔡星','D',1,to_date('20080901 13:23:12','yyyymmdd hh24:mi:ss'),5000,5000,10);
  commit;


  --查看迁移表中的数据

       select * from kingstar.emp;
  1 1  蔡浪 D 0 2008-8-1 12:22:13 1000.00 1000.00 10
  2 2  蔡星 D 1 2008-9-1 13:23:12 5000.00 5000.00 10


  --创建分区表 结构与kingstar.emp一样

  -- Create table

        create table kingstar.EMP_partition
  (
  EMPNO NUMBER(4),
  ENAME VARCHAR2(10),
  JOB VARCHAR2(9),
  MGR NUMBER(4),
  HIREDATE DATE,
  SAL NUMBER(7,2),
  COMM NUMBER(7,2),
  DEPTNO NUMBER(2)
  )
  tablespace KINGSTAR
  partition by range(hiredate)
  (partition emp_max values less than(maxvalue))--由于交换数据时需指定分区,所以这里不做详细分区,数据交换完后进行分区的拆分
  ;

       --进行数据交换

       alter table kingstar.EMP_partition exchange partition emp_max with table kingstar.emp;


  --查分区表数据

    select * from kingstar.EMP_partition;
  1 1  蔡浪 D 0 2008-8-1 12:22:13 1000.00 1000.00 10
  2 2  蔡星 D 1 2008-9-1 13:23:12 5000.00 5000.00 10


  --查源表数据已被清空  

       select * from kingstar.emp;
  
        --往源表插数据,索引失效

  insert into kingstar.emp values (1,' 蔡浪','D',0,to_date('20080801 12:22:13','yyyymmdd hh24:mi:ss'),1000,1000,10);
  insert into kingstar.emp values (2,' 蔡星','D',1,to_date('20080901 13:23:12','yyyymmdd hh24:mi:ss'),5000,5000,10);
  第 1 行出现错误:
  ORA-01502: 索引 'KINGSTAR.PK_EMP' 或这类索引的分区处于不可用状态


  --索引重建

       alter index kingstar.pk_emp rebuild ;


  --再插入数据可以完成

        insert into kingstar.emp values (1,' 蔡浪','D',0,to_date('20080801 12:22:13','yyyymmdd hh24:mi:ss'),1000,1000,10);
  insert into kingstar.emp values (2,' 蔡星','D',1,to_date('20080901 13:23:12','yyyymmdd hh24:mi:ss'),5000,5000,10);


  --查询数据

        select * from kingstar.emp;
  1 1  蔡浪 D 0 2008-8-1 12:22:13 1000.00 1000.00 10
  2 2  蔡星 D 1 2008-9-1 13:23:12 5000.00 5000.00 10


  --拆分分区,只能将一个分区插成两个分区,并且指定插分后的第一个分区的内容如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的分区名字

        alter table kingstar.emp_partition split partition emp_max at(to_date('200809','YYYYMM')) into (partition emp_200808,partition emp_max);
  alter table kingstar.emp_partition split partition emp_max at(to_date('200810','YYYYMM')) into (partition emp_200809,partition emp_max);
  alter table kingstar.emp_partition split partition emp_max at(to_date('200811','YYYYMM')) into (partition emp_200810,partition emp_upper);
  alter table kingstar.emp_partition split partition emp_upper at(to_date('200812','YYYYMM')) into (partition emp_200811,partition emp_max);


  --查询分区数据

       select * from kingstar.emp_partition partition(emp_200808);
  1 1  蔡浪 D 0 2008-8-1 12:22:13 1000.00 1000.00 10


  --修改分区名字

   alter table kingstar.emp_partition rename partition emp_max to emp_upper;
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-12-26 12:20 , 耗时 0.085574 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表