多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > Sqlserver > SQL Server 數據庫最小宕機遷移方案

SQL Server 數據庫最小宕機遷移方案

來源:程序員人生   發布時間:2013-10-23 03:07:36 閱讀次數:3106次

一、目的

在做SQL Server數據庫維護的時候,當上司要求我們把幾十G的數據文件搬動到其它服務器,并且要求最小宕機時間的時候,我們有沒什么方案可以做到這些要求呢?

在這里我們假設這兩臺機器并不是在一個機房上,這樣看起來我們的解決方案才更有意義,如果你那么好運這兩臺機器在同一個局域網,那么恭喜你,你可以多很多的方案可以做到。

二、分析與設計思路

其實我們假設的環境有兩個特點:第一個是數據庫文件比較大;第二個就是我們的傳送文件的速度可能會比較慢。也許這傳送速度我們是沒有辦法了,但是我們可以就從文件的大小這個問題出發,結合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:DBBackupDataBaseName_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:DBBackupDataBaseName_full.bak' WITH FILE = 1, 

MOVE N'DataBase_Name' TO N'D:DataBaseDataBaseName.mdf', 

MOVE N'DataBase_Name_log' TO N'D:DataBaseDataBaseName_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:DBBackupDataBaseName_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:DBBackupDataBaseName_diff.bak' WITH FILE = 1, 

NOUNLOAD, STATS = 10

GO

四、后記

也許到了這里應該結束了,但是往往事與愿違,有的時候我們的數據庫文件的大小并不是幾十G的,那么我們應該如何做呢?是否還有其他的解決方案呢?

我之前就移動過700G的數據文件,不過給我移動的時間比較充足,我是通過數據庫的作業進行愚公移山的,搬數據到新的服務器上的,這樣的好處就是對之前的數據庫進行優化,比如進行數據庫參數的設置,比如表分區,在對之前數據庫影響盡量小的情況進行數據搬遷。詳細的過程下次再寫吧。

作者:聽風吹雨 出處:http://gaizai.cnblogs.com/

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 最近免费字幕中文大全在线观看 | 久久www免费人成_看片高清 | 另类小说图片 | 男女做爽爽免费视频 | 视频h在线 | 深爱激情五月婷婷 | 无人精品乱码一区二区三区 | 日韩 欧美 自拍 | 免费能看的黄色网址 | 欧美羞羞 | 用劲好爽再深点视频 | 精品国产福利在线观看网址2022 | 在线观看亚洲免费视频 | 亚州色图欧美色图 | 国产成人咱精品视频免费网站 | 国产精品自产拍在线观看 | 中文字幕中文字幕中中文 | 热久久国产欧美一区二区精品 | 成人精品免费视频 | 亚洲在线网 | 最近高清中文字幕大全免费1 | 欧美一级影院 | 国产亚洲精品成人一区看片 | 国产一区视频在线播放 | 特级黄aaaaaaaaa毛片 | 国产精品久久久久毛片 | 末发育娇小性色xxxxx | 欧美一级成人一区二区三区 | 中文字幕在线国产 | 亚洲好视频 | 国产三级国产精品国产国在线观看 | 国产精品免费一区二区三区 | 国产精品久久久久久亚洲小说 | 精品久久久久久亚洲 | 免费在线亚洲 | 成人亚洲国产综合精品91 | 在线看片日韩 | 亚洲国产高清人在线 | 视频二区好吊色永久视频 | 国产一区亚洲一区 | 欧美一级毛片无遮无挡 |