Oracle 19/21c 新特性: Sequence dynamic cache resizing
从Oracle 19.10 及更高版本中提供的sequence新增强功能“Sequence dynamic cache resizing ”, 在Oracle中如果应用中频繁的调用sequence的nextval值是可能存在性能问题,如enq:SQ 或row cache lock, 之前在一个客户的业务系统有一个非常糟糕的设计全库使用一个sequence, 所以及时cache值调到了2万依旧在高并发调用时sequence性能问题还是非常明显。
小试墨天轮社区Oracle、MySQL、Redis、PostgreSQL等线上数据库测试平台
墨天轮社区最近发布了“数据库在线实训平台”,目前支持Oracle、MySQL、Redis、PostgreSQL、openGauss和MogDB六类数据库。如果参加过国产数据库的一些线上培训认证的话,会接触到这种形式的数据库玩法,简而言之就是你可以在浏览器中的命令行窗口,做一些数据库命令的学习研究。
Alert: Oracle GoldenGate 19 was change ALLOWNULLABLEKEYS to NOALLOWNULLABLEKEYS
OGG 19.*默认改变原来OGG 12版本ALLOWNULLABLEKEYS为NOALLOWNULLABLEKEYS, 这样会导致在replicat时因为不考虑可为空的唯一索引做为标示键,而使用全字段组合在一起作为行的唯一标识,但是EXTRACE的源库又只有这个唯一键的附加日志,trail中也只有该唯一列更新列时,在replicat时会产生OGG-1403记录不存在,而丢失更新,insert不受影响, 同时oggerr日志中记录的是INFO OGG-06441,这样更不会引起人的注意。
对于登录相关的 LAST SUCCESSFUL LOGIN TIME的Library cache lock又出新参数
上周发布了新 Bug 33121934 Library cache lock / load lock / mutex x during connection storm, 也是在登录高并发时,因为更新最后登录时间特性出现的library cache lock等问题,之前是引入_disable_last_successful_login_time禁用,这次引入了2个新的隐藏参数可以细化行为的更新, 不用再那么频繁。
Alert: Move partition Update Indexes索引空间可能未释放
在做分区表move维护时,可以使用’UPDATE INDEXES’ 选项更新 global 和 local indexes ,使索引并不失效,11.2.0.4版本前有个小bug,在update indexes期间也有短暂的local index失效,在oracle 12c 后引入新特性move online partition ,可以在DDL期间不锁DML操作,注意在online move 期间也会发生 UPDATE INDEXES or UPDATE GLOBAL INDEXES索引维护,
Oracle、MySQL、PostGreSQL、SQL Server数据库比较系列(一):null value
最近几年数据库市场百花齐放,在做跨数据库迁移的数据库选型时,除了性能、稳定、安全、运维、功能、可扩展外,像开发中对于值的处理往往容易被人忽视, 之前写过一篇关于PG区别Oracle在SQL解析缓存的笔记《PostgreSQL 12 : Prepare statement和plan_cache_mode 参数》,这里记录一下null 值在这几个数据库中的区别。
Oracle & PostGreSQL 生成 JSON 数据
在WEB应用或图展示的程序中通常使用Json格式传输,JavaScript Object Notation (JSON) 是一种轻量级的数据传输格式,在关系型数据库中通常存储的是表、列格式,如果数据库可以直接返回JSON, 那基于JSON传输的应用将会收益,JSON 是一种完全独立于语言的文本格式,使 JSON 成为理想的数据交换语言。 在PostGreSQL和ORACLE 12.2中都提供了JSON的SQL函数, Oracle Database 21c 中添加了原生 JSON 数据类型,
oracle 18c 、19c 重建 PDB standby database dataguard
在Oracle 12c之后版本多租户环境的Standby DATABASE,当某一个PDB出现文件丢失时或PDB多个文件损坏,如何重建PDB standby database. 这里简单记录在18c后的方法。
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 锁来编译程序包,那么如何在不停机的情况下做到这一点呢?