2017-03-22 17 views
0

私は以下のことについて少し助けが必要です。SQLイメージの列を外部データベースにリンクするにはどうすればよいですか?

注::次のシナリオでは、アプリケーションのソースコードにアクセスできないため、データベースレベルでのみ変更できます。

私たちのデータベースは、dbo.[BLOB]を使用してあらゆる種類のファイルとドキュメントを格納します。この表では、IMAGE(まあ、時代遅れ)データ型が使用されています。この特定のテーブルは非常に速く成長しているので、私はいくつかのアーカイブ機能を実装することを考えていました。

私の考えは、Xヶ月より古いすべてのファイルを2番目のデータベースに移動し、何とかdbo.[BLOB]テーブルから外部/アーカイブデータベースにリンクすることです。

これも可能ですか?目標は、バックアップとクエリのパフォーマンスを向上させるために、データベースのサイズを減らすことです。

アイデアやヒントがあれば幸いです。

ありがとうございました。 ファビアン

+0

SQL Serverのバージョン**(2008、2008 R2、2012、2014、2016)はどちらですか? –

+0

2008 R2標準 – Fabian

+0

[FILESTREAM](https://technet.microsoft.com/en-us/library/bb933993(v=sql.105).aspx)ストレージは2005年から利用できます。このようなデータはデータベースの外部に保存できますそれでも全体としてdataseをバックアップします。ファイルをバックアップしたくない場合は、部分バックアップを実行することができます –

答えて

1

この場合には、バックアップ速度とデータベースのサイズであなたを助けるために2つの機能があります。

Filestreamは、ファイルシステム上の代わりに、データベースファイル内のファイルとしてBLOBを保存することができます。バックアップのシナリオを複雑にすると、データベースとファイルの両方をバックアップする必要がありますが、データベースファイルのサイズが小さくなり、ドキュメントへのアクセス時間も短縮されます。 blobカラムよりもファイルシステムからファイルを読む方がはるかに高速です。さらに、ファイルストリームは2GBを超えるファイルを許可します。

Partitioningは、テーブルを物理レベルで小さなチャンクに分割します。このようにして、アプリケーションコードにアクセスして、特定の行が物理的に格納されている場所を変更したり、アクセスする必要のあるデータをすばやくSSDドライブに格納したり、遅いアーカイブに格納したりする必要はありません。この方法で、現在のパーティションでより頻繁にバックアップを取ることができますが、アーカイブの頻度は低くなります。

SQL Server 2016 SP1より前のバージョンでは、この機能はエンタープライズ版でのみ使用できました。 SQL Server 2016 SP1では、すべてのエディションで使用できます。

あなたの場合、ほとんどの場合、ファイルストリームを最初に使用する必要があります。

+1

ありがとうございます。私が読んだところでは、パーティショニングはエンタープライズ版でのみ利用可能です。ファイルストリームソリューションについては、クエリの書き直しなどのような結果があれば、さらに読む必要があります。 – Fabian

+0

はい、それを持ってきて良かったです。 –

+1

パーティショニングはこれとは関係ありません。適切な機能はFILESTREAM記憶域です –

0

アプリケーションを変更すると、基本的に何もできません。列の種類の変更がアプリケーションで許容されるかどうかを確認することはできます(ほとんどありません。99.99%はアプリケーションを中断します)。FILESTREAMを使用しようとしますが、成功しても大きなメリットはありません。同じもの、例えば)。

もう1つ目のことは、テーブルをビューに置き換えることです(INSTEAD OF triggers for updatesを使用)。それでも、アプリケーションを中断する可能性は非常に高いです(99.98%)。目指すのは、アプリケーションに「寒い」データと「熱い」データの統一されたビューを提示するビュー(またはDBパーティションのビューを横切る)であるdistributed partitionedを持つことです。複雑なのはerror proneですが、となります(データが暑いから寒い、寒いデータは不変で、バックアップはほとんど必要ありません)。

目的は、バックアップとクエリのパフォーマンスを向上させるために、データベースのサイズを減らすことです。

バックアップサイズを小さくするには、上で説明したように、基本的には何もできません。しかし、パフォーマンスはinvestigate itになり、あなたの調査結果に基づいて適切に対処する必要があります。データベースがBLOBのために遅いと言うと、手を振っている。

+0

FILESTREAMは、アプリケーションを変更せずにこれらの問題すべてに答えます。部分バックアップを使用して、FILESTREAMデータをバックアップから除外できます。リモートストレージが必要でファイル共有ができない場合(なぜ?)、この機能は[Remote Blob Storage](https://technet.microsoft.com/en-us/library/gg638709(v) = sql.105).aspx)。リモートは、ロボットディスクアレイのようなストレージアプライアンスを意味します。 –

+0

アプリケーションが 'IMAGE'を使用している場合、' VARBINARY(MAX) 'への変更をサポートすることはほとんどありません。基本的な型が異なるからです。どのようなバインディングがデータアクセシビリティで使用されても、破損し、IMAGEタイプを操作するAPIは異なります( 'TEXTPTR'、' READTEXT'など)。アプリケーションがすでに 'VARBINARY(MAX)'を使用していたなら、 'FILESTREAM'を追加する方が実行可能です。とにかく、アプリがVARBINARY(MAX)とFILESTREAMで動作する場合は、投機とOPの応答が必要です。 –

+0

部分的なバックアップに関しては、FILESTREAMは必要ありません。既存の*テーブル構造体で 'TEXTIMAGE_ON'を使うだけで、IMAGEブロブをスキップする部分バックアップを行うことができます。つまり、BLOBを新しいFGに移動するだけでは問題は解決されません。 **行**をコールドストレージに移動し、FGを読み取り専用として宣言するには、パーティション化が必要です。そして、これはFSの使用に完全に直交です、FSは方程式に何も加えません。部分的に正しいバックアップスキームを実行することがエラーになりやすいことは言うまでもありません... –

関連する問題