您的位置:首页 > 数据库 > Oracle

Oracle 分区表数据的导入与导出(1)

2012-12-17 22:17 585 查看
[align=left]--****************************[/align]
[align=left]-- 导入导出 Oracle 分区表数据[/align]
[align=left]--****************************[/align]
[align=left]导入导入Oracle 分区表数据是Oracle DBA 经常完成的任务之一。分区表的导入导出同样普通表的导入导出方式,只不过导入导出需要考[/align]
[align=left]虑到分区的特殊性,如分区索引,将分区迁移到普通表,或使用原始分区表导入到新的分区表。下面将描述使用imp/exp,impdp/expdp导入导出[/align]
[align=left]分区表数据。[/align]
[align=left]有关分区表的特性请参考:[/align]
[align=left]Oracle 分区表[/align]
[align=left]SQL server 2005 切换分区表[/align]
[align=left]SQL server 2005 基于已存在的表创建分区[/align]
[align=left]有关导入导出工具请参考:[/align]
[align=left]数据泵EXPDP 导出工具的使用[/align]
[align=left]数据泵IMPDP 导入工具的使用[/align]
[align=left]有关导入导出的官方文档请参考:[/align]
[align=left]Original Export and Import[/align]
[align=left]一、分区级别的导入导出[/align]
[align=left]可以导出一个或多个分区,也可以导出所有分区(即整个表)。[/align]
[align=left]可以导入所有分区(即整个表),一个或多个分区以及子分区。[/align]
[align=left]对于已经存在数据的表,使用imp导入时需要使用参数IGNORE=y,而使用impdp,加table_exists_action=append | replace 参数。[/align]
[align=left]二、创建演示环境[/align]
[align=left]1.查看当前数据库的版本[/align]

[align=left]SQL> select * from v$version where rownum < 2;[/align]
[align=left]BANNER[/align]
[align=left]--------------------------------------------------------------------------------[/align]
[align=left]Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production[/align]

[align=left]2.创建一个分区表[/align]

[align=left]SQL> alter session set nls_date_format='yyyy-mm-dd';[/align]
[align=left]SQL> CREATE TABLE tb_pt ([/align]
[align=left]sal_date DATE NOT NULL,[/align]
[align=left]sal_id NUMBER NOT NULL,[/align]
[align=left]sal_row NUMBER(12) NOT NULL)[/align]
[align=left]partition by range(sal_date)[/align]
[align=left]([/align]
[align=left]partition sal_11 values less than(to_date('2012-01-01','YYYY-MM-DD')) ,[/align]
[align=left]partition sal_12 values less than(to_date('2013-01-01','YYYY-MM-DD')) ,[/align]
[align=left]partition sal_13 values less than(to_date('2014-01-01','YYYY-MM-DD')) ,[/align]
[align=left]partition sal_14 values less than(to_date('2015-01-01','YYYY-MM-DD')) ,[/align]
[align=left]partition sal_15 values less than(to_date('2016-01-01','YYYY-MM-DD')) ,[/align]
[align=left]partition sal_16 values less than(to_date('2017-01-01','YYYY-MM-DD')) ,[/align]
[align=left]partition sal_other values less than (maxvalue)[/align]
[align=left]) nologging;[/align]

[align=left]3.创建一个唯一索引[/align]

[align=left]CREATE UNIQUE INDEX tb_pt_ind1 [/align]
[align=left]ON tb_pt(sal_date) nologging;[/align]

[align=left]4.为分区表生成数据[/align]

[align=left]SQL> INSERT INTO tb_pt[/align]
[align=left]SELECT TRUNC(SYSDATE)+ROWNUM, dbms_random.random, ROWNUM[/align]
[align=left]FROM dual[/align]
[align=left]CONNECT BY LEVEL<=5000;[/align]
[align=left]SQL> commit;[/align]
[align=left]SQL> select count(1) from tb_pt partition(sal_11);[/align]
[align=left]COUNT(1)[/align]
[align=left]----------[/align]
[align=left]300[/align]
[align=left]SQL> select count(1) from tb_pt partition(sal_other);[/align]
[align=left]COUNT(1)[/align]
[align=left]----------[/align]
[align=left]2873[/align]
[align=left]SQL> select * from tb_pt partition(sal_12) where rownum < 3;[/align]
[align=left]SAL_DATE SAL_ID SAL_ROW[/align]
[align=left]--------- ---------- ----------[/align]
[align=left]01-JAN-12 -1.356E+09 301[/align]
[align=left]02-JAN-12 -761530183 302[/align]

[align=left]三、使用exp/imp导出导入分区表数据[/align]
[align=left]1.导出整个分区表[/align]
[align=left][oracle@node1 ~]$ exp scott/tiger file='/u02/dmp/tb_pt.dmp' log='/u02/dmp/tb_pt.log' tables=tb_pt[/align]
[align=left]Export: Release 11.2.0.1.0 - Production on Wed Mar 9 13:52:18 2011[/align]
[align=left]Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.[/align]
[align=left]Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production[/align]
[align=left]With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,[/align]
[align=left]Data Mining and Real Application Testing o[/align]
[align=left]Export done in US7ASCII character set and AL16UTF16 NCHAR character set[/align]
[align=left]server uses ZHS16GBK character set (possible charset conversion)[/align]
[align=left]About to export specified tables via Conventional Path ...[/align]
[align=left]. . exporting table TB_PT[/align]
[align=left]. . exporting partition SAL_11 300 rows exported[/align]
[align=left]. . exporting partition SAL_12 366 rows exported[/align]
[align=left]. . exporting partition SAL_13 365 rows exported[/align]
[align=left]. . exporting partition SAL_14 365 rows exported[/align]
[align=left]. . exporting partition SAL_15 365 rows exported[/align]
[align=left]. . exporting partition SAL_16 366 rows exported[/align]
[align=left]. . exporting partition SAL_OTHER 2873 rows exported[/align]
[align=left]EXP-00091: Exporting questionable statistics.[/align]
[align=left]EXP-00091: Exporting questionable statistics.[/align]
[align=left]Export terminated successfully with warnings.[/align]
[align=left][oracle@node1 ~]$ oerr exp 00091[/align]
[align=left]00091, 00000, "Exporting questionable statistics."[/align]
[align=left]// *Cause: Export was able export statistics, but the statistics may not be[/align]
[align=left]// usuable. The statistics are questionable because one or more of[/align]
[align=left]// the following happened during export: a row error occurred, client[/align]
[align=left]// character set or NCHARSET does not match with the server, a query[/align]
[align=left]// clause was specified on export, only certain partitions or[/align]
[align=left]// subpartitions were exported, or a fatal error occurred while[/align]
[align=left]// processing a table.[/align]
[align=left]// *Action: To export non-questionable statistics, change the client character[/align]
[align=left]// set or NCHARSET to match the server, export with no query clause,[/align]
[align=left]// export complete tables. If desired, import parameters can be[/align]
[align=left]// supplied so that only non-questionable statistics will be imported,[/align]
[align=left]// and all questionable statistics will be recalculated.[/align]
[align=left]在上面的导出中出现了错误提示,即EXP-00091,该错误表明exp工具所在的环境变量中的NLS_LANG与DB中的NLS_CHARACTERSET不一致[/align]
[align=left]尽管该错误对最终的数据并无影响,但调整该参数来避免异常还是有必要的。因此需要将其设置为一致即可解决上述的错误提示。[/align]

[align=left]SQL> select userenv('language') from dual;[/align]
[align=left]USERENV('LANGUAGE')[/align]
[align=left]----------------------------------------------------[/align]
[align=left]AMERICAN_AMERICA.ZHS16GBK[/align]
[align=left][oracle@node1 ~]$ export NLS_LANG='AMERICAN_AMERICA.ZHS16GBK' [/align]

[align=left]经过上述设置之后再次导出正常,过程略。[/align]
[align=left]2.导出单个分区[/align]
[align=left][oracle@node1 ~]$ exp scott/tiger file='/u02/dmp/tb_pt_sal_16.dmp' log='/u02/dmp/tb_pt_sal_16.log' tables=tb_pt:sal_16[/align]
[align=left]Export: Release 11.2.0.1.0 - Production on Wed Mar 9 13:52:38 2011[/align]
[align=left]Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.[/align]
[align=left]Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production[/align]
[align=left]With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,[/align]
[align=left]Data Mining and Real Application Testing o[/align]
[align=left]Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set[/align]
[align=left]About to export specified tables via Conventional Path ...[/align]
[align=left]. . exporting table TB_PT[/align]
[align=left]. . exporting partition SAL_16 366 rows exported[/align]
[align=left]EXP-00091: Exporting questionable statistics.[/align]
[align=left]EXP-00091: Exporting questionable statistics.[/align]
[align=left]Export terminated successfully with warnings[/align]
[align=left]在上面的导出过程中再次出现了统计信息错误的情况,因此采取了对该对象收集统计信息,但并不能解决该错误,但在exp命令行中增[/align]
[align=left]加statistics=none即可,如下:[/align]
[align=left][oracle@node1 ~]$ exp scott/tiger file='/u02/dmp/tb_pt_sal_16.dmp' log='/u02/dmp/tb_pt_sal_16.log' /[/align]
[align=left]> tables=tb_pt:sal_16 statistics=none[/align]
[align=left]如果要导出多个分区,则在tables参数中增加分区数。如:tables=(tb_pt:sal_15,tb_pt:sal_16)[/align]
[align=left]3.使用imp工具生成创建分区表的DDL语句[/align]
[align=left][oracle@node1 ~]$ imp scott/tiger tables=tb_pt indexfile='/u02/dmp/cr_tb_pt.sql' /[/align]
[align=left]> file='/u02/dmp/tb_pt.dmp' ignore=y[/align]
[align=left]Export: Release 11.2.0.1.0 - Production on Wed Mar 9 13:54:38 2011[/align]
[align=left]Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.[/align]
[align=left]Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production[/align]
[align=left]With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,[/align]
[align=left]Data Mining and Real Application Testing o[/align]
[align=left]Export file created by EXPORT:V11.02.00 via conventional path[/align]
[align=left]import done in US7ASCII character set and AL16UTF16 NCHAR character set[/align]
[align=left]import server uses ZHS16GBK character set (possible charset conversion)[/align]
[align=left]. . skipping partition "TB_PT":"SAL_11"[/align]
[align=left]. . skipping partition "TB_PT":"SAL_12"[/align]
[align=left]. . skipping partition "TB_PT":"SAL_13"[/align]
[align=left]. . skipping partition "TB_PT":"SAL_14"[/align]
[align=left]. . skipping partition "TB_PT":"SAL_15"[/align]
[align=left]. . skipping partition "TB_PT":"SAL_16"[/align]
[align=left]. . skipping partition "TB_PT":"SAL_OTHER"[/align]
[align=left]Import terminated successfully without warnings.[/align]
[align=left]4.导入单个分区(使用先前备份的单个分区导入文件)[/align]

[align=left]SQL> alter table tb_pt truncate partition sal_16; --导入前先将分区实现truncate[/align]
[align=left]Table truncated.[/align]
[align=left]SQL> select count(1) from tb_pt partition(sal_16);[/align]
[align=left]COUNT(1)[/align]
[align=left]----------[/align]
[align=left]0[/align]

[align=left]SQL> ho imp scott/tiger tables=tb_pt:sal_16 file='/u02/dmp/tb_pt_sal_16.dmp' ignore=y[/align]
[align=left]Export: Release 11.2.0.1.0 - Production on Wed Mar 9 13:55:39 2011[/align]
[align=left]Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.[/align]
[align=left]Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production[/align]
[align=left]With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,[/align]
[align=left]Data Mining and Real Application Testing o[/align]
[align=left]Export file created by EXPORT:V11.02.00 via conventional path[/align]
[align=left]import done in US7ASCII character set and AL16UTF16 NCHAR character set[/align]
[align=left]import server uses ZHS16GBK character set (possible charset conversion)[/align]
[align=left]. importing SCOTT's objects into SCOTT[/align]
[align=left]. importing SCOTT's objects into SCOTT[/align]
[align=left]. . importing partition "TB_PT":"SAL_16"[/align]
[align=left]IMP-00058: ORACLE error 1502 encountered[/align]
[align=left]ORA-01502: index 'SCOTT.TB_PT_IND1' or partition of such index is in unusable state[/align]
[align=left]Import terminated successfully with warnings.[/align]
[align=left]收到了ORA-01502错误,下面查看索引的状态,并对其重建索引后再执行导入[/align]

[align=left]SQL> select index_name ,status from dba_indexes where table_name='TB_PT'; --查看索引的状态[/align]
[align=left]INDEX_NAME STATUS[/align]
[align=left]------------------------------ --------[/align]
[align=left]TB_PT_IND1 UNUSABLE[/align]
[align=left]SQL> alter index TB_PT_IND1 rebuild online; --重建索引[/align]
[align=left]Index altered.[/align]

[align=left]SQL> ho imp scott/tiger tables=tb_pt:sal_16 file='/u02/dmp/tb_pt_sal_16.dmp' ignore=y --再次导入成功[/align]
[align=left]Export: Release 11.2.0.1.0 - Production on Wed Mar 9 13:56:15 2011[/align]
[align=left]Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.[/align]
[align=left]Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production[/align]
[align=left]With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,[/align]
[align=left]Data Mining and Real Application Testing o[/align]
[align=left]Export file created by EXPORT:V11.02.00 via conventional path[/align]
[align=left]import done in US7ASCII character set and AL16UTF16 NCHAR character set[/align]
[align=left]import server uses ZHS16GBK character set (possible charset conversion)[/align]
[align=left]. importing SCOTT's objects into SCOTT[/align]
[align=left]. importing SCOTT's objects into SCOTT[/align]
[align=left]. . importing partition "TB_PT":"SAL_16" 366 rows imported[/align]
[align=left]Import terminated successfully without warnings.[/align]

[align=left]SQL> select count(*) from tb_pt partition(sal_16);[/align]
[align=left]COUNT(*)[/align]
[align=left]----------[/align]
[align=left]366[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Oracle