oracleerp 2011-03-14
虑到分区的特殊性,如分区索引,将分区迁移到普通表,或使用原始分区表导入到新的分区表。下面将描述使用imp/exp,impdp/expdp导入导出
分区表数据。
一、分区级别的导入导出
可以导出一个或多个分区,也可以导出所有分区(即整个表)。
可以导入所有分区(即整个表),一个或多个分区以及子分区。
对于已经存在数据的表,使用imp导入时需要使用参数IGNORE=y,而使用impdp,加table_exists_action=append | replace 参数。
二、创建演示环境
1.查看当前数据库的版本
SQL> select * from v$version where rownum < 2;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
2.创建一个分区表
SQL> alter session set nls_date_format='yyyy-mm-dd';
SQL> CREATE TABLE tb_pt (
sal_date DATE NOT NULL,
sal_id NUMBER NOT NULL,
sal_row NUMBER(12) NOT NULL)
partition by range(sal_date)
(
partition sal_11 values less than(to_date('2012-01-01','YYYY-MM-DD')) ,
partition sal_12 values less than(to_date('2013-01-01','YYYY-MM-DD')) ,
partition sal_13 values less than(to_date('2014-01-01','YYYY-MM-DD')) ,
partition sal_14 values less than(to_date('2015-01-01','YYYY-MM-DD')) ,
partition sal_15 values less than(to_date('2016-01-01','YYYY-MM-DD')) ,
partition sal_16 values less than(to_date('2017-01-01','YYYY-MM-DD')) ,
partition sal_other values less than (maxvalue)
) nologging;
3.创建一个唯一索引
CREATE UNIQUE INDEX tb_pt_ind1
ON tb_pt(sal_date) nologging;
4.为分区表生成数据
SQL> INSERT INTO tb_pt
SELECT TRUNC(SYSDATE)+ROWNUM, dbms_random.random, ROWNUM
FROM dual
CONNECT BY LEVEL<=5000;
SQL> commit;
SQL> select count(1) from tb_pt partition(sal_11);
COUNT(1)
----------
300
SQL> select count(1) from tb_pt partition(sal_other);
COUNT(1)
----------
2873
SQL> select * from tb_pt partition(sal_12) where rownum < 3;
SAL_DATE SAL_ID SAL_ROW
--------- ---------- ----------
01-JAN-12 -1.356E+09 301
02-JAN-12 -761530183 302