CentOS7.9静默安装Oracle 11g操作记录

2023-06-13 09:25:34 浏览数 (1)

前言

之前用的Oracle数据库是部署在windows上面的,最近有点不太稳定了,寻思着迁移到Linux上面会不好一点,因此做一下记录。这次迁移的是非GUI版的操作,GUI版会有不同。

环境准备

Centos 7.9 x64 2207

Oracle 11gR2 x64安装包 11.2.0.1.0 (包含:linux.x64_11gR2_database_1of2.zip、linux.x64_11gR2_database_1of2zip,网上也有7个包的安装包,不过如果是安装数据库的话,只需要前两个包就行)

需要安装的库包

代码语言:shell复制
unzip gcc make binutils gcc-c   compat-libstdc  -33 elfutils-libelf-devel 
elfutils-libelf-devel-static ksh libaio libaio-devel numactl-devel 
sysstat unixODBC unixODBC-devel pcre-devel policycoreutils-python

安装准备

安装包准备

以下操作除非特别注明,不然都是以root用户去执行命令。

上传安装包到服务器上并解压,我这里使用自建的/data/tmp目录来存放安装包文件。(注:Linux下解压多个zip时,不会像Windows那样直接解压全部包,而是要一个一个手动解压)

代码语言:shell复制
unzip linux.x64_11gR2_database_1of2.zip && unzip linux.x64_11gR2_database_2of2.zip

等待解压完成后,会在/data/tmp目录下生产一个database文件夹,里面就是Oracle11g安装文件。

代码语言:shell复制
[root@oracle]# ll
总用量 2.2G
drwxr-xr-x. 8 root root 4.0K 8月  21 2009 database
-rw-r--r--. 1 root root 1.2G 4月  25 09:53 linux.x64_11gR2_database_1of2.zip
-rw-r--r--. 1 root root 1.1G 4月  25 09:55 linux.x64_11gR2_database_2of2.zip

设置主机名称

/etc/hosts中添加主机名,一般来说ssh连接后显示的root@oracle,@后面的就是主机名称,一般为localhost,这里是我们使用oracle作为主机名。

在127.0.0.1最后添加oracle,在最后一行添加服务器的ip:

代码语言:javascript复制
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 oracle # 这里
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 oracle
172.16.0.10   oracle # 这里

关闭SELinux

由于CentOS的SELinux安全机制,开放Oracle的1521端口需要手动放开SELinux和firewall两处,由于机器处在可信的内网中,故我这里直接关闭SELinux。

先临时关闭SElinux(下次启动就失效):

代码语言:shell复制
setenforce 0

如果提示命令找不到的话,看看是不是没有安装policycoreutils-python这个包。

然后永久关闭SELinux:

然后修改/etc/selinux/config,设置SELINUX=disabled

代码语言:javascript复制
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled    # 修改为disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

关闭防火墙

代码语言:shell复制
service iptables stop
systemctl stop firewalld
systemctl disable firewalld

添加安装用户和用户组

代码语言:shell复制
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle

注意,oracle账户不要在安装系统时创建,不然后面安装的时候提示对oraInventory目录没有写权限,就得删除现在这个oracle用户,重新创建一个新的oracle用户,并且将需要的目录重新授予新Oracle用户。

检查权限是否正确:

代码语言:shell复制
id oracle

得到如下结果:

代码语言:shell复制
uid=1001(oracle) gid=1001(oinstall) 组=1001(oinstall),1002(dba)

修改内核参数配置

代码语言:shell复制
nano /etc/sysctl.conf

添加以下内容:

代码语言:shell复制
fs.aio-max-nr=1048576
fs.file-max=6815744                         // 表示一个进程可以打开的文件句柄的最大数量. 
kernel.shmall=4194304
kernel.shmmni=4096
kernel.shmmax=8589934592                    // 单个共享内存段的最大值,这里设置为8GB
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.shmall:

kernel.shmall的单位是页。对于X86的linux系统,一页=4k,也就是4096字节。kernel.shmall = 2097152 就是2097152*4k/1024/1024 = 8G 就是说可用共享内存一共8G,2097152 =8G ,4194304=16G 。

一个共享内存段的最大大小是16G,那么需要共享内存页数是 16GB/4KB=16777216KB/4KB=4194304 (页),也就是64Bit 系统下 16GB 物理内存,设置 kernel.shmall = 4194304 才符合要求(几乎是原来设置2097152 的两倍)。这时可以将shmmax 参数调整到 16G 了,同时可以修改SGA_MAX_SIZE 和 SGA_TARGET 为 12G(您想设置的SGA 最大大小,当然也可以是2G~14G 等,还要协调PGA参数及OS 等其他内存使用,不能设置太满,比如16G)。

kernel.shmmni

共享内存段的最大数量,shmmni 缺省值 4096 ,一般是够用了。

kernel.shmmax

shmmax 是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值(以字节为单位),

设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降,最大值为16GB(在大多数情况下,该值应该比SGA大)。

其值应>=sag_max_size初始化参数的大小,否则SAG由多个内存段构成,效率降低,还要不小于物理内存的一半,默认情况下在32位x86系统中,Oracle SGA最大不能超过1.7GB。

缺省为32M,对于oracle来说,该缺省值太低了,通常将其设置为2G(2147483648)

针对24G的服务器,至少12G的配置,则是17179869184‬。

编辑好文件后,输入sysctl -p使配置生效

代码语言:shell复制
sysctl -p

(注:可以使用ipcs -l看结果。ipcs -u 可以看到实际使用的情况

限制oracle用户的shell权限

第一步,先修改/etc/security/limits.conf文件

代码语言:shell复制
nano /etc/security/limits.conf

在末尾添加

代码语言:shell复制
oracle	soft	nproc	2047
oracle	hard	nproc	16384
oracle	soft	nofile	1024
oracle	hard	nofile	65536

limits.conf配置说明:

代码语言:javascript复制
<domain>   <type>  <resource>   <value>

domain

代码语言:javascript复制
username | @groupname:设置需要被限制的用户名,组名前面加@ 与 用户名 区别。   
* 表示所有用户(注意有的系统不支持哦)。

type:

代码语言:javascript复制
soft 指的是当前系统生效的设置值,
hard 表明系统中所能设定的最大值(soft 的限制不能比har 限制高 )
- 就表明同时设置了 soft 和 hard 的值。

resource(针对Oracle的我们主要配置nproc nofile)

代码语言:javascript复制
as -地址空间限制    
rss -最大持久设置大小   
cpu -以分钟为单位的最多 CPU 时间    
core -限制内核文件的大小    
date -最大数据大小    
stack -最大栈大小 
fsize -最大文件大小    
noproc -进程的最大数目   
nofile -打开文件的最大数目    
memlock -最大锁定内存地址空间    
maxlogins -此用户允许登录的最大数目

value: 限制的值

第二步,修改**/etc/pam.d/login**

代码语言:shell复制
nano /etc/pam.d/login

在文件末尾添加:

代码语言:shell复制
session  required   /lib64/security/pam_limits.so    //用于设置用户的资源限制
session  required   pam_limits.so

第三步,修改**/etc/profile**

在末尾添加:

代码语言:shell复制
if [ $USER = "oracle" ]; then
    if [ $SHELL = "/bin/ksh" ]; then
        limit -p 16384
        ulimit -n 65536
    else
        ulimit -u 16384 -n 65536
    fi
fi

这段代码的作用是:如果当前用户是oracle,那么根据当前用户的shell类型,设置用户的资源限制。如果shell是/bin/ksh,那么使用limit -p 16384命令设置最大进程数为16384,使用ulimit -n 65536命令设置最大打开文件数为65536。如果shell不是/bin/ksh,那么使用ulimit -u 16384 -n 65536命令同时设置最大进程数和最大打开文件数。

创建安装目录和设置文件权限

代码语言:shell复制
mkdir -p /data/oracle/product/11.2.0
mkdir /data/oracle/oradata
mkdir /data/oracle/inventory
mkdir /data/oracle/fast_recovery_area
chown -R oracle:oinstall /data/oracle
chmod -R 775 /data/oracle

设置oracle用户的环境变量

首先切换到oracle这个用户,接下来所有操作都是用oracle这个账号进行的了。

代码语言:shell复制
su - oracle

修改环境变量

代码语言:shell复制
nano .bash_profile

添加以下内容:

代码语言:shell复制
ORACLE_HOSTNAME=oracle
ORACLE_UNQNAME=SID        #这里SID填写你要设置的SID,文中用SID代替,下文所有的SID也是同理
ORACLE_BASE=/data/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.2.0
ORACLE_SID=oracle
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_HOSTNAME ORACLE_UNQNAME ORACLE_BASE ORACLE_HOME ORACLE_SID ORACLE_SIDPATH LD_LIBRARY_PATH NLS_LANG

编辑静默安装响应文件

先把之前解压好的oracle安装包目录下的response文件夹复制一份到/home/oracle下面:

代码语言:shell复制
cp -R /data/tmp/database/database/response/ /home/oracle

然后编辑/home/oracle/response/db_install.rsp文件:

代码语言:shell复制
oracle.install.option=INSTALL_DB_SWONLY            //只安数据库
ORACLE_HOSTNAME=oracle
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/data/oracle/inventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/data/oracle/product/11.2.0
ORACLE_BASE=/data/oracle
oracle.install.db.InstallEdition=EE                //安装企业版
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
DECLINE_SECURITY_UPDATES=true

开始安装

根据响应文件静默安装Oracle11g

代码语言:shell复制
cd /data/tmp/database
./runInstaller -silent -responseFile /home/oracle/response/db_install.rsp -ignorePrereq

可以在以下位置找到本次安装会话的日志:

代码语言:shell复制
/data/oracle/inventory/logs/

当出现以下提示时,代表安装成功:

代码语言:shell复制
[oracle@oracle database]$ ./runInstaller -silent -responseFile /home/oracle/response/db_install.rsp -ignorePrereq
正在启动 Oracle Universal Installer...

检查临时空间: 必须大于 120 MB。   实际为 14942 MB    通过
检查交换空间: 必须大于 150 MB。   实际为 2047 MB    通过
准备从以下地址启动 Oracle Universal Installer /tmp/OraInstall2023-05-04_04-57-44PM. 请稍候...
可以在以下位置找到本次安装会话的日志:
 /data/oracle/inventory/logs/installActions2023-05-04_04-57-44PM.log
以下配置脚本需要以 "root" 用户的身份执行。
 #!/bin/sh
 #要运行的 Root 脚本

/data/oracle/inventory/orainstRoot.sh
/data/oracle/product/11.2.0/root.sh
要执行配置脚本, 请执行以下操作:
         1. 打开一个终端窗口
         2. 以 "root" 身份登录
         3. 运行脚本
         4. 返回此窗口并按 "Enter" 键继续

Successfully Setup Software.

按要求新开终端以root执行脚本/data/oracle/product/11.2.0/root.sh,得到以下提示就是执行成功。

代码语言:shell复制
Check /data/oracle/product/11.2.0/install/root_oracle_2023-05-05_09-03-32.log for the output of root script

以静默方式配置监听

代码语言:shell复制
netca /silent /responseFile /home/oracle/response/netca.rsp

注意此处,必须使用/silent /responseFile格式,而不是-silent -responseFile,因为是静默安装.。

代码语言:shell复制
[oracle@oracle database]$ netca /silent /responseFile /home/oracle/response/netca.rsp

正在对命令行参数进行语法分析:
参数"silent" = true
参数"responsefile" = /home/oracle/response/netca.rsp
完成对命令行参数进行语法分析。
Oracle Net Services 配置:
完成概要文件配置。
Oracle Net 监听程序启动:
    正在运行监听程序控制:
      /data/oracle/product/11.2.0/bin/lsnrctl start LISTENER
    监听程序控制完成。
    监听程序已成功启动。
监听程序配置完成。
成功完成 Oracle Net Services 配置。退出代码是0

成功运行后,在/data/oracle/product/11.2.0/network/admin/中生成listener.orasqlnet.ora

通过lsof命令可以查看1521端口正在监听。

代码语言:shell复制
[oracle@oracle database]$ lsof -i:1521
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
tnslsnr 7358 oracle   13u  IPv6 812764      0t0  TCP *:ncube-lm (LISTEN)

以静默方式建立新库,同时也建立一个对应的实例

代码语言:shell复制
nano /home/oracle/response/dbca.rsp

设置以下参数:

代码语言:shell复制
GDBNAME= "SID"
SID ="SID"
SYSPASSWORD= "Sys@2023"
SYSTEMPASSWORD= "Sys@2023"
SYSMANPASSWORD= "Sys@2023"
DBSNMPPASSWORD= "Sys@2023"
TOTALMEMORY = "12288"

其中TOTALMEMORY ="12288"为12288MB,物理内存16G*80%,请根据你实际的内存来分配。(注意该值应当小于上面sysctl.conf设置的kernel.shmmax的空间,不然后面创建数据库的时候会提示:ORA-27102: out of memory

进行静默配置

代码语言:shell复制
dbca -silent -responseFile /home/oracle/response/dbca.rsp

如果提示:模板不存在。请为数据库创建操作指定现有模板。那么应该是安装包解压不完整,检查一下是不是只解压了一个包。

代码语言:shell复制
[oracle@oracle database]$ dbca -silent -responseFile /home/oracle/response/dbca.rsp
复制数据库文件
1% 已完成
3% 已完成
11% 已完成
18% 已完成
26% 已完成
37% 已完成
正在创建并启动 Oracle 实例
40% 已完成
45% 已完成
50% 已完成
55% 已完成
56% 已完成
57% 已完成
60% 已完成
62% 已完成
正在进行数据库创建
66% 已完成
70% 已完成
73% 已完成
74% 已完成
85% 已完成
96% 已完成
100% 已完成
有关详细信息, 请参阅日志文件 "/data/oracle/cfgtoollogs/dbca/SID/SID.log"。

如果/data/oracle/cfgtoollogs/dbca/SID/SID.log提示:Oracle 系统标识符 (SID) "interlib" 已经存在。请指定另一个 SID。

打开/etc/oratab文件,注释掉类似下面的语句。

代码语言:shell复制
SID:/data/oracle/product/11.2.0:Y

建库后进行实例进程检查:

代码语言:shell复制
ps -ef | grep ora_ | grep -v grep

得到

代码语言:shell复制
[oracle@oracle database]$ ps -ef | grep ora_ | grep -v grep
oracle    11684      1  0 09:17 ?        00:00:00 ora_pmon_SID
oracle    11687      1  0 09:17 ?        00:00:00 ora_vktm_SID
oracle    11691      1  0 09:17 ?        00:00:00 ora_gen0_SID
oracle    11693      1  0 09:17 ?        00:00:00 ora_diag_SID
oracle    11695      1  0 09:17 ?        00:00:00 ora_dbrm_SID
oracle    11697      1  0 09:17 ?        00:00:00 ora_psp0_SID
oracle    11699      1  0 09:17 ?        00:00:00 ora_dia0_SID
oracle    11701      1  0 09:17 ?        00:00:00 ora_mman_SID
oracle    11703      1  0 09:17 ?        00:00:00 ora_dbw0_SID
oracle    11705      1  0 09:17 ?        00:00:00 ora_lgwr_SID
oracle    11707      1  0 09:17 ?        00:00:00 ora_ckpt_SID
oracle    11709      1  0 09:17 ?        00:00:00 ora_smon_SID
oracle    11711      1  0 09:17 ?        00:00:00 ora_reco_SID
oracle    11713      1  0 09:17 ?        00:00:00 ora_mmon_SID
oracle    11715      1  0 09:17 ?        00:00:00 ora_mmnl_SID
oracle    11717      1  0 09:17 ?        00:00:00 ora_d000_SID
oracle    11719      1  0 09:17 ?        00:00:00 ora_s000_SID
oracle    11762      1  0 09:17 ?        00:00:00 ora_qmnc_SID
oracle    11786      1  0 09:17 ?        00:00:00 ora_cjq0_SID
oracle    11868      1  0 09:17 ?        00:00:00 ora_q000_SID
oracle    11870      1  0 09:17 ?        00:00:00 ora_q001_SID

查看监听状态:

代码语言:shell复制
lsnrctl status
代码语言:shell复制
[oracle@oracle database]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 05-5月 -2023 09:29:49

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

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for Linux: Version 11.2.0.1.0 - Production
启动日期                  05-5月 -2023 09:08:15
正常运行时间              0 天 0 小时 21 分 34 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          /data/oracle/product/11.2.0/network/admin/listener.ora
监听程序日志文件          /data/oracle/diag/tnslsnr/oracle/listener/alert/log.xml
监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
服务摘要..
服务 "SID" 包含 1 个实例。
  实例 "SID", 状态 READY, 包含此服务的 1 个处理程序...
服务 "SIDXDB" 包含 1 个实例。
  实例 "SID", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功

登录查看实例状态:

代码语言:shell复制
sqlplus / as sysdba
SQL> select status from v$instance;
代码语言:shell复制
[oracle@oracle database]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 5月 5 09:32:10 2023

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


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select status from v$instance;

STATUS
------------------------------------
OPEN

SQL>

Oracle sqlplus无法使用命令退格删除和历史记录的解决方法

SSH客户端远程登录Linux下oracle的sqplus时,输错字符后按Backspace键或Del键删除时,会出现^H或其他乱七八糟的的字符,感觉非常别扭不习惯,虽然可以通过Ctrl Backspace组合键实现删除功能,但是严重影响使用效率。可以通过使用rlwrap这个包去解决。

安装rlwrap

代码语言:shell复制
yum install rlwrap

如果提示:没有可用软件包 rlwrap。可以先安装第三方软件库epel-release

代码语言:shell复制
yum install epel-release

然后再安装rlwrap就可以了。

设置sqlplus的系统别名

编辑oracle的.bash_profile文件,如果你用的是zsh,那么就是.zshrc。

代码语言:shell复制
nano /home/oracle/.bash_profile

在头部或尾部添加:

代码语言:javascript复制
 alias sqlplus='rlwrap sqlplus'
 alias rman='rlwrap rman'

然后source一下就ok了。

代码语言:javascript复制
source ~/.bash_profile

配置oracle开机自启

当我们的虚拟机关机后重新开机,会遇到一个问题。

会发现Oracle实例,监听程序和emctl程序没有启动。

用sqlplus通过show parameter instance_name命令可以发现Oracle实例不可用

代码语言:shell复制
[oracle@oracle database]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期三 4月 26 14:23:57 2023
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
已连接到空闲例程。
SQL> show parameter instance_name
ORA-01034: ORACLE not available
进程 ID: 0
会话 ID: 0 序列号: 0

当然我们可以手动启动它们:

启动Oracle实例

通过sqlplus / as sysdba连接到Oracle,执行如下命令:

代码语言:shell复制
SQL> startup

执行完毕后可以得到启动成功

ORACLE 例程已经启动。

代码语言:shell复制
Total System Global Area 1603411968 bytes
Fixed Size                  2213776 bytes
Variable Size             402655344 bytes
Database Buffers         1191182336 bytes
Redo Buffers                7360512 bytes
数据库装载完毕。
数据库已经打开。

启动监听程序

lsnrctl status查看监听器状态

lsnrctl start启动监听器

启动成功后会有类似下面的响应:

代码语言:shell复制
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 26-4月 -2023 15:46:31

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

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for Linux: Version 11.2.0.1.0 - Production
启动日期                  26-4月 -2023 15:20:52
正常运行时间              0 天 0 小时 25 分 39 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          /data/oracle/product/11.2.0/network/admin/listener.ora
监听程序日志文件          /data/oracle/diag/tnslsnr/oracle/listener/alert/log.xml
监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
服务摘要..
服务 "SIDXDB" 包含 1 个实例。
  实例 "SID", 状态 READY, 包含此服务的 1 个处理程序...
服务 "SID" 包含 1 个实例。
  实例 "SID", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
[oracle@oracle database]$ lsnrctl start

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 26-4月 -2023 15:46:34

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

启动emctl

emctl start dbconsole启动emclt

设置Oracle 11g实例和相关服务开机自启

但是一个一个的启动实在是太不优雅了,所以怎么让他们开机自己启动呢?如下:

修改dbstart dbshut 文件

ORACLE_HOME_LISTNER=$1改为ORACLE_HOME_LISTNER=$ORACLE_HOME,让数据库启动文件找到正确的启动目录

代码语言:shell复制
nano /data/oracle/product/11.2.0/bin/dbstart
代码语言:shell复制
nano /data/oracle/product/11.2.0/bin/dbshut

修改oratab 文件

代码语言:shell复制
nano /etc/oratab 

在文件最后添加以下内容:

代码语言:javascript复制
SID:/data/oracle/product/11.2.0:Y

上面的SID请改成你相应的SID,如果存在以上内容,请把末尾的N改成Y。

创建启动oracle11g的init脚本

代码语言:shell复制
cd /etc/rc.d/init.d/
nano /etc/rc.d/init.d/oracle

添加以下内容:

代码语言:shell复制
#!/bin/bash
#oracle: Start/Stop Oracle Database 11g R2
#chkconfig: 345 90 10
#description: The Oracle Database is an Object-Relational Database ManagementSystem.
#

LOCKFILE=/var/lock/subsys/oracle
ORACLE_HOME=/data/oracle/product/11.2.0 #根据自己的具体目录来
ORACLE_USER=oracle

case "$1" in
'start')
    if [ -f $LOCKFILE ];then
        echo $0 already running.
    else
        echo -n $"StartingOracle 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
    fi
;;
'stop')
    if [ ! -f $LOCKFILE ]; then
        echo $0 already stopping.
    else
        echo -n $"StoppingOracle 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
        fi
;;
'restart')
    $0 stop
    sleep 5
    $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

写完后记得给该文件执行权限。

代码语言:shell复制
chmod a x /etc/rc.d/init.d/oracle

加入到系统服务列表中

代码语言:javascript复制
chkconfig --add oracle
chkconfig --level 345 oracle on

测试(没有报错就说明成功了)

代码语言:javascript复制
service oracle restart
service oracle start
service oracle stop

0 人点赞