Solaris11下Oracle12C集成部署问题处理及优化

Stella981
• 阅读 551

Solaris11下Oracle12C集成部署问题处理及优化

随着Oracle12C在企业级应用环境的不断扩大和升级部署,越来越的企业级传统应用项目逐步开始向Oracle12C进行迁移和流动。硬件及操作系统升级后也给Oracle12C的升级迁移带来了很多技术性挑战和考验。本文结合企业在新的Solaris11操作系统环境下集成安装Oracle 12.2 RAC环境的问题及日常优化进行总结,希望能给企业级用户在集成过程中减少一些集成难度。

  1. 隐含参数修改

1.1、Oracle12C特定I/O共享池设置。

当用户在Solaris11环境下安装完Oracle12C的双节点RAC环境并进行了最新补丁升级,使用DBCA命令创建数据库后,发现数据库并不能正常工作和使用,通过在GRID用户下使用命令“****scrctl status res –t“命令查看发现其它服务均正常,唯独db服务会随机性重启,导致数据库无法访问,查看Oracle的trace文件发现如下错误:

ORA-00600: internal error code, argument: [kmgsdrv_3], [7], [4],[0], [0], [0xFE81B82C0], [0x000000000], [1], [0], [], [], []
...
Dumping diagnostic data in directory=[cdmp_20151030101436],requested by (instance=1, osid=4294986232 (MMAN)),summary=[incident=4918476].
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.

通过Oracle相关文档了解到,此问题可以通过在数据库参数文件中加入“_shared_io_pool_size=<granule_size>”参数来进行纠正和恢复。修改过程如下:

备份并修改当前ORACLE数据库spfile文件,登录ORACLE数据库并使用命令”****create pfile= ‘/home/oracle’ from spfile”,用户即可在用户目录下生成一个可以启动ORACLE的pfile文件。通过编辑器编辑该文件并加入如下内容:*._shared_io_pool_size=536870912,其中“536870912”代表的值可以通过将数据库启动到nomount状态下使用命令“****select bytes from v$sgainfo where name like 'Granule Size';”进行查看,用户可根据实际情况进行修改。之后用户可以通过pfile文件重新生成spfile文件并重启数据库。数据库进入稳定运行状态。

1.2、Solaris11系统shmmax参数设置。

在Solaris11下参数设置有别于其它类UNIX系统,安装完Oracle12C后因为按照应用要求,需要将SGA_TARGET参数修改为210G大小,修改后启动数据库实例时出现如下错误:

ORA-27125: unable to create shared memory segment

SVR4 Error: 22: Invalid argument

Additional information: 2560

Additional information: 506839040

Additional information: 8192

手工使用pfile参数引导系统发现同样报错,

经过联系ORACLE原厂工程师确认是系统共享内存设置不当引起的SGA超限问题,需要在操作系统中设置“shmmax”参数,并要确保“shmmax”值大于SGA_TARGET值范围。在Solaris11下分别以root用户执行如下命令:

/usr/sbin/projmod -U oracle -K "project.max-shm-memory=(priv,250g,deny)" user.oracle

以oracle用户执行如下命令:

/usr/sbin/projmod -U oracle -K "project.max-shm-memory=(priv,250g,deny)" user.oracle

之后从新启动Oracle12C双节点RAC数据库,系统正常运行。

  1. PDB****数据库字符集修改

从Oracle 12.2数据库开始,创建完成的同一CDB容器数据库中的各个PDB字符集可以不同,这样可以使数据库字符集具有更好的扩展性以及更适合应用系统的多语言环境部署,通常创建CDB会默认选择“AL32UTF8”字符集,之后可以通过命令方式将该字符集包含的子集字符集修改为PDB数据库字符集,但修改过程需要用户进行手工完成。以下以将PDB数据库字符集修改为“zhs16gbk”为例,过程如下:

2.1、关闭数据库并将数据库启动到mount状态,并使用如下命令“****alter system enable restricted session;”将数据库设置为受限访问模式,同时使用如下命令“****alter system set job_queue_processes=0;”“alter system set aq_tm_processes=0;”禁止数据库启动后台定时任务作业。

2.2、使用命令“****alter database open;”将数据库在受限方式下打开。通过以上操作保证数据库对外服务禁止。

2.3、使用命令“****alter pluggable database zhaq open RESTRICTED;”以限制方式打开插拔数据库(本例插拔数据库名为“zhaq”,用户应根据实际进行修改),准备进行该插拔数据库字符集修改。

2.4、使用命令“****alter session set container=zhaq;”将会话切换到插拔数据库中,使用命令“****alter database character set internal_use zhs16gbk;”对该插拔数据库字符集进行修改。完成后恢复数据库到正常模式,同时使用命令“****alter system set job_queue_processes=4000;”“alter system set aq_tm_processes=1”激活后台定时任务作业,“job_queue_processes”参数值用户应根据自己系统环境进行修改。

  1. 基础优化

3.1、Oracle12c安装后,在密码管理中依然延续了默认180天失效的策略,但多数情况下这一设置反而给用户以及应用系统带了不必要的麻烦。用户可以通过修改密码配置文件将该参数设置为永不过期,需要注意的是在Oracle12C中需要分别执行以下两条语句“****alter profile default limit PASSWORD_LIFE_TIME unlimited;”“alter profile ORA_STIG_PROFILE limit PASSWORD_LIFE_TIME unlimited;”进行该参数修改。同时使用分别执行一下两条语句“****alter profile default limit FAILED_LOGIN_ATTEMPTS 12;”“alter profile ORA_STIG_PROFILE limit FAILED_LOGIN_ATTEMPTS 12;”

3.2、使用命令****alter system set db_recovery_file_dest='+data' scope=spfile;**将回闪区目录指定给ASM进行管理。

3.3、Oracle12C安装完成后,默认情况下和低版本Oracle数据库RDBMS进行数据交互时,会出现兼容性问题,因此生产系统中应修改Oracle12C版本兼容参数来满足系统兼容性,通过使用命令“****vi $ORACLE_HOME/network/admin/sqlnet.ora”编辑该文件并添加如下内容:

SQLNET.ALLOWED_LOGON_VERSION_SERVER=8

SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

完成后Oracle12C即可以正常与甲骨文公司的其它低版本ORACLE数据库系统完成正常数据交互。

  1. 后记

系统集成作为很多较大信息系统建设项目的重要组成部分,其过程具有更多的工程化特点,系统组件间的搭配和组装,耦合部分的嵌套与装配都需要很多打磨和耐心仔细调试,尤其应用于高可靠、高可用、高安全性环境的系统集成更是如此,系统集成过程中更需要人的良好协作和沟通。

谢谢打赏,多少对我都是鼓励!!!

Solaris11下Oracle12C集成部署问题处理及优化

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
2个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这