
接上一篇正常情况下先从恢复数据库中导出所需要时间段内的dmp文件并且拷贝到生产服务器中在生产服务器中将以下脚本保存为import_audit.par文件DIRECTORYDATA_PUMP_DIR DUMPFILEaudit_before_20200101.dmp LOGFILEaudit_import.log TABLESLIMS3_DATA.LIMS_AUDITRECORD TABLE_EXISTS_ACTIONAPPEND然后输入并执行如下命令开始导入impdp system/密码 PARFILEimport_audit.par问题1如果过程中有报错比如“ORA-12899: value too large for column xxx (actual: 511, maximum: 500)”如图则很可能是因为从备份库导出的数据中TESTNAME字段的实际长度如 511、531、1444 字节超过了目标生产库中该字段定义的最大长度500导致包含这些超长内容的行无法导入被 Data Pump 跳过。这不是空间问题而是表结构字段长度不一致导致的。解决方法扩大目标库的TESTNAME列长度直接在生产库执行ALTER TABLE LIMS3_DATA.LIMS_AUDITRECORD MODIFY TESTNAME VARCHAR2(1500);修改完成后不需要重新导出 DMP 文件直接重新执行impdp命令使用相同的参数文件之前报错的行就能正常插入了问题二正常情况下它会比较快地导入完成。但如果它长时间一直不动则需要确认验证是否是否可以按一次CtrlC。进入impdp提示符输入STATUS并回车。如果显示进度如处理了多少行、完成百分比说明它正在正常工作只是屏幕输出被缓冲了。你可以输入EXIT退出交互界面让作业继续在后台跑或者静心等待。如果显示WAITING或状态长时间不动说明确实卡住了需要查看具体等待事件。接下来另开一个 SQL*Plus 窗口查看 Data Pump 作业的状态看是否还在运行SELECT owner_name, job_name, state FROM dba_datapump_jobs WHERE job_name LIKE SYS_IMPORT_TABLE_%;如果state为EXECUTING说明还在运行。如果state为NOT RUNNING且有ERROR提示说明已经失败但客户端没断开。查看具体的等待事件判断卡在哪里SELECT SID,SERIAL#,EVENT,WAIT_CLASS,SECONDS_IN_WAIT,STATE FROM V$SESSION WHERE PROGRAM LIKE %impdp% AND TYPE!BA如果event显示SQL*Net message from client说明它在等待你输入比如刚才按了 CtrlC。如果显示buffer busy waits或log file switch completion说明磁盘/日志写入跟不上。最要警惕的是如果显示enq: TM - contention或enq: TX - row lock contention说明有锁冲突。最终验证缺失的数据是否补全导入完成后再次查询 2026.04.01 之前的数据行数确认是否与导出前一致SELECT COUNT(*) FROM LIMS3_DATA.LIMS_AUDITRECORD WHERE OPERATETIME TO_DATE(2026-04-01, YYYY-MM-DD);