oracle导入导出数据不完整问题

                       oracle数据的导入导出

 

   导入导出出现数据不全的原因是因为当我们导入用户对象之后,把外键约束导入了,如果导入的数据没有按照主表----副表,那么如果先导入副表,副表就导入不进去,从而数据不完整了,解决这个问题就是当我们导入了用户对象的时候,要导入数据之前,先禁止当前用户的外键约束,下面就详细介绍如何保证导入导出数据完整。

 

一:oracle数据的导入导出

1.通过PLSQLdeveloper工具导出用户对象:


把你所需要的用户的用户对象全部导出来。

 

 2.导出用户数据


导出你需要导出的所有用户的用户数据。

 

3.在你的新环境数据库上导入用户对象

4.物化视图的处理

说明:

之前导入库环境的时候就已经导入了物化视图,但是物化视图需要对应的基表有物化视图日志,物化视图日志是导入不了的,所以在部署应用之前我们可以先处理下物化视图的问题,避免后面管理后台出现报表出错的问题。

 


先查看用户abc的所有表:

 

selecttable_name from user_tables;

 

然后可以利用excel表格和Uedit编辑器,拼凑出给所有表添加物化视图日志的命令:

如:

                                                                  上条命令查出的所有表

   固定语法                                                                                               固定语法

creatematerialized view log on    abc        with rowid;

再次导入abc库环境

然后在PLSQL,abc中再次执行 abc.sql 脚本(abc的库环境)

若出现表或视图不存在,就再次执行(因为创建物化视图有依赖关系,没有按顺序创建)

此时,所有物化视图都会创建成功了。

 

 

 

 

5.在新环境数据库上导入用户数据

 

在导入之前先禁止用户的外键约束-------方法如下:

用当前用户通过PLSQLdeveloper登入数据库:

查询当前用户所有表的外键:

SELECT * FROM  USER_CONSTRAINTS
 WHERE CONSTRAINT_TYPE = 'R'

-------------------查看是否所有约束都是enabled


 然后禁止当前用户所有外键:

--先用过命令生成禁止命令:

select 'alter table'||table_name||' disable constraint '||constraint_name||';' fromuser_constraints where constraint_type='R'


把命令粘贴在一个新文本文件中:


然后复制全部到对应的用户里面执行即可禁止外键

 

然后就可以导入数据了:


其他用户同上操作即可。

 

6.数据导入完成之后-----恢复所有用户的外键约束

---先查出恢复用户外键的命令:

select 'alter table '||table_name||' enable constraint'||constraint_name||';' from user_constraints where constraint_type='R'


然后也全部复制到新文本中,再复制到PLSQLdeveloper中执行即可恢复外键。

 

其他用户也这样操作

 

--------完成


 

 二:第二种导入导出方法

PS:用PLSQLdeveloperimpexp)导入导出对于数据量大的话,会比较慢,对于大数据量建议使用expdpimpdp或者RMAN第三方工具。

下面先介绍expdpimpdp吧,这个对导入导出大数据来说很好用:

 

2.1.创建备份目录:

[root@oracle ~]$mkdir /u01/backupfile/                   //root用户创建目录

[root@oracle ~]$chown oracle:oinstall /u01/backupfile/  //root用户授权

 

2.2.定义备份目录以及给用户授权:

 

[oracle@oracle ~]$sqlplus sys AS SYSDBA //root用户下执行命令

 

SQL> create DIRECTORY dmpdir AS '/u01/backupfile';    //指定备份目录

SQL>grant read,write ON DIRECTORY dmpdir TO abc//授权备份用户


 2.3.接下来按用户导出数据:

[oracle@oracle~]$expdp abc/password@orcl  schemas=abc  dumpfile=abc.dmp DIRECTORY=dmpdir

 

2.4.PS:有的时候需要导出单独的表或者数据库:如下

按表名导出:

expdp abc/password@orcl TABLES=emp,deptdumpfile=expdp.dmp DIRECTORY=dmpdir

导出整个数据库:

expdp system/password dmpfile=full.dmp FULL=y DIRECTORY=dmpdir;

 

 2.5.最后导入到指定用户下(这个也是需要先禁止用户的外键约束的

[oracle@oracle~]impdp abc/password directory=dmpdirdumpfile=abc.dmp schemas=abc TABLE_EXISTS_ACTION=append;

 

2.6.对应如果导入单独的表的话:如下

导入数据库:

impdp system/password dumpfile=full.dmp FULL=yDIRECTORY=dmpdir;

导入表:

impdp abc/password DIRECTORY=dmpdir dumpfile=expdp.dmpTABLES=emp,dept;

 

2.7.导入时看相应日志文件



如有错误或疑问欢迎指出和追问

联系邮箱:qrcg92@foxmail.com 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]和引用\[3\]的内容,Oracle数据库的导入导出数据有多种方式。其导出数据可以使用导出查询结果为xlsx格式、使用ODBC导入文本导入提前写好表结构、选择“导出表”和“导入表”的Oracle方法来迁移大量数据,以及直接导出为dmp格式的文件进行备份。而导入数据可以使用传统方式的exp和imp命令执行方式,也可以使用PL/SQL Developer工具实现导入导出表对象,包括导出DMP格式、导入DMP格式、导出sql格式、导入sql格式以及PDE格式等多种方式。具体选择哪种方式取决于数据量大小、数据格式要求以及具体的使用场景。 #### 引用[.reference_title] - *1* *2* [Oracle数据导入导出_数据迁移用](https://blog.csdn.net/linnge/article/details/124705140)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [oracle数据库的导入导出](https://blog.csdn.net/qq_43114229/article/details/127906492)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值