安装前请浏览
之前和同事东哥尝试用最新的Centos8.2安装Oracle11g和Oracle12c,费了九牛二虎之力勉强安装成功,但是重试后发现结果具有偶然性,查看Oracle官方文档发现Centos8仅支持Oracle19c,由于对Oracle新特性了解比较少,亦未准备发太多精力研究,所以最终决定使用官方提供的OracleLinux7.8安装使用Oracle12c,作为测试用的结构化数据环境。
安装前准备
本文不包含任何下载内容,如缺少相关包可以参考东哥的 Oracle Linux7.8 下离线 一键静默安装Oracle12c并下载相关包。
最小安装OracleLinux7.8
选择 Compatibility Libraries , Development Tools , System Administration Tools
配置好网络和hostname,连接网络或者设置代理服务器。
准备好Java安装包。
准备好 linuxx64_12201_database.zip 安装包。
Oracle依赖包列表:
binutils
compat-libstdc++-33
elfutils-libelf
elfutils-libelf-devel
expat
gcc
gcc-c++
glibc
glibc-common
glibc-devel
glibc-headers
libaio
libaio-devel
libgcc
libstdc++
libstdc++-devel
make
pdksh
sysstat
unixODBC
unixODBC-devel
正式安装
一,添加oracle用户:
添加oracle用户组和用户
#请用 root 用户
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba -m oracle
查看oracle用户修改密码
#请用 root 用户
id oracle
uid=1000(oracle) gid=1000(oinstall) groups=1000(oinstall),1001(dba)
passwd oracle
二,创建安装目录:
#请用 root 用户
#创建相关目录
mkdir -p /Data/oracle
mkdir -p /Data/soft
mkdir -p /Data/java
mkdir -p /Data/oraInventory
#将目录的权限赋给oracle用户
chown -R oracle:oinstall /Data
chmod -R 775 /Data
chmod 777 -R /tmp
三、下载拷贝文件到soft目录并解压文件:
#请用 oracle 用户
cd /Data/soft
unzip linuxx64_12201_database.zip
# 使用root用户解压后请留意相关目录的权限
四、安装配置Java环境:
#请用 root 用户
cd /Data/soft/
tar -zvxf jdk-8u151-linux-x64.tar.gz
mv /Data/soft/jdk1.8.0_151/ /Data/java
vi /etc/profile
#添加环境变量
export JAVA_HOME=/Data/java/jdk1.8.0_151/
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
#保存配置
source /etc/profile
#安装libnsl包可以避免Oracle12c使用Java1.8抛异常
yum -y install libnsl
五、安装Oracle依赖包:
检查依赖包
#请用 root 用户
rpm -q \
binutils \
compat-libstdc++-33 \
elfutils-libelf \
elfutils-libelf-devel \
expat \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
pdksh \
sysstat \
unixODBC \
unixODBC-devel | grep "not installed"
package elfutils-libelf-devel is not installed
package libaio-devel is not installed
package pdksh is not installed
package sysstat is not installed
package unixODBC is not installed
package unixODBC-devel is not installed
安装依赖包
yum -y install elfutils-libelf-devel
yum -y install libaio-devel
yum -y install make
yum -y install sysstat
yum -y install unixODBC
yum -y install unixODBC-devel
#pdksh包无法通过yum下砸,可在文章最后的连接处查看下载地址
#最好统一放到/Data/soft/packages目录下
rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm
六,修改系统标识:
使用OracleLinux系统可以跳过此步骤
#请用 root 用户
vi /etc/redhat-release
#注释掉原有标识 添加
Red Hat Enterprise Linux Server release 7.8 (Maipo)
七、设置防火墙和selinux:
容许特定端口通过防火墙
#请用 root 用户
#开启防火墙仅容许特定端口通过
firewall-cmd --state #查看防火墙状态
systemctl start firewalld.service #开启防火墙
systemctl enable firewalld.service #firewall开机启动
vi /etc/selinux/config #关闭SELINUX
SELINUX=enforcing
SELINUXTYPE=targeted
firewall-cmd --zone=public --list-ports #查看通过的端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent #关闭指定端口
firewall-cmd --zone=public --add-port=1521/tcp --permanen #容许指定端口1521通过防火墙
firewall-cmd --zone=public --add-port=5500/tcp --permanen #容许指定端口1521通过防火墙
setenforce 0 #使配置立即生效
关闭防火墙
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
vi /etc/selinux/config #关闭SELINUX
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
setenforce 0 #使配置立即生效
八、优化OS内核参数:
设置内存参数
#请用 root 用户
vi /etc/sysctl.conf
## 内容如下:
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
fs.file-max = 6815744 #设置最大打开文件数
fs.aio-max-nr = 1048576
kernel.shmall = 4194304 #共享内存的总量,8G内存设置:2097152
kernel.shmmax = 2147483648 #最大共享内存的段大小
kernel.shmmni = 4096 #整个系统共享内存端的最大数
kernel.sem=250 32000 100 128
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500 #可使用的IPv4端口范围
net.core.rmem_default = 262144
net.core.rmem_max= 4194304
net.core.wmem_default= 262144
net.core.wmem_max= 1048576
#使参数生效
sysctl -p
九、对oracle用户设置限制:
#请用 root 用户
vi /etc/security/limits.conf
#将下面内容添加到Limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
vi /etc/pam.d/login
#将下面内容添加到login
session required /lib64/security/pam_limits.so
session required pam_limits.so
vi /etc/profile
#将下面内容添加到profile
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
source /etc/profile
十、配置oracle用户环境变量:
vi /home/oracle/.bash_profile
#将下面内容追加到bash_profile
export ORACLE_HOSTNAME=hostname
export ORACLE_BASE=/Data/oracle #oracle数据库安装目录
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db_1 #oracle数据库路径
export ORACLE_SID= SID #oracle启动数据库实例名
export ORACLE_UNQNAME=SID
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH #添加系统环境变量
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib #添加系统环境变量
export LANG=en_US #防止安装过程出现乱码
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_DATE_FORMST="YYYY-MM-DD HH24:MI:SS"
# 以上配置完成后,建议重启系统 或分别执行以下命令:
source /home/oracle/.bash_profile
#查看环境变量
env
十一、安装Oracle数据库软件:
#请用 oracle 用户
cd /Data/soft/database/response
cp db_install.rsp db_install.rsp.bak
sed -i "s/^oracle.install.option=/oracle.install.option=INSTALL_DB_SWONLY/g" db_install.rsp
sed -i "s/^UNIX_GROUP_NAME=/UNIX_GROUP_NAME=oinstall/g" db_install.rsp
sed -i "s/^INVENTORY_LOCATION=/INVENTORY_LOCATION=\/Data\/oraInventory/g" db_install.rsp
sed -i "s/^SELECTED_LANGUAGES=en/SELECTED_LANGUAGES=en,zh_CN/g" db_install.rsp
sed -i "s/^ORACLE_HOME=/ORACLE_HOME=\/Data\/oracle\/product\/12.2.0\/db_1/g" db_install.rsp
sed -i "s/^ORACLE_BASE=/ORACLE_BASE=\/Data\/oracle/g" db_install.rsp
sed -i "s/^oracle.install.db.InstallEdition=/oracle.install.db.InstallEdition=EE/g" db_install.rsp
sed -i "s/^oracle.install.db.OSDBA_GROUP=/oracle.install.db.OSDBA_GROUP=dba/g" db_install.rsp
sed -i "s/^oracle.install.db.OSOPER_GROUP=/oracle.install.db.OSOPER_GROUP=oinstall/g" db_install.rsp
sed -i "s/^oracle.install.db.OSBACKUPDBA_GROUP=/oracle.install.db.OSBACKUPDBA_GROUP=dba/g" db_install.rsp
sed -i "s/^oracle.install.db.OSDGDBA_GROUP=/oracle.install.db.OSDGDBA_GROUP=dba/g" db_install.rsp
sed -i "s/^oracle.install.db.OSKMDBA_GROUP=/oracle.install.db.OSKMDBA_GROUP=dba/g" db_install.rsp
sed -i "s/^oracle.install.db.OSRACDBA_GROUP=/oracle.install.db.OSRACDBA_GROUP=dba/g" db_install.rsp
sed -i "s/^oracle.install.db.config.starterdb.type=/oracle.install.db.config.starterdb.type=GENERAL_PURPOSE/g" db_install.rsp
sed -i "s/^oracle.install.db.config.starterdb.globalDBName=/oracle.install.db.config.starterdb.globalDBName=basic/g" db_install.rsp
sed -i "s/^oracle.install.db.config.starterdb.SID=/oracle.install.db.config.starterdb.SID=basic/g" db_install.rsp
sed -i "s/^oracle.install.db.config.starterdb.characterSet=/oracle.install.db.config.starterdb.characterSet=ZHS16GBK/g" db_install.rsp
sed -i "s/^oracle.install.db.config.starterdb.password.ALL=/oracle.install.db.config.starterdb.password.ALL=managerBasic/g" db_install.rsp
sed -i "s/^SECURITY_UPDATES_VIA_MYORACLESUPPORT=/SECURITY_UPDATES_VIA_MYORACLESUPPORT=false/g" db_install.rsp
sed -i "s/^DECLINE_SECURITY_UPDATES=/DECLINE_SECURITY_UPDATES=true/g" db_install.rsp
cd ..
./runInstaller -silent -force -noconfig -ignorePrereq -responseFile /Data/soft/database/response/db_install.rsp
#请用 root 用户执行下面脚本
/Data/oraInventory/orainstRoot.sh
/Datas/oracle/product/12.2.0/db_1/root.sh
十二、配置监听:
#请用 oracle 用户
#配置监听
netca /silent /responseFile /Data/soft/database/response/netca.rsp
十三、创建数据库:
#请用 oracle用户
vi /etc/redhat-release
#注释掉原有标识 添加
Red Hat Enterprise Linux Server release 7.8 (Maipo)
十二、配置监听:
#配置数据库实例
cd /Data/soft/database/response
cp dbca.rsp dbca.rsp.bak
sed -i 's/^gdbName=/gdbName=sid/g' dbca.rsp #请配置SID
sed -i 's/^sid=/sid=sid/g' dbca.rsp #请配置SID
sed -i 's/^databaseConfigType=/databaseConfigType=SI/g' dbca.rsp
sed -i 's/^storageType=/storageType=FS/g' dbca.rsp
sed -i 's/^sysPassword=/sysPassword=password/g' dbca.rsp #请设置密码并做好记录
sed -i 's/^systemPassword=/systemPassword=password/g' dbca.rsp #请设置密码并做好记录
sed -i 's/^oracleHomeUserPassword=/oracleHomeUserPassword=password/g' dbca.rsp #请设置密码并做好记录
sed -i 's/^datafileDestination=/datafileDestination=\/Data\/oradata/g' dbca.rsp #请指定Oracle数据文件存放位置
sed -i 's/^recoveryAreaDestination=/recoveryAreaDestination=\/Data\/oracle\/fast_recovery_area/g' dbca.rsp
sed -i 's/^characterSet=/characterSet=ZHS16GBK/' dbca.rsp #请务必设置适当字符集防止乱码
sed -i 's/^templateName=/templateName=\/Data\/oracle\/product\/12.2.0\/db_1\/assistants\/dbca\/templates\/General_Purpose.dbc/g' dbca.rsp
sed -i 's/^listeners=/listeners=LISTENER/g' dbca.rsp
sed -i 's/^totalMemory=/totalMemory=4915/g' dbca.rsp #值设置为物理内存的60%
cd ..
dbca -silent -createDatabase -responseFile /Data/soft/database/response/dbca.rsp
十四、开启em:
#请用 oracle 用户
sqlplus / as sysdba
EXEC DBMS_XDB_CONFIG.SETHTTPSPORT(5500); #em端口 12之前默认端口为1158
#登录测试
#如果你使用的是http协议,则网址格式为:http://localhost:port/em ,同理如果是https协议,将http改成https即可
#请使用IE浏览器并确认端口可以通过防火墙
十五,问题及解决方法:
错误码ORA-28040
#请用 oracle 用户
#原因可能是OracleClient版别过低或者PLsql版别过低
修改 $ORACLE_HOME\NETWORK\ADMIN\sqlnet.ora 文件,网上提供了两种版本的修改:
a、增加一行配置如下
SQLNET.ALLOWED_LOGON_VERSION=8
b、增加两行配置如下“
SQLNET.ALLOWED_LOGON_SERVER=8
SQLNET.ALLOWED_LOGON_CLIENT=8
错误码ORA-01017
#请用 oracle 用户
#在 错误码ORA-28040之前创建的用户需要修改密码
sqlplus / as sysdba
alter user username identified by 123456;