2012-10-29 62 views
21

我正在尋找將SQL Server 2012標準數據庫複製到我的localdb實例。我試過了嚮導,它抱怨localdb不是SQL Server 2005或更高版本表示實例。我還做了備份/恢復,但在我的LocalDB恢復我碰到下面的錯誤...如何將SQL Server 2012數據庫複製到localdb實例?

運行此...

RESTORE DATABASE CSODev 
FROM DISK = 'C:\MyBckDir\CSODev.bak' 
WITH MOVE 'CSOdev_Data' TO 'C:\Users\cblair\CSOdev_Data.mdf', 
MOVE 'CSOdev_Log' TO 'C:\Users\cblair\CSOdev_Log.ldf', 
REPLACE 

錯誤消息我得到...

加工8752頁爲數據庫 'CSODev',文件 'CSOdev_Data' 在文件1.
加工5頁爲數據庫 'CSODev',文件 'CSOdev_Log' 在文件1.

中號SG 1853年,級別16,狀態1,行1
邏輯數據庫文件 'CSOdev_Log' 無法找到。指定文件的完整路徑。
Msg 3167,Level 16,State 1,Line 1
RESTORE無法啓動數據庫'CSODev'。
Msg 3013,Level 16,State 1,Line 1
RESTORE DATABASE正在異常終止。

數據庫中的「恢復掛起」模式結束。看起來它有日誌文件的問題。我已經嘗試了2種不同的備份,以防止其中一個被損壞。

+0

也許嘗試將您的文件放在您的配置文件夾以外的其他地方。例如,如果將數據/日誌文件移動到C:\ Data \會發生什麼情況? –

+0

我試過這樣做,仍然得到相同的錯誤信息。 –

+0

我能夠成功地完成這項工作 - 我在一個普通實例上創建了一個數據庫,並將其備份並在localdb實例上恢復它,好吧:http://i.stack.imgur.com/rOOhq.png我是不確定你的問題缺少哪些信息,但顯然你做的是不同的事情。我不知道該怎麼提出這個問題。這是否發生在任何數據庫或只是這個特定的數據庫? –

回答

1

我有同樣的問題。嘗試運行Visual Studio爲管理員和嘗試使用以下命令

RESTORE DATABASE CSODev 
FROM DISK = 'C:\MyBckDir\CSODev.bak' 
WITH NORECOVERY, MOVE 'CSOdev_Data' TO 'C:\Users\cblair\CSOdev_Data.mdf', 
MOVE 'CSOdev_Log' TO 'C:\Users\cblair\CSOdev_Log.ldf', 

UPDATE:這並沒有完全工作!

雖然上面的語句不產生任何錯誤,併成功完成,則數據庫仍處於「待定恢復」狀態,不能以任何方式訪問。當我嘗試'恢復恢復'將數據庫聯機時,我得到了與上述問題相同的錯誤。

因此,在我的情況下,我最終將備份恢復到我使用MSSQL 2008 R2運行的DEV服務器,然後選擇:Tasks - > Generate Scripts - >選擇對象到腳本& Next - >單擊「Advanced」按鈕 - >選擇「腳本數據類型」:Schema &數據。 現在針對本地數據庫運行生成的腳本。

3

嘗試腳本您的數據庫架構和數據,然後在本地運行的腳本。

+0

提示任何人來這裏,看看[MEMark的答案](http://stackoverflow.com/a/18792126)。 – Benjol

+0

我認爲編寫數據庫腳本是我們中的一些人走的路。我認爲我的問題可能是SQL Server實例不同(比如2005年和2008年)。 – vbullinger

4

我有同樣的問題,做我的對面巧妙的方法來有點在線研究後,得到它的工作(儘管相當哈克)。基本上,你:

  1. 創建SqlLocalDb實例(SqlLocalDb c tmp -s)。
  2. 像上面那樣恢復數據庫(例如,SqlCmd -E -S <localdb connection string> -Q "RESTORE DATABASE ...")。
  3. 停止SqlLocalDb實例(SqlLocalDb p tmp)。
  4. 刪除SqlLocalDb實例(SqlLocalDb d tmp)。
  5. 創建一個新的SqlLocalDb實例(SqlLocalDb c persistent -s)。
  6. 通過將它(SqlCmd -E -S <persistent connection string> -Q "Create Database <dbname> On (Filename = '<Mdf file location'), (Filename = '<Ldf Filename'>) For Attach"創建新實例數據庫

並希望它應該工作了原來的想法見here

編輯:。新增Jason Brady的的創建修正命令

+2

這對我有用。雖然,創建數據庫語法是錯誤的。它的字面意思是2個額外的字符,堆棧溢出告訴我,除非它至少是6,否則不能進行編輯。它需要'Create Database On(Filename =')對於附件' – Jason

2
RESTORE FILELISTONLY 
FROM DISK = 'D:\SQLBackups\yourdatabase.BAK' 


ALTER DATABASE yourdatabasename 
SET SINGLE_USER WITH 
ROLLBACK IMMEDIATE 

RESTORE DATABASE yourdatabasename 
FROM DISK = 'D:\SQLBackups\yourdatabase.BAK' 
with replace, 
move 'logical name from file stream' to 
'C:\yourdatabase.mdf', 
move 'logical name from file stream' to 'C:\Yourdatabase.ldf' 
ALTER DATABASE Qatar_DB SET MULTI_USER 
+1

謝謝,效果很好! – ssabbattini

+0

此解決方案也適用於我。請注意,請確保先創建數據庫爲空,然後執行上面的查詢,調整LocalDB中的適當情況以使其工作。來自不同版本的模式似乎可以向後兼容兼容(2012 - > 2010) – Truesky

5

我有同樣的問題最終做了什麼工作是這樣的:

  1. 試圖恢復數據庫(湊了OP的錯誤)
  2. 分離數據庫
  3. 重新連接數據庫

在最後一步實際情況是,SSDT進行的升級數據文件,顯然是舊格式。當完成後,數據庫開始工作沒有任何問題!

+0

您,先生,您應該擁有綠色的勾號! – Benjol

-1
  1. 您可以手動完成。這可以通過使用dot net並打開兩種連接並將數據從其中一個轉發到另一個來完成。但是這需要在本地創建相同類型的列。
  2. 您可以檢查的MS Access 2007年
14

known limitation(一個真正的錯誤,其實)爲的LocalDB進口選項。只要您的數據庫文件位於不同的文件夾中,它就會使任何帶MOVE的RESTORE失敗。

您必須在原始文件夾中恢復(無MOVE)。如果您需要僞造驅動器:/路徑,請使用cmd工具(如SUBST)。

+0

謝謝!這節省了我的一天。 – nrodic

1

同樣的問題,謝謝你的幫助。 我的本地數據庫是MS SQL 2014年 打開的 「SQL Server 2014 Management Studio中」

  1. 右擊數據庫,進入 「任務」,單擊 「脫機」
  2. 分離數據庫
  3. 附加數據庫

它適合我。 備份數據庫後,可以無錯地恢復數據庫。 謝謝。

相關問題