以下如不言明,均为在root用户下操作。
关闭系统防火墙:
[root@localhost ~]# systemctl status firewalld.service #查看防火墙状态
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-04-07 03:10:19 EDT; 2min 39s ago
Docs: man:firewalld(1)
Main PID: 756 (firewalld)
CGroup: /system.slice/firewalld.service
└─756 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
Apr 07 03:10:17 localhost.localdomain systemd[1]: Starting firewalld - dynamic ....
Apr 07 03:10:19 localhost.localdomain systemd[1]: Started firewalld - dynamic f....
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# systemctl stop firewalld.service #临时关闭防火墙
[root@localhost ~]# systemctl disable firewalld.service #永久关闭防火墙
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
关闭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
# 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
因为本人喜好在Xmanager上操作,所以先使用XShell连接上服务器,首先在服务器上获取服务器ip :
ip addr
发现网卡居然没有ip,如下图:
查看网卡配置文件:
cat /etc/sysconfig/network-scripts/ifcfg-ens33
发现CentOS7默认是不启动网卡的,如下图:
修改该文件将ONBOOT=no,改为ONBOOT=yes,重启网卡服务:
service network restart
然后再次执行命令ip addr 发现已经分配到ip:
1. 创建运行oracle数据库的系统用户和用户组
[root@localhost ~]# groupadd oinstall #创建用户组oinstall
[root@localhost ~]# groupadd dba #创建用户组dba
[root@localhost ~]# useradd -g oinstall -g dba -m oracle #创建oracle用户,并加入到oinstall和dba用户组
[root@localhost ~]# passwd oracle #设置用户oracle的登陆密码,不设置密码,在CentOS的图形登陆界面没法登陆
Changing password for user oracle.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# id oracle #查看新建的oracle用户
uid=1000(oracle) gid=1001(dba) groups=1001(dba)
2. oracle数据库安装目录
[root@localhost ~]# mkdir -p /data/oracle #oracle数据库安装目录
[root@localhost ~]# mkdir -p /data/oraInventory #oracle数据库配置文件目录
[root@localhost ~]# mkdir -p /data/database #oracle数据库软件包解压目录
[root@localhost ~]# chown -R oracle:oinstall /data/oracle #设置目录所有者为oinstall用户组的oracle用户
[root@localhost ~]# chown -R oracle:oinstall /data/oraInventory
[root@localhost ~]# chown -R oracle:oinstall /data/database
3. 修改OS系统标识
oracle默认不支持CentOS系统安装,Oracle Database 11g Release 2 的 OS要求参考:
https://docs.oracle.com/cd/E11882_01/install.112/e47689/pre_install.htm#LADBI1106
修改配置文件,将redhat-release文件中的内容改为 redhat-7:
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
[root@localhost ~]# vi /etc/redhat-release
[root@localhost ~]# cat /etc/redhat-release
redhat-7
4. 安装ORACLE所需软件包
我安装的是Oracle Database 11g Release 2 64位数据库,所需依赖如下:
binutils-2.23.52.0.1-12.el7.x86_64
compat-libcap1-1.10-3.el7.x86_64
gcc-4.8.2-3.el7.x86_64
gcc-c++-4.8.2-3.el7.x86_64
glibc-2.17-36.el7.i686
glibc-2.17-36.el7.x86_64
glibc-devel-2.17-36.el7.i686
glibc-devel-2.17-36.el7.x86_64
ksh
libaio-0.3.109-9.el7.i686
libaio-0.3.109-9.el7.x86_64
libaio-devel-0.3.109-9.el7.i686
libaio-devel-0.3.109-9.el7.x86_64
libgcc-4.8.2-3.el7.i686
libgcc-4.8.2-3.el7.x86_64
libstdc++-4.8.2-3.el7.i686
libstdc++-4.8.2-3.el7.x86_64
libstdc++-devel-4.8.2-3.el7.i686
libstdc++-devel-4.8.2-3.el7.x86_64
libXi-1.7.2-1.el7.i686
libXi-1.7.2-1.el7.x86_64
libXtst-1.2.2-1.el7.i686
libXtst-1.2.2-1.el7.x86_64
make-3.82-19.el7.x86_64
sysstat-10.1.5-1.el7.x86_64
(参考官网https://docs.oracle.com/cd/E11882_01/install.112/e47689/pre_install.htm#BABCFJFG)
使用下面指令检测依赖包安装:
yum install binutils-2.* compat-libstdc++-33* elfutils-libelf-0.* elfutils-libelf-devel-* gcc-4.* gcc-c++-4.* glibc-2.* glibc-common-2.* glibc-devel-2.* glibc-headers-2.* ksh-2* libaio-0.* libaio-devel-0.* libgcc-4.* libstdc++-4.* libstdc++-devel-4.* make-3.* sysstat-7.* unixODBC-2.* unixODBC-devel-2.* pdksh*
5. 修改内核参数
修改/etc/sysctl.conf,在文件末尾添加如下参数:
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
fs.file-max = 6815744 #设置最大打开文件数
fs.aio-max-nr = 1048576
kernel.shmall = 2097152 #共享内存的总量,8G内存设置:2097152*4k/1024/1024
kernel.shmmax = 2147483648 #最大共享内存的段大小
kernel.shmmni = 4096 #整个系统共享内存端的最大数
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500 #可使用的IPv4端口范围
net.core.rmem_default = 262144
net.core.rmem_max= 4194304
net.core.wmem_default= 262144
net.core.wmem_max= 1048576
执行命令使配置生效:
[root@localhost ~]# sysctl -p
6. 对oracle用户设置限制,提高软件运行性能
修改/etc/security/limits.conf,在文件末尾添加如下参数:
#@student - maxlogins 4
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
# End of file
7. 配置用户环境变量
修改/home/oracle/.bash_profile,在文件末尾添加如下参数:
export ORACLE_BASE=/data/oracle #oracle数据库安装目录
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1 #oracle数据库路径
export ORACLE_SID=orcl #oracle启动数据库实例名
export ORACLE_TERM=xterm #xterm窗口模式安装
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH #添加系统环境变量
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib #添加系统环境变量
export LANG=C #防止安装过程出现乱码
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK #设置Oracle客户端字符集,必须与Oracle安装时设置的字符集保持一致
执行命令使上述配置立即生效:
[root@localhost ~]# source /home/oracle/.bash_profile
8. 上传安装包
使用Xmanager自带的Xftp工具将oracle安装包上传至CentOs。
9. 解压安装包
[root@localhost oracle]# unzip linux.x64_11gR2_database_1of2.zip -d /data/database/
提示我没有unzip命令,(╯▽╰)。。。安装unzip:
[root@localhost oracle]# yum install unzip zip
重新执行解压命令,分别解压两个安装包。解压时间较长,耐心等待,(*╹▽╹*).....
10. centos安装图形化界面
本教程安装oracle是使用图形化界面安装,一般centos7是没有图形化界面的,这里先安装好xwindow,安装xwindow所需时间较长,需耐心等待,如果已经安装过图形化界面,则可跳过此步骤:
[root@localhost oracle]# yum groupinstall "X Window System"
11. 创建虚拟机快照
到这里安装oracle 的环境全部都已经准备好了,接下来就要开始图形化界面安装oracle了。oracle安装失败后重新安装时总会遇见千奇百怪的问题,本人深有体会。所以强烈建议大家到这一步创建快照,以便后续安装过程中如果遇到一些奇葩问题,可以恢复过来重新安装,不必从头开始配置。记得创建快照!创建快照!!!创建快照!!!!!!
启动Xmanager自带Xstart工具:
其中,用户名为前面服务器中创建的oracle用户,密码为oracle用户的密码。
在命令文本框中输入命令:
/usr/bin/xterm -ls -display $DISPLAY
此时可能连接出错:
[16:05:33] Start timer (TIMER_SHUTDOWN, 180).
/usr/bin/xauth: file /home/oracle/.Xauthority does not exist
bash: /usr/bin/xterm: No such file or directory
安装xterm重新运行即可:
[root@localhost oracle]# yum install -y xterm
在Xstart弹出的linux命令台进入到oracle安装包解压目录,执行命令启动安装程序:
[oracle@localhost oracle]$ cd /data/database/database/
[oracle@localhost database]$ ./runInstaller
1. 去掉勾,执行下一步
点击yes,进入下一步:
2. 选择仅安装数据库,点击下一步
3. 选择单例安装,点击下一步
4. 添加语言
5、选择企业版
6、确定数据软件的安装路径,自动读取前面oracle环境变量中配置的值
7、默认
8、理论上要创建Database Operation(OSOPER)Group:oper ,个人用就使用dba用户组。
9、安装检查
此处要根据以上问题一个一个解决。
问题原因:由于Oracle要求提供2.67G大小的Swap交换区,而实际上只有2G,那么增加Swap交换区。
解决:
9.1.1、使用root用户登录系统,将当前swap空间由2048M增加到 3048M,新增一个2014的分区
[root@localhost database]# dd if=/dev/zero of=/home/swap bs=1024 count=1024000
9.1.2、将/home/swap设置为Swap交互分区
[root@localhost database]# mkswap /home/swap
Setting up swapspace version 1, size = 1023996 KiB
no label, UUID=49bdd101-42e6-4fec-919c-b18951cf3766
9.1.3、增加并启用交互分区
[root@localhost database]# mkswap /home/swap
Setting up swapspace version 1, size = 1023996 KiB
no label, UUID=49bdd101-42e6-4fec-919c-b18951cf3766
[root@localhost database]# swapon /home/swap
swapon: /home/swap: insecure permissions 0644, 0600 suggested.
9.1.4、设置交互分区开机启动
编辑/etc/fstab文件,在文件末尾添加以下内容:
/dec/hdb5 swap swap defaults 0 0
/home/swap swap swap defaults 0 0
9.1.5、重新检测swap size已经消失了。
这个其实在上述配置内核参数步骤中已经配置过了,这里为什么为0我也很费解,网上查了很久也没找到解决办法,直接忽略吧,ε=(´ο`*)))唉。
9.3、缺少包或者现有包的版本过高,如果在上述步骤中确定执行了导入依赖包,直接忽略即可。安装过程会遇到相关问题,我们具体再分析解决。
问题分析:缺少依赖软件包引起的
解决:重新执行依赖导入:
yum install binutils-2.* compat-libstdc++-33* elfutils-libelf-0.* elfutils-libelf-devel-* gcc-4.* gcc-c++-4.* glibc-2.* glibc-common-2.* glibc-devel-2.* glibc-headers-2.* ksh-2* libaio-0.* libaio-devel-0.* libgcc-4.* libstdc++-4.* libstdc++-devel-4.* make-3.* sysstat-7.* unixODBC-2.* unixODBC-devel-2.* pdksh*
然后点击retry按钮即可。为什么我也不知道,明明已经导入过了呀.....
问题分析:在网上查找解决办法大部分都是说缺少glibc-static包导致的。
解决:
(1)安装glibc-static-2.*
yum install -y glibc-static-2.*
(2)修改ins_ctx.mk文件
文件地址:/data/oracle/product/11.2.0/db_1/ctx/lib/ins_ctx.mk
将:
ctxhx: $(CTXHXOBJ)
$(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK)
修改为:
ctxhx: $(CTXHXOBJ)
-static $(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK) /usr/lib64/stdc.a
之后点击retry按钮,问题解决。
问题原因:
解决办法:
(1)修改ins_emagent.mk文件,添加链接libnnz11库的参数
文件地址:/data/oracle/product/11.2.0/db_1/sysman/lib/ins_emagent.mk
将$(MK_EMAGENT_NMECTL)
修改为:
$(MK_EMAGENT_NMECTL) -lnnz11
点击retry,问题解决,然后静静等待安装完成即可。
其中一次遇见问题:libaio.xxx缺失,提示需要i386版本。但是之后按照本博客的安装教程,重装了几次都没有重现该问题,不过还是把查到的解决方案记录一下吧。
问题原因:oracle11g在配置中把这些依赖包的版本写死了,且为i386,但是centos7根本没这版本
解决方案:
在解压后的安装包根路径找到/stage/cvu/cvu_prereq.xml文件,直接把该文件中所有的i386字符串改为i686即可解决问题。
3.1 在Xstart弹出的linux命令台执行netca命令,弹出监听配置窗口
3.2 点击next
3.3 继续next
3.4 还是next
3.5 next...-_-||
3.6 next ...
3.7 然后点击finish。至此oracle监听配置完了......
4.1 在Xstart弹出的linux命令台执行dbca命令,弹出实例配置窗口
4.2 使用默认配置,直到配置数据库实例的第三步,输入实例名:
4.3 使用默认配置,直到第五步,配置统一密码:
4.4 使用默认配置,直到配置完成,点击finish,开始创建数据库实例。
4.5 PS:注意数据库编码,忘了截图了
执行dbstart命令:
[oracle@localhost root]$ dbstart
ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener
Usage: /data/oracle/product/11.2.0/db_1/bin/dbstart ORACLE_HOME
cat: /etc/oratab: No such file or directory
cat: /etc/oratab: No such file or directory
cat: /etc/oratab: No such file or directory
cat: /etc/oratab: No such file or directory
错误原因:dbstart和dbshut脚本文件中ORACLE_HOME_LISTNER的设置有问题。
解决:
修改文件dbstart和sbshut文件,文件路径分别为$ORACLE_HOME/bin/dbstart、$ORACLE_HOME/bin/dbshut
:
将
ORACLE_HOME_LISTNER=$1
修改为:
ORACLE_HOME_LISTNER=$ORACLE_HOME
修改后保存,问题解决。
设置linux启动自动启动oracle监听和实例,修改/etc/oratab文件:
找到: orcl:/data/oracle/product/11.2.0/db_1:N
修改为: orcl:/data/oracle/product/11.2.0/db_1:Y
配置格式与路径有关,公式为:$ORACLE_SID:$ORACLE_HOME:
有的时候可能在etc下没有oratab文件,解决方法是使用root用户在oracle的安装目录 $ORALCE_HOME 下执行 root.sh。
[root@localhost ~]# cd $ORACLE_HOME
[root@localhost db_1]# ./root.sh
Running Oracle 11g root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /data/oracle/product/11.2.0/db_1
Enter the full pathname of the local bin directory: [/usr/local/bin]:
点击回车:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
Finished product-specific root actions.
/data/oracle/product/11.2.0/db_1/rdbms/install/rootadd_rdbms.sh: line 80: [: 6815744#设置最大打开文件数: integer expression expected
/data/oracle/product/11.2.0/db_1/rdbms/install/rootadd_rdbms.sh: line 91: [: 6815744#设置最大打开文件数: integer expression expected
就会在/etc下生成oratab文件。重复上述修改/etc/oratab文件即可。如果文件中没有orcl相关内容,则改修改为添加。
把lsnrctl start和dbstart添加到rc.local文件中:
[root@localhost db_1]# vi /etc/rc.d/rc.local
将以下内容添加到文件中:
su - oracle -lc "/data/oracle/product/11.2.0/db_1/bin/lsnrctl start"
su - oracle -lc "/data/oracle/product/11.2.0/db_1/bin/dbstart"
CentOs7中/etc/rc.d/rc.local不会开机执行,需添加执行权限。
查看rc.loacl的权限:
[root@localhost etc]# ll /etc/rc.d/rc.local
添加rc.local执行权限:
[root@localhost etc]# chmod +x /etc/rc.d/rc.local
重启系统,验证自启动是否成功。
查看监听是否自启动成功:
[oracle@localhost root]$ lsnrctl status LISTENER
有时会提示找不到lsnrctl 命令,重新执行生效配置文件即可,为什么一开始不生效我也不知道:
[oracle@localhost root]$ source /home/oracle/.bash_profile
查看oracle启动状态:
[oracle@localhost root]ps -ef | grep oracle
[oracle@localhost root]# dbstart #启动
[oracle@localhost root]# dbshut #停止