expdp full=y全库导出必须以sys或system用户通过'/ as sysdba'连接执行,否则报ora-31626等错误;需预先创建逻辑目录、授予exp_full_database权限、确保os路径可写,且在cdb环境中须连cdb$root并指定version参数。

expdp 全库导出最常用,但必须用 SYS 或 SYSTEM 以 AS SYSDBA 身份执行,否则会报 ORA-31626: job does not exist 或 ORA-39002: invalid operation —— 这不是权限不够的提示,而是根本没被允许发起全库导出。
为什么 expdp full=y 总是失败?
常见错误不是命令写错,而是前置条件没满足:
-
CREATE DIRECTORY必须在数据库内创建逻辑目录映射,且路径在操作系统上真实存在、Oracle 进程(通常是oracle用户)有读写权限 - 执行
expdp的用户必须有EXP_FULL_DATABASE角色(SYS默认有,普通 DBA 用户需显式授予) - 若数据库启用了 PDB(多租户),
full=y默认只导出当前 PDB;要导出 CDB 全局对象+所有 PDB,必须连接到CDB$ROOT并加参数version=12(或更高)和transportable=always(视版本而定) - Oracle 12c 及以后版本中,
expdp不再支持inctype=complete等老式增量语法,full=y是唯一“全库”语义,别混用旧exp参数
expdp full=y 的最小可行命令
假设已创建逻辑目录 data_dir 映射到 /u01/backup,且该路径对 oracle 用户可写:
expdp '/ as sysdba' dumpfile=full_db.dmp directory=data_dir full=y logfile=full_db.log
注意:'/ as sysdba' 是关键。不要写成 sys/password@db —— 这会绕过本地 OS 认证,容易触发密码策略或账户锁定;也不要漏掉单引号,否则 shell 会把 as 当作命令分隔符。
如果报 ORA-39070: Unable to open the log file,说明 logfile 指定的路径 Oracle 无法写入,此时去掉 logfile 参数让日志输出到控制台,先确认能否跑通。
RMAN 全库备份才是生产环境真正可靠的方案
expdp full=y 是逻辑备份:它导出的是 SQL + 数据,恢复时要重建对象、重放数据,不保证 SCN 一致性,也无法做增量恢复。真正的“整个数据库”物理备份,应该用 RMAN:
- 必须确保数据库处于归档模式(
ARCHIVELOG),否则 RMAN 只能做冷备(需停库) - 备份前建议先
BACKUP CURRENT CONTROLFILE和BACKUP ARCHIVELOG ALL DELETE INPUT,否则恢复时可能缺归档日志 - 一条完整热备命令示例:
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
这条命令会自动处理归档切换、备份控制文件、删除已备份的归档日志。备份集默认存于闪回恢复区(DB_RECOVERY_FILE_DEST),也可用 FORMAT 指定路径。
容易被忽略的兼容性陷阱
Oracle 19c 开始,expdp 默认启用加密压缩,但若目标库版本低于源库(比如从 19c 导出、想在 12c 导入),必须显式加 VERSION=12,否则导入时报 ORA-39142: incompatible version number;同理,RMAN 备份集不能跨大版本还原(如 19c 备份无法直接在 21c 上 RESTORE),必须通过 DUPLICATE 或中间升级步骤。











