用户需要3分钟),但是user1却在这3分钟内提交了。那会有什么影响?这时候如何保证读写的一致性?此时DBMS要保证有足够的撤销表空间来存储修改前的值,以保证user2读取的数据与修改前一致,然后下次再读取更新后的数据。
Ora-01555快照太旧,因为撤销空间不够大,一些撤销数据被覆盖,所以用户可以修改前无法获取数据。
撤消数据分为三种类型:
主动撤销:未提交事务的撤销数据永远不会被覆盖,用于回滚回滚事务。
过期撤消:撤消已提交事务的数据,该数据可以被覆盖。
未到期撤销:交易已经提交,但是在交易提交之前,有一些查询正在进行,它想读取提交之前的数据,也就是未到期的数据。如果这部分撤消数据被覆盖,将出现ora-01555错误。
一种解决方案是指定还原表空间参数
不能删除System/sysaux/undo表空间;
您应该确定哪些表格是有用的,例如table_namelikeW%等。
筛选出包含数据的表空间,例如selecttablespace_namefromDBA_tables,其中table_namelikew%groupbytablespace_nameorderby1。
记下不在步骤1和3中的表空间名称;
识别无用的数据文件,比如selectfile_name,tablespace_namefromDBA_data_fileswheretablespace_namein()。
首先使数据文件脱机,然后删除它。你我们结束了。