码神之路:数据库篇JAVA相关码神之路

Linux 字符界面静默安装Oracle 数据库服务

2017-05-10  本文已影响535人  JSON_NULL

因为公司的业务需求,我们要在 Linux 系统下安装 Oracle 数据库用于开发和测试。我们的开发和测试服务器全是Linux系统,且都没有安装图形界面(服务器嘛)。如此我就需要利用字符界面完成 Oracle 数据库的安装与管理。

从网上搜索查阅了很多资料,有简单的,也有详细的。经过多番尝试终于安装成功,但对于其中的很多操作却是不明所以。为了一探究竟,为了知其然且知其所以然,也为了自己的以后查阅方便,更是为后来者提供一份完整的 Oracle 数据库在 Linux 系统字符界面下的 静默安装参考。这篇文章就应运而生了。

下载安装包

不落俗套,我也从下载 Oracle 数据库的安装包开始吧。

最好是去官方下载:
Oracle 数据库安装包官方下载地址http://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/index.html

Oracle 有很多版本,6,7,8i,9i,10g,11g,12c等。现在Oracle官网依然提供下载的只有 11gr2和12c两个大的版本。

本次我们选择下载 11gr2版本的 Oracle 数据库安装包进行以下的安装演示与过程讲解。

现在下载Oracle的安装包,需要先登录到Oracle官网才行;如果你没有帐号,注册个帐号也是比较容易的。所以不要一看到需要先登录后才能下载,就放弃了。

版本号中 i,g,c的说明

Oracle 版本中结尾的字母(如:i,g,c等)只是版本的代号,指oracle运用的技术。

  1. i代表Internet就是互联网技术
  2. g代表grid就是网格技术
  3. c就是cloud也就是云技术

注:这是我从网上搜索得到的,说法也比较统一,所以复制到这里供参考。

Oracle 数据库的版权及收费问题说明

关于 Oracle 数据库的版权及收费问题我从网上进行了些搜索。感觉比较靠谱的说法是下面这个:

Oracle软件本身是免费的,所以任何人都可以从Oracle官方网站下载并安装Oracle的数据库软件;收费的是License,即软件授权,如果数据库用于商业用途,就需要购买相应Oracle产品的License。

更详细的内容可以参见:oracle 数据库收费标准

安装包中主要目录与文件的说明

因为 Oracle11gR2 比较大,官方分成了两个压缩包。下载完成后解压可得到一个名为 database 的目录。下面对其中的目录和文件进行简单的说明。

  1. doc :Oracle 数据库产品文档所在的目录;
  2. response : Oracle 自动安装时需要用到的“响应文件”存放在这个目录下;
  1. welcome.html :Oracle数据库产品文档的入口文件;
  2. runInstaller : Oracle 安装程序,在Linux下是一个 shell 脚本;
  3. 其他暂时不需要了解(不写的原因是:我也不知道他们具体都是干嘛用的)。

有关 runInstaller 程序的的参数说明,请参考:Oracle 数据库安装程序 runInstaller 的参数

安装流程

硬件要求是否达标

我没有尝试过在硬件要求不达标的系统下安装Oracle数据库服务会有什么样的提示;下面是从 Oracle 的文档(doc目录下的)中得到一些硬件限制。

内存要求

以下是安装Oracle Database 11 g第2版​​(11.2)的内存要求:

可用RAM 需要交换空间
介于1 GB和2 GB之间 RAM大小的1.5倍
介于2 GB和16 GB之间 等于RAM的大小
超过16 GB 16 GB

磁盘空间要求

以下是安装Oracle Database 11 g第2版​​(11.2)的磁盘空间要求:

安装类型 软件文件要求(GB)
企业版 3.95
标准版 3.88
安装类型 数据文件要求(GB)
企业版 1.7
标准版 1.5
安装类型 软件文件要求(GB)
企业版 4.35
标准版 3.73
安装类型 数据文件要求(GB)
企业版 1.68
标准版 1.48

如果选择配置了自动备份,则需要在文件系统或自动存储管理磁盘组上添加更多的磁盘空间用于快速恢复区域。

依赖的软件包

针对不同操作系统所依赖的包不尽相同(主要是版本不同),下面列出在RedHat Linux 5.0 以上版本安装Oracle数据库服务所依赖的其他软件包:

binutils-2.17.50.0.6
compat-libstdc++-33-3.2.3
elfutils-libelf-0.125
elfutils-libelf-devel-0.125
elfutils-libelf-devel-static-0.125
gcc-4.1.2
gcc-c++-4.1.2
glibc-2.5-24
glibc-common-2.5
glibc-devel-2.5
glibc-headers-2.5
kernel-headers-2.6.18
ksh-20060214
libaio-0.3.106
libaio-devel-0.3.106 
libgcc-4.1.2
libgomp-4.1.2
libstdc++-4.1.2 
libstdc++-devel-4.1.2
make-3.81
sysstat-7.0.2
unixODBC-2.2.11
unixODBC-devel-2.2.11

安装这些依赖包的命令如下:

yum install -y binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel 

Oracle 数据库无法使用 root 用户进行安装

因为 root 权限太大,从安全和方便权限管理的角度出发,我们需要创建一个普通用户进行Oracle数据服务的安装。所以 Oracle 安装程序会在启动时检查当前登录到系统中的用户,如果发现是root就会给出相应的提示:“The user is root. Oracle Universal Installer cannot continue installation if the user is root.”。每个账户对应一个服务,这个是linux的常规做法。

创建必要的操作系统组和用户

如果要安装Oracle数据库,则需要以下本地操作系统组和用户:

  1. Oracle建议您创建一个软件所有者来拥有Oracle软件,并完成Oracle软件的安装。通常这个用户的用户名为 oralce,当然你也可以取一个其他的名字。
  2. Oracle软件所有者必须把Oracle Inventory组作为其主组,以便每个Oracle所有者都可以向中央清单中写入内容。通常组名为oinstall,你也可以为其取一个其他的名字。
  3. OSDBA组,通常组名为dba,你也可以取一个你喜欢的其他名字。该组标识具有数据库管理权限(SYSDBA特权)的操作系统用户帐户。
  4. 用于Oracle数据库的OSOPER组,通常组名为oper,你也可以取一个你喜欢的其他名字。这是一个可选的组。如果希望单独的一组操作系统用户具有有限的数据库管理权限(SYSOPER特权),请创建此组。默认情况下,OSDBA组的成员也拥有所有SYSOPER组的权限。
  5. 如果需要安装网格系统,则还需要创建风格基础设施组,因为开发测试环境下不需要如此复杂的系统,所以具体内容不再展开。

所有创建系统用和用户的命令如下:

  groupadd oinstall
  groupadd dba
  groupadd oper
  useradd -g oinstall -G dba,oper oracle
  passwd oracle # 此命令执行需要输入两次密码

内核参数要求

验证下表中显示的内核参数设置为大于或等于显示的最小值的值。表中的步骤描述了如何验证和设置值。
以下部分中显示的内核参数和shell限制值仅为最小值。对于生产数据库系统,Oracle建议您调整这些值以优化系统的性能。

参数       最小值         文件
--------------------------------------------------------------
semmsl     250          /proc/sys/kernel/sem  
semmns     32000     
semopm     100       
semmni     128       
--------------------------------------------------------------
shmall     2097152     /proc/sys/kernel/shmall
--------------------------------------------------------------
shmmax    4 GB - 1个字节    /proc/sys/kernel/shmmax
            默认值:536870912 ,或物理内存大小的一半(以字节为单位),以较低者为准。       
-------------------------------------------------------------
shmmni     4096       /proc/sys/kernel/shmmni       
-------------------------------------------------------------  
ip_local_port_range    9000> - <65500    /proc/sys/net/ipv4/ip_local_port_range   
-------------------------------------------------------------       
rmem_default  262144   /proc/sys/net/core/rmem_default
-------------------------------------------------------------       
rmem_max    4194304    /proc/sys/net/core/rmem_max
-------------------------------------------------------------
wmem_default  262144   /proc/sys/net/core/wmem_default
-------------------------------------------------------------
wmem_max   1048576    /proc/sys/net/core/wmem_max
-------------------------------------------------------------
aio-max-nr  最大:1048576     /proc/sys/fs/aio-max-nr
注意:此值限制并发未完成的请求,并应设置为避免I/O子系统出现故障。
-------------------------------------------------------------

如果任何参数的当前值都高于此表中列出的值,则不要更改该参数的值。

参数                                       命令
-------------------------------------------------------------
semmsl,semmns,semopm,和semmni            #/sbin/sysctl -a | grep sem
                                           此命令以列出的顺序显示信号量参数的值。

shmall,shmmax和shmmni                     #/sbin/sysctl -a | grep shm
                                           此命令显示共享内存段大小的详细信息。
file-max                                   #/sbin/sysctl -a | grep file-max
                                           此命令显示文件句柄的最大数量。
ip_local_port_range                        #/sbin/sysctl -a | grep ip_local_port_range
                                           此命令显示端口号范围。
rmem_default                               #/sbin/sysctl -a | grep rmem_default
rmem_max                                   #/sbin/sysctl -a | grep rmem_max
wmem_default                               #/sbin/sysctl -a | grep wmem_default
wmem_max                                   #/sbin/sysctl -a | grep wmem_max
-------------------------------------------------------------

如果需要修改这些参数的值,则需要编辑 /etc/sysctl.conf文件,各个参数对应值的配置方式如下:

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

注:对于信号量参数(kernel.sem),必须指定所有四个值。依次为semmsl,semmns,semopm,和semmni。

使用以下指定使对文件'/etc/sysctl.conf`的修改生效:

/sbin/sysctl -p

使用命令 输入命令/sbin/sysctl -a 确认值设置正确。

配置Oracle 软件所有者的 shell 限制

为了提高软件的性能,需要放松 oracle 软件所有者在 shell 下的一些限制。

shell限制 项目在limits.conf中 限制
打开文件描述符的最大数量 nofile 65536
个用户可用的最大进程数 nproc 16384
进程堆栈段的最大大小 stack 10240

将以下行添加到/etc/security/limits.conf 文件中:(以oracle用户做Oracle软件所有者为例)

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

创建必要的软件目录

Oracle 基础目录

Oracle基础目录是Oracle软件安装的顶级目录。在Linux系统上建议您使用与Oracle基本目录相似的路径:

/mount_point/app/software_owner
/挂载点/app/软件所有者

Oracle库存目录

Oracle Inventory目录(oraInventory)存储系统上安装的所有Oracle软件的清单。所有Oracle软件安装在单个系统上都需要共享。如果您有现有的Oracle Inventory路径,那么Oracle Universal Installer将继续使用该Oracle Inventory。

首次在系统上安装Oracle软件时,Oracle Universal Installer会检查您是否已创建了符合OFA标准的(其格式为u[01-09]/app如/u01/app)目录结构,且运行安装程序的用户是否有权写入该路径。如果是,那么Oracle Universal Installer会创建类似于Oracle Inventory目录的Oracle Inventory目录/u[01-09]/app/oraInventory。例如:/u01/app/oraInventory

Oracle主目录

Oracle主目录是您为特定Oracle软件产品安装选择的目录。您必须在单独的Oracle主目录中安装不同的Oracle产品或不同版本的同一Oracle产品。运行Oracle Universal Installer时,会提示您指定此目录的路径以及标识该目录的名称。您指定的目录必须是Oracle基本目录的子目录。Oracle建议您为Oracle主目录指定类似于以下内容的路径:oracle_base/product/11.2.0/dbhome_1

创建oraInst.loc文件

如果您计划使用Oracle Universal Installer以无提示或响应文件模式安装Oracle产品,则必须手动创建oraInst.loc文件(如果尚不存在)。此文件指定Oracle Inventory目录的位置,Oracle通过安装程序创建系统上安装的Oracle产品的清单。

如果以前在系统上安装了Oracle软件,该oraInst.loc文件可能已经存在。如果文件确实存在,则不需要创建文件。

1.在/etc/目录下创建文件oraInst.loc,并写入以下内容:

inventory_loc = $oracle_base/oraInventory
inst_group=$oinstall

$oracle_base 是Oracle软件安装的基础目录,$oinstall 是 Oracle Inventory 组的组名。

2.输入以下命令以设置文件的相应所有者,组和权限oraInst.loc:

chown $oracle:$oinstall oraInst.loc
chmod 664 oraInst.loc

$oracle 是Oracle软件所有者的用户名,$oinstall 是 Oracle Inventory 组的组名。

配置Oracle自动安装需要用到的“响应文件”

Oracle自动安装“响应文件”的路径是database/response/db_install.rsp

编辑database/response/db_install.rsp,以达到静默安装的要求。具体的配置项和各个配置项的含义请参见Oracle 静默安装 之 db_install.rsp 配置文件 详解

确认主机名

使用下面的指令可以得到当前主机的主机名

hostname

如果需要修改主机名,则需要先修改 /etc/sysconfig/network 文件中的主机名

HOSTNAME=$new_hostname
# 或者运行以下命令修改  /etc/sysconfig/network 文件
sed -i "s/HOSTNAME=localhost.localdomain/HOSTNAME=oracledb/" /etc/sysconfig/network

并执行以下指令

hostname $new_hostname

关闭 SELinux

为了确保安装过程不受 SELinux 的影响,建议关闭 SELinux 服务,当然如果你是一个 SELinux 的高手,可以解决因为 SELinux 安全限制而产生的大部分问题,你也可以选择不关闭 SELinux 服务。

执行以下指令关闭 SELinux 服务

setenforce 0

如果你想在系统重启后 SELinux 依然处于关闭状态,则需要修改 /etc/selinux/config文件。

SELINUX=disabled

也可以用以下命令来修改 /etc/selinux/config 文件

sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config  

修改用户验证选项(我也不知道为什么要修改)

编辑 /etc/pam.d/login 文件,在文件末尾添加如下内容

session    required    pam_limits.so

静默安装

查询 ./runInstaller 的参数可知,-silent 是静默安装选项。运行以下命令完成静默安装。

 ./runInstaller -silent -force -responseFile response/db_install.rsp

安装完毕后会提示以下的信息,按照要求执行上述脚本即可

 #Root scripts to run

/opt/app/oracle/oraInventory/orainstRoot.sh
/opt/app/oracle/product/11.2.0/db_1/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.

至此,Oracle数据库安装完成。

设置 Oracle 所属用户的环境变量

Oracle数据库安装完成后,所有的可执行程序都在目录$ORACLE_HOME/bin下面。只有把这个目录加到 Oracle所属用户的环境变量PATH中,登录该用户后才直接输入Oracle程序的命令进行执行(省略命令所在的目录路径)。

另,还需要在指定 ORACLE_BASE,ORACLE_HOME,ORACLE_SID,LD_LIBRARY_PATH等环境变量。为了达到此目的,需要向Oracle所属用户的 .bash_profile 文中追加以下内容:

export ORACLE_BASE=/u01/app/oracle # 可以是其他值,要与之前的配置保持统一
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1 # 可以是其他值,要与安装“响应文件”中保持统一
export ORACLE_SID=ora11g # 可能是其他值,随个人喜欢,但要与安装“响应文件”中保持统一
export PATH=$PATH:$ORACLE_HOME/bin # 主要是为了在PATH中加上 $ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib # 我敢不知道是干嘛用的

执行下面的命令,使修改立即生效:

sh .bash_profile

静默方式安装监听

执行以下命令安装监听程序

netca /silent /responseFile /home/oracle/database/response/netca.rsp

然后执行以下命令启动监控程序

lsnrctl start LISTENER

静默方式创建数据库

1.首先需要编辑 “响应文件” dbca.rsp;

#以下内容不要修改
RESPONSEFILE_VERSION = "11.2.0"
OPERATION_TYPE = "createDatabase"

#以下内容必须设置
GDBNAME = "ora11g" ## 全局数据库的名字=SID+主机域名,可以是其他值,需要与安装“响应文件”中保持统一
SID = "ora11g"     ## 可以是其他值,需要与安装“响应文件”中保持统一
TEMPLATENAME = "General_Purpose.dbc"

#以下内容根据需要修改
CHARACTERSET = "AL32UTF8"
NATIONALCHARACTERSET="UTF8"

2.执行以下命令完成静默方式创建数据库的操作

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

期间会提示输入sys和system用户的密码,自己想一个好记的吧。

界面会提示安装进度

Copying database files
...
37% complete
Creating and starting Oracle instance
...
62% complete
Completing Database Creation
...
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/ORCL/ORCL.log" for further details.

创建数据库的工作完成。

至此,Oracle数据库安装的所有工作完成。

常见错误及处理意见

1.若在默认模式下安装时报以下错误

Exception in thread "main" java.lang.NoClassDefFoundError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:164)
    at java.awt.Toolkit$2.run(Toolkit.java:821)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:804)
    at javax.swing.UIManager.initialize(UIManager.java:1262)
    at javax.swing.UIManager.maybeInitialize(UIManager.java:1245)
    at javax.swing.UIManager.getUI(UIManager.java:851)
    at javax.swing.JPanel.updateUI(JPanel.java:104)
    at javax.swing.JPanel.<init>(JPanel.java:64)
    at javax.swing.JPanel.<init>(JPanel.java:87)
    at javax.swing.JPanel.<init>(JPanel.java:95)
    at oracle.sysman.oii.oiif.oiifo.OiifoOCMUI.<init>(OiifoOCMUI.java:125)
    at oracle.sysman.oii.oiif.oiifo.OiifoOCMInterfaceManager.<init>(OiifoOCMInterfaceManager.java:79)
    at oracle.sysman.oii.oiif.oiifo.OiifoOCMInterfaceManager.getInstance(OiifoOCMInterfaceManager.java:124)
    at oracle.install.ivw.db.driver.DBInstaller.run(DBInstaller.java:123)
    at oracle.install.commons.util.Application.startup(Application.java:869)
    at oracle.install.commons.flow.FlowApplication.startup(FlowApplication.java:164)
    at oracle.install.commons.flow.FlowApplication.startup(FlowApplication.java:181)
    at oracle.install.commons.base.driver.common.Installer.startup(Installer.java:265)
    at oracle.install.ivw.db.driver.DBInstaller.startup(DBInstaller.java:114)
    at oracle.install.ivw.db.driver.DBInstaller.main(DBInstaller.java:132)

请检查是不是在 Oracle 软件所有者用户的环境变量中设置了 DISPLAY 变量。
因为在静默模式下安装 Oracle 是不需要 X window 系统的,而设置 DISPLAY 变量后,安装程序会尝试对 X window 以及 java 图形界面相关的包进行检查,就会引发如上错误。

2.静默安装时报以下错误或类似错误时(一般情况下不同的错误时[INS-10105]会有所变量)

[FATAL] [INS-10105] The given response file /home/oracle/database/response/db_install.rsp is not valid.

之所以报此错误是因为在db_install.rsp文件中的配置出错了。如果在静默安装时报了上面的错误,在这个报错下面还会给出详细的说明。一般情况下根据说明修改db_install.rsp文件就可以解决问题。

3.[FATAL] [INS-10101] The given response file response/db_install.rsp is not found.

出现这个错误的原因是,我的应答文件路径写错了:

./runInstaller -silent -force -responseFile response/db_install.rsp

必须使用绝对路径;如果像我一样使用相对路径就会报上面的错误了。

4.[FATAL] [INS-32012] Unable to create directory.

无法创建目录,原因是我用root用户创建的 $oracle_home 目录,没有把所有者change成oracle用户。在安装过程中,安装程序需要创建一起目录和文件。当创建失败时就会报这个错误了。

注:这并不是全部,其他可能的坑我会继续尝试。

上一篇 下一篇

猜你喜欢

热点阅读