导读:2019年2月Oracle 19c正式问世,新的版本引入了很多重大的功能和新特性,如自治索引、在线操作维护的增强、ADG备库发出的DML支持自动重定向等等,引起了广泛关注。而目前市面上Oracle数据库应用较为广泛的版本主要是11g 的 11.2.0.4 和12c的12.2.0.1版本,相信大家都十分期待19c的新特性新功能,也更关心19c上线可能会带来哪些问题。本文以某客户生产环境数据库上线19c为例,列举上线后可能会出现了哪些问题,供大家参考。
问题详情
某客户一生产环境数据库上线 Oracle 19C,操作系统为版本为Red Hat Enterprise Linux Server release 7.6(Maipo),数据库版本为19.5.0.0.191015,ogg版本为19.1.0.0.0。在割接之后出现了一些问题,内容如下:
1. OGG延时问题
问题现象:OGG一直延时1小时左右
解决办法:
TRANLOGOPTIONSINTEGRATEDPARAMS (MAX_SGA_SIZE 1024,_LOGMINER_READ_BUFFERS 256,parallelism 2)
修改为:
TRANLOGOPTIONS INTEGRATEDPARAMS (MAX_SGA_SIZE 2048, _LOGMINER_READ_BUFFERS 256,parallelism 2)
OGG延时解除。
2. jar包问题
问题现象:数据库日志报错信息如下:
2019-10-29T06:15:22.116566+08:00 Errors in file /xxxx/diag/rdbms/xxx2/trace/axxxx67.trc (incident=807865) (PDBNAME=xxxx):ORA-03137: malformed TTC packet from clientrejected: [3146] [94] [] [] [] [] [] []xxxxx(3):Incident details in: /xxxx/diag/rdbms/xxx2/trace/axxxx65.trc2019-10-29T06:15:23.163773+08:00xxxxx(3):Session (xx,xxx): Bad TTC Packet Detected: Inbound connection fromclientxxxxx(3):Session (xx,xxx): Bad TTC Packet Detected: DB Logon User: xxxxx, Remote Machine: xxxxx, Program: xxxxx, OS User: xxxxxxxxxx(3):Session (xx,xxx): Bad TTC PacketDetected: Client IP Address: xx.xx.xx.xx |
解决办法:
1. 使用合适的jdbc驱动, jdbc vs jdk, jdbcvs db 的兼容矩阵如下:
2. 代码问题
先看下面一段有问题的代码:
Connection con = null; try{ con = getConnection(); con.setAutoCommit(false); /* * update USER set name=’xxx’where id=’000001’; */ con.commit(); }finally{ if(con!=null){ try { con.close(); } catch (SQLExceptione) { e.printStackTrace(); } } } |
问题就出现在con.setAutoCommit(false);,写代码的人把数据库连接con 设置成非自动提交,但没有在执行出现异常的时候进行回滚。如果在执行第5行的时候出现异常,con既没有提交也没有回滚,表USER就会被锁住(如果oracle数据库就是行锁),而这个锁却没有机会释放。有人会质疑,在执行con.close()的时候不会释放锁吗?因为如果应用服务器使用了数据库连接池,连接不会被断开。
3. 注册服务问题
CDB service和PDB service的创建和删除方法:创建PDB xxx的service(add的时候有参数-pdb):
srvctl add service-s service_name -db db_unique_name -pdb pdb_name-preferred(instance_name1,instance_name2)srvctl start service -sservice_name -db db_unique_name
创建CDB的service(不指定-pdb参数默认创建cdb的服务)
srvctl add service -s service_name-db db_unique_name -preferred(instance_name1,instance_name2)srvctl start service -sservice_name -db db_unique_name
4. 时区问题
时区问题导致的后果是日志信息记录的时间有偏差,tfa收集指定时间段信息有偏差。
cd $ORACLE_HOME/crs/installvi s_xxx_xxx_env.txt将表示时区的TZ一行中的New_York修改为Shanghai修改前:TZ=America/New_York修改后:TZ=Asia/Shanghai |
参考文档:Differencein Log Time for Clusterware/Database Instance Alert Log Compare to Server Time(Doc ID 2312945.1)
5. ORA-600问题
ORA-600 [KPDBSWITCHPRERESTORE:TXN] 错误导致crash,命中BUG In 12.2.0.1 ORA-600 [kpdbSwitchPreRestore: Txn] Crash RACInstances (文档 ID 2583951.1)。MOS关于该文章的描述In 12.2.0.1 ORA-600 [kpdbSwitchPreRestore: Txn] Crash RAC Instances(文档 ID 2583951.1),该BUG会在Oracle 20.1版本中修复。
后台call stack基本命中,不过_drop_stat_segment参数必须在每个实例中进行设置。
_drop_stat_segment根据解释是ILM的统计信息,ILM是12C推出的特性,主要是利用heatmap+Automatic Data Optimization对象进行管理,_drop_stat_segment设置为1应该是清理ILM的相关统计信息段,该参数在12C中只是建议*._drop_stat_segment=1设置来避免因为ILM导致sysaux过大——HEATMAPSegment Size Is Large In SYSAUX Even When Heatm=Off (文档 ID 2024036.1).