金蝶云星空 ORACLE 11G数据库安装运维最佳实践

本文主要说明ORACLE 数据库服务器环境安装软件及版本要求,以及安装完成后的配置工作。避免已知的一些问题,以确保数据库以稳定的状态运行。
1 版本要求
l 数据库服务器的操作系统,推荐使用 ORACLE LINUX7.6。
l 数据库软件版本,要求安装11204企业版(不支持标准版),单节点或RAC环境均可,推荐使用RAC。
2 配置要求
1) 安装最新补丁集
安装好的Oracle,需要同时安装最新的补丁集。
以11Gr2为例:
截止至 2018年10月,当前最新版本的补丁集为 20181016 日发布(使用CSI服务号,到ORACLE的SUPPRT网站下载),此外,还需要打上下列小补丁(ONE-OFF PATCH):
12646133,14275161,16086769_112041,16311211_11204171017,16756406,17259786_11204160119,17306264_11204170418,18498878,18841764, 19174639,19678658_11204171017,19692824(使用linux7时才需要,20181016补丁集含), 19855835_112044,20033247,20048270, 20724902(注意README.txt里的提示:安装此补丁后,需要在数据库里执行脚本postinstall.sql),20907061_11204180116,21050285_11204181016 (有多个版本,按PSU补丁集版本来下载安装)。22113854_112040(注意README.txt里的提示:安装此补丁后,需要在数据库里执行脚本postinstall.sql),23665623_11204171017,24739928_11204180417,24921392。
11204.20181016的PSU版本号:
p28429134_112040_Linux-x86-64.zip -- GI 版本,
p28204707_112040_Linux-x86-64.zip -- 纯数据库版。
提示:1 PSU补丁集在单节点环境使用纯数据库版,在RAC 环境使用GI版本。
2 优先打补丁集(强烈建议),再打小补丁(建议)。
3 解压后,请按照解压出来的 readme.html/txt 文档(解压目录里)说明安装。
4 有时补丁集和小补丁可能会存在冲突,如:在打补丁19678658前,做补丁间冲突检查,
[oracle@rac12 /backup/soft/p19678658/19678658]
$opatch prereq CheckConflictAgainstOHWithDetail -ph ./
此时,该命令的反馈结果,可能会包含类似这种信息: (Conflict with Composite Patch 27338049),
遇上这种情况,通常得再到SUPPORT 网站,寻找该补丁的最新补丁集,如上:19678658_11204171017
补丁19678658 和 27338049 集有冲突,但19678658_11204171017和该补丁集没有冲突,此时,得选择后者来
打。如下检查:
[oracle@rac11 /backup/soft/opatch/p19678658_11204171017/19678658]
$opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Oracle Interim Patch Installer version 11.2.0.3.19
Copyright (c) 2018, Oracle Corporation. All rights reserved.
PREREQ session
Oracle Home : /home/app/11.2.4/product/db_1
Central Inventory : /home/app/oraInventory
from : /home/app/11.2.4/product/db_1/oraInst.loc
OPatch version : 11.2.0.3.19
OUI version : 11.2.0.4.0
Log file location : /home/app/11.2.4/product/db_1/cfgtoollogs/opatch/opatch2018-06-01_09-39-55AM_1.log
Invoking prereq "checkconflictagainstohwithdetail"
Prereq "checkConflictAgainstOHWithDetail" passed.
OPatch succeeded.
[oracle@rac11 /backup/soft/opatch/p19678658_11204171017/19678658]
$
5 当往rac 环境打补丁16311211_11204171017后,数据库将无法MOUNT。原因:控制文件放在ASM的某个DISKGROUP上,而该DISKGROUP 的GROUP 为 asmadmin,与 数据库软件的安装属主(通常都是 oracle账户),下的 $ORACLE_HOME/bin/oracle,该文件的 group 不一样,该文件的 group 此时一般为 oinstall,故导致 $ORACLE_HOME/bin/oracle 报权限不足,无法读取该diskgroup 上的控制文件,故,无法启动数据库。
解决方法如下演示(文档 ID 1378747.1):
--1
[oracle@rac11 /backup/soft/opatch]
$cd $ORACLE_HOME/bin
[oracle@rac11 /home/app/11.2.4/product/db_1/bin]
$ls -lrt oracle
-rwsr-s--x 1 oracle oinstall 239837496 May 30 17:22 oracle <-------------- 经分析,是因为 oracle 文件的属于从 asmadmin 变成 oinstall 的原因
--2
[oracle@rac11 /home/app/11.2.4/product/db_1/bin]
$exit
logout
[root@rac11 ~]
#su - grid
Last login: Wed May 30 14:44:28 CST 2018 on pts/2
[grid@rac11 ~]
$cd $ORACLE_HOME/bin <--------------- 来到 grid 账户的此目录下,执行下面的操作
[grid@rac11 /home/app/11.2.4/grid/home/bin]
$./setasmgidwrap o=/home/app/11.2.4/product/db_1/bin/oracle <--------------- 修改 oracle 文件的属主(数据库软件的安装属主(通常都是 oracle账户)的 bin 目录下的 oracle 文件)
[grid@rac11 /home/app/11.2.4/grid/home/bin]
$ls -lrt /home/app/11.2.4/product/db_1/bin/oracle
-rwsr-s--x 1 oracle asmadmin 239837496 May 30 17:22 /home/app/11.2.4/product/db_1/bin/oracle
所有节点都要重复上述操作,之后即可正常启动数据库。
若看不懂这一条,那就不要往 RAC 环境打补丁 16311211_11204171017,14275161,12646133。
6 上面列举的小补丁(如:16311211),尽量寻找发布时间晚的补丁,因为,早先的版本,可能存在与PSU补丁集冲突的情况,而后面出的版本,则可能已经解决了此冲突。如补丁:16311211,会与20180417补丁集冲突;但若是16311211_11204171017,还是同一补丁,但不会与上述补丁集冲突。
2) 初始化参数设置
下面的参数值,是通常情况下的设置值,实际情况需要根据服务器的硬件配置做相应的调整。
配置HugePgaes
如果采用SSD存储,建议开启,但非SSD存储,需要经过测试验证。
示例:
Hugepages -> 大页, linux 环境,大页的尺寸一般为2M.
测试服务器的物理内存为:64G.
1 以 root 身份,编辑文件 /etc/security/limits.conf, 增加内容:
Oracle soft memlock 60397977 à 单位 KB
Oracle hard memlock 60397977
此参数值,比物理内存(64G)稍小。
若是oracle linux操作系统,该参数可能已经在文件中自动设置好,无需改动。
2 以 oracle 身份登录服务器,执行命令: $ ulimit –l,应该出现以下结果:
$ ulimit -l
60397977
3 由于 HugePages与 AMM不兼容,故,需要把 memory_max_target, memory_target 初始化为0,同时设置需要的 sga 值,此处设置 sga值,为物理内存的一半。
alter system set memory_max_target=0 scope=spfile sid='*';
alter system set memory_target=0 scope=spfile sid='*';
alter system set sga_max_size=32g scope=spfile sid=’*’;
4 重启数据库实例 Startup nomount;
5 在操作系统下运行脚本: hugepages_setting.sh,以计算操作系统参数值 vm.nr_hugepages
$ ./hugepages_settings.sh
...
Recommended setting: vm.nr_hugepages = 16386
$
6 以 root 身份,编辑/etc/sysctl.conf 文件,在该文件尾,添加:
vm.nr_hugepages = 16386
7 以 root 身份,执行命令: 以便让该参数生效,
# Sysctl -p
该命令会输出一系列的参数值,若见到vm.nr_hugepages = 16386,说明参数开始还生效,
8 关闭,重启实例,同时查看数据库的警告日志,若出现下面红色部分的信息,说明 HugePages 设置成功,否则,配置失败,
Starting ORACLE instance (normal)
****************** Large Pages Information *****************
Total Shared Global Region in Large Pages = 5122 MB (100%)
Large Pages used by this instance: 2561 (5122 MB)
Large Pages unused system wide = 10 (20 MB) (alloc incr 16 MB)
Large Pages configured system wide = 39436 (77 GB)
Large Page size = 2048 KB
***********************************************************
9 数据库运行一段时间后,可以查看到大页的使用情况。
$grep Huge /proc/meminfo
HugePages_Total: 39436
HugePages_Free: 2766
HugePages_Rsvd: 2756
HugePages_Surp: 0
Hugepagesize: 2048 kB
HugePages_Total: 大页总数量,即:vm.nr_hugepages 的值
HugePages_Free: 从来没有被使用过的大页的数目,HugePages_Total - HugePages_Free ,已经分配给 sga 的内存值。
HugePages_Rsvd: 保留大页数,
HugePages_Surp: 剩余大页数,
Hugepagesize: 大页的尺寸。
HugePages_Total is the size of the pool of huge pages.
HugePages_Free is the number of huge pages in the pool that are not yet
allocated.
HugePages_Rsvd is short for "reserved," and is the number of huge pages for
which a commitment to allocate from the pool has been made,
but no allocation has yet been made. Reserved huge pages
guarantee that an application will be able to allocate a
huge page from the pool of huge pages at fault time.
HugePages_Surp is short for "surplus," and is the number of huge pages in
the pool above the value in /proc/sys/vm/nr_hugepages. The
maximum number of surplus huge pages is controlled by
/proc/sys/vm/nr_overcommit_hugepages.
注:使用HugePages的注意事项
下面的三种情形应当重新配置HugePages 参数
a、物理内存的增减或减少。
b、在当前服务器上新增或移出Instance。
c、Instance的SGA大小增加或减少。
如果未及时调整HugePages,可能会引发下面的问题:
a、数据库性能低下。
b、出现内存不足或者过度使用交换空间。
c、数据库实例不能被启动。
d、关键性系统服务故障。
修改数据库参数
alter profile default LIMIT PASSWORD_LIFE_TIME UNLIMITED;
alter system set processes=600 scope=spfile sid='*';
alter system set control_file_record_keep_time=21 scope=spfile sid='*';
alter system set open_cursors=300 scope=spfile sid='*';
alter system set session_cached_cursors=300 scope=spfile sid='*';
alter system set recyclebin=off scope=spfile sid='*';
alter system set audit_trail=NONE scope=spfile sid='*';
alter system set log_archive_dest_1='location=use_db_recovery_file_dest'
scope=both sid='*';
alter system set fast_start_mttr_target = 300 scope=both sid='*';
alter system set streams_pool_size=100m scope=spfile sid='*';
alter system set archive_lag_target = 1200;
alter system set "_optimizer_use_feedback"= false scope=spfile sid='*';
alter system set "_optimizer_invalidation_period"=60 scope=both sid='*';
alter system set db_securefile=always scope=both sid='*';
alter system set filesystemio_options=setall scope=spfile sid=’*’;
exec dbms_stats.alter_stats_history_retention(7);
alter system set "_no_or_expansion"=true;
alter system set PRE_PAGE_SGA=false scope=spfile sid=’*’;
alter system set nls_date_format=’YYYY-MM-DD HH24:MI:SS’ scope=spfile sid=’*’;
alter system set “_b_tree_bitmap_plans”=false scope=spfile sid=’*’;
alter system set optimizer_index_cost_adj=80 scope=spfile;
注:
l 修改结束后,需重启数据库,才能确保上述修改生效。
l 上述两加粗的参数,recyclebin=off、audit_trail=none,对数据库性能非常明显,
请务必关闭这两次参数;并在重启库后,执行PURGE DBA_RECYCLEBIN 清空回收站,
执行 TRUNCATE TABLE AUD$,清空审计记录表。
域名解析
修改/etc/hosts 文件,添加服务器的IP和机器名,如:
192.168.1.174 tmpdb
3 归档
如果需要启用归档,需要做下面的调整:
l alter system set db_recovery_file_dest_size=50g; -- 此参数值按实际情况设置
l alter system set db_recovery_file_dest='+FLASH'; -- 此参数值按实际情况设置
l alter system set log_archive_dest_1='location=use_db_recovery_file_dest' scope=both sid='*'
l 同时在两节点上执行:关闭数据库,设置归档模式,都设置了归档模式后,再打开库。
Shutdown immediate;
Startup mount;
Alter database archivelog;
Alter database add supplemental log data;
-- 若开启归档日志,必须开启最小附加日志
Alter database add supplemental log data;
Alter database open;
4 维护作业
1. 收集系统表统计信息
以 sys 身份,登录生产库,创建定时作业(下同),采集系统表,
Create or replace procedure pro_analyze_dict as
begin
dbms_stats.gather_dictionary_stats();
dbms_stats.gather_fixed_objects_stats();
End pro_analyze_dict;
/
--每天早上5点(按需求更改)运行
BEGIN
dbms_scheduler.create_job
(job_name => 'JOB_ANALYZE_DICT',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN pro_analyze_dict; END;',
repeat_interval => 'FREQ=DAILY; BYHOUR=05; BYMINUTE=5;',
enabled => true);
END;
/
2. 收集业务数据库统计信息
以业务库的用户登陆,创建存储过程和计划
create or replace procedure pro_analyze_stats as
ora_20005 exception;
ora_25191 exception;
pragma exception_init(ora_20005,-20005);
pragma exception_init(ora_25191,-25191);
begin
sys.dbms_stats.flush_database_monitoring_info();
for i in (select username from dba_users where username in ('数据库用户名')) loop
for j in (select owner, '"'||table_name||'"' table_name from dba_tables where owner in (i.username) and temporary='N'
and table_name not like 'TMP%' and iot_type is null
and table_name not in (select table_name from dba_tab_statistics where owner in (i.username) and stattype_locked='ALL')
and table_name not in (select table_name from dba_external_tables where owner in (i.username) )
and table_name not in (select log_table from dba_mview_logs where log_owner in (i.username) )
order by owner, last_analyzed nulls first) loop
begin
dbms_stats.gather_table_stats(j.owner, j.table_name, estimate_percent=>dbms_stats.auto_sample_size, degree=>2);
exception
when ora_20005 or ora_25191 then
null;
end;
end loop
金蝶云星空 ORACLE 11G数据库安装运维最佳实践
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



