Oracle 数据库备份与还原方式
简介
数据库的导入/导出,即通常所说的数据还原与备份:
- 导入:将
.dmp格式文件从本地导入到数据库服务器。 - 导出:将数据库服务器中的数据导出到本地,生成
.dmp格式文件。
Oracle 导入导出方式及优缺点
传统方式:exp(导出)与 imp(导入)
-
优点
操作简单,客户端即可直接执行,无需登录服务器,降低了服务器操作风险。 -
缺点
导入导出速度较慢,适合数据量较小的场景。若文件超过几个 GB,普通配置的电脑可能需要 4~5 小时。
数据泵方式:expdp(导出)与 impdp(导入)
- 优点
速度快,几个 GB 的数据文件通常在 1~2 小时内完成。 - 缺点
必须在服务器端操作,且需要创建逻辑目录(Directory),对服务器操作需谨慎。
第三方工具
-
优点
封装了导入导出命令,无需手动输入,方便快捷,提高效率。 -
缺点
长期使用可能降低对底层命令原理的理解,产生工具依赖。 -
工具推荐
PL/SQL Developer、Toad、Navicat
特别强调(操作前必读)
术语定义
- 目标数据库:数据即将导入的数据库
- 源数据库:数据导出的数据库
操作前检查清单
- 权限确认
操作者需具备足够的数据库权限(如 DBA 或 EXP_FULL_DATABASE/IMP_FULL_DATABASE)。 - 表空间一致性
目标数据库必须存在与源数据库同名的表空间,否则导入时会报错。 - 提前备份
目标数据库在导入前应做好完整备份,防止数据丢失。 - 磁盘空间
确认目标数据库的磁盘空间充足,必要时需扩充表空间。 - 导入策略
明确是覆盖(replace)、仅插入新数据(append)还是替换部分表(truncate+insert)。 - 版本兼容性
确认源与目标数据库版本是否一致(如 10g 与 11g 可能存在兼容性问题)。 - 字符集
导入导出双方字符集应一致(通常 Oracle 字符集固定,不建议更改)。 - 逻辑目录(数据泵专用)
使用数据泵前,必须在服务器端创建可用的逻辑目录,并验证其有效性。 - 导出文件格式
- Dmp 格式:二进制文件,跨平台,包含权限信息,效率高。
- Sql 格式:文本文件,通用性好,适合小数据量,但无法处理大字段(BLOB、CLOB、LONG)。
实操导入导出
⚠️ 注意事项
- exp/imp:客户端工具,既可在客户端使用,也可在服务端使用。
- expdp/impdp:服务端工具,只能在 Oracle 服务端使用,不能在客户端执行。
传统方式(exp/imp)
命令模板
exp 用户名/密码@地址:端口/服务名 file="导出路径\文件名.dmp" [参数]
imp 用户名/密码@地址:端口/服务名 file="导入路径\文件名.dmp" [参数]
常用参数说明
| 参数 | 说明 |
|---|---|
full=y |
全库导出/导入 |
owner=(用户1,用户2) |
导出指定用户的所有对象 |
tables=(表1,表2) |
导出指定表 |
buffer |
数据缓冲区大小,适当增大可提升导出速度 |
compress |
是否压缩导出文件(y/n) |
query |
导出满足条件的子集(如 query=\"where id>100\") |
示例
# 导出全部实例
exp system/1234@127.0.0.1:1521/orcl file="G:\下载\temp.dmp" full=y
# 导出指定用户(DATA_CL)的表
exp system/1234@127.0.0.1:1521/orcl file="G:\下载\temp.dmp" owner=(DATA_CL)
# 导入
imp system/1234@127.0.0.1:1521/orcl file="G:\下载\temp.dmp" full=y
数据泵方式(expdp/impdp)
步骤概览
- 登录服务器(需 DBA 权限)
- 创建逻辑目录(Directory)
- 创建用户并授权
- 执行导出/导入
详细步骤
-
登录数据库
sqlplus system/密码 -
创建逻辑目录
-- 创建目录(目录路径必须提前在操作系统上创建好) create directory data_path as 'G:\下载'; -- 查询已创建的目录 select * from dba_directories; -- 删除目录(如需更换路径) drop directory data_path;Linux 环境注意:需修改目录的所属用户和权限,确保 Oracle 用户有读写权限。
-
创建用户并授权
-- 创建用户 create user dbuser identified by 1234; -- 授予 DBA 权限 grant dba to dbuser; -- 授予对目录的读写权限 grant read, write on directory data_path to dbuser; -- 授予导入导出的系统权限 grant exp_full_database, imp_full_database to dbuser; -
退出 sqlplus
exit; -
导出数据
expdp dbuser/1234@orcl schemas=dbuser directory=data_path dumpfile=expdp.dmp logfile=expdp.log参数说明
schemas:指定要导出的用户模式directory:逻辑目录名dumpfile:导出文件名logfile:日志文件名
可能遇到的问题
- ORA-39213:元数据处理不可用
解决方法:登录数据库执行execute dbms_metadata_util.load_stylesheets;
-
导入数据
impdp dbuser/1234@orcl REMAP_SCHEMA=源用户名:目标用户名 table_exists_action=replace directory=data_path dumpfile=expdp.dmp logfile=expdp.log参数说明
REMAP_SCHEMA:将源用户下的对象导入到目标用户table_exists_action:表已存在时的处理方式(replace/skip/append/truncate)
总结对比
| 方式 | 执行位置 | 速度 | 适用场景 | 复杂度 |
|---|---|---|---|---|
| exp/imp | 客户端 | 慢 | 小数据量、简单备份恢复 | 低 |
| expdp/impdp | 服务端 | 快 | 大数据量、生产环境 | 中 |
| 第三方工具 | 客户端 | 依工具而定 | 日常快速操作,避免记忆命令 | 低 |
建议:生产环境的大数据量备份优先选择数据泵方式;临时小数据操作或开发环境可使用传统方式;第三方工具适合日常快速导入导出,但建议同时掌握底层命令原理。

浙公网安备 33010602011771号