SQL Server2019數(shù)據(jù)庫(kù)備份與還原腳本(批量備份)
前言最近公司服務(wù)器到期,需要進(jìn)行數(shù)據(jù)遷移,而數(shù)據(jù)庫(kù)屬于多而繁瑣,通過(guò)圖形化界面一個(gè)一個(gè)備份所需時(shí)間成本很大,所以想著寫(xiě)一個(gè)sql腳本來(lái)執(zhí)行。
開(kāi)始
- 數(shù)據(jù)庫(kù)單個(gè)備份
- 數(shù)據(jù)庫(kù)批量備份
- 數(shù)據(jù)庫(kù)還原
- 數(shù)據(jù)庫(kù)還原報(bào)錯(cuò)問(wèn)題記錄
- 總結(jié)
1.數(shù)據(jù)庫(kù)單個(gè)備份
圖形化界面?zhèn)浞葸@里就不展示了,可以自行百度,下面直接貼代碼
USE MASTER IF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[BackupDataProc]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 ) DROP PROCEDURE BackupDataProc go create proc BackupDataProc @FullName Varchar(200)--入?yún)ⅲ〝?shù)據(jù)庫(kù)名) as begin Declare @FileFlag varchar(50) Set @FileFlag='C:\myfile\database\'+@FullName+'.bak'--備份到哪個(gè)路徑(C:\myfile\database\)根據(jù)自己需求來(lái)定 BackUp DataBase @FullName To Disk=@FileFlag with init--核心代碼 end exec BackupDataProc xxx
執(zhí)行成功后便會(huì)生成一個(gè).bak文件到指定文件夾中,如圖

2.數(shù)據(jù)庫(kù)批量備份(時(shí)間有點(diǎn)長(zhǎng),請(qǐng)等待)
USE MASTER
if exists(SELECT * FROM sys.types WHERE name = 'AllDatabasesNameType')
drop type AllDatabasesNameType
go
create type AllDatabasesNameType as table--自定義表類(lèi)型用于存儲(chǔ)數(shù)據(jù)庫(kù)名稱(chēng)
(
rowNum int ,
name nvarchar(60),
filename nvarchar(300)
)
go
IF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[BachBackupDataProc]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 )
DROP PROCEDURE BachBackupDataProc
go
create proc BachBackupDataProc
@filePath nvarchar(300)--入?yún)?,備份時(shí)的目標(biāo)路徑
as
begin
Declare @AllDatabasesName as AllDatabasesNameType --用于存儲(chǔ)系統(tǒng)中的數(shù)據(jù)庫(kù)名
Declare @i int --循環(huán)變量
insert into @AllDatabasesName(name,filename,rowNum) select name,filename,ROW_NUMBER() over(order by name) as rowNum from sysdatabases where name not in('master','tempdb','model','msdb') --賦值
set @i =1
--循環(huán)備份數(shù)據(jù)庫(kù)
while @i <= (select COUNT(*) from @AllDatabasesName)
begin
Declare @FileFlag varchar(500)
Declare @FullName varchar(50)
Select @FullName =name from @AllDatabasesName where rowNum = @i
Set @FileFlag=@filePath+@FullName+'.bak'
BackUp DataBase @FullName To Disk=@FileFlag with init
set @i = @i + 1
end
end
exec BachBackupDataProc 'C:\myfile\database\'
執(zhí)行結(jié)果效果如下圖:

3.數(shù)據(jù)庫(kù)還原
IF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[ReductionProc]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 ) DROP PROCEDURE ReductionProc go create proc ReductionProc @Name nvarchar(200)--入?yún)?數(shù)據(jù)庫(kù)名稱(chēng) as begin Declare @DiskName nvarchar(500) Declare @FileLogName nvarchar(100) Declare @FileFlagData nvarchar(500) Declare @FileFlagLog nvarchar(500) Set @FileLogName = @Name + '_log' Set @DiskName = 'C:\myfile\database\'+@Name+'.bak' ---(源)備份文件路徑 Set @FileFlagData='C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\'+@Name+'.mdf'---(目標(biāo))指定數(shù)據(jù)文件路徑 Set @FileFlagLog='C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\'+@FileLogName+'.ldf'---目標(biāo))指定日志文件路徑 RESTORE DATABASE @Name --為待還原庫(kù)名 FROM DISK = @DiskName ---備份文件名 WITH MOVE @Name TO @FileFlagData, ---指定數(shù)據(jù)文件路徑 MOVE @FileLogName TO @FileFlagLog, ---指定日志文件路徑 STATS = 10, REPLACE end go exec ReductionProc xxx
執(zhí)行后便能還原庫(kù)(我是拿這三個(gè)庫(kù)做測(cè)試,截的圖可能沒(méi)什么變化,你們可以嘗試下)

4.數(shù)據(jù)庫(kù)還原報(bào)錯(cuò)問(wèn)題記錄
當(dāng)然還原的過(guò)程可能會(huì)遇到一些問(wèn)題,比如:
1.版本不一樣
2.SQL Sql 邏輯文件'XXXXX ' 不是數(shù)據(jù)庫(kù)'YYY'的一部分。請(qǐng)使用 RESTORE FILELISTONLY 來(lái)列出邏輯文件名。
版本的話我試過(guò)了,高版本可以向下兼容,但是低版本不能向上兼容,可以統(tǒng)一版本來(lái)解決(如有更好的解決方案歡迎打擾)
第二個(gè)問(wèn)題呢就是腳本中‘MOVE' 他只能跟邏輯名,而有些數(shù)據(jù)庫(kù)的邏輯名并不是數(shù)據(jù)庫(kù)名稱(chēng),所以需要替換一下,
下面是查詢(xún)數(shù)據(jù)庫(kù)邏輯名的sql語(yǔ)句:
USE MASTER restore filelistonly from disk='D:\sql201database\Sence.bak'--根據(jù)自己的需求要變更路徑
如圖,

對(duì)于這些邏輯名與數(shù)據(jù)庫(kù)名稱(chēng)不一致的情況可以單獨(dú)拿出來(lái)重新執(zhí)行一下即可:
USE MASTER --這里注意要使用MASTER,以免出現(xiàn)待還原庫(kù)被占用的情況 RESTORE DATABASE Sence --為待還原庫(kù)名 FROM DISK = 'D:\sql201database\Sence.bak' ---備份文件名 WITH MOVE 'Sence_Guangxi' TO 'D:\Database\Data\Sence.mdf', ---指定數(shù)據(jù)文件路徑 MOVE 'Sence_Guangxi_log' TO 'D:\Database\Data\Sence_log.ldf', ---指定日志文件路徑 STATS = 10, REPLACE GO
5.總結(jié)
數(shù)據(jù)是無(wú)價(jià)的,對(duì)數(shù)據(jù)庫(kù)操作時(shí)備份是必須的。
數(shù)據(jù)是無(wú)價(jià)的,對(duì)數(shù)據(jù)庫(kù)操作時(shí)備份是必須的。
數(shù)據(jù)是無(wú)價(jià)的,對(duì)數(shù)據(jù)庫(kù)操作時(shí)備份是必須的。(重要的事說(shuō)三遍)
到此這篇關(guān)于SQL Server2019數(shù)據(jù)庫(kù)備份與還原腳本,數(shù)據(jù)庫(kù)可批量備份的文章就介紹到這了,更多相關(guān)SQL Server2019數(shù)據(jù)庫(kù)備份與還原腳本,數(shù)據(jù)庫(kù)可批量備份內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sqlserver查詢(xún)?nèi)サ糁貜?fù)數(shù)據(jù)的實(shí)現(xiàn)
這篇文章主要介紹了sqlserver查詢(xún)?nèi)サ糁貜?fù)數(shù)據(jù)的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
SQL Server中的集合運(yùn)算: UNION, EXCEPT和INTERSECT示例代碼詳解
這篇文章主要介紹了SQL Server中的集合運(yùn)算: UNION, EXCEPT和INTERSECT,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
分頁(yè)存儲(chǔ)過(guò)程(三)在sqlserver中打造更加準(zhǔn)確的分頁(yè)結(jié)果
昨天的那篇分頁(yè)存儲(chǔ)過(guò)程(二)在MS SQL Server中返回更加準(zhǔn)確的分頁(yè)結(jié)果 中使用了游標(biāo),有很多熱心的朋友參與討論,感謝大家的參與。2010-05-05
基于SQL Server OS的任務(wù)調(diào)度機(jī)制詳解
本篇文章小編為大家介紹,基于SQL Server OS的任務(wù)調(diào)度機(jī)制詳解。需要的朋友參考下2013-04-04
SQL Server中統(tǒng)計(jì)每個(gè)表行數(shù)的快速方法
這篇文章主要介紹了SQL Server中統(tǒng)計(jì)每個(gè)表行數(shù)的快速方法,本文不使用傳統(tǒng)的count()函數(shù),因?yàn)樗容^慢和占用資源,本文講解的是另一種方法,需要的朋友可以參考下2015-02-02
SQLSERVER 語(yǔ)句交錯(cuò)引發(fā)的死鎖問(wèn)題案例詳解
這篇文章主要介紹了SQLSERVER 語(yǔ)句交錯(cuò)引發(fā)的死鎖研究,要解決死鎖問(wèn)題,個(gè)人感覺(jué)需要非常熟知各種隔離級(jí)別,尤其是 可提交讀 模式下的 CURD 加解鎖過(guò)程,這一篇我們就來(lái)好好聊一聊2023-02-02
SQL server高并發(fā)生成唯一訂單號(hào)的方法實(shí)現(xiàn)
這篇文章主要介紹了SQL server高并發(fā)生成唯一訂單號(hào)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
sqlserver連接錯(cuò)誤之SQL評(píng)估期已過(guò)的問(wèn)題解決
很久沒(méi)用sqlserver了,現(xiàn)在出現(xiàn)評(píng)估期已過(guò)的問(wèn)題,本文就介紹一下sqlserver連接錯(cuò)誤之SQL評(píng)估期已過(guò)的問(wèn)題解決,文中根據(jù)圖文詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
sqlserver數(shù)據(jù)庫(kù)遷移后,孤立賬號(hào)解決辦法
sqlserver數(shù)據(jù)庫(kù)遷移后,孤立賬號(hào)解決辦法,需要的朋友可以參考下。2011-10-10

