我正在尝试更改 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;
Run Code Online (Sandbox Code Playgroud)
这似乎有效:
SQL> 显示参数名称 名称类型值 ------------------------------------- ----------- --- --------------------------- db_name 字符串 mydb db_unique_name 字符串 mydb global_names 布尔值 FALSE instance_name 字符串 mydb service_names 字符串 mydb 查询>
(我从上面的输出中删除了一些不相关的属性)
然后使用alter system register重新注册侦听器。
这显示没有效果,所以我重新启动了数据库和监听器,仍然没有运气。
目前的情况如下:
select name from v$active_services 返回:
SERVICE_ID | 姓名 | 网络名称 -----------+-----------------+----- 1 | SYS$背景 | 2 | SYS$USERS | 3 | 我的数据库 | 数据库 5 | mydbXDB | 数据库 6 | mydb.foo.bar | mydb.foo.bar
因此,出于某种原因,旧的服务名称仍然存在并正在运行。
尝试停止服务时使用
SQL> exec dbms_service.stop_service('mydb.foo.bar');
PL/SQL 过程成功完成。
没有报错,但是在尝试删除服务时,Oracle 不会让我:
SQL> exec 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';
Run Code Online (Sandbox Code Playgroud)
返回0(零)
我还使用 oradim 重新创建了 Windows 服务,但无济于事。
有一次我跑了
alter system set service_names = 'mydb,mydb.foo.bar' scope = both;
Run Code Online (Sandbox Code Playgroud)
这可能是我现在两者兼而有之的原因吗?
但是在将 service_names 更改为仅一个名称后,第二个应该已经消失了,不是吗?
如果我不能让第二个服务消失,那么使用短服务名称而不是长服务名称使实例注册到侦听器就足够了。
我确定我遗漏了一些非常明显的东西,但我无法弄清楚它是什么。
我确定我遗漏了一些非常明显的东西,但我无法弄清楚它是什么。
是的,这是非常明显的事情......
该参数DB_DOMAIN仍然包含foo.bar,因此实例使用mydb.foo.bar.
做了一个
alter system set db_domain='' scope=spfile;
Run Code Online (Sandbox Code Playgroud)
并弹跳数据库现在一切都按预期工作。
| 归档时间: |
|
| 查看次数: |
36013 次 |
| 最近记录: |