
OSを起動・再起動するたびにOracleインスタンスが停止してしまうと、毎回sqlplus / as sysdbaからstartupを打つのが手間です。
[oracle@learnbytebybyte ~]$ sqlplus / as sysdba
SQL*Plus: Release 23.26.1.0.0 - Production on 月 2月 2 21:49:54 2026
Version 23.26.1.0.0
Copyright (c) 1982, 2025, Oracle. All rights reserved.
アイドル・インスタンスに接続しました。
SQL> startup
ORACLEインスタンスが起動しました。
Total System Global Area 3218317872 bytes
Fixed Size 5014064 bytes
Variable Size 721420288 bytes
Database Buffers 2483027968 bytes
Redo Buffers 8855552 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL>本記事では、Oracle公式ドキュメントに記載されているoratabとdbstart/dbshutを活用したOracleインスタンスの起動・停止の自動化設定を解説します。
oratabファイルの設定
oratabは、Linux/UnixのOracle AI Database環境において、インスタンス名(SID)とOracle実行ファイル(ORACLE_HOME)、スクリプトの実行可否を管理します。
[oracle@learnbytebybyte ~]$ cat /etc/oratab
<省略>
orcl:/u01/app/oracle/product/26.0.0/dbhome_1:Nこの先、dbstart/dbshutスクリプトを活用するため、3つ目のフィールドをNからYに変更する必要があります。
下記は、実際に3つ目のフィールドがNとYでdbstart/dbshutスクリプトの実行の有無を確認します。
[oracle@learnbytebybyte ~]$ cat /etc/oratab
<省略>
orcl:/u01/app/oracle/product/26.0.0/dbhome_1:N
[oracle@learnbytebybyte ~]$ # Nはスクリプトが実行されていない
[oracle@learnbytebybyte ~]$ $ORACLE_HOME/bin/dbstart $ORACLE_HOME
[oracle@learnbytebybyte ~]$ sqlplus / as sysdba
SQL*Plus: Release 23.26.1.0.0 - Production on 月 2月 2 22:26:41 2026
Version 23.26.1.0.0
Copyright (c) 1982, 2025, Oracle. All rights reserved.
アイドル・インスタンスに接続しました。
SQL>exit
切断しました。[oracle@learnbytebybyte ~]$ vi /etc/oratab
[oracle@learnbytebybyte ~]$ cat /etc/oratab
<省略>
orcl:/u01/app/oracle/product/26.0.0/dbhome_1:Y # NからYに変更
[oracle@learnbytebybyte ~]$ # Yはスクリプトが実行された
[oracle@learnbytebybyte ~]$ $ORACLE_HOME/bin/dbstart $ORACLE_HOME
Processing Database instance "orcl": log file /u01/app/oracle/product/26.0.0/dbhome_1/rdbms/log/startup.log
[oracle@learnbytebybyte ~]$ sqlplus / as sysdba
SQL*Plus: Release 23.26.1.0.0 - Production on 月 2月 2 22:28:27 2026
Version 23.26.1.0.0
Copyright (c) 1982, 2025, Oracle. All rights reserved.
Oracle AI Database 26ai Enterprise Edition Release 23.26.1.0.0 - Production
Version 23.26.1.0.0
に接続されました。
SQL> /etc/init.d/dboraを新規作成
次に、LinuxOSの起動・停止のタイミングでdbstart/dbshutを呼ぶためのスクリプトdboraを作ります。
#! /bin/sh
# 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 ORACLE_HOME.
ORA_HOME=/u01/app/oracle/product/26.0.0/dbhome_1 #Oracleの実行ファイルパス(ORACLE_HOME)を記載
ORA_OWNER=oracle #Oracleのインストールユーザを記載
case "$1" in
'start')
# Start the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
# Remove "&" if you don't want startup as a background process.
su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME" &
touch /var/lock/subsys/dbora
;;
'stop')
# Stop the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME" &
rm -f /var/lock/subsys/dbora
;;
esac権限の再定義
dboraのグループをOSDBA(通常dba)にし、権限を750に変更します。
大きく意味はないと思われますが、dbaグループのメンバーがスクリプトファイルを確認・実行できるようにします。
[root@learnbytebybyte ~]# chgrp dba /etc/init.d/dbora
[root@learnbytebybyte ~]# chmod 750 /etc/init.d/dbora
[root@learnbytebybyte ~]# ls -la /etc/init.d/dbora
-rwxr-x---. 1 root dba 896 2月 2 22:35 /etc/init.d/dboraシンボリックを作成
SysVinitがOS起動・停止のランレベル(0か3、5)に合わせて、rcディレクトリにあるリンクをたどって起動・停止を実行します。
参照先は同じファイルになりますが、シンボリック名がSはstart、Kはstopを第1引数としてdboraが実行されます。
また、01や99は当該フォルダ内で順番に実行する順番を表しています。
[root@learnbytebybyte ~]# ln -s /etc/init.d/dbora /etc/rc.d/rc0.d/K01dbora
[root@learnbytebybyte ~]# ln -s /etc/init.d/dbora /etc/rc.d/rc3.d/S99dbora
[root@learnbytebybyte ~]# ln -s /etc/init.d/dbora /etc/rc.d/rc5.d/S99dbora
[root@learnbytebybyte ~]# ls -la /etc/rc0.d/K01dbora
lrwxrwxrwx. 1 root root 17 2月 2 22:41 /etc/rc0.d/K01dbora -> /etc/init.d/dbora
[root@learnbytebybyte ~]# ls -la /etc/rc3.d/S99dbora
lrwxrwxrwx. 1 root root 17 2月 2 22:39 /etc/rc3.d/S99dbora -> /etc/init.d/dbora
[root@learnbytebybyte ~]# ls -la /etc/rc5.d/S99dbora
lrwxrwxrwx. 1 root root 17 2月 2 22:40 /etc/rc5.d/S99dbora -> /etc/init.d/dbora【ハマりどころ】SELinuxのラベル変更
SELinuxが有効化されている場合は、上記の設定だけでは自動起動・停止がされないことがあります。
[oracle@learnbytebybyte ~]$ sqlplus / as sysdba
SQL*Plus: Release 23.26.1.0.0 - Production on 月 2月 2 23:40:10 2026
Version 23.26.1.0.0
Copyright (c) 1982, 2025, Oracle. All rights reserved.
アイドル・インスタンスに接続しました。
SQL> startupsystemctl status dboraで確認した時、起動ログに以下が出力されました。
[root@learnbytebybyte ~]# systemctl daemon-reload
[root@learnbytebybyte ~]# systemctl status dbora
● dbora.service - SYSV: Oracle auto start-stop script.
Loaded: loaded (/etc/rc.d/init.d/dbora; generated)
Active: active (exited) since Mon 2026-02-02 23:46:28 JST; 14min ago
Docs: man:systemd-sysv-generator(8)
CPU: 75ms
2月 02 23:46:27 learnbytebybyte systemd[1]: Starting SYSV: Oracle auto start-stop script....
2月 02 23:46:27 learnbytebybyte dbora[893]: /etc/rc.d/init.d/dbora: 行 19: /usr/bin/su: 許可がありません
2月 02 23:46:28 learnbytebybyte systemd[1]: Started SYSV: Oracle auto start-stop script..SELinuxは、/etc/init.d/dboraのスクリプトに適切なラベルが付いていないと判断されたため、su実行を許否している可能性があります。
[root@learnbytebybyte ~]# ls -laZ /usr/bin/su
-rwsr-xr-x. 1 root root system_u:object_r:su_exec_t:s0 56944 3月 10 2025 /usr/bin/su
[root@learnbytebybyte ~]# ls -laZ /etc/init.d/dbora
-rwxr-x---. 1 root dba unconfined_u:object_r:etc_t:s0 896 2月 2 23:47 /etc/init.d/dboramatchpathcon,restoreconで本来付くべきラベルを確認し、ラベルの設定を行います。
[root@learnbytebybyte ~]#
[root@learnbytebybyte ~]# matchpathcon /etc/init.d/dbora
/etc/init.d/dbora system_u:object_r:initrc_exec_t:s0
[root@learnbytebybyte ~]# restorecon -v /etc/init.d/dbora
[root@learnbytebybyte ~]# ls -laZ /etc/init.d/dbora
-rwxr-x---. 1 root dba unconfined_u:object_r:initrc_exec_t:s0 896 2月 2 23:27 /etc/init.d/dboraまとめ
Oracle公式ドキュメントに記載されているoratabとdbstart/dbshutを活用したOracleインスタンスの起動・停止の自動化設定を解説しました。
- oratabファイルの設定
- /etc/init.d/dboraを新規作成
- 権限の再定義
- シンボリックを作成
- 【ハマりどころ】SELinuxのラベル変更
最後までご愛読ありがとうございました。
