破案记:Oracle数据库开机自动启动失败

2024-02-04 22:20

本文主要是介绍破案记:Oracle数据库开机自动启动失败,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我的一台虚机上的数据库,以前都是开机自动启动。最近忽然不自动启动了。

开机后,监听是起来的,但数据库并没有:

$ lsnrctl statusLSNRCTL for Linux: Version 19.0.0.0.0 - Production on 04-FEB-2024 20:50:11Copyright (c) 1991, 2019, Oracle.  All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                04-FEB-2024 20:28:15
Uptime                    0 days 0 hr. 21 min. 56 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/oracle-19c-vagrant/listener/alert/log.xml
Listening Endpoints Summary...(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
The listener supports no services
The command completed successfully$ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Sun Feb 4 20:50:29 2024
Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle.  All rights reserved.Connected to an idle instance.SQL> exit
Disconnected

自动启动设置没有被改动,仍是Y:

$ cat /etc/oratab
ORCLCDB:/opt/oracle/product/19c/dbhome_1:Y

查看自动启动服务oracle-rdbms,调的就是dbstart,没有问题:

# cat /etc/systemd/system/oracle-rdbms.service
[Unit]
Description=Oracle Database(s) and Listener
Requires=network.target[Service]
Type=forking
Restart=no
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
User=oracle[Install]
WantedBy=multi-user.target

而且服务oracle-rdbms是启动的,这里提供了数据库启动日志的位置:

# systemctl status oracle-rdbms
● oracle-rdbms.service - Oracle Database(s) and ListenerLoaded: loaded (/etc/systemd/system/oracle-rdbms.service; enabled; vendor preset: disabled)Active: active (running) since Sun 2024-02-04 12:24:23 +08; 22min agoProcess: 646 ExecStart=/opt/oracle/product/19c/dbhome_1/bin/dbstart /opt/oracle/product/19c/dbhome_1 (code=exited, status=0/SUCCESS)Main PID: 706 (tnslsnr)CGroup: /system.slice/oracle-rdbms.service└─706 /opt/oracle/product/19c/dbhome_1/bin/tnslsnr LISTENER -inheritFeb 04 12:24:21 oracle-19c-vagrant systemd[1]: Starting Oracle Database(s) and Listener...
Feb 04 12:24:21 oracle-19c-vagrant dbstart[646]: Processing Database instance "ORCLCDB": log file /opt/oracle/product/19c/dbho...up.log
Feb 04 12:24:23 oracle-19c-vagrant systemd[1]: Started Oracle Database(s) and Listener.
Hint: Some lines were ellipsized, use -l to show in full.

查看数据库启动日志,这里显示了具体的错误:

# vi /opt/oracle/product/19c/dbhome_1/rdbms/log/startup.log
/opt/oracle/product/19c/dbhome_1/bin/dbstart: Starting up database "ORCLCDB"
Sun Feb  4 12:24:21 +08 2024SQL*Plus: Release 19.0.0.0.0 - Production on Sun Feb 4 12:24:21 2024
Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle.  All rights reserved.SQL> Connected to an idle instance.
SQL> ORA-46693: The WALLET_ROOT location is missing or invalid.
ORA-07217: sltln: environment variable cannot be evaluated.
ORA-01078: failure in processing system parameters
SQL> Disconnected/opt/oracle/product/19c/dbhome_1/bin/dbstart: Database instance "ORCLCDB" warm started.

想起来了,之前因为做加密实验设置了WALLET_ROOT。但这个设置我并没有改过,而且WALLET_ROOT指向的位置也是存在的,权限也没有问题:

SQL> show parameter walletNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
ssl_wallet                           string
wallet_root                          string      /opt/oracle/wallet

查看错误信息的解释,这几个错误号需要一起看,才能找到真正原因:

$ oerr ora 46693
46693, 00000, "The WALLET_ROOT location is missing or invalid."
// *Cause:  An attempt was made to perform a keystore operation when the
//          instance initialization parameter WALLET_ROOT was missing
//          or invalid.
// *Action: Start the database after setting the WALLET_ROOT instance
//          initialization parameter to the directory where all of the
//          wallets are stored.$ oerr ora 07217
07217, 00000, "sltln: environment variable cannot be evaluated."
// *Cause:  getenv call returned a null pointer.
// *Action: Set the environment variable and try again.$ oerr ora 01078
01078, 00000, "failure in processing system parameters"
// *Cause:  Failure during processing of INIT.ORA parameters during
//          system startup.
// *Action:  Further diagnostic information should be in the error stack.

ORA-07217揭示了错误的根因,看下面参数的设置:

SQL> show spparameter walletSID      NAME                          TYPE        VALUE
-------- ----------------------------- ----------- ----------------------------
*        ssl_wallet                    string
*        wallet_root                   string      $ORACLE_BASE/wallet

原来,我设置时使用了环境变量$ORACLE_BASE,虽然这是允许的。但在启动时,此环境变量还未设置,我只是将其设置在了用户oracle的.bash_profile文件中。

解决方法是不用环境变量,而是使用绝对路径。设置后重启数据库:

alter system set wallet_root='/opt/oracle/wallet' scope=spfile;
shutdown immediate
startup

重启数据库服务器,这一回开机自动启动成功了!

这篇关于破案记:Oracle数据库开机自动启动失败的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/678969

相关文章

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py