[Oracle]在CentOS下安装oracle

幻想 2023年03月14日 56 0

背景

在公司业务中,在CentOS6.9使用了11.2.0.1版的oracle,而此次准备在CentOS8.5上安装11.2.0.3版的oracle,并进行数据迁移。公司所用的数据库是日文的,因此这里也是采用日文安装。

步骤

准备用户与组

# 增加组
groupadd oinstall && \
groupadd -g 502 dba && \
groupadd -g 503 oper && \
groupadd -g 504 asmadmin && \
groupadd -g 506 asmdba && \
groupadd -g 505 asmoper

# 增加用户
useradd -u 502 -g oinstall -G dba,asmdba,oper -d /opt/oracle oracle

添加依赖

由于CentOS8在2022年1月1号起正式结束支持,因此需要进行换源才能工作。

换源

参照:阿里云源
进行换源

# 换源
minorver=8.5.2111
sed -e "s|^mirrorlist=|#mirrorlist=|g" \
         -e "s|^#baseurl=http://mirror.centos.org/\$contentdir/\$releasever|baseurl=https://mirrors.aliyun.com/centos-vault/$minorver|g" \
         -i.bak \
         /etc/yum.repos.d/CentOS-*.repo

# 更新缓存
yum makecache

下载依赖

# oracle所需依赖
yum install gcc make libnsl libaio-devel elfutils-libelf-devel gcc-c++ libstdc++-devel sysstat mksh
yum install java-1.8.0-openjdk java-1.8.0-openjdk-headless java-1.8.0-openjdk-devel

# 工具包(可选)
yum install epel-release
yum install tcping lsof

缺失依赖

在centos8上并不存在compat-libstdc++-33和pdksh这两包,默认这是oracle11的必须包。

  1. GUI安装的话,可以直接选忽略这两包,但还需安装ksh
yum install ksh
  1. 非GUI安装的话,需先安装这两包,安装后卸载,再安装ksh包即可

下载地址:
compat-libstdc++-33
pdksh

包缺失查询地址:
pkg: compat-libstdc++-33
pkg: pdksh

安装:

yum -Uvh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
yum -Uvh pdksh-5.2.14-alt5.x86_64.rpm

做链接

cd /lib64
ln -sf libnsl-2.28.so libnsl.so

下载日语字体

如果系统不自带日语字体的话,以下的安装可能会显示出乱码。

# 确认有无日语字体
fc-list :lang=ja
# 如果fc-list不存在,需要先安装下
yum install fontconfig
# 没有就下载字体
yum install vlgothic-*
# 刷新缓存
fc-cache -fv

修改系统设置

/etc/sysctl.conf

# 底部添加以下值
net.ipv4.ip_local_port_range = 9000 65500
fs.file-max = 6815744
kernel.shmall = 10523004
kernel.shmmax = 6465333657
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_max=1048576
fs.aio-max-nr = 1048576

使其生效

sysctl –p

/opt/oracle/.bash_profile

# 底部添加以下值
export ORACLE_BASE=/opt/oracle/app
export ORACLE_SID=orcl
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_INVENTORY=/opt/oracle/oraInventory
export PATH=$PATH:$ORACLE_BASE/bin
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export NLS_LANG=Japanese_Japan.JA16SJIS
export NLS_DATE_FORMAT="YYYY/MM/DD HH24:MI:SS"
export ORACLE_HOME_LISTNER=$ORACLE_HOME
alias rlsqlplus='rlwrap sqlplus'
alias rlrman='rlwrap rman'

if [ $USER = "oracle" ]; then
	if [ $SHELL = "/bin/ksh" ]; then
		ulimit -p 16384
		ulimit -n 65536
	else
		ulimit -u 16384 -n 65536
	fi
	ulimit -s 20480
fi

使其生效

source /opt/oracle/.bash_profile

安装oracle

公司安装的是单机,并不做集群(开发用的)。

准备安装包

下载地址:

解压安装包

# 解压安装包(这里就不展示安装包如何下载到本地了)
cd /opt/install
# database安装包1
unzip p10404530_112030_Linux-x86-64_1of7.zip
# database安装包2
unzip p10404530_112030_Linux-x86-64_2of7.zip

修改应答配置

/opt/install/database/response/db_install.rsp

# 只进行数据库安装
oracle.install.option=INSTALL_DB_SWONLY
# oracle host名
ORACLE_HOSTNAME=database
# 默认组名
UNIX_GROUP_NAME=oinstall
# 一些安装日志及基本用到的工具的目录
INVENTORY_LOCATION=/opt/oracle/oraInventory
ORACLE_HOME=/opt/oracle/app/product/11.2.0/dbhome_1
ORACLE_BASE=/opt/oracle/app
oracle.install.db.InstallEdition=EE
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=oper
# 数据库字符编码(使用的是日文编码)
oracle.install.db.config.starterdb.characterSet=JA16SJIS
# 数据库文件默认存放位置
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=/opt/datafile
# 拒绝安全更新(用这个更新,还不如让数据库版本升级,这版本的生命周期都快结束了)
DECLINE_SECURITY_UPDATES=true
# 其他未提到的都用默认值(当然,以上只供参考,具体按照需要修改)

进行安装

# 开始安装
su oracle -c "/opt/install/database/runInstaller -silent -waitforcompletion -responseFile /opt/install/database/response/db_install.rsp"

问题解决

安装完成后,不管有无提示错位,此时对以下文件进行一下修改。

sysliblist

/opt/oracle/app/product/11.2.0/dbhome_1/lib/sysliblist

# 旧的是这样的
-ldl -lm -lpthread -lnsl -lirc -lipgo -lsvml
# 在末尾加上-laio
# 新的是这样的
-ldl -lm -lpthread -lnsl -lirc -lipgo -lsvml -laio

ins_emagent.mk

# 旧的是这样的
$(MK_EMAGENT_NMECTL)
# 在末尾加上-lnnz11
# 新的是这样的
$(MK_EMAGENT_NMECTL) -lnnz11

以上都设置完成后,再安装一次

# 开始安装
su oracle -c "/opt/install/database/runInstaller -silent -waitforcompletion -responseFile /opt/install/database/response/db_install.rsp"
# 安装完成后,运行一下所需脚本
/opt/oracle/oraInventory/orainstRoot.sh
/opt/oracle/app/product/11.2.0/dbhome_1/root.sh

初始化实例

修改应答配置

/opt/install/database/response/dbca.rsp

# 数据库名称(按需修改)
GDBNAME = "orcl"
# SID
SID = "orcl"
# sys的密码
SYSPASSWORD = "oracle"
# system的密码
SYSTEMPASSWORD = "oracle"
# 数据文件存放路径
DATAFILEDESTINATION=/opt/oracle/app/oradata
# 恢复数据存放路径
RECOVERYAREADESTINATION=/opt/oracle/app/oradata
# 字符集
CHARACTERSET="JA16SJIS"
# 字符集
NATIONALCHARACTERSET= "JA16SJIS"
# 定义初始化参数
INITPARAMS="memory_target=0,sga_target=900,pga_aggregate_target=100,JAVA_JIT_ENABLED=FALSE"
# 是否要自动管理内存(扩展内存时很好用,不过公司并不打算扩展,所以禁用了)
AUTOMATICMEMORYMANAGEMENT="False"
# 其他未提到的都用默认值

进行安装

# 实例初始化
su oracle -c "/opt/oracle/app/product/11.2.0/dbhome_1/bin/dbca -silent -createDatabase -responseFile /opt/install/database/response/dbca.rsp"

开机自启动

oratab

/etc/oratab
最后的N改为Y,不然dbstart、dbshut的方式无法启动。

orcl:/opt/oracle/app/product/11.2.0/dbhome_1:N
# 改为
orcl:/opt/oracle/app/product/11.2.0/dbhome_1:Y

dbstart

/opt/oracle/app/product/11.2.0/dbhome_1/bin/dbstart
ORACLE_HOME_LISTNER=$1改为ORACLE_HOME_LISTNER=$ORACLE_HOME

ORACLE_HOME_LISTNER=$1
# 改为
ORACLE_HOME_LISTNER=$ORACLE_HOME

dbshut

/opt/oracle/app/product/11.2.0/dbhome_1/bin/dbshut
ORACLE_HOME_LISTNER=$1改为ORACLE_HOME_LISTNER=$ORACLE_HOME

ORACLE_HOME_LISTNER=$1
# 改为
ORACLE_HOME_LISTNER=$ORACLE_HOME

oracle.service

/usr/lib/systemd/system/oracle.service

[Unit]
Description=Oracle RDBMS
After=network.target

[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535
User=oracle
Type=oneshot
ExecStart=/opt/oracle/app/product/11.2.0/dbhome_1/bin/dbstart
ExecStop=/opt/oracle/app/product/11.2.0/dbhome_1/bin/dbshut
Environment="ORACLE_HOME=/opt/oracle/app/product/11.2.0/dbhome_1"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

lsnrctl.service

/usr/lib/systemd/system/lsnrctl.service

[Unit]
Description=Oracle lsnrctl
After=oracle.service

[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535
User=oracle
Type=oneshot
ExecStart=/opt/oracle/app/product/11.2.0/dbhome_1/bin/lsnrctl start
ExecReload=/opt/oracle/app/product/11.2.0/dbhome_1/bin/lsnrctl reload
ExecStop=/opt/oracle/app/product/11.2.0/dbhome_1/bin/lsnrctl stop
Environment="ORACLE_HOME=/opt/oracle/app/product/11.2.0/dbhome_1"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

设置开机自启

# 数据库开机自启动
systemctl enable oracle
# 监听开机自启动
systemctl enable lsnrctl

启动

# 1. 用服务方式启动
# 启动数据库
systemctl start oracle
# 启动监听
systemctl start lsnrctl

# 2. 如果不要以服务形式启动,可这样启动
su - oracle
# 启动数据库
sqlplus / as sysdba
startup
exit
# 启动监听
lsnrctl start
exit

参照

oracle官方手册
oracle11g 最终版本11.2.0.4安装详细过程
Oracle中的character set 和 national character set
使用dbstart和dbshut命令启动和关闭数据库

Last Updated: 2023/03/18 19:45:30
WPS使用 linux部署_centos_记一次ena网卡驱动替换