当前位置:  数据库>用crontabl自动执行exp为何出错? iis7站长之家

EXP导出时DML操作对其导出数据是否有影响

    来源: 互联网  发布时间:2017-06-11

    本文导语: 一、概述 随着数据库版本的升级及业务测试的增加,数据库或者数据迁移也成了数据库管理者们经常的工作之一。那么对于要求严格的数据,针对大数据表,在你导出时如果有人做了操作,这个操作是否也会被导出呢?由于个...

一、概述

随着数据库版本的升级及业务测试的增加,数据库或者数据迁移也成了数据库管理者们经常的工作之一。那么对于要求严格的数据,针对大数据表,在你导出时如果有人做了操作,这个操作是否也会被导出呢?由于个人能力有限,想要深究逻辑备份的话,估计还需要一些时日,暂时只做了一个小实验测试,如大家有其他方法、更全面说明,欢迎拍砖。

二、操作过程

以下实验操作流程为每执行一次逻辑导出时都执行一次DML操作。操作语句如下(数据库版本10.2.0.5):

用户为firsoul,操作的表有age、big_table、test,下图为各表的初始数据


SQL> show user

USER is "FIRSOUL"

SQL> select * from tab;

SQL> select table_name,NUM_ROWS from user_tables;

 

TABLE_NAME                      NUM_ROWS

------------------------------ ----------

EMP                                    14

DEPT                                    4

TEST                                    1

AGE                                    1

BIG_TABLE                        3000000
 

第一次操作:


exp firsoul/firsoul tables=BIG_TABLE CONSISTENT=Y file=exp_table.dmp log=exp_table.log
 insert into age values(22,'mingli');

delete from big_table where id=7;

insert into test values(2,'shandong');

commit;
 

第二次操作:

 


exp firsoul/firsoul  file=exp_user.dmp log=exp_user.log consistent=y grants=y
 insert into age values(24,'mengmeng');

delete from big_table where id=14;

insert into test values(3,'china');

commit;
 

第三次操作:


exp firsoul/firsoul tables=BIG_TABLE file=exp_table2.dmp log=exp_table2.log
 insert into age values(24,'xiaochi');

delete from big_table where id=21;

insert into test values(4,'dezhou');

commit;
 

第四次操作:


exp firsoul/firsoul  file=exp_user2.dmp log=exp_user2.log grants=y
 insert into age values(25,'fengyin');

delete from big_table where id=28;

insert into test values(5,'jinan');

commit;
 

第五次操作:


expdp firsoul/firsoul directory=dir_dmp dumpfile=expdp_table.dmp tables=BIG_TABLE logfile=expdp_table.log
 insert into age values(30,'shubin');

delete from big_table where id=35;

insert into test values(6,'shizhong');

commit;
 

第六次操作:


expdp firsoul/firsoul directory=dir_dmp dumpfile=expdp_user.dmp SCHEMAS=firsoul logfile=expdp_user.log
 insert into age values(32,'liupan');

delete from big_table where id=42;

insert into test values(7,'tianqiao');

commit;
 

得出结果如下所示(“-”为少几行,“+”为多几行): 

执行DML次数

age

big_table

test

备注

1

 

0

 

导出表(CONSISTENT=y)

2

+2

-2

+2

导出用户(CONSISTENT=y)

3

 

-2

 

导出表(CONSISTENT=n)

4

+3

-3

+4

导出用户(CONSISTENT=n)

5

 

-5

 

expdp 导出表

6

+6

-6

+6

expdp 导出用户

通过以上数据,我们可以看出

1、exp导出,参数CONSISTENT=y,单独导出表big_table,数据无变化,导出用户时,数据有变化。

2、exp导出,参数CONSISTENT=n,单独导出表big_table,数据无变化,导出用户数据时,表age、big_table没变化,表test多一行,exp导出按照表的首字母排序,在导出时,我们执行DML语句(第四次操作)时,age已导出,big_table正在导出,而test还为等待导出。由此看出,exp导出,当表在执行导出时再做DML操作对导出数据无影响。

3、expdp导出时,数据都有变化。expdp导出的表是按照数据从大到小排序

三、总结

这个测试其实很无聊的,而且还有点绕,总结呢,就一点,exp任务开始,当该表已执行逻辑导出操作(执行中或已导出完成),做的任何DML操作对导出数据无影响;当导出任务还未涉及到该表时,所做DML操作影响该表导出数据。一句话,DML操作时间(先后)影响导出表数据。说来,还是对于数据库原理不太明白,希望可以认真看看吧,希望。以上只是个人昏昏欲睡状态下所得出结论,欢迎大家积极拍砖。水平有限,不足之处还望见谅。

Oracle EXP导出报错EXP-00091分析解决

探索Oracle之 EXP/IMP过程中的字符集问题

Oracle EXP imp备份、恢复表空间数据步骤

Oracle 创建自动执行的EXP任务

Oracle 11g 导出表报EXP-00011:table不存在

EXP/imp导出导入数据时报错ORA-12154 无法解析指定的连接标识符


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.lang类strictmath的类成员方法: exp定义及介绍
  • shell执行exp问题
  • java命名空间java.lang类math的类成员方法: exp定义及介绍
  • 请问怎样才能将 String curOp=exp.indexOf(i) 的右边转化成String?
  • 请教:Linux下编译c代码,运行程序时出现undefined symbol exp
  • Oracle数据库EXP/IMP版本的支持列表集合[图文]
  • 用crontabl自动执行exp为何出错?
  • Oracle 管道 解决Exp/Imp大量数据处理问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,