2017-03-22 88 views
0

我需要下面的一些幫助。如何將SQL圖像列鏈接到外部數據庫?

注意:在下列情況下,我沒有訪問應用程序的源代碼,所以我只能在數據庫級別的變化。

我們的數據庫使用dbo.[BLOB]來存儲各種文件和文件。該表使用IMAGE(是,已過時)數據類型。由於這個特定的表增長得相當快,我正在考慮實施一些歸檔功能。

我的想法是將所有超過X個月的文件移動到第二個數據庫,然後以某種方式將dbo.[BLOB]錶鏈接到外部/存檔數據庫。

這甚至可能嗎?目標是減少數據庫大小,以提高備份和查詢性能。

任何想法和提示非常讚賞。

謝謝。 費邊

+0

哪個版本** **(2008年,2008 R2,2012年,2014年,2016)的SQL Server是用的? –

+0

2008 R2標準 – Fabian

+0

[FILESTREAM](https://technet.microsoft.com/en-us/library/bb933993(V = SQL.105)的.aspx)的存儲是可自2005年以來你可以存儲在數據庫外部這樣的數據並且仍然作爲一個整體來備份數據。如果您不希望備份文件,可以執行部分​​備份 –

回答

1

有2個功能,幫助您與備份速度和數據庫大小在這種情況下:

Filestream將允許您BLOBS作爲存儲在文件系統上,而不是在數據庫文件中的文件。它使備份情況變得複雜,您必須備份數據庫和文件,但您可以獲得更小的數據庫文件以及更快的文檔訪問時間。從文件系統讀取文件比從blob列讀取文件要快得多。此外文件流允許大於2GB的文件。

Partitioning將在物理層面上將表拆分成更小的塊。這樣您就不需要訪問應用程序代碼來更改物理存儲特定行的位置,並確定哪些數據需要快速訪問並將其放置在SSD驅動器上,哪些數據可以放在較慢的存檔上。通過這種方式,您可以在當前分區上進行更頻繁的備份,而對歸檔進行更少的備份。

在SQL Server 2016 SP1之前 - 此功能僅適用於Enterprise版本。對於SQL Server 2016 SP1,這在所有版本中都可用。

在你的情況下,你很可能應該首先使用filestream。

+1

謝謝。從我讀到的內容來看,分區僅適用於企業版本。至於文件流的解決方案,我需要進一步閱讀是否有任何後果,如重寫查詢等... – Fabian

+0

是的,這是很好的你帶來它。 –

+1

分區與此無關。適當的功能是FILESTREAM存儲 –

0

沒有修改你可以做的應用程序,基本上什麼也沒有。您可能會嘗試查看是否允許應用程序容忍更改列類型(非常不可能,99.99%會破壞應用程序)並嘗試使用FILESTREAM,但即使成功,它也不會帶來太多好處(備份大小將會是例如相同)。

您可以嘗試的第二件事是用視圖替換表,使用INSTEAD OF triggers for updates。它仍然很有可能打破應用程序(可以說99.98%)。目標是擁有distributed partitioned視圖(或跨數據庫分區視圖),它嚮應用程序呈現「冷」和「熱」數據的統一視圖。複雜,error prone,但它減少備份的大小(只要數據從熱變冷,冷數據是不可變的,需要少量備份)。

的目標是減少數據庫的大小,以提高備份和查詢性能。

爲了減少備份的大小,正如我上面所解釋的那樣,你基本上可以做任何事情。但是,根據您的發現,您需要對investigate it的表現進行恰當的處理。說數據庫很慢'因爲BLOB'是揮手。

+0

FILESTREAM在不修改應用程序的情況下回答所有這些問題。您可以使用部分備份從備份中排除FILESTREAM數據。即使您確實需要遠程存儲並且文件共享不能執行(爲什麼?),該功能可通過[遠程Blob存儲](https://technet.microsoft.com/zh-cn/library/gg638709(v = SQL.105)的.aspx)。遠程可以很容易地意味着像機器人磁盤陣列這樣的存儲設備。 –

+0

如果應用程序正在使用'IMAGE',那麼它不太可能支持對'VARBINARY(MAX)'的更改,因爲它們是不同的基本類型。無論數據承諾中使用哪種綁定,都會中斷,而操縱IMAGE類型的API則不同(請考慮「TEXTPTR」,「READTEXT」等)。如果應用程序已經使用'VARBINARY(MAX)',那麼添加'FILESTREAM'會更加可行。無論如何,只是猜測和OP需要回答,如果應用程序與VARBINARY(MAX)和FILESTREAM工程。 –

+0

至於部分備份,它們不需要FILESTREAM。只需在*現有*表結構上使用'TEXTIMAGE_ON',然後就可以進行部分備份以跳過IMAGE blob。不管怎樣,還是需要備份*新的BLOB,所以只有將BLOB移動到新的FG才能解決問題。需要分區將**行移動到冷存儲,然後聲明FG爲只讀。而這與FS的使用完全正交,FS對等式不加任何作用。且不說容易出錯的是如何做的諧音正確的備份方案... –

相關問題