1

我現有的數據庫是SQL Server 2005上 - 版本9.0.5000。遷移到SQL Server 2008 R2改變分區表列數據類型

我們有超過500萬行數據的一個巨大的表。列PriceListDate被定義爲varchar(8)並且是複合主鍵的一部分。更糟糕的是,該表在此列上進行了分區。

既然現在有機會重塑DB,我考慮上改變了數據類型爲integer此列。但是,似乎沒有這樣做的簡單方法,但要用新數據類型創建另一個表,遷移數據,然後刪除舊錶和分區方案和函數。

什麼用這種方法來觀看任何指針?或者有更好的方法嗎?

拉吉

+0

爲什麼不將日期轉換爲日期類型?對於日期計算有很多支持,例如datediff函數,當列是日期,日期時間等時。當前設置有什麼問題?這個數據庫是一個數據倉庫(日期表示爲整數更常見)? – 2013-05-09 13:43:53

+0

@MichaelHarmon更改主數據的類型(我的猜測是clistered索引)將需要tempdb大小爲1-2個表大小+它將被記錄:即使最少的日誌記錄也會佔用大量的空間。 – Stoleg 2013-05-29 15:27:34

+0

表格大小是多少?此表格是否有其他更改? – Stoleg 2013-05-29 15:28:28

回答

1

這裏有一些想法:

如果你離開,因爲它是你可以有這樣的舊錶爲歷史表,創建新數據新layoyut另一個表,並創建一個視圖和/或SP來訪問它們或需要的一個。

如果決定更改數據類型: - 由於這個過程應該是可控的,應該分批進行反正 - 這將是很好的利用現有的分區。

我的solultion是: 設置3個表:Old_Big_Table,Temp_table(舊結構,索引,分區)和NEW_TABLE(用新的結構,在不同的分區方案和功能)

爲每個分區:

  1. 開關1分區來Temp_table
  2. 刪除索引
  3. 變化數據類型
  4. 創建索引ES按照新的PS和PF新的佈局
  5. 交換機分區NEW_TABLE上Temp_table
  6. 刪除新的索引
  7. 舊PS和PF上Temp_table創建舊索引
  8. 可選:登錄本次迭代到Log_table的結果

在步驟7中不是嚴格需要在任何PS和PF上創建舊索引。像索引結構一樣,它就足夠了。