5

我知道分區之間的切換需要兩個分區都駐留在同一個文件組中。但我無法找到任何合適的位置來知道其中/原因背後的原因爲什麼在Partition'SWITCH'語句中,source&target必須位於同一個文件組中?

源表和目標表必須共享相同的文件組。 ALTER TABLE ... SWITCH語句的源表和目標表必須駐留在同一個文件組中,並且它們的大值列必須存儲在同一個文件組中。任何相應的索引,索引分區或索引視圖分區也必須位於同一個文件組中。但是,文件組可能與相應的表或其他相應的索引不同。 http://technet.microsoft.com/en-us/library/ms191160(v=sql.105).aspx

在我的分區執行的一個:

我把我的檔案表中同一文件組,執行開關,然後刪除 並重新創建聚集索引將數據移動到不同的filegroup.This耗資我很多!

我想將舊數據移動到不同的表,即archivaltable(用於分析目的)居住在不同的文件組(不同的驅動器),但由於這種限制,我已經實現提到

我理解這個概念其次(數據沒有實際移動)。但爲什麼? 期待的答案,如「由於sql-server頁面大小限制或分頁概念重疊等」等那樣。

請幫我看看或理解這個!

+2

正如它在頁面上所說的那樣鏈接到「數據沒有實際移動」 – 2014-10-08 13:34:24

+0

我已更新我的問題,並帶有預期的答案 – Recursive 2014-10-09 12:13:08

回答

1

switch聲明是有效的,因爲它基本上只是替換磁盤上的地址而不是移動數據。因此,這兩組數據都需要位於同一個文件組中,以便於實現這個「技巧」。

+0

但是,如果沒有錯,我們主要使用的開關是將舊數據存檔到其他表。是不是我的檔案表會駐留在另一個存儲區域的另一個文件組中。 – Recursive 2014-10-08 13:06:57

+0

SWITCH也可以替換存儲的文件組信息以便切換分區。它應該仍然是可能的。 – usr 2014-10-09 07:47:55

+0

@usr請分享我的鏈接或解釋您的評論。我無法完全理解您的評論。 – Recursive 2014-10-09 08:28:36

0

考慮以下設置

 FG1     FG2 
     |      | 
------------   ------------ 
|   |   |   | 
F1   F2   F3   F4 

FG s爲文件組和下方的F s爲單個文件。

我們有一個分區,其數據偶然發生在F1之內。在我們執行開關後,其所有數據仍將在F1之內。儘管限制只限於文件組,但限制實際上是「數據必須保留在同一文件中」。

爲什麼?因爲這就是我們能夠有效地做到這一點的全部原因。我們無法在F1範圍內取得範圍(甚至是單個數據頁),並突然將它們變爲F2(或F3F4)的一部分,因爲這些其他文件可能位於其他磁盤上。你不能說「這個磁盤的這個頁面現在是該文件的一部分,位於另一個磁盤上」 - 這不是(大多數傳統的)文件系統的工作方式 - 當然是SQL Server的工作方式。

而且在想跨文件組移動的情況下,你不能突然說F1(或它的一部分)現在是FG2組成部分,也是的,或相反,它屬於FG1。文件只屬於一個文件組,因爲File Groups是幾個功能的管理級別。

如果我們想移動一組兩個表之間的行,但我們希望把它寫在不具有數據移動的限制的方式,我們已經有工具來做到這一點 - INSERTDELETE(可能將它寫爲一個可愛的組合語句,使用來自DELETEOUTPUT作爲INSERT的行的來源。

微軟的某人可以坐下來寫下ALTER TABLE ... SWITCH的實現,它確實允許數據移動發生 - 但他們沒有看到需要實現這一點。相反,他們已經記錄了目前的限制。


(我會注意到,我還沒有鏈接到任何「官方消息人士」還是真的增添了新來的,不能從瞭解什麼是真正文件組,其中我希望有人收集在遇到實際上試圖在它們之間移動數據的情況之前,至少會有一些熟悉)

+0

假設表格1在FG1上,表格2是空的,在FG2上。我們現在切換Table1和Table2。我們不能只是將Table1的元數據更改爲空,而將Table2的元數據更改爲位於FG1上?是的,這會將Table2移動到不同的FG,但這可能是好的。 (並且在這些聲明中我可以互換使用表和分區)。 – usr 2014-10-15 15:01:54

+0

@usr - 除了實際數據的實際字節仍然位於磁盤1上,作爲'F1'文件的一部分。它違背了*具有*獨立文件組並且能夠控制*數據放置位置的目的。我希望我能在上面說明,但顯然不是。 – 2014-10-15 16:04:12

+0

我的觀點是交換機可以在這種情況下工作併產生有用的結果。當然,它不能移動數據。但是邏輯數據的變化可以起作用。或者,也許我只是沒有想到這裏。 – usr 2014-10-15 16:17:27

0

一個文件組可以存儲多個表的數據。該聲明將表格引用到文件組。當一個文件組存儲多個表的數據,並且您試圖只移動一個表的數據(只將一個表切換到另一個表)時,原始文件組應該被拆分,這需要大量資源來執行操作(物理移動數據)。在這種情況下,操作與將索引或羣集鍵移動到另一個文件組時類似。

編輯此外,源和目標FG及相關的分區方案和功能不必相同,你正在嘗試移動沒有必要千篇一律的分區定義在新文件組中的數據。

從下面

評論它爲什麼就不可能更新存儲文件組的信息,就像SQL Server中的元數據更新存儲到B樹的根元數據?在這個答案中,我沒有找到交換機無法在文件組之間切換的原因。

這並非不可能,但一個物理文件不能成爲多個FG的一部分。如果您只將元數據更改爲另一個FG,並且原始FG存儲多個表格數據(這意味着物理文件存儲多個表格數據),則需要進行文件分割,或者如果數據未移動,則文件將成爲多個FGs。

0

SWITCH的用例不是將數據重新定位到不同的存儲區,而是將數據移動到另一個表中作爲元數據操作。這是設計。沒有任何技術上的原因可以阻止SQL Server將分區移動到不同的文件組,但不再只是元數據,並且由於大量的數據移動,操作可能非常耗時。這基本上與您目前手動進行的昂貴操作相同。

這引發了一個問題,你爲什麼要將數據移動到不同的表中。我想你只想將分區移動到不同的文件組,但將它保留在原始表中。

+0

我希望它移動到不同的表(用於分析目的)居住在不同的文件組(不同的驅動器)。但由於這個限制,我已經實現了我提到的問題。 – Recursive 2014-10-16 10:50:55

+0

爲什麼歸檔數據需要用於分析的不同表格/文件組?無法使用分區列中的WHERE子句對原始表中的數據執行分析? – 2014-10-16 13:12:14

+0

它可以完成,但有一個不同的應用程序完全等待潛入此數據。我明白的是,如果我可以將其移動到不同的文件組,使生活易於分開管理數據。 – Recursive 2014-10-17 05:19:04

相關問題