none
完整備份+差異備份+log備份

    問題

  • 您好:

    請問,若是要
    1次完整備份/周
    1次差異備份/天
    1次log備份/小時

    請問以下方式是否正確?謝謝!

    為了減少 restore 時,搭配指定FILE=?

    1.先做完整備份當基底
      + wih init  初始化

    2.每天排程 做 差異備份
      + wih init  初始化

     (因為差異備份是從 完整<-->目前差異備份時間)

    3.排程 log 備份
      第1次 +with init初始化
      其他次 不做初始化

    • 已移動 小朱MVP, Moderator 2012年6月13日 上午 08:34 (從:資料庫與程式開發(SQL Server Development))
    2012年6月13日 上午 07:51

解答

  • 您好:

    謝謝,

    1.目前完整備份 因為用with init,所以單一個名稱 ERP.bak

    2.差異備份,也用init,所以也用單名 ERPDiff.bak

    3.LOG目前 只有每天第1次作用init, 其他的應該都是附加,暫時只用一個檔名 ERPLog.BAK

    4.結尾備份 也用同名 ERPLog.BAK

    而若是參考 rmiao sir 所說,每個log檔分開名稱 ,則可能於 ERPLog_XX.BAK  ,  XX表 hr 來區分,這樣每個都要加init 來初始化.

    不知這是是否可行?

    另外,若是改成以下方式,其效能不知是否有比較好?

    1.先做完整備份當基底
      + wih init  初始化

    2.每天排程 做 差異備份
     
      ==>分7天7個檔案,各+init
     
    3.排程 log 備份
      ==>分6個檔案(每4小時備份一次) ,每個log +init 以重複利用.

    而其restore 方式是否為:

    a.先跑結尾備份
    b.回復完整備份
    c.依序作到 錯誤當天的 差異備份(如星期日,一,二,三)
    d.再回復 星期三當天的 LOG ,依序用4,8,12 小時的LOG
    e.最後再回復 結尾備份。



    不曉得您預計的data loss時間為多久? 依您的備份方式來看,資料最多可loss4個小時,如果這是可以允許的,那麼備份的方式並無問題。但如果您僅允許15分鐘內的資料遺失,就必須修改您transaction log 備份的頻率。另,貴公司允許的停機時間也關乎備份檔案存放的方式。假設貴公司在資料庫損毀的情況下,限定一小時內必須完成restore,那麼把備份檔案存放在另一台主機的硬碟上或許是個好方式;否則把檔案放在磁帶內,您就必須考量將備份檔案從磁帶內找出來復原的時間是否符合貴公司的要求。

    以上僅供參考。

    • 已標示為解答 softballnow 2012年6月14日 上午 09:18
    2012年6月14日 上午 01:19
  • 其實如果你的備份檔案名稱不會重複,似乎有沒有加INIT就沒什麼差別。

    依照你的備份策略看來,要還原資料庫時,除先做結尾備份外,首先要從最近一次完整備份開始還原(NORECOVERY),接著還原最近一次的差異備份(NORECOVERY),接著再依次還原交易記錄備份及結尾備份。

    有關備份還原的策略,可以參考MSDN的文章。

    http://msdn.microsoft.com/zh-tw/library/ms191239(v=sql.105).aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    • 已標示為解答 softballnow 2012年6月14日 上午 09:18
    2012年6月14日 上午 02:12
  • 您好:

    謝謝.

    關於 zerome   回覆,目前預估1小時左右,也有可能拉長到4小時,所以先用4小來論。

    關於TerryChuang 回覆,

    因為我有試過 log備份時,若沒有於每回第1次指定with init,他 因為msdb..backupset.POSITION 會累計

    我restore 時,若沒有指定對 file=? ,就會有問題.

    不然我就得把舊備份檔 刪掉,重新來過。

    所以我另一個問題:

    2.每天排程 做 差異備份 
      ==>分7天7個檔案,各+init

    才會想說加上init

    到時候,RESTORE的話,就都指定,FILE=1

    就好了?

    如果七個檔案都指定了INIT, 就不用指定File。Position是用來當你一個備份檔內有多個備份型態檔時,以File的方式指定Position用的。您可參考

    http://msdn.microsoft.com/zh-tw/library/ms186858(v=sql.105).aspx 

    B. 還原完整和差異資料庫備份

    RESTORE DATABASE AdventureWorks2008R2

    FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2.bak' WITH FILE = 6 NORECOVERY; RESTORE DATABASE AdventureWorks2008R2 FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2.bak' WITH FILE = 9 RECOVERY;

    • 已標示為解答 softballnow 2012年6月14日 上午 09:18
    2012年6月14日 上午 06:19
  • 依照你的命名規則:

    完整備份-ERP.bak

    差異備份-ERPDiff.bak

    交易記錄備份-ERPLog_XX.bak

    因為會使用WITH INIT,因此在還原的時候不需要指定FILE。

    我依照你所描述的情境做了下列的範例,希望對你有幫助。

    --建立測試資料
    use Northwind
    go
    
    insert into Region(RegionID,RegionDescription) values (5,'test')
    go
    
    --開始備份
    use master
    go
    --完整備份
    backup database Northwind to disk='d:\temp\ERP.bak' with init
    --差異備份
    backup database Northwind to disk='d:\temp\ERPDiff_1.bak' with differential, init  --星期一
    backup database Northwind to disk='d:\temp\ERPDiff_2.bak' with differential, init  --星期二
    backup database Northwind to disk='d:\temp\ERPDiff_7.bak' with differential, init  --星期日
    --交易記錄備份
    backup log Northwind to disk = 'd:\temp\ERPLog_01.bak' with init	--0 ~ 3
    backup log Northwind to disk = 'd:\temp\ERPLog_02.bak'  with init	--4 ~ 7
    backup log Northwind to disk = 'd:\temp\ERPLog_03.bak'  with init   --8 ~ 11
    backup log Northwind to disk = 'd:\temp\ERPLog_06.bak'  with init	--20 ~ 23
    --結尾記錄備份
    backup log Northwind to disk = 'd:\temp\ERPLog_tail.bak' with no_truncate,init
    go
    
    --刪除RegionID為5的資料
    use Northwind
    go
    
    select *
    from Region
    go
    
    delete from region
    where RegionID = 5
    
    go
    
    select *
    from Region
    go
    
    --開始還原
    use master
    go
    
    alter database Northwind set single_user with no_wait
    --還原完整備份
    restore database Northwind from disk='d:\temp\ERP.bak' with norecovery,replace
    --從最後一次差異備份還原
    restore database Northwind from disk='d:\temp\ERPDiff_7.bak' with norecovery
    --依序還原交易記錄備份
    restore log Northwind from disk='d:\temp\ERPLog_01.bak' with norecovery
    restore log Northwind from disk='d:\temp\ERPLog_02.bak' with norecovery
    restore log Northwind from disk='d:\temp\ERPLog_03.bak' with norecovery
    restore log Northwind from disk='d:\temp\ERPLog_06.bak' with norecovery
    --還原結尾記錄備份
    restore log Northwind from disk='d:\temp\ERPLog_tail.bak' with recovery
    alter database Northwind set multi_user with no_wait
    
    
    --驗證RegionID為5的資料是否回來了
    use Northwind
    go
    select *
    from Region
    
    
    
    


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    • 已標示為解答 softballnow 2012年6月14日 上午 09:18
    2012年6月14日 上午 08:08

所有回覆

  • 看起來這樣的備份策略並無不妥,只是在備份檔案名稱不曉得你打算怎麼命名?

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年6月13日 上午 09:18
  • Better to backup log to individual file everytime, easier to manage.
    2012年6月13日 下午 03:45
  • 您好:

    謝謝,

    1.目前完整備份 因為用with init,所以單一個名稱 ERP.bak

    2.差異備份,也用init,所以也用單名 ERPDiff.bak

    3.LOG目前 只有每天第1次作用init, 其他的應該都是附加,暫時只用一個檔名 ERPLog.BAK

    4.結尾備份 也用同名 ERPLog.BAK

    而若是參考 rmiao sir 所說,每個log檔分開名稱 ,則可能於 ERPLog_XX.BAK  ,  XX表 hr 來區分,這樣每個都要加init 來初始化.

    不知這是是否可行?

    另外,若是改成以下方式,其效能不知是否有比較好?

    1.先做完整備份當基底
      + wih init  初始化

    2.每天排程 做 差異備份
     
      ==>分7天7個檔案,各+init
     
    3.排程 log 備份
      ==>分6個檔案(每4小時備份一次) ,每個log +init 以重複利用.

    而其restore 方式是否為:

    a.先跑結尾備份
    b.回復完整備份
    c.依序作到 錯誤當天的 差異備份(如星期日,一,二,三)
    d.再回復 星期三當天的 LOG ,依序用4,8,12 小時的LOG
    e.最後再回復 結尾備份。



    2012年6月14日 上午 12:25
  • 您好:

    謝謝,

    1.目前完整備份 因為用with init,所以單一個名稱 ERP.bak

    2.差異備份,也用init,所以也用單名 ERPDiff.bak

    3.LOG目前 只有每天第1次作用init, 其他的應該都是附加,暫時只用一個檔名 ERPLog.BAK

    4.結尾備份 也用同名 ERPLog.BAK

    而若是參考 rmiao sir 所說,每個log檔分開名稱 ,則可能於 ERPLog_XX.BAK  ,  XX表 hr 來區分,這樣每個都要加init 來初始化.

    不知這是是否可行?

    另外,若是改成以下方式,其效能不知是否有比較好?

    1.先做完整備份當基底
      + wih init  初始化

    2.每天排程 做 差異備份
     
      ==>分7天7個檔案,各+init
     
    3.排程 log 備份
      ==>分6個檔案(每4小時備份一次) ,每個log +init 以重複利用.

    而其restore 方式是否為:

    a.先跑結尾備份
    b.回復完整備份
    c.依序作到 錯誤當天的 差異備份(如星期日,一,二,三)
    d.再回復 星期三當天的 LOG ,依序用4,8,12 小時的LOG
    e.最後再回復 結尾備份。



    不曉得您預計的data loss時間為多久? 依您的備份方式來看,資料最多可loss4個小時,如果這是可以允許的,那麼備份的方式並無問題。但如果您僅允許15分鐘內的資料遺失,就必須修改您transaction log 備份的頻率。另,貴公司允許的停機時間也關乎備份檔案存放的方式。假設貴公司在資料庫損毀的情況下,限定一小時內必須完成restore,那麼把備份檔案存放在另一台主機的硬碟上或許是個好方式;否則把檔案放在磁帶內,您就必須考量將備份檔案從磁帶內找出來復原的時間是否符合貴公司的要求。

    以上僅供參考。

    • 已標示為解答 softballnow 2012年6月14日 上午 09:18
    2012年6月14日 上午 01:19
  • 其實如果你的備份檔案名稱不會重複,似乎有沒有加INIT就沒什麼差別。

    依照你的備份策略看來,要還原資料庫時,除先做結尾備份外,首先要從最近一次完整備份開始還原(NORECOVERY),接著還原最近一次的差異備份(NORECOVERY),接著再依次還原交易記錄備份及結尾備份。

    有關備份還原的策略,可以參考MSDN的文章。

    http://msdn.microsoft.com/zh-tw/library/ms191239(v=sql.105).aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    • 已標示為解答 softballnow 2012年6月14日 上午 09:18
    2012年6月14日 上午 02:12
  • 您好:

    謝謝.

    關於 zerome   回覆,目前預估1小時左右,也有可能拉長到4小時,所以先用4小來論。

    關於TerryChuang 回覆,

    因為我有試過 log備份時,若沒有於每回第1次指定with init,他 因為msdb..backupset.POSITION 會累計

    我restore 時,若沒有指定對 file=? ,就會有問題.

    不然我就得把舊備份檔 刪掉,重新來過。

    所以我另一個問題:

    2.每天排程 做 差異備份 
      ==>分7天7個檔案,各+init

    才會想說加上init

    到時候,RESTORE的話,就都指定,FILE=1

    就好了?

    2012年6月14日 上午 03:40
  • 您好:

    謝謝.

    關於 zerome   回覆,目前預估1小時左右,也有可能拉長到4小時,所以先用4小來論。

    關於TerryChuang 回覆,

    因為我有試過 log備份時,若沒有於每回第1次指定with init,他 因為msdb..backupset.POSITION 會累計

    我restore 時,若沒有指定對 file=? ,就會有問題.

    不然我就得把舊備份檔 刪掉,重新來過。

    所以我另一個問題:

    2.每天排程 做 差異備份 
      ==>分7天7個檔案,各+init

    才會想說加上init

    到時候,RESTORE的話,就都指定,FILE=1

    就好了?

    如果七個檔案都指定了INIT, 就不用指定File。Position是用來當你一個備份檔內有多個備份型態檔時,以File的方式指定Position用的。您可參考

    http://msdn.microsoft.com/zh-tw/library/ms186858(v=sql.105).aspx 

    B. 還原完整和差異資料庫備份

    RESTORE DATABASE AdventureWorks2008R2

    FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2.bak' WITH FILE = 6 NORECOVERY; RESTORE DATABASE AdventureWorks2008R2 FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2008R2.bak' WITH FILE = 9 RECOVERY;

    • 已標示為解答 softballnow 2012年6月14日 上午 09:18
    2012年6月14日 上午 06:19
  • 依照你的命名規則:

    完整備份-ERP.bak

    差異備份-ERPDiff.bak

    交易記錄備份-ERPLog_XX.bak

    因為會使用WITH INIT,因此在還原的時候不需要指定FILE。

    我依照你所描述的情境做了下列的範例,希望對你有幫助。

    --建立測試資料
    use Northwind
    go
    
    insert into Region(RegionID,RegionDescription) values (5,'test')
    go
    
    --開始備份
    use master
    go
    --完整備份
    backup database Northwind to disk='d:\temp\ERP.bak' with init
    --差異備份
    backup database Northwind to disk='d:\temp\ERPDiff_1.bak' with differential, init  --星期一
    backup database Northwind to disk='d:\temp\ERPDiff_2.bak' with differential, init  --星期二
    backup database Northwind to disk='d:\temp\ERPDiff_7.bak' with differential, init  --星期日
    --交易記錄備份
    backup log Northwind to disk = 'd:\temp\ERPLog_01.bak' with init	--0 ~ 3
    backup log Northwind to disk = 'd:\temp\ERPLog_02.bak'  with init	--4 ~ 7
    backup log Northwind to disk = 'd:\temp\ERPLog_03.bak'  with init   --8 ~ 11
    backup log Northwind to disk = 'd:\temp\ERPLog_06.bak'  with init	--20 ~ 23
    --結尾記錄備份
    backup log Northwind to disk = 'd:\temp\ERPLog_tail.bak' with no_truncate,init
    go
    
    --刪除RegionID為5的資料
    use Northwind
    go
    
    select *
    from Region
    go
    
    delete from region
    where RegionID = 5
    
    go
    
    select *
    from Region
    go
    
    --開始還原
    use master
    go
    
    alter database Northwind set single_user with no_wait
    --還原完整備份
    restore database Northwind from disk='d:\temp\ERP.bak' with norecovery,replace
    --從最後一次差異備份還原
    restore database Northwind from disk='d:\temp\ERPDiff_7.bak' with norecovery
    --依序還原交易記錄備份
    restore log Northwind from disk='d:\temp\ERPLog_01.bak' with norecovery
    restore log Northwind from disk='d:\temp\ERPLog_02.bak' with norecovery
    restore log Northwind from disk='d:\temp\ERPLog_03.bak' with norecovery
    restore log Northwind from disk='d:\temp\ERPLog_06.bak' with norecovery
    --還原結尾記錄備份
    restore log Northwind from disk='d:\temp\ERPLog_tail.bak' with recovery
    alter database Northwind set multi_user with no_wait
    
    
    --驗證RegionID為5的資料是否回來了
    use Northwind
    go
    select *
    from Region
    
    
    
    


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    • 已標示為解答 softballnow 2012年6月14日 上午 09:18
    2012年6月14日 上午 08:08
  • dear TerryChuang :
    謝謝您還做出範例,

    目前我有一個疑惑是:

    於差異備份這邊
    以下哪一種類型比較好?或會有差異點
    1.只做一個檔名
      第1次 用init
      其他  都是附加上去的.

    2.分7天做7個檔名

    謝謝!
    2012年6月14日 上午 09:18
  • 如果要單純點,七天七個檔名會比較直覺,也在還原上比較容易處理。

    不過實際情況還是得看你的需求和真實的情境而定。


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年6月14日 上午 09:28