在linux安装oracle在实际运维工作中还是经常能用到的。正好最近重装系统,顺便记录一下安装oracle的全过程。
这篇文章是一个探索过程,看起来可能有些乱。我特意整理了一下,欢迎观看。
《2021年强迫证福音CentOS7零警告安装Oracle11g》
https://blog.csdn.net/lxyoucan/article/details/113547596
不同的环境可能会有小小的差异,都是大同小异的。防止有影响,下面给出我用的版本信息。
项目 | 版本 |
---|---|
操作系统 | CentOS Linux 7 (Core) x86_64 |
oracle | linux.x64_11gR2 |
我是在macOS Big Sur11.1中使用VMware Fusion 12.1.0安装的CentOS7虚拟机。
虚拟机配置如下:
CentOS7下载地址:
http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/
实际工作中很多时候系统不用我们下载了,客户提供。
如果你也用虚拟机安装的,出现上不了网的问题可以看这里:
《CentOS7 mini (CentOS-7-x86_64-Minimal-2003.iso )虚拟机安装后无法上网的解决办法》
Oracle下载地址:
强烈建议下载 11.2.0.4版本的,oracle版本是官网下载的11.2.0.1有点小坑在里面,我是后来遇到坑换成的 11.2.0.4版本。11.2.0.4普通用户官网下载不到的,网上找找吧。
CentOS7安装11.2.0.1遇到的坑:
出现这个也可以理解,毕竟这个版本已经年代久远,所依赖的程序包都升级了多个版本了。
坑 1,2直接忽略可以解决,3网上也有解决办法。本文下方也有相关链接。这些坑总让人有点不舒服。
好在 11.2.0.4版本中已经没有这些坑了。
在windows下安装oracle还是很简单的,在linux安装oracle就要略微麻烦一些。为了跟客户现场环境比较接近,我在电脑上远程这台CentOS7来实现数据库的安装。
oracle安装文件不允许使用root用户直接启动,需要为oracle配置一个专门的用户来管理oracle的安装与运维。
root执行以下命令,直接整体复制粘贴到终端就行(不用一行一行复制)。
#创建database用户组
groupadd database
#创建oracle用户并放入database组中
useradd oracle -g database
#设置oracle密码
passwd oracle
我设置的是database@2021
虽然oracle是可以通过命令行的形式安装的,新手第一次安装还是推荐使用图形化的安装,毕竟简单明了。
如果你已经可以直接图形操作,此步可忽略。
我这里使用VNC的方式,VNC不是本文重点。只是用于安装oracle用,本文中我尽量简化操作,跟着我敲命令就行了。图形界面我选的是openbox,因为体积小巧安装oracle完全够用。
如果想详细学习搭建VNC服务,可以看我另一篇文章:
《Centos7安装和配置VNC服务器 - openbox篇》
root执行以下命令,直接整体复制粘贴到终端就行(不用一行一行复制)。
#图形界面必备`X Window System`
yum -y groupinstall "X Window System"
#安装epel源
yum -y install epel-release
#安装VNC+图形需要的软件
yum -y install tigervnc-server openbox xfce4-terminal tint2 cjkuni-ukai-fonts network-manager-applet
编辑openbox配置文件/etc/xdg/openbox/autostart
因为觉得vi修改麻烦,所以写个脚本,直接整段复制到终端执行就好了。
#自动修改/etc/xdg/openbox/autostart配置文件
echo 'if which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS"; then' > /etc/xdg/openbox/autostart
echo ' eval `dbus-launch --sh-syntax --exit-with-session`' >> /etc/xdg/openbox/autostart
echo 'fi' >> /etc/xdg/openbox/autostart
echo 'tint2 &' >> /etc/xdg/openbox/autostart
echo 'nm-applet &' >> /etc/xdg/openbox/autostart
echo 'xfce4-terminal &' >> /etc/xdg/openbox/autostart
echo ' ' >> /etc/xdg/openbox/autostart
我这里VNC端口是 5901,–add-port=端口号
su root
使用root用户执行以下命令:
# 防火墙放行VNC端口
firewall-cmd --add-port=5901/tcp
firewall-cmd --add-port=5901/tcp --permanent
切换到oracle用户
su oracle
开启一个VNC服务
vncserver :1 -geometry 1024x768
参数 | 解释 |
---|---|
:1 | 数字1很重要,它觉得了最终的TCP端口号(5901)。算法:5900+1= 5901 ,也就是说如果设置为:2那么TCP就是5902 |
-geometry 1024x768 | 指定远程桌面的分辨率,根据自己喜好来就行,默认是1024x768,注意中间的x别写错了 |
第一次执行命令,根据提示输入密码就行了。
我这里设置的密码是 vnc@2021
配置VNC默认启动openbox
#配置VNC默认启动openbox
echo "openbox-session &" > ~/.vnc/xstartup
修改完配置要重启vnc服务
vncserver -kill :1
vncserver :1 -geometry 1024x768
恭喜,到这一步VNC服务就搭建完成了。
使用你的VNC客户端连接就行了,会的就略过吧。
我用的是:VNC Viewer点击下载。
然后输入上面设置的连接密码就可以了。我这里设置的密码是 vnc@2021
如果你连接的时候发现,没有界面,是黑屏的只有一个鼠标,那么可以重启一下VNC服务试试。
切换到oracle用户su oracle
命令:
vncserver -kill :1
vncserver :1 -geometry 1024x768
最简单的粗暴的方法,临时使用英文环境。
LANG=en_US
中文是世界上最美的文字,必须中文,很简单增加所需字体就行了。操作如下:
下载字体:
https://download.csdn.net/download/lxyoucan/14968070
root执行以下命令:
新建文件夹
mkdir -p /usr/share/fonts/zh_CN/TrueType
zysong.ttf
上传到/usr/share/fonts/zh_CN/TrueType目录
chmod 75 /usr/share/fonts/zh_CN/TrueType/zysong.ttf
这样安装oracle就不会中文乱码了。
上传安装包到 CentOS7服务器。我上传到 /home/oracle/
目录了。
如果没有unzip,安装unzip用于文件解压root执行以下面
yum install unzip
oracle用户登录vnc,执行下面命令,解压安装包
unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip
cd database
运行安装程序
./runInstaller
看到类似下面的安装界面,说明你已经成功一半了。
现在有图形界面,有中文了。安装方法基本与windows 下面类似了。放心一路“下一步(N)>
”吧,没什么大问题。
我就不一一截图了,截图多反而看着累。我把我觉得重要的说一下。
安装类型:
密码设置,这个主要是数据的超级管理员密码,比如常用的sys用户。
设置密码Database123
点击“修补并再次检查(F)
”按钮就可以修补大半。具体方法按弹框中的说明执行即可。
我执行结果如下:
[root@localhost ~]# /tmp/CVU_11.2.0.1.0_oracle/runfixup.sh
Response file being used is :/tmp/CVU_11.2.0.1.0_oracle/fixup.response
Enable file being used is :/tmp/CVU_11.2.0.1.0_oracle/fixup.enable
Log file location: /tmp/CVU_11.2.0.1.0_oracle/orarun.log
Setting Kernel Parameters...
/tmp/CVU_11.2.0.1.0_oracle/orarun.sh: 第 244 行:[: 18446744073692774399: 期待整数表达式
The value for shmmax in response file is not greater than value of shmmax for current session. Hence not changing it.
/tmp/CVU_11.2.0.1.0_oracle/orarun.sh: 第 335 行:[: 18446744073692774399: 期待整数表达式
The value for shmall in response file is not greater than value of shmall for current session. Hence not changing it.
The value for semmni in response file is not greater than value of semmni for current session. Hence not changing it.
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
uid=1001(oracle) gid=1001(database) 组=1001(database)
就这样就可以轻松干掉大部分的检查了。
下面我们来一一解决它即可。
如果Swap空间不符合要求,oracle 安装文件检查发现swap 空间不足。
大小一般设置为一般为内存的1.5倍。
(root权限)查询当时Swap分区设置情况。
swapon -s
free -m
结果如下单位(MB):
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 1475 439 171 13 865 877
Swap: 2047 0 2047
创建Swap文件
接下来我们将在文件系统上创建swap文件。我们要在根目录/
下创建一个名叫swapfile
的文件,当然你也可以选择你喜欢的文件名。该文件分配的空间将等于我们需要的swap空间。
一般 内存的 1.5倍以上就好了。也可以根据安装程序的提示来。
root执行以下命令,创建swap分区,
#创建swap文件 bs=2300的设置的值一般为内存的1.5倍以上
dd if=/dev/zero of=/var/swap bs=2500 count=1000000
#需要更改swap文件的权限,确保只有root才可读
chmod 600 /var/swap
#告知系统将该文件用于swap
mkswap /var/swap
#开始使用该swap
swapon /var/swap
#使Swap文件永久生效,/etc/fstab加入配置
echo "/var/swap swap swap sw 0 0" >> /etc/fstab
如果上面创建后发现,大小创建错误了。如何重置呢?
swapoff -a
rm /var/swap
上面命令就可以删除了,然后重新创建合适的swap文件就行了。
继续修复,再次点击“修补并再次检查(F)
”按钮,与上面一次操作相同,发现又能自动修复2条了。
为什么有2条,第二次执行修改脚本才可以,我也是无意中发现的。
现在还剩一个操作系统内核参数semmni
这个问题怎么解决呢?
sysctl -p
网上搜索了一下,也有网友遇到这个问题的。
比如:这个https://bbs.csdn.net/topics/392059643?page=2
其中有个网友这么说的。
那我们就暂时忽略吧。
看了很多文章,这个地方可能是安装程序的BUG吧,只要自身设置正确就行了。不用管这个提示了。
补充:实测 11.2.0.4版本不会出现这个问题。
yum -y install binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33*.i686 elfutils-libelf-devel gcc gcc-c++ glibc*.i686 glibc glibc-devel glibc-devel*.i686 ksh libgcc*.i686 libgcc libstdc++ libstdc++*.i686 libstdc++-devel libstdc++-devel*.i686 libaio libaio*.i686 libaio-devel libaio-devel*.i686 make sysstat unixODBC unixODBC*.i686 unixODBC-devel unixODBC-devel*.i686 libXp
上面安装完成发现程序包中还是有几条警告。我查了一下,还是提示缺少的包,实际上我们已经安装过了,只是我们安装的版本比要求的版本高。毕竟Oracle 11g是好多年前的产品了,我现在用的CentOS7是最新版本。只要要求的包我们已经安装成功了,右上角点击☐全部忽略
。这样我们就能继续安装了。
一路下一步吧。
补充:实测 11.2.0.4版本不会出现这个问题。
补充:实测 11.2.0.4版本不会出现这个问题。
安装到 68%报错如下:
makefile '/home/oracle/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ins_ctx.mk’的目标’install’时出错。
查看日志,错误如下:
如果你安装的版本遇到这个问题,解决办法请参考:《Error in invoking target ‘install’ of makefile ‘…/dbhome_1/ctx/lib/ins_ctx.mk’ …》
https://blog.csdn.net/xch_yang/article/details/104389154
后来网上找了一下还有一个更优雅的解决办法:
在oracle网站查到说是版本对应问题
https://community.oracle.com/thread/3635853
由于是centos 7.3,oracle版本是官网下载的11.2.0.1,这里提示说需要换到11.2.0.3 or higher
最后上传11.2.0.4版本。我决定试试。
然后我按前面的步骤在来了一遍,基本一样我就不重新截图了,果然不报这个错了。下面的截图都是11.2.0.4版本的。
它来了,它来了,我等待好久了。
编辑:
/home/oracle/app/oracle/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk
约176行,可以搜索$(MK_EMAGENT_NMECTL)
关键字快速找到。
修改后如下:
#===========================
# emdctl
#===========================
$(SYSMANBIN)emdctl:
$(MK_EMAGENT_NMECTL) -lnnz11
#===========================
# nmocat
#===========================
修改完成后,点击重试(R)
[INS-20802]Oracle Database Configuration Assistant 失败。
安装过程中如果遇到这个错误,可能是因为你的网络不通,或者有问题导致的。我wifi连手机热点就出现这个问题了,我连接有线网络这个问题自动就好了(网络正常后,点击“重试(R)
”)。
是个警告暂时忽略,实践证明这个警告没有影响,数据库正常使用。我猜测有可能是因为我先安装11.2.0.1删除不彻底导致的。
安装完成后,root权限执行一下以上两个脚本。
这样就安装完成了。
默认端口是1521
# 防火墙放行1521oracle端口
firewall-cmd --add-port=1521/tcp
firewall-cmd --add-port=1521/tcp --permanent
su oracle
切换到oracle用户操作。
编辑配置文件
vi ~/.bash_profile
文件末尾加入以下内容,ORACLE_HOME中换成你实际安装的路径
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1/
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
使用配置文件立即生效。
source ~/.bash_profile
su oracle
sqlplus /nolog
SQL> connect /as sysdba
SQL> startup
[oracle@localhost ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.4.0 Production on Tue Feb 2 02:59:38 2021
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> connect as sysdba
Enter user-name: sys
Enter password:
Connected.
SQL> select 1 from dual;
1
----------
1
SQL>
没有问题,说明oracle本地连接oracle成功。
lsnrctl start
使用其他机器连接我们刚安装好的oracle进行连接测试。
修改配置文件C:\app\itkey\product\11.2.0\client_1\network\admin\tnsnames.ora
(路径根据实际情况来)
CentOS7ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.184.5)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
CentOS7安装Oracle 11g不难,遇到问题都能百度解决。就是对比windows下安装有些麻烦。安装中遇到的小问题大多因为oracle 11g年岁己高导致的。我猜测在新版的系统中安装新版的Oracle 可能会更简单。甚至可能像windows中那样简单吧!或者使用 Oracle 自己的linux系统安装起来会不会更容易呢?等我以后有空了,可以测试一下。
《在CentOS 7上添加Swap交换空间》
https://blog.csdn.net/zstack_org/article/details/53258588
《Error in invoking target ‘install’ of makefile ‘…/dbhome_1/ctx/lib/ins_ctx.mk’ …》
https://blog.csdn.net/xch_yang/article/details/104389154
《记一次oracle安装错误:INFO: //usr/lib64/libstdc++.so.5: undefined reference to `memcpy@GLIBC_2.14’》
https://www.cnblogs.com/yhq1314/p/10830300.html
《Linux/Centos 安装oracle报错“调用makefile '/oracle/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk的目标” 解决》
https://blog.csdn.net/weixin_41078837/article/details/80585287