Error trying to Restore DB & Move files with NORECOVERY

Hi, I am trying make a copy our Production DB from a backup & running into issues described below

Basically I am trying to

1. Restore the MyDB as the MyDB2 with NORECOVERY & also move/replace the data/log logical files

2. Restore the Log Files (backed up hourly) with NORECOVERY

3. Restore the MyDB2 with RECOVERY & finalize it



The issue we are running is that

1. We can restore the DB ONLY with REPLACE option, but that means we cannot restore the Logs incrementally as the db is allready recovered

2. Unable to restore the DB using the NORECOVERY option and get "The tail of the log for the database "PT" has not been backed up." error (not sure is there is something wrong with the backup OR its because we're trying to restore to a new DB (other than the one it was backed up))




Command to restore the db & restore the mdf/ldf files + move an extra file -

EXECUTE master..sqlbackup '-SQL "RESTORE DATABASE [MyDB2] FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\FULL_(local)_MyDB_20130110_000102.sqb' WITH NORECOVERY, MOVE N'MyDB_Data' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.QA\MSSQL\Data\MyDB2.mdf', MOVE N'MyDB_Log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.QA\MSSQL\Data\MyDB2.ldf' "'

SQL error 3013: SQL error 3013: RESTORE DATABASE is terminating abnormally.
SQL error 3159: SQL error 3159: The tail of the log for the database "MyDB2" has not been backed up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose. Use the WITH REPLACE or WITH STOPAT clause of the
RESTORE statement to just overwrite the contents of the log.


On trying to restore the logs, I am getting

EXECUTE master..sqlbackup '-SQL "RESTORE LOG MyDB2 FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup\LOG_(local)_MyDB_20130109_180201.sqb' WITH NORECOVERY" '

SQL error 3013: SQL error 3013: RESTORE LOG is terminating abnormally.
SQL error 3117: SQL error 3117: The log or differential backup cannot be restored because no files are ready to rollforward.

Any ideas?

(Disclaimer : I am not a DBA & have limited database knowledge)

Comments

  • Try replacing the MyDB2 rather than just restoring to it. As it exists there could be a taillog that would need to be offloaded first.

    The other option is to take a log backup of MyDB2 before you try and replace it.

    HTH

    Chris
    English DBA living in CANADA
  • Chris, Thank for your tip.

    I had tried replacing the db earlier, using
    EXECUTE master..sqlbackup '-SQL "RESTORE DATABASE [MyDB2] FROM DISK = N'... ' WITH REPLACE, MOVE N'MyDB_Data' TO N'...', MOVE N'MyDB_Log' TO N'...' "' 
    
    and although that ran fine, when I try to restore log files
    RESTORE LOG MyDB2 FROM DISK = '...' WITH NORECOVERY
    
    I get
    The media family on device 'C:\....sqb' is incorrectly formed. SQL Server cannot process this media family.
    
    I am not sure the issue is related so as I am trying to restore the log to a different DB (than original) OR cos the db is already closed/recovered as I used the REPLACE option

    Any thoughts?
  • Try running a log backup on MyDB2 before you try the restore.

    Chris
    English DBA living in CANADA
  • @#$% didnt work :(

    -SQL "BACKUP LOGS [MyDB2] TO DISK = N'C:\Temp\Log\<AUTO>' " [SQLSTATE 01000]

    -SQL "RESTORE DATABASE [MyDB2] FROM DISK = N'....sqb' WITH MOVE N'MyDB_Data' TO N'...MyDB2.mdf', MOVE N'MyDB_Log' TO N'..MyDB2.ldf', , NORECOVERY " [SQLSTATE 01000]

    RESTORE LOG MyDB2 FROM DISK = '....sqb' WITH NORECOVERY [SQLSTATE 01000]
    Msg 3241, Sev 16, State 1, Line 1 : The media family on device '...sqb' is incorrectly formed. SQL Server cannot process this media family. [SQLSTATE 42000]
    Msg 3013, Sev 16, State 1, Line 1 : RESTORE LOG is terminating abnormally. [SQLSTATE 42000]
  • I hope that wasn't a typo but it should be BACKUP LOG not BACKUP LOGS.

    Chris
    English DBA living in CANADA
  • hmm I did use LOGS as thats what the documentation said ;-)
    L. Back up transaction logs for multiple databases
    
    This example creates transaction log backups for databases northwind and pubs in the default location.
    
    SQLBackupC.exe -I &#123;instance name&#125; -SQL "BACKUP LOGS &#91;northwind, pubs&#93; TO DISK = '&lt;AUTO&gt;' "
    
    EXECUTE master..sqlbackup '-SQL "BACKUP LOGS &#91;northwind, pubs&#93; TO DISK = ''&lt;AUTO&gt;'' " '
    

    http://www.red-gate.com/supportcenter/C ... egs#o15223

    will try with LOG now & see

    Thanks for your help
  • That was for two databases in one execution.

    Chris
    English DBA living in CANADA
  • No change, same error....

    -SQL "BACKUP LOG [MyDB2] TO DISK = N'C:\Temp\Log\DB2_FULL.log' " [SQLSTATE 01000]
  • Just a thought.

    If MyDB2 seems recovered then run DBCC CHECKDB with PHYSICAL_ONLY then try using the GUI to take a LOG backup to see that you have the permissions correct.

    Chris
    English DBA living in CANADA
  • DBCC ran fine and was able to backup the log..
  • Now try the restore again using the GUI.

    These should all be running with the account that runs SQLBackup so it doesn't look like a permissions issue.

    I am leaving now so I look forward to reading this thread on Monday.

    Chris
    English DBA living in CANADA
  • Well figured it out, was trying to restore the .sqb file with a Restore function ;-)

    Ran it with "EXECUTE master..sqlbackup" & it works. Still had to backup the log before I tried to restore the db.

    Chris thanks for your help.
  • Glad you managed to get it to work. Since SQL2005 if you have either Full or Bulk-Logged recovery model you need to run a Tail-log backup unless you use SQLBackup to force over an existing database.

    Chris
    English DBA living in CANADA
Sign In or Register to comment.