Linux 字符界面静默安装Oracle 数据库服务
因为公司的业务需求,我们要在 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运用的技术。
- i代表Internet就是互联网技术
- g代表grid就是网格技术
- c就是cloud也就是云技术
注:这是我从网上搜索得到的,说法也比较统一,所以复制到这里供参考。
Oracle 数据库的版权及收费问题说明
关于 Oracle 数据库的版权及收费问题我从网上进行了些搜索。感觉比较靠谱的说法是下面这个:
Oracle软件本身是免费的,所以任何人都可以从Oracle官方网站下载并安装Oracle的数据库软件;收费的是License,即软件授权,如果数据库用于商业用途,就需要购买相应Oracle产品的License。
更详细的内容可以参见:oracle 数据库收费标准
安装包中主要目录与文件的说明
因为 Oracle11gR2 比较大,官方分成了两个压缩包。下载完成后解压可得到一个名为 database 的目录。下面对其中的目录和文件进行简单的说明。
- doc :Oracle 数据库产品文档所在的目录;
- response : Oracle 自动安装时需要用到的“响应文件”存放在这个目录下;
- db_install.rsp:安装应答文件
- dbca.rsp:创建数据库应答文件
- netca.rsp:建立监听、本地服务名等网络设置的应答文件
- welcome.html :Oracle数据库产品文档的入口文件;
- runInstaller : Oracle 安装程序,在Linux下是一个 shell 脚本;
- 其他暂时不需要了解(不写的原因是:我也不知道他们具体都是干嘛用的)。
有关 runInstaller 程序的的参数说明,请参考:Oracle 数据库安装程序 runInstaller 的参数
安装流程
硬件要求是否达标
我没有尝试过在硬件要求不达标的系统下安装Oracle数据库服务会有什么样的提示;下面是从 Oracle 的文档(doc目录下的)中得到一些硬件限制。
内存要求
以下是安装Oracle Database 11 g第2版(11.2)的内存要求:
-
至少1 GB的RAM
要确定RAM大小,请输入以下命令:
grep MemTotal /proc/meminfo
如果RAM的大小小于所需的大小,则必须在继续之前安装更多的内存。 -
下表介绍了已安装的RAM与配置的交换空间要求之间的关系:
可用RAM | 需要交换空间 |
---|---|
介于1 GB和2 GB之间 | RAM大小的1.5倍 |
介于2 GB和16 GB之间 | 等于RAM的大小 |
超过16 GB | 16 GB |
-
要确定系统架构是否可以运行该软件,请输入以下命令:
grep "model name" /proc/cpuinfo
此命令显示处理器类型。验证处理器架构是否与要安装的Oracle软件版本相匹配。如果您看不到预期的输出,则无法在该系统上安装该软件。
要确定配置的交换空间的大小,请输入以下命令:
grep SwapTotal /proc/meminfo
如有必要,请参阅操作系统文档以获取有关如何配置交换空间的方式。
要确定可用的RAM和交换空间,请输入以下命令:
free
-
自动内存管理
Oracle数据库11开始时,自动内存管理功能需要更多的共享存储器(/dev/shm)和文件描述符。共享内在的尺寸至少要比每个Oracle实例的MEMORY_MAX_TARGET和MEMORY_TARGET大。
要确定可用的共享内存量,请输入以下命令:
df -k /dev/shm
磁盘空间要求
以下是安装Oracle Database 11 g第2版(11.2)的磁盘空间要求:
-
/tmp目录中至少有1 GB的磁盘空间
要确定目录中可用的磁盘空间量/tmp,请输入以下命令:
df -h / tmp
如果目录中有/tmp可用的可用磁盘空间不足1 GB ,请完成以下步骤之一:- 从目录中删除不必要的文件/tmp以满足磁盘空间要求。
- 在oracle用户环境下设置环境变量TMP和TMPDIR。
- 扩展包含目录
/tmp
的文件系统。如有必要,请联系系统管理员以获取有关扩展文件系统的信息。
-
要确定系统上可用磁盘空间的大小,请输入以下命令:
df -h
-
下表描述了Linux x86上软件文件和每种安装类型的数据文件的磁盘空间要求:
安装类型 | 软件文件要求(GB) |
---|---|
企业版 | 3.95 |
标准版 | 3.88 |
安装类型 | 数据文件要求(GB) |
---|---|
企业版 | 1.7 |
标准版 | 1.5 |
- 下表描述了Linux x86-64上软件文件和每种安装类型的数据文件的磁盘空间要求:
安装类型 | 软件文件要求(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数据库,则需要以下本地操作系统组和用户:
- Oracle建议您创建一个软件所有者来拥有Oracle软件,并完成Oracle软件的安装。通常这个用户的用户名为 oralce,当然你也可以取一个其他的名字。
- Oracle软件所有者必须把Oracle Inventory组作为其主组,以便每个Oracle所有者都可以向中央清单中写入内容。通常组名为oinstall,你也可以为其取一个其他的名字。
- OSDBA组,通常组名为dba,你也可以取一个你喜欢的其他名字。该组标识具有数据库管理权限(SYSDBA特权)的操作系统用户帐户。
- 用于Oracle数据库的OSOPER组,通常组名为oper,你也可以取一个你喜欢的其他名字。这是一个可选的组。如果希望单独的一组操作系统用户具有有限的数据库管理权限(SYSOPER特权),请创建此组。默认情况下,OSDBA组的成员也拥有所有SYSOPER组的权限。
- 如果需要安装网格系统,则还需要创建风格基础设施组,因为开发测试环境下不需要如此复杂的系统,所以具体内容不再展开。
所有创建系统用和用户的命令如下:
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/软件所有者
- mount_point 是包含Oracle软件文件系统的安装目录。
本指南中的示例/u01
用于安装点目录。但是,您可以选择另一个安装点目录,例如/oracle
或/opt/oracle
。 - software_owner是安装Oracle软件的软件所有者的操作系统用户名,例如oracle或grid
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用户。在安装过程中,安装程序需要创建一起目录和文件。当创建失败时就会报这个错误了。
注:这并不是全部,其他可能的坑我会继续尝试。