背景是运维杭州恒生电子公司开发的基金直销系统。

  • 此运维文档主要由陈德记录。
  • 主要解决鼎信汇金公司所使用的恒生电子开发的基金销售相关系统的软件安装运维工作。
  • Oracle相关软件的安装,操作系统基于SuSE 12 Enterprise,经过测试SP3和SP5表现一样,几乎都能正常安装。SuSE 15 Enterprise和openSuse15.x内核基本一致,Oracle12c也可以安装成功,但是Tuxedo和Weblogic比较老的版本可能安装不成功。总之推荐使用SuSE 12.x 或者openSuse42.x的系统。尽量不用比较新的Linux发行版。

准备环境

这是企业版的SuSE,安装过程中可以选上必要的基础包和开发库。 可以考虑如下源(自己找到对应版本的也可以):

1
2
3
4
zypper ar https://mirrors.aliyun.com/opensuse/distribution/leap/42.3/repo/oss/ oss
zypper ar https://mirrors.aliyun.com/opensuse/distribution/leap/42.3/repo/non-oss/ non-oss
zypper ar https://mirrors.aliyun.com/opensuse/update/leap/42.3/oss/ update-oss
zypper ar https://mirrors.aliyun.com/opensuse/update/leap/42.3/non-oss/ update-non-oss

安装软件包:(所有包都要装上对应的32bit版本,没有就算了)

设置参数:vi /etc/sysctl.conf 注意执行 sysctl –p 使生效。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# /etc/sysctl.conf
# add by cd.net 20200325 for Oracle 12c install

# 共享内存总量 页为单位,内存除以4K所得
# shmmax = <50%*RAM> byte 	推荐物理内存的一半,或者再稍微大一些
# shmall = RAM/PG_SIZE  	物理内存大小/PG_SIZE
#	1GB->1073741824‬ 4GB->‭4294967296‬ 8GB->‭8589934592 16GB->‭17179869184‬ 32GB->‭34359738368‬
#	1GB->524288     4GB-‭>2097152‬‬    8GB->4194304‬   	16GB->8388608‬     32GB->‭16777216‬    
# kernel.shmmni(常量4096)* kernel.shmall= kernel.shmmax * 2 = 物理内存
kernel.shmmax = 4294967296
kernel.shmall = 2097152
kernel.shmmni = 4096
‭‬
# 异步IO请求数目 推荐值是:1048576 其实它等于 1024*1024 也就是 1024K 个
fs.aio-max-nr = 3145728
# 打开的文件句柄的最大数量,防止文件描述符耗尽的问题
fs.file-max = 6815744
# SEMMSL: 每个信号集的最大信号数量
# SEMMNS:用于控制整个 Linux 系统中信号的最大数 
# SEMOPM:内核参数用于控制每个 semop 系统调用可以执行的信号操作的数量 
# SEMMNI:内核参数用于控制整个 Linux 系统中信号集的最大数量
kernel.sem = 250 32000 100 128
# 用于向外连接的端口范围
net.ipv4.ip_local_port_range = 9000 65500
# 套接字接收缓冲区大小的缺省
net.core.rmem_default = 262144
# 套接字接收缓冲区大小的最大值
net.core.rmem_max = 4194304
# 套接字发送缓冲区大小的缺省值
net.core.wmem_default = 262144
# 套接字发送缓冲区大小的最大值
net.core.wmem_max = 1048576

# SUSE Linux 加入这个 <gid>
#vm.hugetlb_shm_group = 1000

# 下面这些参数调优也可以考虑加上
kernel.sysrq = 1
kernel.panic_on_oops=1
vm.swappiness=10
vm.dirty_background_ratio = 3
vm.dirty_ratio = 20
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100

添加用户和组,做如下配置:

1
2
3
4
5
su – root
groupadd oinstall   #创建基本组 oinstall
groupadd dba        #创建附加组 dba
groupadd oper       #创建附加组 oper
useradd -m -g oinstall -G dba,oper oracle   #创建 用户

新建目录,并加入权限:

1
2
3
4
5
6
mkdir /oradata/app
mkdir /oradata/app/oracle
mkdir /oradata/app/ogg
mkdir /oradata/app/oraInventory

chown –R oracle:oinstall /oradata # 整个目录所有权都变更

加入如下几行:vi /etc/security/limits.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# /etc/security/limits.conf
## added by orarun ##
oracle soft nproc 8192
oracle hard nproc 16384
oracle soft nofile 8192
oracle hard nofile 65536
oracle soft stack 10240
oracle hard memlock unlimited
oracle soft memlock unlimited
# End of file

先查找文件的路径,加入如下两行:

1
2
3
4
5
# vi /etc/pam.d/login
session required /lib64/security/pam_limits.so
# 不同系统路径可能不一样
#session required /usr/lib64/security/pam_limits.so
session required pam_limits.so

检查/etc/hosts,加入地址解析,这个一定要加,否则Oracle安装依赖的时候会报错:

1
2
3
4
# /etc/hosts
10.10.200.xxx   hsoracle1.bmc hsoracle1
10.10.201.xxx   hsoracle1.bmc hsoracle1
10.10.202.xxx   hsoracle1.bmc hsoracle1

然后su – oracle 加入如下配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# su - oracle
# vi .bash_profile

umask 022
export ORACLE_BASE=/oradata/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0.1/dbhome_1
export OGG_HOME=/oradata/app/ogg
export ORACLE_SID=dspdb
export ORACLE_OWNER=oracle
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:$OGG_HOME
export LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:$OGG_HOME
export PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/sbin:$PATH
#export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export LANG=C

alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'

注意:source .bash_profile使环境变量生效。

最后检查这些必要的依赖包是否安装好(这里有一份 SuSE 15.x系列系统需要的软件包):

image-20201122143619318

说明:SUSE 12 Enterprise系列默认安装了开发库的情况下,能比较顺利的完成安装。

准备安装包:这里即将安装Oracle12cR2 和 Oracle GoldenGate 19c

开始安装Oracle12cR2

重启服务器,root进入Terminal(注意这里先用root用户,再换成oracle用户)

image-20201125114505235

最后执行:./runInstaller,看到界面证明成功了一大步,注意如果是centos系统,最好用下面这条语句,否则安装过程中有些弹出提示框看不到(显示一条竖线)

./runInstaller -jreLoc /etc/alternatives/jre_1.8.0

有时候检测环境会报错。可以看下日志究竟是什么错误,如果是操作系统版本检测不符合要求,可以暂时忽略,继续往下执行:

image-20201122144249201

逐步开始安装Oracle12cR2软件,但是不装实例

去掉安全更新

image-20201122144620693

不需要提供邮件

image-20201122144630463

只安装数据库软件

image-20201122144640900

选单实例数据库模式,不是集群RAC

image-20201122145009769

默认企业版

image-20201122145015954

环境变量已经配置好路径,下面这几步会直接显示出来,不用修改

image-20201122145024015

image-20201122145134894

image-20201122145141247

需要安装一些系统依赖,安装即可

image-20201122145156013

还可能出现分区不足的情况:

image-20201122145206417

物理内存是64GB,结果交换分区给的是8GB。可能太少了吧,参考网上增加一个交换分区即可。

参考:

https://blog.csdn.net/hzh839900/article/details/79215703

https://blog.csdn.net/catoop/article/details/101616510

安装清单:

image-20201122145242216

点击"install"开始安装进度了

image-20201122145442303

回到控制台,root执行下面两个脚本:

image-20201122145453993

执行完之后回来,点击OK ,数据库软件安装成功。

image-20201122145547665

看到这里,恭喜,Oracle安装成功!

安装监听

su – oracle > netca

安装监听非常简单和顺利,依次点击下一步,最后点击Finish

(PS: 或者不安装这里的监听服务,直接到相应目录,手工创建配置文件。)

安装数据库实例

su – oracle > dbca

image-20201122150239909

选择自定义安装:

image-20201122150301766

默认选择单实例和事务处理(或者选择 自定义数据库配置 Custom Database):

image-20201122150314354

输入xxxdb ,去掉下面的复选框,(不要装容器型的数据库)

image-20201122150321270

image-20201122150451959

image-20201122150513523

image-20201122150542267

image-20201122150549220

image-20201122150557778

image-20201122150606983

image-20201122150613258

image-20201122150619639

image-20201122150626953

image-20201122150634633

image-20201122150640556

image-20201122150648755

下面这一步可以设置数据库的一些初始化参数:

image-20201122150657903

这个control files 和 redo log groups 都需要是双份数据,镜像的关系。确保核心数据安全。Redo logs需要自己设置,如下图所示,现在磁盘IO性能都不错,一般业务设置256M足够了。如果数据量非常大,可以适当加大此值到512MB或者1GB。

PS:为确保核心数据的安全,镜像相关的文件可以分别放在不同的磁盘上面,提高安全性和磁盘IO性能。其实核心数据都有这个需求,推荐单机对双份磁盘做RAID1,确保数据安全。

image-20201122150742826

image-20201122150834444

看到上面这个界面,证明数据库实例xxxdb安装成功;恭喜恭喜!

常用设置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 基本命令
sqlplus / as sysdba
startup;
shutdown;
shutdown immediate;
# 启动监听,基本命令
lsnrctl start
lsnrctl status

# 安装工具 rlwrap ,设置以后在sqlplus命令行中更顺畅
zypper in rlwrap
su – oracle
vi .bashrc
# 加入下面2行
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
1
2
3
4
5
6
7
8
9
-- 设置密码永不过期:
-- 查询密码自动过期时间(默认180天)
select * from dba_profiles where resource_name ='PASSWORD_LIFE_TIME' and profile='DEFAULT';

-- 查询所有密码的过期时间
select * from dba_profileS;

-- 设置成永不过期
alter profile default limit password_life_time unlimited;
1
2
3
4
5
6
7
8
9
-- 查询用户
select * from dba_users where account_status='OPEN';
select username,default_tablespace from dba_users where account_status='OPEN';
-- 查询所有用户以及状态
select username,account_status from dba_users order by username;
-- 解锁用户
alter user hr identified by oracle account unlock;
-- 修改用户密码
alter user hssale identified by xxx;
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- 自动任务汇总
-- 参考:
# https://blog.csdn.net/qq_28721869/article/details/118524869
# http://t.zoukankan.com/xibuhaohao-p-10808661.html
# https://segmentfault.com/a/1190000040362476?utm_source=sf-similar-article

# 自动任务统计信息
# 1. 查看是否开启
select client_name,status from dba_autotask_client;
# 2. 开启
exec DBMS_AUTO_TASK_ADMIN.ENABLE(client_name => 'auto optimizer stats collection' \
                                 ,operation => NULL,window_name => NULL);
# 3. 关闭
exec DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto optimizer stats collection');

# 查询结果如下,建议保留,不要轻易关闭
SQL> select client_name,status from dba_autotask_client;
CLIENT_NAME                                                      STATUS
---------------------------------------------------------------- --------
auto optimizer stats collection                                  ENABLED
auto space advisor                                               ENABLED
sql tuning advisor                                               ENABLED
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
-- 时间窗口汇总
-- 参考:
http://t.zoukankan.com/xibuhaohao-p-10808661.html

# 查询时间窗口
select window_name,repeat_interval,duration,enabled from dba_scheduler_windows;
# 默认是周一到周五每晚10点开始收集统计信息,持续4h;周六周日早上6点开始收集统计信息,持续20h

# 将周六调整成和工作日一样的参数
-- 修改r任务启动时间:周六改为20点,修改持续时间为4h
-- 注意要用sys账号执行,而不是system账号
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE('SATURDAY_WINDOW','repeat_interval',
                             'freq=daily;byday=SAT;byhour=20;byminute=0; bysecond=0');
DBMS_SCHEDULER.SET_ATTRIBUTE('SATURDAY_WINDOW','duration',numtodsinterval(240,'minute'));
END;
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE('SUNDAY_WINDOW','repeat_interval',
                             'freq=daily;byday=SUN;byhour=20;byminute=0; bysecond=0');
DBMS_SCHEDULER.SET_ATTRIBUTE('SUNDAY_WINDOW','duration',numtodsinterval(240,'minute'));
END;

# 关闭和开启单个收集任务
BEGIN
	DBMS_AUTO_TASK_ADMIN.disable (
		client_name   => 'auto optimizer stats collection',
		operation     => NULL,
		window_name   => 'MONDAY_WINDOW');
END;
BEGIN
	DBMS_AUTO_TASK_ADMIN.enable (
		client_name   => 'auto optimizer stats collection',
		operation     => NULL,
		window_name   => 'MONDAY_WINDOW');
END;

# 关闭或开启时间窗口
BEGIN
  dbms_scheduler.disable(name => 'FRIDAY_WINDOW');
END;
BEGIN
  dbms_scheduler.enable(name => 'FRIDAY_WINDOW');
END;

# 修改时间窗口参数
begin
  dbms_scheduler.set_attribute(
		name      => 'MONDAY_WINDOW',                              
		attribute => 'REPEAT_INTERVAL',                              
		value     => 'freq=daily;byday=MON;byhour=2;byminute=0; bysecond=0');
end;

# 查询 'auto optimizer stats collection' 的时间窗口开启情况
SELECT w.window_name,
       w.repeat_interval,
       w.duration,
       w.enabled,
	   c.optimizer_stats
FROM dba_autotask_window_clients c, dba_scheduler_windows w
WHERE c.window_name = w.window_name 
AND c.optimizer_stats = 'ENABLED';

写在最后

Oracle12cR2这个版本经过我实际测试。SuSe Linux 12 sp3 和 sp5 都是能够比较顺利安装成功的。但是sp5不知道什么原因,启动vnc连接的时候,总是连不上,服务器CPU有个核跑到100%不下来。所以最好不要用sp5这个版本。我想OpenSuSE 42.3应该是能够支持的。

后期测试发现 SUSE 15 Enterprise系列的也是能安装成功的,需要安装官方指定的开发库。安装过程会报告不支持此操作系统。请忽略,继续安装即可。SUSE 15 Enterprise、SUSE 15 SP1 Enterprise、openSUSE15.1 等都测试通过,全部可以安装。

(完)