ไม่สามารถเปลี่ยนชื่อบริการสำหรับ Oracle


9

ฉันพยายามเปลี่ยนชื่อบริการของการติดตั้ง 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 เป็นชื่อเดียวแล้วชื่อที่สองควรหายไปใช่ไหม?

ถ้าฉันไม่สามารถทำให้บริการที่สองหายไปมันจะเพียงพอที่จะทำให้อินสแตนซ์ลงทะเบียนกับผู้ฟังโดยใช้ชื่อบริการสั้น ๆ แทนที่จะเป็นบริการยาว

ฉันแน่ใจว่าฉันพลาดอะไรบางอย่างที่ชัดเจน แต่ฉันไม่สามารถเข้าใจได้ว่ามันคืออะไร

คำตอบ:


5

ฉันแน่ใจว่าฉันพลาดอะไรบางอย่างที่ชัดเจน แต่ฉันไม่สามารถเข้าใจได้ว่ามันคืออะไร

ใช่มันเป็นสิ่งที่ชัดเจนมาก ...

พารามิเตอร์ที่DB_DOMAINยังคงมีอยู่และดังนั้นจึงอินสแตนซ์ที่ลงทะเบียนตัวเองใช้foo.barmydb.foo.bar

หลังจากทำ

alter system set db_domain='' scope=spfile; 

และตีกลับฐานข้อมูลทุกอย่างทำงานตามที่คาดไว้ในขณะนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.