如果导出用户使用 CONSISTENT=n,TAB:P1 的更新不会写入导出文件,但TAB:P2 的更新会写入导出文件,因为更新事务是在导出 TAB:P2 开始前提交的。因此,user2 的事务只是部分记录在导出文件中,使其不一致
如果使用 CONSISTENT=y 并且更新量很大,则回滚段的使用率会很大。另外,每个表的导出都会比较慢,因为回滚段必须被扫描以处理未提交的事务
关于使用 CONSISTENT=y,请记住以下几点:
CONSISTENT=y 不支持以 SYS 用户身份进行连接S或者正在使用 AS SYSDBA,或两者 的导出
某些元数据的导出可能需要在递归 SQL 中用到 SYS schema,在这种情况下,CONSISTENT=y 将被忽略。Oracle建议您避免在 CONSISTENT=y 的导出过程中进行元数据更改
为了尽量减少这些导出所需的时间和空间,你应该把需要保持一致的表与那些不需要保持一致的表 分开导出导出。例如,在一致的导出中一起导出 emp和dept 表,然后再导出数据库的其余部分
当回滚空间用完时,会发生 snapshot too old 错误,并且已提交的事务占用的空间将被重新用于新的事务。在回滚段中重用空间允许以最小的空间要求保留数据库完整性,但它限制了一个读一致性映像能够被保存的时间
如果提交的事务已被覆盖,并且需要为数据库的读一致性视图提供信息,则会导致
snapshot too old 错误
为了避免这个错误,应该尽量减少读取一致性导出所花费的时间(通过限制导出对象的数量来实现这一点,如果可能的话,通过降低数据库事务处理速率来实现)同时,使回滚段尽可能大
CONSTRAINTS默认: y;指定 exp 导出表约束
DIRECT默认: n;指定使用直接路径导出
指定 DIRECT=y,使导出通过直接读取数据来提取数据,绕过 SQL 命令处理层(评估 buffer)。这种方法可以比常规路径导出快得多
FILE默认: expdat.dmp
指定导出文件的名称,默认的扩展名是 .dmp,但你可以指定任何扩展名;由于exp 支持多个导出文件,因此可以指定多个要使用的文件名。例如:
exp scott FILE = dat1.dmp,dat2.dmp,dat3.dmp FILESIZE = 2048当导出达到 FILESIZE 所指定的值时,导出停止写入当前文件,将打开 FILE 参数指定的下一个文件继续写入,直到完成或再次达到 FILESIZE 的值;如果你没有指定足够的导出文件名来完成导出,则导出会提示你提供其他文件名
FILESIZE默认值:将数据写入一个文件,直到达到 表21-3 中指定的最大值
exp 支持写入多个导出文件,imp 可以从多个导出文件读取。如果为 FILESIZE 参数指定一个值(字节限制),则导出将为每个转储文件写入指定的字节数
当导出必须写入的数据量超过了指定的 FILESIZE,,将从 FILE 参数中获取下一个导出文件的名称,或者如果已经使用了 FILE 参数中指定的所有名称,那么它会提示你提供一个新的导出文件名;如果没有为 FILESIZE 指定值(注意 0 等于不指定FILESIZE),那么无论 FILE 参数中指定了多少文件,导出都将只写到一个文件中
注意:如果导出文件的空间需求超过了磁盘可用空间,则导出将终止,并且在提供足够的磁盘空间之后,需要重新导出
如表21-3所示, 转储文件的最大大小取决于正在使用的操作系统以及正在使用的 Oracle 数据库的版本
也可以为 FILESIZE 指定一个数字,后跟 KB(千字节数)。例如,FILESIZE=2KB 与 FILESIZE=2048 相同。MB 指定兆字节(1024 * 1024),GB指定千兆字节(1024 ** 3)。B 仍然是字节的简写形式,FILESIZE=2048B 与 FILESIZE=2048 相同)
FULL默认: n
指定 FULL= 导出整个数据库,此模式下需要 EXP_FULL_DATABASE 角色
Points to Consider for Full Database Exports and Imports全库导出和导入可以成为复制或清理数据库的一个好方法。但是,为避免出现问题,请务必牢记以下几点:
1)全库导出不会导出 SYS 用户的触发器,必须全库导入之前或之后手动重建 SYS 触发器;Oracle 建议在导入后重建它们,以防触发器定义的操作妨碍导入进度
2)全库导出也不会导出 default profile,如果修改了源库中的 default profile(例如,添加了 SYS 用户拥有的密码验证功能),则在导入完成后,必须手创建函数并修改目标数据库中的 default profile
3)如果可能的话,在开始之前,对导出的数据库和要导入的数据库进行物理复制。这确保了任何错误都是可逆的
4)在导出开始之前,建议制作一份包含以下信息的报告:
表空间和数据文件的列表
回滚段的列表
按用户计算每种对象类型(如表,索引等)的数量
这些信息可以确保表空间已经被创建,并且导入成功
5)如果您是从导出创造一个全新的数据库,然后记得在 SYSTEM 中创建一个额外的回滚段,在导入操作前,使它在初始化参数文件(init.ora) 可用
6)执行导入时,请确保指向了正确的实例。这是非常重要的,因为在某些 UNIX 系统上,只要输入一个子shell 就可以改变执行导入操作的数据库