环境信息 项目配置说明 操作系统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增加大表拆分导出场景
