一、 概述
目前星空企业版产品使用ORACLE数据库的项目也非常多,特别针对中型偏大型的项目,由于他们数据量大,对性能各项要求比较高,所以可能更多的这类型的客户会选择ORACLE数据库,大家都很清楚Oracle数据库比SqlServer维护成本高很多,难度大很多,门槛也高很多,但当项目使用Oracle数据库时,需要注意什么呢?如果面对在交付过程中遇到ORACLE 数据库报错时怎么办呢?下面就结合实际项目案例来分享一下使用oracle数据库时需要特别注意的事项及在系统使用过程中如何去甄别是Oracle数据本身的报错呢,并且如何处理这些报错,希望能帮助到更多的项目.
二、 数据库报错背景描述
项目1:
(1) 项目的星空企业版7.1版本使用的数据库为Oracle 11g,但项目上半年做账套拆分后有一个账套使用的12C,项目在做升级为企业版8.1之前,项目将另外一个账套使用的Oracle 11g 也升级为12C。
(2) 在升级为8.1的测试环境中,跑成本时出现Oracle数据库本身的报错,报错信息为:“Message:ORA-06502: PL/SQL: numeric or value error: character string buffer too small”,具体报错截图如下:
(3) 成本因为这个报错中断,在7.1版本当数据库升级为Oracle 12C也出现过,但数据库重启后能解决,但这次升级为星空8.1后多次重启也不能解决这个问题,是星空从7.1升级8.1版本花较长时间解决的问题。
项目2:
(1) 一锻造行业项目使用星空产品,数据库使用的是Oracle 12.1.0.2 版本
(2) 星空在上线过程中,用户反馈使用点击生产模块的一张单据的时候,出现以下错误,从报错来看,非星空企业版产品的报错,确定为数据库报错,报错如下截图:
三、 处理方案
项目1:排查和处理过程
(1) 从错误来看是数据库报错,Oracle维护的人员排查,查不出原因,并提单Oracle数据库 原厂,原厂回复是让从ERP自身排查,因此排查工作落到星空企业版这边负责成本的老师和总部负责Oracle的专家老师一起排查和分析,现场开发人员和客户的DBA协助
(2) 总部成本专业人员从日志初步排查出是余额表:T_HS_Balance,在日志中有中断报错,并让现场写一个插件来测,选择中断的SQL 来测,select * from T_HS_Balance,测试发现会重现问题(注意在数据库端直接执行肯定不会重现),因此基本锁定就是这个表存在问题
(3) 排查时还发现如果将这个表的数据转到一个新创建的表,问题也不会出现,因此发现这个表肯定是有比较特殊的处理,包括索引方面的处理等,总部Oracle的专家老师通过多方面排查,并通过现场的二开插件来快速验证的方式来排查问题
(4) 最终发现是由子分区表的相关属性引起,去掉子分区表以后,问题解决,运行这张表时不会报错
(5) 最后发现还不止这个表有问题,存储余额相关的几张表都会有问题,最后把这几张相关余额表的子分区去掉后问题全部解决,这几张表分别为:
T_HS_InivBalance T_HS_InivBalanceExp T_HS_InivBalanceEntry T_HS_InivBalanceExpEntry T_HS_Balance T_HS_BalanceExp T_HS_BalanceEntry T_HS_BalanceExpEntry
项目2:排查和处理过程
(1) 总部负责Oracle的老师凭专业能力很快就定位到时由于没打相关补丁引起
(2) 总部提供需要更新的补丁清单,打完Oracle这个版本相关补丁后,问题解决
四、 oracle数据库安装部署注意事项
1. 操作系统建议使用Linux操作系统,使用windows系统问题多
(1) Linux系统安全好、性能好、稳定好
(2) 比起其他操作系统,如:AIX、HP、WINDOWS等,ORACLE对LINUX系统的的支持力度最大,补丁最完全
(3) Linux版本建议选择Oracle Linux,Redhat Linux, Suse Linux,其他版本都没经过认证.
Linux系统安装注意事项
(1) Linux系统建议版本为:Oracle Linux(7.9)(官网有下载)
(2) 安装Linux时,建议选择使用英文语言,不要用中文,方便后期运维
(3) Linux 系统安装完成后,如果需要升级的需要先升级,确保系统正常运行后才可以安装数据库
2. Oracle 数据库版本选择建议
(1) 11.2.0.4或12.1.0.2(暂不推荐12.2、18C、19C及后续版本)
(2) 企业版(标准版不满足需求)
(3) 单节点或 Rac 环境均可,推荐使用 Rac
备注说明:RAC 提供数据库的高可用(双机互备:服务器1宕掉,还有服务器2提供数据库 服务)
3. Oracle 数据库升级注意事项
(1)Oracle数据库升级高版本比如ORACLE 12C或者12C以上版本时存在较大的风险,需谨慎,需在测试环境全面验证后才考虑数据库升级
(2)一般给客户的方案中一定要选择星空企业版支持得比较好的版本,如果客户选择高版本时要告诉客户存在的巨大风险,尽量使用星空对Oracle数据库支持比较好的稳定版本。
为什么不要推荐使用12.2.0.1版本呢?
(1) 金蝶云星空产品当前使用的 ODP.NET 驱动,也就是连接应用系统和数据库的接口程序,只在11204,12102版本认证过,高于此范围的,遇上故障的机会会增多
(2) 12.2.0.1,是12.2版本的初始发行版,对比18C(12.2.0.2),还是19C(12203),不论是BUG,还是性能,问题都是最多的,这个版本一般只用于学习、测试,不用于生产.
3. EM工具的安装
EM是数据库性能监控、SQL调优的利器,必须得安装它,当出现性能问题时也便于分析和解决问题,当总部专家支持时也需要通过EM工具进行分析,务必创建EM,并启动EM.
EM使用场景如下:
(1) 当系统出现性能问题时,需要分析数据库本身性能情况,查找性能引起的原因
(2) 需要监控SQL 执行情况时,使用EM非常方便,SQL执行情况非常清晰,一目了然
4. Oracle数据库安装完成后必须得安装补丁
(1)11.2.0.4 版本的补丁要求
建议打上这些补丁集,及小补丁(后续小补丁可能会有改动)
1) p28429134_112040_Linux-x86-64.zip -- GI 版本(20181016期,下同)。
p28204707_112040_Linux-x86-64.zip – 单节点。
p28440700_112040_Linux-x86-64.zip -- Ojvm。
2) 12646133,14078947,14275161,16016968,16086769_112041,16311211_11204171017, 17197563,17259786_11204160119(Post),17306264_11204170418,18405192 , 20033247,20048270,20250147,21050285_11204181016。
补丁更新注意事项:
1) 打补丁之前,须先阅读补丁自带的 Readme.html(txt)文件,按该文件要求操作。
2) 打完GI或者单节点的PSU补丁集后,再安装OJVM;安装完PSU+OJVM后,再打小补丁, 打小补丁时,需注意补丁版本与PSU版本的匹配度,小补丁的版本,必须是和PSU补丁集 同期,或者最接近PSU补丁期(必须小于PSU补丁期)。
如: 小补丁:21050285_11204181016 和补丁集 p28204707_112040_Linux-x86-64.zip同期, 而 17306264_11204170418 则是与该补丁集最接近的版本,会兼容。
(2)12.1.0.2 版本的补丁要求
安装完数据库软件后,建议打上这些补丁集,及小补丁:
1) p29698592_121020_Linux-x86-64.zip -- GI 版本(20190716期,下同)。 p29494060_121020_Linux-x86-64.zip -- 纯数据库版。
p29774383_121020_Linux-x86-64.zip -- OJVM。
2)19509982,21131203,21660388,22468781,22513913
特别说明:在上面的补丁列表里,没有打16756406这个补丁,是因为,该补丁已经包含在第 20190716期数据库 PSU 补丁集里。打了此 PSU 补丁集后,就无法/无需再打16756406这补丁
5. 对数据库集的要求
标准字符集:AL32UTF8
国家字符集:AL16UTF16
注意事项: 切勿选择错误字符集,一旦选择错误,建议删除、重建数据库。
五、 使用ORACLE 数据库过程中的数据库本身错误识别
使用Oracle数据库当星空出现一些莫名其妙的不太确定是否是星空产品标准产品或者是二开出现的错误提示时,可以从下面对照表中看错误信息是否是由于某些补丁未打造成的,如果是因为补丁未打造成的,则必须通过安装Oracle补丁来解决对应的问题。
具体参考如下:
数据库版本 | 对应补丁号 | 补丁解决对应的错误信息 |
11204 | 8857904 | ORA-04031 |
12646163 | ORA-00600:内部错误代码,参数:[qmcxeWSNQ1],[],[],[],[],[],[], | |
14078947 | Bug 14078947:SELECT FROM V$RMAN_STATUS VERY SLOW WHEN DATABASE IS OPEN | |
14275161 | ORA-600[rwoirw:check ret val] on CTAS with predicate move around | |
16016968 | 集群BUG,因打了补丁13955826引起 | |
16086769 | BUG 16086769 : ORA-600[13013] when executing a DML if the where clause includes an added column with a default value | |
16305657 | BUG 17474808:ORA-00600:[KGLPNMI_BAD_MIGRATION],FOLLOWED BY[18088] AND [1115] CRASH DB,,,ORA-600[kglpnmi_bad_miration] after upgrade to 11.2.0.4(文档ID 2342238.1), | |
16311211 | 重建索引后,监控属性丢失 | |
17197563 | 1. bug 17197563:ORA-600[kkmupsViewDestFro_4]from MERGE SQL with STAR transformation. 2. 数据库参数 star_transformation_enabled 被设置为TRUE 引发,改为默认值FALSE即可. | |
17306264 | 消耗完32765片回滚区间 | |
17325413 | Drop column with DEFAULT value and NOT NULL definition ends up with dropped Column Data still on Disk leading to Corruption (补丁包含在11204.4PSU) | |
18405192 | Create Table Fails with ORA-07445[evaopn3()+135](文档ID:1943615.1) | |
19692824 | LINUX7 上安装11204,使用EM时会遇上此BUG | |
20048270 | ORA-00979,not a GROUP BY expression | |
20250147 | 节点2的数据库实例因为LSM故障,无法启动(BUG 20250147 -ORA 600[KJXMGMB_NREQ:!BAT]. | |
21050285 | 采集数据字典表(SYS.X$KSOLSFTS ARE VERY SLOW)统计信息被卡 | |
12.1.0.2 | 16756406 | ORA-00600:internal error code,arrguments:[kpp_concatq:2],[10],[9],[8],[],[],[], |
22513913 | ||
19509982 | ||
21131203 | ||
21660388 | ORA-00600:[kmcmbf:pga ref],[OS PROCESS PRIVILEGES],[OX217C9A9C0] | |
22468781 | DBMS_STATUS.GATHER_FIXED_OBJECTS_STATS Hangs while querying X$KSQLFSQCE(Doc ID 2294247.1) |
推荐阅读