Oracle 数据库备份与还原方式

简介

数据库的导入/导出,即通常所说的数据还原与备份:

  • 导入:将 .dmp 格式文件从本地导入到数据库服务器。
  • 导出:将数据库服务器中的数据导出到本地,生成 .dmp 格式文件。

Oracle 导入导出方式及优缺点

传统方式:exp(导出)与 imp(导入)

  • 优点
    操作简单,客户端即可直接执行,无需登录服务器,降低了服务器操作风险。

  • 缺点
    导入导出速度较慢,适合数据量较小的场景。若文件超过几个 GB,普通配置的电脑可能需要 4~5 小时。

数据泵方式:expdp(导出)与 impdp(导入)

  • 优点
    速度快,几个 GB 的数据文件通常在 1~2 小时内完成。
  • 缺点
    必须在服务器端操作,且需要创建逻辑目录(Directory),对服务器操作需谨慎。

第三方工具

  • 优点
    封装了导入导出命令,无需手动输入,方便快捷,提高效率。

  • 缺点
    长期使用可能降低对底层命令原理的理解,产生工具依赖。

  • 工具推荐

    PL/SQL Developer、Toad、Navicat


特别强调(操作前必读)

术语定义

  • 目标数据库:数据即将导入的数据库
  • 源数据库:数据导出的数据库

操作前检查清单

  1. 权限确认
    操作者需具备足够的数据库权限(如 DBA 或 EXP_FULL_DATABASE/IMP_FULL_DATABASE)。
  2. 表空间一致性
    目标数据库必须存在与源数据库同名的表空间,否则导入时会报错。
  3. 提前备份
    目标数据库在导入前应做好完整备份,防止数据丢失。
  4. 磁盘空间
    确认目标数据库的磁盘空间充足,必要时需扩充表空间。
  5. 导入策略
    明确是覆盖(replace)、仅插入新数据(append)还是替换部分表(truncate+insert)。
  6. 版本兼容性
    确认源与目标数据库版本是否一致(如 10g 与 11g 可能存在兼容性问题)。
  7. 字符集
    导入导出双方字符集应一致(通常 Oracle 字符集固定,不建议更改)。
  8. 逻辑目录(数据泵专用)
    使用数据泵前,必须在服务器端创建可用的逻辑目录,并验证其有效性。
  9. 导出文件格式
    • 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)

步骤概览
  1. 登录服务器(需 DBA 权限)
  2. 创建逻辑目录(Directory)
  3. 创建用户并授权
  4. 执行导出/导入
详细步骤
  1. 登录数据库

    sqlplus system/密码
    
  2. 创建逻辑目录

    -- 创建目录(目录路径必须提前在操作系统上创建好)
    create directory data_path as 'G:\下载';
    
    -- 查询已创建的目录
    select * from dba_directories;
    
    -- 删除目录(如需更换路径)
    drop directory data_path;
    

    Linux 环境注意:需修改目录的所属用户和权限,确保 Oracle 用户有读写权限。

  3. 创建用户并授权

    -- 创建用户
    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;
    
  4. 退出 sqlplus

    exit;
    
  5. 导出数据

    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;
  6. 导入数据

    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 服务端 大数据量、生产环境
第三方工具 客户端 依工具而定 日常快速操作,避免记忆命令

建议:生产环境的大数据量备份优先选择数据泵方式;临时小数据操作或开发环境可使用传统方式;第三方工具适合日常快速导入导出,但建议同时掌握底层命令原理。

posted @ 2024-01-16 11:13  克峰同学  阅读(720)  评论(0)    收藏  举报