SQL Server 數據自動化運維
說到當前的數據庫類型,當前主要流行Mysql、Sql Server、Oracle等三種,區別相信大家都已經非常熟悉了,所以在此就不多介紹了,今天我們主要介紹一下我近期工作中遇到的問題,我們的門禁數據庫數據存放的數據量過大,導致從頁面上操作及查詢非常緩慢影響日常操作效率,由于領導要求數據需要保留,方便日后查詢,
所以我們一般通過日期判斷指定日期以外的數據刪除這個不可以實現了,當然換個思路想將指定的日期以外的數據插入到備份數據庫中,然后再根據指定日期外的數據刪除,其實這樣的思路也是對的,但是這樣的話,我需要執行兩條語句,如果第一條失敗了,第二條肯定無法執行了,所以我們按照這個思路將兩條命令整合成一條,接下來我們模擬一下。
我們表中有300多萬條數據,有點多,查詢肯定慢
我們為了保證數據在操作過程中安全性,我們需要對表進行備份;
我們將cardinfo表復制一份,然后再操作;select * into cardinfo_temp from cardinfo
我們查看select * into cardinfo_temp from DB.dbo.cardinfo
接下來我們就準備開始了操作前準備了
我們需要創建一張表做為數據備份的表,當然既然是備份,表的結構都必須是一樣的,所以我們還是按照以上方法,復制一張備份表,然后清空數據,select * into cardinfo_bak from DB.dbo.cardinfo
然后清空備份表中的數據delete cardinfo_bak
我們確認數據select count(*) from cardinfo_bak
我們要把3個月以外的數據全部移動到備份的表中
delete from cardinfo
output deleted.* into cardinfo_bak
where card_date_ts < dateadd(mm,-3,getdate())
我們開始執行,執行有報錯
我們根據報錯有兩種解決方法,但是我們用第二種;
2.刪除并重建表DB_Bak.dbo.acc_monitor_log,重建時將表中原來的標識列上的標識(identity)屬性去除,所以我們來修改,右擊表---設計---ID---表示屬性---將是更改為否
然后保存后,我們再次執行,執行成功;
接下來我們統計數據
select count(*) from cardinfo
select count(*) from cardinfo_bak
如果我們想操作三個月以內的數據的話,
delete from cardinfo
output deleted.* into cardinfo_bak
where card_date_tls between dateadd(mm,-3,getdate()) and getdate();
我們然后需要將該執行命令通過配置作業來定時執行
我們需要開啟SQL Agent服務才可以哦
我們新建作業
定義作業名稱
在步驟頁面---新建
定義步驟名稱、命令、及數據庫信息等
保存確認
新家計劃---執行時間
最終完成整個配置
再次我們的環境就介紹到這了,有問題可以給我留言,謝謝
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。