oracle12cR2图形化安装

oracle12c安装

参考自官方文档和oracle base:
https://docs.oracle.com/en/database/oracle/oracle-database/index.html

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/index.html

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/cncpt/introduction-to-oracle-database.html

https://oracle-base.com/articles/12c/oracle-db-12cr2-installation-on-oracle-linux-6-and-7

这里使用Oracle Linux Server 7.9

使用最小化安装,安装时确保swap空间足够

swap大小参考(一般都是16G或32G比较常见,生产一般32G)

SWAP与RAM的大小配置参考

1)、RAM为1-2GB时,SWAP大小建议为RAM大小的1.5倍

2)、RAM为2-16GB时,SWAP大小建议与RAM大小相等

3)、RAM大于16GB时,SWAP大小建议为16GB

确保文件格式为xfs

1.系统环境初始化

1.1 主机名设置

修改主机名

#设置自己的主机名,使用下面的命令或是修改/etc/hostname文件
hostnamectl set-hostname ol7-db1

设置hosts解析

一般格式:

<IP-address> <fully-qualified-machine-name> <machine-name>

中间的完全限定域名用不到可以忽略:

<IP-address> <machine-name>

#在/etc/hosts中添加
10.11.114.68	ol7-db1

1.2 关闭防火墙和selinux

systemctl disable --now firewalld
sed -ir '/^SELINUX/s/SELINUX.*/SELINUX=disabled/' /etc/selinux/config 
setenforce 0

1.3 时间/时区设置

在系统安装时设置好就不用在设置

# 设置时区
timedatectl set-timezone Asia/Shanghai

#时间同步
#使用ntp或是chronyd,推荐用chronyd

#配置chronyd服务
yum install -y chrony
#修改/etc/chrony.conf
例如:
server 0.cn.pool.ntp.org iburst
server 1.cn.pool.ntp.org iburst
server 2.cn.pool.ntp.org iburst
server 3.cn.pool.ntp.org iburst


#启动并开机开启
systemctl enable --now chronyd

1.4 安装依赖

oracle linux 7.9自带的yum源可以直接安装,不需要配置

yum -y install vim wget unzip binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel net-tools smartmontools

上面的有些包依赖epel源,如rlwrap和xdpyinfo等等
装好epel源后,再装

yum -y install oracle-epel-release-el7.x86_64
#如果是rhel就安装普通epel源

yum -y install  rlwrap xdpyinfo

小技巧:

在oracle linux或者rhel等使用yum工具的系统中,官方提供了一个rpm包,可以安装后直接提供好一系列的oracle安装的预先设置,不用手动去做

这里用手动安装,在结尾有Oracle Linux yum的使用方法。

1.5 内核参数设置

将下面参数添加到/etc/sysctl.conf

(如果使用oracle-database-server-12cR2-preinstall安装的,文件在/etc/sysctl.d/98-oracle.conf

fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500

#修改后使生效
sysctl -p

#根据情况适配参数
#其他参数都是oracle推荐参数,需要适配修改的是下面几个
kernel.shmmax = 几个G内存*1024*1024*1024*0.9(最大取到90%,一般去一半或75%)
kernel.shmall = kernel.shmmax/4096(页的字节大小)
或是kernel.shmall = kernel.shmmax/4096的倍数


#一般不做更改,6815744已经足够
fs.file-max = 512 x processes (for example 6815744 for 13312 processes)

参数详解:

fs.aio-max-nr = 1048576 # 同时可以拥有的的异步IO请求数目
fs.file-max = 6815744  # 指定可以分配的文件句柄的最大数目  /512 = 13312
kernel.shmall = 2097152 # 共享内存总量
kernel.shmmax = 536870912 # 共享内存段的最大尺寸
kernel.shmmni = 4096 # 系统范围内共享内存段的最大数量
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 # 发送缓冲区最大值

#####
#单个共享内存段的最大值,此值不能比swap大
kernel.shmmax = 1/2 of physical RAM. 
        This would be the value 2147483648 for a system with 4Gb of physical RAM. 
对于4G内存来说,取一半2g,  2*1024*1024*1024=2147483648

####
 可以使用的共享内存的总页数
 kernel.shmall = physical RAM size / pagesize 
 物理内存除以pagesize大小(一般是4k)

#getconf PAGE_SIZE查看,一般是4096

1.6 配置ulimit参数

下面的配置添加到/etc/security/limits.conf的最后

(如果是rpm包预安装的,文件在/etc/security/limits.d/oracle-database-server-12cR2-preinstall.conf)

oracle soft nofile 1024 
oracle hard nofile 65536 
oracle soft nproc 16384 
oracle hard nproc 16384 
oracle soft stack 10240 
oracle hard stack 32768 
oracle hard memlock 134217728 
oracle soft memlock 134217728

1.7 创建用户和目录

创建相关用户

# 创建oinstall和dba组
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
# 创建oracle用户
useradd -u 54321 -g oinstall -G dba,oper oracle

#设置密码为Oracle123456
echo 'Oracle123456' | passwd --stdin oracle

#id查看
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper)

创建oracle目录

将单独的一块盘格式化后,挂载在目录,如/u01,也可以直接创建

弹药确保格式为xfs,挂载时也要指定xfs

#创建目录
mkdir /u01

#如果是挂载硬盘,配置好/etc/fstab后
mount -a

#设置目录权限
chown -R oracle:oinstall /u01
chmod -R 775 /u01

修改/etc/profile(没有需求,可以忽略)

cat >> /etc/profile <<"EOF"
if [ $USER = "oracle" ]; then
        if [ $SHELL = "/bin/ksh" ]; then
                ulimit -p 16384
                ulimit -n 65536
        else
                ulimit -u 16384 -n 65536
        fi
fi
EOF

source /etc/profile

##修改/etc/pam.d/login
cat >> /etc/pam.d/login <<"EOF"
session    required     pam_limits.so
EOF

1.8 禁用透明大页

官网参考:12c R2禁止透明大页

查看是否开启透明大页

[root@ol7-db1 ~]# grep HugePage /proc/meminfo
AnonHugePages:      8192 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0

若上面的AnonHugePages > 0, 说明启用了透明大页。还可以查看:

#红帽内核
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

#非红帽内核
cat /sys/kernel/mm/transparent_hugepage/enabled

#查看输出的中括号括在哪里,输出中括号在always上,代表启用
[root@ol7-db1 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

禁用透明大页

更改 /etc/default/grub,参数中添加transparent_hugepage=never

老版本系统可能使用/etc/grub.conf

[root@ol7-db1 ~]# vim /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=ol/root rd.lvm.lv=ol/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

修改为

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=ol/root rd.lvm.lv=ol/swap rhgb quiet transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"

grub2-mkconfig

[root@ol7-db1 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.4.17-2011.6.2.el7uek.x86_64
Found initrd image: /boot/initramfs-5.4.17-2011.6.2.el7uek.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-db83dc4e384f4146a3d16e48e9ac952d
Found initrd image: /boot/initramfs-0-rescue-db83dc4e384f4146a3d16e48e9ac952d.img
done

重启系统,在查看

[root@ol7-db1 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

1.9.1 关于使用中文语言乱码

在安装系统时,选择语言决定LANG变量,从而决定安装界面的语言环境

如果不习惯英文,可以按以下方法更改

首先确保字体包组已经安装

#只需要安装fontconfig-devel即可,之后调用图形化安装就没有方框乱码了
yum groupinstall "fonts" -y
yum install -y dtrace-modules-provider-headers dtrace-utils elfutils-libelf elfutils-libelf-devel fontconfig-devel

修改/etc/locale.conf文件
将LANG变量改为“zh_CN.utf8”

vim /etc/locale.conf
LANG=zh_CN.utf8

1.9.2 数据库输出显示乱码

#先查看,确定数据库使用的编码字符集
select userenv('language') from dual;

#将环境变量NLS_LANG与数据库的保持一致即可

2.安装

2.1 环境变量

[oracle@ol7-db1 ~]$ cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

# Oracle Settings

export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0.1/db_1
export INVENTORY_LOCATION=/u01/oraInventory
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
#设置日期显示要注意NLS_DATE_FORMAT和NLS_LANG,可以作为session变量
#export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
#export NLS_TIMESTAMP_FORMAT='yyyy-mm-dd HH24:MI:SSXFF'
#export NLS_TIMESTAMP_TZ_FORMAT='yyyy-mm-dd HH24:MI:SSXFF  TZR'
export PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:$PATH:$HOME/bin
umask 022

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

2.2 解压

#对包授权
chown -R oracle:oinstall /opt/*

#解压安装
[oracle@ol7-db1 ~]$ cd /opt/
[oracle@ol7-db1 opt]# unzip V839960-01.zip
[oracle@ol7-db1 opt]$ ll
total 3372752
drwxr-xr-x 7 oracle oinstall        117 Jan 27  2017 database
-rw-r--r-- 1 oracle oinstall 3453696911 Nov 23 16:16 V839960-01.zip

[oracle@ol7-db1 database]# ls
install  response  rpm  runInstaller  sshsetup  stage  welcome.html

#yum安装好xdpyinfo,然后配置display变量,ip为自己本机ip
[oracle@ol7-db1 database]# DISPLAY=10.11.110.237:0.0; export DISPLAY


2.3 调用图形界面安装

#运行runInstaller
[oracle@ol7-db1 database]$ ./runInstaller
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 500 MB.   Actual 42069 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 8063 MB    Passed
Checking monitor: must be configured to display at least 256 colors.    Actual 16777216    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2021-11-23_04-37-44PM. Please wait ..

#弹出调用界面,同意几个x11请求即可

#执行这两个脚本
/u01/oraInventory/orainstRoot.sh
/u01/app/oracle/product/12.2.0.1/db_1/root.sh

[root@ol7-db1 ~]# /u01/oraInventory/orainstRoot.sh
更改权限/u01/oraInventory.
添加组的读取和写入权限。
删除全局的读取, 写入和执行权限。

更改组名/u01/oraInventory 到 oinstall.
脚本的执行已完成。
[root@ol7-db1 ~]# /u01/app/oracle/product/12.2.0.1/db_1/root.sh
Performing root user operation.

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/12.2.0.1/db_1

Enter the full pathname of the local bin directory: [/usr/local/bin]:
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Do you want to setup Oracle Trace File Analyzer (TFA) now ? yes|[no] :
yes
Installing Oracle Trace File Analyzer (TFA).
Log File: /u01/app/oracle/product/12.2.0.1/db_1/install/root_ol7-db1_2021-11-24_16-09-54-219551751.log
Finished installing Oracle Trace File Analyzer (TFA)
[root@ol7-db1 ~]#

3.补充

使用Oracle Linux yum完成预配置

使用它可以完成安装oracle预先的环境配置,如内核及相关参数调整

官方文档地址:Oracle Linux Yum

资源地址:https://oss.oracle.com/ol7/SRPMS-updates/

根据地址找到对应版本的oracle-database-server-版本号-preinstall的rpm包

#进入/etc/yum.repos.d中,备份迁移其他yum源文件之后,使用下面的源
wget http://yum.oracle.com/public-yum-ol7.repo

yum makecache fast

yum list all | grep oracle-database-server

yum -y install oracle-database-server-12cR2-preinstall

dbca配置数据库

[oracle@ol7-db1 ~]$ dbca

如果需要静默创建配置数据库,可以参考:https://oracle-base.com/articles/misc/database-configuration-assistant-dbca-silent-mode

netca配置监听

[oracle@ol7-db1 ~]$ netca

oem相关设置

12c中oem设置

官网参考:https://docs.oracle.com/en/database/oracle/oracle-database/12.2/admqs/getting-started-with-database-administration.html#GUID-EB851101-07BE-4038-BB9D-06E01CC7F5D5

查看oem端口

SQL> select dbms_xdb_config.gethttpsport() from dual;

DBMS_XDB_CONFIG.GETHTTPSPORT()
------------------------------
                          5500

非cdb配置oem

#修改端口
SQL> exec DBMS_XDB_CONFIG.SETHTTPSPORT(5500);

#非cdb关闭
SQL> exec DBMS_XDB_CONFIG.SETHTTPPORT(0);
#如果是https
SQL> exec DBMS_XDB_CONFIG.SETHTTPSPORT(0);

#cdb、pdb参考上面官网

在11G及以下版本中启动和关闭OEM

启动OEM命令 emctl start dbconsole
停止OEM命令: emctl stop dbconsole
查看emctl选项 emctl

关于开机自启

方法一:自定义dbstart.sh启动脚本
1.创建自启动脚本

# vim /home/oracle/dbstart.sh

#内容如下:

su - oracle  <<EOU
lsnrctl start
sqlplus / as sysdba  <<EOF
startup
EOF
EOU
参数说明:
“<<”表示重定向。一般EOF定义子命令,与“<<”结合使用,到下一个EOF结束。也可以用任意单词或字母代替EOF。如,这里为了区分2个子命令,用EOU,效果是一样的。

2.将启动脚本添加到/etc/rc.local

# vim /etc/rc.local

#增加内容如下:

#oracle_start
sh /home/oracle/dbstart.sh

方法二:配置oratab,使用oracle默认dbstart脚本启动
1.配置oratab

# vim /etc/oratab
将orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N改为
orcl:/u01/app/oracle/product/11.2.0/dbhome_1:Y


#例如:
orcl:/u01/app/oracle/product/12.2.0.1/db_1:Y

2.修改oracle默认dbstart脚本

# vim /u01/app/oracle/product/11.2.0/dbhome_1/bin/dbstart
#在大约80行左右有如下内容
# First argument is used to bring up Oracle Net Listener
ORACLE_HOME_LISTNER=$1

#修改为
# First argument is used to bring up Oracle Net Listener
ORACLE_HOME_LISTNER=$ORACLE_HOME

#当然也可以传参给$1,如果有多个库,可以脚本后面跟参数,传参给$1

3.将启动脚本添加到/etc/rc.local

# vim /etc/rc.local

#增加以下内容
su oracle -lc "/u01/app/oracle/product/12.2.0.1/db_1/bin/lsnrctl start"
su oracle -lc "/u01/app/oracle/product/12.2.0.1/db_1/bin/dbstart"

#确保有执行权限
chmod +x /etc/rc.d/rc.local

方法三:用systemd方式

根据方法一脚本的方式,配置systemd

systemd一般是root用户使用,sudo也行,但大多数人习惯了使用oracle用户运维,各凭喜好了

#启动数据库实例,路径/oracle/home/bin/dbstart
su - oracle  <<EOU
sqlplus / as sysdba  <<EOF
startup;
EOF
EOU


#重启数据库实例脚本,路径/oracle/home/bin/dbrestart
su - oracle  <<EOU
sqlplus / as sysdba <<EOF
shutdown immediate;
startup;
EOF
EOU

#关闭,/oracle/home/bin/dbshut
su - oracle  <<EOU
sqlplus / as sysdba <<EOF
shutdown immediate;
EOF
EOU

配置及数据库示例的systemd

#vim /usr/lib/systemd/system/oracle.service
[Unit]
Description=Oracle RDBMS
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/su - oracle -c "/oracle/home/bin/dbstart >> /tmp/oracle.log"
ExecReload=/usr/bin/su - oracle -c "/oracle/home/bin/dbrestart >> /tmp/oracle.log"
ExecStop=/usr/bin/su - oracle -c "/oracle/home/bin/dbshut \>\> /tmp/oracle.log"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

#重载
systemctl daemon-reload

#使用
systemctl start oracle # 启动oracle
systemctl restart oracle # 重启oracle
systemctl stop oracle # 关闭oracle

同样,可以给监听单独配置systemd

#vim /usr/lib/systemd/system/lsnrctl.service
#配置了oracle的环境变量,所以没有写lsnrctl绝对路径
[Unit]
Description=Oracle lsnrctl
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/su - oracle -c "lsnrctl start >> /tmp/lsnrctl.log"
ExecReload=/usr/bin/su - oracle -c "lsnrctl reload >> /tmp/lsnrctl.log"
ExecStop=/usr/bin/su - oracle -c "lsnrctl stop >> /tmp/lsnrctl.log"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

#重载
systemctl daemon-reload

#使用
systemctl start lsnrctl # 启动lsnrctl
systemctl restart lsnrctl # 重启lsnrctl
systemctl stop lsnrctl # 关闭lsnrctl

遇到启动问题,查看配置的日志文件找原因即可

内核的 shmall 和 shmmax 参数

SHMMAX = 配置了最大的内存segment的大小 ——> 这个设置的比SGA_MAX_SIZE大比较好。

SHMMAX参数:Linux进程可以分配的单独共享内存段的最大值。一般设置为内存总大小的一半。这个值的设置应该大于SGA_MAX_TARGET或MEMORY_MAX_TARGET的值,因此对于安装Oracle数据库的系统,shmmax的值应该比内存的二分之一大一些。

SHMMIN= 最小的内存segment的大小 。

shmall =是全部允许使用的共享内存大小,shmmax 是单个段允许使用的大小。这两个可以设置为内存的 90%。例如 16G 内存,16x1024x1024x1024x90% = 15461882265,shmall 的大小为 15461882265/4k(getconf PAGESIZE可得到) = 3774873。

shmall设置共享内存总页数。这个值太小有可能导致数据库启动报错。很多人调整系统内核参数的时候只关注SHMMAX参数,而忽略了SHMALL参数的设置。

posted @ 2021-11-25 11:02  EverEternity  阅读(531)  评论(0编辑  收藏  举报