SQL Server 數(shù)據(jù)庫(kù)最小宕機(jī)遷移方案
SQL Server 數(shù)據(jù)庫(kù)是一種關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),功能性比較強(qiáng)大,在SQL Server 數(shù)據(jù)庫(kù)開(kāi)發(fā)過(guò)程中研發(fā)出了很多新的版本,從而,SQL Server 數(shù)據(jù)庫(kù)功能性得到了很好的完善,下文中將重點(diǎn)為大家介紹SQL Server 數(shù)據(jù)庫(kù)最小宕機(jī)遷移方案,希望對(duì)大家能夠有所幫助。
分析與設(shè)計(jì)思路
其實(shí)我們假設(shè)的環(huán)境有兩個(gè)特點(diǎn):***個(gè)是數(shù)據(jù)庫(kù)文件比較大;第二個(gè)就是我們的傳送文件的速度可能會(huì)比較慢。也許這傳送速度我們是沒(méi)有辦法了,但是我們可以就從文件的大小這個(gè)問(wèn)題出發(fā),結(jié)合SQL Server的特性,這樣就有了下面的解決方案了。
為了使宕機(jī)時(shí)間最短,我們這里使用了完整備份和差異備份來(lái)遷移數(shù)據(jù)庫(kù),在白天的時(shí)候?qū)π枰w移的數(shù)據(jù)庫(kù)進(jìn)行一次完整備份(XXX_full.bak),并把備份文件拷貝(這里可以使用FTP軟件進(jìn)行斷點(diǎn)續(xù)傳)到目標(biāo)服務(wù)器進(jìn)行還原,等到下班時(shí)間之后再進(jìn)行一次差異備份(XXX_diff.bak),再把這個(gè)差異備份拷貝到目標(biāo)服務(wù)器,在完整還原的基礎(chǔ)上再進(jìn)行差異還原。
這里的宕機(jī)時(shí)間 = 差異備份時(shí)間 + 傳送差異備份文件時(shí)間 + 還原差異備份文件時(shí)間,這宕機(jī)時(shí)間是不是讓你感覺(jué)這時(shí)間很短呢?
參考腳本
注意修改下面腳本中數(shù)據(jù)庫(kù)的名稱,還有絕對(duì)路徑。
1:完整備份
declare @dbname varchar(100)
declare @sql nvarchar(max)
set @dbname = 'DataBaseName'
set @sql = '
--'+@dbname+'_full
BACKUP DATABASE ['+@dbname+']
TO DISK = ''D:\DBBackup\'+@dbname+'_full.bak''
WITH NOFORMAT, NOINIT, NAME = '''+@dbname+'-完整數(shù)據(jù)庫(kù)備份'',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO'
print @sql
--生成的SQL
--DataBaseName_full
BACKUP DATABASE [DataBaseName]
TO DISK = 'D:\DBBackup\DataBaseName_full.bak'
WITH NOFORMAT, NOINIT, NAME = 'DataBaseName-完整數(shù)據(jù)庫(kù)備份',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
2:完整備份還原
declare @dbname varchar(100)
declare @sql nvarchar(max)
set @dbname = 'DataBaseName'
set @sql = '
--RESTORE '+@dbname+'_full
RESTORE DATABASE ['+@dbname+']
FROM DISK = ''D:\DBBackup\'+@dbname+'_full.bak'' WITH FILE = 1,
MOVE N''DataBase_Name'' TO N''D:\DataBase\'+@dbname+'.mdf'',
MOVE N''DataBase_Name_log'' TO N''D:\DataBase\'+@dbname+'_log.ldf'',
NORECOVERY, NOUNLOAD, REPLACE, STATS = 10
GO'
print @sql
--生成的SQL
--RESTORE DataBaseName_full
RESTORE DATABASE [DataBaseName]
FROM DISK = 'D:\DBBackup\DataBaseName_full.bak' WITH FILE = 1,
MOVE N'DataBase_Name' TO N'D:\DataBase\DataBaseName.mdf',
MOVE N'DataBase_Name_log' TO N'D:\DataBase\DataBaseName_log.ldf',
NORECOVERY, NOUNLOAD, REPLACE, STATS = 10
GO
3:差異備份
declare @dbname varchar(100)
declare @sql nvarchar(max)
set @dbname = 'DataBaseName'
set @sql = '
--'+@dbname+'_diff
BACKUP DATABASE ['+@dbname+']
TO DISK = N''D:\DBBackup\'+@dbname+'_diff.bak''
WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'''+@dbname+'-差異數(shù)據(jù)庫(kù)備份'',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
'
print @sql
--生成的SQL
--DataBaseName_diff
BACKUP DATABASE [DataBaseName]
TO DISK = N'D:\DBBackup\DataBaseName_diff.bak'
WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'DataBaseName-差異數(shù)據(jù)庫(kù)備份',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
4:差異備份還原
declare @dbname varchar(100)
declare @sql nvarchar(max)
set @dbname = 'DataBaseName'
set @sql = '
--RESTORE '+@dbname+'_full
RESTORE DATABASE ['+@dbname+']
FROM DISK = ''D:\DBBackup\'+@dbname+'_diff.bak'' WITH FILE = 1,
NOUNLOAD, STATS = 10
GO'
print @sql
--生成的SQL
--RESTORE DataBaseName_full
RESTORE DATABASE [DataBaseName]
FROM DISK = 'D:\DBBackup\DataBaseName_diff.bak' WITH FILE = 1,
NOUNLOAD, STATS = 10
GO
總結(jié):關(guān)于SQL Server數(shù)據(jù)庫(kù)宕機(jī)遷移方案就為大家介紹到這里,還有沒(méi)有其他的方案可以實(shí)現(xiàn)上文中介紹的功能呢?如果大家知道,要拿出來(lái)與大家一起分享哦。相信通過(guò)上文的介紹,現(xiàn)在大家對(duì)SQL Server數(shù)據(jù)庫(kù)遷移有了深一步的了解,希望大家都能夠從本文中有所收獲。
【編輯推薦】