How to automatically restore a SQL Server 2008 R2 backup file - sql

My team needs to update an automated content process running over SQL Server 2008 servers to include the content of a SQL Server 2008 R2 database delivered by a third-party vendor.
The request to third-party to deliver us on SQL Server 2008 is NOT an option.
My common sense indicates there is no way to downgrade from 2k8 R2 to 2k8 as in most of the software products I know. However, I'm wondering if I would be able to do something like this in a script:
Restore SQL Server 2008 R2 .bak file onto our SQL Server 2008 R2 instance
Update compatiblity level to SQL Server 2008 (100). Here is the bug in my plan: I've not found any compatiblity level distinctions between 2008 versions in internet. Any clue on this?
Backup the database.
Restore the database in SQL Server 2008
There may be some other ideas you may want to share with me.
Just recall there should not be manual intervention on this database conversion since this operation needs to be incorporated to an automated process.
Any help/suggestions/comments will be welcome!

No, you cannot restore a database backwards, regardless of compatibility level. Compatibility level affects certain database engine behaviors, but does not downgrade the database version. You will never be able to restore onto 2008 a database that ever existed in a 2008 R2 instance.
For workarounds, you can:
restore the database on R2, then use the import/export data wizard (or a third party tool) to transfer schema / data to the 2008 instance (and you should be able to automate this to some extent, e.g. Red-Gate's tools have command-line interfaces)
upgrade your 2008 servers to 2008 R2 or 2012
push back on the vendor

By design, you can only restore a DB backup to the same or newer version of SQL Server. A backup created with SQL Server 2008 R2 can only be restored with SQL Server 2008 R2 or SQL Server 2012. This is regardless of the compatibility level of the database. It's a limitation of the backup and restore procedures. This has been a limitation since prior to SQL Server 2000 (i.e., every version I've ever used).

Maybe you can script out the creation of new database, instead of backing up and restoring you basically just do a data dump with script.
Try looking at this How can I get a SQL dump of a SQL Server 2008 database?

Related

Conversion from LocalDB (.mdf) file to SQL Server Express .mdf file and reverse process

Since we need to move around our database a lot (like update it with new Rows which are generated by code and then update it prod db and reverse process). SQL Server CE, being a file based system was very helpful.
We would like to upgrade to use SQL Server Local Db but at the same time, it has limitations of use with IIS (though possible with AttacheDbFile). In this regard, since LocalDb is more or less a version of SQL Server Express, would it be possible to use our SQL Server LocalDB .mdf in our development environment and then copy them in prod but use by attaching to a SQL Server Express instance?
If yes, what additional thing, we need to do make it possible?
Also, we would like the reverse process to be worked out as well, mean detach the .mdf file and use it as LocalDb in development environment. I have read the great blog articles of
Krzysztof Kozielczyk also but not have experimented much with LocalDb.
LocalDB IS SQL Server Express (introduced with SQL Server 2012 Express), and the .mdf file is identical between LocalDB and SQL Server Express (and even a "full" SQL Server edition like Web, Standard or Enterprise Edition).
The only caveat is: you need to be using the same versions of those databases, since the file format is only identical amongst same versions, and can only be used amongst the same versions (e.g. 2012) - or it can be "upgraded" to the next newer version (e.g. you could move a database from LocalDB 2012 to a SQL Server 2014 Express once it's released) - but you can never go back down to an earlier version (you cannot take a LocalDB 2012 .mdf database file and attach it to a SQL Server 2008 version).

SQL server version 655

what update i need to install for version 655 in vs studio 2010 for the sql server.
Can anyone tell me what i need on my computer when creating a database using sql on vs studio 2010? I need to use version 655 cos thats the version being used on Uni Computers
SQL Server 2008 (655) and SQL Server 2008 R2 (661) are not the same thing (though it is a common misconception - a lot of people think they're the same because Microsoft made a terrible, terrible, terrible naming decision, making 2008 R2 sound like a service pack).
You can't attach/restore a 2008 R2 database to a 2008 instance, period. Though there are several workarounds (that also apply for attaching 2012 -> 2008, 2008 -> 2005, 2008 R2 -> 2005, etc). You can either upgrade the engine you're trying to connect to up to 2008 R2, or you can extract the schema / data from the database using generate scripts wizard, import/export data wizard, SSIS, or 3rd party tools like Red Gate SQL Compare (for a full list of alternatives see this blog post).
This comes up extremely often, did you search for "sql server version 661 655"? I came up with a whole bunch of hits using this search term and some slight variations, all on this site and dba.SE:
Failure attaching SQL Server 2008 database to SQL Server 2005
Cannot attach 2008 R2 database to 2008 instance
Database restore error
Create Database in SQL Server 2012, Script and Use in 2008?
Cannot restore backup on SQL Server Express
How to automatically restore a SQL Server 2008 R2 backup file
Database "cannot be opened because it is version 661" when attaching .mdf file
Use database 661 version with SQL Server 2008
SQL Server: Attach incorrect version 661
https://dba.stackexchange.com/questions/21525/restoring-an-sql-server-2012-mdf-to-sql-server-2008
https://dba.stackexchange.com/questions/20588/restore-sql-server-2012-backup-to-a-sql-server-2008-database
If you are developing .NET based apps in visual studio 2010, then they will typically support all versions of Microsoft SQL Server. That does not mean you install SQL server INSIDE of visual studio, just that you can connect to a SQL Server instance running somewhere.
If you are asking "Where can I get a copy of SQL Server that my university is using?", that depends. For development, you can use a SQL Express installation on your local machine that matches the major release of SQL (2005, 2008, 2008R2, 2012), or you can request the university (or someone else) grant you access to an existing SQL instance.

Transfer a database to SQL Server 2008 from SQL Server 2008 Express

Anyone know the generic practices transfer the database to SQL Server 2008 from SQL Server 2008 Express (I'm not sure it is r2), when I try to attach the .mdf file from Express, there is an error message.
the database cannot be opened because it is version 661. This server supports version 655 and earlier. A downgrade path is not
supported.
Well, the message is clear: the file you're trying to attach from Express is from a newer version of SQL Server
So it appears that you indeed have SQL Server 2008 R2 Express, and you cannot attach this to a SQL Server 2008 instance. There's no way, no hack, no workaround, no trick, or no third-party tool to achieve this - it just cannot be done - period.
So you either need to upgrade your main instance to SQL Server 2008 R2, too - or you need to find another way (like scripting out the structure and/or data into .SQL files) to move your changes from one instance to the other - or use a third-party tool like Red-Gate SQL Compare to synchronize the changes between the two instances.

How can I attach a database?

When I want to attach database, an error occurs:
The database 'Almizan' cannot be opened because it is version 661.
This server supports version 655 and earlier. A downgrade path is not supported.
Could not open new database 'Almizan'. CREATE DATABASE is aborted.
(.Net SqlClient Data Provider)
Help me to attach this database.
Install SQL Server 2008 EXPRESS R2. There is a bug in the Web Platform Installer and it still thinks EXPRESS R1 is the latest version.
SQL Server 2008 databases are version 655. SQL Server 2008 R2 databases are 661. You are trying to attach an 2008 R2 database (v. 661) to an 2008 instance and this is not supported. Once the database has been upgraded to an 2008 R2 version, it cannot be downgraded. You'll have to either upgrade your 2008 SP2 instance to R2, or you have to copy out the data in that database into an 2008 database (eg using the data migration wizard, or something equivalent).
The message is misleading, to say the least, it says 662 because SQL Server 2008 SP2 does support 662 as a database version, this is when 15000 partitions are enabled in the database, see Support for 15000 Partitions.docx. Enabling the support bumps the DB version to 662, disabling it moves it back to 655. But SQL Server 2008 SP2 does not support 661 (the R2 version).
Think you need to upgrade the SQL Server 2008 instance (655) your trying to attach the database in, to SQL Server 2008 R2 (661), the version the database was actually created in.
See SQL Server: Attach incorrect version 661
The this answer on the MSDN seems to tell us the obvious
http://social.msdn.microsoft.com/Forums/en-US/sqlexpress/thread/01ed3b1c-6f29-4518-a3a4-e4e35decc05f/
When you attached the database to SQL Server 2008 to compress it the
database has automatically been upgraded from SQL 2005 to to SQL
Server 2008 from the disk structucture point of view. An internal
upgrade script has been run and has modified the on-disk structure of
the database to that new version. This can be seen at the version 655.
Once this has been done you can no longer attach the upgraded database
to a lower version of SQL Server, it will fail with the error you've
seen.
This has nothing to do with the compatiblity level of the database.
The compatabilty level only prevents the engine from using some of the
new features.
In order to get the database on SQL Server 2005 again you will need to
create the database freshly and export/import the data, for example by
using the Export/Import Wizard.
Ulrike - MSFT

Importing Sql Server 2005 database into Sql Server express 2008

Is there any way to import a database backup from 2005 into 2008 express edition. What I've had to resort to is doing a script the database, then import all the data through DTS. Whenever I tried to import straight from a backup file it says something about not being to import into a new version of sql server or I'll get the below error.
title: Microsoft SQL Server Management Studio
Specified cast is not valid. (SqlManagerUI)
SQL 2005 backups should be restored on 2008 without problem (have done that myself many times). What exact error message did you got about versions?
The other error (Specified cast is not valid) seems to be Management Studio error, not server error. Have you full rights on 2008 server?
Look at this question - any-reason-to-have-sql-server-2005-and-2008-installed-on-same-machine - there are talked both about restoring SQL2005 backups and about attaching SQL2005 data files.
(Of course you cannot attach production databases. To attach non-production databases just detach them, make file level copy of these and attach copies to new server. Orginal files need to attach to original server too :))
I imagine that you are in a development process where your data will have to be regularly copied to you SQL 2008 server.
You can then think of configuring a replication between the SQL 2005 server (publisher) and SQL Server Express 2008 (suscriber). Depending on your requirements, you have the choice between snapshot or merge replication. If no update is done on the suscriber side, go for snapshot.
Once you want to have your 2008 server running independantely from the publisher, just delete the replication.
A valid SQL Server 2005 Express backup file should be able to be restored to SQL Server 2008 Express. If the SQL Server 2005 backup is from the Standard or Enterprise versions, you might hit problems restoring it to Express. The user context that the backup was created from should not affect the ability to restore that backup.
One thing you can do is to try running the restore operation as a verification, without actually trying to run the restore. That will tell you if the backup file is valid or not. You can use this syntax:
RESTORE VERIFYONLY
FROM yourbackupfile.bak
If possible, I would also suggest trying to simply detach the original database from 2005 and then attaching the file at the 2008 edition.
While I have only tried this with the standard edition myself, it has worked perfectly with the compatibility mode keeping the database set to 2005.
Have you tried running the Upgrade Advisor http://www.microsoft.com/download/en/details.aspx?id=11455 - it might be able to highlight problems for upgrading the original database.