我正在尝试更改Windows 2003服务器上Oracle 11.2.0.3安装的服务名称。
在安装过程中,服务名称是使用默认域定义的,但是我们想摆脱它。
到目前为止,我所做的事情(以及以前的工作)是将服务名称更改mydb.foo.bar为mydb仅:
altersystemsetservice_names='mydb'scope=both;alterdatabaserename global_nametomydb;
这似乎奏效了:
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行
我确认使用该服务没有打开的连接:
selectcount(*)FROMv$sessionwhereservice_name='mydb.foo.bar';
返回0(零)
我还使用oradim重新创建了Windows服务,但无济于事。
有一次我跑了
altersystemsetservice_names='mydb,mydb.foo.bar'scope=both;
那可能就是我现在都拥有的原因吗?
但是在将service_names仅更改为一个名称之后,第二个应该消失了,不是吗?
如果我不能取消第二项服务,那就足以使实例使用短服务名而不是长服务名在侦听器中注册。
我确定我遗漏了一些显而易见的东西,但我不知道是什么。