oracle开机默认启动网卡,CentOS7_86_64创建Oracle实例且设置开机自启以及允许远程连接...

一、前言

先说明下,这里系统是CentOS7_86_64,Oracle版本是Oracle10g R2,假设系统和数据库都已安装完毕。前面有一篇文章详细说明了CentOS7下安装Oracle10g的流程,需要的同学可以去看一下。传送门:CentOS7_86_64安装Oracle10g R2血泪史。

二、检查/设置系统防火墙

说明:这里主要是为了设置oracle允许远程连接,如果没有这个需求,可以先不用管。

1、客户端检测网络通过性

此步骤不执行也可以,如果没条件检测的话。这里只是说明下网络是否正常,与后面的防火墙配置没有绝对的关系。

一般如果客户端

ping 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 , 如下图

20150727093413415.png

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

首先:

#vi /etc/sysconfig/iptables

加入:

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

20150727093414416.jpg

保存后退出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为testsid

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

查看之前的监听和网路配置。

20150727093414417.jpg

20150727093414418.jpg

四、启动本地数据库实例

还是使用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不会有错,如果有的话,同理解决。

五、远程连接Linux服务器上的Oracle实例

前面我们基础工作已经完成,接下来就可以测试远程连接了。这里的测试场景为plsql客户端连接远程linux服务器。客户端所在环境为windows7,服务器环境为centos7,连接数据库实例test,实例的sid是testsid。

1、oracle客户端配置

因为plsql客户端通过tns连接数据库服务器,在客户端需要安装oracle客户端。具体安装过程不说了,不会的去网上找,比较简单。安装完成之后,需要配置。

在客户端安装路径的network/admin下,即

D:oracleproduct10.2.0client_1NETWORKADMIN

有几个比较重要的文件,分别是sqlnet.ora,tnsnames.ora,listener.ora。

这是plsq客户端比较关键的配置文件。这里有几个建议,

(1)将linux服务器上的tnsnames.ora直接拷贝到此处。比手动编写要靠谱些,避免一些错误。当然也可以用客户端的net Configuration Assistant来配置。

(2)将linux服务器上的sqlnet.ora直接拷贝到此处。

(3)使用Net Congratulation Assistant配置监听,配置完之后,会生成新的listener.ora文件。这个不用动。

2、plsql客户端配置

打开plsql客户端,登录窗口点击cancel,直接进入。点击Tools-Preferences,打开配置选项卡,在第一项Connection中,将Oracle客户端路径

D:oracleproduct10.2.0client_1instantclient

拷贝到Oracle Home处,之后在下方的OCI library应该会显示成

D:oracleproduct10.2.0client_1binoci.dll

点击Apply应用配置,到此配置就结束了。

然后再打开plsql,选择身份和数据库实例,输入用户名和密码,就可以访问了。

到这里,我们已经创建了一个数据库实例,并且启动服务,而且设置了远程可连接,也就是说,我们的数据库服务器已经可用了。但还有个问题就是,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 8月 12 06:09 /etc/rc.local -> rc.d/rc.local

[root@localhost ~]# ll /etc/rc.d/rc.local

-rw-r--r--. 1 root root 477 6月 10 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的开机自启动。另外说明下,由于整理这篇文章时,已经距离我实际实验有一段时间了,可能有的地方漏了,不过一般网上都能找到资料。还有说明下本文章的内容,是结合网络上别人的资料和自己的实践整理的,很多地方都是别人的文章的内容,我只是把遇到的问题放在一起梳理了一下,仅供学习之用。感谢每一个乐于 共享知识的人。如有错误,请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值