我正在尝试更改Windows 2003服务器上Oracle 11.2.0.3安装的服务名称。
在安装过程中,服务名称是使用默认域定义的,但是我们想摆脱它。
到目前为止,我所做的事情(以及以前的工作)是将服务名称更改mydb.foo.bar
为mydb
仅:
alter system set service_names = 'mydb' scope = both;
alter database rename global_name to mydb;
这似乎奏效了:
SQL>显示参数名称 名称类型值 ------------------------------------ ----------- --- --------------------------- db_name字符串mydb db_unique_name字符串mydb global_names布尔值FALSE instance_name字符串mydb service_names字符串mydb SQL>
(我从上面的输出中删除了一些不相关的属性)
然后用于alter system register
重新注册侦听器。
这没有效果,所以我重新启动了数据库和侦听器,仍然没有运气。
当前情况如下:
select name from v$active_services
返回:
SERVICE_ID | NAME | 网络名字 ----------- + ----------------- + -------------------- 1 | SYS $ BACKGROUND | 2 | SYS $ USERS | 3 | mydb | mydb 5 | mydbXDB | mydbXDB 6 | mydb.foo.bar | mydb.foo.bar
因此,由于某些原因,旧的服务名称仍然存在并正在运行。
尝试使用停止服务时
SQL>执行dbms_service.stop_service('mydb.foo.bar'); PL / SQL过程成功完成。
没有错误报告,但是在尝试删除该服务时,Oracle不会让我:
SQL>执行dbms_service.delete_service('mydb.foo.bar'); 开始dbms_service.delete_service('mydb.foo.bar'); 结束; * 第1行发生错误: ORA-44305:服务mydb.foo.bar正在运行 ORA-06512:在“ SYS.DBMS_SYS_ERROR”行86 ORA-06512:位于“ SYS.DBMS_SERVICE”行454 ORA-06512:位于“ SYS.DBMS_SERVICE”的第343行 ORA-06512:在第1行
我确认使用该服务没有打开的连接:
select count(*)
FROM v$session
where service_name = 'mydb.foo.bar';
返回0
(零)
我还使用oradim重新创建了Windows服务,但无济于事。
有一次我跑了
alter system set service_names = 'mydb,mydb.foo.bar' scope = both;
那可能就是我现在都拥有的原因吗?
但是在将service_names仅更改为一个名称之后,第二个应该消失了,不是吗?
如果我不能取消第二项服务,那就足以使实例使用短服务名而不是长服务名在侦听器中注册。
我确定我遗漏了一些显而易见的东西,但我不知道是什么。