SQL2005中因為刪除大量資料,導致事務日誌增大

2021-08-31 08:57:46 字數 2427 閱讀 4078

因為乙個表裡有大概500萬條記錄,detele的時候發現居然刪不掉了。就看到log檔案逐漸變大。最後出錯。

查了下,發覺delete命令貌似沒有什麼without transaction之類的引數可選,你只要delete就會有log。

--當然,實際操作前,要先壓縮日誌及資料庫檔案大小

/*--特別注意

請按步驟進行,未進行前面的步驟,請不要做後面的步驟

否則可能損壞你的資料庫.

--*/

1.清空日誌

dump transaction 庫名 with no_log

2.截斷事務日誌:

backup log 資料庫名 with no_log

3.收縮資料庫檔案(如果不壓縮,資料庫的檔案不會減小

企業管理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮檔案

--選擇日誌檔案--在收縮方式裡選擇收縮至xxm,這裡會給出乙個允許收縮到的最小m數,直接輸入這個數,確定就可以了

--選擇資料檔案--在收縮方式裡選擇收縮至xxm,這裡會給出乙個允許收縮到的最小m數,直接輸入這個數,確定就可以了

也可以用sql語句來完成

--收縮資料庫

dbcc shrinkdatabase(客戶資料)

--收縮指定資料檔案,1是檔案號,可以通過這個語句查詢到:select * from sysfiles

dbcc shrinkfile(1)

4.為了最大化的縮小日誌檔案(如果是sql 7.0,這步只能在查詢分析器中進行)

a.分離資料庫:

企業管理器--伺服器--資料庫--右鍵--分離資料庫

b.在我的電腦中刪除log檔案

c.附加資料庫:

企業管理器--伺服器--資料庫--右鍵--附加資料庫

此法將生成新的log,大小只有500多k

或用**:

下面的示例分離 pubs,然後將 pubs 中的乙個檔案附加到當前伺服器。

a.分離

exec sp_detach_db @dbname = 'pubs'

b.刪除日誌檔案

c.再附加

exec sp_attach_single_file_db @dbname = 'pubs',

@physname = 'c:/program files/microsoft sql server/mssql/data/pubs.mdf'

5.為了以後能自動收縮,做如下設定:

企業管理器--伺服器--右鍵資料庫--屬性--選項--選擇"自動收縮"

--sql語句設定方式:

exec sp_dboption '資料庫名', 'autoshrink', 'true'

6.如果想以後不讓它日誌增長得太大

企業管理器--伺服器--右鍵資料庫--屬性--事務日誌

--將檔案增長限制為xm(x是你允許的最大資料檔案大小)

--sql語句的設定方式:

alter database 資料庫名 modify file(name=邏輯檔名,maxsize=20)

7.--設定最小日誌記錄模式

alter database set recovery ******

--更新操作

--恢復日誌記錄模式

alter database set recovery full

********************====猥瑣的分割線******************************====

經過一番試驗,確實以上的辦法實在沒看到作用。。嗯嗯。。

set rowcount 10

delete flow_step from flow_status inner join flow_step on flow_status.flow_id = flow_step.step_flow_id

where flow_status.flow_documentno like 'tnsh200710%'

/*if delete takes place than loop each time deleting 10,000 recs, loop until there's no record left to delete*/

while @@rowcount > 0

begin

delete flow_step from flow_status inner join flow_step on flow_status.flow_id = flow_step.step_flow_id

where flow_status.flow_documentno like 'tnsh200710%'

end

看上去應該可以寫成procedure,嗯就先這樣吧

SQL2005中行轉列

sql2005中有函式可以直接將行轉列,這樣行轉列就好做多了。但是數值列和文字列稍有不同。1 文字列示例 create table tb 姓名 varchar 10 課程 varchar 10 分數 int insert into tb values 張三 語文 74 insert into tb ...

初學 sql2005中的xquery

今天小試了一下sql2005中操作xml的語句 如表divname中有列 id int型 stylecontent xml弄 content內容格式如下 rows p head p div id title class title p span class lower span p div p ul...

恢復SQL2005誤刪除的資料

由於同事寫錯作業指令碼,導致昨天晚上系統當中一張重要表的大概2萬資料被刪除。早上發現時的情況是,半夜 誤操作之後 備份過資料,昨天的備份已經被新的備份取代而且沒有日誌備份.貌似這個策略不太合理。這個結果就是,沒有誤操作之前的全庫備份,無法通過restore log 來恢復。但是備份後沒有清除日誌,這...