Database stuck in "Restoring" state
Asked Answered
T

30

664

I backed up a database:

BACKUP DATABASE MyDatabase
TO DISK = 'MyDatabase.bak'
WITH INIT --overwrite existing

And then tried to restore it:

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE --force restore over specified database

And now the database is stuck in the restoring state.

Some people have theorized that it's because there was no log file in the backup, and it needed to be rolled forward using:

RESTORE DATABASE MyDatabase
WITH RECOVERY 

Except that, of course, fails:

Msg 4333, Level 16, State 1, Line 1
The database cannot be recovered because the log was not restored.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

And exactly what you want in a catastrophic situation is a restore that won't work.


The backup contains both a data and log file:

RESTORE FILELISTONLY 
FROM DISK = 'MyDatabase.bak'

Logical Name    PhysicalName
=============   ===============
MyDatabase    C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase.mdf
MyDatabase_log  C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase_log.LDF
Tomchay answered 6/2, 2009 at 16:21 Comment(1)
I had the exact same issue and all of the solutions failed. Interestingly, I logged onto the SQL server directly and issued the DROP DATABASE db command through SSMS and it worked (earlier I was using SSMS from another machine to issue the commands). I am guessing the other solutions would have worked as well.Planoconcave
J
483

You need to use the WITH RECOVERY option, with your database RESTORE command, to bring your database online as part of the restore process.

This is of course only if you do not intend to restore any transaction log backups, i.e. you only wish to restore a database backup and then be able to access the database.

Your command should look like this,

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE,RECOVERY

You may have more sucess using the restore database wizard in SQL Server Management Studio. This way you can select the specific file locations, the overwrite option, and the WITH Recovery option.

Jujitsu answered 6/2, 2009 at 16:39 Comment(13)
I've never had to use the recovery statement when doing what he is doing. WITH REPLACE should suffice.Penitence
Yes, I was using NORECOVERY but the restore process hangs. Using WITH RECOVERY, REPLACE it doesn't hang the process anymoreHe
This solved my problem. We had a SAN failure in the middle of a restore and this was a quick and clean solution.Nejd
I had a similar problem today with a SQL Server 2005 database. In my case, I had to add ',RESTART' to the WITH clause, to solve the issue. It was giving me an error message stating that previous operation wasn't successful.Saltillo
I distribute updates to our database in the form of backups that replace the old ones, but the users can install it to any location on their hard drive (not my idea), which means I need to Exec SP_HelpFile from old database before running Restore With Move, which I can't do if it's already stuck in a restore. Is there any way to use the Master database to get its filenames? Right now my only solution is to delete and reinstall.Lula
I have the same problem running this command with PHP PDO driver from microsoft. however when running with microsoft sql server management studio It works just fine. Any ideas about the problem ?Baldridge
WITH REPLACE, RECOVERY, RESTART and still same error ("The database cannot be recovered because the log was not restored."). Guess I drop the DB... [later] that worked of course, but I also had to delete the checkpoint log file that was left over.Jeanett
@JohnSansom Sure, using the restore option in the SQL Management Studio is the most guaranteed way to restore a database, but sometimes, people distribute express editions of SQL Server with no management studio (like our company) and need to provide our own tools to perform these operations.Indicia
@JohnSansom do i need to kill the spid of the restore that is stuck first?Markley
@Markley If a previous restore operation on the same database is in a suspended/sleeping state then yes. Simply stopping/cancelling the in process restore should have the same effect.Jujitsu
Using SQL Management Studio mitigates many issues like this except the tool doesn't accept/manage UNC paths so restoring a database over the network will ultimately involve use of a SQL command and solutions like this one.Matildamatilde
In my case, furthermore, I need to drop database (and lost all data from it) and restoring againAlbumose
The link shown in the answer is moved here exploresql.com/2016/09/06/…Spoil
G
932

I had this situation restoring a database to an SQL Server 2005 Standard Edition instance using Symantec Backup Exec 11d. After the restore job completed the database remained in a "Restoring" state. I had no disk space issues-- the database simply didn't come out of the "Restoring" state.

I ran the following query against the SQL Server instance and found that the database immediately became usable:

RESTORE DATABASE <database name> WITH RECOVERY
Glaze answered 28/7, 2009 at 15:21 Comment(16)
We had a DB stuck in restore for 2 hours. We ran this command from a different machine against master and it fixed us right up. Thanks!Villalpando
+1, with a gotcha. When I ran this, I got an error message saying that the database was already fully recovered. But it still showed as being "In Recovery" state. So I right-clicked it in Management Studio, hit Refresh and it was back to normal.Globoid
I restored using the Mng Studio wizard, entered a new database name but by mistake left the filenames as the same as an existing database. I got the error "restore failed but log tail successful" and database attached to those files was stuck in a restoring state. This command appears to have restored the database to its prior state.Mcconaghy
This worked. I was trying to restore a backup to a side database, but my main database went into a restoring state for some reason. This actually recovered my DB. Thanks a bunch!Hymanhymen
You saved my day. Buggy MSSQL. Even reboot didn't helpBunkmate
For me, it just keeps running.Ailis
Some SSMS restore wizard defaults will leave the source DB in restoring state such that you can continue restoring various backups or logs with no fear of users, and this command is proper way to return the DB to normal once you are done.Bade
Confirmed works on SQL 2008 std running on Server 2012. Thank you.Lula
@Ailis mine remained as 'Running...' even after I refreshed the screen a few times. I eventually tried to take it offline which worked fine and bringing it back on line worked. I suspect all I needed to do was close and open SQL Studio to force a refresh.Lula
OP clearly states that WITH RECOVERY option failed.Planoconcave
Executing this query worked for me... I think. I ran the query within SQL Server Management Studio (SSMS). The output of the query indicated success. However, the database still displayed its "Restoring..." status. I closed and relaunched SSMS; then the database was OK again.Loeffler
Worked for me, but I had to restart the SQL server first.Sippet
Thank you - this just helped me greatly on an important production server.Digitigrade
This command fixed it for me. My database was stuck in restore because I restored it to a different name to make a copy and SQL marked the original as restoring.Overwrought
Perfect..!!! was facing issues while restoring and resolved using the above statement. thank you!!Notable
It works me, but can someone explain what does that query does?Retool
J
483

You need to use the WITH RECOVERY option, with your database RESTORE command, to bring your database online as part of the restore process.

This is of course only if you do not intend to restore any transaction log backups, i.e. you only wish to restore a database backup and then be able to access the database.

Your command should look like this,

RESTORE DATABASE MyDatabase
   FROM DISK = 'MyDatabase.bak'
   WITH REPLACE,RECOVERY

You may have more sucess using the restore database wizard in SQL Server Management Studio. This way you can select the specific file locations, the overwrite option, and the WITH Recovery option.

Jujitsu answered 6/2, 2009 at 16:39 Comment(13)
I've never had to use the recovery statement when doing what he is doing. WITH REPLACE should suffice.Penitence
Yes, I was using NORECOVERY but the restore process hangs. Using WITH RECOVERY, REPLACE it doesn't hang the process anymoreHe
This solved my problem. We had a SAN failure in the middle of a restore and this was a quick and clean solution.Nejd
I had a similar problem today with a SQL Server 2005 database. In my case, I had to add ',RESTART' to the WITH clause, to solve the issue. It was giving me an error message stating that previous operation wasn't successful.Saltillo
I distribute updates to our database in the form of backups that replace the old ones, but the users can install it to any location on their hard drive (not my idea), which means I need to Exec SP_HelpFile from old database before running Restore With Move, which I can't do if it's already stuck in a restore. Is there any way to use the Master database to get its filenames? Right now my only solution is to delete and reinstall.Lula
I have the same problem running this command with PHP PDO driver from microsoft. however when running with microsoft sql server management studio It works just fine. Any ideas about the problem ?Baldridge
WITH REPLACE, RECOVERY, RESTART and still same error ("The database cannot be recovered because the log was not restored."). Guess I drop the DB... [later] that worked of course, but I also had to delete the checkpoint log file that was left over.Jeanett
@JohnSansom Sure, using the restore option in the SQL Management Studio is the most guaranteed way to restore a database, but sometimes, people distribute express editions of SQL Server with no management studio (like our company) and need to provide our own tools to perform these operations.Indicia
@JohnSansom do i need to kill the spid of the restore that is stuck first?Markley
@Markley If a previous restore operation on the same database is in a suspended/sleeping state then yes. Simply stopping/cancelling the in process restore should have the same effect.Jujitsu
Using SQL Management Studio mitigates many issues like this except the tool doesn't accept/manage UNC paths so restoring a database over the network will ultimately involve use of a SQL command and solutions like this one.Matildamatilde
In my case, furthermore, I need to drop database (and lost all data from it) and restoring againAlbumose
The link shown in the answer is moved here exploresql.com/2016/09/06/…Spoil
P
113

Here's how you do it:

  1. Stop the service (MSSQLSERVER);
  2. Rename or delete the Database and Log files (C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data...) or wherever you have the files;
  3. Start the service (MSSQLSERVER);
  4. Delete the database with problem;
  5. Restore the database again.
Porta answered 7/5, 2009 at 21:50 Comment(13)
Tipu, thanks for that. I had a similar problem to the original poster, but it was caused by the server running out of disk space whilst restoring and so caused a permanent restoring state.Appropriation
Why not just drop the database? That way you don't have to stop the service.Jeanett
@Jeanett For me, SQL server said it can't drop a database in the middle of a restore, even though it wasn't really restoring....Endogen
@ErikPhilips In that case I suppose one is back to stopping the service. I wonder if that happens every time or only in certain cases of the stuck-restore problem.Jeanett
In my instance, I ran out of HD space during a restore. After, deleting more than enough files, I stopped and restarted my SQL service, but the DB was stuck restoring and never finished. (3 days for a 2gb restore, I just wanted to make sure). This was the only solution that seemed to work in my case.Endogen
In my case, it was sufficient to drop the database which was hanging in state "Restoring..." with the SQL command drop database <dbname> in a query window. Then I right-clicked on Databases and selected Refresh which removed the entry in Management Studio. Afterwards I did a new restore which worked fine (note that bringing it offline did not work, a restart of the SQL service did not work, a server reboot did not work as well).Stupor
This was the solution that fixed things for me! I managed to get myself into this state by restoring an old version of my database to a different database name (so I could do some work on upgrade scripts); the restore to the new database worked but somehow had the side-effect of leaving the original database stuck in the restoring state.Disadvantageous
I used a slight variation on this procedure: 1) copy MDF/LDF files from Data folder to a temp folder, 2) delete database via Management Studio NB: this causes MDF/LDF files to be deleted from the Data folder, 3) copy MDF/LDF files back from temp to Data folder, 4) in Mgmt Studio, right-click Databases and Attach the MDF/LDF files, thus restoring the database.Disadvantageous
I second this answer. Works for me SQL 2014.Palsy
@Matt's comment helped, did a drop database on query window. Had to logout and log back in to remove the db from db list in SSMSE.Cinemascope
@JimsonKannantharaJames - seems it helped other people too, so I promoted it to an answer..Stupor
For me, I did not have to restore the database. Reattaching the mdf did the trick for me.Safford
I had not done this is a while and forgotten about it. Thank you.Skullcap
M
94

I had a similar incident with stopping a log shipping secondary server. After the command to remove the server from log shipping and stopped the log shipping from primary server the database on secondary server got stuck in restoring status after the command

RESTORE DATABASE <database name> WITH RECOVERY

The database messages:

RESTORE DATABASE successfully processed 0 pages in 18.530 seconds (0.000 MB/sec).

The database was usable again after those 18 seconds.

Matchless answered 11/1, 2011 at 13:51 Comment(2)
Especially useful when you've already restored the database but forgot the RECOVERY option...Joist
This was all I needed to get it to leave the "Restoring" state after restoring a backup of this database to a different DB name. Thanks a bunch.Gusher
C
92

I had a similar issue with restoring using SQL Management Studio. I tried to restore a backup of the database to a new one with a different name. At first this failed and after fixing the new database's file names it was successfully performed - in any case the issue I'm describing re-occurred even if I got this right from the first time. So, after the restoration, the original database remained with a (Restoring...) next to its name. Considering the answers of the forum above (Bhusan's) I tried running in the query editor on the side the following:

RESTORE DATABASE "[NAME_OF_DATABASE_STUCK_IN_RESTORING_STATE]"

which fixed the issue. I was having trouble at first because of the database name which contained special characters. I resolved this by adding double quotes around - single quotes wouldn't work giving an "Incorrect syntax near ..." error.

This was the minimal solution I've tried to resolve this issue (stuck database in restoring state) and I hope it can be applied to more cases.

Cur answered 5/9, 2014 at 11:25 Comment(5)
Worked perfectly - without needing to tear it down and up again. 3 Dbs of 80+ Gb each takes a while ! Thanks!Spoliation
I almost done it on production environment. I tried it on local first, ended up in this same situation and found your comment. Lesson learned: Use scripts and don't trust SSMS in important situations.Garvy
I got this issue when restoring a copy-only file back-up of a database to a new database. The original database showed the error. This solution worked and the response I got was "RESTORE DATABASE successfully processed 0 pages in 0.263 seconds (0.000 MB/sec).", so it seems that SQL Server was just confused about the state of the database.Novelette
Worked for me but only when I removed the double-quotes -- I just had [MY_DB_NAME] as the parameter.Koziara
Worked immediately. Tks for the tip. Easiest solutionAlderman
D
39

OK, I have similar problem and exactly as it was in case of Pauk, it was caused by the server running out of disk space while restoring and so caused a permanent restoring state. How to end this state without stopping SQL Server services?

I have found a solution :)

Drop database *dbname*
Dawdle answered 26/6, 2009 at 10:11 Comment(0)
P
35

WITH RECOVERY option is used by default when RESTORE DATABASE/RESTORE LOG commands is executed. If you're stuck in "restoring" process you can bring back a database to online state by executing:

RESTORE DATABASE YourDB WITH RECOVERY
GO

If there's a need for multiple files restoring, CLI commands requires WITH NORECOVERY and WITH RECOVERY respectively - only the last file in command should have WITH RECOVERY to bring back the database online:

RESTORE DATABASE YourDB FROM DISK = 'Z:\YourDB.bak'
WITH NORECOVERY
GO
RESTORE LOG YourDB FROM DISK = 'Z:\YourDB.trn'
WITH RECOVERY
GO

You can use SQL Server Management Studio wizard also:

enter image description here

There is also virtual restoring process, but you'll have to use 3rd party solutions. Usually you can use a database backup as live online database. ApexSQL and Idera has their own solutions. Review by SQL Hammer about ApexSQL Restore. Virtual restoring is good solution if you're dealing with large numbers of backups. Restore process is much faster and also can save a lot of space on disk drive. You can take a look on infographic here for some comparison.

Pleo answered 17/1, 2014 at 17:24 Comment(0)
S
31

Right Click database go to Tasks --> Restore --> Transaction logs In the transactions files if you see a file checked, then SQL server is trying to restore from this file. Uncheck the file, and click OK. Database is back .....

this solved the issue for me, hope this helps someone.

Shine answered 31/7, 2020 at 15:39 Comment(3)
Perfectly! I need stop "Restoring" state to continue using db. Thank you.Raindrop
This was the one that worked for me. Many thanks.Slatternly
How to do this with T-SQL?Mauro
G
24

This may be fairly obvious, but it tripped me up just now:

If you are taking a tail-log backup, this issue can also be caused by having this option checked in the SSMS Restore wizard - "Leave source database in the restoring state (WITH NORECOVERY)"

enter image description here

Greaves answered 16/7, 2014 at 15:20 Comment(1)
If you are in this state, then your best bet is to: 1. Right-click the database, go to Tasks->Restore->Transaction Logs 2. Find the backup file that was used for the Tail Log back up 3. Restore the backup The restore should succeed and bring the database back online.Otalgia
T
17

I figured out why.

If the client who issued the RESTORE DATABASE command disconnects during the restore, the restore will be stuck.

It's odd that the server, when told to restore a database by a client connection, will not finish the restore unless the client stays connected the entire time.

Tomchay answered 11/2, 2009 at 19:4 Comment(4)
All SQL Commands require that the client stay connected the entire time.Heeheebiejeebies
@mrdenny: i would have assumed that changes get undone when a client disconnects.Tomchay
I have the same problem running this command with PHP PDO driver from microsoft. however when running with microsoft sql server management studio It works just fine. I wonder how to make my php application connected the entire time ?Baldridge
Happened here also, DB stuck in restore/single-user after possible connection break. Killed all other SPIDs from new session but still stuck. Was able to drop database as solution.Ury
S
12

In my case, it was sufficient to drop the database which was hanging in state "Restoring..." with the SQL command

 drop database <dbname> 

in a query window.

Then I right-clicked on Databases and selected Refresh which removed the entry in the SQL Server Management Studio (SSMS). Afterwards I did a new restore which worked fine.


(Note that bringing it offline did not work, a restart of the SQL service did not work, a server reboot did not work as well).

Stupor answered 18/7, 2018 at 15:36 Comment(1)
This helped me in get rid of database in Restoring state... which I wanted to remove altogether.Fiesta
S
10

this one did work :

http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/8dd1b91d-3e14-4486-abe6-e3a550bfe457

I had a situation where my database showed restoring state and I couldn't run any queries and couldn't connect with our software.

What I did to get out of this situation is:

  1. Stop all SQL related services from windows services.

  2. I opened the DATA folder where the Ldf and Mdf files resides in the SQL directory, normally its like : "C:\Program Files***********\MSSQL\DATA

  3. Then I copied both the Ldf and Mdf files of the database: [db name].mdf and [db name]_log.ldf

I copied both of these files to another folder.

  1. Then I started all the SQL related services (in step 1) again from windows services.

  2. Started my MS SQL Management studio with normal login.

  3. Right click on the culprit database and hit DELETE (to delete the database at all).

  4. All the LDF and MDF files related to this database have gone from DATA folder (mentioned in step 2).

  5. Created a new database with the same name (same name of the one I deleted in step 6 - the culprit database).

  6. Then [database name]->right click -> tasks -> Take Offline.

  7. I then Copied both the files (from step 3) back to the DATA folder (step 2).

  8. [database name]->right click -> tasks -> Bring Online.

Significancy answered 3/10, 2012 at 10:55 Comment(1)
This worked for me too. On step 10, I chose to overwrite the existent files.Secretory
P
9

I had a . in my database name, and the query didn't work because of that (saying Incorrect syntax near '.') Then I realized that I need a bracket for the name:

RESTORE DATABASE [My.DB.Name] WITH RECOVERY
Podolsk answered 28/7, 2016 at 13:17 Comment(0)
C
9

Use the following command to solve this issue

RESTORE DATABASE [DatabaseName] WITH RECOVERY
Changeup answered 19/5, 2020 at 12:44 Comment(0)
W
5

In my case I just Right Click on Database then Task-->Restore-->Database-->Ok and everything became fine.

Wehrmacht answered 19/10, 2022 at 12:38 Comment(0)
S
3

I have had this problem when I also recieved a TCP error in the event log...

Drop the DB with sql or right click on it in manager "delete" And restore again.

I have actually started doing this by default. Script the DB drop, recreate and then restore.

Shaffer answered 13/3, 2010 at 18:40 Comment(0)
P
3

By default, every RESTORE DATABASE comes with RECOVERY set up. The 'NORECOVERY' options, basically tells the SQL Server that the database is waiting for more restore files (could be a DIFF file and LOG file and, could include tail-log backup file, if possible). The 'RECOVERY' options, finish all transactions and let the database ready to perform transactions.

So:

  1. if your database is set up with SIMPLE recovery model, you can only perform a FULL restore with NORECOVERY option, when you have a DIFF backup. No LOG backup are allowed in SIMPLE recovery model database.
  2. Otherwise, if your database is set up with FULL or BULK-LOGGED recovery model, you can perform a FULL restore followed by NORECOVERYoption, then perform a DIFF followed by NORECOVERY, and, at last, perform LOG restore with RECOVERY option.

Remember, THE LAST RESTORE QUERY MUST HAVE RECOVERY OPTION. It could be an explicit way or not. In therms of T-SQL, the situation:

1.

 USE [master]
    GO
    RESTORE DATABASE Database_name 
    FROM DISK = N'\\path_of_backup_file.bak WITH FILE = 1, [REPLACE],NOUNLOAD, 
    RECOVERY -- This option could be omitted.
    GO

WITH REPLACE option must be used with caution as it can lead to data loss

Or, if you perform a FULL and DIFF backup, you can use this

   USE [master]
    GO
    RESTORE DATABASE Database_name
      FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1, 
       NOUNLOAD,NORECOVERY
    GO
    RESTORE DATABASE Database_name
      FROM DISK =N'\\path_of_**diff**backup_file.bak' WITH FILE = 1, 
     NOUNLOAD, RECOVERY
    GO

 2. USE [master]
    GO
   -- Perform a Tail-Log backup, if possible. 
   BACKUP LOG Database_name
   GO
   -- Restoring a FULL backup
   RESTORE DATABASE Database_name
    FROM DISK = N'\\path_of_backup_file.bak' WITH FILE = 1, 
     NOUNLOAD,NORECOVERY
  GO 
  -- Restore the last DIFF backup
  RESTORE DATABASE Database_name
    FROM DISK = N'\\path_of_DIFF_backup_file.bak' WITH FILE = 1,
     NORECOVERY,NOUNLOAD
  GO
  -- Restore a Log backup
  RESTORE LOG Database_name
    FROM DISK = N'path_of_LOG_backup_file.trn' WITH FILE = 2,
    RECOVERY, NOUNLOAD
  GO

Of course, you can perform a restore with the option STATS = 10 that tells the SQL Server to report every 10% completed.

If you prefer, you can observe the process or restore in real-time based query. As follow:

USE[master]
GO
SELECT session_id AS SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time 
    FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a 
        WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')
GO

Hope this help.

Penicillin answered 11/4, 2017 at 19:27 Comment(0)
O
2

There can also be problem deleting a stuck database if snapshot is enabled. For me this worked:

  1. First I followed Tipu Delacablu steps (read a few posts up)
  2. run command: drop database [your database], which will give you an error telling you the name of the snapshot database
  3. run command: drop database [snapshot database], and then run the command in step 2 again.
Open answered 28/8, 2009 at 5:42 Comment(0)
B
2

Ran into a similar issue while restoring the database using SQL server management studio and it got stuck into restoring mode. After several hours of issue tracking, the following query worked for me. The following query restores the database from an existing backup to a previous state. I believe, the catch is the to have the .mdf and .log file in the same directory.

RESTORE DATABASE aqua_lc_availability
FROM DISK = 'path to .bak file'
WITH RECOVERY
Boutwell answered 17/12, 2019 at 9:11 Comment(0)
P
1

Have you tried running a VERIFY ONLY? Just to make sure it's a sound backup.

http://msdn.microsoft.com/en-us/library/ms188902.aspx

Penitence answered 6/2, 2009 at 20:25 Comment(0)
H
1

I have got the MyDbName (Restoring...) case because of SQL Express licensed limit.

In the log file, I found this:

CREATE DATABASE or ALTER DATABASE failed because the resulting cumulative database size would exceed your licensed limit of 10240 MB per database.

So if you are trying to restore a bigger database, you need to switch your SQL Express server to Developer edition for instance.

Harr answered 2/9, 2016 at 13:48 Comment(1)
It was the TFS database and the TFS client already told me: Database full.Dupleix
H
1

What fixed it for me was

  1. stopping the instance
  2. creating a backup of the .mdf and .ldf files in the data folder
  3. Restart the instance
  4. delete the database stuck restoring
  5. put the .mdf and.ldf files back into the data folder
  6. Attach the instance to the .mdf and .ldf files
Hygienics answered 31/10, 2018 at 21:36 Comment(0)
E
1

enter image description here

Try any of the following solutions when stuck here:

-- Solution 1 - This one worked for me right away.
RESTORE DATABASE database_name WITH RECOVERY

-- Solution 2
RESTORE LOG database_name FROM backup_device WITH RECOVERY

-- Solution 3
RESTORE DATABASE databas

Source: https://blog.sqlauthority.com/2013/07/19/sql-server-database-in-restoring-state-for-long-time/

Eadwine answered 6/3, 2024 at 15:23 Comment(0)
T
0
  1. Let check and run SQL Agent Service firstly.
  2. Using following T-SQL:

    SELECT filename FROM master.sys.sysaltfiles WHERE dbid = DB_ID('db_name');

  3. Using T-SQL continuously:

    RESTORE DATABASE FROM DISK = 'DB_path' WITH RESTART, REPLACE;

Hope this help!

Tripe answered 14/5, 2013 at 8:4 Comment(0)
E
0

All the WITH RECOVERY based options did not work for me.

What did was to do the complete restore from Management Studio.

USE [master]
RESTORE DATABASE Sales_SSD
FROM  DISK = N'D:\databaseBackups02\Daily_Sales_20150309_0941.bak' 
WITH  FILE = 1,  
MOVE N'Sales_Data' TO N'C:\Data\SSD\Sales.mdf',  
MOVE N'Sales_Log' TO N'C:\Data\SSD\Sales_1.ldf',  
NOUNLOAD,  REPLACE,  STATS = 5
Endocentric answered 26/3, 2015 at 9:31 Comment(0)
P
0

I had the same issue... although I do not know why my database experienced this problem as my drive was not full... It's like it got corrupted or something. I tried all of the above none of them fully worked, I especially thought the suggestion to stop the service and deleting the mdf and ldf files would work... but it still froze up on restore?

I ended up resolving this by deleting the files as mentioned but instead of trying to restore the DB again I copied over fresh .mdf and .ldf files and Attached these using the Front End Attachment wizard. Relief, it worked!!

It took FOREVER to copy over the new files as I am using a Virtual Machine... so copying and pasting using the clipboard took like an hour itself so I would only recommend this as a last attempt.

Pentecostal answered 18/9, 2015 at 21:7 Comment(0)
S
0
RESTORE DATABASE {DatabaseName}
   FROM DISK = '{databasename}.bak'
   WITH REPLACE, RECOVERY
Selfsufficient answered 9/5, 2019 at 6:9 Comment(2)
Please point out the additional insight this answer provides when compared to the older, accepted and highly upvoted answer. That would help to avoid the impression of having just copied it in the hope of getting reputation. Also, code-only answers (which is the main visible difference) are not appreciated here, because they give the wrong impression that StackOverflow is a free code writing service,Shuman
I fixed the formatting, just to make the similarity to the older answer more obvious. But you could learn to do that here stackoverflow.com/editing-help in case you try to make more easily readable answers in the future.Shuman
B
0

If you want to restore an SQL Server database from a backup file, you can use the following script:

RESTORE DATABASE [MyDatabase] -- which database to restore
FROM DISK = N'X:\MyDatabase.bak' -- location of the database backup
WITH 
    FILE = 1, -- restore from a backup file
    -- declare where the file groups should be located (can be more than two)
    MOVE N'MyDatabase_Data' TO N'D:\SSDPATH\MyDatabase.mdf',
    MOVE N'MyDatabase_Log' TO N'E:\HDDPATH\MyDatabase.ldf',
    -- Tape option; only relevant if you backup from magnetic tape
    NOUNLOAD,
    -- brings the database online after the database got restored
    -- use this option when you don't want to restore incremental backups
    -- use NORECOVERY when you want to restore differential and incremental backup files
    RECOVERY,
    -- replace existing database with the backup 
    -- deletes the existing database
    REPLACE, 
    -- print log message for every 1 percent of restore
    STATS = 1;
Ballman answered 19/11, 2020 at 9:4 Comment(0)
H
0

This is an old issue that keeps coming up all the time with SQL Server, even the latest 2019 version! I don't know why Microsoft have left this pain take hold for so long and allowed their MSSQL engine to continue behaving this way. Never the less, I propose another possible solution for those that tried the RESTORE DATABASE WITH RECOVERY option and it still didn't work.

Log into the server itself and fire up the default SSMS program on the actual database server. Next go to the "recovery" database and DELETE it. Done. Problem gone. If you needed to keep it, copy the MDF file and rename it and attach it as a new database. Worked for me on SQL Server 2008 R2.

Hagiocracy answered 10/12, 2020 at 5:58 Comment(0)
L
0

This problem occurred for me today on a VM SQL Server. I attempted to restore a 1.8GB Database and it was stuck at 0% with ASYNC_IO_COMPLETION.

I tried multiple times, moving the .bak file to the same drive I was restoring to; even trying to restore another unrelated database that was <400MB in size.

I tried everything on this thread, with no luck.

Then I came across Restore stuck in ASYNC_IO_COMPLETION on DBA and the answer worked for me.

Enable Instant File Initialization and restart SQL Server, then retry the restore. The SSMS GUI showed a percentage progress almost instantly, as did:

Select percent_complete,* From sys.dm_exec_requests

My guess is that the storage behind the VM is very slow, or at fault.

Lorri answered 27/1, 2023 at 11:18 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.