目前有一個資料表非常大,已經有26 G的容量,想要切隔舊有的資料出來,於是
研究了SQL資料切割,實際執行後才發現公司的SQL版本是標準版,而不是企業版(Enterprise),無法使用Partitioning功能...
想請教有經驗的大家,有那些方式,可以將資料量很大的TABLE 切割出來,提升資料
查詢的效能,當稽核要往前查看資料時,再還原切割出來的資料,還請指點,謝謝!!
PS:已經有執行過資料庫壓縮和LDF檔減肥了,但MDF檔案還是有26G
這個問題問不同職能的人會有不同的答案
管系統網路的人是一種答案(上面提到的 Partitioning...)
寫程式的人會有另一種答案
我是寫程式的
我的做法是
1.確定所有table都有類似「寫入日期」的欄位(沒有就不用往下看了)
2.每個table逐一,用寫入日期做區隔,select出要archive的資料(例:五年之前)
3.用 bcp 之類的指令將資料複製出來
4.刪除原table裡的資料(同步驟2)
5.對database做壓縮
感謝海綿大大的回應,我也是寫程式派的,所以我使用了你說的bcp的指令。
但目前碰到一個瓶頸...就是日期指令該如何下??
日期我下單引號,會有格式錯誤...
下雙引號,有過,但出現的是bcp的參數說明??
再麻煩海綿大大指導,謝謝!!
指導不敢當
我手邊沒有SQL Server,抱歉沒法測試
依據這篇來看
你的bcp語法沒錯
建議先在query analyzer確定select ..between..23:59:59)是正確的
再貼過來bcp這邊使用(改改單雙引號之類的)
另外補充一點建議
先試個幾筆
要確定匯出來的檔案可以匯回去
再大刀闊斧
否則
我就變成資料殺手的罪人了
資料庫先備份,或者把資料還原到測試資料庫,測試bcp匯入匯出資料表。畢竟上線系統也要挑離峰時間做分割作業。
海綿寶寶:
..query analyzer確定select ..between..23:59:59)是正確的
=>這邊我確認過沒問題,但貼到bcp時,不論是單引號 或雙引號,怎麼改都無法成功,查資料到一種眼睛痛的程度...
如你說的匯入測試,在匯入中也遇到很多困難,因為資料格式本身有xml的資料,匯入在判斷資料的過程,也是無奈
目前有想放棄bcp的語法。
CalvinKuo
如上。困難重重之下,可能考慮直接資料庫匯出測試資料庫。
如果您生得出另一部 SQL Server 的話
(配備等級不限,只是放資料而已)
可以考慮將資料「切」過去那部 SQL server 冰起來
我的最後一招
就是架一部 MariaDB 來存放資料
不過我先聲明
我沒有實際經驗 SQL Server <-> MariaDB 的資料互轉
一切只是想像
有一個做法:
1.新增一家公司(營運中心) .
2.將舊資料(如2017年以前且完成作業的資料) INSERT 到新的營運中心.但是TABLE NAME 要加一個固定字元. 如 COPTA_O 或 INVTA_O
3.再新的營運中心建 VIEW : SELECT * FROM 原營運中心.COPTA UNION ALL SELECT * FROM COPTA_O
4.再將原營運中心的資料刪除.
5.正常作業:在原營運中心做, 舊資料查詢:在新營運中心做.
簡而言之:
新營運中心沒有COPTA的TABLE , 只有 COPTA的VIEW , 但是COPTA這個VIEW是舊資料(過時資料)與現行資料UNION 起來的.