业务场景:从Windows上的Oracle数据库将某个用户下的所有数据迁移到Linux上的Oracle数据库下的另一个用户中。其中两个数据库版本是一致的,均为11.2.0.1。可以看成是两个Oracle数据库下用户数据的导入导出。

数据导入导出的流程就是使用expdp导出数据,然后使用impdp导入数据。(使用expdp/impdp需要Oracle版本不低于10g)

expdp导出某个用户下的所用数据

  1. 在windows系统上创建一个文件夹,用于存放导出的数据。本文创建的文件夹位置为:D:\oracle1\expdata
  2. 打开命令行,进入sqlplus:sqlplus / as sysdba
  3. 在Oracle中创建一个逻辑目录与刚刚的文件夹对应:create or replace directory expdir as 'D:\oracle1\expdata';
  4. 查看逻辑目录是否创建成功:select * from dba_directories;
  5. 给需要导出的用户授权目录:grant read,write on directory expdir to 用户名;
  6. 退出sqlplus,在命令行界面执行导出命令:expdp 用户名/密码 directory=expdir dumpfile=expdata.dmp
  7. 生成的数据文件就在D:\oracle1\expdata下

impdp导入用户数据

  1. 在linux系统上创建一个文件夹,用于存放导出的数据。本文创建的文件夹位置为:/media/e8488e1b-e8f6-4ae8-8b12-b0b398689393/oracle/expdata
  2. 将生成的数据文件从windows系统中迁移到linux系统中的expdata中
  3. 进入sqlplus:sqlplus / as sysdba
  4. 在Oracle中创建一个逻辑目录与刚刚的文件夹对应:create or replace directory expdir as '/media/e8488e1b-e8f6-4ae8-8b12-b0b398689393/oracle/expdata';
  5. 查看逻辑目录是否创建成功:select * from dba_directories;
  6. 给需要导入数据的用户赋予权限:grant read,write on directory expdir to jeecgtestuser;
  7. 退出sqlplus,在命令行界面执行命令:impdp 新用户名/新用户密码@orcl remap_schema=用户名:新用户名 directory=expdir dumpfile=expdata.dmp logfile=impdp.log; (这里的用户名是导出数据的用户,新用户是需要导入数据的用户)

tips:如果是导入的同一个用户,命令为:impdp 用户名/用户密码@orcl schemas=用户名 directory=expdir dumpfile=expdata.dmp logfile=impdp.log;

遇到的错误

SP2-0734: 未知的命令开头"exp ." - 忽略了剩余的行
• 不是在sqlplus里面执行,而是在命令行窗口执行
EXP-00104: 不支持数据类型为 BINARY_DOUBLE 的列(使用exp导出时报错)
• 只能通过expdp来导入导出
ORA-39002: invalid operation ORA-39070: Unable to open the log file. ORA-29283
• 参考:https://blog.csdn.net/m0_37814112/article/details/78119212

UDE-12541: 操作产生了 ORACLE 错误 12541
• 直接将impdp 用户名/密码@ip地址/orcl

对于不同的导出要求(比如按表名导出,按表空间导出等),可参考: https://www.cnblogs.com/farmer-y/p/5888432.html

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐