วัน: 5 สิงหาคม 1982

Oracle: Service NameOracle: Service Name

ในระบบฐานข้อมูล Oracle คำว่า Service Name ถือเป็นหัวใจสำคัญในการเชื่อมต่อระหว่าง Client กับ Database Instance เลยครับ หากจะอธิบายให้เข้าใจง่ายที่สุด มันคือ “ชื่อเรียกแทนตัวตนของระบบฐานข้อมูลในระดับเครือข่าย” นั่นเอง

นี่คือรายละเอียดเชิงลึกที่จะช่วยให้คุณเข้าใจความหมายและวิธีการทำงานของมันครับ


Service Name คืออะไร ?

Service Name คือชื่อที่เป็น Logical Identity ของฐานข้อมูลที่ประกาศตัวตนให้ Network Listener ได้รับทราบ เพื่อให้ Client สามารถระบุได้ว่าต้องการเชื่อมต่อกับบริการ ใดบนเซิร์ฟเวอร์

ก่อนหน้านี้ Oracle ใช้สิ่งที่เรียกว่า SID ในการเชื่อมต่อ ซึ่งระบุเจาะจงไปที่ตัว Instance แต่ Service Name ถูกออกแบบมาให้มีความยืดหยุ่นกว่ามาก โดยเฉพาะในสภาพแวดล้อมแบบ High Availability หรือ Distributed Systems


ความแตกต่างระหว่าง Service Name และ SID

คนส่วนใหญ่มักสับสนระหว่างสองสิ่งนี้ ตารางด้านล่างนี้จะช่วยแยกแยะให้ชัดเจนขึ้นครับ

คุณสมบัติSID Service Name
ความหมายระบุตัวตนของ Instance ระบุตัวตนของบริการฐานข้อมูล
การใช้งาน1 Instance = 1 SID1 Instance สามารถมีได้หลาย Service Names
ความยืดหยุ่นตึงตัว เปลี่ยนแปลงยากยืดหยุ่นมาก เหมาะกับงาน Load Balancing
RAC Supportระบุได้แค่ Node เดียวสามารถรวมหลาย Node ไว้ภายใต้ชื่อเดียวได้

ทำไมต้องใช้ Service Name ?

การใช้ Service Name มีข้อดีเหนือกว่า SID ในหลายด้าน ดังนี้

  • Oracle RAC : ในระบบที่มีหลาย Instance ทำงานร่วมกัน คุณสามารถตั้งชื่อ Service Name เดียวเพื่อให้ครอบคลุมทุก Instance ได้ หาก Node หนึ่งเสีย ระบบจะสลับไปทำงานที่ Node อื่นโดยที่แอปพลิเคชันไม่ต้องเปลี่ยน Connection String
  • Workload Management: คุณสามารถแบ่ง Service Name ตามแผนกได้ เช่น hr_service สำหรับฝ่ายบุคคล และ sale_service สำหรับฝ่ายขาย เพื่อจำกัดทรัพยากรหรือติดตามการใช้งานแยกกัน
  • Data Guard: ในการทำฐานข้อมูลสำรอง เราสามารถใช้ Service Name เพื่อแยกแยะระหว่างฐานข้อมูลหลัก และฐานข้อมูลที่ใช้อ่านอย่างเดียว

วิธีการดูและตั้งค่า Service Name

ปกติแล้ว Service Name มักจะมีค่าเริ่มต้นเหมือนกับชื่อฐานข้อมูล (Global Database Name) โดยคุณสามารถตรวจสอบค่าปัจจุบันได้ผ่านคำสั่ง SQL
SHOW PARAMETER service_names;
หรือตรวจสอบจากไฟล์ tnsnames.ora ที่ฝั่ง Client ซึ่งจะมีลักษณะการเขียนดังนี้

MY_DB_CONNECTION = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.100) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = orcl_service) -- นี่คือส่วนที่ระบุ Service Name)) 

สรุป

Service Name เปรียบเสมือน “ชื่อบริษัท” ที่ลูกค้าติดต่อเข้ามา ส่วน SID เปรียบเสมือน “พนักงาน” แต่ละคนที่คอยให้บริการ การติดต่อผ่านชื่อบริษัท ทำให้ธุรกิจดำเนินต่อไปได้แม้พนักงานคนใดคนหนึ่งจะไม่อยู่ ซึ่งช่วยให้ระบบฐานข้อมูลมีความเสถียรและจัดการได้ง่ายขึ้นในระยะยาวครับ


อ่านเพิ่มเติม