0

テーブルの1つにスイッチパーティションを実装しようとしていますが、パーティション機能、スキーム、ファイルグループが正常に動作しています。しかし、以下のコマンドを実行すると、ファイルグループエラーが発生します。誰かがあなたの考えを分かち合うことができますか?ソーステーブルと宛先テーブルのファイルグループの不一致によるスイッチの切り替えが失敗しました

コマンド: -

ALTER TABLE XYZ SWITCH PARTITION 5 TO ABC PARTITION 5; 

エラー: -

ALTER TABLE SWITCHステートメントが失敗しました。テーブル 'XYZ'はファイルグループ 'PRIMARY'にあり、テーブル 'ABC'のパーティション5はファイルグループ 'FG_5'にあります。

+0

複数のファイルグループにまたがってテーブルを配布すると、このエラーを回避する方法。 – Teja

+0

同じデータベースに2つのテーブルがありますか? –

+0

はい両方が同じdbにあります – Teja

答えて

0

既存のテーブルには、一部のクラスタインデックスが作成されていることがあります。したがって、異なる可能性のあるテーブル上のクラスタインデックスの作成時に、ファイルグループが記述されます。 ABCテーブルを削除して再度作成してクエリを実行できる場合は、

テーブルとインデックス名のファイルグループを確認するクエリ。

select f.name,o.name,i.name from sys.indexes i inner join sys.filegroups f on i.data_space_id=f.data_space_id 
inner join sys.all_objects o on o.object_id= i.object_id 
where o.name in ('ABC','XYZ') 

これは解決策だとは言いませんが、これは問題の解決に役立ちます。

+0

私がやっていることは、ALTER SWITCH PARTITIONを実行する前です。ソーステーブルにクラスタ化された列ストアインデックスを削除します。 – Teja

+0

上記のクエリを実行して、テーブルに関連付けられたファイルグループを表示できますか?ターゲットテーブルを削除して新しいテーブルを作成してクエリを実行しようとしましたか? –

0

エラーは、ソーステーブルとターゲットテーブルがストレージアライメントされていないことを示します。以下のクエリを実行して、ソースファイルとターゲットファイルグループがテーブルとインデックスの両方で一致していることを確認してください。

SELECT 
    OBJECT_NAME(p.object_id) AS ObjectName, 
    i.name AS IndexName, 
    p.index_id AS IndexID, 
    ds.name AS PartitionScheme, 
    p.partition_number AS PartitionNumber, 
    fg.name AS FileGroupName, 
    prv_left.value AS LowerBoundaryValue, 
    prv_right.value AS UpperBoundaryValue, 
    CASE pf.boundary_value_on_right WHEN 1 THEN 'RIGHT' ELSE 'LEFT' END AS PartitionFunctionRange, 
    p.rows AS Rows 
FROM 
    sys.partitions AS p INNER JOIN 
    sys.indexes AS i ON i.object_id = p.object_id AND i.index_id = p.index_id INNER JOIN 
    sys.data_spaces AS ds ON ds.data_space_id = i.data_space_id INNER JOIN 
    sys.partition_schemes AS ps ON ps.data_space_id = ds.data_space_id INNER JOIN 
    sys.partition_functions AS pf ON pf.function_id = ps.function_id INNER JOIN 
    sys.destination_data_spaces AS dds2 ON dds2.partition_scheme_id = ps.data_space_id AND dds2.destination_id = p.partition_number INNER JOIN 
    sys.filegroups AS fg ON fg.data_space_id = dds2.data_space_id LEFT OUTER JOIN 
    sys.partition_range_values AS prv_left ON ps.function_id = prv_left.function_id AND prv_left.boundary_id = p.partition_number - 1 LEFT OUTER JOIN 
    sys.partition_range_values AS prv_right ON ps.function_id = prv_right.function_id AND prv_right.boundary_id = p.partition_number 
WHERE 
    p.object_id IN (
     OBJECT_ID(N'dbo.ABC') 
     , OBJECT_ID(N'dbo.XYZ') 
    ) 
    AND p.partition_number = 5 
ORDER BY 
    ObjectName 
    ,IndexName 
    ,PartitionNumber; 
+0

このクエリを実行すると、行が返されません...実際にはp.object_idの部分が削除されましたが、返された行は残っていません... – Teja

+0

ソーステーブルにクラスタ化されたcolumnstoreインデックスを作成してから、 ... – Teja

+0

@Teja、クラスタ化されたcolumnstoreインデックスがパーティション化されていますか?私は、パーティション化されたテーブル/インデックスされていないテーブル/インデックスの両方を返すようにクエリを更新します。 –

関連する問題