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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决Oracle测试数据库中的ORA-1555错误相关的知识,希望对你有一定的参考价值。

解决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的错误原因归为两种,一是一致性读,一个是延迟块(锁)清除。
参考技术A 在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了本回答被提问者和网友采纳

OracleOracle错误 ora-12514 检查以及解决方法

问题

本地测试的时候,连接测试服务器上的Oracle数据库,报错如下:

ORA-12514, TNS:listener does not currently know of service requested in connect descriptor

参考文章

stackoverflow参考文章

本地问题解决

1.查看Oracle当前监听器状态

在命令行窗口输入以下命令,查看Oracle当前监听器的状态

> lsnrctl status


其中,监听程序参数文件listener.ora 配置了要监听的Oracle服务的信息,监听程序日志文件log.xml 中记录了连接报错的 ora-12514 信息。
服务摘要部分,记录了当前监听器监听到的服务的简要信息(截图示例中的 orcltaco 就是被监听的服务的名称,orcltaco服务信息配置在上面的listener.ora 文件中)。

2.配置要监听的服务信息

根据上一步查询到的 监听程序参数文件 listener.ora 的地址,用编辑器打开对应目录下的 listener.ora 文件,添加要监听的服务信息(服务信息从对应的 tnsnames.ora 文件中查找,一般和 listener.ora 文件在同一目录下)。
服务信息以及服务在 listener.ora 文件中的相应配置如下:


服务信息的服务名为:orcl
修改后的 listener.ora 文件如下:

3.重启监听器

上一步修改保存之后,在命令行中依次执行以下两个命令,重启监听器

> lsnrctl stop
> lsnrctl start

或者可以执行 lsnrctl reload 来代替 lsnrctl stop,lsnrctl start

执行结果如下:

查看启动后的服务摘要发现,配置的 orcl 服务已经被监听器监听到了,这时候在使用程序或者客户端连接工具 账户密码连接 orcl 服务访问数据库,连接成功!

lsnrctl命令

lsnrctl 作为oracle监听命令,在启动、关闭或者重启oracle监听器之前确保使用lsnrctl status命令检查oracle监听器的状态,常用命令如下:
1、lsnrctl status 检查当前监听器的状态
2、lsnrctl start [listener-name] 启动所有的监听器,可以指定名字来启动特定的监听器
3、lsnrctl stop [listener-name] 关闭所有的监听器,可以指定名字来关闭特定的监听器
4、lsnrctl reload 重启监听器,此命令可以代替 lsnrctl stop,lsnrctl start
5、lsnrctl hep 可以显示所有可用的监听器命令

以上是关于如何解决Oracle测试数据库中的ORA-1555错误的主要内容,如果未能解决你的问题,请参考以下文章

SRDC - ORA-1555: Query Duration 0: Checklist of Evidence to Supply (Doc ID 1682704.1)

SRDC - ORA-1555 during Export: Checklist of Evidence to Supply (Doc ID 1682706.1)

Explaining ORA-1555 Error (Doc ID 467872.1)

oracle 问题 ORA-00933: SQL 命令未正确结束 如何解决?

oracle 去掉字符,剩下数字

oracle 问题 ORA-00933: SQL 命令未正确结束 如何解决?