ora-39083+ora-01917因被授权用户缺失导致权限重建失败,需确认用户必要性后选择跳过grant或提前创建用户并授create session;ora-01950因目标用户在表空间无配额,应执行alter user quota unlimited on表空间;ora-39142因dump版本高于目标库,须在源库用version参数重导;ora-39001/ora-39000因directory对象或os路径权限不足,需逐层检查目录定义、db权限及文件系统权限。

ORA-39083 + ORA-01917:缺失被授权用户导致权限重建失败
这是impdp导入中最常遇到的权限类报错,典型表现是ORA-39083: Object type OBJECT_GRANT failed to create紧跟着ORA-01917: user or role 'XXX' does not exist。它不是说执行用户缺权限,而是dump文件里记录了对某个用户(比如FOR_QUERY)的GRANT SELECT ON CWY_INIT.UR_RPT TO FOR_QUERY,但目标库根本没这个用户。
别急着手动建用户——先确认这个用户是否真要存在:
- 查业务文档或源库
dba_users,确认FOR_QUERY是正式应用账号,还是测试/遗留账号 - 如果只是临时测试用户,可加
EXCLUDE=GRANT跳过所有权限重建:impdp ... EXCLUDE=GRANT - 如果必须保留权限链,就用DBA账号提前创建用户:
CREATE USER FOR_QUERY IDENTIFIED BY password;,再补必要权限如CREATE SESSION - 注意:仅创建用户还不够,impdp默认不自动授予
CREATE SESSION等系统权限,得额外执行GRANT CREATE SESSION TO FOR_QUERY;
ORA-01950:目标用户在指定表空间无配额
报错ORA-01950: no privileges on tablespace 'PUBDATA'说明当前导入用户(比如APP_USER)在PUBDATA表空间没有UNLIMITED TABLESPACE或具体配额,导致无法创建表或索引。
这不是目录权限问题,而是存储级权限:
- 检查用户当前配额:
SELECT tablespace_name, bytes/1024/1024 AS quota_mb FROM dba_ts_quotas WHERE username = 'APP_USER'; - 若
PUBDATA没出现在结果里,说明零配额;执行ALTER USER APP_USER QUOTA UNLIMITED ON PUBDATA; - 若只给有限配额但数据量大,直接设为
UNLIMITED更稳妥,避免中途因空间不足中断 - 切勿用
ALTER DATABASE DEFAULT TABLESPACE PUBDATA;替代——这改的是新用户的默认表空间,不影响已有用户配额
ORA-39142:dump文件版本高于目标库版本
当从Oracle 19c导出的dmp文件导入到11g时,报ORA-39142: incompatible version number 5.1 in dump file,本质是数据泵版本不兼容。impdp不会降级解析高版本元数据。
唯一可靠解法是**在源库用低版本兼容参数重导**:
- 在19c上执行expdp时,显式指定
VERSION=11.2.0.4(目标库版本):expdp ... VERSION=11.2.0.4 - 不能靠目标库impdp加参数“向下兼容”——
VERSION参数只在expdp端生效 - 若源库已不可用,只能升级目标库到匹配版本,或找中间版本库做中转转换
- 注意:
VERSION影响的是元数据结构(如新数据类型、属性),不影响实际数据内容
ORA-39001 / ORA-39000:目录对象或文件路径权限链断裂
ORA-39001: invalid argument value配合ORA-39000: bad dump file specification,往往指向DIRECTORY对象配置错误。它和操作系统权限是两层事,缺一不可。
排查必须按顺序走:
- 确认DIRECTORY对象存在且路径正确:
SELECT directory_name, directory_path FROM dba_directories WHERE directory_name = 'DATA_PUMP_DIR'; - 确认执行用户有
READ和WRITE权限:SELECT * FROM dba_tab_privs WHERE table_name = 'DATA_PUMP_DIR'; - 登录操作系统,确认Oracle进程用户(如
oracle)对directory_path物理路径有读写权限:ls -ld /u01/app/oracle/dpdump/ - 常见坑:路径末尾多了一个
/,或路径含空格未加引号,或NFS挂载点权限未同步
实际导入前,最容易被忽略的是元数据依赖的隐式要求:一个GRANT语句失败,可能卡住后续几百个对象的权限重建,但impdp默认仍会继续导入数据——这意味着你看到日志里一堆ORA-39083,但表数据其实在后台悄悄进去了。要不要处理,得看业务是否真依赖那些权限。











