ฉันใช้เพื่อย้ายฐานข้อมูลเกือบตลอดเวลาเนื่องจากการกำหนดค่า SAN ใหม่และการย้ายข้อมูล
สมมติว่าคุณกำลังย้ายเซิร์ฟเวอร์ทั้งหมดในเวลาเดียวกันฉันจะไปกับเส้นทางของคุณ # 2 (ถ้าคุณย้ายฐานข้อมูลทีละหนึ่งและในที่สุดก็ทำทุกฐานข้อมูลบนเซิร์ฟเวอร์นั่นจะเป็นปัญหามากกว่าเพราะคุณจะต้องเปลี่ยนพา ธ ไปยังไฟล์)
โปรดทราบว่า "single_user" ไม่ได้แปลว่าคุณ คุณสามารถไปที่ DBCC CHECKDB ฐานข้อมูลและไม่สามารถเข้าไปได้เพราะมีบางคนอยู่ในนั้น เตรียมสคริปต์ที่คุณสามารถเรียกใช้เพื่อบูต "ทุกคน แต่คุณ" ออกจากฐานข้อมูลและเก็บไว้ในที่ที่สะดวก โปรดทราบว่า SQL 2000 ไม่มีคุณลักษณะ "กันทุกคน" เหมือนกับรุ่นที่ทันสมัยกว่า
หนึ่งในเคล็ดลับเก่าคือการหยุดบริการ SQL Server ชั่วคราว วิธีนี้จะป้องกันการเข้าสู่ระบบใหม่ แต่ทุกคนที่เชื่อมต่อแล้วสามารถดำเนินการต่อได้ตามปกติ ดังนั้น: เชื่อมต่อผ่านหน้าต่าง SSMS เพื่อให้คุณสามารถทำงานได้จากนั้นหยุดบริการชั่วคราวจากนั้นเริ่มต้นการเชื่อมต่อที่ไม่พึงประสงค์ทำสิ่งต่างๆผ่านทางหน้าต่างคำสั่ง SSMS (ไม่ใช่ GUI มันจะทำให้และหยุดการเชื่อมต่อจำนวนมาก) บริการ. คำเตือน: ฉันไม่แน่ใจว่าจะเล่นในคลัสเตอร์อย่างไร มันอาจต้องการที่จะล้มเหลว
การมีวิธีที่จะป้องกันไม่ให้ผู้ใช้แอปทั้งหมดอยู่ในเซิร์ฟเวอร์จนกว่าคุณจะทำงานเสร็จ มิฉะนั้นการเชื่อมต่ออาจเริ่มต้นขึ้นมาในขณะที่คุณพยายามทำสิ่งต่าง ๆ ที่อาจนำไปสู่การช่วงชิงทรัพยากรและ / หรือความเชื่องช้า ฉันใช้วิธีต่อไปนี้ในอดีตโดยขึ้นอยู่กับสถานการณ์ที่แน่นอน: ปิดเซิร์ฟเวอร์แอปการใช้ฐานข้อมูล ALTER .. SET RESTRICTED_USER (หากบัญชีแอปเป็นสมาชิกของบทบาท db_owner, sysadmin หรือ dbcreator นั่นเป็นปัญหา ) บอกผู้ใช้ว่าระบบจะออฟไลน์ในเวลาที่กำหนดเช่นเช้าวันอาทิตย์ (สิ่งนี้จะไม่ทำงานในสภาพแวดล้อม 24x7 แบบ "ของจริง") ถอดปลั๊ก NIC ที่หันหน้าไปทางแอปเซิร์ฟเวอร์หรือผู้ใช้ (ในกรณีนี้ฉันสามารถเชื่อมต่อผ่าน NIC อื่นที่เชื่อมต่อกับเครือข่ายผู้ดูแลระบบเท่านั้นหรือผ่าน ILO)
การถอดฐานข้อมูลจำนวนมากและทำการติดตั้งซ้ำอาจเป็นงานจำนวนมาก หากคุณทำเช่นนั้นตรวจสอบให้แน่ใจว่าคุณได้เขียนสคริปต์ "แนบ" ไว้ล่วงหน้า
ฉันประสบความสำเร็จในการหยุด SQL Server คัดลอกทุกอย่างเปลี่ยนอักษรชื่อไดรฟ์และเริ่ม SQL Server ไม่มีการแยก / ติด ตราบใดที่ SQL Server ปิดอยู่และคุณกำลังคัดลอกไฟล์ (ไม่ใช่ MOVING) คุณจะไม่พบปัญหามากเกินไปแม้ว่าคุณจะย้ายฐานข้อมูลระบบ เนื่องจากเส้นทางเหมือนกัน SQL Server จะไม่ตระหนักถึงสิ่งใดที่เปลี่ยนแปลงไปในขณะที่ปิดการให้บริการ เพียงให้แน่ใจว่าคุณได้รับตัวอักษรไดรฟ์ที่ชี้ไปที่ไดรฟ์ข้อมูลที่ถูกต้องหรือสิ่งต่าง ๆ จะไม่ดีสำหรับคุณ
ปัญหาที่พบบ่อยที่สุดของฉันคือไม่ได้รับ ACLs ในไดเรกทอรีไฟล์ที่ถูกต้อง SQL Server รุ่นที่ทันสมัยกว่านั้นดีกว่าในการตั้งค่าเฉพาะสิทธิ์ที่บัญชีบริการต้องการในขณะที่รุ่นเก่าดูยุ่งเหยิงน้อยลง หากคุณลืมตั้ง ACLs และบัญชีบริการไม่ใช่ผู้ดูแลระบบท้องถิ่น (ไม่ใช่ที่ฉันแนะนำให้) ฐานข้อมูลอย่างน้อยหนึ่งฐานข้อมูลอาจไม่เปิดเมื่ออินสแตนซ์เริ่มทำงาน อย่าตกใจเพียงแค่เปลี่ยน ACL และแนบฐานข้อมูล
โดยทั่วไปฉันใช้ ROBOCOPY เพื่อทำงานประเภทนี้ มีสวิตช์บรรทัดคำสั่งเพื่อรักษา ACLs
การใช้การคำนวณ / การตรวจสอบ CRC ไม่ใช่ความคิดที่ดี แต่ฉันไม่เคยทำ เมื่อฐานข้อมูลกลับมาฉันจะเรียกใช้ CHECKDB () กับพวกเขาทั้งหมด ฉันมักจะเตรียมสคริปท์ล่วงหน้าล่วงหน้าแทนที่จะพึ่งงานบำรุงรักษาด้วยตนเอง ด้วยวิธีนี้ฉันสามารถตรวจสอบฐานข้อมูลขนาดเล็กสองสามตัวแรกก่อนตรวจสอบฐานข้อมูลขนาดใหญ่ซึ่งอาจใช้เวลาหลายนาทีหรือหลายชั่วโมงในการรัน ฉันสงสัยว่าการตรวจสอบ CRC (หรือเครื่องมือเปรียบเทียบข้อมูล Redgate) จะพบบางสิ่งที่ CHECKDB () จะพลาดและถ้าเป็นเช่นนั้น SQL Server จะไม่สามารถแก้ไขได้
หลังจากที่ฉันคัดลอกไฟล์ แต่ก่อนที่ฉันจะรีสตาร์ทอินสแตนซ์ฉันจะไปและเปลี่ยน filepath ของโฟลเดอร์ OLD โดยการเปลี่ยนชื่อหนึ่งในโฟลเดอร์ นี่คือการตรวจสอบเพิ่มเติมกับ "อุ๊ปส์เซิร์ฟเวอร์ยังคงชี้ไปที่ไฟล์เก่า" ปัญหา
อย่ารีบปล่อยไฟล์เก่าและกู้คืนพื้นที่เก็บข้อมูลเก่าและตรวจสอบให้แน่ใจว่าการสำรองข้อมูลเต็มรูปแบบของคุณทำงานได้สำเร็จ ทดสอบกู้คืนข้อมูลสำรองสองสามรายการไปที่อื่น เมื่อคุณมี checkdb () ที่ทำงานได้ดีและมีการสำรองข้อมูลที่ดีแล้วคุณสามารถนึกถึงการทิ้งที่เก็บข้อมูลเก่าและปิด Lefthand
ปัญหาที่เลวร้ายที่สุดที่ฉันเคยมีกับการย้ายถิ่นเหล่านี้เกิดขึ้นหลังจากที่ฉันคิดว่าฉันทำเสร็จแล้ว นั่นจะเป็นผู้ดูแลระบบ SAN บอกฉันว่ามีบางอย่างเกิดขึ้นและระบบไฟล์ของฉันถูกสัญญาณรบกวน (แบ่งส่วนใหม่ฟอร์แมตคัดลอกอีกครั้ง)
ปัญหาที่น่าสนุกอีกอย่างคือ SAN กำลังช้าโดยไม่มีเหตุผลที่ชัดเจน หากคุณคิดว่าจะใช้เวลา 10 ชั่วโมงในการคัดลอกข้อมูลของคุณและคุณถูกคัดลอก 30% ที่หมายเลขชั่วโมงที่ 9 แสดงว่าคุณมีปัญหา ดูเวลาถ่ายโอน (robocopy แสดง% คัดลอกและให้เวลาโดยประมาณหรือคุณสามารถใช้ Perfmon) และมีแผนสำรองหากมีบางอย่างผิดปกติ
นอกจากนี้ฉันไม่แน่ใจว่าไดรฟ์ข้อมูลของคุณจะได้รับการแบ่งพาร์ติชันให้คุณหรือไม่ แต่คุณอาจต้องการตรวจสอบให้แน่ใจว่ามีการใช้ออฟเซ็ต 1 MB สำหรับ Windows Server 2008 และที่ดีกว่านี้ไม่น่าจะมีปัญหา สำหรับ OS ที่เก่ากว่าก็คือ มีสิ่งที่เป็น googlable มากมายในที่นี้และที่เก็บข้อมูลของคุณควรรู้เกี่ยวกับมัน แต่ฉันถาม