Không thể thay đổi tên dịch vụ cho Oracle


9

Tôi đang cố gắng thay đổi tên dịch vụ của bản cài đặt Oracle 11.2.0.3 trên máy chủ Windows 2003.

Trong quá trình cài đặt, tên dịch vụ đã được xác định với tên miền mặc định, nhưng chúng tôi muốn loại bỏ điều đó.

Những gì tôi đã làm cho đến nay (và những gì đã hoạt động trước đây) để thay đổi tên dịch vụ mydb.foo.barthành mydbchỉ:

alter system set service_names = 'mydb' scope = both;
alter database rename global_name to mydb;

Mà dường như đã làm việc:

SQL> hiển thị tên tham số

TÊN GIÁ TRỊ TÊN
------------------------------------ ----------- --- ---------------------------
chuỗi db_name mydb
chuỗi db_unique_name mydb
FALSE toàn cầu
chuỗi instance_name mydb
dịch vụ_names chuỗi mydb
SQL>

(Tôi đã xóa một số thuộc tính khỏi đầu ra ở trên không liên quan)

Sau đó sử dụng alter system registerđể đăng ký lại với người nghe.

Điều này cho thấy không có hiệu quả nên tôi khởi động lại cơ sở dữ liệu và người nghe, vẫn không gặp may.

Tình hình hiện tại như sau:

select name from v$active_services trả về:

DỊCH VỤ_ID | TÊN | TÊN MẠNG       
----------- + ----------------- + --------------------
1 | SYS $ NỀN TẢNG |                    
2 | SYS $ NGƯỜI SỬ DỤNG |                    
3 | mydb | mydb           
5 | mydbXDB | mydbXDB        
6 | mydb.foo.bar | mydb.foo.bar

Vì vậy, vì một số lý do, tên dịch vụ cũ vẫn còn đó và đang chạy.

Khi cố gắng dừng dịch vụ bằng cách sử dụng

SQL> thực thi dbms_service.stop_service ('mydb.foo.bar');
Thủ tục PL / SQL đã hoàn thành thành công.

không có lỗi nào được báo cáo, nhưng khi cố gắng xóa dịch vụ, Oracle sẽ không cho phép tôi:

SQL> exec dbms_service.delete_service ('mydb.foo.bar');
BEGIN dbms_service.delete_service ('mydb.foo.bar'); KẾT THÚC;

*
LRI ở dòng 1:
ORA-44305: dịch vụ mydb.foo.bar đang chạy
ORA-06512: tại "SYS.DBMS_SYS_ERROR", dòng 86
ORA-06512: tại "SYS.DBMS_SERVICE", dòng 454
ORA-06512: tại "SYS.DBMS_SERVICE", dòng 343
ORA-06512: tại dòng 1

Tôi đã xác minh rằng tôi không có kết nối mở bằng dịch vụ đó:

select count(*)
FROM v$session
where service_name = 'mydb.foo.bar';

trả lại 0(không)

Tôi cũng đã tạo lại dịch vụ Windows bằng cách sử dụng oradim nhưng không có kết quả.

Có lúc tôi chạy

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

đó có thể là lý do tôi có cả hai bây giờ?

Nhưng sau khi thay đổi service_names thành một tên duy nhất, tên thứ hai sẽ biến mất, phải không?

Nếu tôi không thể làm cho dịch vụ thứ hai biến mất, thì việc đăng ký cá thể với người nghe bằng tên dịch vụ ngắn thay vì tên dài là đủ.

Tôi chắc chắn rằng tôi đang thiếu một cái gì đó khá rõ ràng, nhưng tôi không thể tìm ra nó là gì.

Câu trả lời:


5

Tôi chắc chắn rằng tôi đang thiếu một cái gì đó khá rõ ràng, nhưng tôi không thể tìm ra nó là gì.

Vâng, đó là một điều rất rõ ràng ...

Tham số DB_DOMAINvẫn chứa foo.barvà do đó, cá thể đã đăng ký sử dụng mydb.foo.bar.

Sau khi làm một

alter system set db_domain='' scope=spfile; 

và nảy cơ sở dữ liệu mọi thứ đang hoạt động như mong đợi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.