SQL Server 數據庫最小宕機遷移方案
SQL Server 數據庫是一種關系數據庫管理系統,功能性比較強大,在SQL Server 數據庫開發過程中研發出了很多新的版本,從而,SQL Server 數據庫功能性得到了很好的完善,下文中將重點為大家介紹SQL Server 數據庫最小宕機遷移方案,希望對大家能夠有所幫助。
分析與設計思路
其實我們假設的環境有兩個特點:***個是數據庫文件比較大;第二個就是我們的傳送文件的速度可能會比較慢。也許這傳送速度我們是沒有辦法了,但是我們可以就從文件的大小這個問題出發,結合SQL Server的特性,這樣就有了下面的解決方案了。
為了使宕機時間最短,我們這里使用了完整備份和差異備份來遷移數據庫,在白天的時候對需要遷移的數據庫進行一次完整備份(XXX_full.bak),并把備份文件拷貝(這里可以使用FTP軟件進行斷點續傳)到目標服務器進行還原,等到下班時間之后再進行一次差異備份(XXX_diff.bak),再把這個差異備份拷貝到目標服務器,在完整還原的基礎上再進行差異還原。
這里的宕機時間 = 差異備份時間 + 傳送差異備份文件時間 + 還原差異備份文件時間,這宕機時間是不是讓你感覺這時間很短呢?
參考腳本
注意修改下面腳本中數據庫的名稱,還有絕對路徑。
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+'-完整數據庫備份'',
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-完整數據庫備份',
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+'-差異數據庫備份'',
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-差異數據庫備份',
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
總結:關于SQL Server數據庫宕機遷移方案就為大家介紹到這里,還有沒有其他的方案可以實現上文中介紹的功能呢?如果大家知道,要拿出來與大家一起分享哦。相信通過上文的介紹,現在大家對SQL Server數據庫遷移有了深一步的了解,希望大家都能夠從本文中有所收獲。
【編輯推薦】