背景
在公司业务中,在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的必须包。
- GUI安装的话,可以直接选忽略这两包,但还需安装ksh
yum install ksh
- 非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
公司安装的是单机,并不做集群(开发用的)。
准备安装包
下载地址:
- database安装包1
- database安装包2
- grid安装包
- client安装包
- gateways安装包
- example示例
- 卸载包
安装单机的话,就只要安装database安装包1和database安装包2即可。
安装集群的话,先安装grid安装包,然后再跟安装单机一样的步骤。
解压安装包
# 解压安装包(这里就不展示安装包如何下载到本地了)
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命令启动和关闭数据库