SQL> alter table table_m5 rename to table_m5_old; ---重命名原表
(4)将表结构、索引、约束的DDL语句全部复制:
sql复制代码
SQL> select dbms_metadata.get_ddl('TABLE','TABLE_M5_OLD','USERNAME') from dual;
SQL> select TABLE_NAME,TABLE_TYPE,INDEX_NAME from dba_indexes where table_name='TABLE_M5_OLD';
SQL> select TABLE_NAME,CONSTRAINT_NAME,CONSTRAINT_TYPE from dba_constraints where table_name='TABLE_M5_OLD';
SQL> select dbms_metadata.get_ddl('INDEX','索引名','USERNAME') from dual;
SQL> select dbms_metadata.get_ddl('CONSTRAINT','约束名','USERNAME') from dual;
(5)创建hash分区表
sql复制代码
SQL>
CREATE TABLE "USERNAME"."TABLE_M5"
("ID" NUMBER(20,0) NOT NULL ENABLE,
"NAME" VARCHAR2(20) NOT NULL ENABLE,
"AGE" NUMBER(10,0) NOT NULL ENABLE,
"SEX" VARCHAR2(10) NOT NULL ENABLE,
"CARDID" NUMBER(30,0) NOT NULL ENABLE,
"JOINDATE" DATE NOT NULL ENABLE,
"REGION" VARCHAR2(12) NOT NULL ENABLE,
"TEL" VARCHAR2(12) NOT NULL ENABLE,
"EMAIL" VARCHAR2(30) NOT NULL ENABLE,
"RECOMMEND" VARCHAR2(10),
"IDENTIFIER" VARCHAR2(100),
PRIMARY KEY ("ID")
)
partition by hash(cardid)
partitions 2;
SQL> alter table TABLE_M5 add primary key (ID); ---通过plsql查看的旧表结构,但主键创建在最下面,一定要创建
(6)导入表,验证数据
oracle@11g \~\]$ impdp \\"/ as sysdba\\" directory=bk dumpfile=expdp_orcl_table_01.dmp,expdp_orcl_table_02.dmp table_exists_action=append
sql复制代码
SQL> select * from dba_part_tables where table_name='TABLE_M5'; ---记录分区的表的信息
SQL> select * from DBA_tab_partitions where table_name='TABLE_M5'; ---记录表的分区的信息
SQL> select * from dba_part_indexes where table_name='TABLE_M5'; ---查询分区的索引信息(原普通索引还在)
SQL> select count(*) from TABLE_M5;
SQL> select count(*) from TABLE_M5 partition(SYS_P221); ---hash分区名自动分配,通过DBA_tab_partitions
SQL> select count(*) from TABLE_M5 partition(SYS_P222); ---hash分区名自动分配,通过DBA_tab_partitions
(7)创建分区索引。
sql复制代码
SQL> create index table_m5_index on table_m5(cardid) local;
SQL> select index_name,status from dba_indexes where table_name='TABLE_M5'; ---N/A:分区索引。分区索引有无有效需要查看dba_ind_partitions视图的status列:usable有效,unusable无效
SQL> select * from dba_part_indexes where table_name='TABLE_M5';
SQL> select * from dba_ind_partitions where index_name='TABLE_M5_INDEX';
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_M5_INDEX';
SQL> select * from dba_indexes where table_name='TABLE_M5'; ---有索引
(2)重命名原表(切记不要删除,便于分区错误后恢复),并创建分区表(与旧表的结构一致)
sql复制代码
SQL> alter table table_m5 rename to table_m5_old; ---重命名原表
(3)将表结构、索引、约束的DDL语句全部复制:
sql复制代码
SQL> select dbms_metadata.get_ddl('TABLE','TABLE_M5_OLD','USERNAME') from dual;
SQL> select TABLE_NAME,TABLE_TYPE,INDEX_NAME from dba_indexes where table_name='TABLE_M5_OLD';
SQL> select TABLE_NAME,CONSTRAINT_NAME,CONSTRAINT_TYPE from dba_constraints where table_name='TABLE_M5_OLD';
SQL> select dbms_metadata.get_ddl('INDEX','索引名','USERNAME') from dual;
SQL> select dbms_metadata.get_ddl('CONSTRAINT','约束名','USERNAME') from dual;
(4)创建间隔分区表****
sql复制代码
SQL>
CREATE TABLE "USERNAME"."TABLE_M5"
("ID" NUMBER(20,0) NOT NULL ENABLE,
"NAME" VARCHAR2(20) NOT NULL ENABLE,
"AGE" NUMBER(10,0) NOT NULL ENABLE,
"SEX" VARCHAR2(10) NOT NULL ENABLE,
"CARDID" NUMBER(30,0) NOT NULL ENABLE,
"JOINDATE" DATE NOT NULL ENABLE,
"REGION" VARCHAR2(12) NOT NULL ENABLE,
"TEL" VARCHAR2(12) NOT NULL ENABLE,
"EMAIL" VARCHAR2(30) NOT NULL ENABLE,
"RECOMMEND" VARCHAR2(10),
"IDENTIFIER" VARCHAR2(100),
PRIMARY KEY ("ID")
)
partition by range(joindate)
interval (numtoyminterval(1,'month') )
(
partition p_001 values less than (to_date('2015-01-01','YYYY-MM-DD')),
partition p_002 values less than (to_date('2015-02-01','YYYY-MM-DD')),
partition p_003 values less than (to_date('2015-03-01','YYYY-MM-DD'))
);
SQL> alter table TABLE_M5 add primary key (ID); ---通过plsql查看的旧表结构,但主键创建在最下面,一定要创建
SQL> insert into table_m5 select * from table_m5_old;
SQL> commit;
SQL> select * from dba_part_tables where table_name='TABLE_M5'; ---记录分区的表的信息
SQL> select * from DBA_tab_partitions where table_name='TABLE_M5'; ---记录表的分区的信息。根据分区字段joindate的时间,自动创建按1个月创建分区
SQL> select count(*) from TABLE_M5;
SQL> select count(*) from TABLE_M5 partition(P_001); ---间隔分区名自动分配,通过DBA_tab_partitions
SQL> select count(*) from TABLE_M5 partition(P_002); ---间隔分区名自动分配,通过DBA_tab_partitions
(6)创建分区索引。
sql复制代码
SQL> create index table_m5_index on table_m5(cardid) local;
SQL> select index_name,status from dba_indexes where table_name='TABLE_M5'; ---N/A:分区索引。分区索引有无有效需要查看dba_ind_partitions视图的status列:usable有效,unusable无效
SQL> select * from dba_part_indexes where table_name='TABLE_M5';
SQL> select * from dba_ind_partitions where index_name='TABLE_M5_INDEX';
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_M5_INDEX';
SQL> select dbms_metadata.get_ddl('TABLE','TABLE_M10','USERNAME') from dual; 只需要查看表结构,因为可以通过DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS包的形式将索引、触发器、约束、权限复制,在下面操作
sql复制代码
SQL> CREATE TABLE "USERNAME"."TABLE_M10_LS"
("ID" NUMBER(20,0) NOT NULL ENABLE,
"NAME" VARCHAR2(20) NOT NULL ENABLE,
"AGE" NUMBER(10,0) NOT NULL ENABLE,
"SEX" VARCHAR2(10) NOT NULL ENABLE,
"CARDID" NUMBER(30,0) NOT NULL ENABLE,
"JOINDATE" DATE NOT NULL ENABLE,
"REGION" VARCHAR2(12) NOT NULL ENABLE,
"TEL" VARCHAR2(12) NOT NULL ENABLE,
"EMAIL" VARCHAR2(30) NOT NULL ENABLE,
"RECOMMEND" VARCHAR2(10),
"IDENTIFIER" VARCHAR2(100),
PRIMARY KEY ("ID"))
partition by range (ID)
(
partition P10000 values less than (10010000),
partition P20000 values less than (10020000),
partition P30000 values less than (10030000),
partition P40000 values less than (10040000),
partition P50000 values less than (10050000),
partition P_MAX values less than (MAXVALUE)
);
SQL> select count(*) from TABLE_M10; ---并对比TABLE_M10_LS数据查看是否缺少
sql复制代码
SQL> select * from dba_part_tables where table_name='TABLE_M10'; ---记录分区的表的信息
SQL> select * from DBA_tab_partitions where table_name='TABLE_M10'; ---记录表的分区的信息
SQL> select * from dba_part_indexes where table_name='TABLE_M10'; ---查询分区的索引信息(原普通索引还在)
SQL> select count(*) from TABLE_M10 partition(P10000); ---range分区名,通过DBA_tab_partitions
SQL> select count(*) from TABLE_M10 partition(P20000); ---range分区名,通过DBA_tab_partitions
(8)创建分区索引。
sql复制代码
SQL> create index table_m5_index on table_m5(cardid) local;
SQL> select index_name,status from dba_indexes where table_name='TABLE_M5'; ---N/A:分区索引。分区索引有无有效需要查看dba_ind_partitions视图的status列:usable有效,unusable无效
SQL> select * from dba_part_indexes where table_name='TABLE_M5';
SQL> select * from dba_ind_partitions where index_name='TABLE_M5_INDEX';
SQL> select index_name,partition_name,status from dba_ind_partitions where index_name='TABLE_M5_INDEX';