none
restore database的怪异问题 RRS feed

  • 问题

  •   今天在做每月的备份策略检查的过程中发现一个很怪的问题.
       首先,我使用如下语句恢复最近的一次全库备份:
                restore database ProductCenter
    from
      disk = 'E:\productCenter\ProductCenter_backup_201002270300.bak'

    with move 'ProductCenter' to 'D:\SQLDATA\ProductCenter.mdf',
         move 'ProductCenter_log' to 'E:\sqldata\ProductCenter_log.LDF', norecovery,replace

    大家注意我带了replace参数,因为该sql server 2005实例上有一个同名测试数据库,起初我没有带replace参数,但系统不让我恢复,因此我加上了replace参数.恢复结果:成功.

    接下来我恢复今天凌晨的差异备份,结果报LSN太老,无法恢复差异备份.我以为是我的本分策略出问题了,因此继续使用去掉了replace参数的代码重新恢复全库:
      restore database ProductCenter
    from
      disk = 'E:\productCenter\ProductCenter_backup_201002270300.bak'

    with move 'ProductCenter' to 'D:\SQLDATA\ProductCenter.mdf',
         move 'ProductCenter_log' to 'E:\sqldata\ProductCenter_log.LDF', norecovery
            
    接着再恢复差异备份,嘿,这次成功了.


    于是我又把replace参数加上去,第三次恢复了下全库:
      restore database ProductCenter
    from
      disk = 'E:\productCenter\ProductCenter_backup_201002270300.bak'

    with move 'ProductCenter' to 'D:\SQLDATA\ProductCenter.mdf',
         move 'ProductCenter_log' to 'E:\sqldata\ProductCenter_log.LDF', norecovery,replace

    等恢复好了全库备份,接着再恢复差异,这次又成功了.真是晕.

    我查了下replace参数的含义:
             指定即使存在另一个具有相同名称的数据库,SQL Server 也应该创建指定的数据库及其相关文件。

    没有看到很特别的地方. 因此对第一次使用replace恢复全库后无法继续恢复差异的问题感到很困惑.不知道有哪位能否指点下,谢谢!
          
     

    2010年3月2日 6:42

答案

  • REPLACE 選項會覆寫還原通常會執行的數項重要安全檢查。會覆寫的檢查如下:

    • 使用從其他資料庫建立的備份來還原現有資料庫。

      使用 REPLACE 選項,即使指定的資料庫名稱與備份組中所記錄的資料庫名稱不同,還原仍可讓您以備份組中的任何資料庫覆寫現有的資料庫。這可能會導致意外將資料庫覆寫成不同資料庫。
    • 使用完整或大量記錄復原模式來還原資料庫,而這兩種模式都未取得結尾記錄備份也未使用 STOPAT 選項。

      使用 REPLACE 選項,您可能會遺失已認可的記錄,因為最近寫入的記錄尚未被備份。
    • 覆寫到錯誤類型的現有檔案 (例如,.xls 檔案) 或覆寫到其他資料庫 (目前不在線上) 正在使用的檔案。

      使用 REPLACE 選項,可能會因為覆寫這類現有檔案,而遺失任意資料 (還原的資料庫是完整的)。

    move--這是還原到指定的文件夾下


    參照MSDN,看一下參照說明和例子

    http://msdn.microsoft.com/zh-tw/library/ms186858%28SQL.90%29.aspx
    ROY WU(吳熹 )
    2010年3月3日 10:14
    版主

全部回复

  • Are full and diff backups from same instance? Applied any sql2k5 service pack?
    2010年3月2日 14:18
  •       Yes,The full backup files and the diff backup files come from the same instance, and this instance has been installed service pack 3.
    2010年3月3日 9:23
  • REPLACE 選項會覆寫還原通常會執行的數項重要安全檢查。會覆寫的檢查如下:

    • 使用從其他資料庫建立的備份來還原現有資料庫。

      使用 REPLACE 選項,即使指定的資料庫名稱與備份組中所記錄的資料庫名稱不同,還原仍可讓您以備份組中的任何資料庫覆寫現有的資料庫。這可能會導致意外將資料庫覆寫成不同資料庫。
    • 使用完整或大量記錄復原模式來還原資料庫,而這兩種模式都未取得結尾記錄備份也未使用 STOPAT 選項。

      使用 REPLACE 選項,您可能會遺失已認可的記錄,因為最近寫入的記錄尚未被備份。
    • 覆寫到錯誤類型的現有檔案 (例如,.xls 檔案) 或覆寫到其他資料庫 (目前不在線上) 正在使用的檔案。

      使用 REPLACE 選項,可能會因為覆寫這類現有檔案,而遺失任意資料 (還原的資料庫是完整的)。

    move--這是還原到指定的文件夾下


    參照MSDN,看一下參照說明和例子

    http://msdn.microsoft.com/zh-tw/library/ms186858%28SQL.90%29.aspx
    ROY WU(吳熹 )
    2010年3月3日 10:14
    版主