แยกออกหรือเชื่อมต่อคืออะไรและทำงานอย่างไร
เราจะเริ่มด้วยการแยกออก เมื่อคุณแยกฐานข้อมูลใน SQL Server คุณกำลังออฟไลน์ฐานข้อมูลและลบออกจากอินสแตนซ์ SQL Server ที่คุณกำลังถอดออก ข้อมูลฐานข้อมูลและไฟล์บันทึกยังคงอยู่ในชั้นเชิงและอยู่ในสถานะที่สอดคล้องกันดังนั้นคุณจึงสามารถแนบฐานข้อมูลในภายหลังหรืออินสแตนซ์ของ SQL Server อื่น แนบเชื่อมต่อข้อมูลและไฟล์บันทึกจากฐานข้อมูลที่ถูกถอดออกอย่างถูกต้อง (หรือถูกคัดลอกจากอินสแตนซ์ที่ปิดระบบอย่างสมบูรณ์ของ SQL Server) ไปยังอินสแตนซ์ของ SQL Server และนำฐานข้อมูลออนไลน์
ฉันจะแยกฐานข้อมูลได้อย่างไร
คุณสามารถทำได้ใน T-SQL หรือจาก SQL Server Management Studio GUI
ใน GUI คุณคลิกขวาบนฐานข้อมูลที่คุณต้องการที่จะแยกออกเลือกและคลิกที่All Tasks Detachจากนั้นคุณจะได้รับกล่องโต้ตอบแยก คุณสามารถเลือกที่จะวางการเชื่อมต่อก่อนเพื่อบังคับให้ยกเลิกการเชื่อมต่อที่ใช้งานอยู่และการย้อนกลับที่พวกเขากำลังดำเนินการ นอกจากนี้คุณยังสามารถเลือกอัปเดตสถิติก่อนที่จะถอดออกได้

ใน T-SQL:
-- You don't want to be in the database you are trying to detach
USE Master
GO
-- Optional step to drop all active connections and roll back their work
ALTER DATABASE DatabaseName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
-- Perform the detach
EXEC sp_detach_db 'DatabaseName'
GO
สำหรับโพรซีเดอร์ที่เก็บไว้ในระบบ sp_detach_db มีพารามิเตอร์สองตัวที่คุณสามารถผ่านได้:
@skipchecks- อินพุตที่ยอมรับได้คือ'True'หรือ'False'ถ้า'True'SQL Server จะอัปเดตสถิติก่อนที่จะแยกออก ถ้า ' False'มันจะไม่ หากคุณไม่ระบุอะไรที่นี่สถิติจะได้รับการอัปเดตใน SQL Server 2005 หรือใหม่กว่า
@keepfulltextindexfile- ค่าเริ่มต้นที่นี่คือ'True'- หากตั้งค่าเป็นจริงข้อมูลเมตาของดัชนีข้อความแบบเต็มจะไม่ถูกทิ้งระหว่างการถอด
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการแยกออกและรายละเอียดเพิ่มเติมเกี่ยวกับความเสี่ยงที่ฉันเน้นด้านล่างบทความ Books Onlineสำหรับsp_detach_dbเป็นจุดเริ่มต้นที่ดี
ฉันจะแนบฐานข้อมูลได้อย่างไร
คุณสามารถทำได้ใน T-SQL หรือจาก SQL Server Management Studio GUI
( หมายเหตุ: หากคุณมีข้อมูลและไฟล์บันทึกจากฐานข้อมูลที่ไม่ได้ถอดออกอย่างถูกต้องไฟล์แนบของคุณอาจไม่ทำงานเมื่อมีการปลดเกิดขึ้นฐานข้อมูลจะถูกออฟไลน์และไฟล์บันทึกและข้อมูลจะอยู่ในสถานะที่สอดคล้องกัน เกิดขึ้นเมื่อบริการถูกปิดอย่างสมบูรณ์ )
ใน GUI คุณคลิกขวาที่ระดับบนโฟลเดอร์สำหรับอินสแตนซ์ของคุณและเลือกDatabases Attachในกล่องโต้ตอบถัดไปคุณจะต้องเลือกไฟล์ข้อมูลหลัก (.MDF) ของฐานข้อมูลที่คุณต้องการแนบและให้แน่ใจว่าคุณได้เลือกไฟล์อื่น ๆ และระบุตำแหน่งที่เหมาะสมแล้วคลิกตกลงติดฐานข้อมูลของคุณ
ใน T-SQL วิธีที่ดีที่สุดในการทำเช่นนี้ใน SQL Server 2005 และส่งต่อคือผ่านCREATE DATABASEคำสั่ง นี่คือวิธีที่ได้รับการสนับสนุนนอกเหนือจาก SQL Server 2012 หากคุณต้องการดูวิธีการใช้งานsp_attach_dbคุณสามารถเห็นได้ว่าในบทความหนังสือออนไลน์สำหรับ[sp_attach_db][3]หรือ[sp_attach_single_file_db][4]
เมื่อคุณมีไฟล์บันทึกและไฟล์ข้อมูลและสอดคล้องกันนี่เป็นวิธีการ T-SQL:
- การใช้สร้างฐานข้อมูลและส่วนคำสั่ง FOR ATTACH เพื่อแนบ
CREATE DATABASE DatabaseName
ON (FILENAME = 'FilePath\FileName.mdf'), -- Main Data File .mdf
(FILENAME = 'FilePath\LogFileName.ldf'), -- Log file .ldf
(FILENAME = 'FilePath\SecondaryDataFile.ndf) -- Optional - any secondary data files
FOR ATTACH
GO
คุณสามารถดูเพิ่มเติมเกี่ยวกับคำสั่งสร้างฐานข้อมูลในหนังสือออนไลน์ได้เช่นกัน
ฉันจะแยก / แนบใน SQL Server Express ได้อย่างไร
มันเหมือนกันจริงๆ หากคุณใช้ SQL Server Management Studio Express คุณสามารถใช้กล่องโต้ตอบแยก / แนบใน GUI ที่อธิบายไว้ข้างต้นหรือขั้นตอน T-SQL ผ่าน SSMS Express ที่อธิบายไว้ข้างต้นเช่นกัน ไม่มีความแตกต่างกับ Express ตรงนั้น
หากคุณไม่มี SSMS Express คุณสามารถดาวน์โหลดได้ ( นี่คือเวอร์ชันของ SQL Server 2012 Express)
ของคุณสามารถเข้าสู่SQLCMDเซสชั่นและใช้โครงสร้าง T-SQL เดียวกันที่อธิบายไว้ข้างต้น
เมื่อใดที่ฉันควรพิจารณาทำการถอดหรือติดตั้ง
สิ่งแรกที่คำว่า detach และ attach นั้นไม่ได้มีไว้สำหรับใช้งาน: Backup and Recovery Detach and Attach ไม่ใช่วิธีการสำรองฐานข้อมูลของคุณเพื่อการกู้คืนตามปกติ ไม่มีการสำรองข้อมูลบันทึกธุรกรรมด้วยวิธีนี้มันทำให้ฐานข้อมูลของคุณอยู่ในสถานะที่สามารถลบไฟล์ฐานข้อมูลโดยไม่ตั้งใจได้และไม่ใช่วิธีที่ดีสำหรับวัตถุประสงค์นี้
ที่กล่าวว่าการถอดและการแนบเป็นสิ่งที่ดีสำหรับการใช้งานบางกรณี (ไม่ละเอียดถี่ถ้วนสามารถแก้ไขเพื่อเพิ่มหรือสร้างคำตอบใหม่ได้มากขึ้น):
- บางครั้งสำหรับการย้ายข้อมูล (แม้ว่าฉันต้องการสำรอง / กู้คืนสำหรับผู้ที่กล่าวถึงในคำตอบของฉันที่นี่ )
- เมื่อคุณต้องการลบฐานข้อมูลที่ไม่ได้ใช้งานอีกต่อไป แต่มีความสามารถในการแนบในภายหลังตามต้องการ
- ในบางสถานการณ์การแก้ไขปัญหานี้อาจถูกเรียกใช้
- ไม่มีพื้นที่ในการสำรองข้อมูลหรือกู้คืนข้อมูลและล็อกไฟล์ไปยังสภาพแวดล้อมอื่น (คุณไม่ควรอยู่ที่นี่ แต่ฉันเคยใช้มันเพื่อย้ายฐานข้อมูล dev รอบ ๆ สภาพแวดล้อมในบางครั้ง .. ไม่ต้องการหรือต้องการ บันทึกจึงแนบ / สร้างไฟล์บันทึกใหม่)
ความเสี่ยงและคำเตือน
อีกครั้งหนังสือออนไลน์เป็นแหล่งข้อมูลที่ดีที่นี่แต่ฉันจะขอพิจารณาข้อพิจารณาเฉพาะบางประการเพื่อระลึกถึงการแยกหรือแนบฐานข้อมูล -
ถอด
- คุณกำลังทำให้ฐานข้อมูลของคุณออฟไลน์ มันจะไม่สามารถเข้าถึงได้อีกต่อไป สิ่งนี้ควรชัดเจน แต่ควรเรียกว่าคุ้มค่า นี่คือเหตุผลที่มันไม่ใช่ตัวเลือกการสำรองข้อมูลที่ดี
- เมื่อฐานข้อมูลของคุณออนไลน์ SQL Server จะล็อกไฟล์ ฉันจะไม่แนะนำให้ลองทำสิ่งนี้เพื่อพิสูจน์ว่าฉันผิดเพราะอาจมีสถานการณ์อื่นที่กำลังเล่นอยู่ แต่โดยทั่วไปคุณไม่สามารถลบไฟล์ฐานข้อมูล (ข้อมูลข้อมูลรองหรือไฟล์บันทึก) ในขณะที่ SQL Server ออนไลน์อยู่ นี่เป็นสิ่งที่ดี เมื่อคุณแยกคุณจะไม่มีการป้องกันเช่นนี้ - อาจเป็นเรื่องเลวร้าย
- หากคุณกำลังจัดการกับความเสียหายของฐานข้อมูลและคุณพบบทความบางแห่งที่มีขั้นตอนแรกของการแยกออก - มันผิด - ถ้าคุณแยกฐานข้อมูลที่เสียหายนั่นอาจเป็นได้ คุณอาจไม่ได้แนบฐานข้อมูลนั้นอีกครั้ง
- การตัดและวางไฟล์ฐานข้อมูลการผลิตของคุณทั่วทั้งเครือข่ายเป็นวิธีหนึ่งที่จะทำให้เกิดความเสียหายในระดับไฟล์ .. อีกเหตุผลหนึ่งที่ฉันต้องการสำรอง / กู้คืนเมื่อทำการย้ายข้อมูล
- มันอาจทำให้แผนการบำรุงรักษาล้มเหลว สถานการณ์คือที่คุณมีตั้งแผนบำรุงรักษาเพื่อดำเนินการสำรองข้อมูลปกติของฐานข้อมูลทั้งหมดโดยไม่ต้องตรวจสอบการปฏิบัติที่ดีที่สุด วิธีนี้ใช้งานได้ดีดังนั้นคุณจึงหยุดคิดถึงมัน คนอื่นตัดสินใจที่จะใช้ฐานข้อมูลที่พวกเขาไม่ได้ใช้ออฟไลน์ แผนการบำรุงรักษาจะล้มเหลวจากจุดนั้นไปข้างหน้าจนกว่าคุณจะแก้ไขแผนการบำรุงรักษาโดยการตรวจสอบตัวเลือก "ละเว้นฐานข้อมูลที่สถานะไม่ออนไลน์" ในกล่องโต้ตอบ "ฐานข้อมูล" โปรดทราบว่าจะไม่เพียง แต่ล้มเหลวสำหรับฐานข้อมูลออฟไลน์ - แผนการบำรุงรักษาจะล้มเหลวพร้อมข้อผิดพลาด ณ เวลาที่พยายามสำรองฐานข้อมูลออฟไลน์ดังนั้นฐานข้อมูลออนไลน์บางแห่งอาจไม่ได้สำรองไว้ (ผู้แต่งคนละคนสำหรับประเด็นนี้จงปฏิบัติด้วยความสงสัย)
แนบ
- เช่นเดียวกับที่คุณไม่ควรเรียกใช้สคริปต์จากอินเทอร์เน็ตหรือรับแพคเกจจากคนแปลกหน้าที่สนามบินคุณไม่ควรแนบฐานข้อมูลที่คุณได้รับจากผู้อื่นโดยไม่มีขั้นตอนในการตรวจสอบ ฐานข้อมูลนี้อาจมีรหัสอยู่ในนั้นในทริกเกอร์, ขั้นตอนการจัดเก็บและอื่น ๆ ที่อาจเป็นอันตรายต่อสภาพแวดล้อมของคุณ คุณควรตรวจสอบฐานข้อมูลที่คุณต้องการแนบในสภาพแวดล้อมที่ปลอดภัยและไฟร์วอลล์ไม่ใช่ระบบที่ใช้งานจริงของคุณ
แล้ว SQL Server รุ่นต่างๆหรือรุ่นที่ต่างกันล่ะ?
สิ่งเหล่านี้ไม่แตกต่างจากกฎการกู้คืนฐานข้อมูลระหว่างเวอร์ชัน โดยทั่วไปคุณสามารถคืนค่าได้ถึงเวอร์ชันถัดไปสำหรับรุ่น 3 (SQL Server 2008 ถึง SQL Server 2012 ตัวอย่างเช่นจะทำงาน SQL Server 2000 ไปยัง SQL Server 2012 จะไม่) คุณไม่สามารถย้อนกลับได้เลยด้วยการสำรอง / กู้คืนหรือถอด / แนบ - คุณจะต้องคัดแยกวัตถุและสคริปต์แทรกออกและทำด้วยตนเองหรือด้วยเครื่องมือที่ทำสิ่งนี้ สำหรับรุ่นต่าง ๆ โดยทั่วไปคุณสามารถย้ายระหว่าง SKU หลักของ SQL Server - ตัวอย่างเช่นคุณสามารถย้ายฐานข้อมูลจาก Standard ไปยัง Enterprise โดยไม่มีงานพิเศษ หากคุณใช้คุณสมบัติขององค์กร (พูดบีบอัดหรือแบ่งพาร์ติชัน) คุณจะต้องปิดใช้งานคุณลักษณะเหล่านั้นก่อนที่จะทำการย้าย คุณสามารถรับทราบคุณสมบัติที่คุณต้องการ