oracle数据的导入导出
导入导出出现数据不全的原因是因为当我们导入用户对象之后,把外键约束导入了,如果导入的数据没有按照主表----副表,那么如果先导入副表,副表就导入不进去,从而数据不完整了,解决这个问题就是当我们导入了用户对象的时候,要导入数据之前,先禁止当前用户的外键约束,下面就详细介绍如何保证导入导出数据完整。
把你所需要的用户的用户对象全部导出来。
2.导出用户数据
导出你需要导出的所有用户的用户数据。
4.物化视图的处理
说明:
之前导入库环境的时候就已经导入了物化视图,但是物化视图需要对应的基表有物化视图日志,物化视图日志是导入不了的,所以在部署应用之前我们可以先处理下物化视图的问题,避免后面管理后台出现报表出错的问题。
先查看用户abc的所有表:
selecttable_name from user_tables;
然后可以利用excel表格和Uedit编辑器,拼凑出给所有表添加物化视图日志的命令:
如:
上条命令查出的所有表
固定语法 固定语法
creatematerialized view log on abc with rowid;
…
…
…
…
再次导入abc库环境
然后在PLSQL,abc中再次执行 abc.sql 脚本(abc的库环境)
若出现表或视图不存在,就再次执行(因为创建物化视图有依赖关系,没有按顺序创建)
此时,所有物化视图都会创建成功了。
在导入之前先禁止用户的外键约束-------方法如下:
用当前用户通过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'
把命令粘贴在一个新文本文件中:
然后复制全部到对应的用户里面执行即可禁止外键
然后就可以导入数据了:
其他用户同上操作即可。
---先查出恢复用户外键的命令:
select 'alter table '||table_name||' enable constraint'||constraint_name||';' from user_constraints where constraint_type='R'
然后也全部复制到新文本中,再复制到PLSQLdeveloper中执行即可恢复外键。
其他用户也这样操作
--------完成
二:第二种导入导出方法
PS:用PLSQLdeveloper(imp,exp)导入导出对于数据量大的话,会比较慢,对于大数据量建议使用expdp和impdp或者RMAN第三方工具。
下面先介绍expdp和impdp吧,这个对导入导出大数据来说很好用:
[root@oracle ~]$mkdir /u01/backupfile/ //用root用户创建目录
[root@oracle ~]$chown oracle:oinstall /u01/backupfile/ //用root用户授权
[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;
如有错误或疑问欢迎指出和追问
联系邮箱:[email protected]