ทำไมฉันถึงต้องการสองข้อ? เมื่อฉันต้องใช้อย่างใดอย่างหนึ่ง?
ทำไมฉันถึงต้องการสองข้อ? เมื่อฉันต้องใช้อย่างใดอย่างหนึ่ง?
คำตอบ:
กล่าวโดยย่อ: SID = ชื่อเฉพาะของฐานข้อมูลของคุณ ServiceName = นามแฝงที่ใช้เมื่อเชื่อมต่อ
ไม่จริงอย่างเคร่งครัด SID = ชื่อเฉพาะของ INSTANCE (เช่นกระบวนการ oracle ทำงานบนเครื่อง) Oracle ถือว่า "ฐานข้อมูล" เป็นไฟล์
ชื่อบริการ = นามแฝงของ INSTANCE (หรือหลายครั้ง) วัตถุประสงค์หลักของการทำเช่นนี้คือถ้าคุณใช้งานคลัสเตอร์ลูกค้าสามารถพูดว่า "เชื่อมต่อฉันกับ SALES.acme.com" DBA สามารถทำงานได้ทันทีเปลี่ยนจำนวนอินสแตนซ์ที่มีให้กับคำขอ SALES.acme.com หรือแม้แต่ย้าย SALES.acme.com ไปยังฐานข้อมูลที่แตกต่างอย่างสิ้นเชิงโดยที่ลูกค้าไม่จำเป็นต้องเปลี่ยนการตั้งค่าใด ๆ
Sales1
, Sales2
และSales3
ทั้งหมดที่มีอยู่ผ่านทางชื่อบริการSales
?
โปรดดู: http://www.sap-img.com/oracle-database/finding-oracle-sid-of-a-database.htm
ความแตกต่างระหว่าง Oracle SID และ Oracle SERVICE NAMES คืออะไร เครื่องมือปรับแต่งค่าหนึ่งจะมองหา SERVICE NAME จากนั้นจะค้นหา SID ต่อไป! เกิดอะไรขึ้น?!
Oracle SID เป็นชื่อเฉพาะที่ระบุอินสแตนซ์ / ฐานข้อมูลของคุณโดยที่เป็นชื่อบริการคือชื่อแทน TNS ที่คุณให้เมื่อคุณเชื่อมต่อกับฐานข้อมูลของคุณจากระยะไกลและชื่อบริการนี้ถูกบันทึกในไฟล์ Tnsnames.ora บนไคลเอนต์ของคุณ เช่นเดียวกับ SID และคุณสามารถตั้งชื่ออื่นได้ตามต้องการ
SERVICE_NAME เป็นคุณลักษณะใหม่จาก oracle 8i เป็นต้นไปซึ่งฐานข้อมูลสามารถลงทะเบียนตัวเองกับผู้ฟังได้ หากฐานข้อมูลลงทะเบียนกับผู้ฟังด้วยวิธีนี้คุณสามารถใช้พารามิเตอร์ SERVICE_NAME ใน tnsnames.ora เป็นอย่างอื่น - ใช้ SID ใน tnsnames.ora
นอกจากนี้หากคุณมี OPS (RAC) คุณจะมี SERVICE_NAME แตกต่างกันสำหรับแต่ละอินสแตนซ์
SERVICE_NAMES ระบุชื่อตั้งแต่หนึ่งชื่อขึ้นไปสำหรับบริการฐานข้อมูลที่อินสแตนซ์นี้เชื่อมต่อ คุณสามารถระบุชื่อบริการหลายชื่อเพื่อแยกความแตกต่างระหว่างการใช้ฐานข้อมูลเดียวกันที่แตกต่างกัน ตัวอย่างเช่น:
SERVICE_NAMES = sales.acme.com, widgetsales.acme.com
คุณยังสามารถใช้ชื่อบริการเพื่อระบุบริการเดียวที่มีอยู่จากฐานข้อมูลที่แตกต่างกันสองแห่งผ่านการใช้การจำลองแบบ
ในระบบ Oracle Parallel Server คุณต้องตั้งค่าพารามิเตอร์นี้สำหรับทุกอินสแตนซ์
กล่าวโดยย่อ: SID = ชื่อเฉพาะของอินสแตนซ์ฐานข้อมูลของคุณ ServiceName = นามแฝงที่ใช้เมื่อเชื่อมต่อ
ฉันรู้ว่านี่เป็นของโบราณ แต่เมื่อต้องรับมือกับเครื่องมือที่มีการใช้งานอย่างพิถีพิถันผู้ใช้หรืออาการ: การตั้งชื่อ sid & service หนึ่งสามารถเพิ่มความยืดหยุ่นเล็กน้อยให้กับรายการ tnsnames ของคุณเช่น:
mySID, mySID.whereever.com =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myHostname)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = mySID.whereever.com)
(SID = mySID)
(SERVER = DEDICATED)
)
)
ฉันแค่คิดว่าฉันจะออกจากที่นี่เพราะมันมีความเกี่ยวข้องกับคำถามเล็กน้อยและจะมีประโยชน์เมื่อพยายามที่จะสานความแปลกประหลาดของออราเคิลเครือข่าย
SID และชื่อบริการคืออะไร
โปรดดูเอกสารของ oracle ที่https://docs.oracle.com/cd/B19306_01/network.102/b14212/concepts.htm
ในกรณีที่ลิงค์ข้างต้นไม่สามารถเข้าถึงได้ในอนาคตเวลาที่เขียนคำตอบลิงค์ด้านบนจะนำคุณไปที่หัวข้อ "บริการฐานข้อมูลและการระบุอินสแตนซ์ฐานข้อมูล" ในบทแนวคิดการเชื่อมต่อของ "คู่มือผู้ดูแลระบบบริการฐานข้อมูลสุทธิ" . คู่มือนี้จัดพิมพ์โดย oracle โดยเป็นส่วนหนึ่งของ "Oracle Database Online Documentation, 10g Release 2 (10.2)"
เมื่อฉันต้องใช้อย่างใดอย่างหนึ่ง? ทำไมฉันถึงต้องการสองข้อ?
พิจารณาการทำแผนที่ด้านล่างในสภาพแวดล้อม RAC
SID SERVICE_NAME
bob1 ผมบ๊อบ
bob2 ผมบ๊อบ
bob3 ผมบ๊อบ
bob4 บ๊อบ
หากมีการกำหนดค่า load balancing ผู้ฟังจะ 'สมดุล' ภาระงานของทั้งสี่ SID แม้ว่าการกำหนดค่าการทำโหลดบาลานซ์คุณสามารถเชื่อมต่อกับ bob1 ตลอดเวลาหากคุณต้องการโดยใช้ SID แทน SERVICE_NAME
โปรดอ้างอิงhttps://community.oracle.com/thread/4049517
ตามอภิธานศัพท์ Oracle:
SID เป็นชื่อเฉพาะสำหรับอินสแตนซ์ฐานข้อมูล Oracle ---> เพื่อสลับระหว่างฐานข้อมูล Oracle ผู้ใช้จะต้องระบุ SID ที่ต้องการ <--- SID รวมอยู่ในส่วน CONNECT DATA ของตัวอธิบายการเชื่อมต่อในไฟล์ TNSNAMES.ORA และในคำจำกัดความของฟังเครือข่ายในไฟล์ LISTENER.ORA หรือที่เรียกว่า System ID ชื่อบริการของออราเคิลอาจมีความหมายเหมือนกับ "MyOracleServiceORCL" ใน Windows คุณสามารถชื่อบริการของคุณทำงานเป็นบริการภายใต้บริการ Windows
คุณควรใช้ SID ใน TNSNAMES.ORA เป็นแนวทางที่ดีกว่า