Sys.syscommittab テーブルに SQL Server からの重複するキー行

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:3083381
現象
メモリ内の SYSCOMMITTABLE および Microsoft SQL Server のディスク上の sys.syscommittab ファイルを比較するときは、重複するキー行を参照してください可能性があります。これらの重複する値には、バックアップ操作とチェックポイント操作が失敗する可能性があります。

原因
この問題は、SQL Server の変更の追跡で既知の問題が発生したために発生します。
解決方法
キーの重複が発生する要因を解決するには、自分の状況に応じて、以下の修正プログラムのいずれかが適用されます。

FIX 変更このデータベースで追跡を有効にした場合、SQL Server 2008 または SQL Server 2008 R2 データベースのバックアップ操作が失敗します。
http://support.microsoft.com/kb/2522893

修正: バックアップが失敗した SQL Server 2008、SQL Server 2008 R2 または SQL Server 2012年で追跡データベースに変更を有効にした場合
http://support.microsoft.com/kb/2603910

修正: バックアップ操作が失敗した SQL Server 2008、SQL Server 2008 R2 または SQL Server 2012年データベースで変更の追跡を有効にした後
http://support.microsoft.com/kb/2682488

これらの修正プログラムでは、重複するキー行を防ぐため、表示が継続して、自動的に削除しない重複した行です。重複行を削除するには、影響を受けるデータベースがデータベースのチェックポイントを完了できないし、バックアップが失敗する可能性があります。

重複行を削除するには、次の方法のいずれかを使用します。

方法 1: を無効にして、変更の追跡を有効にします。

  1. 変更の影響を受けるテーブルとデータベースの追跡を無効にします。
  2. 手動によるデータベースのチェックポイントを発行します。
  3. 変更の影響を受けるデータベースおよびテーブルの追跡を有効にします。

変更の追跡の詳細については、次を参照してください。有効にして、変更の追跡を無効にします。.

手動でチェックポイントを発行する方法の詳細については、次を参照してください。 チェックポイント (Transact SQL)

方法 2: 重複する行を手動で削除します。

  1. 「解決方法」セクション最後に、Transact SQL スクリプトをテキスト エディターにコピーします。
  2. 検索、 <AFFECTED_DB>、スクリプト内のプレース ホルダーし、影響を受けるデータベースの名前に置き換えます</AFFECTED_DB>。
  3. .Sql ファイルとしてハード ディスクに変更したスクリプトを保存します。次に例を示します。
    C:\temp\remove_duplicates.sql
2014 の SQL Server を実行している場合は、mssqlsystemresource.ldf および mssqlsystemresource.mdf ファイルに、サービスごとの SID のフル コントロールを与える必要があります。Todo、これらの手順に従います。
  1. インスタンス ID に対応する Binn ディレクトリに移動します。次に例を示します。

    C:\Program を指定して SQL Server\<Instance id="">\MSSQL\Binn</Instance>
  2. Mssqlsystemresource.ldf と mssqlsystemresource.mdf、プロパティを開き、[セキュリティ] タブをクリックします。
  3. SQL Server サービスのサービスごとの SID を検索し、既定のアクセス許可を確認します。

    * 読み取り & 実行
    * 読み取り
  4. SQL Server サービスを許可するサービスごとの SID のフル コントロール、およびアクセス許可のダイアログ ボックスを閉じます。
  5. シングル ユーザー モードで SQL Server を起動します。詳細については、シングル ユーザー モードで SQL Server を起動します。.
  6. 使用 sqlcmdSQL Server 専用管理者接続 (DAC) の下に接続するのにはコマンド ・ ライン。次に例を示します。

    sqlcmd -S PRODSERV1\MSSQLSERVER--E i - c:\temp\remove_duplicates.sql
    次に、変更後の Transact SQL スクリプトを実行します。
  7. マルチ ユーザー モードで SQL Server を起動し、バックアップと影響を受けるデータベースに対してチェックポイント操作が正常に完了します。手順 4 を使用していた場合は、既定値へのアクセス許可を元に戻します。

Transact SQL スクリプト

--Create a temporary database to store the necessary rows required to remove the duplicate dataif exists(select 1 from sys.databases where name = 'dbChangeTrackingMetadata')begindrop database dbChangeTrackingMetadataendgocreate database dbChangeTrackingMetadatago --Table to store the contents of the SYSCOMMITTABLEuse dbChangeTrackingMetadatagocreate table dbo.t_SYSCOMMITTABLE (commit_ts bigint,xdes_id bigint,commit_lbn bigint,commit_csn bigint,commit_time datetime)go --Table to store the duplicate rows to be removed from the sys.syscommittab tablecreate table dbo.t_syscommittab (commit_ts bigint,xdes_id bigint,commit_lbn bigint,commit_csn bigint,commit_time datetime,dbfragid int)go --Enable the usage of OPENROWSETexec sys.sp_setbuildresource 1go --Change <AFFECTED_DB> to the database that contains the duplicate valuesUSE <AFFECTED DB>godeclare @rowcount bigintSET @rowcount = 0 --Copy all rows from the SYSCOMMITTABLE into the temporary databaseinsert into dbChangeTrackingMetadata.dbo.t_SYSCOMMITTABLESELECT commit_ts, xdes_id, commit_lbn, commit_csn, commit_timeFROM OpenRowset (table SYSCOMMITTABLE, db_id (), 0, 0) --Save the duplicate values into the temporary databaseinsert into dbChangeTrackingMetadata.dbo.t_syscommittabselect ondisk_ct.* from sys.syscommittab as ondisk_ctjoin dbChangeTrackingMetadata.dbo.t_SYSCOMMITTABLE as inmem_cton ondisk_ct.xdes_id = inmem_ct.xdes_id --Delete the duplicate valuesdelete from sys.syscommittabwhere xdes_id in ( select xdes_id from dbChangeTrackingMetadata.dbo.t_syscommittab )set @rowcount = @@rowcountif (@rowcount > 0)beginprint ''print 'DELETED '+CAST(@rowcount as NVARCHAR(10))+' rows from sys.syscommittab that were also stored in SYSCOMMITTABLE'print ''endelsebeginprint ''print 'Failed to DELETE DUP rows from sys.syscommittab'print ''endexec sys.sp_setbuildresource 0go

警告: この記事は自動翻訳されています

プロパティ

文書番号:3083381 - 最終更新日: 09/25/2015 15:31:00 - リビジョン: 2.0

Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Workgroup, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Web

  • kbmt KB3083381 KbMtja
フィードバック