MS SQL收縮資料庫
注意,此存儲過程在建在master數據庫中
*/
Create?proc?shrinkdb
(
????@db_name?varchar(100)----數據庫名稱
)
as
begin
????----1.清空日志
????dump?transaction?@db_name??with??no_log
????--2.截斷事務日志
????backup?log?@db_name?with?no_log
????--3.收縮數據庫文件(如果不壓縮,數據庫的文件不會減小
????dbcc?shrinkdatabase(@db_name)
????--4.設置自動收縮
????exec?sp_dboption?@db_name,autoshrink,true
end
go
上面過程是改自:
http://www.cnblogs.com/athrun/archive/2007/12/17/1003807.html
通過日志恢復MS SQL數據案例
http://www.cnblogs.com/athrun/archive/2007/10/15/925312.html
http://www.cnblogs.com/athrun/archive/2007/08/01/838383.html
?
1、用BACKUP LOG database WITH NO_LOG清除日志
把數據庫屬性中的故障還原模型改為“簡單”可以大大減慢日志增長的速度。
如果把還原模型調到簡單,這樣就不支持時間點還原了,但是日志文件會很小,如果數據比較重要推薦還是把數據庫的還原模型調為完全.
用BACKUP LOG database WITH NO_LOG命名后,會截斷不活動日志,不減小物理日志文件的大小,但邏輯日志會減小,收縮數據庫后會把不活動虛擬日志刪除來釋放空間,不會損壞數據。
如果日志被截斷并收縮數據庫后,就不能直接用最近的一個全庫備份做時間點還原,建議立即備份數據庫,以防萬一。
2、sql server運行中,是否能刪除主數據庫事務日志文件
步驟如下:
(1)、分離數據庫企業管理器--數據庫--右擊你要刪除日志的數據庫--所有任務--分離數據庫
(2)、然后刪除日志文件
(3)、然后再附加數據庫
企業管理器--數據庫--右擊數據庫--所有任務--附加數據庫這時候只附加。mdf就可以了。
這個不一定管用,有時間會有問題.
3、壓縮SQL數據庫及日志的詳細方法
SQL Server 2000基礎教程——壓縮數據庫數據庫在使用一段時間后,時常會出現因數據刪除而造成數據庫中空閑空間太多的情況,這時就需要減少分配給數據庫文件和事務日志文件的磁盤空間,以免浪費磁盤空間。當數據庫中沒有數據時,可以修改數據庫文件屬性直接改變其占用空間,但當數據庫中有數據時,這樣做會破壞數據庫中的數據,因此需要使用壓縮的方式來縮減數據庫空間。可以在數據庫屬性選項中選擇“Auto shrink”選項,讓系統自動壓縮數據庫,也可以用人工的方法來壓縮。人工壓縮數據庫有以下兩種方式:
1、用Enterprise Manager 壓縮數據庫
在Enterprise Manager 中在所要壓縮的數據庫上單擊右鍵,從快捷菜單中的“所有任務(All Tasks)”中選擇“Shrink Database(壓縮數據庫)”選項,可以針對每個數據庫文件進行不同的壓縮設置。並且可以用循環工作計劃來執行壓縮。設置完成后單擊“OK” 按鈕就開始壓縮數據庫,在壓縮結束后會顯示一個壓縮情況信息框。
2、用Transact-SQL 命令壓縮數據庫
可以使用DBCC SHRINKDATABASE 和DBCC SHRINKFILE 命令來壓縮數據庫。其中DBCC SHRINKDATABASE 命令對數據庫進行壓縮,DBCC SHRINKFILE 命令對數據庫中指定的文件進行壓縮。
(1) DBCC SHRINKDATABASE
DBCC SHRINKDATABASE 命令語法如下:
DBCC SHRINKDATABASE (database_name [, target_percent]
[, {NOTRUNCATE | TRUNCATEONLY}] )
各參數說明如下:
·target_percent 指定將數據庫壓縮后,未使用的空間占數據庫大小的百分之幾。如果指定的百分比過大,超過了壓縮前未使用空間所占的比例,則數據庫不會被壓縮。并且壓縮后的數據庫不能比數據庫初始設定的容量小。
·NOTRUECATE
將數據庫縮減后剩余的空間保留在數據庫,中不返還給操作系統
。如果不選擇此選項,則剩余的空間返還給操作系統。
·TRUNCATEONLY
將數據庫縮減后剩余的空間返還給操作系統。使用此命令時SQL Server 將文件縮減到最后一個文件分配,區域但不移動任何數據文件。選擇此項后,target_percent 選項就無效了。例6-14: 壓縮數據庫mytest 的未使用空間為數據庫大小的20%
。
dbcc shrinkdatabase (mytest, 20)
運行結果如下:
DBCC execution completed. If DBCC printed error
messages, contact your system administrator.
(2) DBCC SHRINKFILE
DBCC SHRINKFILE 命令壓縮當前數據庫中的文件。其語法如下:
DBCC SHRINKFILE ( {file_name | file_id }
{ [, target_size] |
[, {EMPTYFILE | NOTRUNCATE | TRUNCATEONLY}] } )
各參數說明如下:
·file_id
指定要壓縮的文件的鑒別號(Identification number, 即ID)
。文件的ID 號可以通過 FILE_ID()函數或如本章前面所講述
的Sp_helpdb 系統存儲過程來得到。
·target_size
指定文件壓縮后的大小。以MB 為單位。如果不指定此選項,SQL Server 就會盡最大可能地縮減文件。
·EMPTYFILE
指明此文件不再使用,將移動所有在此文件中的數據到同一文件組中的其它文件中去。執行帶此參數的命令后,此文件就可以用ALTER DATABASE 命令來刪除了。 其余參數NOTRUNCATE 和TRUNCATEONLY 與DBCC SHRINKDATABASE
命令中的含義相同。
企業管理器里面的方法:
1、打開企業管理器
2、打開要處理的數據庫
3、點擊最上面菜單>工具>SQL查詢分析器,打開SQL查詢分析器
4、在輸入窗口里面輸入:
Code:
DUMP TRANSACTION [數據庫名] WITH? NO_LOG
BACKUP LOG [數據庫名] WITH NO_LOG
DBCC SHRINKDATABASE([數據庫名])
點擊綠色的小三角(或按F5)執行查詢,等狀態欄提示處理完成
即可!
程序里面的方法:
壓縮數據庫日志
--1.清空日志
exec('DUMP TRANSACTION ['+@dbname+'] WITH? NO_LOG')
--2.截斷事務日志:
exec('BACKUP LOG ['+@dbname+'] WITH NO_LOG')
--3.收縮數據庫文件(如果不壓縮,數據庫的文件不會減小
exec('DBCC SHRINKDATABASE(['+@dbname+'])')
4、減小日志的方法:
一、用如下步做了:
1、DUMP TRANSACTION 庫名 WITH no_log
2、dbcc shrinkfile(logfilename)
3、收縮數據庫
4、設定自動收縮。
二、分離數據庫,刪除日志文件,再附加,OK!右擊數據庫--所有任務--分離or 附加
三、1、backup log 庫名 WITH no_log,2、dbcc shrinkfile(logfilename),3、收縮數據庫
?
--壓縮日志及數據庫文件大小???????
??/*--特別注意???
????
??請按步驟進行,未進行前面的步驟,請不要做后面的步驟???
??否則可能損壞你的數據庫.???
????
????
??一般不建議做第4,6兩步???
??第4步不安全,有可能損壞數據庫或丟失數據???
??第6步如果日志達到上限,則以后的數據庫處理會失敗,在清理日志后才能恢復.???
??--*/???
????
??--下面的所有庫名都指你要處理的數據庫的庫名???
????
??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???=???'庫名'???
????
??b.刪除日志文件???
????
??c.再附加???
??EXEC???sp_attach_single_file_db???@dbname???=???'庫名',?????
????????@physname???=???'c:\Program???Files\Microsoft???SQL???Server\MSSQL\Data\庫名.mdf'???
????
??5.為了以后能自動收縮,做如下設置:???
??企業管理器--服務器--右鍵數據庫--屬性--選項--選擇"自動收縮"???
????
??--SQL語句設置方式:???
??EXEC???sp_dboption???'庫名',???'autoshrink',???'TRUE'???
????
??6.如果想以后不讓它日志增長得太大???
??企業管理器--服務器--右鍵數據庫--屬性--事務日志???
??--將文件增長限制為xM(x是你允許的最大數據文件大小)???
????
??--SQL語句的設置方式:???
??alter???database???庫名???modify???file(name=邏輯文件名,maxsize=20)
轉載于:https://www.cnblogs.com/Athrun/archive/2008/12/31/1366184.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的MS SQL收縮資料庫的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 数据库查询系统_pytho
- 下一篇: view.post(Runnable)