Saya mencoba untuk mengubah nama layanan dari instalasi Oracle 11.2.0.3 pada server Windows 2003.
Selama instalasi, nama layanan didefinisikan dengan domain default, tetapi kami ingin menyingkirkannya.
Apa yang telah saya lakukan sejauh ini (dan apa yang telah berhasil sebelumnya) untuk mengubah nama layanan mydb.foo.bar
menjadi mydb
hanya:
alter system set service_names = 'mydb' scope = both;
alter database rename global_name to mydb;
Yang tampaknya berhasil:
SQL> tampilkan nama parameter NILAI TIPE NAMA ------------------------------------ ----------- --- --------------------------- db_name string mydb db_unique_name string mydb global_names boolean FALSE instance_name string mydb service_names string mydb SQL>
(Saya menghapus beberapa properti dari output di atas yang tidak relevan)
Kemudian gunakan alter system register
untuk mendaftar ulang dengan pendengar.
Ini tidak menunjukkan efek jadi saya me-restart database dan pendengar, masih tidak berhasil.
Situasi saat ini adalah sebagai berikut:
select name from v$active_services
pengembalian:
SERVICE_ID | NAME | NAMA JARINGAN ----------- + ----------------- + -------------------- 1 | LATAR BELAKANG SYS $ | 2 | SYS $ USERS | 3 | mydb | mydb 5 | mydbXDB | mydbXDB 6 | mydb.foo.bar | mydb.foo.bar
Jadi untuk beberapa alasan nama layanan yang lama masih ada dan berjalan.
Saat mencoba menghentikan layanan menggunakan
SQL> exec dbms_service.stop_service ('mydb.foo.bar'); Prosedur PL / SQL berhasil diselesaikan.
tidak ada kesalahan yang dilaporkan, tetapi ketika mencoba menghapus layanan, Oracle tidak akan membiarkan saya:
SQL> exec dbms_service.delete_service ('mydb.foo.bar'); BEGIN dbms_service.delete_service ('mydb.foo.bar'); AKHIR; * GALAT di baris 1: ORA-44305: service mydb.foo.bar sedang berjalan ORA-06512: di "SYS.DBMS_SYS_ERROR", baris 86 ORA-06512: di "SYS.DBMS_SERVICE", baris 454 ORA-06512: di "SYS.DBMS_SERVICE", baris 343 ORA-06512: pada baris 1
Saya memverifikasi bahwa saya tidak memiliki koneksi terbuka menggunakan layanan itu:
select count(*)
FROM v$session
where service_name = 'mydb.foo.bar';
dikembalikan 0
(nol)
Saya juga menciptakan kembali layanan Windows menggunakan oradim, tetapi tidak berhasil.
Pada satu titik saya berlari
alter system set service_names = 'mydb,mydb.foo.bar' scope = both;
mungkinkah itu alasan saya memiliki keduanya sekarang?
Tapi setelah mengubah service_names menjadi hanya satu nama, yang kedua seharusnya sudah hilang, bukan?
Jika saya tidak bisa membuat layanan kedua hilang, itu akan cukup untuk membuat instance mendaftar dengan pendengar menggunakan nama layanan pendek, daripada yang panjang.
Saya yakin saya kehilangan sesuatu yang sangat jelas, tetapi saya tidak tahu apa itu.