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.bar
thành mydb
chỉ:
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ì.