一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - SQL Server2019數據庫備份與還原腳本(批量備份)

SQL Server2019數據庫備份與還原腳本(批量備份)

2021-11-30 16:44遇坑分享 Sql Server

本文主要介紹了SQL Server2019數據庫備份與還原腳本,數據庫可批量備份,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言最近公司服務器到期,需要進行數據遷移,而數據庫屬于多而繁瑣,通過圖形化界面一個一個備份所需時間成本很大,所以想著寫一個sql腳本來執行。

開始

  • 數據庫單個備份
  • 數據庫批量備份
  • 數據庫還原
  • 數據庫還原報錯問題記錄
  • 總結

1.數據庫單個備份

圖形化界面備份這里就不展示了,可以自行百度,下面直接貼代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)--入參(數據庫名)
as
begin
declare @fileflag varchar(50)
set @fileflag='c:\myfile\database\'+@fullname+'.bak'--備份到哪個路徑(c:\myfile\database\)根據自己需求來定
backup database @fullname to disk=@fileflag with init--核心代碼
end
 
exec backupdataproc xxx

執行成功后便會生成一個.bak文件到指定文件夾中,如圖

SQL Server2019數據庫備份與還原腳本(批量備份)

2.數據庫批量備份(時間有點長,請等待)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use master
if exists(select * from sys.types where name = 'alldatabasesnametype')
drop type alldatabasesnametype
go
create type alldatabasesnametype as table--自定義表類型用于存儲數據庫名稱
(
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)--入參,備份時的目標路徑
as
begin
declare @alldatabasesname as alldatabasesnametype --用于存儲系統中的數據庫名
declare @i int --循環變量
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
--循環備份數據庫
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\'

執行結果效果如下圖:

SQL Server2019數據庫備份與還原腳本(批量備份)

3.數據庫還原

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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)--入參 數據庫名稱
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'---(目標)指定數據文件路徑
set @fileflaglog='c:\program files\microsoft sql server\mssql15.mssqlserver\mssql\data\'+@filelogname+'.ldf'---目標)指定日志文件路徑
restore database @name --為待還原庫名
from disk = @diskname ---備份文件名
with move @name to @fileflagdata, ---指定數據文件路徑
move @filelogname to @fileflaglog, ---指定日志文件路徑
stats = 10, replace
end
go
 
exec reductionproc xxx

執行后便能還原庫(我是拿這三個庫做測試,截的圖可能沒什么變化,你們可以嘗試下)

SQL Server2019數據庫備份與還原腳本(批量備份)

4.數據庫還原報錯問題記錄

當然還原的過程可能會遇到一些問題,比如:

1.版本不一樣
2.sql sql 邏輯文件'xxxxx ' 不是數據庫'yyy'的一部分。請使用 restore filelistonly 來列出邏輯文件名。

版本的話我試過了,高版本可以向下兼容,但是低版本不能向上兼容,可以統一版本來解決(如有更好的解決方案歡迎打擾)
第二個問題呢就是腳本中‘move' 他只能跟邏輯名,而有些數據庫的邏輯名并不是數據庫名稱,所以需要替換一下,

下面是查詢數據庫邏輯名的sql語句:

?
1
2
use master
restore filelistonly from disk='d:\sql201database\sence.bak'--根據自己的需求要變更路徑

如圖,

SQL Server2019數據庫備份與還原腳本(批量備份)

對于這些邏輯名與數據庫名稱不一致的情況可以單獨拿出來重新執行一下即可:

?
1
2
3
4
5
6
7
use master --這里注意要使用master,以免出現待還原庫被占用的情況
restore database sence --為待還原庫名
from disk = 'd:\sql201database\sence.bak' ---備份文件名
with move 'sence_guangxi' to 'd:\database\data\sence.mdf', ---指定數據文件路徑
move 'sence_guangxi_log' to 'd:\database\data\sence_log.ldf', ---指定日志文件路徑
stats = 10, replace
go

5.總結

數據是無價的,對數據庫操作時備份是必須的。
數據是無價的,對數據庫操作時備份是必須的。
數據是無價的,對數據庫操作時備份是必須的。(重要的事說三遍)

到此這篇關于sql server2019數據庫備份與還原腳本,數據庫可批量備份的文章就介紹到這了,更多相關sql server2019數據庫備份與還原腳本,數據庫可批量備份內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/jierou/p/15569537.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 996免费视频国产在线播放 | 欧美又大又粗又爽视频 | 污黄漫 | 欧美洲大黑香蕉在线视频 | 精品久久久久久久国产潘金莲 | 国产成人影院 | 日本小网站 | 四虎影院久久久 | 国产一区二区三区久久精品小说 | 好大~好爽~再进去一点 | 99免费视频| 免费精品一区二区三区在线观看 | 国产一二在线观看视频网站 | 俄罗斯三级在线观看级 | 夫妻性生活免费在线观看 | 日韩亚洲欧美一区二区三区 | 青青草一区二区免费精品 | 深夜在线观看网站 | 特黄级| 动漫美女人物被黄漫在线看 | 国产综合亚洲专区在线 | 欧美一级在线全免费 | 久久re这里精品在线视频7 | 91久久夜色精品国产九色 | xxxx俄罗斯大白屁股 | 黑帮大佬与我的365天2标清中文 | 亚洲国产成人在线视频 | 秋霞黄色网 | 门卫老张和女警花小说 | 爱情岛论坛自拍永久入口 | 污书屋| www.尤物| 边摸边吃奶又黄激烈视频韩国 | a毛片久久免费观看 | 亚洲国产在线午夜视频无 | 丝瓜草莓香蕉绿巨人幸福宝 | 国产一卡| 久久精品视在线观看85 | 欧美日本道免费一区二区三区 | 午夜dj影院在线视频观看完整 | 91短视频社区在线观看 |