SID แตกต่างจากชื่อบริการใน Oracle tnsnames.ora อย่างไร


คำตอบ:


154

อ้างอิงโดย @DAC

กล่าวโดยย่อ: SID = ชื่อเฉพาะของฐานข้อมูลของคุณ ServiceName = นามแฝงที่ใช้เมื่อเชื่อมต่อ

ไม่จริงอย่างเคร่งครัด SID = ชื่อเฉพาะของ INSTANCE (เช่นกระบวนการ oracle ทำงานบนเครื่อง) Oracle ถือว่า "ฐานข้อมูล" เป็นไฟล์

ชื่อบริการ = นามแฝงของ INSTANCE (หรือหลายครั้ง) วัตถุประสงค์หลักของการทำเช่นนี้คือถ้าคุณใช้งานคลัสเตอร์ลูกค้าสามารถพูดว่า "เชื่อมต่อฉันกับ SALES.acme.com" DBA สามารถทำงานได้ทันทีเปลี่ยนจำนวนอินสแตนซ์ที่มีให้กับคำขอ SALES.acme.com หรือแม้แต่ย้าย SALES.acme.com ไปยังฐานข้อมูลที่แตกต่างอย่างสิ้นเชิงโดยที่ลูกค้าไม่จำเป็นต้องเปลี่ยนการตั้งค่าใด ๆ


1
ดังนั้นในตัวอย่างของคุณอาจจะมี SIDs Sales1, Sales2และSales3ทั้งหมดที่มีอยู่ผ่านทางชื่อบริการSales?

1
ฉันคิดว่าสิ่งที่ตรงกันข้ามคือกรณี: คุณมี SID หนึ่งรายการซึ่งมีให้บริการหลายอย่าง จากนั้นคุณสามารถใช้บริการหนึ่งและชี้ไปที่ SID / ฐานข้อมูลอื่น
Colin Nicholls

เราสามารถมีชื่อ Oracle SID เหมือนกับชื่อ TNS ได้หรือไม่ มันจะเป็นปัญหาหรือไม่?
user2441441

2
@ user2441441: ไปตามคำอธิบายที่ Matthew ให้มาฉันคิดว่าคุณคิดถูกว่ามี SID หลายตัวและเมื่อบริการที่เป็นนามธรรม SID ทั้งหมด
Dwarak

26

โปรดดู: 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 = นามแฝงที่ใช้เมื่อเชื่อมต่อ


ฉันสับสน ไม่ควรเป็นอย่างนั้นใน RAC คุณจะมี "INSTANCE_NAME" ที่แตกต่างกันในแต่ละครั้ง และ SERVICE_NAME หนึ่งรายการอาจเชื่อมโยงกับหลายกรณีได้หรือไม่
Iwan Satria

20

ฉันรู้ว่านี่เป็นของโบราณ แต่เมื่อต้องรับมือกับเครื่องมือที่มีการใช้งานอย่างพิถีพิถันผู้ใช้หรืออาการ: การตั้งชื่อ 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)
  )
)

ฉันแค่คิดว่าฉันจะออกจากที่นี่เพราะมันมีความเกี่ยวข้องกับคำถามเล็กน้อยและจะมีประโยชน์เมื่อพยายามที่จะสานความแปลกประหลาดของออราเคิลเครือข่าย


5

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


0

ตามอภิธานศัพท์ Oracle:

SID เป็นชื่อเฉพาะสำหรับอินสแตนซ์ฐานข้อมูล Oracle ---> เพื่อสลับระหว่างฐานข้อมูล Oracle ผู้ใช้จะต้องระบุ SID ที่ต้องการ <--- SID รวมอยู่ในส่วน CONNECT DATA ของตัวอธิบายการเชื่อมต่อในไฟล์ TNSNAMES.ORA และในคำจำกัดความของฟังเครือข่ายในไฟล์ LISTENER.ORA หรือที่เรียกว่า System ID ชื่อบริการของออราเคิลอาจมีความหมายเหมือนกับ "MyOracleServiceORCL" ใน Windows คุณสามารถชื่อบริการของคุณทำงานเป็นบริการภายใต้บริการ Windows

คุณควรใช้ SID ใน TNSNAMES.ORA เป็นแนวทางที่ดีกว่า

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