前言
之前用的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那样直接解压全部包,而是要一个一个手动解压)
unzip linux.x64_11gR2_database_1of2.zip && unzip linux.x64_11gR2_database_2of2.zip
等待解压完成后,会在/data/tmp
目录下生产一个database文件夹,里面就是Oracle11g安装文件。
[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
:
# 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
使配置生效
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
配置说明:
<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
这个账号进行的了。
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
下面:
cp -R /data/tmp/database/database/response/ /home/oracle
然后编辑/home/oracle/response/db_install.rsp
文件:
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
,得到以下提示就是执行成功。
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
,因为是静默安装.。
[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.ora
和sqlnet.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
文件,注释掉类似下面的语句。
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
。
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实例不可用
[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,执行如下命令:
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
,让数据库启动文件找到正确的启动目录
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