当前位置:Gxlcms > 数据库问题 > CentOS7_86_64创建Oracle实例且设置开机自启以及允许远程连接

CentOS7_86_64创建Oracle实例且设置开机自启以及允许远程连接

时间:2021-07-01 10:21:17 帮助过:19人阅读

serverip

没问题则表示可访问到linux服务器

tnsping serverip  

没问题说明tns下可以访问。

我是win7客户端连接linux下的Oracle服务器,就是在这里tnsping不可以通过,网上查到原因是linux防火墙问题。但是我安装的centos7默认没有安装防火墙模块,却意外的屏蔽了外部机器对linux主机的访问。

解决思路:安装防火墙模块,并对防火墙进行设置。

2、检测linux下防火墙配置信息

root下执行命令

#systemctl status iptables.service

或者

#systemctl start iptables.service

提示类似下面信息

Unit iptables.service failed to load: No such file or directory

或者

Failed to issue method call: Unit iptables.service failed to load: No such file or directory.
iptables-failThis simple means you do not have iptables-services package installed.

这里说明我的centos7下缺少防火墙模块。需要先安装防火墙模块。如果在安装CentOS7时选择了安全模块,这里应该就不会出现这种问题。

3、yum安装防火墙模块

#yum install iptables-services

安装成功后,再执行命令status查看防火墙状态,如果开启,可以restart一下

#systemctl restart iptables.service

如果关闭,执行开启命令

#systemctl start iptables.service

之后再查看下状态,如果开启,应该会显示active。

另外CentOS7 的默认防火墙是firewalld,这里还需要做一些设置。
执行

#systemctl disable firewalld.service

禁止firewall开机启动,然后执行

#systemctl enable iptables.serivce
#systemctl start iptables.serivce

以上安装并开启了centos7的防火墙,但我们这里还需要设置,将1521端口允许远程机器访问。

4、设置防火墙开放端口1521

有两种解决方案,一种是直接关闭防火墙,一种是配置防火墙服务,开启1521端口。
(1)关闭防火墙,

#systemctl  stop  iptables.service

但是重启后会失效,
当然也可以去执行

#systemctl  disable  iptables.service

永久关闭防火墙,但是也不推荐,不安全不合理。合理的解决方式应该是给1521端口开放,而保持防火墙服务正常开启。

(2)配置防火墙,开启1521端口。

首先用iptables查看当前规则:iptables -L -n , 如下图
技术分享

可以看到,真的只有寥寥几个端口被允许连接.所以让iptables开放1521端口允许此端口被连接:

首先:

#vi /etc/sysconfig/iptables

加入:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT

技术分享

保存后退出vi编辑器,然后:

# service iptables save
# service iptables restart

之后重启,再执行一下

#iptables -L -n ,

如果现实1251端口开放,则设置成功。

至此,防火墙配置结束。

三、创建Oracle数据库实例并配置监听和网络配置

安装oracle时一般会创建一个实例orcl,这里假设还没有创建数据库,或者我们需要另一个数据库实例,重新创建一个。

1.创建Oracle实例

使用oracle登录,
首先设置下当前语言环境为英文,防止乱码

$export LANG=enUS

执行命令,打开创建实例窗口——Database Configuration Assistant。

$dbca

点击next,选择

Create a Database

除了设置实例名称、账户密码、选择Character Sets,基本都是一路点击next,最后点击OK,开始创建数据库实例。假设这里建了实例test,实例sid为testid

2、配置监听

oracle账户下,输入命令打开配置窗口——Oracle Net Configuration Assistant

$netca

选择第一项,然后点击next

Listener Configuration

如果之前配置过其他实例的监听,一般这里选择Reconfigure项,然后一路next直到finish即可。

3、配置本地网络服务名

在刚才的Net Configuration Assitant窗口中,选择第三个——Local Net Service Name Configuration,点击next

选择Add,点击Next,输入实例名test,点击next,选择TCP,点击next,然后输入Host name,这里一般输入本机IP地址,输入localhost或者127.0.0.1应该也可以,端口保持默认1521不变,然后next,选择“Yes,perform a test”进行连接测试,点击next,会告诉你登录失败,一般都是这样,这时点击Change Login,使用system和之前创建实例时设置的password登录,点击OK,显示Test successful,接着点击next,输入test,再点击next,选择No,然后next,next,回到第一个界面,此时网络配置成功。

可以输入如下命令,查看刚才的配置。(因为这篇文章是接着上一篇写的,我的ORACLE_HOME是/opt/oracle/102/。

$cat /opt/oracle/102/network/admin/listener.ora
$cat /opt/oracle/102/netword/admin/tnsnames.ora 

查看之前的监听和网路配置。
技术分享

技术分享

四、启动本地数据库实例

还是使用oracle用户登录。上面创建了test实例,下面我们就来启动这个实例,要不然没有意义啊。
在启动之前,我们一般先要启动监听,执行命令

$lsnrctl start
$lsnrctl status

启动实例可以有两种方式,一种是使用sqlplus,一种是直接调用启动脚本dbstart。但是默认dbstart是有问题的,我们先使用第一种。

1、使用sqlplus启动实例

如果有多个实例,且指向那个实例,可以用

$echo $ORACLE_SID

查看,如果需要改变,可以使用如下命令制定要启动的Oracle实例的SID。

$export ORACLE_SID=testsid
$echo $ORACLE_SID

然后执行命令

$sqlplus /nolog
$conn /as sysdba

以dba身份进入,接着输入指令

SQL>startup

则启动了数据库实例test。
如果需要关闭,则之前流程都一样,最后一步执行shutdown immediate即可。

2、使用dbstart启动数据库

还有个很好用的命令dbstart和dbshut,但是dbstart需要配置一下,如果直接执行,会报错:

ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener

或者类似

Failed to auto-start Oracle Net Listene using /ade/vikrkuma_new/oracle/bin/tnslsnr

看来是listener服务没有起来,但是执行lsnrctl start却能启动listener服务。
搜索dbstart文件中的tnslsnr字符串

$grep tnslsnr dbstart

返回结果:
 

 if [ -f $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then
  echo "Failed to auto-start Oracle Net Listene using $ORACLE_HOME_LISTNER/bin/tnslsnr"

看来可能是ORACLE_HOME_LISTNER环境变量引起的,查找ORACLE_HOME_LISTNER  

grep ORACLE_HOME_LISTNER dbstart

返回结果

 # 3) Set ORACLE_HOME_LISTNER
  ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle
  if [ ! $ORACLE_HOME_LISTNER ] ; then
  echo "ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener"
  LOG=$ORACLE_HOME_LISTNER/listener.log
  if [ -f $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then
  $ORACLE_HOME_LISTNER/bin/lsnrctl start >> $LOG 2>&1 &
  export VER10LIST=`$ORACLE_HOME_LISTNER/bin/lsnrctl version | grep "LSNRCTL for " | cut -d‘ ‘ -f5 | cut -d‘.‘ -f1`
  echo "Failed to auto-start Oracle Net Listene using $ORACLE_HOME_LISTNER/bin/tnslsnr"
  $LOGMSG "Restart Oracle Net Listener using an alternate ORACLE_HOME_LISTNER: lsnrctl start"

其中有一段给ORACLE_HOME_LISTNER环境变量赋值,但是这个路径是不对的,编辑dbstart文件

vi /opt/oracle/102/bin/dbstar

将该行改为

export ORACLE_HOME_LISTNER=$ORACLE_HOME

保存退出,然后执行dbstart就没问题了。

一般情况下,dbshut不会有错,如果有的话,同理解决。

到这里,我们已经创建了一个数据库实例,并且启动服务,而且设置了远程可连接,也就是说,我们的数据库服务器已经可用了。但还有个问题就是,Oracle不会随着开机自动启动,每次开机我们都得手动dbstart,这不是我们想要的。网络上有很多关于设置oracle服务开机自启的方法,这里选择比较简单的一个,折腾了很久,终于搞定。其实很简单,主要还是对linux尤其是centos7不熟。

五、设置Linux开机自启动

1、配置oratab

先以root身份登录到linux系统,键入命令

vi /etc/oratab

进入vi编辑器后,找到

testsid:/opt/oracle/102:N

,改为

testsid:/opt/oracle/102:Y

修改完成后,保存退出vi。

说明:testsid为实例sid;/opt/oracle/102安装目录;会因安装的情况不同而有所不同。

2、配置rc.local

键入命令

vi /etc/rc.d/rc.local

添加如下行

su oracle -lc "/opt/oracle/102/bin/lsnrctl start"
su oracle -lc /opt/oracle/102/bin/dbstart

其中第一行因为lsnrctl之后有空格,需要引号,第二行加不加引号都可以。修改完保存退出即可。

但是还有一个很重要的问题,如果是在以前的centos版本中,这样就可以了。但是centos7 的/etc/rc.local不会开机执行,于是认真看了下/etc/rc.local文件内容的就发现了问题的原因了

#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In constrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run ‘chmod +x /etc/rc.d/rc.local‘ to ensure
# that this script will be executed during boot.

翻译:

#这个文件是为了兼容性的问题而添加的。
#强烈建议创建自己的systemd服务或udev规则来在开机时运行脚本而不是使用这个文件。
#与以前的版本引导时的并行执行相比较,这个脚本将不会在其他所有的服务后执行。
#请记住,你必须执行“chmod +x /etc/rc.d/rc.local”来确保确保这个脚本在引导时执行。

于是我又确认了下/etc/rc.local的权限

[root@localhost ~]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 812 06:09 /etc/rc.local -> rc.d/rc.local
[root@localhost ~]# ll /etc/rc.d/rc.local
-rw-r--r--. 1 root root 477 610 13:35 /etc/rc.d/rc.local

发现原来/etc/rc.d/rc.local没有执行权限,于是按说明的内容执行

chmod +x /etc/rc.d/rc.local

重启后发现/etc/rc.local能够执行了。
然后使用如下命令查看数据库实例的启动情况。

$lnsrctl status
$ps -ef |grep ora_

分别查看监听和实例的运行情况。

到此,终于结束,基本上可以实现oracle的开机自启动。另外说明下,由于整理这篇文章时,已经距离我实际实验有一段时间了,可能有的地方漏了,不过一般网上都能找到资料。还有说明下本文章的内容,是结合网络上别人的资料和自己的实践整理的,很多地方都是别人的文章的内容,我只是把遇到的问题放在一起梳理了一下,仅供学习之用。感谢每一个乐于 共享知识的人。如有错误,请指正。

版权声明:本文为博主原创文章,未经博主允许不得转载。

CentOS7_86_64创建Oracle实例且设置开机自启以及允许远程连接

标签:centos7自启   oracle开机自启   开机自启动   设置oracle自启   

人气教程排行