อาการ
เมื่อคุณคืนค่าฐานข้อมูลจากสำเนาสำรองโดยใช้ตัวเลือกแทนที่ใน Microsoft SQL Server ๒๐๑๒ชื่อไฟล์ที่ มี อยู่จริงของฐานข้อมูลที่ได้รับการคืนค่าที่มาจากฐานข้อมูลสำเนาสำรองอาจเขียนทับชื่อไฟล์ที่มีอยู่จริงของฐานข้อมูลที่มีอยู่ ตัวอย่างเช่นพิจารณาสถานการณ์สมมติต่อไปนี้:
-
คุณมีอินสแตนซ์ของ SQL Server, InstanceA และ InstanceB สองอินสแตนซ์
-
คุณมีฐานข้อมูลที่มีชื่อเดียวกัน SQLDB บนแต่ละอินสแตนซ์ของ SQL Server
-
บน InstanceA ชื่อไฟล์ข้อมูลของฐานข้อมูล SQLDB คือ DB1_InstanceA mdf และชื่อไฟล์บันทึกจะ DB1_InstanceA. ldf
-
บน InstanceB ชื่อไฟล์ข้อมูลของฐานข้อมูล SQLDB คือ DB1_InstanceB mdf และชื่อไฟล์บันทึกจะ DB1_InstanceB. ldf
-
คุณพยายามคืนค่าสำเนาสำรองของฐานข้อมูล SQLDB จาก InstanceA ผ่านฐานข้อมูล SQLDB จาก InstanceB โดยใช้ตัวเลือกการแทนที่ของคำสั่งการคืนค่า
ในสถานการณ์สมมตินี้ชื่อไฟล์ที่มีอยู่จริงบน SQLDB บน InstanceB จะถูกเปลี่ยนเป็น DB1_InstanceA mdf และ DB1_InstanceA. ldf
สาเหตุ
ลักษณะการทำงานนี้จะได้รับการออกแบบใน SQL Server ๒๐๑๒
วิธีแก้ไขปัญหาชั่วคราว
เมื่อต้องการแก้ไขปัญหานี้อย่าใช้ตัวเลือกการแทนที่ของคำสั่งคืนค่า ใช้แทนการใช้ตัวเลือกการย้ายหมายเหตุ ตัวเลือกการย้ายมีตัวเลือกในการเปลี่ยนชื่อไฟล์ที่ มี อยู่จริง
ข้อมูลเพิ่มเติม
ตัวเลือกที่มีการย้ายจำเป็นต้องใช้เฉพาะในครั้งแรกที่คุณใช้คำสั่งคืนค่า เมื่อคุณพยายามคืนค่าฐานข้อมูลจากการสำรองข้อมูล SQL Server จะเปรียบเทียบค่าการกู้คืนของฐานข้อมูลนั้น จากนั้นชุดการสำรองข้อมูลจะดำเนินการดังต่อไปนี้โดยขึ้นอยู่กับว่าค่าเหล่านี้ตรงกับ:
-
ถ้ามีการตรงกันชุดการสำรองข้อมูลยังคงใช้ชื่อไฟล์ของฐานข้อมูลเป้าหมาย
-
ถ้าค่าแตกต่างกันชุดการสำรองข้อมูลจะแทนที่ชื่อไฟล์ที่มีอยู่จริงของฐานข้อมูลเป้าหมายโดยใช้ชื่อจากชุดการสำรองข้อมูล
เมื่อคุณใช้ตัวเลือกการย้ายร่วมกับคำสั่งการคืนค่าการดำเนินการต่อไปนี้จะถูกนำไปใช้:
-
ตัวแบ่งการกู้คืนข้อมูลใหม่จะถูกสร้างขึ้นบนเซิร์ฟเวอร์เป้าหมาย
-
ในการดำเนินการคืนค่าถัดไป Id การเข้าร่วมการกู้คืนจากชุดการสำรองข้อมูลจะถูกจับคู่กับ Id ของเซิร์ฟเวอร์เป้าหมาย
-
คำสั่ง คืนค่าที่ใช้พร้อมกับตัวเลือกแทน ที่จะเก็บชื่อจริงบนเซิร์ฟเวอร์เป้าหมาย
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งการ คืนค่า ให้ดูที่ คืนค่า (Transact SQL)