SQL Server 2017 CU3で奇妙なエラーメッセージが発生します。データベースを移行し、ファイルグループを再編成しています。「再編成」とは、オブジェクトの新しいファイルグループにパーティション関数とパーティション構成を作成し、パーティション分割中にインデックスを再構築してからパーティション分割を削除するストアドプロシージャを使用することを意味します。
最後に、いくつかの空のファイルグループを取得しました。それらのファイルは削除されます。また、ファイルグループ自体も削除されます。これはほとんどの場合うまくいきます。ただし、2つのデータベースの場合、ファイルを削除しました... 関連付けられているファイルがないままファイルグループが残っていますが
ALTER DATABASE REMOVE FILEGROUP
エラー5042をスローします。
ファイルグループ 'xyz'は空ではないため削除できません。
質問
空のファイルグループを削除するにはどうすればよいですか?
私はすでにいくつかの一般的な問題を読みましたが、それらは私のシステムにはありません:
チェック済み:
SELECT * FROM sys.partition_schemes; SELECT * FROM sys.partition_functions;
0行...データベースにパーティションオブジェクトが残っていません
UPDATE STATISTICS
データベース内のすべてのオブジェクト無効
ファイルグループのインデックスをチェックします。
SELECT * FROM sys.data_spaces ds INNER JOIN sys.indexes i ON ds.data_space_id = i.data_space_id WHERE ds.name = 'xyz'
0行
ファイルグループ内のオブジェクトを確認します。
SELECT au.*, ds.name AS [data_space_name], ds.type AS [data_space_type], p.rows, o.name AS [object_name] FROM sys.allocation_units au INNER JOIN sys.data_spaces ds ON au.data_space_id = ds.data_space_id INNER JOIN sys.partitions p ON au.container_id = p.partition_id INNER JOIN sys.objects o ON p.object_id = o.object_id WHERE au.type_desc = 'LOB_DATA' AND ds.name ='xyz'
0行
また、ファイルグループからファイルを削除する前にDBCC SHRINKFILE
、パラメーターを使用しEMPTYFILE
て試してみました。それは私には本当に意味がありませんが、私はそれを修正として説明する解決策を読みます。とにかく効果がなかった。
サーバー障害に関するこの質問を読んで、次のことを試しました。
- すべての統計を更新
- インデックスに関連しないすべての統計を削除します
しかし、これは効果がありませんでした。ファイルが関連付けられていないファイルグループがまだあり、ファイルグループを削除できません。これは一部のデータベースで発生し、他のデータベースでは発生しない(同じ構造を持つ)ため、完全に困惑します。DBCC CHECK FILEGROUP
この空のファイルグループで実行すると、次のような一連のエラーメッセージが表示されます。
チェックされていないファイルグループ "CCC_APPLICATION_new"(ID 8)に存在するため、オブジェクト "STORY_TRANSLATIONSCCC"(ID 120387498)、インデックス "Ref90159CCC"(ID 2)の行セットID 72057594712162304を処理できません。
'STORY_TRANSLATIONSCCC'のDBCC結果。オブジェクト「STORY_TRANSLATIONSCCC」の0ページに0行あります。
これは正常ですか、それとも異常なことを示していますか?
この質問は重複している可能性がありますが、dba.stackexchangeに関する他の質問で私に役立つ解決策を見つけることができません。私が既に試したことをリストで見てください。これは、「未使用のファイルグループを削除できない」で説明されているソリューションと同じです。
もっと詳しく
エラーが発生する前に私が何をすべきかを理解するのに役立つかもしれません。新しいサーバーへの移行を計画しています。現在、これをテストインスタンスでテストしています。データベースは本番サーバーから復元され、復旧モデルはシンプルに切り替えられます。私の目標は、ファイルグループを再構築し、ファイルグループごとに1つのファイルを持つモデルから、ファイルグループごとに2つのファイルを持つモデルに移動することです。それを実現するために、それぞれ2つのファイルを持つ新しい空のファイルグループを作成し、データを移動します。残念ながら、ほとんどのオブジェクトにはLOBデータ(XMLおよびバイナリ)があります。そのため、パーティション化をヘルパーとして活用して、LOBデータも移動します。最後に、すべてのデータは新しいファイルグループにあり、古いファイルグループは空です。次に、すべてのファイルを削除し、それぞれのファイルグループも削除します。プライマリファイルグループはそのまま残り、別のファイルが追加されます。私の質問。このプロセスは正常に機能しますが、2つのデータベースではファイルを削除できますが、ファイルグループは削除できません。驚いたことに、これらのデータベースの構造は、他のデータベースの構造と同じである必要があり、データの移動と古いファイルグループの削除のプロセスで問題が発生しませんでした。
問題が発生した2つのデータベースのファイルグループとファイルのリストを次に示します。
- CCC_GENTE
前
+-----------------+------------+
| Filegroup | Filename |
+-----------------+------------+
| CCC_APPLICATION | CCC_APP |
+-----------------+------------+
| CCC_ARCHIVE | CCC_ARCHIV |
+-----------------+------------+
| CCC_AXN | CCC_AXN |
+-----------------+------------+
| CCC_GDV | CCC_GDV |
+-----------------+------------+
| PRIMARY | CCC |
+-----------------+------------+
後
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| Filegroup name | Filegroup temporary name | Filename (logical) | Status |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_APPLICATION | - | CCC_APP | file removed, filegroup cannot be removed (error) |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_ARCHIVE | - | CCC_ARCHIV | file and filegroup removed |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_AXN | - | CCC_AXN | file and filegroup removed |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_GDV | - | CCC_GDV | file and filegroup removed |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| PRIMARY | - | CCC | file renamed to PRIMARY_1 |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| PRIMARY | - | PRIMARY_2 | new file added |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_APPLICATION | CCC_APPLICATION_new | CCC_APPLICATION_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_APPLICATION | CCC_APPLICATION_new | CCC_APPLICATION_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_ARCHIVE | CCC_ARCHIVE_new | CCC_ARCHIVE_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_ARCHIVE | CCC_ARCHIVE_new | CCC_ARCHIVE_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_AXN | CCC_AXN_new | CCC_AXN_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_AXN | CCC_AXN_new | CCC_AXN_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_GDV | CCC_GDV_new | CCC_GDV_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_GDV | CCC_GDV_new | CCC_GDV_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
少しお役に立てば幸いです。ファイルグループ名が異なる2番目のデータベースもありますが、簡潔にするために省略しています。