Oracle 19c:Oracle 错误 12514,无法连接到数据库

问题描述

在我的本地 oracle 19c 安装(Windows Server 2016)上,一切运行良好,直到本周 Windows 更新。从那以后,每当我尝试连接到数据库时,我都会收到错误 ORA-12514 – TNS:listener 目前不知道连接描述符中请求的服务

我的 listener.ora:

listener.ora

我的侦听器 Windows 服务正在运行:

enter image description here

可疑的是 lsnrctl 实用程序不会监听我的服务名称,它只是列出了 EXTPROC1521:

enter image description here

每当我尝试连接到数据库时,我都会得到:

enter image description here

我无法通过任何方式连接到数据库,无论是使用普通用户名,还是使用 sys 或 system。 我尝试使用 listener.ora 并重新启动 Windows 服务,但没有任何影响:-( 你能帮帮我吗?

解决方法

您的数据库是否处于开放模式?笔记!您的数据库 Windows 服务可以运行,但数据库可以处于以下任一模式:open|mount|nomount|down。确保您的数据库处于打开模式。一旦 db 进入打开模式,数据库就会将它的服务注册到监听器,你就可以登录了

使数据库进入开放模式:

C:\>set ORACLE_SID=<MYSID>
C:\>sqlplus / as sysdba
SQL>startup

警报日志

数据库警报日志是您的 goto 文件,用于检查数据库引擎的健康状况。
数据库警报日志会告诉为什么数据库在重启后无法进入打开模式。 (可能是因为FRA(快速恢复区)尺寸过小)

定位警报日志是一场噩梦,所以我多年前创建了一个bash函数。

declare -f alog
alog ()
{
    less -r ${ORACLE_BASE}/diag/rdbms/$(echo ${ORACLE_SID} | tr '[:upper:]' '[:lower:]')*/${ORACLE_SID}/trace/alert_${ORACLE_SID}.log
}

fra.sql

--------------------------------------------------------------------------------
-- name:    fra.sql
-- purpose: Display information about the Fast Recovery Area (FRA)
-- author:  Bjarte Brandt
-- date:    09.03.2010
-- remarks:
-- Change size:
-- alter system set db_recovery_file_dest_size=<size> scope=both
--------------------------------------------------------------------------------
col name format a60
col used format 99.99 heading 'Used %'

select
  name,floor(space_limit / 1024 / 1024) "Size MB",ceil(space_used  / 1024 / 1024) "Used MB",(space_used/space_limit) * 100 used
from
  v$recovery_file_dest
order by name;

select
  file_type,percent_space_used,percent_space_reclaimable,number_of_files
from
  v$flash_recovery_area_usage;

如果您现在处于 100%,您必须决定如何处理归档日志模式下的数据库。您可以实施备份策略、禁用快速恢复区、将数据库设置为 noarchivelog 模式或调整 FRA 的大小 - 所有选择都取决于用例。

注意!我知道有很多事情需要考虑。请记住,您现在正在使用与世界最大银行完全相同的引擎。掌握它需要时间。

祝你好运!

,

最终按照以下说明解决了我的问题: https://www.programmersought.com/article/48144147987/

总结:

  • 通过命令“shutdown”关闭数据库
  • 启动数据库,但通过“启动挂载”来防止尝试打开它
  • 进行“select * from v$log”以查看重做日志
  • 通过“恢复数据库直到时间'YYYY-MM-DD HH:MM:SS';”进行恢复重做日志中的日期时间标记为“当前”。
  • 系统应报告“媒体恢复完成”
  • 然后进行“alter database open resetlogs;”。这将重置所有活动重做日志并打开数据库。
  • 然后关闭数据库
  • 然后通过注释“startup”(不带选项)启动数据库
  • 系统现在应该报告“数据库打开”