ORA-1555 解决方案
1、一致性导出
在将数据库的数据写入导出转存文件的过程中,Export一次读一个表。因此,尽管Export开始于一个指定的时间点,而各个表则读于不同的时间。在Export开始读表时,存储在那个表中的数据。由于太多表与其他表相关,所以用户在导出期间修改数据,就会引起导出的数据不一致。导出转储文件可能含有不一致的数据,例如在一个表中具有外键记录,而在相关的表中没有相匹配的主键记录。
要避免导出中的不一致性,有两种选择:
(1)第一,应该在无人修改表时安排导出,如果不行,可以使用startup restrict选项确保当导出发生时,只有DBA注册到数据库用户。
(2)第二,可以使用CONSISTENT参数,该参数只能用于Complete导出。在一致性导出过程中,Oracle将试图创建一个导出开始时,导出数据的读一致性版本。如果Oracle不能重新创建表的读一致性版本,便会出现“快照太老”的错误。要确保不会遇到“快照太老”的错误,必须创建大型回退段,因为Oracle将重写老的回退段条目,而忽略consistent=y设置。
只要有可能,就要确保导出数据的异型性,方法是在数据库没有被使用或安装在restricted模式下时,运行导出。如果做不到这一点,就要在导出的过程中,限制数据库的使用,并执行一个CONSISTENT=Y导出。
另一个替代方法是创建两个参数文件(parfile)。一个文件含有数据库或模式内部的主要表的名称,可以将这个文件用于第一个导出,使用默认值为consistent=n。第二个文件含有必须维护其一致性的表
的名称,该文件用户执行一个consistent=y的导出。使用这两种解决方案,回退段不必设置得很大,系统的性能也不会受到很大影响。
创建回退段
(1)建立undotablespace
建立undotablespace的语法如下:
create undotablespace tablespace_name
datafile 'fullpath+datafilename' size XXM
[autoextend on|off next XX maxsize XX];
alter tablespace RBS
default storae
(initial 1M next 1M minextents 100);
create rollbacl segement R4 tablespace RBS
storage (optimal 100M);
alter rollback segement R4 online;
set transaction user rollback segment SEGEMENT_NAME;
转载于:https://blog.51cto.com/3508745/655077