2017-09-07 7 views
1

データベースはかなり大きくなっていますが、クライアントは過去2年間のデータにのみ興味があります。しかし、古いデータは「ジャスト・イン・ケース」にしておきたいと考えています。SQL Server:古いデータのアーカイブ

ここでは、WAN経由で別のサーバーにデータをアーカイブしたいと考えています。ルックアップテーブルからすべてのデータ、アーカイブサーバーへの上にマスタデータと外部キー表を含む表

  1. コピー:

    私の計画は、ストアドプロシージャの作成です。

  2. トランザクションテーブルからアーカイブDBにデータをコピーします。
  3. 2年以上経過したmaster dbからトランザクションデータを削除します。

アプローチがteoretically当社のニーズを満たしますが、2つの主要な問題は、次のとおりです。

  1. 性能も:私はSQLリンクサーバーを経由してデータをオーバーコピーしています。大きなテーブルの中には、どのレコードが存在するかを比較して更新する必要があり、存在しないレコードを作成する必要があるため、非常に遅いものがあります。 3〜4時間で実行されるようです。

  2. 外部キー違反を防ぐためにテーブルを正しい順序でコピーする必要があります。また、ParentCustomerなしで(たとえば、ParentCustomerフィールドを持つCustomersテーブルなど)自身と関係のあるテーブルを転送する必要があります。 FK違反を防ぐためにParentCustomerを更新する必要があります。したがって、私のInsert文とUpdate文を自動生成することは難しくなります(私は文章を可能な限り自動的に生成したいと思います)。

私がまだ知りませんでしたデータをアーカイブする良い方法があるかもしれないと感じます。 SSISはオプションかもしれませんが、それが私の既存の課題を防ぐかどうかはわかりません。私はSSISについてあまり知らないので、もしそれが行く方法があれば、それを勉強するための資料が必要かもしれません。

+0

提案:複数のスピンドルまたはssdにまたがってテーブルを分割する。現在および過去のスライディングウィンドウパーティションを維持する。現在のデータはあるディスクから読み込まれ、もう一方のディスクはより遅いディスクから読み込まれます。 – Namphibian

答えて

1

スケジュールされたタスクとして実行されるバッチプロセスが必要だと思います。おそらく毎晩。既に説明した2つのオプションがあります。

1)ストアドプロシージャを実行するSQLエージェントジョブ。ストアドプロシージャは、リンクサーバーを使用します。

2)SSISパッケージを実行するSQLエージェントジョブ。

私はあなたがLinked Serverを避ける両方のアプローチを組み合わせて恩恵を受けると信じています。

1)SQLエージェントジョブはSSISパッケージを実行し、アーカイブするデータをライブデータベースからコピーデータベースに転送します。これは、外部キー違反を避けるために、特定の順序で実行する必要があります。

2)SSISパッケージで転送が実行されると、ライブデータベース上のストアドプロシージャが実行され、2年以上経過した情報が削除されます。ストアドプロシージャは、リンクサーバーを必要としません。

重複したデータがアーカイブされていないことを確認するためにトランザクションを使用する必要があります。たとえば、SSISパッケージが失敗した場合、トランザクションはロールバックされ、ストアドプロシージャは実行されません。

関連する問題