上一篇
"叮铃铃——"凌晨2点15分,我被一阵急促的手机铃声惊醒,屏幕上闪烁着"生产环境Oracle异常"的红色告警,揉着惺忪睡眼连上VPN,日志中赫然显示着"ORA-44303: service name exists"的错误信息,客户明天上午9点有重要业务上线,这个节骨眼上服务名冲突问题必须立即解决,作为有十年经验的Oracle DBA,我深吸一口气,开始远程处理这个棘手问题...
ORA-44303错误通常发生在以下场景:
典型错误信息示例:
ERROR at line 1:
ORA-44303: service name exists
ORA-06512: at "SYS.DBMS_SERVICE", line 157
-- 查询当前数据库所有服务 SELECT name, creation_date, enabled FROM dba_services ORDER BY creation_date DESC;
# Linux/Unix环境下 lsnrctl status # Windows环境下 lsnrctl.exe status
重点关注"SERVICE_NAME"部分,查看是否有重复项
-- 查询所有实例的服务分布 SELECT inst_id, name, network_name FROM gv$services ORDER BY inst_id, name;
-- 查找可能残留的注册条目 SELECT * FROM sys.registry$ WHERE status = 'INVALID' AND name LIKE '%SERVICE%';
-- 先删除已有服务 BEGIN DBMS_SERVICE.DELETE_SERVICE(service_name => 'YOUR_SERVICE'); END; / -- 创建新服务(替换your_params为实际参数) BEGIN DBMS_SERVICE.CREATE_SERVICE( service_name => 'NEW_SERVICE', network_name => 'NEW_SERVICE', aq_ha_notifications => TRUE, failover_method => 'BASIC', failover_type => 'SELECT', failover_retries => 30, failover_delay => 5); END; /
-- 仅当标准方法失效时使用 DELETE FROM sys.registry$ WHERE name = 'YOUR_SERVICE' AND status = 'INVALID'; COMMIT;
执行后必须重启数据库使更改生效
# 重新加载监听配置不中断现有连接 lsnrctl reload
-- 在RAC所有节点执行一致性检查 ALTER SYSTEM SET service_names = '(PRIMARY_SERVICE, SECONDARY_SERVICE)' SCOPE=BOTH SID='*';
-- 需要SYSDBA权限 UPDATE sys.serv$ SET status = 0 WHERE name = 'CONFLICT_SERVICE_NAME';
命名规范统一
变更管理流程
-- 创建前先检查是否存在 DECLARE v_count NUMBER; BEGIN SELECT COUNT(*) INTO v_count FROM dba_services WHERE name = 'PROPOSED_SERVICE'; IF v_count = 0 THEN -- 创建逻辑 ELSE DBMS_OUTPUT.PUT_LINE('服务已存在,请选用其他名称'); END IF; END;
定期健康检查脚本
# 可加入crontab的检查脚本 #!/bin/bash sqlplus -s / as sysdba <<EOF SET PAGESIZE 1000 SET LINESIZE 200 SPOOL /tmp/service_check.log @check_services.sql SPOOL OFF EXIT EOF
文档记录要求
服务名称 | 创建时间 | 负责人 | 用途说明 | 关联应用
Q:删除服务后立即重建仍报错怎么办? A:执行以下步骤:
ALTER SYSTEM CHECKPOINT;
Q:RAC环境中部分节点报错如何处理? A:按顺序执行:
gv$services
srvctl modify service
统一配置Q:服务名被标记为INVALID但无法删除? A:尝试级联清理:
-- 注意:此操作需要Oracle Support协助确认 DELETE FROM sys.registry$ WHERE name = 'BAD_SERVICE'; DELETE FROM sys.serv$ WHERE name = 'BAD_SERVICE'; COMMIT;
处理ORA-44303错误的核心在于"查全、删净、建准",2025年8月最新版的Oracle 21c中,该错误出现频率有所降低,但在仍在使用11g/12c的环境中仍需特别注意,建议在以下三种情况后主动检查服务名状态:
预防永远比抢救更重要,建立完善的服务名管理制度,才能让DBA们少些深夜被叫醒的"惊喜"。
(凌晨4:30,确认所有服务正常启动,监控恢复绿色,保存好处理记录,设置好8点的提醒闹钟——还得给团队做事故复盘呢...)
本文由 沙和宜 于2025-08-03发表在【云服务器提供商】,文中图片由(沙和宜)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/525594.html
发表评论