Hoa*_*inh 4 oracle oracle11g oracle-sqldeveloper
我想导出转储文件 DDL 我的数据库(Oralce 数据库版本 11.2.0.4)。我创建了用户并授予了权限(sysdba)。我使用上面的用户连接到数据库,我选择查看 --> DBA --> 数据泵 --> 数据泵导出向导 --> 选择上面的连接 --> 并警告错误“无法将数据泵用作系统。”。

这是关于 SYS 的一个有趣的事情,它不能使用 SERIALIZABLE 事务。这也适用于作为 SYSDBA 连接的用户。了解更多。
SERIALIZABLE 隔离级别意味着事务中的所有语句都是读取一致的。Oracle 的默认值为 READ COMMITTED,它适用于语句级别。不同之处在于:如果我们在 READ COMMITTED 隔离级别下运行select * from T1,select * from T2那么我们将T2在查询时提交任何更改T1。也就是说,结果集T1和T2都是一致的记录,但我们可能会看到不同的结果,如果我们运行查询的其他方式轮。而在 SERIALIZABLE 下,结果集与事务的开始一致。无论我们查询表的顺序如何,结果都是稳定的。
您可以看到为什么这对导出很重要。整个导出表集必须一致,以保证后续导入的关系完整性。我们不想导出包含依赖于在导出后添加到父表的记录的记录的子表。(旧的导出实用程序允许我们进行设置consistency=N- 实际上这是默认设置! - 但数据泵保护我们免受自己的伤害)。
所以这就是我们不能以 SYS 或 SYSDBA 用户身份运行导出的原因。幸运的是,有一个简单的解决方案:从您的用户撤销 SYSDBA,DATAPUMP_EXP_FULL_DATABASE并DATAPUMP_IMP_FULL_DATABASE改为授予它和角色。[Find out more][2].