1.使用impdp
(数据泵)工具导入
Oracle 19c推荐使用数据泵(impdp
)而非传统的imp
工具,因其兼容性更好。
impdp system/password@orcl DIRECTORY=DATA_PUMP_DIR DUMPFILE=exp.dmp LOGFILE=impdp.log VERSION=19.00
VERSION=19.00:明确指定DMP文件来自Oracle 19(兼容模式)。
DIRECTORY:确保目录对象指向DMP文件所在位置(需提前创建)。
(这里建议是提前把dmp文件拷贝到DATA_PUMP_DIR所指向的目录下)
查看DATA_PUMP_DIR文件目录位置:
select * from dba_directories;
2.处理表空间和用户映
创建目标用户(若不存在):
CREATE USER target_user IDENTIFIED BY password;
GRANT CONNECT, RESOURCE, DBA TO target_user; -- 按需授权
3.解决表空间不存在错误:
在19c中创建缺失的表空间:
--建立表空间
CREATE TABLESPACE test --创建名为"test"的表空间
LOGGING
DATAFILE 'D:\***\ORACLE19C\ORADATA\ORCL\DATAFILE\***.DBF'--ORCLDATAFILE文件位置
SIZE 50M -- 其初始大小为50M
AUTOEXTEND ON -- 支持自动扩展
NEXT 10M MAXSIZE 20480M unlimited -- 每次增量为10M ,最大2048M
EXTENT MANAGEMENT LOCAL;
或在导入时重映射(导入时需要映射到刚才建立的表空间):
impdp ... REMAP_TABLESPACE=old_ts:test
4.字符集兼容性检查:
查询字符集:
SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';
若字符集不一致:
* 导入前修改字符集(谨慎操作):
ALTER DATABASE CHARACTER SET AL32UTF8;
* 导出时指定兼容字符集(需重新导出)(建议)。
5.处理系统对象冲突
导入时排除可能冲突的系统对象:(导入后需要手动重建排除的对象(如索引、约束)。)
impdp ... EXCLUDE=STATISTICS,INDEX,CONSTRAINT,PACKAGE,VIEW
完整导入命令:
impdp system/password@orcl DIRECTORY=DATA_PUMP_DIR DUMPFILE=exp.dmp LOGFILE=impdp.log
VERSION=19.00 REMAP_SCHEMA=source_user:target_user REMAP_TABLESPACE=source_ts:target_ts TRANSFORM=OID:n
REMAP_SCHEMA
:源用户 → 目标用户映射。(导出用户和导入用户不一致时需要注意对应)。
REMAP_TABLESPACE
:源表空间 → 目标表空间映射。
TRANSFORM=OID:n
:禁用对象OID(避免冲突)。
6.结果查看:
检查日志文件 impdp.log
是否有错误
查询目标用户下的对象:
SELECT object_name, object_type FROM dba_objects WHERE owner='TARGET_USER';
7.导入后性能下降
重新收集统计信息:
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('TARGET_USER');