随着大规模升级的到来,让我们谈谈您对 Oracle 12cR2 的体验

小夏 科技 更新 2024-01-29

关于作者:

杨志宏,DBAPLUS社区共同发起人,新聚网络首席布道者,对数据库和数据管理有深入研究,合著了《Oracle Core Technology》和《Oracle Exadata专家手册》。

大规模升级即将到来,我们来谈谈使用Oracle 12CR2的体验。

1.升级到12cr2的必要性

随着 2019 年 2 月 13 日发布的 Oracle 19c (Oracle 12.)2.0.3)对于Exadata版本的发布,Oracle 12CR2系统的数据库版本终于迎来了长期支持版本(Oracle 12c的最后一个主要版本),这意味着数据库版本还在Oracle 10G 11G系统中,是时候考虑升级了。

尤其是在 Oracle 11 中2.0.4.以前版本,使用db link系统,一定要升级。

事实上,根据 Oracle 数据库生命周期和版本演进路线图,到 2018 年 12 月 31 日,Oracle 112. 免费延长服务期(免手续费)已结束,部分普通SR账号新遇到的bug补丁将无权限**。

同时,考虑到SCN上限速率算法的变化,12c升级变得更加必要(当然,应用没有改变,或者应用不使用dblink可以忽略)。

每个版本的Oracle都有很多bug,但并不是说Oracle数据库软件不好,而是因为Oracle是OLTP领域的绝对王者,提供了太多的便捷功能,所以bug很多。 因此,在每次升级之前,我们都会浏览修复列表,看看是否有其他人发现并解决了任何新的错误。

到目前为止,Oracle 12系列 2 中的修复补丁数量为 2078 个:

当然,补丁的数量仍然比 oracle 11 少得多2 个 2 系列:

也远低于 Oracle 10系列 2 版本为 26,281(这些补丁均不包含集群补丁):

这个结果有点出乎意料,12cr2 上的补丁数量比前 2 个版本少了一个数量级。 一种可能是 12cr2 的 bug 少了很多,另一种可能是 12cr2 还没有迎来大规模升级,今年是升级到 12cr2 的最佳时机。

2. Oracle 12C 系统的一些新特性

与 Oracle 11g 相比,Oracle 12c 具有三个被广泛期待的特性:

多租户:12Cr1 中最多允许 252 个租户,12Cr2-19C 中最多允许 4098 个租户,这些租户由最大 PDBS 参数控制。

in-memory option

sharding

从两年多来的案例来看:

分片功能几乎没有使用。

主要原因:在122. SDB只支持一个表族,普通的业务数据库需要有多个表族在 Oracle 19c 中,添加了多表族功能,这可能是一个不错的用途。

内存中选项未大规模使用。

究其原因,一方面是使用场景,另一方面是维护成本,多租户特性成为了这个版本皇冠上的明珠。

多租户是 12c 系统最重要的功能,在 12 中可用1.0.引入了版本 1。 此功能是 12C 版本中最受欢迎的功能,因为它率先在容器数据库中包含许多可插拔数据库 (PDB),每个数据库都可以有自己独立的参数和资源使用限制。

许多企业使用多租户来整合碎片化、占用单个数据库的小型应用程序,大大减少了机器数量,降低了数据库许可成本,并使 PDB 迁移更加灵活。

在使用 PDB 的过程中存在一些 bug,影响相当大。 其中之一是 PDB 在 Data Guard 的备用端运行一段时间后“消失”:

bug 25576813 - v$pdb and show pdbs may not display some pdbs in standby database or ora-65011 on pdb open or pdb datafile on standby with wrong guid ( doc id 25576813.8) 这个错误自 17 年以来一直有一个一次性补丁,但尚未完全修复。完整的修复程序只能升级到 Oracle 18c 或 19c,这将在今年推出。

我一直想知道为什么错误补丁不能与下一个 PSU 中的一次性补丁一起打包

直到 2018 年,一位名叫 Oraguy 的用户才在 Hacker News 上爆料了以下信息:

oracle 12.2 这个版本,有将近 2500 万行的 c**!相比之下,最受欢迎的 NoSQL 数据库是 Redis 50.4 只有 20000 多行**,真的很短,很能干。 )

oraguy 是这样描述预言机数据库程序员的工作流程的:

获得一个新任务:解决一个新错误。

花了两周时间了解了大约 20 个不同的标志,这些标志以一种非常奇怪的方式创建了这个错误。

尝试添加标志,写几行,并注意不要产生更多错误。

将更改提交到包含大约 100-200 台服务器的测试服务器集群,这些服务器可以编译**、构建新的 Oracle 数据库软件并以分布式方式运行数百万个测试。

回家。 第二天来上班,继续处理其他错误。 测试可能需要 20-30 小时才能完成。

再次回家。 返回工作岗位并检查集群测试结果。 如果进展顺利,将有大约 100 次测试失败;不幸的是,将有大约 1,000 次失败的测试。 随机选择一些测试,并尝试找出您的假设出了什么问题。 可能需要考虑 10 多个标志才能真正了解 bug 的性质。

添加更多标志以尝试解决问题。 再次提交更改进行测试。 再等待 20-30 小时。

来来回回,重复两个星期,我大概明白了这个错误的原因。

有一天,在你差点自杀之前,你发现一个测试已经完全通过了。

再写几百个测试,以防下次坏孩子试图接触一个项目时,他们不会......搞砸你的更改

提交最后一轮测试的结果。 然后提交审核。 审查本身可能需要 2 周到 2 个月的时间。 因此,请继续下一个错误。

2 周到 2 个月后,一切都就绪,最终将合并到主分支中。

如果你看一下上面的 10,000 或 20,000 个补丁,其中一些补丁没有被合并到主分支 (PSU) 中是可以理解的。

PDB 除了用于小型库集成外,还具有在机器资源使用不平衡时不同 CDB 之间热插拔的便利性。

但是,实践证明,热插拔最好在相同版本之间进行,否则可能会有例外。

在 12C 构建 PDB 的语法中,还有一个叫做 path prefix 的新选项,用于将某些对象(目录对象 oracle xml create pfile oracle wallets)限制在特定的目录下。 这个目录前缀,一旦添加,就会一直陪伴PDB到年底,甚至DataPump也无法更改目录,所以添加时一定要谨慎。

在 Oracle 18C 中迁移 PDB 时,请运行 DBMS PDB检查插头兼容性,可能会报告 ORA-7445 [Intel SSSE3 rep memcpy()] 这是错误28502403 - Oracle 183.0 multitenant: compatibility check does not work。

但是,此错误仅在 18 中出现2 和 183的出现,用最新的18C可以规避这个问题。

随着《国家网络安全法》的实施,企业安全检查更加严格,“定期更改数据库密码”从响应检查转变为严格执行。 这对于11G DG的DBA来说是一件极其痛苦的事情,每次修改主库的密码,都要手动将密码文件同步到每个备份实例中,如果错过了某个实例而不同步,数据就不会同步。

12CR2 引入的新功能是自动将密码文件同步到 Data Guard 备用数据库,当 sys、sysdg 等的密码发生变化时,会更新主数据库中的密码文件,然后将更改传播到配置中的所有备用数据库。

这可以与 11gr2 引入的新参数重做传输用户一起使用,该用户创建一个单独的日志传输授权用户,并授予管理员权限,然后密封帐户。 需要注意的是,此用户名区分大小写。

最新的 Oracle 19c 中还有很多新特性,我最关注的有两点:

自动统计管理

统计管理一直是大型企业数据库管理中的难题,随着表数据的变化,可以实时更新统计数据,防止SQL语句选择次优执行计划(据官网介绍,这是AWS放弃Oracle而选择Aurora的重要原因)。

Oracle 19c 具有内置的专家系统,内置算法可以将应用程序 SQL 历史记录捕获到 SQL 仓库中,识别对新 SQL 有益的回选索引,验证、做出决策、验证、监视自动索引创建,并在自动创建的索引在一段时间内不适合时自动删除它们。

自动创建索引

自动索引创建引入了 dba 自动索引配置的切换视图。 鉴于 19c 目前仅在 Exadata 版本中可用,这两个功能是否会在生产中使用还有待观察。

3.一些应谨慎使用的功能

将事务性生产数据库迁移到 Oracle 12c(包括 Oracle 12Cr2、Oracle 18C、Oracle 19C),有一些功能建议关闭(其中一些从 Oracle 10g 开始就被推荐了),设计理想,现实瘦弱,我们能做的就是帮助尽可能圆润。

下面的默认数据库都是 oracle rac:

1. 实例并行执行

Parallel Force Local:此参数默认为 false。 从理论上讲,将多个节点聚类并处理在一起是最优解。 事实是,多节点并行处理的协调成本较高,节点之间的通信负载较大。 因此,应将其更改为 true,以便在进程级别实现本地化并发处理。

2. 自动内存管理

SGA 自动管理 SGA 目标 从 10G 到 12C 内存级别 自动管理内存目标。 建议将所有核心生产仓库改为手动,几个月未看一眼的非核心仓库可以设置为自动管理。

3. 查询结果缓存

缓存一次,使用100次。 这可能适用于某些“静态”查询系统,这在 OLTP 中很少见。 所有结果缓存最大大小=0。

4. 布隆过滤算法

布隆滤波是布卢姆在2024年提出的,用于检索对象是否在某个集合中,其优点是比其他算法空间效率更高,缺点是具有一定的误识别率。 一旦发现错误,效率就会降低 100 倍,这对于高效稳定的系统来说是不可接受的。

bloom_filter_enabled=false;_bloom_pruning_enabled=false

动态资源重组:每个数据库资源都有其主节点、所有者和请求者,其初衷是根据请求情况动态调整主节点,以减少实例之间的数据传输。

gc_policy_time=0;_gc_undo_affinity=false;"_gc_read_mostly_locking"=false。

5. 创建分段延迟

创建新的数据表时,Oracle 将仅创建此对象,暂时不分配段,并且仅在将第一个数据插入到表中时创建段。 初衷是为了节省存储空间,但这个功能有很多bug。

deferred_segment_creation=false

6. 基于列的内存存储

In-Memory 选项是 12C 的亮点之一,适用于特定应用。

IM 功能需要不定期维护,不仅要关注 IM 中的表是否加载成功、内存区域是否不足,还要在内存资源有限的情况下对存储在 IM 中的表进行优化,及时添加需要的表,删除不需要的表。

一般建议禁用:inmemory size=0;inmemory_query=disable;

四、一些问题和bug

升级到 Oracle 12c 后遇到的一些重要错误建议进行纠正。

问题 1:在 SGA 手动管理模式下,Oracle 会自动偷偷增加共享池(Oracle 192 已解决)。

命中 bug 26405036 大量分配"ges enqueues" and "ges resource dynamic"在共享池中,会自动将共享池的大小从 20G 调整到 200G 以上,直到 SGA Max Size 中没有更多可用空间,并且应用程序将报告 ORA-04031。

解决方法是修补当前的 oracle 185 的补丁也出来了:

临时解决方案如下:

sql> oradebug setmypid

sql> oradebug lkdebug -m reconfig lkdebug

问题 2:主目录中会生成大量跟踪文件或单个超大文件,当空间已满时系统挂起。

问题类似,但它不仅仅是一个错误:

原因1:

trace files generation with message “auto sga: kmgs_parameter_update_timeout gen0 0 mmon alive 1”.

这是一个错误25415713,可以通过安装一次性补丁来修复。

原因2:

trace files generated from rman module with krb messages.

可能是:bug 28174827:rman无条件krb跟踪文件后安装错误22700845修复

bug 28390273 :rman unconditional krb trace file after patch 27674384

通过更改系统设置事件'trace[krb.*]disk disable, memory disable';解决。

原因3:

kzan: ora-55917 during cli write.

kzan: sys user audit records will written to files now.

KTLI 跟踪:

alter system set event='55901 trace name context off';

alter system set event='trace[recordcompose] off';

alter system set event='trace[filewrite] off';

alter system set event='trace[queuewrite] off';

问题 3:在 RAC 群集环境中,截断一个大表会导致另一个节点挂起。 DBAPLUS 社区有一篇特别的诊断文章:你敢在 Oracle 12c R2 上做一个大表吗?

该错误已在最新版本的 PSU 中修复:

问题 4:升级到 Oracle 12c 18c 后,在早期版本中连接到数据库客户端时报错

ora-28040: no matching authentication protocol/ora-01017: invalid username/password; logon denied

需要先去sqlnetSQLNet的allowed_logon_version_client=8/sqlnet.允许的登录版本 server=8,然后重置密码。 (请参阅 MOS 文档 ID 2296947。1)

五、几个重要参数

还有一些其他推荐的参数,其中大部分是为了避免错误,还有一些是为了关闭某些预言机功能。

ASM初始化参数,将Memory Target设置为2G,将Process设置为200或更高版本。

数据库参数:

serial_direct_read= auto;避免高直接路径读取

lm_tickets=5000;默认 1000,添加 GES 消息工单

px_use_large_pool=true;并行会话使用大型池而不是共享池,从而降低 ora4031 的性能

b_tree_bitmap_plans=false;

sec_case_sensitive_logon=false;禁用密码区分大小写。

gc_defer_time=0;减少热块的进程争用。

datafile_write_errors_crash_instance=false;当在数据文件(sysytem 除外)中发现读写错误时,发生错误的数据文件将脱机,而不会关闭实例。

event='10949 trace name context forever:28401 trace name context forever, level 1:10849 trace name context forever, level 1' ;当数据库关闭时,用户继续输入错误的密码,导致大量库缓存锁定关闭自动串行直接路径读取功能,以防止发生过多的直接路径读取并消耗过多的 I/O 资源。

undo_autotune=false;关闭撤消自动调整。

use_adaptive_log_file_sync=false;默认情况下,将日志缓冲区写入文件模式处于后等待模式,该模式设置为 112.0.版本 3 开始添加轮询方法。 如果禁用此参数,则不允许切换。

fix_control"='14142884:on','8560951:on','8893626:off','9344709:off','9195582:off','9380298:on','13704562:off','16053273:off','8611462:off','17760375:off','17938754:off','8560951:on'

当然,还应该注意的是,这些只是需要注意的参数,在实际环境中还有其他参数应该考虑。 如果您认为在阅读过程中有一些参数需要调整,请在文章末尾留言,为其他同行提供参考。

6. 升级参考文章

核心数据库升级是一个复杂的系统工程,必须经过严格的程序制定、升级测试、性能测试和最终的割接迁移过程,虽然我们经历了上千个系统的12c升级,但每次升级前的测试还是能发现新的缺陷。

有些是面向应用程序的,有些是SQL性能的,有些是数据库软件,甚至有些是存储链接,充分的测试是确保成功升级的唯一保证。

对于大数据量的升级和迁移,甲骨文副总裁Swonger曾发表演讲:不到1天迁移+200TB数据库,这是欧洲电网的案例,采用TTS+EXDP+Perl等手段,值得一看。

友情链接: 对于升级来说,重要的不仅要关心升级本身能否按时完成,还要关心升级的性能、稳定性、可用性、数据一致性和完整性如何,在正式升级割接之前,都应该进行充分的模拟和验证。

相似文章

    AI大型专题报告:从理论到实践的大规模语言模型

    今天分享AI系列深度研究报告 AI大规模专题报告 大规模语言模型从理论到实践 报告制作人 光大控股 报告总计 页。语言是人类与其他动物之间最重要的区别,人类的多元智能与此密切相关。逻辑思维是以语言的形式表达的,大量的知识也是以文字的形式记录和传播的。今天,互联网上有数万亿的网络资源。其中大部分信息都...

    快手组织架构进行了大规模调整!

    快手近日宣布了一项重大的组织重组,这是公司今年以来最大的一次调整。报道称,此次调整涉及快手多个重要业务线,包括主站 电商 商业化 社区科学等。具体调整方面,快手商业化事业部下属的当地消费事业部将调整为主站线下,并更名为招聘地产事业部,负责快品及房地产相关业务。同时,取消主站产品部,由新成立的孵化产品...

    俄军对顿巴斯北线发动大规模进攻,只有1000人坚守在赫尔松左岸

    在东欧这片冰冷的土地上,俄乌冲突如火焰般燃烧,每天都在书写新的战争故事。月,冲突翻开了新的篇章,激烈的战斗和双方的战术行动让世界等待着。从顿巴斯北线到赫尔松左岸,从阿富汗城西南侧到扎波罗热方向,战火无情地吞噬着一切。在战火下的毅力和进攻。首先映入眼帘的是俄军在顿巴斯北线库皮扬斯克的大规模进攻。与此同...

    中方宣布“出兵”,出动大批战机,西方喊嚣霸弱者!

    中方宣布 派兵 大规模战斗机出动,西方喊霸弱者!众所周知,菲律宾这个地处东南亚的国家,与中国保持着密切的联系。为了维护中菲友好关系,中国不仅允许菲律宾水果进入中国市场,还积极参与和合作了多项基础设施项目,为菲律宾经济发展提供了有力支持。然而,尽管中国提供了善意的帮助,但菲律宾在一些问题上与中国产生了...

    乌克兰首都基辅遭到历史上最大规模的无人机袭击

    基辅,当地时间日,乌克兰 宣布,首都基辅遭遇俄乌冲突爆发以来最严重的无人机袭击。乌克兰空军成功击落了 架俄罗斯攻击无人机,确保了该地区的安全。与此同时,正在乌克兰访问的拉脱维亚人林克维奇也紧急进入基辅的一个避难所,以确保自己的安全。据乌克兰 称,日,基辅遭遇一系列大规模无人机袭击,这是俄乌冲突爆发以...