Oracle-11g-R2

無法更改 Oracle 的服務名稱

  • January 27, 2016

我正在嘗試更改 Windows 2003 伺服器上安裝的 Oracle 11.2.0.3 的服務名稱。

在安裝期間,服務名稱是使用預設域定義的,但我們想擺脫它。

到目前為止我所做的(以及之前所做的)將服務名稱更改mydb.foo.barmydb

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 | 姓名 | 網路名字 
-----------+-----------------+--------------------
1 | 系統$背景 | 
2 | SYS$使用者 | 
3 | 數據庫 | 數據庫 
5 | mydbXDB | 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';

返回0(零)

我還使用 oradim 重新創建了 Windows 服務,但無濟於事。

有一次我跑了

alter system set service_names = 'mydb,mydb.foo.bar' scope = both;

這可能是我現在擁有兩者的原因嗎?

但是在將 service_names 更改為只有一個名稱之後,第二個應該已經消失了,不是嗎?

如果我不能讓第二個服務消失,那麼使用短服務名稱而不是長服務名稱使實例向偵聽器註冊就足夠了。

我確定我錯過了一些非常明顯的東西,但我無法弄清楚它是什麼。

我確定我錯過了一些非常明顯的東西,但我無法弄清楚它是什麼。

是的,這是非常明顯的……

該參數DB_DOMAIN仍然包含foo.bar,因此該實例使用mydb.foo.bar.

做了一個之後

alter system set db_domain='' scope=spfile; 

並彈回數據庫現在一切都按預期工作。

引用自:https://dba.stackexchange.com/questions/49245