I have deleted the .ldf file. But after that I am unable to recover database.
I have tried to detach and attach database but it is throwing exception.
“The database [dbName] is not accessible. (ObjectExplorer)”
I have also tried to create a new .ldf file with 0 byte size but database recovery fails.
There is no backup file for database.
I have gone through a post
The database [dbName] is not accessible. (ObjectExplorer)
But this is related to permission where as my issue is related to deletion of .ldf file.
I do not need log file. I just want to recover my data. Transaction log is not important for me.
When I deleted .ldf file SQL server was running. I didn't stopped it at that time.Later I had restarted it.
Suppose if your database name is xyz, then run following command:
ALTER DATABASE xyz REBUILD LOG ON ( NAME = xyz_log, FILENAME ='c:\.....\xyz_log.ldf');
DBCC CHECKDB (xyz);
ALTER DATABASE xyz SET SINGLE_USER;
DBCC CHECKDB (xyz, REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE xyz SET MULTI_USER;
You may lose some data. This command doesn’t guaranteed full recovery.
Related
Has anyone run into this error even when the database is deleted? I deleted the database and checked the "close existing connections" box before deleting.
I have a Live db and a Test Db. I have made a backup of Live. When I try to restore Live.bak to a database with name Test, I get the exclusive access error. I need to copy the Live db over Test.
Funny thing is I can restore a backup of Test if needed.
It is always better to close existing connections before deleting
ALTER DATABASE MyDB
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
Reattach it with same name and rename the database. Or restore with norecovery
RESTORE DATABASE TEST FROM DISK = 'C:\Live.BAK' WITH NORECOVERY
RESTORE LOG TEST FROM DISK = 'C:\LIVELOG.trn'
-- Moving file lcoations
WITH MOVE 'MDFLogicalName' TO 'C:\test.mdf',
MOVE 'LDFLogicalname' TO 'D:\Test.ldf'
I have a two backup files (MS SQL SERVER)
1) Demo.bak
2)DemoDiff.bak
I want to restore the Base database (Demo.bak) then Differential backup (DemoDiff.bak).
As I need to restore the differential database then I have to restore my base database with NORECOVERY option. But, when I restore with NORECOVERY option the database state is showing as 'Restoring' for a long time (Actually it as only 3519 KB size).
Can anyone help me out from this?
RESTORING is the expected state of a database after a RESTORE with NORECOVERY. You can then apply transaction log backups or a differential backup.
Recovery takes the database from RESTORING to ONLINE.
You can restore log files till the database is no recovery mode. If the database is recovered it will be in operation and it can continue database operation. If the database has another operations we cannot restore further log as the chain of the log file after the database is recovered is meaningless. This is the reason why the database has to be norecovery state when it is restored.
There are three different ways to recover the database.
1) Recover the database manually with following command.
RESTORE DATABASE database_name WITH RECOVERY
2) Recover the database with the last log file.
RESTORE LOG database_name FROM backup_device WITH RECOVERY
3) Recover the database when bak is restored
RESTORE DATABASE database_name FROM backup_device WITH RECOVERY
I'm trying to get a copy of an MDF file but coming across the standard "file is in use" message which I believe is the SQL service holding a lock on it. Is it possible to make a copy of the mdf file without having to stop the service or in any way affect users/applications?
If not, is it possible to create a once-off full backup mdf to a different location than the existing one so that it wouldn't be locked by SQL service?
(Variations on this have been asked on this site already, but I don't think this is a duplicate. I am not trying to relocate the database, simply attempting to take a copy of the mdf - without interrupting Live operations - so I can place it on my dev machine at home and play around with the database)
this will let u make a backup :
BACKUP DATABASE MyDatabase TO DISK = 'W:\DBs\MyDatabase.bak' WITH INIT;
and if u want to backup the log file as well then just add this command before the previous one :
ALTER DATABASE MyDatabase SET RECOVERY FULL;
Then if you want to recover the database from the backup file try this command:
USE [master]
ALTER DATABASE MyDatabase
SET SINGLE_USER WITH
ROLLBACK IMMEDIATE
-- The previous command will used to close all connections to the database
-- until you recover it
Restore Database MyDatabase From Disk = 'W:\DBs\MyDatabase.bak' WITH REPLACE;
ALTER DATABASE MyDatabase SET MULTI_USER
-- This will reopen the database for users connections
I have this code:
IF EXISTS (SELECT * FROM sys.sysdatabases WHERE name='MyDatabase')
begin
DROP database MyDatabase
end
Go
CREATE DATABASE MyDatabase
But I see this error after executing this query:
Cannot create file 'C:\Program Files\Microsoft SQL Server\MSSQL10.FARASQL\MSSQL\DATA\MyDatabase.mdf'
Most likely your database was offline when you tried to DROP it. In such case SQL Server leaves db files on filesystem. It's intentional behavior.
According to DROP DATABASE (Transact-SQL)
Dropping a database deletes the database from an instance of SQL
Server and deletes the physical disk files used by the database. If
the database or any one of its files is offline when it is dropped,
the disk files are not deleted. These files can be deleted manually by
using Windows Explorer.
Drop the database is just to bring it offline. You need to manually delete the mdf and ldf file (see here on how to locate them); then refer to this image:
After that, you can recreate the database.
I have a database that we are having problems with. Somehow the log has became 400 Gb and the database has been rendered useless. I want to drop all existing connections to the database and then detach the database.
Basically what I'm going to do is get rid of the giant log file and create a new one and reattach if it works. If not, we're going going to restore from backups.
If the log is useless, you can use these commands, but please document on them yourself before applying on a production server.
BACKUP LOG WITH NO_LOG for disgard the pages from log,
sp_helpdb for looking the name of the files of the db
DBCC SHRINKFILE('your log filename ', 0) -- for trunking the physical file to the size specified.
If you are sure there are no open transactions you can put the database in single user mode.
ALTER DATABASE [YourDB] SET SINGLE_USER WITH NO_WAIT
When you are done put it back in multi user mode
ALTER DATABASE [YourDB] SET MULTI_USER WITH NO_WAIT
Does
backup log yourdb with truncate_only then dbcc shrinkdatabase(yourdb) not shrink the logfile for you ?
Well basically no commands would execute agaisnt the database, at all. What we ended up doing was turning off the service and creating empty copies of the mdf and ldf files and replacing the ones being used by sql server. After that we restored the database from the last backup and voila, it's working again (mostly).
ALTER DATABASE [DB_NAME_HERE] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE [DB_NAME_HERE] SET MULTI_USER