Oracle19c 建议的 One-off patch之disable LAST SUCCESSFUL LOGIN TIME
之前分享过12c后关于用户登录的新特性笔记《Oracle 12c New Feature: Last Login Time for Non-Sys Users》, 此特性对于分别哪些用户长时间未登录(不使用)非常有用,从是从12c开始一直到当前最新的RU19.12 ,都没有在RU中打包关闭该特性的方法。前几年在12c就遇到过较高的library cache lock是与该特性有关,用户无法登录,当时的SQL 更新user$, namespace为Last_Successful_Logon_Time,此问题特性只到21C base版本才引入了隐藏参数来禁用。
Oracle Audit write syslog(数据库审计写系统日志)
之前分享过如何把GoldenGate写入syslog的笔记 Oracle goldengate write syslog(ogg 写系统日志),今天有同事问如何把audit 日志记录syslog, 简单研究一下,syslog是操作系统级协议,
如何在Oracle 数据库内格式化SQL 或PL/SQL ?
有时在输理复杂的SQL或pl/sql代码逻辑时最好是格式化一下文本,当然我们有toad或plsql developer等其它第三方客户端程序,如果能在数据库内容可以格式化一下SQL更佳,当前数据库12C以后的的软件安装介质中已经包含了Oracle SqlCL或Oracle SQL Developer, 使用这两个自带的任一工具中的java lib的 dbtools-common.jar 中的 oracle.dbtools.app.Format 函数就可以实现。
SQL: 如何让一个查询SQL持续多少秒
像TanelPoder的snapper 工具一样,有时比如需要让一个SQL执行多少秒,当然不是为了应用代码里故意给后期应用优化留下点“小惊喜”,目前能想到的几种方式
Troubleshooting select ‘hang’/spin on 12C Active DataGuard
今天遇到一套oracle 12c RAC数据库,查询一个分区表的某一个分区,其实就1条记录,段大小也就4M,在primary db查询秒出,但是在standby db查询十几分钟不出结果,注意性能问题hang和spin是两个类型,卡住不动是hang,死循环是spin, 通过v$session.seq也可以判断,当然也可以从call stack判断,
Oracle 19c新特性: Listener自动清理(Network Log File Segmentation)
在 Oracle 19c 上,Oracle 引入了两个有关listener管理的新参数。我们可以在Oracle内配置日志轮换,而无需在OS shell 脚本上进行任何额外配置,实现logrotate功能。该特性叫做“Oracle Network Log File Segmentation”
Oracle 12cR2 : DataGuard 、 ZDLRA、REDO_TRANSPORT_USERT
在 DataGuard 环境中,默认情况下,当使用密码文件时,SYS 用户的密码用于验证重做传输会话。但出于安全原因,您可能不希望仅将如此高特权的用户用于重做传输。为了克服这个问题,Oracle 实现了 REDO_TRANSPORT_USER 初始化参数。
REDO_TRANSPORT_USER是在DATAGUARD环境中用于 redo transport 远程密码认证指定数据库用户名,
Troubleshooting 19c ORA-00600 [kkpapDIPObjNum1] when split partition
之前分享过oracle split分区的内部检查方式《 oracle fast split partition 》,我们一个客户目前还是人肉拆分区模式,每月10余万的分区, 最近遇到一个Oracle 19c(19.9) 拆分区时ora-600 错误[kkpapDIPObjNum1] , 问题是当split分区时递归的分区检索SQL, 分区列上只有全局分区,分区裁剪的分区未发现任何分区数据。
Alert: Oracle 19c ORA-30481 or ORA-7445 [qecgoc2()] _optimizer_aggr_groupby_elim
oracle升级是一项大工程,性能、语法、函数变化都可能导致应用无法使用,最近几年升级19c的较多,一定要做足升级前测试,并不是只有wm_concat函数没了,再手动创建一个那么easy, 前几年升级12c是发过一个案例《Troubleshooting ORA-00979: not a GROUP BY expression after upgrade Oracle 12C》 ,也是同一个SQL在升级后提示语法错误。 这里演示一个19c 的另一个语法问题,后面会陆续在微信公众号分享 《oracle19c 避雷系列》。
12c 新特性rowsets(_rowsets_enabled=true) bug,19c bug ORA-00600 [qesrLoopOverSetRowP:rows]
“rowsets”这是一个新的 Oracle 12c 特性, 是SQL层执行计划相关的内部优化,在12.1 中存在wrong result的bug, 解决办法同样是禁用rowsets或使用event 10055禁用特定的使用场景。如果在12.1中是建议禁用rowsets, 但毕竟是一个优化项,19c 版本也做了扩展建议保持启用
再续PGA 和max_map_count、_realfree_heap_pagesize
《PGA 一点认识》《Know more about PGA_AGGREGATE_LIMIT 12c 19c》 看到限制PGA的参数有_PGA_MAX_SIZE、 _SMM_(PX)_MAX_SIZE、PGA_AGGREGATE_TARGET、PGA_AGGREGATE_LIMIT ,最近看到一个案例在执行存储过程时,为了提高SQL性能手动增加_PGA_MAX_SIZE参数值,如在数据仓库环境可能更明显,当把参数_PGA_MAX_SIZE 调到4GB以上时(default 2GB),依旧遇到了ora-4030 错误, trace 文件中显示上限达4GB的上限,Process Map Dump 达65537行。
oracle 基于Edition Based Redefinition(EBR) 同一数据库PL/SQL多版本控制
在oracle中持续的为online(Zero Downtime)引入了大量的特性,但在国内可能用的很少,互联网搞出的“灰度发布”一词也是这个目的, 在对正常运行时间要求较⾼的数据库上,将代码更改发布到执行频繁的程序包中的 PL/SQL 会带来很多挑战。在执行程序包时,⽆法获得DDL 锁来编译程序包,那么如何在不停机的情况下做到这一点呢?
Troubleshooting 19C DG standby crash with ORA-07445 [kcbzwb()+2265] [SIGSEGV]
一套Oracle 19c (19.8)RAC dataguard环境,standby 总时自动crash, 报错提示是lms进程异常触发ora-7445 kcbzwb 在cache层的内部错误 ORA-07445 [kcbzwb()+2265] [SIGSEGV] , 确认为oracle bug, 后期应该比较常见,记录一下。
Troubleshooting LGWR waits for event ‘DLM cross inst call completion’ 案例
客户一套Oracle 19c Dataguard的数据库环境,standby 端的总是会间隔性出现较大GAP, 同时DB alert log日志出现LGWR (ospid: 105521) waits for event ‘DLM cross inst call completion’ for N secs. 的现象,Standby端并未对外提供查询,同时也禁用了多实例日志应用,同时系统资源空闲LMS进程个数正常, 如果关闭其它节点只留apply log节点并不存在该问题, DLM 是Distributed Lock Manager 属于RAC架构中核心机制,实现多节点资源共享调度。
Row source statistics执行计划的统计信息
Row source statistics是在执行 rowsource(执行计划的一个步骤)期间花费的时间、返回的行数、缓冲区获取数和物理读取和写入以及工作区使用情况的一些统计数据。当启用统计信息收集时,这些统计信息填充在V$SQL_PLAN_STATISTICS和V$SQL_PLAN_STATISTICS_ALL(基于X$QESRSTAT和X$QESRSTATALL)中。
Troubleshooting: Oracle 19c wait event ‘latch: MGA shared context root latch’
最近一套客户环境从12C 升级19c(19.9)后在我们的监控上Wait class “Concurrency”等待告警进入TOP, 但是从V$SESSION和ASH view中的活动(active)的会话并未显示这么严重等待, AWR的top event中同样也不存在, 但是算在了Wait Classes by Total Wait Time和Background Wait Events里面,具体的wait event为“latch: MGA shared context root latch” , 1小时的AWR些latch wait 时间高达55,141秒,
Know more about PGA_AGGREGATE_LIMIT 12c 19c
Prior to 12c,PGA_AGGREGATE_TARGET was the Parameter used to control amount of memory allocated to User Processes(mainly work areas). However PGA_AGGREGATE_TARGET is a soft target and not a hard limit. The actual PGA usage can be as high as three times of the value of PGA_AGGREGATE_TARGET.This can lead to memory swapping & performance degradation.
Troubleshooting ORA-32000 when modify ASM spfile (oracle 19.11)
昨天在配置ASM instance参数时发现参数无法修改,提示ora-32000,即使是grid sysasm, 环境是新安装的oracle RAC,最近刚安装的19c 11RU,也并非是19.11 RU的新特性,主要还是安装过程中出过问题AUTOupgrade 失败,手动处理,没有更新集群状态。
Troubleshooting ORA-15028 during drop archivelog failed in ASM
前几天朋友问无论使用asmcmd rm还是rman 在删除一个归档日志时,提示ora-15028 文件正在被访问,分析是O002进程占用,该进程是oracle instance修改asm instance metadata的进程, 经测试是非致命进程,可以尝试kill, 不必重启instance. 下面是诊断方法。
adrci show ‘No ADR base is set‘ 解决办法
oracle 11g后引入adrci 仓库管理trace文件,12c后更把把GI和DB全转到了adrci, 我还是比较喜欢用它小工具,今天一套友商安装的数据库使用adrci 查看日志提示No ADR base is set, 检查了$ORACLE_BASE环境变量也存在,同时也未使用symbolic links 目录,临时解决当然可以使用adrci中SET BASEADR_BASE DIR手动指定ADR BASE, 对于使用频繁的工具,手动set,不能忍。