簡體   English   中英

如何將SQL Server 2012數據庫復制到localdb實例?

[英]How do I copy SQL Server 2012 database to localdb instance?

我想將SQL Server 2012 Standard數據庫復制到我的localdb實例。 我試過向導抱怨localdb不是SQL Server 2005或更高版本的實例 我也進行了備份/恢復,但在我的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

錯誤消息我得到...

為數據庫'CSODev'處理8752頁,在文件1上處理'CSOdev_Data'文件。
處理了數據庫'CSODev'的5頁,文件1上的'CSOdev_Log'文件。

消息1853,第16級,狀態1,第1行
無法找到邏輯數據庫文件“CSOdev_Log”。 指定文件的完整路徑。
消息3167,第16級,狀態1,第1行
RESTORE無法啟動數據庫'CSODev'。
Msg 3013,Level 16,State 1,Line 1
RESTORE DATABASE異常終止。

數據庫最終處於“恢復待定”模式。 它似乎與日志文件有問題。 我已經嘗試了2個不同的備份,以防一個被破壞。

對於localDB存在已知的限制 (實際上是一個真正的錯誤)。 每當數據庫文件位於不同的文件夾中時,它將無法使用MOVE進行任何RESTORE。

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

我有同樣的問題。 最終起作用的是:

  1. 嘗試恢復數據庫(在OP中獲取錯誤)
  2. 分離數據庫
  3. 重新連接數據庫

最后一步發生的事情是SSDT執行了數據文件的升級,顯然是舊格式的。 完成后,數據庫開始工作沒有任何問題!

我有同樣的問題,經過一些在線研究之后,我遇到了一種巧妙的方式來讓它發揮作用(盡管非常hacky)。 基本上,你:

  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"

希望它應該工作。 看到這里的原始想法。

編輯:添加了傑森布拉迪對創建命令的更正。

嘗試將數據庫編寫為模式和數據,然后在本地運行腳本。

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

我有同樣的問題。 嘗試以管理員身份運行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',

更新:這不起作用!

雖然上述語句不會產生任何錯誤並成功完成,但數據庫仍處於“PENDING RECOVERY”狀態,無法以任何方式訪問。 當我嘗試'RESTORE WITH RECOVER'將數據庫聯機時,我得到的錯誤與上面的問題相同。

所以在我的情況下,我最終將備份恢復到我已運行MSSQL 2008 R2的DEV服務器,然后選擇:任務 - >生成腳本 - >選擇對象到腳本和下一步 - >單擊“高級”按鈕 - >選擇“腳本的數據類型“:架構和數據。 現在針對本地db運行生成的腳本。

同樣的問題,謝謝你的幫助。 我的本地數據庫是MS SQL 2014.打開“SQL Server 2014 Management Studio”

  1. 右鍵單擊數據庫,轉到“任務”,單擊“脫機”
  2. 分離數據庫
  3. 附加數據庫

它對我有用。 備份數據庫后,可以無錯誤地還原數據庫。 謝謝。

試試這些腳本(我個人測試過的冒險工具的例子):

RESTORE FILELISTONLY
FROM DISK = 'c:\temp\adv2012.bak'

這會將文件名顯示為:

AdventureWorks2012      C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQL2012RTM\MSSQL\DATA\AdventureWorks2012.mdf
AdventureWorks2012_log  C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQL2012RTM\MSSQL\DATA\AdventureWorks2012_log.ldf

使用這些文件名來構建最終腳本,如下所示:

RESTORE DATABASE AdventureWorks2012
FROM DISK = 'C:\temp\adv2012.bak'

WITH MOVE 'AdventureWorks2012' TO 'C:\cnom_WS\Local-Databases\AdventureWorks\AdventureWorks2012.mdf',
MOVE 'AdventureWorks2012_log' TO 'C:\cnom_WS\Local-Databases\AdventureWorks\AdventureWorks2012_log.ldf',
REPLACE;

順便說一句,我通過Visual Studio(SQL Server對象資源管理器)運行這些,但我強烈懷疑這可以在SSMS上輕松運行;-)

  1. 你可以手動完成。 這可以通過使用點網並打開兩種連接並將數據從其中一種轉發到另一種來完成。 但這需要在本地列中創建相同類型的列。
  2. 您可以檢查MS Access 2007的導入​​選項

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM