[20150707]数据泵造成的数据损失.txt

[20150707]数据泵造成的数据损失.txt

--参看链接,重复测试http://yangtingkun.net/?p=652

SCOTT@test> @ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.3.0     Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

CREATE TABLE T_PART PARTITION BY RANGE (CREATED)
(PARTITION P1 VALUES LESS THAN (TO_DATE('2012-1-1', 'YYYY-MM-DD')),
PARTITION P2 VALUES LESS THAN (TO_DATE('2012-2-1', 'YYYY-MM-DD')),
PARTITION P3 VALUES LESS THAN (TO_DATE('2012-3-1', 'YYYY-MM-DD')),
PARTITION P4 VALUES LESS THAN (TO_DATE('2012-4-1', 'YYYY-MM-DD')),
PARTITION PMAX VALUES LESS THAN (MAXVALUE))
AS SELECT * FROM DBA_OBJECTS;

SCOTT@test> select count(*) from t_part partition (p4);
  COUNT(*)
----------
        31

SCOTT@test> select count(*) from t_part partition (p3);
  COUNT(*)
----------
         9

SCOTT@test> select count(*) from t_part partition (pmax);
  COUNT(*)
----------
     10005

SCOTT@test> select count(*) from t_part partition (p1);
  COUNT(*)
----------
     67590

SCOTT@test> select count(*) from t_part partition (p2);
  COUNT(*)
----------
       115

$ expdp scott/btbtms directory=DATA_PUMP_DIR dumpfile=t_part.dmp logfile=t_part.log tables=t_part:p3,t_part:p4
Export: Release 11.2.0.3.0 - Production on Tue Jul 7 09:00:25 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SCOTT"."SYS_EXPORT_TABLE_01":  scott/a****** directory=DATA_PUMP_DIR dumpfile=t_part.dmp logfile=t_part.log tables=t_part:p3,t_part:p4
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 16 MB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "SCOTT"."T_PART":"P3"                       11.49 KB       9 rows
. . exported "SCOTT"."T_PART":"P4"                       13.89 KB      31 rows
Master table "SCOTT"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SCOTT.SYS_EXPORT_TABLE_01 is:
  /u01/app/oracle11g/admin/test/dpdump/t_part.dmp
Job "SCOTT"."SYS_EXPORT_TABLE_01" successfully completed at 09:00:50

$ impdp scott/btbtms directory=DATA_PUMP_DIR dumpfile=t_part.dmp logfile=t_part_imp.log tables=t_part:p3 table_exists_action=replace
Import: Release 11.2.0.3.0 - Production on Tue Jul 7 09:02:15 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SCOTT"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "SCOTT"."SYS_IMPORT_TABLE_01":  scott/a******* directory=DATA_PUMP_DIR dumpfile=t_part.dmp logfile=t_part_imp.log tables=t_part:p3 table_exists_action=replace
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "SCOTT"."T_PART":"P3"                       11.49 KB       9 rows
Job "SCOTT"."SYS_IMPORT_TABLE_01" successfully completed at 09:02:20

虽然导入的时候仅指定了一个分区,但是Oracle并不会对这一个分区执行TRUNCATE操作,而是将整个表DROP掉,然后利用数据泵中的源数
据重建。

SCOTT@test> select count(*) from t_part partition (p1);
  COUNT(*)
----------
         0

SCOTT@test> select count(*) from t_part partition (p2);
  COUNT(*)
----------
         0

SCOTT@test> select count(*) from t_part partition (p3);
  COUNT(*)
----------
         9

SCOTT@test> select count(*) from t_part partition (p4);
  COUNT(*)
----------
         0

SCOTT@test> select count(*) from t_part partition (pmax);
  COUNT(*)
----------
         0

这个表中只有导入的分区记录存在,原则上impdp对应的数据泵导出文件中的记录也都是可以恢复的,但是表中其他的分区数据则完全丢
失。

而且Oracle在删除的时候还使用PURGE选项,使得分区表在删除的时候并没有被放到回收站中,而是直接从数据库中被清除。从这一点上
讲,Oracle应该去掉PURGE语句,或者至少给出一个选项,毕竟DROP TABLE对于系统来说有风险的。

--比较正确的做法是:
SCOTT@test> delete from t_part partition(p3);
9 rows deleted.

SCOTT@test> commit ;
Commit complete.

$ impdp scott/btbtms directory=DATA_PUMP_DIR dumpfile=t_part.dmp logfile=t_part_imp.log tables=t_part:p3 table_exists_action=append
Import: Release 11.2.0.3.0 - Production on Tue Jul 7 09:15:25 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SCOTT"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "SCOTT"."SYS_IMPORT_TABLE_01":  scott/a******* directory=DATA_PUMP_DIR dumpfile=t_part.dmp logfile=t_part_imp.log tables=t_part:p3 table_exists_action=append
Processing object type TABLE_EXPORT/TABLE/TABLE
Table "SCOTT"."T_PART" exists. Data will be appended to existing table but all dependent metadata will be skipped due to table_exists_action of append
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "SCOTT"."T_PART":"P3"                       11.49 KB       9 rows
Job "SCOTT"."SYS_IMPORT_TABLE_01" successfully completed at 09:15:31

SCOTT@test> select count(*) from t_part partition (p4);
  COUNT(*)
----------
        31

SCOTT@test> select count(*) from t_part partition (p1);
  COUNT(*)
----------
     67590

SCOTT@test> select count(*) from t_part partition (p2);
  COUNT(*)
----------
       115

SCOTT@test> select count(*) from t_part partition (p3);
  COUNT(*)
----------
         9

SCOTT@test> select count(*) from t_part partition (pmax);
  COUNT(*)
----------
     10005

时间: 2024-10-23 18:20:21

[20150707]数据泵造成的数据损失.txt的相关文章

[20150729]数据泵造成的数据损失2.txt

[20150729]数据泵造成的数据损失2.txt --前一阵子,重复测试: http://blog.itpub.net/267265/viewspace-1725204/ --参看链接,重复测试http://yangtingkun.net/?p=652 1.建立测试环境: SCOTT@test> @ver1 PORT_STRING                    VERSION        BANNER ------------------------------ ----------

数据泵expdp/impdp工具的使用:

数据泵expdp/impdp工具的使用: 建立数据泵目录 使用数据泵需要先建directory create directory dump_scott as'/home/oracle/dump/scott' 查看建立的目录 Select * from dba_directories 赋权 Grant read,write on directory dump_scott toscott   导出案例1,按表导出 expdp scott/tiger directory=dump_scottdumpf

数据泵 EXPDP 导出工具的使用

--================================= --数据泵 EXPDP 导出工具的使用 --=================================       对于Oracle 数据库之间的导入导出,可以使用Oracle提供的导入导出工具EXP/IMP来实现.EXP/IMP是Oracle早期提供的数据导入导出工具.在Oracle 10g 中,提供了高速导入导出数据泵IMPDP,EXPDP,本文主要讲述EXPDP的用法.     关于IMPDP的用法,请参照:数

数据泵IMPDP 导入工具的使用

--================================= --数据泵IMPDP 导入工具的使用 --=================================         数据的导入导出时数据库经常处理的作业之一,Oracle 提供了IMP和IMPDP以及SQL*Loader等工具来完成数据的导入工作,其中IMP服务于早期的9i之前的版本,在10g及后续版本,Oracle 提供了数据泵高速导入工具,本文主要介绍IMPDP的使用方法,关于高速导出工具请参照:数据泵EXPD

Oracle11g中数据的倒库和入库操作以及高版本数据导入低版本数据可能引发的问题

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 在10g之前,传统的导出和导入分别使用EXP工具和IMP工具,从10g开始,不仅保留了原有的EXP和IMP工具,还提供了数据泵导出导入工具EXPDP和IMPDP.所以在11G的倒库和入库方式中,我们也有两种方式可以选择:传统模式和数据泵模式. 传统模式又分为:常规导入导出和直接导入导出. 下面以导出数据为例,分别介绍各自导出原理. 1.1简述各导入导出方式的

[20130415]数据泵与db link.txt

[20130415]数据泵与db link.txt 数据泵是10g以后采用的新特性,按照一些介绍速度比exp/imp快.以前我总是成对的使用它,也就是先expdp导出数据,然后再传输到新的服务器,然后在impdp导入数据,这样的过程明显不是很快,特别是导出文件很大的情况下,速度并没有感觉快到哪里,如果数据泵加上db link,这样仅仅使用impdp导入就可以,省去了前面的步骤. 自己做一个测试: 测试数据从10g服务器到11g的测试机的导入情况: 1.测试环境与配置如下: --测试机器A(11g

[20140918]数据泵与外部文件.txt

[20140918]数据泵与外部文件.txt --昨天帮别人导入一些数据,看文件名称以为是使用exp/expdp导出的,测试不对!还好压缩包里面有一个文档,才知道使用数据泵的外部文件格式. --自己晚上回去看了一些文档,做了一些测试: SCOTT@test> @ver BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterpr

【导入导出】数据泵 job_name参数的使用

数据泵的工作流程如下:        (1)在命令行执行命令        (2)expdp/impd 命令调用DBMS_DATAPUMP PL/SQL包. 这个API提供高速的导出导入功能.        (3)当data 移动的时候, Data Pump 会自动选择direct path 或者external table mechanism 或者 两种结合的方式. 当metadata(对象定 义) 移动的时候,Data Pump会使用DBMS_METADATA PL/SQL包. Metada

c++ 编程问题-.txt文件中删除某些数据而保留其他数据

问题描述 .txt文件中删除某些数据而保留其他数据 比如我有个.txt文件,名字叫aaa 里面有数据是这样的: 第一行11111 第二行23222 第三行32562 那么怎么才能用C++的代码实现把第二行删除掉,而保留第一行和第三行呢? 求代码,最后带一些解析 解决方案 先用ostream对象把文件读到一个缓冲区,然后对缓冲区修改,最后将缓冲区用istream对象写入到文件就行了,主要是对缓冲区的操作而已