SQL Server 資料庫最小宕機時間遷移方案

2022-09-29 05:42:10 字數 3630 閱讀 2365

一、目的

在做sql server資料庫維護的時候,當上司要求我們把幾十g的資料檔案搬動到其它伺服器,並且要求最小宕機時間的時候,我們有沒什麼方案可以做到這些要求呢?

在這裡我們假設這兩台機器並不是在乙個機房上,這樣看起來我們的解決方案才更有意義,如果你那麼好運這兩台機器在同乙個區域網,那麼恭喜你,你可以多很多的方案可以做到。

二、分析與設計思路

其實我們假設的環境有兩個特點:第乙個是資料庫檔案比較大;第二個就是我們的傳送檔案的速度可能會比較慢。也許這傳送速度我們是沒有辦法了,但是我們可以就從檔案的大小這個問題出發,結合sql server的特性,這樣就有了下面的解決方案了。

為了使宕機時間最短,我們這裡使用了完整備份和差異備份來遷移資料庫,在白天的時候對需要遷移的資料庫進行一次完整備份(***_full.bak),並把備份檔案拷貝(這裡可以使用ftp軟體進行斷點續傳)到目標伺服器進行還原,等到下班時間之程式設計客棧後再進行一次差異備份(***_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 = 10go'

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:差異備份還原

decla @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四、後記

也許到了這裡應該結束了,但是往往事與願違,有的時候我rnliu們的資料庫檔案的大小並不是幾十g的,那麼我們應該如何做呢?是否還有其他的解決方案呢?

我之前就移動過700g的資料檔案,不過給我移動的時間比較充足,我是通過資料庫的作業進行愚公移山的,搬資料到新的伺服器上的,這樣的好處就是對之前的資料庫進行優化,比如rnliu進行資料庫引數的設定,比如表分割槽,在對之前資料庫影響盡量小的情況進行資料搬遷。詳細的過程下次再寫吧。

(作者:聽風吹雨 出處:

本文標題: sql server 資料庫最小宕機時間遷移方案

本文位址:

SQL Server 資料庫最小宕機遷移方案

一 目的 在做sql server資料庫維護的時候,當上司要求我們把幾十g的資料檔案搬動到其它伺服器,並且要求最小宕機時間的時候,我們有沒什麼方案可以做到這些要求呢?在這裡我們假設這兩台機器並不是在乙個機房上,這樣看起來我們的解決方案才更有意義,如果你那麼好運這兩台機器在同乙個區域網,那麼恭喜你,你...

SQLServer收縮資料庫

以下語句用於設定資料庫定時自動收縮資料庫 use master gosp dboption testdb,autoshrink true gouse testdb gocheckpoint go 清空日誌語句 dump transaction testdb with no log 截斷事務日誌 ba...

SQL Server資料庫檢修

使用資料庫的過程中,由於斷電或其他原因,有可能導致資料庫出現一些小錯誤,比如檢索某些表特別慢,查詢不到符合條件的資料等.出現這些情況的原因,往往是因為資料庫有些損壞,或索引不完整.在access中,有個修復資料庫的功能可以解決這個問題,在sql企業管理器,沒有這個功能,要用語句來完成,下面就介紹如何...