ฉันพยายามเปลี่ยนชื่อบริการของการติดตั้ง Oracle 11.2.0.3 บนเซิร์ฟเวอร์ Windows 2003
ระหว่างการติดตั้งชื่อบริการถูกกำหนดด้วยโดเมนเริ่มต้น แต่เราต้องการกำจัดสิ่งนั้น
สิ่งที่ฉันได้ทำไปแล้ว (และสิ่งที่เคยทำมาก่อน) เพื่อเปลี่ยนชื่อบริการmydb.foo.bar
เป็นmydb
เท่านั้น:
alter system set service_names = 'mydb' scope = both;
alter database rename global_name to mydb;
ซึ่งดูเหมือนว่าจะได้ทำงาน:
SQL> แสดงชื่อพารามิเตอร์ NAME ประเภทค่า ------------------------------------ ----------- --- --------------------------- 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 | NAME | ชื่อเครือข่าย ----------- + ----------------- + -------------------- 1 | พื้นหลัง SYS $ 2 | ผู้ใช้ SYS $ 3 | mydb | mydb 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'); BEGIN dbms_service.delete_service ('mydb.foo.bar'); END; * * * * ข้อผิดพลาดที่บรรทัด 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
(ศูนย์)
ฉันยังสร้างบริการ Windows อีกครั้งโดยใช้ oradim แต่ไม่มีประโยชน์
มีอยู่ช่วงหนึ่งที่ฉันวิ่ง
alter system set service_names = 'mydb,mydb.foo.bar' scope = both;
อาจเป็นเหตุผลที่ฉันมีทั้งตอนนี้หรือไม่
แต่หลังจากเปลี่ยน service_name เป็นชื่อเดียวแล้วชื่อที่สองควรหายไปใช่ไหม?
ถ้าฉันไม่สามารถทำให้บริการที่สองหายไปมันจะเพียงพอที่จะทำให้อินสแตนซ์ลงทะเบียนกับผู้ฟังโดยใช้ชื่อบริการสั้น ๆ แทนที่จะเป็นบริการยาว
ฉันแน่ใจว่าฉันพลาดอะไรบางอย่างที่ชัดเจน แต่ฉันไม่สามารถเข้าใจได้ว่ามันคืออะไร