程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> CentOS7_86_64創建Oracle實例且設置開機自啟以及允許遠程連接

CentOS7_86_64創建Oracle實例且設置開機自啟以及允許遠程連接

編輯: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 , 如下圖
這裡寫圖片描述

可以看到,真的只有寥寥幾個端口被允許連接.所以讓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為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 

查看之前的監聽和網路配置。
這裡寫圖片描述

這裡寫圖片描述

四、啟動本地數據庫實例

還是使用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:\oracle\product\10.2.0\client_1\NETWORK\ADMIN

有幾個比較重要的文件,分別是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:\oracle\product\10.2.0\client_1\instantclient

拷貝到Oracle Home處,之後在下方的OCI library應該會顯示成

D:\oracle\product\10.2.0\client_1\bin\oci.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的開機自啟動。另外說明下,由於整理這篇文章時,已經距離我實際實驗有一段時間了,可能有的地方漏了,不過一般網上都能找到資料。還有說明下本文章的內容,是結合網絡上別人的資料和自己的實踐整理的,很多地方都是別人的文章的內容,我只是把遇到的問題放在一起梳理了一下,僅供學習之用。感謝每一個樂於 共享知識的人。如有錯誤,請指正。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved