如何在 centos 7下安装 Oracle 11g

第一步下载问题

centos 下要用wget 下载,发现老要登录直接wget 是不行的。

wget --http-user=[oracle网站登录账号] --http-password=[oracle 网站登录密码] --no-check-certificate --output-document=linux.zseries64_11gR2_database_1of2.zip "https://download.oracle.com/otn/linux/oracle11g/R2/linux.x64_11gR2_database_1of2.zip?AuthParam=1556897560_f2690b16de8954cc6d804e61753c6838"

关键就是最后那个 AuthParam 怎么拿到呢?

用Chrome,或者Firefox 直接在 https://oracle.com/technetwork/database/enterprise-edition/downloads/index.html 点击下载文件,之后暂停下载。chrome://downloads/  复制出来的链接就行了。


第二步解压问题

cat linux.zseries64_11gR2_database_1of2.zip linux.zseries64_11gR2_database_1of2.zip > linux.zseries64_11gR2_database.zip

unzip linux.zseries64_11gR2_database.zip

第三步依赖解决

yum -y install 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

然后是检查是否有包没安装成功

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"

centos 7 必定会报 pdksh not  installed

wget http://vault.centos.org/5.11/os/x86_64/CentOS/pdksh-5.2.14-37.el5_8.1.x86_64.rpm

rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm

第四步Oracle 用户设置

添加oracle用户组及用户

groupadd oinstall
groupadd dba
groupadd asmadmin
groupadd asmdba
useradd -g oinstall -G dba,asmdba oracle -d /home/oracle

添加完成后,查看oracle用户
id oracle

初始化oracle用户的密码
passwd oracle

限制Oracle 用户shell权限

修改 Oracle 用户 ~/.bash_profile

umask 022
export ORACLE_BASE=/apps/svr/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db
export ORACLE_SID=orcl
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS10=$ORACLE_HOME/nls/data
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export SQLPATH=$ORACLE_HOME/sqlplus/admin:/home/oracle/admin/sql
ulimit -u 16384 -n 63536 #linux
export ORACLE_HOSTNAME=centos-oracle
export LC_ALL="en_US"
export LANG="en_US"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"

由于Oracle 官方文档里面有个 /u01/app/oracle 这样的例子,结果网上很多都照抄,其实可以不要那个/u01,据说是为了兼容老机器。

修改/etc/security/limits.conf 添加如下内容: 

oracle              soft     nproc   2047
oracle              hard    nproc  16384
oracle              soft     nofile   1024
oracle              hard    nofile   65536

修改验证登录文件

vim /etc/pam.d/login

session required pam_limits.so
session required /lib64/security/pam_limits.so

修改 /etc/profile 添加:

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

创建oracle软件安装目录

mkdir -p /apps/svr/oracle
chown -R oracle:oinstall /apps/svr/oracle
chmod -R 775 /opt

内核参数优化

kernel.shmmax oracle 文档说设置为物理内存的一半;1073741824 这个值是1G 自己乘一下即可。
其他参数是Oracle 建议值。

修改/etc/sysctl.conf 文件 添加如下内容:

vim /etc/sysctl.conf 

添加以下参数

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967296
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

退出编辑后执行以下命令应用修改
/sbin/sysctl -p

交换分区设置(非必有)

由于我在阿里云安装系统的时候没有设置交换分区。在安装过程中发现没有交换分区走不下去。
于是必须先创建个交换分区。

交换分区创建

先检查一下, 是否已经有交换分区

swapon -s

如没有则执行下面的命令创建,8192 是8G 的意思,Oracle 要求 交换分区 >= 物理内存
dd if=/dev/zero of=/swapfile bs=1M count=8192
chown root:root /swapfile
chmod 0600 /swapfile
mkswap /swapfile
swapon /swapfile

启动自动挂载

vim /etc/fstab
添加这行进去
/swapfile    swap    swap    default   0 0


前戏到这里才结束

为了方便切换 Oracle 用户 修改 vim ~/.bashrc 

添加这句 alias suo='su - oracle', 然后 source ~/.bashrc 

编辑安装默认应答文件

应答文件在 解压包的 response 目录下。copy 一份出来找个地方放

/apps/svr/etc/response/db_install.rsp 按照下面这个改

https://blog.51cto.com/loofeer/1119713

ORACLE_HOSTNAME 自己配置在 /etc/hosts 里面的值举个例子

127.0.0.1 centos_oracle

安装前必定要做的, 指定Oracle 安装清单保存位置,不然会报错安装不下去。

vim /etc/oraInst.loc

添加这两行
inventory_loc=/apps/svr/oraInventory
inst_group=oinstall

编辑好 db_install.rsp 之后运行cd 到一开始解压的文件夹我的路径是/apps/svr/database

su oracle

./runInstaller -silent -debug -force -noconfig -IgnoreSysPreReqs -ignorePrereq -responseFile /apps/svr/etc/response/db_install.rsp

debug 在安装过程中会展示日志。安装的时候其实有些错误,没仔细看,回头补一下【mark】

$ The following configuration scripts need to be executed as the "root" user.

#!/bin/sh
#Root scripts to run
/apps/svr/oracle/product/11.2.0/db/root.sh
To execute the configuration scripts:
     1. Open a terminal window
     2. Log in as "root"
     3. Run the scripts
     4. Return to this window and hit "Enter" key to continue

su 到root 之后添加两个环境变量,不然跑了会报错。
vim /etc/profile
export ORACLE_OWNER = oracle
export ORACLE_HOME =  /apps/svr/oracle/product/11.2.0/db

网友 文章里有 orainstRoot.sh 这个,需要跑,但是我安装完没有这个文件 有点担心~~

配置默认监听

netca /silent /responsefile /apps/svr/etc/response/netca.rsp

查看监听状态

netstat -tnulp | grep 1521

静默安装数据库实例

编辑dbca 应答文件

vim /apps/svr/etc/response/dbca.rsp

主要参考:https://blog.csdn.net/Kenny1993/article/details/75038670

source ~/.bash_profile
dbca -silent -responseFile /apps/svr/etc/response/dbca.rsp

完了之后在命令行输入
sqlplus / as sysdba 登录查看实例信息。【这里也踩了个坑,看问题三】

顺便设置 scott 密码

alter user scott account unlock;
lter user scott identified by tiger;

设置oracle 开机启动

回到root 用户,修改 dbstart

vim $ORACLE_HOME/bin/dbstart
ORACLE_HOME_LISTNER=$ORACLE_HOME

修改 dbshut
vim $ORACLE_HOME/bin/dbshut
ORACLE_HOME_LISTNER=$ORACLE_HOME

vim /etc/oratab
orcl:/db/app/oracle/product/11.2.0:Y

vim /etc/rc.d/init.d/oracle

输入以下内容,注意修改自己的路径


#! /bin/bash
# oracle: Start/Stop Oracle Database 11g R2
#
# chkconfig: 345 90 10
# description: The Oracle Database is an Object-Relational Database Management System.
#
# processname: oracle
. /etc/rc.d/init.d/functions
LOCKFILE=/var/lock/subsys/oracle
ORACLE_HOME=/apps/svr/oracle/product/11.2.0/db
ORACLE_USER=oracle
case "$1" in
'start')
   if [ -f $LOCKFILE ]; then
      echo $0 already running.
      exit 1
   fi
   echo -n $"Starting Oracle Database:"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl start"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl start dbconsole"
   touch $LOCKFILE
   ;;
'stop')
   if [ ! -f $LOCKFILE ]; then
      echo $0 already stopping.
      exit 1
   fi
   echo -n $"Stopping Oracle Database:"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl stop" 
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbshut"
  su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl stop dbconsole"
  rm -f $LOCKFILE
;;
'restart')
   $0 stop
   $0 start
   ;;
'status')
   if [ -f $LOCKFILE ]; then
      echo $0 started.
      else
      echo $0 stopped.
   fi
   ;;
*)
 echo "Usage: $0 [start|stop|status]"
    exit 1
esac
exit 0



连接Oracle 客户端

https://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html


采坑历程

我遇到也是这个报错信息

问题1 :

[FATAL] [INS-32035] Unable to create a new central inventory at the specified location.
CAUSE: The central inventory location provided is not empty.
ACTION: Please provide another location for the inventory, or clean up the current location.

问题2:

[WARNING] [INS-32055] The Central Inventory is located in the Oracle base.
CAUSE: The Central Inventory is located in the Oracle base.
ACTION: Oracle recommends placing this Central Inventory in a location outside the Oracle base directory.

问题3

dbstart 报错

/apps/svr/oracle/product/11.2.0/db/bin/dbstart: Starting up database "orcl"
Sat May  4 18:51:18 CST 2019
SP2-0642: SQL*Plus internal error state 2021, context 1:1821:0
Unsafe to proceed
SP2-1503: Unable to initialize Oracle call interface
SP2-0152: ORACLE may not be functioning properly
root: Error: Database instance "orcl" NOT started.

发现是日期环境变量写错了,这个是正确的在 oracle 用户目录下的

vim /home/oracle/.bash_profile

export NLS_DATE_FORMAT='YYYY-MON-DD HH24:MI:SS


参考文章

Oracle 官方安装文档

https://docs.oracle.com/cd/E11882_01/install.112/e24326/toc.htm#BHCBCFDI

Oracle中文安装文档

https://www.oracle.com/technetwork/cn/articles/revitt-oem-096363-zhs.html#2

比较完整的安装文档:

https://www.jianshu.com/p/b4200e721bfd

http://blog.itpub.net/22664653/viewspace-1062585

https://blog.csdn.net/Kenny1993/article/details/75038670

https://blog.51cto.com/niubdada/2164071

分配交换分区的方法

https://blog.51cto.com/lianlianw/1742472

https://zhangshuqiao.org/2018-06/Linux%E4%B8%8B%E5%A2%9E%E5%8A%A0%E3%80%81%E5%88%A0%E9%99%A4Swap%E6%96%87%E4%BB%B6/

db_install.rsp 详细解析

https://blog.51cto.com/loofeer/1119713

创建数据库实例

https://blog.51cto.com/hbxztc/1884833

https://blog.51cto.com/hbxztc/1906532

运行 sqlplus / as sysdba 报错解决

https://community.oracle.com/docs/DOC-888935

你可能感兴趣的:(如何在 centos 7下安装 Oracle 11g)