簡體   English   中英

是否可以創建一個虛擬文件流文件組來僅研究mdf內容?

[英]Is it possible to create a dummy filestream filegroup to study mdf content only?

我的應用程序有一個數據庫,我以這種方式從備份文件創建:

-- create empty db
CREATE DATABASE MyNewDB

-- restore on the empty db from file    
RESTORE DATABASE MyNewDB
FROM DISK = 'c:\Temp\MyNewDB.bak'
WITH REPLACE,
MOVE 'MyDB_Data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.EXPRESS2008R2\MSSQL\DATA\MyNewDB.mdf',
MOVE 'MyDB_Log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.EXPRESS2008R2\MSSQL\DATA\MyNewDB_log.LDF',
MOVE 'MyDBFS' TO 'C:\FileStreamData\MyNewDBFS'

我使用文件流文件組來存儲blob,基本上我有一個表存儲文件的表和一個blob列,其中包含保存為SQL Server Filestream數據的二進制數據。

隨着客戶繼續使用該應用程序,文件流部分變得龐大,可能是mdf為500MB,文件流為60GB

經常調試開發機器上的問題我需要傳輸“只有表”(“500MB”)和“不是blob”(“60GB”)。

我所做的是復制數據庫和復制數據庫,我在文件表中將blob列設置為NULL然后我運行

CHCEKPOINT

然后我等待垃圾收集器完成它的工作然后我可以備份並有一個小文件。

有時我沒有空間來恢復備份的副本,或者我沒有時間去做。

所以我希望能夠做到,但我沒有在所有網絡中找到解決方案:

  1. 僅復制.mdf + .ldf (包含數據)

  2. 以某種方式創建“假文件流數據”(SQL Server將在附加時接受的數據)

  3. 附加.mdf.ldf和偽文件流數據以創建測試數據庫

當然,我不希望blob上的查詢工作,但是其他表上的所有查詢都是。

有沒有辦法(可能甚至使用3D派對工具)來實現我的需求?

將其移動到其他數據庫

如果是我,我會考慮將blob數據分解到另一個數據庫中。 但我不確定你目前的結構,或者實際的結構。 但是,您仍然可以在原始數據庫中擁有一個視圖,該視圖從新數據庫中的表中進行選擇,和/或重新組合每個表中的多個表。

編寫數據庫腳本

另一個不太完美的選擇是編寫數據庫腳本。 Management studio可以創建一個腳本文件,在運行時將創建表並插入值。 例如,如果您需要從SQL 2014數據庫獲取數據副本到SQL 2008等,則可能需要這樣做。通常,您可以對腳本編寫的內容做出一些選擇。 (右鍵單擊數據庫,然后選擇“任務” - >“生成腳本”以啟動向導。)

導出數據

您可以導出數據並導入所述數據,而不是還原備份。 執行此操作時,您可以選擇包含哪些數據。 您可以跳過blob表或跳過blob列。

零碎回收

最后,您可能還希望在僅零碎恢復某些文件或僅部分文件組時看到此鏈接。 https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/example-piecemeal-restore-of-only-some-filegroups-full-recovery-model

文件組A和C的聯機還原。由於它們的數據沒有損壞,因此不必從備份中還原這些文件組,但必須恢復這些文件組才能使它們聯機。 數據庫管理員立即恢復A和C.

RESTORE DATABASE adb FILEGROUP='A', FILEGROUP='C' WITH RECOVERY  
RESTORE DATABASE adb FILEGROUP='B' FROM backup2b WITH RECOVERY  

理論上,您可以備份空白數據庫的文件流文件組,然后在恢復時嘗試單獨使用它。 但是,我不確定這條路線是否適合您。 如果你的blob在同一個表中,在同一個數據庫中,則sql可能會存儲一些數據,以便將這些數據拼接在一起。 在還原時,sql可能會檢查blob數據是否一致和/或兼容?

結論

我真的認為將你的blob打破到他們自己的表中然后將它們移動到一個單獨的數據庫就是我要做的。

您可能無法直接連接到這些數據庫,或者上面提到的腳本選項,或SQL任務導入數據可能是選項。

但話雖如此,仍然有sql導出數據選項。 您可以構建一個僅導出所需數據的SSIS包,然后可以重新導入該數據包。

暫無
暫無

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

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