ในระบบฐานข้อมูล 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 SID | 1 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) โดยคุณสามารถตรวจสอบค่าปัจจุบันได้ผ่านคำสั่ง SQLSHOW 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 เปรียบเสมือน “พนักงาน” แต่ละคนที่คอยให้บริการ การติดต่อผ่านชื่อบริษัท ทำให้ธุรกิจดำเนินต่อไปได้แม้พนักงานคนใดคนหนึ่งจะไม่อยู่ ซึ่งช่วยให้ระบบฐานข้อมูลมีความเสถียรและจัดการได้ง่ายขึ้นในระยะยาวครับ
อ่านเพิ่มเติม