CentOS7虚拟机安装部署oracle数据库
1. 安装前环境准备
VMware Workstation 17搭建CentOS7虚拟机,CentOS7操作系统最小化安装,2G内存,20G磁盘空间,1核CPU,已配置好网络IP:192.168.10.130。已下载Oracle 11g Linux安装文件:linux.x64_11gR2_database_1of2.zip和linux.x64_11gR2_database_2of2.zip 通过Xmanager、MobaXterm或 Xsftp上传到虚拟机/tmp目录中。
oracle安装文件下载:
链接: https://pan.baidu.com/s/1oRbvWWg20YvXKWsCLrIzxg?pwd=nxu9
提取码: nxu9
2. 操作系统准备工作
(1)以 root 用户身份登录系统,通过 yum 安装 unzip 工具,用于解压上传的 Oracle 安装包。
[root@CentOS ~]# yum install unzip –y
解压Oracle 安装程序
[root@CentOS ~]# cd /tmp
[root@CentOS tmp]# unzip linux.x64_11gR2_database_1of2.zip && unzip linux.x64_11gR2_database_2of2.zip
等待解压完成后,会在/tmp目录下生成一个database文件夹,其中包含Oracle 11g的安装文件。
(2)在/etc/hosts文件里添加主机名称。
[root@CentOS tmp]# vim /etc/hosts
在CentOS系统中添加本地服务器的IP地址。

(3)关闭selinux
[root@CentOS tmp]# vim /etc/selinux/config
将SELINUX参数设置为disabled(禁用状态)。
[root@CentOS tmp]# setenforce 0
(4)关闭防火墙
[root@CentOS ~]# systemctl stop firewalld
[root@CentOS ~]# systemctl disable firewalld
(5)安装Oracle 11g依赖包
在线环境依赖包安装方式:
[root@CentOS tmp]# yum install yum install 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 –y
(6)创建安装用户及用户组。
[root@CentOS tmp]# groupadd oinstall
[root@CentOS tmp]# groupadd dba
[root@CentOS tmp]# useradd -g oinstall -G dba oracle
[root@CentOS tmp]# passwd oracle
[root@CentOS tmp]# id oracle
uid=1000(oracle) gid=1000(oinstall) 组=1000(oinstall),1001(dba)
(7)编辑内核参数的配置文件。
[root@CentOS ~]# vim /etc/sysctl.conf
添加以下内容
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 1073741824
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 = 1048576
[root@CentOS ~]# sysctl -p
其中kernel.shmmax = 1073741824表示该值设为本机2G物理内存的一半,单位为字节(byte)。
(8)对用户的限制文件进行修改。
[root@CentOS ~]# vim /etc/security/limits.conf
添加以下内容
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
(9)对/etc/pam.d/login文件进行修改。
[root@CentOS ~]# vim /etc/pam.d/login
添加以下内容:
session required /lib64/security/pam_limits.so
session required pam_limits.so
(10)对/etc/profile文件进行修改。
[root@CentOS ~]# vim /etc/profile
添加以下内容:
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
(11)创建安装目录并配置文件权限。
[root@CentOS ~]# mkdir -p /u01/app/oracle/product/11.2.0
[root@CentOS ~]# mkdir /u01/app/oracle/oradata
[root@CentOS ~]# mkdir /u01/app/oracle/inventory
[root@CentOS ~]# mkdir /u01/app/oracle/fast_recovery_area
[root@CentOS ~]# chown -R oracle:oinstall /u01/app/oracle
[root@CentOS ~]# chmod -R 775 /u01/app/oracle
(12)配置oracle用户的环境变量。
[root@CentOS ~]# su - oracle
[oracle@CentOS ~]$ vim .bash_profile
添加如下内容:
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.2.0
ORACLE_SID=orcl
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
(13)对静默安装响应文件进行编辑。
[oracle@CentOS ~]$ cp -R /tmp/database/response/ .
[oracle@CentOS ~]$ cd response/
[oracle@CentOS response]$ vim db_install.rsp
需要配置的选项如下:
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=CentOS
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oracle/inventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/u01/app/oracle/product/11.2.0
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
DECLINE_SECURITY_UPDATES=true
3. 依据响应文件以静默方式安装Oracle 11g。
[oracle@CentOS response]$ cd /tmp/database/
[oracle@CentOS database]$ ./runInstaller -silent -responseFile /home/oracle/response/db_install.rsp -ignorePrereq

开始在后台以静默方式安装Oracle。安装期间,若出现[WARNING]提示可忽略,此时安装程序仍在后台运行;若出现[FATAL]提示,则表明安装程序已停止。
本次安装会话的日志可在以下路径查找:
/u01/app/oracle/inventory/logs/installActions2025-06-10_06-15-10AM.1og
可切换至终端执行top命令,查看后台进程是否持续安装,同时观察到/u01目录的占用空间不断增大。当出现特定提示时,即表示安装成功。:

依照要求运行脚本。
开启终端,使用root用户登录系统,然后执行脚本:
[root@CentOS ~]# sh /u01/app/oracle/inventory/orainstRoot.sh
[root@CentOS ~]# sh /u01/app/oracle/product/11.2.0/root.sh

4.采用静默模式对监听进行配置。
再次以oracle用户身份进行登录。
[oracle@CentOS ~]$ netca /silent /responsefile /home/oracle/response/netca.rsp

执行成功后,会在 /u01/app/oracle/product/11.2.0/network/admin/ 目录下生成 listener.ora 和 sqlnet.ora 文件。通过 netstat 命令能够查看1521端口是否处于监听状态。
若要使用 netstat 命令,可通过Yum安装 net-tools 软件包来获取。
[root@CentOS ~]# yum install net-tools
[root@CentOS ~]# netstat -tnulp | grep 1521

5. 以静默模式创建新的数据库,并同步创建与之对应的实例。
[oracle@CentOS ~]$ vim /home/oracle/response/dbca.rsp
设置以下参数:
GDBNAME = "orcl"
SID = "orcl"
SYSPASSWORD = "oracle"
SYSTEMPASSWORD = "oracle"
SYSMANPASSWORD = "oracle"
DBSNMPPASSWORD = "oracle"
DATAFILEDESTINATION =/u01/app/oracle/oradata
RECOVERYAREADESTINATION=/u01/app/oracle/fast_recovery_area
CHARACTERSET = "ZHS16GBK"
TOTALMEMORY = "1638"
其中TOTALMEMORY = "1638"表示1638MB,为物理内存2G的80%(2048MB×80%)。
执行静默模式配置:
[oracle@CentOS ~]$ dbca -silent -responseFile /home/oracle/response/dbca.rsp

数据库创建完成后,对实例进程进行检查:
[oracle@CentOS ~]$ ps -ef | grep ora_ | grep -v grep

检查监听器运行状态:
[oracle@CentOS ~]$ lsnrctl status

登录数据库以查看实例运行状态:
[oracle@CentOS ~]$ sqlplus / as sysdba
SQL> select status from v$instance;

6. 配置Oracle在系统启动时自动运行。
1.修改/u01/app/oracle/product/11.2.0/bin/dbstart
[oracle@CentOS ~]$ vim /u01/app/oracle/product/11.2.0/bin/dbstart
把ORACLE_HOME_LISTNER=$1这一设置调整为ORACLE_HOME_LISTNER=$ORACLE_HOME。
2.修改/u01/app/oracle/product/11.2.0/bin/dbshut
[oracle@CentOS ~]$ vim /u01/app/oracle/product/11.2.0/bin/dbshut
把 ORACLE_HOME_LISTNER=$1 修改为 ORACLE_HOME_LISTNER=$ORACLE_HOME。
3.修改/etc/oratab文件
[oracle@CentOS ~]$ vim /etc/oratab
把orcl:/u01/app/oracle/product/11.2.0:N末尾的N替换为Y,变更为orcl:/u01/app/oracle/product/11.2.0:Y。
4.执行 dbshut 和 dbstart 命令进行测试。
[oracle@CentOS ~]$ dbshut
Oracle监听器已停止,相关进程已终止。

[oracle@CentOS ~]$ dbstart
Oracle监听器已启动,相关进程已运行。

5.切换至root用户,创建Oracle自动启动服务脚本。
[oracle@CentOS ~]$ su -
[root@CentOS ~]# vim /etc/rc.d/init.d/oracle
添加下述内容(部分参数如ORACLE_HOME和ORACLE_USER等需依据实际场景调整):
#!/bin/sh
# chkconfig: 35 80 10
# description: Oracle auto start-stop script.
# processname: oracle
# pidfile: /var/run/oracle.pid
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database in ORA_HOME.
ORA_HOME=/u01/app/oracle/product/11.2.0 # 直接指向产品目录
ORA_OWNER=oracle
ORACLE_SID=orcl
# 创建日志文件(如果不存在)
if [ ! -f /var/log/oracle ]; then
touch /var/log/oracle
chown $ORA_OWNER:$ORA_OWNER /var/log/oracle
fi
# 检查 Oracle 安装
if [ ! -f $ORA_HOME/bin/dbstart ]; then
echo "Oracle startup: cannot start, $ORA_HOME/bin/dbstart not found!"
exit 1
fi
case "$1" in
'start')
# Start the Oracle databases:
echo "Starting Oracle Databases ... "
echo "-------------------------------------------------" >> /var/log/oracle
date +" %T %a %D : Starting Oracle Databases as part of system up." >> /var/log/oracle
echo "-------------------------------------------------" >> /var/log/oracle
su - $ORA_OWNER -c "export ORACLE_SID=$ORACLE_SID; $ORA_HOME/bin/dbstart" >> /var/log/oracle 2>&1
echo "Done"
# Start the Listener:
echo "Starting Oracle Listeners ... "
echo "-------------------------------------------------" >> /var/log/oracle
date +" %T %a %D : Starting Oracle Listeners as part of system up." >> /var/log/oracle
echo "-------------------------------------------------" >> /var/log/oracle
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start" >> /var/log/oracle 2>&1
echo "Done."
echo "-------------------------------------------------" >> /var/log/oracle
date +" %T %a %D : Finished." >> /var/log/oracle
echo "-------------------------------------------------" >> /var/log/oracle
touch /var/lock/subsys/oracle
;;
'stop')
# Stop the Oracle Listener:
echo "Stopping Oracle Listeners ... "
echo "-------------------------------------------------" >> /var/log/oracle
date +" %T %a %D : Stopping Oracle Listener as part of system down." >> /var/log/oracle
echo "-------------------------------------------------" >> /var/log/oracle
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop" >> /var/log/oracle 2>&1
echo "Done."
rm -f /var/lock/subsys/oracle
# Stop the Oracle Database:
echo "Stopping Oracle Databases ... "
echo "-------------------------------------------------" >> /var/log/oracle
date +" %T %a %D : Stopping Oracle Databases as part of system down." >> /var/log/oracle
echo "-------------------------------------------------" >> /var/log/oracle
su - $ORA_OWNER -c "export ORACLE_SID=$ORACLE_SID; $ORA_HOME/bin/dbshut" >> /var/log/oracle 2>&1
echo "Done."
echo ""
echo "-------------------------------------------------" >> /var/log/oracle
date +" %T %a %D : Finished." >> /var/log/oracle
echo "-------------------------------------------------" >> /var/log/oracle
;;
'restart')
$0 stop
sleep 5
$0 start
;;
'status')
# 检查监听器状态
echo "Checking Oracle Listener status..."
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl status"
# 检查数据库状态(修复SQL脚本格式)
echo "Checking Oracle Database status..."
su - $ORA_OWNER -c "$ORA_HOME/bin/sqlplus -s / as sysdba <<'EOF'
set heading off;
set feedback off;
select 'Database is ' || status from v\$instance;
exit;
EOF"
;;
*)
echo "Usage: $0 [start|stop|restart|status]"
exit 1
esac
exit 0
6.调整 /etc/rc.d/init.d/oracle 服务配置文件的访问权限
[root@CentOS init.d]# chmod 755 /etc/init.d/oracle
7.配置该服务随系统启动自动运行。
[root@CentOS ~]# chkconfig oracle on

8.执行 service oracle start、service oracle stop 和 service oracle restart 命令进行功能测试。

9.在关机或重启机器前,需按以下步骤停止数据库。
ln -s /etc/init.d/oracle /etc/rc0.d/K01oracle //关机
ln -s /etc/init.d/oracle /etc/rc6.d/K01oracle //重启
重启系统后,检查Oracle监听服务与数据库实例进程是否均实现自动启动。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)