Alert: Oracle SQL Parse Error绝不能放任不管, 产生未知bug

在早期接触 Oracle 12c 的生产环境时,我在数据库警告日志(db alert log)中发现了“WARNING: too many parse errors, count=NNNNN SQL hash=0x****”的警告信息。Oracle 通过这种方式提示我们,应用中有一些解析失败的无效 SQL 正在耗费系统资源。Oracle 建议根据这些 SQL 文本和错误信息来修正 SQL。然而,某些应用或 DBA 可能会对这些警告视而不见,尤其是从 12c 前版本升级上来的用户,更是觉得可以安全地忽略这些警告。 几年前,我记录过一个客户在 Oracle 12.2 中遇到的《Oracle 12.2 DB alert show “WARNING: too many parse errors” or “__Oracle_JDBC_internal_ROWID__” in sql》现象。最近,另一个客户也持续遇到解析失败的问题,我发现这绝对不能放任不管,因此做了简单记录。

Oracle LOB 在12c中的增强

前不久在研究《Oracle国产化改造迁移时的问题:Number 数据类型中的 invalid number》时,发现 TO_* 函数在 12c 中有一些增强,同样对 LOB 类型也有增强。正巧最近遇到一个 11g 数据库需要通过 dblink 更新 BLOB 字段的需求,因此对此进行了研究,并做了简单记录。

Oracle国产化改造迁移openGauss时的问题: 自定义聚合函数wm_concat

在Oracle 11g升级到更高版本时,默认不再提供 wm_concat 函数,而是用 listagg 函数替代。然而,很多应用程序在12c或19c中可能自定义了类似 wm_concat 的函数,例如 my_wm_concat。这些函数被广泛使用在应用程序中。当这些应用程序的数据库迁移到国产数据库如OpenGauss或PostgreSQL时,如果希望数据库层面兼容而不修改应用代码,通常迁移工具只能做语句规则替换。

对于自定义函数的迁移,由于人工改写时对Oracle或OpenGauss/PostgreSQL不熟悉,这可能会浪费一些时间。 简单纪录一个案例。

Oracle 23ai新特性: 事务优先级(Priority Transactions),自动回滚

相信oracle DBA一定遇到过enq: TX – row lock等待,假设一个会话修改了table中的数据,但一直未提交,此时其它会话相同行的任何DML事务都会挂起,并v$session.event显示enq: TX – row lock contention的等待事件,直到持有行锁的会话commit或rollback结束事务释放锁定行。 前几天发现在oracle 23版本引入了个有意思的功能”事务优先级”,可以在 LOW、MEDIUM 和 HIGH(默认值)之间进行选择, 如果“低级”的会话事务堵塞了更高级会话事务,在超过预定时间(秒)数据后会自动处理[rollback(default) 或者commit] ,默认事务都是High级别,自动事务回滚减少了管理负担。

,

Oracle, MySQL, PostgreSQL 数据库比较系列(二十一): 纪元秒数与日期转换

前几日一客户问我在oracle执行unix_timestamp函数报错,心想这不是MySQL的函数吗?难道oracle引入了?找了一圈到oracle 23ai也没有自带该函数,可以自定义函数实现, 在去年的一个oracle迁移到PostgreSQL系数据库里,有套业务库大量使用epochs做为datetime,这里简单记录在oracle, mysql ,postgresql中如何做unix epoch到datetime的转换.

Oracle 11g ASM Alert log 频繁输出 “Attempting voting file refresh on diskgroup xx”

一套Oracle 11g r2 RAC环境,发现文件系统使用率很高,因为ASM alert log 中在不间断的输出”Attempting voting file refresh on diskgroup xx”信息,RBAL进程似乎因为PST问题一直在尝试,导致内存溢出,最终可能会报出Ora-7445等异常,最终ASM实例 CRASH, 这里简单的记录处理方法。

Oracle国产化改造迁移时的问题: Number data type中的 invalid number

当迁移Oracle数据库到其他数据库系统时,你可能会遇到一个棘手的问题:在Oracle表中存在无效的数字数据,导致在目标数据库(比如PostgreSQL系列)导入时报错。这些错误可能表现为类似“invalid input syntax for type numeric: ‘xxx’”的提示信息。最近,在将Oracle国产化改造项目迁移到商业发行的MogDB时,我也遇到了这个问题。看来Oracle的容错率太高了,不会像其他数据库那样严格检查数据的有效性。因此,我们需要一种方法来找出并修正这些错误数据。在本文中,我将分享一种解决这个问题的方法。

, ,

分分钟安装体验Oracle 23ai,SQL*Plus细致入微的创新

最近有朋友在问Oracle 23ai 如何下载和体验,这篇简单的分享,在 Oracle 23ai 版本的安装过程中,可以体验到一系列令人振奋的新特性和功能。从下载安装到启动运行,整个过程简单而顺畅,展现了 Oracle 在技术创新和用户体验方面的不断进步。让我们一起探索 Oracle 23ai 版本带来的全新体验,感受其为开发者和企业带来的价值和便利。您网络如果没有瓶颈,几分钟就可以安装部署一套oracle 23ai, 小试一下sqlplus客户端的微创新。

Exadata x5 Raid电池对IO性能的影响

前段时间一套Oracle Exadata X5环境遇到了严重的IO问题,从AWR top event IO延迟相当高,问题前虽然IO性能并不是很好,但这次突然的性能减半,影响对于cell multiblock physical read和direct path write,cell smart table scan wait avg ms翻倍,甚至达到100ms以上,对于oracle环境是无法接受的,当然通过分析问题在硬件层,更换RAID卡电池后恢复,10几年前遇到过因为RAID卡电池没电,影响无法使用RAID cache导致IO性能衰减的问题

,

通过最大分区数据错误看Oracle 23ai 错误提示友好增强

之前在写《Oracle 23c 几个开发相关新特性》有简单记录在报错上的友好增强,最近oracle发布了23版本命名为从C(cloud)系转向ai系,通过官方下载了个vmbox磁盘镜像分分钟运行起了oracle 23c free ,今天刚好公司内部讨论一个interval partition分区个数上限的问题,我们看看23ai版本的提示有多明确。

19c ADG standby account is “OPEN” state, but login fails with “ORA-28000: the account is locked”

今天一套oracle 19c(19.16)dataguard 环境,一个维护数据库用户(非sys, system)在primary和standby side都是OPEN状态,但是在备库登录时依旧提示ora-28000 : the account is locked, 记录一下处理方法。

CRS-42216: No interfaces are configured on the local node for interface definition virbr0(:.*)处理方法

现象oracle 19c RACon linux 7.6, GI alert log一直在输出“2024-04-28 01:07:20.305 [GIPCD(53662)]CRS-42216: No interfaces are configured on the local node for interface definition virbr0(:.*)”,但不影响RAC的稳定和使用,在安装clufy时有时也提示PRVF-7617,在oracle 11g还有bug 记录可能影响私网通信 简单记录处理方法。

Troubleshooting Oracle instance start failed with ORA-7445 [ipcor_net_get_ibdevname]

最近,有一位海南客户报告了Oracle 19c RAC数据库启动时出现的错误,提示ORA-07445: exception encountered: core dump [ipcor_net_get_ibdevname()+71][SIGSEGV]。这个崩溃报告的异常原因是由于Oracle的一个bug引起的,但根本原因是由于数据库无法访问某些特定设备的API而导致的。通常这样的问题源于硬件方面的原因。在这里,我只是简要记录一下问题的表现。

,

隐藏问题: Oracle 11g存在index full scan替代index fast full scan的低效执行计划

在Oracle数据库中,索引是提高查询性能的关键工具之一。通过使用索引,数据库可以快速地定位和检索数据,从而加快查询速度并降低系统资源消耗。在索引扫描过程中,有两种主要的方法:索引快速全扫描(Index Fast Full Scan)和索引全扫描(Index Full Scan)。然而,在某些情况下,数据库可能会出现错误的执行计划,选择索引全扫描而不是预期的索引快速全扫描,导致性能下降和资源浪费。该类问题可能不容易发现,仅是SQL性能差,或主要的等待事件为db file sequential read.

, ,

Troubleshooting Oracle ASM diskgroup dismount with ORA-15335 ORA-15066 ORA-15196 when delete instance use DBCA

环境为Oracle 11.2.0.4 2节点RAC的情况下,今天我们遇到了一个问题。同事在使用DBCA删除一个已经损坏的数据库实例时,意外地导致了当前唯一存活的数据库实例崩溃。进一步的检查发现,ASM磁盘组不可用,而ASM警报日志显示了ASM磁盘文件头损坏、ASM元数据损坏以及ORA-15196: 无效的ASM块头的错误。为什么删除数据库实例会导致ASM磁盘组不可用,并且发现ASM元数据损坏呢?

, , , ,

Alert: Oracle RAC最大进程数限制受UDP port range影响

几年前测试oracle RAC的节点间UDP通信《The FG(server process) and remote node LMSn process communication over the interconnect?(用户进程会和另一节点的LMS进程直接通信么?)》测试过节点间存在Server进程与LMS的udp连接,使用的是HAIP(169.254.*.*), 而Linux操作系统的网络端口可用范围net.ipv4.ip_local_port_range 参数控制,适用于TCP和UDP,最大值是65535. 如果RAC中就一个private network 网卡,假设不排除所有进程都和某一个LMS进程通信如LMS1,LMS1分配1个IP addr+UDP port, 那FG进程的上限就是net.ipv4.ip_local_port_range /单个FG进程打开的UDP个数。

, ,

Troubleshooting Oracle 12cR2 Standby database crash due to Corrrupted block

最近一套oracle 12c R2的数据库日志应用总是中断,并且在standby 节点发现了一些坏块,存储检查正常,并且primary db端并没有发现坏块,standby db alert log中发现了大量的ora-600报错,当前可能为logical corruption(Internal inconsistency in the block while the block may have good header and footer. The block checksum will be correct but the block structures may be corrupt.),ADG的ABMR并没有自动修复该错误。这里简单记录。

, ,

oracle 23c的分布式数据库GDS(Globally Distributed Database )

长期以来,oracle数据库一直是集中式数据库的领导者,基于共享存储的RAC和日志流的DATAGUARD数据保护,提供了数据的最大高可用,支撑的全球各行业的核心业务。然而从Google的Spanner发起的分布式SQL开始,出像了像CockroachDB、TiDB 和 YugabyteDB 通过 Raft 共识复制和OceanBASE通过Paxos共识复制的分布式数据库,Oracle 现在似乎在这个赛道成了追随者。在Oralce 23C中添加了Raft复制,做为主备配置的替代方案,但是并不是重新构建一套新的数据库架构,而是基于现有的Partition、Oracle Sharding、GDS技术之上做了创新.

当Linux内核升级后,Oracle 数据库需要relink 执行文件吗?

前几个月有个XD的客户遇到过linux bug导致OS频繁重启,当时整理了笔记,巧合的是刚刚过去2个月另一个非XD用户使用OEL 7.7的客户也遇到了相同的问题,解决方法是升级内核,同事问升级内核后Oracle binary需要relink吗?我觉的是推荐,可能是非必须,记住这里说的是可能。

,

oracle 12c后 ‘日志文件分段’可能导致LGWR slow 等待’log file sync’

2c 引入了log segment功能,针对xml格式的alert log达到某大小后自动生成新文件,解决日志过大查看和监控采集的问题,我在很多年前专门写过listener log和alert log的text格式的shell用于切换,Log writer(LGWR)进程在switch时会写db alert log, 如果在写日志时有性能问题有可能会导致LGWR进程性能问题,导致实例出现等待log file sync。

, ,