How to restore my backup to a different database? - sql-server

I have a backup and I want it to restore it to a new
Database Wss_Content3
The backfile is a backup of the Wss_Content database.
When I run the following code:
USE Master;
GO
RESTORE DATABASE Wss_Content3 FROM DISK = 'f:\Fill_Wss_Content.bak'
WITH
MOVE 'Wss_Content3' TO 'E:\MSSQL\MSSQL11.SHP2013PROD\MSSQL\Data\Wss_Content3.mdf',
---------------------------------------^^^^^
MOVE 'Wss_Content3_log' TO 'F:\MSSQL\MSSQL11.SHP2013PROD\MSSQL\Data\Wss_Content3_log.ldf';
I get:
Msg 1834, Level 16, State 1, Line 3 The file
'E:\MSSQL\MSSQL11.SHP2013PROD\MSSQL\Data\WSS_Content.mdf' cannot be
overwritten. It is being used by database 'WSS_Content'. Msg 3156,
Level 16, State 4, Line 3 File 'WSS_Content' cannot be restored to
'E:\MSSQL\MSSQL11.SHP2013PROD\MSSQL\Data\WSS_Content.mdf'. Use WITH
MOVE to identify a valid location for the file. Msg 1834, Level 16,
State 1, Line 3 The file
'F:\MSSQL\MSSQL11.SHP2013PROD\MSSQL\Data\WSS_Content_log.ldf' cannot
be overwritten. It is being used by database 'WSS_Content'. Msg 3156,
Level 16, State 4, Line 3 File 'WSS_Content_log' cannot be restored to
'F:\MSSQL\MSSQL11.SHP2013PROD\MSSQL\Data\WSS_Content_log.ldf'. Use
WITH MOVE to identify a valid location for the file. Msg 3119, Level
16, State 1, Line 3 Problems were identified while planning for the
RESTORE statement. Previous messages provide details. Msg 3013, Level
16, State 1, Line 3 RESTORE DATABASE is terminating abnormally.
It's like to restore on the database Wss_Content but I want to do it on a new database Wss_Content3.
How can I do it?
EDIT:
With:
USE Master;
GO
RESTORE DATABASE Wss_Content3 FROM DISK = 'f:\Fill_Wss_Content.bak'
WITH
MOVE 'Wss_Content' TO 'E:\MSSQL\MSSQL11.SHP2013PROD\MSSQL\Data\Wss_Content3.mdf',
---------------------------------------^^^^^
MOVE 'Wss_Content_log' TO 'F:\MSSQL\MSSQL11.SHP2013PROD\MSSQL\Data\Wss_Content3_log.ldf';
I get:
Msg 3154, Level 16, State 4, Line 2
The backup set holds a backup of a database other than the existing 'Wss_Content3' database.
Msg 3013, Level 16, State 1, Line 2
RESTORE DATABASE is terminating abnormally.
EDIT2:
USE Master;
GO
RESTORE FILELISTONLY FROM DISK = 'f:\Fill_Wss_Content.bak'
WSS_Content E:\MSSQL\MSSQL11.SHP2013PROD\MSSQL\Data\WSS_Content.mdf D PRIMARY 163158360064 35184372080640 1 0 0 140B6DD4-DCA0-4FD8-BA65-59390D5FC3B5 0 0 162484191232 512 1 NULL 133075000000938400215 F50C4B9C-B575-4158-B5D6-F44B92FE0380 0 1 NULL
WSS_Content_log F:\MSSQL\MSSQL11.SHP2013PROD\MSSQL\Data\WSS_Content_log.ldf L NULL 22918791168 2199023255552 2 0 0 C83B63C2-B68E-4101-A52B-07EFC08446D7 0 0 0 512 0 NULL 0 00000000-0000-0000-0000-000000000000 0 1 NULL
EDIT3:
I've tried this (with Wss_Content5.mdf and Wss_Content5_log.ldf
) non existing:
RESTORE DATABASE Wss_Content3 FROM DISK = 'f:\Fill_Wss_Content.bak'
WITH
MOVE 'Wss_Content' TO 'E:\MSSQL\MSSQL11.SHP2013PROD\MSSQL\Data\Wss_Content5.mdf',
---------------------------------------^^^^^
MOVE 'Wss_Content_log' TO 'F:\MSSQL\MSSQL11.SHP2013PROD\MSSQL\Data\Wss_Content5_log.ldf
Unfortunately I get this error:
Msg 3154, Level 16, State 4, Line 5
The backup set holds a backup of a database other than the existing 'Wss_Content3' database.
Msg 3013, Level 16, State 1, Line 5
RESTORE DATABASE is terminating abnormally.

You need to use the following option:
WITH REPLACE
If you're using the wizard from SQL Management Studio to restore the database rather than the command line, there is a corresponding option that needs to be checked: "Overwrite the existing database (WITH REPLACE)"

Related

Getting the Logical File Name using RESTORE FILELISTONLY from a DB backup and storing it into a variable

I am using a fairly simple PowerShell script to automate the process of restoring databases:
#Script to restore database.
$serverInstance = $args[0]
$dbName = $args[1]
$file = $args[2]
$dataDestination = $args[3]
$logDestination = $args[4]
Import-Module sqlps
$relocateData = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile(###LOGICALFILENAME###, $dataDestination)
$relocateLog = New-Object Microsoft.SqlServer.Management.Smo.RelocateFile(###LOGICALFILENAME###, $logDestination)
Restore-SqlDatabase -ServerInstance $serverInstance -Database $dbName -BackupFile $file -RelocateFile #($relocateData,$relocateLog)
I am looking for a way to dynamically fetch the logical file names of the files contained in a database backup ($file) and store them into a variable so the can be renamed accordingly.
Anyone have any ideas? I've been banging my head against this for way too long! :)
Thanks for your help!
As always with Powershell and SQL Server Invoke-Sqlcmd is your friend. It returns a DataTable that's simple to navigate. EG
$dt = Invoke-Sqlcmd "restore filelistonly from disk='c:\temp\aw.bak'"
$dataFileLogicalName = ""
$logFileLogicalName = ""
foreach ($r in $dt)
{
if ($r.Type -eq "L")
{
$logFileLogicalName = $r.LogicalName
}
if ($r.Type -eq "D")
{
$dataFileLogicalName = $r.LogicalName
}
write-host "$($r.Type) $($r.LogicalName) $($r.PhysicalName)"
}
write-host "data=$dataFileLogicalName log=$logFileLogicalName"
Ok, I was getting a similar error. But in my case I was not using PowerShell, but running it in SSMS.
So the steps to the issue and also how to fix are as follows.
First I downloaded the WideWorldImporters-Standard.bak file from releases here.
Now I run the following command in SSMS in an attemp to restore it.
RESTORE DATABASE WideWorldImporters FROM DISK = N'C:\Users\msi\Downloads\WideWorldImporters-Standard.bak'
This gives the following errors.
Msg 5133, Level 16, State 1, Line 2
Directory lookup for the file "D:\Data\WideWorldImporters.mdf" failed with the operating system error 3(The system cannot find the path specified.).
Msg 3156, Level 16, State 3, Line 2
File 'WWI_Primary' cannot be restored to 'D:\Data\WideWorldImporters.mdf'. Use WITH MOVE to identify a valid location for the file.
Msg 5133, Level 16, State 1, Line 2
Directory lookup for the file "D:\Data\WideWorldImporters_UserData.ndf" failed with the operating system error 3(The system cannot find the path specified.).
Msg 3156, Level 16, State 3, Line 2
File 'WWI_UserData' cannot be restored to 'D:\Data\WideWorldImporters_UserData.ndf'. Use WITH MOVE to identify a valid location for the file.
Msg 5133, Level 16, State 1, Line 2
Directory lookup for the file "E:\Log\WideWorldImporters.ldf" failed with the operating system error 3(The system cannot find the path specified.).
Msg 3156, Level 16, State 3, Line 2
File 'WWI_Log' cannot be restored to 'E:\Log\WideWorldImporters.ldf'. Use WITH MOVE to identify a valid location for the file.
Msg 3119, Level 16, State 1, Line 2
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg 3013, Level 16, State 1, Line 2
RESTORE DATABASE is terminating abnormally.
So now I change the command to include the mdf and ldf file paths as follows.
RESTORE DATABASE WideWorldImporters FROM DISK = N'C:\Users\msi\Downloads\WideWorldImporters-Standard.bak' WITH
MOVE 'WideWorldImporters' TO 'C:\Users\msi\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\MSSQLLocalDB\WideWorldImporters.mdf'
,
MOVE 'WideWorldImporters_Log' TO 'C:\Users\msi\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\MSSQLLocalDB\WideWorldImporters_Log.ldf'
Now this gives me the error in question as follows.
Msg 3234, Level 16, State 2, Line 5
Logical file 'WideWorldImporters' is not part of database 'WideWorldImporters'. Use RESTORE FILELISTONLY to list the logical file names.
Msg 3013, Level 16, State 1, Line 5
RESTORE DATABASE is terminating abnormally.
Now I run the RESTORE FILELISTONLY command as suggested to get the list as follows.
This shows me the files along with path as follows.
LogicalName PhysicalName Type FileGroupName Size MaxSize FileId CreateLSN DropLSN UniqueId ReadOnlyLSN ReadWriteLSN BackupSizeInBytes SourceBlockSize FileGroupId LogGroupGUID DifferentialBaseLSN DifferentialBaseGUID IsReadOnly IsPresent TDEThumbprint SnapshotUrl
-------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---- -------------------------------------------------------------------------------------------------------------------------------- -------------------- -------------------- -------------------- --------------------------------------- --------------------------------------- ------------------------------------ --------------------------------------- --------------------------------------- -------------------- --------------- ----------- ------------------------------------ --------------------------------------- ------------------------------------ ---------- --------- ------------------------------------------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
WWI_Primary D:\Data\WideWorldImporters.mdf D PRIMARY 1073741824 35184372080640 1 0 0 8D30F4F9-A463-404F-805A-9BD1C634B66B 0 0 11730944 512 1 NULL 623000001720300037 C6D12B8E-E389-4961-ADD4-FE6E468F4E44 0 1 NULL NULL
WWI_UserData D:\Data\WideWorldImporters_UserData.ndf D USERDATA 2147483648 35184372080640 3 37000000095200001 0 28D406E0-78FF-4400-9A4B-3A05D136B1F3 0 0 580124672 512 2 NULL 623000001720300037 C6D12B8E-E389-4961-ADD4-FE6E468F4E44 0 1 NULL NULL
WWI_Log E:\Log\WideWorldImporters.ldf L NULL 104857600 2199023255552 2 0 0 6AC6807E-8774-415B-8EFC-E8C569B0855E 0 0 0 512 0 NULL 0 00000000-0000-0000-0000-000000000000 0 1 NULL NULL
(3 rows affected)
Completion time: 2022-08-28T15:36:18.5341906+05:30
Now after taking note of the output, I modify the RESTORE Command to include all of the required files and paths as follows. This finally works.
RESTORE DATABASE WideWorldImporters FROM DISK = N'C:\Users\msi\Downloads\WideWorldImporters-Standard.bak' WITH
MOVE 'WWI_Primary' TO 'C:\Users\msi\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\MSSQLLocalDB\WideWorldImporters.mdf'
, MOVE 'WWI_Log' TO 'C:\Users\msi\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\MSSQLLocalDB\WideWorldImporters_Log.ldf'
, MOVE 'WWI_UserData' TO 'C:\Users\msi\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\MSSQLLocalDB\WideWorldImporters_UserData.ndf'

How to fix could not use view or function because of binding errors

I have Table-valued function when trying to execute I am getting below error
Msg 208, Level 16, State 1, Procedure IPTRate, Line 19 Invalid object
name 'DBName.dbo.AccessTable'. Msg 4413, Level 16, State 1, Line 3
Could not use view or function 'dbo.ExchangeRate' because of binding
errors.
Actually the database name recently renamed from DBName to DBNameNew. Is the error because of database rename? how to fix this. please suggest.
Thanks.
Error message is clear..
Msg 208, Level 16, State 1, Procedure IPTRate, Line 19 Invalid object name 'DBName.dbo.AccessTable
you will need to rename all the views

Database page-level restore seemingly ineffective

Background
SQL Server Enterprise 2012
Disk IO errors have occurred, causing two table errors:
DBCC CHECKDB(dbname)
GO
--Output:
--Msg 8939, Level 16, State 98, Line 1
--Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 0 (type Unknown), page (3:7432269). Test (IS_OFF (BUF_IOERR, pBUF->bstat)) failed. Values are 133129 and -6.
--Msg 8939, Level 16, State 98, Line 1
--Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 0 (type Unknown), page (3:7434265). Test (IS_OFF (BUF_IOERR, pBUF->bstat)) failed. Values are 133129 and -6.
The faulty disk has been replaced, with all files successfully copied to the replacement disk.
Problem
Having replaced the disk, subsequently carrying out a page-level restore from a full backup fortunately taken one day before the errors occurred results in 0 pages processed:
USE MASTER
RESTORE DATABASE dbname PAGE = '3:7434265, 3:7432269' FROM DISK = 'P:\MSSQL_BACKUPS\dbname\dbname\dbname_backup_2016_02_27_050001_8076562.full.bak' WITH NORECOVERY
GO
--Output:
--Processed 0 pages for database 'dbname', file 'dbname_pt0b' on file 1.
--RESTORE DATABASE ... FILE=<name> successfully processed 0 pages in 398.710 seconds (0.000 MB/sec).
Running CHECKDB again confirms the errors are still present. As far as I'm aware this is the correct method to recover from database corruption where only a small number of pages are affected. I know this won't get me to a stage where the database is fully restored - I need to restore the subsequent logs for that - but it should at least be in a state where the table errors have been fixed. What am I missing?
Thanks

How to set data and log file location for SQL Database?

I'm trying to create a database where the data and log files are saved to the E drive but not sure how to do so. I've tried:
CREATE DATABASE TachographDataContent_Archive
[ON E:\MySqlDir\MSSQL.MSSQLSERVER\MSSQL\Data]
[LOG ON {D:\MySqlDir\MSSQL.MSSQLSERVER\MSSQL\Data}]
And I'm getting this error:
Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'IF'.
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'TachographDataContent_Archive'.
To create database using query, you need to mention .mdf and .ldf file. So try below script.
Like this
CREATE DATABASE [TachographDataContent_Archive]
ON PRIMARY (NAME = 'TachographDataContent', FILENAME = 'E:\MySqlDir\MSSQL.MSSQLSERVER\MSSQL\Data\TachographDataContent.mdf')
LOG ON
(NAME = 'TachographDataContent_log', FILENAME = 'E:\MySqlDir\MSSQL.MSSQLSERVER\MSSQL\Data\TachographDataContent_log.ldf')
GO
good luck...

Restore Database and change the location for MDF File

I wont restore my database but the location path is not the same. How can i change this path(partition)?
RESTORE DATABASE [MY_DATABASE]
FROM DISK = 'C:\Content.bak'
WITH FILE = 1,
NOUNLOAD,
STATS = 10
Error Message:
Msg 5133, Level 16, State 1, Line 1
Directory lookup for the file "F:....\Content01.mdf" failed with the operating system error 3(failed to retrieve text for this error.
Reason: 15100).
Msg 3156, Level 16, State 3, Line 1
File 'Content01' cannot be restored to 'F:....\Content01.mdf'. Use WITH MOVE to identify a valid location for the file.
Msg 5133, Level 16, State 1, Line 1
Directory lookup for the file "H:....\Content01_log.LDF" failed with the operating system error 3(failed to retrieve text for this
error. Reason: 15105).
Msg 3156, Level 16, State 3, Line 1
File 'Content01_log' cannot be restored to 'H:....\Content01_log.LDF'. Use WITH MOVE to identify a valid
location for the file.
Msg 3119, Level 16, State 1, Line 1
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
THANKS.
RESTORE DATABASE [My_Database]
FROM DISK = 'C:\Content.bak'
WITH MOVE 'MyDatabase_Data' TO 'C:\Data\MyDatabase_Data.mdf',
MOVE 'MyDatabase_Log' TO 'C:\Data\MyDatabase_Log.ldf',
REPLACE,
STATS=10
Use the WITH MOVE command of the restore as discussed in this SO Question.
If anyone is here because they are restoring a database with multiple files, each destination file needs a new name. Using SQL Server 2008 R2, the gui does not provide an obvious clue nor does it solve it automatically.

Resources