Oracle数据库的导出导入是数据库运维和数据迁移场景下的基础操作,通过官方提供的工具可以快速完成表、用户数据、表空间等内容的备份与还原,适用于开发环境数据同步、生产数据备份恢复等常见需求。

Oracle导出导入工具简介
Oracle默认提供了exp(导出)和imp(导入)两个命令行工具,这两个工具属于Oracle客户端自带的组件,不需要额外安装,只要配置好Oracle环境变量就可以直接使用。exp工具可以将数据库中的对象和数据导出为二进制的dmp文件,imp工具则可以将dmp文件中的内容还原到目标数据库中。
需要注意的是,exp和imp是较老的传统工具,对于Oracle 10g及以上版本,官方还提供了expdp和impdp数据泵工具,性能更高且支持更多高级功能,但本文先介绍更基础的exp和imp的使用方法。
exp导出操作详解
常用导出参数
exp工具的核心参数如下:
- userid:指定连接的数据库用户和密码,格式为用户名/密码@数据库实例名
- file:指定导出的dmp文件存储路径和名称
- tables:指定要导出的表名,多个表用逗号分隔
- owner:指定要导出的用户,会导出该用户下的所有对象
- full:设置为y时导出整个数据库的所有内容
- rows:设置为y时导出数据,设置为n时只导出表结构
导出示例
以下是几个常见的导出场景示例:
导出指定表
导出scott用户下的emp和dept两张表:
exp userid=scott/tiger@orcl file=/home/oracle/emp_dept.dmp tables=emp,dept
导出指定用户的所有对象
导出scott用户下的所有表、视图、索引等对象:
exp userid=scott/tiger@orcl file=/home/oracle/scott_all.dmp owner=scott
只导出表结构不导出数据
导出scott用户下所有表的结构,不包含数据:
exp userid=scott/tiger@orcl file=/home/oracle/scott_schema.dmp owner=scott rows=n
imp导入操作详解
常用导入参数
imp工具的参数和exp大部分对应,核心参数如下:
- userid:目标数据库的用户名和密码,格式和exp一致
- file:要导入的dmp文件路径
- fromuser:dmp文件中数据的原所属用户
- touser:要将数据导入到的目标用户
- tables:指定要导入的表名,多个表用逗号分隔
- ignore:设置为y时,如果表已经存在则忽略创建表的错误,直接插入数据
导入示例
以下是几个常见的导入场景示例:
导入指定表到原用户
将之前导出的emp和dept表导入到scott用户下:
imp userid=scott/tiger@orcl file=/home/oracle/emp_dept.dmp tables=emp,dept
跨用户导入数据
将scott用户的dmp文件导入到test用户下,需要提前创建test用户并赋予对应权限:
imp userid=test/test123@orcl file=/home/oracle/scott_all.dmp fromuser=scott touser=test
导入时忽略已存在的表
如果目标用户下已经有emp表,导入时直接插入数据不报错:
imp userid=scott/tiger@orcl file=/home/oracle/emp_dept.dmp tables=emp ignore=y
操作注意事项
使用exp和imp工具时需要注意以下几点:
- 导出导入的Oracle版本尽量保持一致,高版本导出的dmp文件可能无法导入到低版本数据库中
- 导入前需要确认目标用户有足够的表空间,避免因为表空间不足导致导入失败
- 如果要导出整个数据库,需要使用有DBA权限的用户执行操作
- 生产环境操作前建议先在小环境测试,确认导出导入的内容符合预期
- 如果数据量较大,建议使用expdp和impdp数据泵工具,效率会比传统exp和imp高很多
常见问题排查
如果导出导入过程中出现错误,可以先查看命令行返回的错误提示,常见错误和解决方法如下:
| 错误提示 | 可能原因 | 解决方法 |
|---|---|---|
| ORA-12154: TNS: 无法解析指定的连接标识符 | 数据库实例名配置错误或者监听未启动 | 检查tnsnames.ora配置,确认数据库监听正常运行 |
| ORA-01017: 用户名/口令无效;登录被拒绝 | 用户名或者密码错误,或者用户被锁定 | 确认用户名密码正确,解锁对应的数据库用户 |
| ORA-01653: 表无法通过 8 (在表空间 USERS 中) 扩展 | 目标表空间不足 | 给目标表空间增加数据文件或者扩展现有数据文件大小 |