ข้อผิดพลาดในการกู้คืนฐานข้อมูล SQL Server: แคสต์ที่ระบุไม่ถูกต้อง (SqlManagerUI)


91

ฉันใช้ SQL Server 2008 R2 Standard (เวอร์ชัน 10.50.1600.1) สำหรับเว็บไซต์ที่ใช้งานจริงและรุ่น SQL Server Express พร้อมบริการขั้นสูง (v10.50.1600.1) สำหรับ localhost ของฉันเป็นฐานข้อมูล

ไม่กี่วันหลัง SQL Server ของฉันขัดข้องและฉันต้องติดตั้ง 2008 R2 Express เวอร์ชันใหม่บน localhost ของฉัน ทำงานได้ดีเมื่อฉันกู้คืนเวอร์ชันเก่าบางรุ่นที่นำมาจาก Express edition แต่เมื่อฉันพยายามกู้คืนฐานข้อมูลจาก.bakไฟล์ที่นำมาจากเซิร์ฟเวอร์การผลิตทำให้เกิดข้อผิดพลาดต่อไปนี้:

ข้อผิดพลาด: การแคสต์ที่ระบุไม่ถูกต้อง (SqlManagerUI)

และเมื่อฉันพยายามกู้คืนฐานข้อมูลโดยใช้คำสั่ง

Use Master
Go
RESTORE DATABASE Publications
FROM DISK = 'C:\Publications.bak'
WITH MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path
MOVE 'AlPublications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf'

มันสร้างข้อผิดพลาดที่แตกต่างกัน

ข่าวสารเกี่ยวกับ 3154 ระดับ 16 สถานะ 4 บรรทัดที่ 1
ชุดข้อมูลสำรองเก็บข้อมูลสำรองของฐานข้อมูลอื่นที่ไม่ใช่ฐานข้อมูล 'สิ่งพิมพ์' ที่มีอยู่
ข่าวสารเกี่ยวกับ 3013 ระดับ 16 สถานะ 1 บรรทัดที่ 1
กู้คืนฐานข้อมูลกำลังยุติอย่างผิดปกติ

ฉันได้ตรวจสอบเวอร์ชันต่างๆแล้ว ดูเหมือนว่าทุกอย่างจะตรงกับฉันดังที่แสดงในภาพด้านล่าง

ก่อนหน้านี้ฉันสามารถกู้คืนฐานข้อมูลจากเวอร์ชันมาตรฐานเป็นรุ่นด่วนได้ แต่ตอนนี้ล้มเหลว ฉันลบฐานข้อมูลและพยายามสร้างใหม่ ที่ล้มเหลวเช่นกัน

ฉันไม่แน่ใจว่าตัวเองทำอะไรผิด ฉันขอขอบคุณสำหรับความช่วยเหลือในเรื่องนี้

ปัญหาได้รับการแก้ไขแล้วเนื่องจากดูเหมือนว่าไฟล์. Bak เสียหาย เมื่อฉันลองใช้ไฟล์อื่นมันใช้งานได้


ฉันไม่โปรในเรื่องนี้ แต่เป็นคำถามด่วนคือ x86 และ x64 arhitecture ในฐานข้อมูลเข้ากันได้หรือไม่
Gustav Klimt

ฉันมีฐานข้อมูลการกู้คืนก่อนหน้าในเวลานั้นฉันไม่ประสบปัญหาดังกล่าว ด้วยเหตุผลบางอย่างตอนนี้มันสร้างข้อผิดพลาดฉันไม่แน่ใจว่าการเปรียบเทียบเซิร์ฟเวอร์ฐานข้อมูลกำลังสร้างปัญหาหรือไม่
เรียนรู้

ลองเพิ่ม,REPLACEคำสั่ง T-SQL เพื่อเขียนทับฐานข้อมูล AlHabtoorPublications ที่มีอยู่
SchmitzIT

วันนี้ฉันประสบปัญหาเดียวกันในที่ทำงาน .. ดูเหมือนว่าการตรวจสอบขนาดไฟล์ที่โพสต์ทำการโอน FTP ไม่เพียงพอ ดูเหมือนว่าไฟล์จะอ่อนไหวมาก แก้ไขปัญหาโดยการบีบอัดไฟล์ก่อนดำเนินการโอน
rofans91

Scenerio ฉันทำการสำรองฐานข้อมูลบน SQL SERVER 2008 และลองกู้คืนบน SQL SERVER 2008 R2 ตามหลักการแล้วควรใช้งานได้ดี แต่ในขณะที่เลือกไฟล์สำรอง SQL Management Studio 2208 R2 เกิดข้อผิดพลาด "ไม่ได้ระบุแคสต์ที่ระบุไว้ (SqlManagerUI)" สาเหตุและการแก้ไขปัญหานี้เกิดจากไฟล์. BAK เสียหายระหว่างการถ่ายโอน FTP (โหมดถ่ายโอนถูกตั้งค่าเป็น ASCII) อย่าลืมตั้งค่าโหมดถ่ายโอน FTP เป็น BINARY ในขณะที่ถ่ายโอนไฟล์ฐานข้อมูล. BAK
Rohan Sarkar

คำตอบ:


40

GUI อาจไม่แน่นอนในบางครั้ง ข้อผิดพลาดที่คุณได้รับเมื่อใช้ T-SQL เป็นเพราะคุณกำลังพยายามเขียนทับฐานข้อมูลที่มีอยู่ แต่ไม่ได้ระบุให้เขียนทับ / แทนที่ฐานข้อมูลที่มีอยู่ สิ่งต่อไปนี้อาจใช้ได้:

Use Master
Go
RESTORE DATABASE Publications
  FROM DISK = 'C:\Publications_backup_2012_10_15_010004_5648316.bak'
  WITH 
    MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path
    MOVE 'Publications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf'
, REPLACE -- Add REPLACE to specify the existing database which should be overwritten.

แปลกฉันใช้คำพูดเดิมของคุณซ้ำ ไม่ว่าในกรณีใดสิ่งเดียวที่ฉันเพิ่มคือบรรทัดสุดท้าย: , REPLACE
SchmitzIT

1
ที่จริงแล้วบ่งชี้ว่าFailed: 38 reached end of the file(ในหน้าต่างคำสั่งให้เรียกใช้NET HELPMSG 38) ที่มักบ่งชี้ว่ามีการสำรองข้อมูลที่เสียหาย: stackoverflow.com/questions/5656363/…
SchmitzIT

ฉันทดสอบการกู้คืนด้วยไฟล์. Bak ที่เก่ากว่าเล็กน้อยซึ่งกู้คืนได้โดยไม่มีปัญหาใด ๆ ดูเหมือนว่าไฟล์. Bak โดยเฉพาะนี้จะเสียหาย
เรียนรู้

อาจเป็นผลมาจากการขัดข้อง อาจทำให้บางส่วนของไดรฟ์เสียหายได้ ดีใจที่ได้ทราบว่าคุณสามารถแก้ไขปัญหาด้วยข้อมูลสำรองอื่นได้ :)
SchmitzIT

สคริปต์ของคุณสร้างข้อผิดพลาดต่อไปนี้ Msg 3203 ระดับ 16 สถานะ 1 บรรทัด 1 อ่านบน "C: \ Publications.bak" ล้มเหลว: 38 (ไม่สามารถดึงข้อความสำหรับข้อผิดพลาดนี้เหตุผล: 15105) ข่าวสาร 3013 ระดับ 16 สถานะ 1 , บรรทัดที่ 1 RESTORE DATABASE กำลังยุติอย่างผิดปกติ
เรียน

163

อาจเป็นเพราะการกู้คืนไฟล์สำรองเวอร์ชัน SQL Server 2012 ลงใน SQL Server 2008 R2 หรือน้อยกว่านั้น


4
หนึ่งจะต้องใช้ "สร้างสคริปต์" แทน
kroiz

4
นี่คือปัญหาของฉัน ดูเหมือนว่ามันจะไม่ยากเกินไปสำหรับ MS ที่จะให้ข้อความที่เป็นประโยชน์สำหรับบางกรณีเหล่านี้
John Gilmer

Pinal Dave อธิบายเหตุผลที่นี่ - blog.sqlauthority.com/2015/06/01/…
shrivb

15

ในที่สุดก็ได้รับข้อผิดพลาดนี้ให้หายไปในการกู้คืน ฉันย้ายไปที่ SQL2012 ด้วยความไม่พอใจ แต่ฉันเดาว่ามันน่าจะยังใช้ได้กับ 2008R2 ฉันต้องใช้ชื่อตรรกะ:

RESTORE FILELISTONLY
FROM DISK = ‘location of your.bak file

และจากที่นั่นฉันรันคำสั่งเรียกคืนMOVEโดยใช้ชื่อตรรกะ

RESTORE DATABASE database1
FROM DISK = '\\database path\database.bak'
WITH
MOVE 'File_Data' TO 'E:\location\database.mdf',
MOVE 'File_DOCS' TO 'E:\location\database_1.ndf',
MOVE 'file' TO 'E:\location\database_2.ndf',
MOVE 'file' TO 'E:\location\database_3.ndf',
MOVE 'file_Log' TO 'E:\location\database.ldf'

เมื่อคืนค่าเสร็จแล้วฉันแทบจะร้องไห้ด้วยความดีใจ

โชคดี!


4

ด้านล่างอาจเป็น 2 สาเหตุสำหรับปัญหานี้:

  1. การสำรองข้อมูลบน SQL 2012 และ Restore Headeronly เสร็จสิ้นใน SQL 2008 R2

  2. สื่อสำรองเสียหาย

หากเราเรียกใช้คำสั่งด้านล่างเราจะพบข้อผิดพลาดจริงเสมอ:

restore headeronly
from disk = 'C:\Users\Public\Database.bak'

ระบุตำแหน่งที่สมบูรณ์ของไฟล์ฐานข้อมูลของคุณใน quot

หวังว่าจะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.