如何将所有分区从表复制到另一个表

时间:2014-01-09 11:36:24

标签: sql oracle oracle11g

我有一个oracle 11g生产和测试环境。现在我想将所有可用的分区从生产复制到测试环境。是可以一次性完成它还是我必须使用alter table语句逐个创建分区。

2 个答案:

答案 0 :(得分:2)

- 根据您的要求,您可以使用三个分区中的任何一个

  • 按范围划分

     CREATE TABLE sales_range 
    (salesman_id  NUMBER(5), 
     sales_date    DATE)
    PARTITION BY RANGE(sales_date) 
    (
    PARTITION sales_jan2000 VALUES LESS THAN(TO_DATE('02/01/2000','DD/MM/YYYY')),
    PARTITION sales_feb2000 VALUES LESS THAN(TO_DATE('03/01/2000','DD/MM/YYYY')),
    PARTITION sales_apr2000 VALUES LESS THAN(TO_DATE('05/01/2000','DD/MM/YYYY'))
    );
    
  • 按列表分区

     CREATE TABLE sales_list
     (salesman_id  NUMBER(5), 
     salesman_name VARCHAR2(30),
     sales_state   VARCHAR2(20),
     PARTITION BY LIST(sales_state)
    (
     PARTITION sales_west VALUES('California', 'Hawaii'),
     PARTITION sales_east VALUES ('New York', 'Virginia', 'Florida')
     );
    
  • 按哈希分区(如果我们不确定有多少数据映射到给定范围内)

     CREATE TABLE sales_hash
     (salesman_id  NUMBER(5), 
     salesman_name VARCHAR2(30), 
     ) 
     PARTITION BY HASH(salesman_id) 
     PARTITIONS 2 
     STORE IN (ts1, ts2);
    
  • 也可以使用子分区

答案 1 :(得分:1)

I Oracle 11您可以通过在插入/更新任何数据时自动添加分区的方式定义分区表。那你就不用关心了。

DDL是这样的:

CREATE TABLE T_TABLE
(
  LOG_PROC_ID      NUMBER                       NOT NULL,
....
)
TABLESPACE MY_TABLESPACE 
PARTITION BY RANGE (LOG_PROC_ID) INTERVAL (10000)