如何解决Oracle测试数据库中的ORA-1555错误

供稿:hz-xin.com     日期:2024-05-18
oracle出现ORA-01157错误 如图怎么解决,在线等大虾解决

很明显的报错信息啊,首先看看ora-01110中提示的文件是否存在?如果不存在,那么在dba_data_files中查看该文件属于哪个表空间,如果该表空间不需要用那么直接offline drop好了。如果该表空间要使用,那么有没有备份?有备份的话可以尝试恢复,没有备份的话那就要看你数据库的归档日志文件是否都保留了,如果都保留了,那么可以直接重建该文件然后恢复(我提供过这种恢复的实际操作案例)。如果以上都为否定,那么恭喜你,重新建立该表空间咯,表空间中的数据对象可以通过跳过坏块导出的方式,先导出来,当然数据丢失是必然的。

减少commit的时间间隔;


增大undo tablespace;

优化应用程序的sql。

解决Oracle测试数据库中的ORA-1555错误:
现象:
应用的夜维从夜里00:00开始执行,但因为hang的原因(暂时猜测为夜维处理的某条数据和当前应用正常处理的某条数据相同,出现前后等待同一资源锁的现象),直到第二天白天09:25左右才继续执行,但此时应用日志记录:
snapshot too old: rollback segment number 29 with name "_SYSSMU29$" too small
原因分析:
因hang导致夜维的DELETE语句一直处于等待状态(超过一天),直到资源锁释放,但此时由于开始存放于UNDO中的前镜像超过UNDO_RETENTION参数设置的时间,且这是高并发的一个系统,很快可能就会被应用session覆盖UNDO中的记录,导致无法找到UNDO中的记录产生一致性读,因此报错ORA-1555,此次执行失败。

引申:
不过从这个报错现象可以接触到ORA-1555这个经典的错误号,尤其是在生产中,也是一种不多见的情况,尤其在现在UNDO基本都是用Oracle自动管理方式,且磁盘空间分配都比较大的情况下。

这个ORA-1555的错误是Oracle回滚段错误中的一种经典。UNDO用于记录DML操作数据的前镜像,ORA-1555的错误简单用一句话总结,我觉得就是当DML语句需要用UNDO记录的数据找到前镜像时,该记录已经被覆盖,导致无法利用UNDO中的记录完成一致性读。当然Oracle也有UNDO_RETENTION等参数避免这种情况的产生,但仍旧可能发生,原因有多种,解决方法也有多种,下面就简单说明介绍下。

从原因来讲,ORA-1555的错误原因归为两种,一是一致性读,一个是延迟块(锁)清除。

在orcal的配置过程中 经常会出现监听的问题 也让人 很恼火
今天 listner的配置都是ok的
可是
sqlplus systm/system 是ok的
但是sqlplus system/sysetem@orcl就不可以 ora-12514的错误

后来 发现是环境变量的问题
在listener.ora中 添加 全局的服务解析
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = E:/oracle/product/10.1.0/Db_1)
(SID_NAME = ORCL)
)

添加后
# listener.ora Network Configuration File: E:/oracle/product/10.1.0/Db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = E:/oracle/product/10.1.0/Db_1)
(PROGRAM = extproc)
)

)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
)
)

这样就ok了

如何优化ORACLE数据库性能
答:️调整数据结构的设计在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。调整应用程序结构设计在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三...

Oracle数据库出现问题怎么解决?
答:1、以sys登录为sysdbasqlplus /NOLOG或者(sqlplus sys/sys@localhost/orcl as sysdba,window系统下部署的 oracle数据库总是各种bug,我的必须添加ip地址指向才能连接)。2、登录到sys用户后,关闭数据库,输入命令:shutdown;回车,结果提示数据库未打开。3、启动数据库,输入命令startup mount;回车后...

用jmeter做oracle数据库测试时,JDBC配置正确,输入语句,执行报错...
答:配置SQL Server 2000数据库连接池时,属性validationQuery默认值为“select 1”,而在Oracle数据库连接池中应设置为“validationQuery="select 1 from dual"”在JDBC Connection Configuration中修改validation Query

ORACLE 数据库中的NUMBER类型的字段为NULL时怎么处理?
答:1、创建一张数据库测试表,用于演示null空值的查询。2、往测试表中插入测试记录,包含一个NULL、空字符串、非空字符串值。3、查询测试表中的所有数据,select * from tblNullData。4、在oracle数据库中,null与任何字段相比都会返回false,为此,oracle提供了一个is null词组判断null。从运行结果可以看出...

三招助你做好Oracle数据库备份测试
答:故障而导致数据丢失 这主要是要测试备份文件异地存放的有效性;四是数据批量更新的错误处理 这主要是测试数据库管理员在进行批量更新之前是否有先对数据库进行备份的习惯 等等 数据库管理员只有预先模拟现实中各种可能出现的问题 并得到解决方案 只有如此 在真正遇到这些问题的时候 数据库管理员才能够临危不乱 迅速解决...

Oracle数据库查询优化方案(处理上百万级记录如何提高处理查询速度)_百度...
答:1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后...

急求!!oracle数据库监听解决方法
答:解决方法1:用LSNRCTL命令看看STATUS是否正常 解决方法2:直接使用静态的数据库服务登记方法 就是用NET MANAGER增加一个数据库监听 用传统的SID方法.(9以后使用动态的,必须要保证是先启动监听)解决方法3:试试先启动监听服务 再启动数据库服务 然后用LSNRCTL看看有没有 解决方法4:检查网络配置 例如HOST...

如何找出oracle数据库中有乱码的数据
答:oracle数据库查询时出现乱码,很可能是该数据库的字符集设定不支持中文,但是表中数据含有中文,所以变为乱码。如果是字符集原因,解决方法如下:1、shutdown immediate; 关闭数据库 2、startup mount; 开启数据库至挂载模式(只挂实例,不启动数据库)3、alter system enable restricted session;开启...

Oracle数据库中违反唯一约束的处理
答:实际上Oracle也是如此实现的 SQL> CREATE TABLE T (ID NUMBER);表已创建 SQL> ALTER TABLE T ADD UNIQUE (ID);表已更改 SQL> INSERT INTO T VALUES ( );已创建 行 SQL> INSERT INTO T VALUES ( );INSERT INTO T VALUES ( )第 行出现错误:ORA : 违反唯一约束条件 (YANGTK SYS_C )SQL...

你好,我的ORACLE数据库出现了问题,请问能帮我解决下吗?
答:: HOST=localhost改成 HOST=本机IP 把 tnsname.ora中的SID 也配置成 本机的IP地址