SQL Server 收縮數據庫



//刪除大量數據
                 /***
                 * 
                 * BEGIN TRANSACTION;
                 * SELECT * INTO #keep FROM Original WHERE CreateDate > '2011-12-31'
                   TRUNCATE TABLE Task_Questionnaire
                   INSERT Task_Questionnaire SELECT * FROM #keep
                 * COMMIT TRANSACTION;
                 * 
                 * //TRUNCATE TABLE Task_Questionnaire 清空數據
                 * 
                 * BEGIN TRANSACTION;
                   SELECT * INTO [Task_Questionnaire_1] FROM [dbo].[Task_Questionnaire] WHERE tq_time>'2016-07-01';
                   ALTER TABLE [dbo].[Task_Questionnaire_1] ADD PRIMARY KEY ([tq_id]);
                   DROP TABLE [dbo].[Task_Questionnaire];
                   EXEC sp_rename N'[dbo].[Task_Questionnaire_1]', N'Task_Questionnaire';
                   COMMIT TRANSACTION;
                 ***/

select @@version

--收縮數據庫
USE DBName
GO
DBCC SHRINKDATABASE(N'DBName' )
GO
--收縮數據庫文件
USE ZhszpjData
GO
DBCC SHRINKFILE (N'DBName' , 0, TRUNCATEONLY)
GO

--1用dbcc命令,帶不同的參數測試
--1.1收縮指定數據庫中的數據文件和日志文件的大小
DBCC SHRINKDATABASE ( test )
DBCC SHRINKDATABASE ( test,TRUNCATEONLY )
DBCC SHRINKDATABASE ( test,NOTRUNCATE )
DBCC SHRINKDATABASE ( test ) WITH NO_INFOMSGS
    
--1.2收縮當前數據庫的指定數據或日志文件的大小,
DBCC SHRINKFILE (Test)
DBCC SHRINKFILE (Test_log)
DBCC SHRINKFILE (Test_log,EMPTYFILE)
DBCC SHRINKFILE (Test_log,TRUNCATEONLY) WITH NO_INFOMSGS
--2.用企業管理器
--選中數據庫->右鍵->任務->數據庫/文件->確定

1.清空日志:

DUMP TRANSACTION [databasename] WITH NO_LOG   

2.截斷事務日志:

BACKUPLOG [databasename] WITH NO_LOG   

3.收縮數據庫:

DBCC SHRINKDATABASE([databasename])  


SQLServer數據庫日志清理 清除sqlserver2008日志

SQL2008 的收縮日志 
由於SQL2008對文件和日志管理進行了優化,所以以下語句在SQL2005中可以運行但在SQL2008中已經被取消:
(SQL2005)


復制代碼 代碼如下:


BackupLog DNName with no_log
go
dumptransaction DNName with no_log
go
USE DNName 
DBCC SHRINKFILE (2)
Go




(SQL2008):
在SQL2008中清除日志就必須在簡單模式下進行,等清除動作完畢再調回到完全模式。

方案一:完全命令模式


復制代碼 代碼如下:


USE[master]
    GO
    ALTERDATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT
    GO
    ALTERDATABASE DNName SET RECOVERY SIMPLE   --簡單模式
    GO
    USE DNName 
    GO
    DBCC SHRINKFILE (N'DNName_Log' , 11, TRUNCATEONLY)
    GO
    USE[master]
    GO
    ALTERDATABASE DNName SET RECOVERY FULLWITH NO_WAIT
    GO
    ALTERDATABASE DNName SET RECOVERY FULL  --還原為完全模式
    GO



方案二:部分命令模式 + 任務-收縮-文件(單個數據庫)

ALTERDATABASE DNName SET RECOVERY SIMPLE   --簡單模式
GO

右鍵-任務-收縮-文件-確定 下來數據庫的日志只保留了1M

ALTERDATABASE DNName SET RECOVERY FULL  --還原為完全模式

GO

優點:此清除日志所運行消耗的時間短,90GB的日志在分鍾左右即可清除完畢,做完之后做個完全備份在分鍾內
即可完成。
缺點: 不過此動作最好不要經常使用,因為它的運行會帶來系統碎片。普通狀態下LOG和DIFF的備份即可截斷日志。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM