Centos7下安装部署oracle数据库方法及问题汇总

时间:2023-03-10 02:32:19
Centos7下安装部署oracle数据库方法及问题汇总

目标:在centos7上配置oracle数据库服务器,并在win7上面使用pl/sql成功访问该oracle数据库

系统环境:
服务器:centos7 64位
客户端:win7 64位
注意cnetos7硬盘大小不能太小,其运行内存推荐2G,硬盘大小40G,交换内存3G(不用担心,稍后会讲到)

注意: firewalld和selinux都关掉
软件包:

https://pan.baidu.com/s/1c3zNv4
第一个文件是plsql安装程序
第二第三个文件是oracle服务端安装文件
第三个是plsql连接oracle服务端所需要的文件

Centos7安装oracle数据库过程
2017.9.11补充
(1)需要关闭一些服务,以避免安装过程中出现冲突错误

#将下列命令写入某一脚本,然后执行(自己写的,可能不是很完善)
systemctl stop firewalld
systemctl stop cups
systemctl stop firstboot
systemctl stop wpa_supplicant
systemctl stop postfix
systemctl disable firewalld
systemctl disable cups
systemctl disable firstboot
systemctl disable wpa_supplicant
systemctl disable postfix
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
sed -i 's/^GSSAPIAuthentication yes$/GSSAPIAuthentication no/' /etc/ssh/sshd_config
sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
systemctl status firewalld
systemctl status cups
systemctl status firstboot
systemctl status wpa_supplicant
systemctl status postfix
setenforce 0
systemctl restart sshd

(2)需要安装一些依赖包之类的,也写一个脚本执行

yum install binutils* compat-libcap* compat-libstdc++* gcc* glibc* ksh* libgcc* libstdc++* libaio* -y

yum install libXext* libXtst* libX* libXau* libxcb* libXi* make* sysstat* unixODBC unixODBC-devel xterm -y

(3)修改一下内核参数

# vi /etc/sysctl.conf
fs.aio-max-nr=1048576
fs.file-max=6815744
kernel.shmall=2097152
kernel.shmmax=4294967295
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

有时候我们可能会打错某些参数,所以我们可以用sysctl -p来看一下参数是否修改正确,如果语法错误之类的,还会有相关的提示
(4)创建用户组和用户

groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle #同时加入dba组,作用暂时不明
修改oracle密码
mkdir -p /u01/app/oracle/product/11.2.0/db_1
mkdir -p /u01/app/oralnventory
chown -R oracle:oinstall /u01/app
chmod -R 775 /u01/app

现在我们就可以把那两个服务器端安装文件解压到oracle的家目录中了
(5)修改系统限制

# vi /etc/security/limits.conf最末尾添加下面语句
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

还需要修改一下会话参数

# vi /etc/pam.d/login
session required /lib/security/pam_limits.so
session required pam_limits.so

添加以下参数

# vi /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

(6)切换到oracle用户,配置环境参数(oracle家目录下)

# vi .bash_profile,注释掉原来的path行和export行
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.2.0./db_1
ORACLE_SID=shenlan
PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH LD_LIBRARY_PATH

使该文件立即生效
source .bash_profile
(7)开始安装oracle(接下来的这些步骤最后是直接切换到oracle用户,而不是从root用户su oracle,后者很可能导致意想不到的错误)
进入oracle 家目录
oracle用户下执行xhost +

2017.12.6日补充

如果提示找不到xhost

执行yum groupinstall "X Window System" -y

xhost +执行时可能出现各种unable

解决方法是安装vncserver,安装方法可以参考http://www.cnblogs.com/biaopei/p/7798951.html,即

yum install tigervnc-server -y

然后我们执行vncserver时会出现类似 localhost.localdomain:3 的结果,然后export DISPLAY= localhost.localdomain:3 最后执行xhost + 就可以了(还有一种说法是DISPLAY=本地ip(使用ssh连接远程的该主机的ip):0.0)

例如

[root@localhost ~]# vncserver

New 'localhost:1 (root)' desktop is localhost:1

Starting applications specified in /root/.vnc/xstartupLog file is /root/.vnc/localhost:1.log

[root@localhost ~]# export DISPLAY=localhost:1

[root@localhost ~]# xhost +

access control disabled, clients can connect from any host

运行runInstaller #此时会弹出oracle服务端安装界面

执行./runInstaller是可能会一直提示等待,不弹出oracle的安装界面,这个时候我们可以尝试执行xclock命令,如果连xclock也没有弹出来一个时钟,说明你不用等了。我就遇到过这种问题,解决方法是下载xmanager登录服务器(命令那里,我选择第二个xterm linux,选择其它的好像会无法正常弹出窗口), 再次执行runinstaller,很快就会弹出oracle的安装界面了。遇到很坑的问题,提示x11转移错误,这是因为X11 forwarding依赖“xorg-x11-xauth”软件包,所以必须先安装“xorg-x11-xauth”软件包

xclock命令也找不到,执行yum install xorg-x11-apps

然后重新登录oracle用户就可以了。

问题是,xmanager不支持中文,所以oracle的界面会乱码,最后还是将系统编码修改为英文编码才解决(export LANG=en_US.UTF-8可以临时修改编码而不用重启主机),虽然是界面变成英文,但好歹也比乱码强吧。使用xmanager貌似不需要配置xhost + 也可以

第一步:可以选择取消oracle support那个选项,避免不必要的麻烦,然后会弹出一个警告框,选yes
第二步:选择最下面的跳过程序更新
第三步:选择中间的仅安装数据库软件
第四步:选择第一个安装简单的数据库用例
第五步:找到列表中的简体中文项,点击右箭头选中
第六步:选择第一个企业版本
第七、八步:默认即可
第九步:有一个选项选填,选择oinstall即可

大概在这个位置,还会有两个选择管理组的地方,都选择oinstall就可以了
第十步:安装程序会对安装环境进行检测,我遇到过几个问题,一个是内存、物理、交换空间不足(稍后会补充),一个是缺少某些安装,后者解决方法包http://blog.csdn.net/qq_34829953/article/details/77933482 (其实如果是警告而已的话,也可以不理它,直接选择忽略)
第十一步:安装即可,安装过程中可能会出现安装界面变灰色,中间有一个白色的竖线,但是不可拉伸放大,可按fn+alt+f4,多按几次,直到安装界面恢复正常,后面也会出现这种情况,不过是可以拉伸放大的,自己把鼠标放上去试一下。安装得差不多的时候会弹出一个窗口,提示需要用root用户执行两个脚本,新开一个终端并切换到root用户执行即可

Error in invoking target 'agent nmhs' of makefile

解决方案
在makefile中添加链接libnnz11库的参数
修改$ORACLE_HOME/sysman/lib/ins_emagent.mk,将
$(MK_EMAGENT_NMECTL)修改为:$(MK_EMAGENT_NMECTL) -lnnz11
建议修改前备份原始文件
[oracle@ysserver ~]$ cd $ORACLE_HOME/sysman/lib
[oracle@ysserver lib]$ cp ins_emagent.mk ins_emagent.mk.bak
[oracle@ysserver lib]$ vi ins_emagent.mk

进入vi编辑器后  命令模式输入/MK_EMAGENT_NMECTL 进行查找,快速定位要修改的行
在后面追加参数-lnnz11

$(SYSMANBIN)emdctl:
        $(MK_EMAGENT_NMECTL) -lnnz11

保存退出后Retry

(8)dbca建库
执行命令
dbca  
第一步:默认添加数据库
第二步:默认    (这附近有一步是需要开启监听的,所以,另外打开一个窗口执行netca,建库时可能要求要开启netca监听 
如果直接执行netca,提示无此命令 
那么find / -name netca 
弹出netca界面,一直默认,只需选择协议时选择tcp协议,即可完成监听设置)
第三步:熟人database name :shenlan (如果这里是你自己起的名字,那么ORACLE_SID的值需要改为你的值)
第四步:默认
第五步:选择下面的统一密码,并输入自己的密码
接着一直默认下去,直到storage locations选择common location,输入{ORACLE_BASE}/oradata
继续,一直到初始化参数,选择字符那里,使用自定义字符,找到gbk 16bit简体中文,并选中
然后默认下去,开始安装
安装过程中会有警告
Centos7下安装部署oracle数据库方法及问题汇总

1.ORACLE_UNQNAME 那里可以写shenlan

3. 。。。/emctl  config emkey  -repos  -sysman_pwd  123456  (123456是我安装时设置的密码)

4. 。。。/emctl secure dbconsole -sysman_pwd 123456 (这个也是我的密码)

这些语句执行可能会报错,可以不管它,当然像很明显那些提示命令错误的,还是尽量能改就改吧

最下面那句可以不执行
不用慌,它不是有提示执行以下命令吗,那就开一个root终端执行就可以了

建库的过程中可能还会遇到

这个是网上的教程,实际上,我按照这个方法操作了之后,retry了多次,依旧报这个错误,一步小心误触空格键(不知道空格键在这里选择的是哪一个,不过我猜是忽略那个选项吧,对后续的安装没什么明显的影响),接着下一步

接下来的很多命令可能都是找不到的,所以我们需要把oracle相关的可执行文件路径加入到PATH中,export PATH=$PATH:/u01/app/oracle/product/11.2.0/dbhome_1/bin

另外上面的这个11.2.0这个文件夹需要复制到另一个文件夹中,并命名为11.2.0 ,还有dbhome_1这个文件夹下面原来可能什么东西都没有,所以,我们需要把db_1文件夹下的所有文件复制到dbhome_1下面

现在我们还需要配置netca的另一个选项
执行netca,选择第三个net service,service name那里写shenlan,tcp协议,host name那里写上本机ip,最后选择yes perform a test,下一步会提示test成功,如果失败,选择change login(我用的账号是system,密码是我刚才设置的统一密码),netservice name填localdb,其余默认,配置完成

(9)首先在centos7上oracle是否配置完成
lsnrctl start

lsnrctl start报错:TNS-01106: Message 1106 not found; No message file for product=network, facility=TNS

原因:ORACLE_HOME没有设置

方法: export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1

设置之后还需要设置ORACLE_SID(比较好的方法是,在oracle家目录下的.bash_profile文件下,添加export ORACLE_SID=shenlan,然后source .bash_profile就可以了,否则重新开一个端口又需要重新设置该值)

[oracle@asdlabdb01 ~]$ echo $ORACLE_SID

[oracle@asdlabdb01 ~]$

可见,此时只设置了ORACLE_HOME环境变量,但ORACLE_SID此时为空。我把这个值也设置为shenlan

sqlplus / as sysdba
sql>startup(提示数据库开启即为配置成功)
补充,有时候我们会遇到执行startup时提示需要关闭数据库
可以执行shutdown immediate;立即关闭数据库

再centos7上下载前面两个文件,安装过程太长,主要说一下遇到的问题及解决方法 
问题: 
安装过程中,oracle弹出的窗口非常小,而且无法拉伸扩大,类似卡死 
解决方法: 
我在fedora22上安装的,跟你遇到了同样的问题,现在已经安装成功了,你选中这个窗口,然后用alt+f4,让他变成白色就行,你稍微等会,看会不会继续往下走,多试几次。(笔记本的话还需要注意同时按下fn键)

注意:别kill,这样的话这次安装就失败了。 
如果你这一部走到后面了,还有一步你会遇到这种竖线,你把鼠标方上去,会有一个黑色的角,可以拉伸。

问题: 
ORA-01102: cannot mount database in EXCLUSIVE mode 
解决方法: 
export ORACLE_SID=crd(这个值最好跟其他show parameter name 的值保持一致)

如果这个值已经正确了,那么我们只好关闭oracle数据库了,执行命令lsnrctl stop 即可(为什么执行这条语句之后,oracle就直接关闭了,原因我还不是很清楚)

问题: 
ORA-01078:failure in processing system parameters 
解决方法 
将$ORACLE_HOME/dbs目录下spflieorcl.ora改名为spfilecenter.ora即可。(注:spfilecenter.ora中的center为环境变量中设置的SID)

问题: 
安装完成后怎么启动oracle 
解决方法 
lsnrctlstartsqlplus / as sysdba 
sql>startup 
补充,有时候我们会遇到执行startup时提示需要关闭数据库 
可以执行shutdown immediate;立即关闭数据库

开启em(oracle企业级管理器) 
终端执行命令 
emctl start dbconsole 
执行完成后会提示started,然后把网址复制进浏览器打开就可以了(我的用户名是sys,密码是那个统一密码)

问题:

数据库莫名其妙出现下面这个问题

ORA-48108: invalid value given for the diagnostic_dest init.ora parameter
ORA-48140: the specified ADR Base directory does not exist [/volumeX/app/oracle/product/11.2.0/xe/dbs/|ORACLE_BASE|]
ORA-48187: specified directory does not exist

可能原因是我在安装oracle时使用的是xmanager安装,安装完成后返回使用系统自带终端执行命令,于是报此错误

解决方法:

我的原因是因为ORACLE_SID参数为空(可能是因为export只能在当前终端生效,另开一个终端该参数就又边空了),设置参数(你的数据库名称)后,例如我的数据库名称是ORCL,所以我执行命令export ORACLE_SID=ORCL,于是,再次startup就不会报这个错误,可能就是报下面这个错误了

ORA-00845: MEMORY_TARGET not supported on this system 
解决方法; 
mount -o remount,size=2G /dev/shm(如果还是不行,可以适当增减size的大小)

问题:

执行startup的时候提示27102错误,out of memory

可能是由于当前连接数过多,可以尝试关掉一些不用的连接,例如Navicat端的连接等

(10)win7远程连接oracle
首先下载第一个和最后一个文件
安装plsql程序
然后把最后一个文件解压到C盘(当然,也可以是其它地方)
打开plsql,取消登录,进入plsql界面,选中tools的第一个选项,配置oracle home为最后一个文件的解压路径,oci library为解压路径下oci.dll的完整路径(包括oci.dll名)
最后还有一步很重要,就是在最后一个文件的解压路径下,直接看图就可以了

然后差不多就可以连接上了

win7客户端连接oracle数据库(win7系统环境变量不要设置oracle_home,否则容易导致无法连接上)

在win7上下载后面两个文件
Centos7下安装部署oracle数据库方法及问题汇总

两个文件所在的位置需要注意一下,还有这两个文件的内容最好是复制centos7里面的,自己写的,哪怕一模一样也可能报错,需要改地方是把host改为centos7的ip,以及server_name的值(该值在centos7上安装好oracle之后,可以通过执行sqlplus / as sysdba进入oracle后执行show parameter name查看)
其它的无非就是设置pl/sql还有系统环境变量,登录时用户名sys,密码,以及数据库名(我的是shenlan,就是那个server_name的值),连接方式sysdba

远程连接oracle

sqlplus dbauser/abc2017@//192.168.130.99:1521/orcl  用户名dbauser密码abc2017 端口是1521,数据库名是orcl