Oracle

Oracle Linux 7 上的 Oracle Database 12c - 自動啟動,以 sysdba 身份啟用連接

  • August 20, 2018

根據文件,我已經在 Oracle Linux 7 上安裝了 12c 用於我的開發工作Oracle Database Installation Guide 12c Release 1 for Linux (E41491-10)。我以前管理 Oracle 數據庫的經驗是在我以前的工作場所使用 Novell Netware 上的版本 8 和 Windows x64 上的 10gR2。除了 Ubuntu 上的一些簡單服務外,我還沒有過多地使用 Linux。

這次我選擇在安裝時不創建數據庫,所以我必須執行 Oracle Database Configuration Assistant 來這樣做,因為我需要一些預設數據庫沒有的選項。我已經按照書本完成了所有工作,但遇到了**問題一:創建後未設置 ORACLE_HOME 或 ORACLE_BASE 環境變數。**我必須編輯 .bash_profile 來設置這些。

數據庫是在預設位置創建的,即/home/oracle/app/oracle/oradata/<SID>. 它已啟動並配置了偵聽器。完成數據庫創建後,我注意到問題二:我無法使用 sqlplus / AS SYSDBA 連接到 oracle 實例。我收到了ORA-12162: TNS:net service name is incorrectly specified. 如文件Oracle Database Error Messages 12c Release 1 (E49325-06)所述,我檢查了 TNSNAMES.ORA 是否在連接描述符中不包含任何錯誤,但它沒有。該文件的全部內容是(KITET 是我的實例名稱):

KITET = 
 (DESCRIPTION = 
   (ADDRESS = (PROTOCOL = TCP)(HOST = ORALINUX7VM)(PORT = 1521))
   (CONNECT_DATA = 
     (SERVER = SHARED)
     (SERVICE_NAME = Kitet)
   )
 )

我只通過指定連接sqlplus <user>/<password>@<service_name>

重新啟動我的虛擬機後,我注意到問題三:listener 和 oracle do not start automatically。我可以使用 啟動監聽器lsnrctl start,但無法啟動數據庫(無法使用 連接/ AS SYSDBA)。我想我可以通過使用 service_name 指定連接字元串來連接,但我收到了ORA-12505: TNS:listener does not currently know of SID given in connect descriptor.

在網上到處找了找,發現通過導出 ORACLE_SID 可以緩解“無法啟動”的問題,所以我通過編輯(再次)做到了這一點~/.bash_profile

我還需要做什麼

在 Oracle Linux 7 上,我需要在啟動時自動啟動偵聽器和數據庫。當然,我擁有一份文件Oracle Linux Administrator's Guide for Release 7 (E54669),但沒有關於如何為 Oracle 數據庫和偵聽器創建啟動腳本的資訊。只有關於啟動和停止現有服務的資訊。當然,每次開機時我都無法登錄我的虛擬機盒和啟動服務。

請協助。

根據我自己的研究、Google搜尋結果和 ansible 的回答,我能夠為 Oracle Linux 7 提供完整的解決方案。每次閱讀時Kitet- 這是我的 Oracle 實例 SID。

啟動或停止數據庫,dbstart分別dbshut使用腳本。它們位於$ORACLE_HOME/bin. 它們都需要一個參數,即$ORACLE_HOME. 如果沒有$ORACLE_HOME環境變數,首先需要通過執行來設置它(以及更多)

. /usr/local/bin/oraenv

(注意前一段,不是$ORACLE_HOME/bin/oraenv)。Oraenv 腳本將要求提供一個 SID,這是設置正確的 $ORACLE_BASE 所必需的。有了這個,簡單地使用

dbstart $ORACLE_HOME

要麼

dbshut $ORACLE_HOME

將啟動和停止監聽器和數據庫。

要使用 啟動監聽器lsnrctl或使用 啟動 SQL*Plus sqlplus / as sysdba,還需要預先執行. oraenv,除非使用者想手動設置一些環境變數。如果我們的 linux 機器只有一個實例,則有可能. oraenv通過編輯使用者的 bash 配置文件來自動執行。進入

nano ~/.bash_profile

並鍵入以下行(根據 ,此文件中可能已經有umask 022條目Oracle Database Installation Guide 12c Release 1 for Linux E41491-10):

export ORACLE_SID=Kitet
export ORAENV_ASK=NO
. /usr/local/bin/oraenv
export NLS_LANG=POLISH_POLAND.AL32UTF8
unicode_start

第一行和第三行是不言自明的。第二行將oraenv不詢問數據庫 SID 並使用導出的變數。第 4 行是可選的,它將設置您對客戶端連接的語言偏好(例如 SQL*Plus 或 lsnrctl 將使用您的母語,如果可用)。第五行是控制台顯示重音字元所必需的,也是可選的。

自動啟動和關閉偵聽器和數據庫

  1. 創建實例後,編輯/etc/oratab文件,將每個實例的重啟標誌設置為“Y”。我的線路如下:
Kitet:/home/oracle/app/oracle/product/12.1.0/dbhome_1:Y
  1. 接下來,創建一個名為/etc/init.d/dboraroot 使用者的文件,其中包含以下內容:
#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the 
# Oracle database in ORA_HOME.

# path to oracle home (needed only to check if dbstart exists)
ORA_HOME=/home/oracle/app/oracle/product/12.1.0/dbhome_1
# this is the user who installed oracle
ORA_OWNER=oracle

if [ ! -f $ORA_HOME/bin/dbstart ]
then
   echo "Oracle startup: cannot start"
   exit
fi

case "$1" in
   'start')
       # Start the Oracle database and listener:
       # Remove "&" if you don't want startup as a background process.
       export ORACLE_SID=Kitet
       export ORAENV_ASK=NO
       . /usr/local/bin/oraenv
       # at this point we have $ORACLE_HOME env variable set
       su $ORA_OWNER -c "dbstart $ORACLE_HOME" &
       touch /var/lock/subsys/dbora
       ;;
   'stop')
       # Stop the Oracle database and listener:
       export ORACLE_SID=Kitet
       export ORAENV_ASK=NO
       . /usr/local/bin/oraenv
       su $ORA_OWNER -c "dbshut $ORACLE_HOME"
       rm -f /var/lock/subsys/dbora
       ;;
esac
  1. 使用 chmod 命令將權限設置為 750:
chmod 750 /etc/init.d/dbora
  1. 將 dbora 服務與適當的執行級別相關聯,並使用以下命令將其設置為自動啟動:
chkconfig --add dbora

就這樣。dbstart並應在和dbshut寫入各自的日誌。還有。在那裡我們可以驗證實例和偵聽器是否以及如何啟動和停止。我們還可以使用or查看 listener / oracle 是否正在執行。$ORACLE_HOME/startup.log``$ORACLE_HOME/shutdown.log``$ORACLE_HOME/listener.log``ps -ax | grep ora``ps -ax | grep lsnr

我如何為展示和開發啟用 Oracle 數據庫的自動啟動


以下是我在 Oracle Linux 5 和 6 啟動期間啟用 Oracle 數據庫企業版 10g、11g 或 12c 自動啟動的步驟。我還將這些步驟用於 Oracle Linux 7。這些步驟對於各種展示很有用和我通常需要的開發設置。

Oracle XE 不需要這些步驟,因為它的安裝會提示是否自動啟動數據庫並自動配置系統。

創建一個新的服務腳本使用帶有內容的 dbora 創建一個文件 /etc/init.d/dbora

#!/bin/sh -x
#
# chkconfig: 2345 80 05
# 描述:在 Oracle Linux 5 和 6 上啟動和停止 Oracle 數據庫企業版
#

# 在 /etc/oratab 中,將自動啟動欄位從 N 更改為 Y
# 要自動啟動的數據庫。
#
# 將此文件創建為 /etc/init.d/dbora 並執行:
# chmod 750 /etc/init.d/dbora
# chkconfig --add dbora
# chkconfig dbora on

# 注意:更改 ORACLE_HOME 的值以指定正確的 Oracle 主目錄
# 安裝目錄。
# ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1
ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1

#
# 注意:將ORACLE的值改為oracle所有者的登錄名
甲骨文=甲骨文

PATH=${PATH}:$ORACLE_HOME/bin
主機=`主機名`
平台=`uname`
導出 ORACLE_HOME 路徑

案例 1 美元
'開始')
echo -n $"正在啟動 Oracle:"
su $ORACLE -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME" &
;;
'停止')
echo -n $"正在關閉 Oracle:"
su $ORACLE -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME" &
;;
'重新開始')
echo -n $"正在關閉 Oracle:"
su $ORACLE -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME" &
睡覺 5
echo -n $"正在啟動 Oracle:"
su $ORACLE -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME" &
;;
*)
echo "用法:$0 {start|stop|restart}"
出口
;;
經社理事會

出口

設置腳本的權限

# chmod 750 /etc/init.d/dbora

告訴 Linux 自動啟動/停止服務 在 Oracle Linux 5 和 6 上執行:

# chkconfig --add dbora
# chkconfig dbora on

在 Oracle Linux 7 上執行:

# systemctl enable dbora

編輯 /etc/oratab 在 /etc/oratab 中,將要自動啟動的任何數據庫的自動啟動欄位從 N 更改為 Y。

啟動/停止 DB DB 將在機器啟動和關閉時啟動和停止。

或者可以通過以下方式手動控制:

  • 在 Oracle Linux 5 和 6 上使用:
# service dbora start

# service dbora stop
  • 在 Oracle Linux 7 上,使用:
# systemctl start dbora

# systemctl stop dbora

啟動 Oracle Database 12c 多租戶 PDB 要在容器數據庫啟動時同時啟動所有可插拔數據庫,請在 SQL*Plus 中以 SYSDBA 身份執行:

創建或替換觸發器 sys.after_startup
在數據庫啟動後
開始
立即執行'alter pluggable database all open';
結束後啟動;
/

請參閱:如何啟用 Oracle 數據庫的自動啟動以進行展示和開發

引用自:https://dba.stackexchange.com/questions/82260