Oracle Linux 7 上的 Oracle Database 12c - 自動啟動,以 sysdba 身份啟用連接
根據文件,我已經在 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*Plussqlplus / 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 將使用您的母語,如果可用)。第五行是控制台顯示重音字元所必需的,也是可選的。自動啟動和關閉偵聽器和數據庫
- 創建實例後,編輯
/etc/oratab
文件,將每個實例的重啟標誌設置為“Y”。我的線路如下:Kitet:/home/oracle/app/oracle/product/12.1.0/dbhome_1:Y
- 接下來,創建一個名為
/etc/init.d/dbora
root 使用者的文件,其中包含以下內容:#!/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
- 使用 chmod 命令將權限設置為 750:
chmod 750 /etc/init.d/dbora
- 將 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'; 結束後啟動; /