跳转到主内容
思享编程网:思考分享,玩转编程世界!

Oracle数据库imp/exp

环境信息 项目配置说明 操作系统CentOS 7.9 (Kernel 3.10+)Oracle版本Oracle 19c (19.3.0)数据库实例orcl主机IP192.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_passwordBUFFER数据缓冲区大小(字节)10240000FILE输出文件路径/u01/app/oracle/dump/exp_full.dmpFULL全库导出(需特权用户)YOWNER按用户导出test_userTABLES按表导出(支持通配符%)EMPLOYEES, DEPARTMENTSROWS是否导出数据行Y(默认) /NCOMPRESS压缩区分配(Y=合并碎片)YDIRECT直接路径导出(绕过SQL层,提升性能)YLOG日志文件路径/u01/app/oracle/dump/exp.logQUERY条件导出数据"WHERE DEPT='IT'"CONSISTENT一致性导出(事务级一致)Y特殊场景参数TABLESPACES按表空间导出USERS, INDEXESPARFILE参数文件路径exp.par

2. imp(导入)核心参数 参数说明示例值

USERID用户名/密码test_user/test_passwordBUFFER数据缓冲区大小10240000FILE导入文件路径/u01/app/oracle/dump/exp_full.dmpFULL全库导入YFROMUSER源用户(导出文件中的用户)test_userTOUSER目标用户(导入到新用户)new_userTABLES按表导入EMPLOYEESIGNORE忽略创建错误(继续导入数据)YINDEXES是否导入索引Y(默认)COMMIT每批数据提交(避免大事务回滚段不足)YLOG日志文件路径/u01/app/oracle/dump/imp.log特殊场景参数DESTROY覆盖数据文件(慎用!)YSHOW仅显示导入内容(不执行)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= -

六、错误处理与验证 常见错误解决 IMP-00058: 遇到ORACLE错误 1435

-- 执行重建回滚段

ALTER ROLLBACK SEGMENT "_SYSSMU1$" OFFLINE; DROP ROLLBACK SEGMENT "_SYSSMU1$";

EXP-00091: 导出统计信息失败

# 在导出命令中添加参数

exp ... STATISTICS=NONE

数据验证步骤

-- 检查对象计数

SELECT COUNT(*) FROM DBA_OBJECTS WHERE OWNER='TEST_USER';

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

七、关键注意事项 版本兼容性 低版本exp导出文件可导入高版本数据库(如11g→19c) 高版本导出需用相同或更高版本imp导入(使用

VERSION

参数降级) 字符集一致性

-- 检查数据库字符集

SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';

性能优化 导出:使用

DIRECT=Y

RECORDLENGTH=65535

导入:设置

COMMIT=Y

BUFFER=10485760

空间监控

-- 监控表空间使用率

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.02023-10-15初稿V1.12023-10-20增加大表拆分导出场景

相关文章