拆分备份(还原)比较大的数据库为多个bak文件
生活随笔
收集整理的這篇文章主要介紹了
拆分备份(还原)比较大的数据库为多个bak文件
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
工作中由于個(gè)別數(shù)據(jù)庫(kù)比較大,生成的備份文件也比較大,不方便存儲(chǔ)或者轉(zhuǎn)移,可以將文件備份為多個(gè)小的bak文件。
比如一個(gè)200G的數(shù)據(jù)庫(kù),可以拆分備份為10個(gè)bak文件,則每個(gè)bak文件約在20G左右。
?
備份代碼:
/************************************************************* 拆分備份dbName數(shù)據(jù)庫(kù) ,數(shù)據(jù)庫(kù)比較大,為了方便備份,將每個(gè)備份文件拆分為多個(gè)bak文件* Time: ************************************************************/USE [master]------刪除舊數(shù)據(jù)------------------------------------------------------------- --1. xp_delete_file --優(yōu)點(diǎn):兼容性好 --缺點(diǎn):不能刪除SQL Server之外創(chuàng)建的文件,包括RAR --備注:維護(hù)計(jì)劃中的“清理維護(hù)”也是調(diào)用此 擴(kuò)展存儲(chǔ)過(guò)程 來(lái)刪除文件。 DECLARE @oldDate DATETIME SET @oldDate = GETDATE() -0 --EXECUTE MASTER.dbo.xp_delete_file -- 0, --0: 備份文件,1: 維護(hù)計(jì)劃文本報(bào)告 -- N'D:\DataBak\dbName\', --文件路徑 -- N'bak', --文件擴(kuò)展名 -- @oldDate, --在此時(shí)間之前的文件一律刪除 -- 1 --刪除子文件夾中的文件 EXEC xp_cmdshell 'rd D:\DataBak\dbName',no_output --刪除文件夾,為了清理舊備份 EXEC xp_cmdshell 'mkdir D:\DataBak\dbName',no_output --重新創(chuàng)建文件夾 DECLARE @BakCount INT DECLARE @n INT DECLARE @Sql NVARCHAR(MAX) DECLARE @FILENAME VARCHAR(500) DECLARE @DATABaseName VARCHAR(500) DECLARE @DATABakPath VARCHAR(500)SET @DATABakPath = 'D:\DataBak\' SET @BakCount = 5 --要拆分的數(shù)據(jù)庫(kù)個(gè)數(shù) SET @DATABaseName = 'dbName'SET @n = 1 SET @FILENAME = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', ''),' ',''),':','') + '';DECLARE @exeText VARCHAR(100)SET @exeText = 'mkdir ' + + @DATABakPath + @DATABaseName + '\' + @FILENAME --創(chuàng)建備份目錄 EXEC xp_cmdshell @exeText,no_output SET @Sql = 'BACKUP DATABASE dbName TO DISK = N''' + @DATABakPath + @DATABaseName + '\' + @FILENAME + '\' + @DATABaseName + '_' + @FILENAME + '_0.bak'''WHILE @n < @BakCount BEGINSET @Sql = @Sql + ',DISK = N''' + @DATABakPath + @DATABaseName + '\' + @FILENAME + '\' + @DATABaseName + '_' + @FILENAME + '_' + CONVERT(VARCHAR, @n) + '.bak'''SET @n = @n + 1 END EXEC (@Sql) PRINT '-----------備份' + @DATABaseName + '完成---------------------' + CONVERT(VARCHAR(100), GETDATE(), 126) + '---------------'還原代碼:
/***還原拆分備份的文件 文件如果比較多 可以參考備份代碼 循環(huán)處理*****/RESTORE DATABASE dbName FROM DISK = 'E:\DataBak\dbName\20181101201523\dbName_20181101201523_0.bak', DISK = 'E:\DataBak\dbName\20181101201523\dbName_20181101201523_1.bak', DISK = 'E:\DataBak\dbName\20181101201523\dbName_20181101201523_2.bak', DISK = 'E:\DataBak\dbName\20181101201523\dbName_20181101201523_3.bak', DISK = 'E:\DataBak\dbName\20181101201523\dbName_20181101201523_4.bak' WITH MOVE 'dbName' TO 'D:\SqlDataBase\dbName.mdf', MOVE 'dbName_log' TO 'D:\SqlDataBase\dbName_log.ldf',STATS = 5?
總結(jié)
以上是生活随笔為你收集整理的拆分备份(还原)比较大的数据库为多个bak文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 跨服务器 快速 导入数据表记录 Ins
- 下一篇: vuejs 和 element 搭建的一