問題タブ [change-data-capture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
713 参照

sql-server-2008 - 複数のテーブルのデータキャプチャを変更する

SQLServer2008。データベース内のいくつかの関連するテーブルの変更データキャプチャ(または変更追跡)を作成することは可能ですか?たとえば、多対多の関係。

それはどのように見えるでしょうか?

0 投票する
1 に答える
872 参照

sql-server - データキャプチャの変更-履歴データの初期ロード

SQLServer2000データベースをSQLServer2008R2にアップグレードしています。データキャプチャの変更機能を利用したい。私の既存のアプリケーションでは同様の機能がありHst_ますが、元のテーブルとほぼ同様のスキーマを持つプレフィックス付きのトリガーと履歴テーブルを使用しています。

私の質問は、データをHst_テーブルからCDC機能で使用されるテーブルに移行する方法はありますか?

私はこのようにすることを考えていました:

  • 私はテーブルを持っていますCases
  • カスタムの履歴メカニズムを使用しているので、3つのトリガー(挿入、更新、削除)とツインテーブルもありますHst_Cases
  • 今、私はテーブルでCDCを有効にしていますCases
  • CDCは、履歴データ()を返す関数と、fn_cdc_get_all_changes_dbo_Cases実際にデータを保持するシステムテーブル()を作成しcdc.dbo_Cases_CTます。
  • Hst_Casesからにデータを挿入できますcdc.dbo_Cases_CTが、次の問題があります。
    • __$start_lsn取得方法がわかりません__$seqval
    • 理解するのは難しいです__$update_mask(私はそれぞれの2つの行を比較する必要があります)。

それを行う唯一の方法はありますか?この状況を避けたいので、「新しい」履歴データをHst_テーブルの「古い」履歴データと結合します。

ありがとう!

0 投票する
0 に答える
827 参照

sql-server-2008 - リンクインのデータバスを SqlServer 2008 で複製する

非常に論争の多いデータベース用に、組織内で Linkedin のデータバス アーキテクチャ再作成しようとしています。私の最初の考えは、SQL サーバーの変更データ キャプチャ (CDC) 機能を使用してすべてのイベントをキャプチャし、LI が「ブートストラップ」で行うのと同じ方法でそれらを外部データストアに公開することです。cdc テーブルを常にプールするサービスを作成すると、それらをブートストラップ db に書き込み、pub/sub システムでイベントを発行できます。

ここでの私の質問は、誰かがこのようなことを試みたかどうか、そして私の前述のアプローチが良いアプローチのように見えるかどうか、またはこれらのイベントをキャプチャして公開するためのより良い方法があるかどうかです.

ありがとう。

編集:[詳細を追加]

セカンダリ データストアを完全に決定したわけではありません。少なくとも短期的には、別のサーバー上の別の SQL Server 2008 インスタンスになる可能性があります。このセカンダリ ストアの主な目的の 1 つは、メイン サーバーの負荷を軽減することです。私たちのメイン データベースは非常に大きくなり (>2.5 TB)、負荷を追加することは嫌われます。このアーキテクチャを実装できれば、追加の利点として、レプリケーションを本質的に管理できるようになり、メイン サーバーからレプリケーションの責任を大幅に取り除くことができます。

理想的には、CDC も使用しないでください。これは素晴らしいテクノロジーだと思いますが、これらの変更をローカルに保存するため、サーバーのパフォーマンスが低下することがわかりました。しかし、当分の間、これが私の最良の選択肢のようです。

編集 2: [その他のプロセスの詳細]

私が達成しようとしていることは、実際、複製と非常によく似ています。このセカンダリ サーバーでは、基本データベースのコピーと、変更を追跡するための一連のテーブルから始めます。次に、CDC テーブルを監視し、これらのイベントを新しいデータベースに移動し、ソースからクリアして、2 番目のサーバーのベース コピーに変更を適用するサービスを用意します。

次のコンポーネントは、発行されたすべての変更イベントを取得する pub/sub サービスであり、すべてのコンシューマーがこれらの変更イベントを取得するためにサブスクライブすることを選択できます。新しいコンシューマーがオンラインになると、完全な db コピーが「ブートストラップ」に使用されるため、変更イベントの取得を開始する前に完全で最新の db を取得できます。トラッキング テーブルは、コンシューマーがオフラインになり、イベントを見逃した場合にデルタを取得するためにも使用されます。

クライアントは、適切と思われるデータを変換するルールを適用できます。最初のアプリケーションは、元のデータベースの読み取り専用コピーを作成するためのものです。将来の計画には、データの非正規化と、MongoDb コレクションなどの他の形式への転送が含まれます。

この最初の部分は、リモート サーバーで CDC テーブルを維持できれば、おそらく最も簡単に達成できます。ただし、これを行う方法はありません。

これは複雑に聞こえるかもしれませんが、linkin の解決策から明らかなように、最近ではそれほど珍しくない実際の問題を解決します。

うまくいけば、これが役に立ちます。

0 投票する
2 に答える
1264 参照

sql-server - 変更データ キャプチャと SQL Server Analysis Services

時間の経過とともにデータが変化するデータベース アプリケーションを設計しています。履歴データを保持し、ユーザーが SQL Server Analysis Services を使用してそれを分析できるようにしたいのですが、これを可能にするデータベース スキーマを考え出すのに苦労しています。変更を追跡できるいくつかのスキーマ (CDC への依存を含む) を思いつきましたが、そのスキーマを SSAS 内で動作する BISM に変換する方法がわかりません。また、BISM に適切に変換されるスキーマを作成することもできましたが、それには私が探している歴史的な機能がありません。この種のことを行うための確立されたベストプラクティスはありますか?

これが私がやろうとしていることの例です:

毎月の売上高を含む Sales というファクト テーブルがあります。また、Customers という通常のディメンション テーブルを使用して、ユーザーが顧客ごとに分類された売上高を確認できるようにしています。顧客と営業担当者の間には多対多の関係があるため、顧客ディメンションを参照する責任という参照ディメンションと、責任ディメンションを参照する営業担当者参照ディメンションを作成できます。これで、販売 -> 顧客 -> 責任 -> 販売担当者という参照ディメンションのチェーンによって販売担当者にリンクされた販売ファクトができました。問題は、時間の経過とともに変化するのは販売の事実だけではないということです。また、特定の営業事実の時点で、どの営業担当者が顧客の責任者であったかの履歴を維持できるようにしたいと考えています。また、特定の販売事実が発生した時点で販売担当者のオフィスがどこにあったかを知りたいのですが、これは彼の現在の場所とは異なる可能性があります。また、特定のセールス ファクトの時点での顧客の組織の規模を知ることもできます。これも現在とは異なる可能性があります。これを BISM に適した方法でモデル化する方法がわかりません。これは、現在とは異なる可能性があります。これを BISM に適した方法でモデル化する方法がわかりません。これは、現在とは異なる可能性があります。これを BISM に適した方法でモデル化する方法がわかりません。

0 投票する
3 に答える
547 参照

sql - 履歴ビューを再構築するにはどうすればよいですか?

私は現在、時制データベースを保存するオプションとしてChangeDataCaptureを検討しています。デルタのみを保存し、私の問題を解決できるように見えるので、それは素晴らしいことです。CDCを有効にすると、の下にたくさんのテーブルが表示されSystem Tablesました。

クエリcdc.dbo_MyTableを実行すると、テーブルで行われたすべての変更を確認できます。では、どのように履歴ビューを作成しますか?たとえば、特定の日付の時点でのテーブルの状態を確認したい場合、どうすればよいでしょうか。それも可能ですか?

ログを取得して元のテーブルに適用する必要があるようですが、これを行うための組み込みの方法があるかどうか疑問に思いました。助言がありますか?

私が見ているユースケースのいくつか:

  • 特定の時点でのグラフの状態を知る
  • 異なる時間に2つのグラフが与えられた場合、異なるリンクのセットを知ってください(これは、テーブルを作成した後にEXCEPT句を使用して取得できる可能性があります)
0 投票する
2 に答える
1867 参照

sql-server-2008 - 更新および削除のみのデータキャプチャの変更

私たちのデータベースは挿入集約型(1泊あたり200〜500k)ですが、更新ライト(おそらく1日あたり数百)です。

挿入された行自体へのすべての変更の履歴を無期限に保存する必要があります(実際の挿入ではありません)。Change Data Captureを使用したいのですが、これをサポートするために必要な容量が利用できません。次のいずれかを実行することができれば、私の生活ははるかに楽になります。

1)変更データの追跡をUPDATESとDELETESのみに制限します。2)CDCテーブルからのINSERTSのみを定期的にクリーンアップします。

以前は、トリガーを使用していました(まだテーブルから外れていません!)。

0 投票する
2 に答える
833 参照

sql-server - 変更データ キャプチャ - SQL サーバー?

SQL SERVER について質問がありますか?

変更データ キャプチャ (CDC)

ユーザーの DELETE、UPDATE、INSERT 操作にそれがない CDC プロセスを適用します。では、ユーザー名の情報を取得するにはどうすればよいでしょうか。

0 投票する
0 に答える
1800 参照

sql-server - Express Edition で CDC 対応の DB を復元できない

データベースの復元中にこのエラーが発生しました

変更データ キャプチャが有効になっているため、SQL Server はデータベース 'XXX' を読み込めません。現在インストールされている SQL Server のエディションは、変更データ キャプチャをサポートしていません。サポートされているエディションの SQL Server を使用してデータベースの変更データ キャプチャを無効にするか、インスタンスを変更データ キャプチャをサポートするものにアップグレードしてください。

Mine SQL Server Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (Intel X86) 2012 年 6 月 28 日 08:42:37 Copyright (c) Microsoft Corporation Express Edition with Advanced Services on Windows NT 6.1 (Build 7600: ) Express Edition の CDC の機能ではありませんが、SQL サーバーに復元する必要がある XXX.bak ファイルを取得しました。ファイルから CDC 機能を削除するスクリプトの方法はありますか?

0 投票する
1 に答える
2044 参照

sql-server - 主キーのないテーブルを使用した SQL Server の変更追跡/変更データ キャプチャ?

データベース内の 1 つのテーブルの変更を監視し、それらを別のデータベース内のテーブルに複製する必要があります。何らかの理由で、元のデータベースの構造を変更できないため、トリガーを使用したり、制約を作成したりできません。変更追跡は、必要なものに対する理想的なソリューションのように見えましたが、一部のテーブルには主キーがありません定義されているため、使用できません。変更データ キャプチャについては、こちら - http://msdn.microsoft.com/en-us/library/bb522511.aspxに次のように書かれています。

.

「ネット トラッキングを有効にするには、ソース テーブルに主キーまたは一意のインデックスが必要です。」

基本的に、同様の問題があるようです。

このような状況の回避策はありますか? それとも、何かが足りないのでしょうか?

0 投票する
1 に答える
10571 参照

sql-server - ソーステーブルに新しい列を追加した後、CDC テーブルが機能しない

テーブルで CDC がまだ有効になっている間に、2 つの新しい列がソース テーブルに追加されました。CDC テーブルに新しい列を表示する必要がありますが、これを行うにはどのような手順を実行すればよいかわかりません。テーブルで CDC を無効にし、DB で CDC を無効にし、新しい列を cdc.captured_columns テーブルに追加し、CDC を有効にしました。しかし、今は CDC テーブルにデータがありません!

列がソース テーブルに追加された後に更新する必要がある CDC テーブルは他にありますか? これらは、System Tables フォルダーの下にあるすべての CDC テーブルです。

  • cdc.captured_columns <----- 新しい列を追加した場所
  • cdc.change_tables
  • cdc.dbo_myTable_CT <------ 変更データがキャプチャされたテーブル
  • cdc.ddl_history
  • cdc.index_columns
  • cdc.lsn_time_mapping
  • dbo.systranschemas