簡體   English   中英

將SQL Server Express數據庫復制到另一台計算機

[英]Copy SQL Server Express Database to Another Computer

我明天正在升級客戶端Access應用程序的后端,需要准備好針對此客戶端的特定問題的計划。 老板需要能夠定期(通常是每月)將數據文件從SQL Server的辦公室帶走,並對數據進行統計分析。

我已經研究了將整個SQL Server數據庫從服務器復制到本地SQL Express的最簡單方法 ,並且那里的解決方案在這種情況下不起作用,因為:

  1. 不能使用一次性解決方案(數據庫發布向導),因為這需要是可編寫腳本的。

  2. 不能使用依賴於聯網的兩台計算機的任何方法,因為這不是一個選項 - 數據必須通過USB拇指驅動器傳輸(因此,沒有復制)。

  3. 不能使用任何依賴於從服務器控制台或工作站運行SQL Server管理工具進行備份的方法。

  4. 無法直接連接到SQL Server數據庫進行分析,因為數據必須可移植到其他位置。

我認為我需要的是調用創建備份文件的腳本,然后將結果復制到USB驅動器的某種方法。 然后我需要第二個腳本從USB驅動器復制備份文件並將其還原到另一個SQL Server。

傳輸的數據是只讀的(或者,所做的任何更改都不需要返回主服務器),並且不會在第二個位置更新數據。 它目前用一個普通的舊批處理文件編寫腳本來復制后端MDB文件,我需要一些對用戶來說簡單的東西。

它不能依賴於Powershell(SQL Server Management Studio),因為我不希望它必須安裝在用戶運行腳本的計算機上(有六個工作站,腳本需要可以運行,我不想在所有這些上安裝一些東西)。

我將設置備份代理以每晚創建備份,因此我可以復制該文件,而無需在復制之前啟動備份。 因此,我可能只需要在目標計算機上編寫恢復腳本。

思想,建議,指針?

你絕對應該能夠創造類似的東西。

一部分是作為.sql腳本的T-SQL CREATE BACKUP腳本,並使用sqlcmd命令行工具從標准Windows批處理( *.bat )或命令( *.cmd )文件執行該腳本。

那將是這樣的:

backup.sql

BACKUP DATABASE YourDatabase
TO DISK = 'Z:\Backup\YourDatabase.bak'
WITH FORMAT;

第二部分是帶有T-SQL RESTORE腳本的.sql文件,基本上從磁盤上的給定位置讀取數據並將其恢復到那里的SQL Server實例。

restore.sql

RESTORE DATABASE YourDatabase
   FROM AdventureWorks2008R2Backups 
   WITH 
     MOVE 'YourDatabase_Data' TO 'C:\MSSQL\Data\YourDatabase.mdf',
     MOVE 'YourDatabase_Log' TO 'C:\MSSQL\Data\YourDatabase_Log.ldf';
GO

當然,您需要根據自己的實際要求調整這些名稱和路徑 - 但這應該只是為您提供如何開始這項工作的提示。

要使用sqlcmd執行其中一個.sql腳本,您需要以下內容:

sqlcmd -S (name of server) -U (login) -P (password) -I (name of script file)

例如

sqlcmd -S (local) -U someuser -P top$secret -I backup.sql

資源:

我有同樣的問題,在生產(服務器)和測試開發(本地在另一個位置)之間傳輸數據庫,並將完成的數據庫傳輸到托管服務器。

事實證明,我可以自己運輸.MDF。

  1. 確保目標db沒有附加該數據庫,首先在SSMS中將其刪除。
  2. 單獨移動.MDF(不帶日志文件)。
  3. 在目標位置默認c:\\ program files ... sql .. \\ DATA確保移動或刪除MDF和LDF的所有先前實例 - 如果它看到.ldf那里就會混淆。
  4. 在SSMS中,選擇附加。 按添加,選擇.mdf。
  5. 此時,在右下方的框中,將顯示MDF和LDF已連接且缺少LDF。 單擊LDF並按REMOVE按鈕。
  6. 現在將附加MDF並添加新的/空的LDF。

我一直這樣做; 完美運行 - 省去了運輸大型.ldf的麻煩。 (我經常使用dropbox.com而不是拇指驅動器,並首先用PKZIP / SecureZip加密文件。)

我不確定如果你在服務器啟動的情況下復制MDF會發生什么,雖然我沒有在復制之前停止它。 我不確定如何使這個腳本化 - 附加可以編寫腳本,但我不確定在繼續之前刪除.LDF。

您可以編寫服務器腳本以生成數據庫的快照副本,然后傳輸該MDF,因為它知道它沒有被更新。

另一個想法 - 寫一個程序將所有記錄插入到SQL-Server緊湊版文件中並傳輸它? 我沒試過,但是讀了一下。

只是一個想法,但如果他現在帶着一個MDB文件的副本,其中包含所有數據,那么為什么不繼續這樣做。 您可以通過查詢每個表來訪問所有內容。

如果您使用鏈接的表格“tblFoo_LINKED”和名為“tblFoo”的本地表設置“報告”MDB,那么您可以運行一些VBA代碼,這些代碼將循環遍歷所有表並執行類似的操作

INSERT INTO tblFoo SELECT * FROM tblFoo_LINKED

SQL服務器備份恢復仍然是我想要的選擇,但只是提供可能適合您需求的不同內容

為什么不繼續復制整個數據庫文件? 這看起來像一個足夠小的操作,可以暫時停止:您可以縮小數據庫,分離並直接復制文件。 在目標系統上,您可以在連接字符串中按文件名附加SQLExpress DB

暫無
暫無

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

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