Oracle Restart環境下的開機啟動指令碼
Linux 7環境,假設已安裝GI,已基於ASM建立資料庫。我們來看一下資料庫是如何自動啟動的。
Linux 7使用systemd管理服務,systemd 是系統啟動後的第一個程式:
$ ps --pid 1
PID TTY TIME CMD
1 ? 00:00:01 systemd
Oracle Restart的概念是作業系統包含OHAS,OHAS包含其他資源,如ASM,資料庫等。
在服務中我們找到了ohas(–type表示只列出服務,–all表示不論狀態):
$ systemctl list-units --type service --all|grep ohas
UNIT LOAD ACTIVE SUB DESCRIPTION
ohasd.service loaded active exited LSB: Start and Stop Oracle High Availability Service
oracle-ohasd.service loaded active running Oracle High Availability Services
啟動指令碼中連結到了ohas指令碼:
$ ll /etc/rc3.d/S96ohasd
lrwxrwxrwx. 1 root root 17 Sep 9 01:37 /etc/rc3.d/S96ohasd -> /etc/init.d/ohasd
這兩個服務狀態都是active的,但子狀態有一個是exited:
$ systemctl is-active oracle-ohasd.service
active
$ systemctl is-active ohasd.service
active
看一下此兩服務的狀態:
$ systemctl status ohasd.service
● ohasd.service - LSB: Start and Stop Oracle High Availability Service
Loaded: loaded (/etc/rc.d/init.d/ohasd; bad; vendor preset: disabled)
Active: active (exited) since Tue 2019-09-10 00:41:44 UTC; 58min ago
Docs: man:systemd-sysv-generator(8)
Process: 1265 ExecStart=/etc/rc.d/init.d/ohasd start (code=exited, status=0/SUCCESS)
$ systemctl status oracle-ohasd.service
● oracle-ohasd.service - Oracle High Availability Services
Loaded: loaded (/etc/systemd/system/oracle-ohasd.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2019-09-10 00:41:43 UTC; 58min ago
Main PID: 1262 (init.ohasd)
CGroup: /system.slice/oracle-ohasd.service
├─1262 /bin/sh /etc/init.d/init.ohasd run >/dev/null 2>&1 </dev/null
├─1334 /u01/app/19.0.0/grid/bin/ohasd.bin reboot
├─2540 /u01/app/19.0.0/grid/bin/oraagent.bin
├─2646 /u01/app/19.0.0/grid/bin/tnslsnr LISTENER -no_crs_notify -inherit
├─2666 /u01/app/19.0.0/grid/bin/evmd.bin
├─3022 /u01/app/19.0.0/grid/bin/evmlogger.bin -o /u01/app/19.0.0/grid/log/[HOSTNAME]/evmd/evmlogger.info -l /u01/app/19.0.0/grid/log/[HOSTNAME]/...
├─3083 /u01/app/19.0.0/grid/bin/cssdagent
├─3199 /u01/app/19.0.0/grid/bin/ocssd.bin
├─4599 asm_pmon_+ASM
├─4601 asm_clmn_+ASM
├─4603 asm_psp0_+ASM
├─4606 asm_vktm_+ASM
├─4610 asm_gen0_+ASM
├─4612 asm_mman_+ASM
├─4616 asm_gen1_+ASM
├─4619 asm_diag_+ASM
├─4621 asm_pman_+ASM
├─4623 asm_dia0_+ASM
├─4625 asm_dbw0_+ASM
├─4627 asm_lgwr_+ASM
├─4629 asm_ckpt_+ASM
├─4631 asm_smon_+ASM
├─4633 asm_lreg_+ASM
├─4635 asm_pxmn_+ASM
├─4637 asm_rbal_+ASM
├─4639 asm_gmon_+ASM
├─4641 asm_mmon_+ASM
├─4643 asm_mmnl_+ASM
├─4705 oracle+ASM (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
└─4706 oracle+ASM (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
ohasd.service負責啟動ohas服務,已經退出。
oracle-ohasd.service正在執行,是實際的服務守護程式。
看一下這兩個服務執行的命令:
$ systemctl show oracle-ohasd.service|grep Exec
ExecMainStartTimestamp=Tue 2019-09-10 00:41:43 UTC
ExecMainStartTimestampMonotonic=11457980
ExecMainExitTimestampMonotonic=0
ExecMainPID=1262
ExecMainCode=0
ExecMainStatus=0
ExecStart={ path=/etc/init.d/init.ohasd ; argv[]=/etc/init.d/init.ohasd run >/dev/null 2>&1 </dev/null ; ignore_errors=no ; start_time=[Tue 2019-09-10 00:41:43 UTC] ; stop_time=[n/a] ; pid=1262 ; code=(null) ; status=0/0 }
ExecStop={ path=/etc/init.d/init.ohasd ; argv[]=/etc/init.d/init.ohasd stop >/dev/null 2>&1 </dev/null ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }
$ systemctl show ohasd.service|grep Exec
ExecMainStartTimestampMonotonic=0
ExecMainExitTimestampMonotonic=0
ExecMainPID=0
ExecMainCode=0
ExecMainStatus=0
ExecStart={ path=/etc/rc.d/init.d/ohasd ; argv[]=/etc/rc.d/init.d/ohasd start ; ignore_errors=no ; start_time=[Tue 2019-09-10 00:41:43 UTC] ; stop_time=[Tue 2019-09-10 00:41:44 UTC] ; pid=1265 ; code=exited ; status=0 }
ExecStop={ path=/etc/rc.d/init.d/ohasd ; argv[]=/etc/rc.d/init.d/ohasd stop ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }
檢視一下上面輸出中的ExecMainPID:
$ ps p 1262
PID TTY STAT TIME COMMAND
1262 ? Ss 0:00 /bin/sh /etc/init.d/init.ohasd run >/dev/null 2>&1 </dev/null
我們注意到,有兩個關鍵的指令碼,ohasd和init.ohasd,在/etc/init.d和/etc/rc.d/init.d下都有,互為hard link,因為inode相同:
$ ls -l /etc/init.d/*ohas*
-rwxr-x---. 1 root root 15119 Sep 9 01:37 /etc/init.d/init.ohasd
-rwxr-x---. 1 root root 7791 Sep 9 01:37 /etc/init.d/ohasd
$ ls -l /etc/rc.d/init.d/*ohas*
-rwxr-x---. 1 root root 15119 Sep 9 01:37 /etc/rc.d/init.d/init.ohasd
-rwxr-x---. 1 root root 7791 Sep 9 01:37 /etc/rc.d/init.d/ohasd
$ ls -i /etc/init.d/ohasd /etc/rc.d/init.d/ohasd
83447865 /etc/init.d/ohasd 83447865 /etc/rc.d/init.d/ohasd
ohasd雖然有300多行,但核心就一句話,啟動ohas服務:
$ grep "crsctl start" ohasd
log_console "Fix the problem and issue command 'crsctl start has' as $HAS_USER user to start Oracle Grid Infrastructure."
my_crsctl start has -nowait
再來看iint.ohasd,有500多行。他的一個作用是監控ohas的狀態,並在錯誤時重啟。
看一下關於has的程式,init.ohasd是root執行的,而ohasd.bin是GI使用者執行的,可能是實際的has服務程式:
$ ps -ef|grep ohas
root 1262 1 0 00:41 ? 00:00:00 /bin/sh /etc/init.d/init.ohasd run >/dev/null 2>&1 </dev/null
grid 1334 1 0 00:41 ? 00:00:40 /u01/app/19.0.0/grid/bin/ohasd.bin reboot
grid 10586 4880 0 02:25 pts/0 00:00:00 grep --color=auto ohas
最後再來說一下dbstart和dbshut,可用來啟停資料庫:
$ which dbstart dbshut
/u01/app/19.0.0/grid/bin/dbstart
/u01/app/19.0.0/grid/bin/dbshut
其它
參考
https://oracle-base.com/articles/linux/automating-database-startup-and-shutdown-on-linux
https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units
https://unix.stackexchange.com/questions/396630/the-proper-way-to-test-if-a-service-is-running-in-a-script
https://orainternals.wordpress.com/2013/06/05/clusterware-startup/
https://zhuanlan.zhihu.com/p/54221584
About Me
........................................................................................................................ ● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除 ● 本文在個人微 信公眾號( DB寶)上有同步更新 ● QQ群號: 230161599 、618766405,微信群私聊 ● 個人QQ號(646634621),微 訊號(db_bao),註明新增緣由 ● 於 2020年6月 在西安完成 ● 最新修改時間:2020年6月 ● 版權所有,歡迎分享本文,轉載請保留出處 ........................................................................................................................ ● 小麥苗的微店: https://weidian.com/s/793741433?wfr=c&ifr=shopdetail ● 小麥苗出版的資料庫類叢書: http://blog.itpub.net/26736162/viewspace-2142121/ ● 小麥苗OCP、OCM、高可用、DBA學習班: http://blog.itpub.net/26736162/viewspace-2148098/ ● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/ ........................................................................................................................ 請掃描下面的二維碼來關注小麥苗的微 信公眾號( DB寶)及QQ群(230161599、618766405)、新增小麥苗微 信(db_bao), 學習最實用的資料庫技術。
........................................................................................................................ |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2700907/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 4.2.12 在 Oracle Restart Environment 環境中啟用 FAN 事件OracleREST事件
- Rabbitmq 開機啟動指令碼MQ指令碼
- 前後分離,快速開啟 PhpStorm 專案和啟動測試環境的指令碼PHPORM指令碼
- MYSQL Slave開機啟動指令碼MySql指令碼
- 4.3 Oracle Restart元件實現oracle啟動和停止OracleREST元件
- 4.1.4 關於啟動和停止Oracle RestartOracleREST
- Linux 新增指令碼開機自啟動Linux指令碼
- Ubuntu 設定開機自啟動指令碼Ubuntu指令碼
- Windows環境PgSql自動備份指令碼WindowsSQL指令碼
- ubuntu-18.04 設定開機啟動指令碼Ubuntu指令碼
- ubuntu14 設定開機啟動指令碼Ubuntu指令碼
- linux設定開機自啟動指令碼的最佳方式Linux指令碼
- Oracle RAC 環境 引數檔案的啟動順序Oracle
- 設定msyqlphp-fpm開機自動啟動指令碼PHP指令碼
- Oracle RAC 環境下的連線管理Oracle
- 4.4 停止和重新啟動Oracle Restart進行維護操作OracleREST
- oracle配置開機自啟動Oracle
- restart oracle streamRESTOracle
- Mac環境下MySQL無法啟動的處理方法MacMySql
- Oracle ADG環境下的RMAN備份策略Oracle
- 【ARCH】留存,Oracle11g之前Dataguard環境刪除歸檔指令碼Oracle指令碼
- OracleLinux上的Oracle開關機自啟動OracleLinux
- linux下expect環境安裝以及簡單指令碼測試Linux指令碼
- Windows環境啟動RocketMQWindowsMQ
- Linux配置開機自啟動執行指令碼方法有哪些?Linux指令碼
- httpd啟動指令碼httpd指令碼
- 4.1.3 使用 Oracle Restart 元件啟停資料庫OracleREST元件資料庫
- vue 構建環境切換指令碼Vue指令碼
- Windows下hadoop環境搭建之NameNode啟動報錯WindowsHadoop
- 4.1.1 Oracle Restart概述OracleREST
- hyperf 服務管理指令碼 start、restart、stop、status指令碼REST
- Linux中配置開機自啟動執行指令碼的方法是什麼?Linux指令碼
- linux7 開機自啟動oracleLinuxOracle
- Oracle:GRID 下 root.sh 指令碼Oracle指令碼
- 關於Solidity指令碼相關環境配置及指令碼資料的查詢Solid指令碼
- python下多環境開發(虛擬環境)Python
- ubuntu環境下搭建以太坊開發環境Ubuntu開發環境
- 【OEM】Oracle oem取消開機自動啟動(linux)OracleLinux