Contents
  1. 1. 开发环境
  2. 2. 安装包
  3. 3. 用户创建和目录配置
    1. 3.1. 用户组创建
    2. 3.2. 用户创建和密码设定
    3. 3.3. 新建oracle的根目录
    4. 3.4. hosts配置
    5. 3.5. 设置环境变量
    6. 3.6. 依赖检测
      1. 3.6.1. yum安装依赖
      2. 3.6.2. 挂载光盘
      3. 3.6.3. 设置yum源为本地iso文件
  4. 4. 静默安装oracle
    1. 4.1. 解压安装包
    2. 4.2. 修改安装时响应文件
    3. 4.3. 清理安装环境
    4. 4.4. 静默安装
    5. 4.5. 执行脚本
  5. 5. 静默配置监听
  6. 6. 静默建库
  7. 7. 启用数据库
  8. 8. 配置监听(修改监听端口)
    1. 8.0.1. 正确的监听程序配置好是什么样子的
    2. 8.0.2. 修改 listener.ora 文件
    3. 8.0.3. 修改tnsnames.ora 文件
    4. 8.0.4. 修改 oracle 中的参数
  • 9. 其他
    1. 9.1. 启动和添置数据库的脚本
    2. 9.2. 建表和新建用户语句
    3. 9.3. 取消用户密码180天有效期
  • 之前我们给大家介绍了专门用于开发的超精简RedHat系统的安装过程。今天这个教程,可以看做是在那篇文章之上的一个进阶版,就是如何在命令行中静默安装oracle数据库。

    开发环境

    • RedHat6.7
    • Oracle 11g

    安装包

    确保你的系统中已经成功下载有了oracle11g的zip包,如果你的linux系统已经安装成功了,那么你可能还需要rhel的iso镜像文件,因为在oralce的安装过程中,我们需要一些依赖。当然,如果你是按照我之前的那篇博文进行安装的,就没什么问题了。

    oracle 11g :

    • Oracle.11gR2.Linux.x64_CD1.zip
    • Oracle.11gR2.Linux.x64_CD2.zip

    另外有一些依赖需要用 yum 加载linux iso 安装光盘的方式来安装,所以最好需要 linux 的安装文件

    • rhel-server-6.7-x86_64-dvd.iso

    用户创建和目录配置

    这里我们是按照oracle官方给的文档,创建几个相关的用户和用户组。

    用户组创建

    用root用户登录之后,首先创建下面几个用户组:

    1
    2
    3
    4
    groupadd dba
    groupadd oinstall
    groupadd asmadmin
    groupadd asmdba

    用户创建和密码设定

    接着来创建几个用户:

    1
    2
    useradd -g oinstall -G dba,asmdba oracle
    passwd oracle

    输入密码后,给oracle用户设定了密码。

    新建oracle的根目录

    1
    2
    mkdir -p /oracle/orahome
    chown -R oracle:oinstall /oracle

    上面相当于把oracle 装在根目录下(/oracle),每个人的硬盘空间和规划不一样,请自行设置

    hosts配置

    编辑/etc/hosts文件,加入正确的主机名。修改之后的hosts文件里面,有类似于下面的内容

    1
    2
    3
    ...
    127.0.0.1 oracle
    ...

    同时修改/etc/sysconfig/network文件,配置网络中的主机名。修改之后的文件类似:

    1
    2
    NETWORKING=YES
    HOSTNAME=oracle

    设置环境变量

    修改/etc/profile文件设置环境变量,这样所有用户都能生效。 在文件结尾添加下面内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    export ORACLE_BASE=/oracle
    export ORACLE_HOME=$ORACLE_BASE/orahome
    export ORACLE_SID=YOUR SID's NAME
    export ORACLE_OWNER=oracle
    export ORACLE_TERM=vt100
    export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
    export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib:$CLASSPATH
    export ORA_NLS33=$ORACLE_HOME/nls/admin/data
    export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

    注: ORACLE_SID处填写你自己打算安装的数据库名字

    依赖检测

    因为oracle11g的安装需要依赖很多其他程序,所以在安装之前我们先检测下安装环境:

    1
    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 sysstat unixODBC unixODBC-devel | grep "not installed"

    上面的命令会显示出诸如下面的结果:

    1
    2
    3
    package libaio-devel is not installed
    package unixODBC is not installed
    package unixODBC-devel is not installed

    也就是告诉我们哪些是还没有安装的程序,我们要做的就是去安装这些依赖。

    yum安装依赖

    一般来说,这些依赖都可以通过linux的iso文件中进行安装。这里就大致介绍下如果通过iso文件进行安装吧。
    其实原理是把yum源设置成iso文件,然后通过yum来进行安装

    挂载光盘

    假设 iso 文件的路径为/app/software/rhel-server-6.7-x86_64-dvd.iso
    执行以下命令

    1
    mount -o loop /app/software/rhel-server-6.7-x86_64-dvd.iso /mnt/cdrom

    如果/mnt目录下没有 cdrom 文件夹,则先创建一个目录。

    挂载成功之后 可以df -h看到 iso 文件成功挂载到指定的目录下。
    取消挂载的命令:

    1
    umount /mnt/cdrom

    设置yum源为本地iso文件

    修改/etc/yum.repos.d/rhel-source.repo设置yum源

    1
    2
    3
    4
    5
    6
    [rhel-source]
    name=Local Source
    baseurl=file:///mnt/cdrom
    enabled=1
    gpgcheck=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-beta,file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

    保存之后在命令行执行

    1
    2
    yum update
    yum list all

    这样就可以用yum install xxx来安装之前提示未安装的那些依赖程序了

    静默安装oracle

    接下来就是正式进行oracle的安装了

    解压安装包

    之后的所有操作均是在oracle用户下进行,所以我们首先要切换到oracle用户下,并解压安装包(安装包移动到/home/oracle 目录下)

    1
    2
    3
    4
    5
    su - oracle
    cd

    unzip Oracle.11gR2.Linux.x64_CD1.zip
    unzip Oracle.11gR2.Linux.x64_CD2.zip

    解压完成之后,我们会发现在当前目录有一个database的文件夹,在database/response/目录下,会看到有3个默认的安装配置文件:

    • db_install.rsp 用于安装oracle时的配置
    • dbca.rsp 用于静默建库
    • netca.rsp 用于静默配置监听

    这3个配置响应文件我们今天都会需要用到。

    修改安装时响应文件

    首先是修改安装响应文件,执行vim database/response/db_install.rsp,然后修改下面的内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    oracle.install.option=INSTALL_DB_SWONLY                  //29 行 安装类型
    ORACLE_HOSTNAME=oracle //37 行 主机名称,看注释,前后保持一致
    UNIX_GROUP_NAME=oinstall //42 行 安装组
    INVENTORY_LOCATION=/oracle/oraInventory //47 行 INVENTORY目录, 注意每个人的 oracle 目录可能不一样
    SELECTED_LANGUAGES=en,zh_CN //78 行 选择语言
    ORACLE_HOME=/oracle/orahome //83 行 oracle_home,oracle_base+orahome
    ORACLE_BASE=/oracle //88 行 oracle_base 就是你的 oracle 目录
    oracle.install.db.InstallEdition=EE //99 行 oracle版本
    oracle.install.db.isCustomInstall=true //108行 自定义安装
    oracle.install.db.DBA_GROUP=dba //142行 dba用户组
    oracle.install.db.OPER_GROUP=oinstall //147行 oper用户组
    oracle.install.db.config.starterdb.type=GENERAL_PURPOSE //160行 数据库类型
    oracle.install.db.config.starterdb.globalDBName=YOUR DB NAME //165行 globalDBName 保持一致
    oracle.install.db.config.starterdb.SID=YOUR SID NAME //170行 SID 保持一致
    oracle.install.db.config.starterdb.password.ALL=YOURPASS //233行 设定所有数据库用户使用同一个密码,后面会用到
    DECLINE_SECURITY_UPDATES=true //385行 设置安全更新

    注意:

    • 37 行 主机名称, 165行 globalDBName 和 170行 SID 按照自己的设定修改
    • 233行 设定所有数据库用户使用同一个密码, 这个密码在后面还要被用到

    清理安装环境

    如果在安装过程中出现了错误,需要我们重新进行安装,请执行下面的命令清理一下环境

    1
    2
    3
    rm -rf /etc/oratab
    rm -rf /etc/oraInst.loc
    rm -rf /oracle/oraInventory

    再次强调,每个人的 oracle 目录可能和我的设置不一样,请执行命令前自行修改相关路径名称

    静默安装

    静默安装的意思就是不在命令行中弹出各种安装进程。安装的速度和你的服务器配置相关,几分钟到十几分钟不同。
    执行下面的命令:

    1
    2
    3
    cd database

    ./runInstaller -silent -ignorePrereq -force -responseFile /home/oracle/database/response/db_install.rsp
    • silent 表示以静默方式安装,不会有任何提示
    • ignorePrereq 忽略检测中错误
    • force 允许安装到一个非空目录
    • noconfig 表示不运行配置助手netca
    • responseFile 表示使用哪个响应文件,必需使用绝对路径

    执行脚本

    安装顺利的话,会看到下面的提示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    /oracle/oraInventory/orainstRoot.sh
    /oracle/orahome/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

    Successfully Setup Software.

    我们就按照提示,新开一个终端窗口,然后切换到root用户,执行下面两个shell脚本:

    1
    2
    /oracle/oraInventory/orainstRoot.sh
    /oracle/orahome/root.sh

    整个oracle就算安装成功了!!

    静默配置监听

    还记得解压出来的3个resp文件么,我们只用到了一个,接下来就是配置监听和建库了。

    监听不需要太多额外的配置,可以看我这个配置好的监听响应文件

    我们需要重新切回oracle用户:

    1
    su -c oracle

    接下来在命令行中依次执行,

    1
    2
    3
    netca /silent /responsefile /home/oracle/database/response/netca.rsp
    ll $ORACLE_HOME/network/admin/*.ora
    lsnrctl status

    注:

    • 这里各个参数用用/来表示,而不是安装oracle时的-号了。
    • 监听配置好之后,如果有问题,先不要着急,稍后我们统一来介绍如果正确配置监听

    静默建库

    最后一个resp文件,用来静默建库,修改建库响应文件vim database/response/dbca.rsp

    1
    2
    3
    4
    5
    [CREATEDATABASE]
    GDBNAME = "YOURNAME"
    SID = "YOURSID"
    TEMPLATENAME = "General_Purpose.dbc"
    CHARACTERSET = "ZHS16GBK"

    接下来在命令行中输入下面的命令

    1
    dbca -silent -responseFile /home/oracle/database/response/dbca.rsp

    注:

    • 这里各个参数用用-来表示,而不是上一步时的/号了(尴尬 - -!, 估计这几个程序不是同一个人写的。。。)
    • 建库过程中会要求输入多次密码,这个密码就是我们之前安装oracle时,在db_install.rsp233行 设定所有数据库用户使用同一个密码中设定的密码了。

    启用数据库

    1. 执行下面的命令:

      1
      2
      lsnrctl start
      dbstart $ORACLE_HOME
    2. 修改 /etc/oratab,最后的N改成 Y

    3. 设置自动启动:root用户修改 /etc/rc.d/rc.local,最后加入

      1
      2
      su - oracle -c "lsnrctl start"
      su - oracle -c "dbstart $ORACLE_HOME"

    配置监听(修改监听端口)

    如果上面的步骤你都执行的很顺利,那么是真的要恭喜你。但是90%的同学,在监听程序上会消耗很长时间,这里我们来统一总结一下如何正确配置监听。
    如果我们用的是默认的监听文件,那么 oracle 的监听程序会建立在1521端口上,如果你想要修改到其他端口,或者你的监听程序不正确,这一章节我们统一来看如何处理。

    正确的监听程序配置好是什么样子的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    [root@linux2 oradata]# lsnrctl status

    LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 17-NOV-2018 16:23:20

    Copyright (c) 1991, 2009, Oracle. All rights reserved.

    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=linux2)(PORT=1521)))
    STATUS of the LISTENER
    ------------------------
    Alias LISTENER
    Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
    Start Date 17-NOV-2018 15:05:51
    Uptime 0 days 1 hr. 17 min. 29 sec
    Trace Level off
    Security ON: Local OS Authentication
    SNMP OFF
    Listener Parameter File /app/oracle/orahome/network/admin/listener.ora
    Listener Log File /app/oracle/diag/tnslsnr/linux2/listener/alert/log.xml
    Listening Endpoints Summary...
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux2)(PORT=1521)))
    Services Summary...
    Service "linux2XDB.us.oracle.com" has 1 instance(s).
    Instance "linux2", status READY, has 1 handler(s) for this service...
    Service "orcl11g.us.oracle.com" has 1 instance(s).
    Instance "linux2", status READY, has 1 handler(s) for this service...
    The command completed successfully

    上面的代码是正确的监听程序的样子,注意到在 Services Summary 部分,是能看到2个实例的,
    而如果你的监听程序有问题,那么这里会显示:

    The listener supports no services

    接下来我们来看如何处理。

    修改 listener.ora 文件

    我们看到在上面的程序输出部分有一个Listener Parameter File,这个就是你的监听程序的配置文件,我们把它修改成下面的样子:

    1
    2
    3
    4
    5
    6
    7
    LISTENER =
    (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = linux2)(PORT = 1521))
    )
    )
    ADR_BASE_LISTENER = /app/oracle

    其实就是修改 LISTENER 部分,把 HOST 换成我们之前设置的 host 名称(如果你有困惑,就把所有的 host 设置成一样的),PORT 就是我们的监听端口,如果你想换成其他的,就在这里替换掉。

    修改tnsnames.ora 文件

    在同一个目录中,修改’tnsnames.ora’文件,这样你才可以从本机正常登录

    1
    2
    3
    4
    5
    6
    7
    8
    linux2 =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = linux2)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = linux2)
    )
    )

    这里是一样的,注意 SERVICE_NAME字段和你之前安装是设置的保持一致。

    修改 oracle 中的参数

    接下来,我们需要到数据库中进行相关设置。
    先切换到 oracle 用户

    1
    su oracle

    然后输入下面的命令免密进入 oracle 数据库sqlplus / as sysdba
    然后输入show parameter local_listener查看 listener 的配置,下面的代码是我已经配置好的,

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [oracle@linux2 oradata]$ sqlplus / as sysdba

    SQL*Plus: Release 11.2.0.1.0 Production on Sat Nov 17 16:34:10 2018

    Copyright (c) 1982, 2009, Oracle. All rights reserved.


    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, Oracle Label Security, OLAP, Data Mining,
    Oracle Database Vault and Real Application Testing options

    SQL>
    SQL> show parameter local_listener;

    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    local_listener string (address = (protocol = tcp)(ho
    st = linux2)(port = 1521))

    我们接着执行下面的命令
    alter system set local_listener="(address = (protocol = tcp)(host = linux2)(port = 1521))"
    来配置监听,其实这里的配置和我们第1步设置的 listener.ora中的基本是一样的。

    配置好了之后,我们可以再检查一下listener,看看是不是得到和我之前一样的效果了?
    如果没有:

    1
    2
    3
    4
    lsnrctl reload
    #或者
    lsnrctl stop
    lsnrctl start

    如果还是不行,请自行 google。。。

    其他

    这里附上一些备用的东西

    启动和添置数据库的脚本

    • 手动启动shell vim start_oracle.sh
    1
    2
    3
    #!/bin/sh
    lsnrctl start
    dbstart $ORACLE_HOME
    • 手动停止shell vim stop_oracle.sh
    1
    2
    3
    #!/bin/sh
    lsnrctl stop
    sqlplus / as sysdba @stop.sql
    • 停止sql脚本 vim stop.sql
    1
    2
    shutdown immediate
    exit

    建表和新建用户语句

    用sys或者sysdba用户登录oracle数据库,然后执行下面的命令来新建表空间和用户

    1
    2
    3
    4
    5
    create tablespace data datafile '/oracle/oradata/sms/data01.dbf' size 32000m
    alter tablespace data add datafile '/oracle/oradata/sms/data02.dbf' size 32000m

    create user test identified by test1234 default tablespace data temporary tablespace temp
    grant resource,connect,create session to test

    解释:

    • /oracle/oradata/ 是表空间的存储地址
    • create user命令 我们新建了一个用户 test,密码是 test1234

    取消用户密码180天有效期

    oracle11g之后的版本,默认的每个用户的密码有效期是 180天。 180天后,原先的密码就失效了。所以,偷懒的方法我们就把这个策略关闭就好了。

    1
    alter profile default limit PASSWORD_LIFE_TIME unlimited;
    Contents
    1. 1. 开发环境
    2. 2. 安装包
    3. 3. 用户创建和目录配置
      1. 3.1. 用户组创建
      2. 3.2. 用户创建和密码设定
      3. 3.3. 新建oracle的根目录
      4. 3.4. hosts配置
      5. 3.5. 设置环境变量
      6. 3.6. 依赖检测
        1. 3.6.1. yum安装依赖
        2. 3.6.2. 挂载光盘
        3. 3.6.3. 设置yum源为本地iso文件
    4. 4. 静默安装oracle
      1. 4.1. 解压安装包
      2. 4.2. 修改安装时响应文件
      3. 4.3. 清理安装环境
      4. 4.4. 静默安装
      5. 4.5. 执行脚本
    5. 5. 静默配置监听
    6. 6. 静默建库
    7. 7. 启用数据库
    8. 8. 配置监听(修改监听端口)
      1. 8.0.1. 正确的监听程序配置好是什么样子的
      2. 8.0.2. 修改 listener.ora 文件
      3. 8.0.3. 修改tnsnames.ora 文件
      4. 8.0.4. 修改 oracle 中的参数
  • 9. 其他
    1. 9.1. 启动和添置数据库的脚本
    2. 9.2. 建表和新建用户语句
    3. 9.3. 取消用户密码180天有效期