通过设置 Systemd unit 实现数据库开机自启。
首先需要修改 /etc/oratab:

1
ORCLCDB:/opt/oracle/product/19c/dbhome_1:Y

设置为 Y 意味着可以使用 dbstart 脚本来启动数据库。
随后通过使用 dbstart 和 dbshut 脚本测试能否启动数据库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[oracle@oel7-3 ~]$ $ORACLE_HOME/bin/dbstart $ORACLE_HOME
Processing Database instance "ORCLCDB": log file /opt/oracle/product/19c/dbhome_1/rdbms/log/startup.log
[oracle@oel7-3 ~]$ cat /opt/oracle/product/19c/dbhome_1/rdbms/log/startup.log

/opt/oracle/product/19c/dbhome_1/bin/dbstart: Starting up database "ORCLCDB"
Thu Jan 9 10:10:37 CST 2025

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jan 9 10:10:37 2025
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle. All rights reserved.

SQL> Connected to an idle instance.
SQL> ORACLE instance started.

Total System Global Area 1660941720 bytes
Fixed Size 9135512 bytes
Variable Size 989855744 bytes
Database Buffers 654311424 bytes
Redo Buffers 7639040 bytes
Database mounted.
Database opened.
SQL> Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

/opt/oracle/product/19c/dbhome_1/bin/dbstart: Database instance "ORCLCDB" warm started.

[oracle@oel7-3 ~]$ $ORACLE_HOME/bin/dbshut $ORACLE_HOME
Processing Database instance "ORCLCDB": log file /opt/oracle/product/19c/dbhome_1/rdbms/log/shutdown.log
[oracle@oel7-3 ~]$ cat /opt/oracle/product/19c/dbhome_1/rdbms/log/shutdown.log

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jan 9 10:11:09 2025
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle. All rights reserved.

SQL> Connected.
SQL> Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Database instance "ORCLCDB" shut down.

通过日志可以看到数据库实例可以正常的启动和停止,接下来编写 Systemd Unit 文件。
创建 /etc/systemd/system/oracle19c.service 单元文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# /etc/systemd/system/oracle19c.service
[Unit]
Description=Oracle 19C
After=syslog.target network.target

[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535
Type=oneshot
RemainAfterExit=yes
User=oracle
ExecStart=/opt/oracle/product/19c/dbhome_1/bin/dbstart /opt/oracle/product/19c/dbhome_1
ExecStop=/opt/oracle/product/19c/dbhome_1/bin/dbshut /opt/oracle/product/19c/dbhome_1

[Install]
WantedBy=multi-user.target

修改了 Systemd 单元文件需要 reload:

1
systemctl daemon-reload

设置为开启自启:

1
systemctl enable --now oracle19c.service