oracle创建数据库实例与监听
文章目录
Oracle19c 为用户提供了多种方式来管理和维护数据库环境。本篇文章将介绍如何在Oracle 19c中单独创建数据库实例和配置数据库监听器,并探讨如何设置监听器以确保其随系统启动而自动运行。
1. 创建数据库实例
1.1 图形化创建数据库实例
通过图形化界面创建Oracle 19c数据库实例,可以使用Database Configuration Assistant (DBCA)工具。这是一种非常直观的方法,适合大多数用户。
- 进入图像化桌面调出中断输入启动命令。
[oracle@oracle ~]$ dbca
这里也可以使用dbca命令的绝对路径,这里可以直接使用dbca命令是因为之前设置了相应的环境变量。
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1 export ORACLE_BASE=/u01/app/oracle export PATH=$PATH:$ORACLE_HOME/bin

- 选择数据库创建模式。
这里提供两种创建模式。选择典型配置(Typical configuration)的话,会根据默认信息生成数据库,对新人比较友好,有特殊需求的话,可以使用高级配置(Advanced configuration)进行设置。

- 选择要创建的数据库类型。
创建数据库类型提供的单实例数据库、RAC 集群数据库以及 RAC 单节点数据库三种方式,各自具有特点、适用场景和创建要点。
- 单实例数据库具有较高的独立性和隔离性。在安装、配置和日常管理方面相对简单,适合规模较小、业务逻辑相对简单、并发访问量不高的应用场景。
- RAC 集群数据库使多个数据库实例同时运行在多个节点上,形成一个集群,保证数据库的连续性和可用性。能够充分利用集群的资源,提高系统的整体性能。适合大型企业关键应用以及大规模数据处理应用。
- RAC 单节点数据库本质上是 RAC 集群的一种特殊形式,既有 RAC 集群的部分架构和功能,如使用 Oracle Grid Infrastructure 进行管理,又只有一个节点在运行数据库实例,在一定程度上保留了单实例数据库的简单性。虽然当前只有一个节点,但为未来的扩展预留了空间,可以方便地添加节点扩展为真正的 RAC 集群。适合业务处于起步阶段,数据量和并发量相对较小,但考虑到未来业务的快速发展,希望提前搭建一个具有扩展性的数据库架构,以便在需要时能够快速扩展的情况。
用户选择数据库模板:用户仓库(Data warehouse)、自定义数据库(Custom Database)、通用或事务处理(General Purpose or Transaction Processing)三种模板。
- 数据仓库:更倾向于数据分析与决策支持。对大量的历史数据进行分析,以制定战略决策、市场预测、销售分析等以及为企业的商业智能系统提供数据支持,生成各种报表、仪表盘等,帮助企业管理层快速了解企业运营状况和关键指标。
- 自定义数据库:主要是因为有独特的业务流程或数据处理要求,现有的数据库模板无法满足,需要根据用户特定的业务需求和数据特点,量身定制数据库的架构、功能和流程,满足独特的业务逻辑和数据处理要求。
- 通用或事务处理:最为常用的一种模板。兼顾了事务处理和一般的数据存储、查询功能,适用于大多数常见的业务场景,是一种比较平衡的数据库模板。还能够有效地处理大量的并发事务,保证数据的一致性和完整性,支持多用户同时访问和操作数据库。在数据插入、更新、查询等操作上都有较好的性能表现,不会因为侧重于某一方面而导致其他方面性能下降。

- 指定数据库标识详细信息
此页面提供唯一的数据库标识符信息。Oracle数据库由全局数据库名称唯一标识。通常的形式为“名称.域”。
- 设置 Global database name:输入一个符合命名规范的名称,例如 oradb.example.com。这里 oradb 是数据库名,example.com 是数据库域名部分,可以根据实际情况调整。域名部分有助于在网络环境中更准确地标识数据库,特别是在多数据库环境或分布式系统中。默认是orcl。
- 设置 SID:如果希望 SID 与 Global database name 不同,可以单独输入一个 SID。例如,SID 设为 oracledb。若不设置 SID,系统会自动将 SID 设置为与 Global database name 相同的值。
- 创建容器数据库(Create as Container database)选项没有需求一般不会勾选。

- 选择数据库存储选项
在 Oracle 数据库创建过程中,存在将模板文件用于数据库存储属性和对数据库存储属性使用以下内容两种数据库存储选项。
模板文件用于数据库存储属性:数据库文件的存储类型(如文件系统、ASM 等)和位置会依据之前选定的数据库模板(如通用或事务处理模板)所预设的配置来确定。这些模板通常是 Oracle 根据不同应用场景的最佳实践经验进行设置的。适用于初次接触 Oracle 数据库,或者业务场景较为常规,对存储没有特殊要求的用户。
对数据库存储属性使用以下内容:可以指定一个基础位置,所有数据库文件(包括数据文件、控制文件、重做日志文件等)都会默认放置在这个位置。后续还能在后续屏幕中进一步自定义每个数据文件的具体名称和位置,具有较高的灵活性。适用于对数据库性能和存储管理有较高要求的专业用户或 DBA。
- 数据库文件存储类型:自动存储管理(ASM)和文件系统(默认)
- 数据库文件路径这里一般默认就好
Oracle管理的文件选项将使Oracle能够自动生成数据文件的名称,以简化数据库管理。此次先不勾选。

- 选择快速恢复选项
这里是对数据库恢复选项进行设置,这里主要是对恢复文件存储类型、快速恢复区位置以及大小进行设置。默认是不进行配置的。

- 指定网络配置(监听配置)
在这个界面应该会列出来自当前Oracle主目录的监听程序。指定监听程序名称和端口以在当前Oracle主目录中创建新监听程序。,如果没有的话,则需要创建一个新的监听程序。

- Oracle Data Vault配置选项
Oracle Data Vault 是一种增强的安全功能,提供对数据库资源和用户活动的额外控制。它通过定义严格的访问策略来限制谁可以在何时何地执行特定操作,从而加强了标准权限管理机制。这里默认空置,可以直接进行下一步。

- 指定内存配置选项
这里提供了三种内存分配方式:使用自动共享内存管理(注意SGA size大小不能超过shmmax)、使用手动内存管理(这里对内存分配更加灵活)、使用自动内存管理(当总物理内存大于4GB时不允许使用)。

- 指定字符集配置选项,这里根据使用习惯往往延续使用
ZHS16GBK

- 指定连接方式配置
- 专用服务器模式:在此模式下,数据库将为每个客户端连接分配专用资源。当客户端连接总数预计很少,或者客户端将对数据库发出持久的、长期运行的请求时,请使用此模式。
- 共享服务器模式:在此模式下,数据库将为所有客户端连接使用已分配资源的共享池。当大量用户需要连接到数据库时使用此模式同时高效地利用系统资源。

- 指定EM管理选项
EM管理选项配置,如果想用云端控制台的话可以配置这里。一般不会配置

- 指定数据库用户凭据
必须在新数据库中为用户帐户指定密码。可以对sys和system用户使用不同的密码,也可以授予相同的密码。
- 数据库创建选项配置,这一步也保持默认即可




1.2 响应文件创建数据库实例
在 Oracle 数据库中,可以使用响应文件(Response File)以静默模式创建数据库实例,这种方式避免了手动输入大量参数,适合批量部署或自动化操作。
这里展示的响应文件是我用于测试单实例通用数据库实例的响应文件,是通过图形化界面安装完成后保存的响应文件,可以用来参考。
responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v19.0.0
gdbName=orcl
sid=orcl
databaseConfigType=SI
RACOneNodeServiceName=
policyManaged=false
createServerPool=false
serverPoolName=
cardinality=
force=false
pqPoolName=
pqCardinality=
createAsContainerDatabase=false
numberOfPDBs=0
pdbName=
useLocalUndoForPDBs=true
pdbAdminPassword=
nodelist=
templateName=/u01/app/oracle/product/19c/dbhome_1/assistants/dbca/templates/General_Purpose.dbc
sysPassword=lsh123!@#
systemPassword=lsh123!@#
serviceUserPassword=
emConfiguration=
emExpressPort=5500
runCVUChecks=FALSE
dbsnmpPassword=
omsHost=
omsPort=0
emUser=
emPassword=
dvConfiguration=false
dvUserName=
dvUserPassword=
dvAccountManagerName=
dvAccountManagerPassword=
olsConfiguration=false
datafileJarLocation={ORACLE_HOME}/assistants/dbca/templates/
datafileDestination={ORACLE_BASE}/oradata/{DB_UNIQUE_NAME}/{DB_UNIQUE_NAME}/
recoveryAreaDestination={ORACLE_BASE}/fast_recovery_area/{DB_UNIQUE_NAME}
storageType=FS
diskGroupName=
asmsnmpPassword=
recoveryGroupName=
characterSet=ZHS16GBK
nationalCharacterSet=AL16UTF16
registerWithDirService=false
dirServiceUserName=
dirServicePassword=
walletPassword=
listeners=LISTENER
variablesFile=
variables=ORACLE_BASE_HOME=/u01/app/oracle/product/19c/dbhome_1,DB_UNIQUE_NAME=orcl,ORACLE_BASE=/u01/app/oracle,PDB_NAME=,DB_NAME=orcl,ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1,SID=orcl1
initParams=undo_tablespace=UNDOTBS1,sga_target=4050MB,db_block_size=8192BYTES,nls_language=AMERICAN,dispatchers=(PROTOCOL=TCP) (SERVICE=orcl1XDB),diagnostic_dest={ORACLE_BASE},control_files=("{ORACLE_BASE}/oradata/{DB_UNIQUE_NAME}/{DB_UNIQUE_NAME}/{DB_UNIQUE_NAME}/control01.ctl", "{ORACLE_BASE}/fast_recovery_area/{DB_UNIQUE_NAME}/{DB_UNIQUE_NAME}/control02.ctl"),remote_login_passwordfile=EXCLUSIVE,audit_file_dest={ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/adump,processes=300,pga_aggregate_target=1350MB,nls_territory=AMERICA,local_listener=LISTENER_ORCL1,db_recovery_file_dest_size=8256MB,open_cursors=300,log_archive_format=%t_%s_%r.dbf,compatible=19.0.0,db_name=orcl1,db_recovery_file_dest={ORACLE_BASE}/fast_recovery_area/{DB_UNIQUE_NAME},audit_trail=db
sampleSchema=false
memoryPercentage=40
databaseType=MULTIPURPOSE
automaticMemoryManagement=false
totalMemory=0
总结一下:
- 响应文件遵循 Oracle 19.0.0 版本的 rspfmt_dbca_response_schema 架构。
- 全局数据库名(gdbName)和实例名(sid)均为 orcl,但在 variables 中 SID 设为 orcl1,存在一定不一致需确认。
- 创建单实例数据库(databaseConfigType = SI),不采用策略管理,不创建服务器池。
- 不创建容器数据库(createAsContainerDatabase = false),不涉及可插拔数据库(numberOfPDBs = 0)。
- 使用通用模板 /u01/app/oracle/product/19c/dbhome_1/assistants/dbca/templates/General_Purpose.dbc 创建数据库。
- 采用文件系统存储(storageType = FS),数据文件存储在 {ORACLE_BASE}/oradata/{DB_UNIQUE_NAME}/{DB_UNIQUE_NAME}/,恢复区位于 {ORACLE_BASE}/fast_recovery_area/{DB_UNIQUE_NAME}。
- 数据库字符集为 ZHS16GBK,国家字符集为 AL16UTF16。
- 未启用数据卫士(dvConfiguration = false)和 Oracle Label Security(olsConfiguration = false)。
- 不注册到目录服务(registerWithDirService = false)。
- 各用户密码字段(如 sysPassword、systemPassword 等)为空,实际使用时需补充。
- EM Express 端口设为 5500,未指定 Enterprise Manager 的其他配置信息,不使用 OMS 管理。
- 手动分配内存,sga_target 为 4050MB,pga_aggregate_target 为 1350MB,不启用自动内存管理(automaticMemoryManagement = false)。
- 设定了撤销表空间、数据库块大小、NLS 语言和地域等一系列初始化参数。
- 不安装示例模式(sampleSchema = false)。
- 数据库类型为多用途(databaseType = MULTIPURPOSE)。
使用响应文件创建数据库实例与安装数据库软件类似,都是准备好响应文件之后,在命令行准备环境进行运行安装指令。
# 响应文件存放位置:/home/oracle/response/mydbca.rsp
# 运行 DBCA 并指定响应文件
dbca -silent -createDatabase -responseFile /home/oracle/response/mydbca.rsp
# 没有配置环境变量的话,使用绝对路径。
创建完成后会在末尾出现类似字样。
Executing Post Configuration Actions
100% complete
Database creation complete. For details check the logfiles at:
/u01/app/oracle/cfgtoollogs/dbca/orcl.
Database Information:
Global Database Name:orcl
System Identifier(SID):orcl
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/orcl/orcl.log" for further details.
通过 SQL*Plus 连接到新创建的数据库,并执行查询以验证其状态。
[oracle@oracle ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Feb 6 10:18:48 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> SELECT name, open_mode FROM v$database;
NAME OPEN_MODE
--------- --------------------
ORCL READ WRITE
或者直接通过远程连接工具连接进行测试。
2. 创建监听器
2.1 图形化创建数据库监听
要图形化创建Oracle数据库监听器,可以使用Oracle提供的图形化工具,如 Oracle Net Configuration Assistant (NetCA) ,这是一种非常直观的方法,适合大多数用户。
- 进入图像化桌面调出中断输入启动命令。
[oracle@oracle ~]$ netca
进入欢迎首页,提供了监听配置、命名方法配置、本地网络服务名配置、目录使用配置4中配置选项,这里我们选择监听器配置。

- 监听程序配置操作
建立与Oracle数据库的远程连接必须配置OracleNet监听程序。Oracle Net ConfigurationAssistant允许添加、重新配置、重命名或删除监听程序。

- 创建监听器名称

- 监听程序使用协议,默认tcp即可

- 监听使用的端口配置,可以使用默认的1521或自定义一个端口号

- 是否需要继续再配置另一个监听器,默认不再创建。

- 配置完成后继续下一步会返回欢迎界面,点击结束退出即可。

2.2 响应文件创建数据库监听
通过响应文件创建 Oracle 监听器可以简化配置过程,并确保监听器设置的一致性和准确性。
首先,要准备一个响应文件(通常是 .rsp 文件)包含监听器的配置参数,此文件内容源自于netna.rsp模板文件。
[GENERAL]
RESPONSEFILE_VERSION="19.0"
CREATE_TYPE="CUSTOM"
#SHOW_GUI=false
#LOG_FILE=""$ORACLE_BASE/cfgtoollogs/netca/netca.log""
[oracle.net.ca]
INSTALLED_COMPONENTS={"server","net8","javavm"}
INSTALL_TYPE=""custom""
LISTENER_NUMBER=1
LISTENER_NAMES={"LISTENER1522"}
LISTENER_PROTOCOLS={"TCP;1522"}
LISTENER_START=""LISTENER1522""
NAMING_METHODS={"TNSNAMES","ONAMES","HOSTNAME"}
#NOVELL_NAMECONTEXT = ""NAMCONTEXT""
#SUN_METAMAP = ""MAP""
#DCE_CELLNAME = ""CELL""
NSN_NUMBER=1
NSN_NAMES={"EXTPROC_CONNECTION_DATA"}
NSN_SERVICE={"PLSExtProc"}
NSN_PROTOCOLS={"TCP;HOSTNAME;1522"}
#SERVICEUSERPASSWORD=""svcpassword""
在终端中执行以下命令,使用响应文件以静默模式创建监听:
# 响应文件存放位置:/home/oracle/response/mynetca.rsp
# 运行 DBCA 并指定响应文件
[oracle@oracle ~]$ netca -silent -responsefile /home/oracle/response/mynetca.rsp
Parsing command line arguments:
Parameter "silent" = true
Parameter "responsefile" = /home/oracle/response/mynetca.rsp
Done parsing command line arguments.
Oracle Net Services Configuration:
Configuring Listener:LISTENER
Listener configuration complete.
Oracle Net Listener Startup:
Running Listener Control:
/u01/app/oracle/product/19c/dbhome_1/bin/lsnrctl start LISTENER
Listener Control complete.
Listener started successfully.
Profile configuration complete.
Oracle Net Services configuration successful. The exit code is 0
使用 lsnrctl status 命令查看新建监听器的状态信息。
[oracle@oracle ~]$ lsnrctl status LISTENER
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 06-FEB-2025 14:47:27
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER1522
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date 06-FEB-2025 14:43:10
Uptime 0 days 0 hr. 4 min. 17 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/19c/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/oracle/listener1522/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521)))
The listener supports no services
The command completed successfully
因为使用这种方法往往是创建自定义监听器,所以最好带上监听器的名称,否则查看的是默认监听器。
3.开机自启动
3.1 rc.local文件方法
在/etc/rc.d/rc.local文件中添加启动命令,该文件需要添加执行权限才能使用。
- 添加监听器开机自启动
# 启动1521默认监听
su oracle -lc '/u01/app/oracle/product/19c/dbhome_1/bin/lsnrctl start'
# 有多个监听器,或者默认监听器名称不是 LISTENER,可以在 lsnrctl status 后面跟上具体的监听器名称,以查看指定监听器的状态。
su oracle -lc '/u01/app/oracle/product/19c/dbhome_1/bin/lsnrctl start LISTENER1522'
# LISTENER1522 为监听器名
- 添加数据库实例开机自启动
# 启动所有实例
su oracle -lc '/u01/app/oracle/product/19c/dbhome_1/bin/dbstart'
- 命令中用到的
/u01/app/oracle/product/19c/dbhome_1/是Oracle的主目录,即ORACLE_HOME,可以根据实际情况调整。- 还有一点要注意,就是.bash_profile文件只在用户登录时被加载。如果你是通过非交互式方式(例如通过脚本或cron作业)访问系统,那么.bash_profile文件不会被自动加载,可以之前配置的环境变量内容配置到全局文件/etc/profile中。
- 还有就是监听器先起,实例后起。
3.2 Systemd 服务文件方法
个人感觉使用这种方法比较适合对单一监听器和数据库实例的启动管理操作。需要对操作对象创建各自的systed文件。
需要以 root 用户登录系统,因为创建和管理 Systemd 服务文件需要相应的权限。
明确 ORACLE_HOME(Oracle 软件安装目录)、ORACLE_BASE(Oracle 基本目录),以及所有要设置开机自启的数据库实例名(ORACLE_SID)和监听器名称。
- 监听器自启动
监听器通常有一个或多个,以下以默认监听器 LISTENER 为例,创建 /etc/systemd/system/oracle-listener.service 文件,在文件中添加如下内容:
[Unit]
Description=Oracle Net Listener
After=network.target
[Service]
User=oracle
Group=oinstall
Environment="ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1"
ExecStart=$ORACLE_HOME/bin/lsnrctl start
ExecStop=$ORACLE_HOME/bin/lsnrctl stop
Restart=always
[Install]
WantedBy=multi-user.target
参数解释:
[Unit] 部分:
- Description:对该服务的简要描述,方便识别。
- After=network.target:表明此服务要在网络服务启动之后再启动,因为监听器依赖网络。
[Service] 部分:
- User 和 Group:指定服务以 oracle 用户和 oinstall 组的身份运行,这是 Oracle 软件的常规运行用户和组。
- Environment:设置 ORACLE_HOME 环境变量,你需要根据实际情况修改为自己的 Oracle 安装目录。
- ExecStart:启动监听器的命令,lsnrctl start 会启动所有已配置的监听器。
- ExecStop:停止监听器的命令,lsnrctl stop 会停止所有正在运行的监听器。
- Restart=always:若服务意外停止,会自动重启。
[Install] 部分:
- WantedBy=multi-user.target:意味着该服务会在多用户模式下启动。
执行以下命令使 Systemd 重新加载服务配置:
systemctl daemon-reload
启动 oracle-listener 服务,并设置为开机自启:
systemctl start oracle-listener.service
systemctl enable oracle-listener.service
验证服务是否成功启动:
systemctl status oracle-listener.service
# 或者
lsnrctl status [listenername]
- 数据库实例自启动
假设有多个数据库实例,可以为每个实例创建一个服务文件,以实例 orcl1 为例。创建服务文件 /etc/systemd/system/oracle-orcl1.service,添加以下内容:
[Unit]
Description=Oracle Database Instance: orcl1
After=network.target oracle-listener.service
[Service]
User=oracle
Group=oinstall
Environment="ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1"
Environment="ORACLE_SID=orcl1"
ExecStart=/bin/sh -c '$ORACLE_HOME/bin/sqlplus / as sysdba <<EOF
STARTUP;
EXIT;
EOF'
ExecStop=/bin/sh -c '$ORACLE_HOME/bin/sqlplus / as sysdba <<EOF
SHUTDOWN IMMEDIATE;
EXIT;
EOF'
Restart=always
[Install]
WantedBy=multi-user.target
参数解释:
[Unit] 部分:
- Description:描述服务为指定的 Oracle 数据库实例。
- After=network.target oracle-listener.service:表示该服务在网络服务和监听器服务启动后再启动。
[Service] 部分:
- User 和 Group:同样以 oracle 用户和 oinstall 组的身份运行。
- Environment:设置 ORACLE_HOME 和 ORACLE_SID 环境变量,ORACLE_SID 需根据实际的数据库实例名修改。
- ExecStart:使用 SQL*Plus 以 SYSDBA 身份登录并执行 STARTUP 命令来启动数据库实例。
- ExecStop:使用 SQL*Plus 以 SYSDBA 身份登录并执行 SHUTDOWN IMMEDIATE 命令来停止数据库实例。
- Restart=always:服务意外停止时自动重启。
[Install] 部分:
- WantedBy=multi-user.target:在多用户模式下
执行以下命令使 Systemd 重新加载服务配置:
systemctl daemon-reload
启动 oracle-listener 服务,并设置为开机自启:
systemctl start oracle-orcl1.service
systemctl enable oracle-orcl1.service
验证服务是否成功启动:
systemctl status oracle-orcl1.service
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)