暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle数据库imp/exp

原创 暮雨 2025-10-06
62

环境信息

项目 配置说明
操作系统 CentOS 7.9 (Kernel 3.10+)
Oracle版本 Oracle 19c (19.3.0)
数据库实例 orcl
主机IP 192.168.1.100
监听端口 1521
示例用户 test_user/test_password
示例表空间 USERS
示例表 EMPLOYEES (ID, NAME, DEPT)
数据目录 /u01/app/oracle/dump

一、exp/imp工具参数详解

1. exp(导出)核心参数

参数 说明 示例值
USERID 用户名/密码 test_user/test_password
BUFFER 数据缓冲区大小(字节) 10240000
FILE 输出文件路径 /u01/app/oracle/dump/exp_full.dmp
FULL 全库导出(需特权用户) Y
OWNER 按用户导出 test_user
TABLES 按表导出(支持通配符%) EMPLOYEES, DEPARTMENTS
ROWS 是否导出数据行 Y (默认) / N
COMPRESS 压缩区分配(Y=合并碎片) Y
DIRECT 直接路径导出(绕过SQL层,提升性能) Y
LOG 日志文件路径 /u01/app/oracle/dump/exp.log
QUERY 条件导出数据 "WHERE DEPT='IT'"
CONSISTENT 一致性导出(事务级一致) Y
特殊场景参数
TABLESPACES 按表空间导出 USERS, INDEXES
PARFILE 参数文件路径 exp.par

2. imp(导入)核心参数

参数 说明 示例值
USERID 用户名/密码 test_user/test_password
BUFFER 数据缓冲区大小 10240000
FILE 导入文件路径 /u01/app/oracle/dump/exp_full.dmp
FULL 全库导入 Y
FROMUSER 源用户(导出文件中的用户) test_user
TOUSER 目标用户(导入到新用户) new_user
TABLES 按表导入 EMPLOYEES
IGNORE 忽略创建错误(继续导入数据) Y
INDEXES 是否导入索引 Y (默认)
COMMIT 每批数据提交(避免大事务回滚段不足) Y
LOG 日志文件路径 /u01/app/oracle/dump/imp.log
特殊场景参数
DESTROY 覆盖数据文件(慎用!) Y
SHOW 仅显示导入内容(不执行) Y

二、操作前准备

1. 创建数据目录

mkdir -p /u01/app/oracle/dump
chown oracle:oinstall /u01/app/oracle/dump
chmod 775 /u01/app/oracle/dump

2. 配置示例数据

-- 使用sqlplus连接数据库
sqlplus system/your_password@//192.168.1.100:1521/orcl

-- 创建测试用户
CREATE USER test_user IDENTIFIED BY test_password
DEFAULT TABLESPACE USERS
QUOTA UNLIMITED ON USERS;

GRANT CONNECT, RESOURCE TO test_user;

-- 创建示例表
CONNECT test_user/test_password@//192.168.1.100:1521/orcl

CREATE TABLE EMPLOYEES (
    ID NUMBER PRIMARY KEY,
    NAME VARCHAR2(50),
    DEPT VARCHAR2(20)
);

-- 插入示例数据
INSERT INTO EMPLOYEES VALUES (1, 'Alice', 'HR');
INSERT INTO EMPLOYEES VALUES (2, 'Bob', 'IT');
COMMIT;

三、exp导出操作实战

场景1:全用户导出

exp USERID=test_user/test_password@192.168.1.100:1521/orcl \
    OWNER=test_user \
    FILE=/u01/app/oracle/dump/exp_user.dmp \
    LOG=/u01/app/oracle/dump/exp_user.log \
    BUFFER=10240000 \
    DIRECT=Y

场景2:单表导出(带条件)

exp USERID=test_user/test_password@192.168.1.100:1521/orcl \
    TABLES=EMPLOYEES \
    FILE=/u01/app/oracle/dump/exp_emp.dmp \
    QUERY=\"WHERE DEPT=\'IT\'\" \
    LOG=/u01/app/oracle/dump/exp_emp.log

场景3:全库导出(需SYSDBA权限)

exp USERID=\"sys/sys_password as sysdba\"@192.168.1.100:1521/orcl \
    FULL=Y \
    FILE=/u01/app/oracle/dump/exp_full.dmp \
    LOG=/u01/app/oracle/dump/exp_full.log

四、imp导入操作实战

场景1:全用户导入(原用户恢复)

imp USERID=test_user/test_password@192.168.1.100:1521/orcl \
    FILE=/u01/app/oracle/dump/exp_user.dmp \
    LOG=/u01/app/oracle/dump/imp_user.log \
    IGNORE=Y \
    COMMIT=Y

场景2:跨用户导入(test_user → new_user)

-- 先创建目标用户
CREATE USER new_user IDENTIFIED BY new_password
DEFAULT TABLESPACE USERS;
GRANT CONNECT, RESOURCE TO new_user;
imp USERID=system/manager@192.168.1.100:1521/orcl \
    FILE=/u01/app/oracle/dump/exp_user.dmp \
    FROMUSER=test_user \
    TOUSER=new_user \
    LOG=/u01/app/oracle/dump/imp_cross_user.log

场景3:单表导入

imp USERID=test_user/test_password@192.168.1.100:1521/orcl \
    TABLES=EMPLOYEES \
    FILE=/u01/app/oracle/dump/exp_emp.dmp \
    IGNORE=Y \
    LOG=/u01/app/oracle/dump/imp_emp.log

五、高级场景处理

1. 大表拆分导出(使用FILESIZE)

exp USERID=test_user/test_password@192.168.1.100:1521/orcl \
    TABLES=LARGE_TABLE \
    FILE=/u01/app/oracle/dump/exp_large_%U.dmp \
    FILESIZE=2G \
    LOG=/u01/app/oracle/dump/exp_large.log

2. 元数据导入(仅结构)

imp USERID=test_user/test_password@192.168.1.100:1521/orcl \
    FILE=/u01/app/oracle/dump/exp_user.dmp \
    SHOW=Y \
    ROWS=N \
    LOG=/u01/app/oracle/dump/imp_metadata.log

3. 网络直接导入(不落地文件)

# 导出端
exp USERID=test_user/test_password@source_db FILE= - | \
# 导入端
imp USERID=test_user/test_password@target_db FILE= -

六、错误处理与验证

常见错误解决

  1. IMP-00058: 遇到ORACLE错误 1435

    -- 执行重建回滚段
    ALTER ROLLBACK SEGMENT "_SYSSMU1$" OFFLINE;
    DROP ROLLBACK SEGMENT "_SYSSMU1$";
    
  2. EXP-00091: 导出统计信息失败

    # 在导出命令中添加参数
    exp ... STATISTICS=NONE
    

数据验证步骤

-- 检查对象计数
SELECT COUNT(*) FROM DBA_OBJECTS WHERE OWNER='TEST_USER';

-- 验证数据完整性
SELECT * FROM TEST_USER.EMPLOYEES;

七、关键注意事项

  1. 版本兼容性

    • 低版本exp导出文件可导入高版本数据库(如11g→19c)
    • 高版本导出需用相同或更高版本imp导入(使用VERSION参数降级)
  2. 字符集一致性

    -- 检查数据库字符集
    SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
    
  3. 性能优化

    • 导出:使用DIRECT=YRECORDLENGTH=65535
    • 导入:设置COMMIT=YBUFFER=10485760
  4. 空间监控

    -- 监控表空间使用率
    SELECT TABLESPACE_NAME, USED_PERCENT
    FROM DBA_TABLESPACE_USAGE_METRICS;
    

附:参数文件示例(exp.par)

USERID=test_user/test_password@192.168.1.100:1521/orcl
TABLES=EMPLOYEES, DEPARTMENTS
FILE=/u01/app/oracle/dump/exp_tables.dmp
LOG=/u01/app/oracle/dump/exp_tables.log
DIRECT=Y
COMPRESS=Y

执行命令:exp parfile=exp.par


文档修订记录

版本 日期 修改说明
V1.0 2023-10-15 初稿
V1.1 2023-10-20 增加大表拆分导出场景
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论