|
Posted by Erland Sommarskog on 05/17/07 09:51
Plamen Ratchev (Plamen@SQLStudio.com) writes:
> An alternative option is to use the Copy Database Wizard in SSMS (right
> click a database, select Tasks, Copy Database...). You can use it to
> transfer, move, or copy a database from an SQL Server 2000 or SQL Server
> 2005 instance to an instance of SQL Server 2005. Just make sure to
> select the SMO method (not detach-and-attach) to keep your source
> database online.
Beware however that the SMO method is very unreliable. I don't know
how many bug reports I have submitted for it during the beta programme of
SQL 2005 and also after release. They have fixed quite a few bugs, but
when I tested what's in SP2, I had reason to file a couple of new bugs,
even if they were for less serious issues.
There are quite a few features that does not work with the SMO method.
If you have a CLR user-defined type, the transfer fails. Certificates
are not copied. To name a few.
Since Steve had problem recreating the issue from the production database
in his test environment, I don't think it is a good idea to use a method
that is known to distort the source. BACKUP/RESTORE is definitely the
way to go.
> You can restore over the existing database, that way keeping the name
> (or drop first the test database and then restore under the same name).
> Based on your security model, your administrator may need to map the
> database user and SQL Server login accounts (using the system stored
> procedure sp_change_users_login).
To clarify for Steve: this applies if you restore the database on a
different server. If you restore the database on the same server, this
should not be an issue.
Here is a cookbook on how to do it:
1) Run sp_helpdb on the source database. Make note of the logical
device names, those in the second column. I assume here that the
names are srcdb and srcdb_log.
2) Run sp_helpdb on test database, make note of the physical file names.
3) BACKUP DATABASE srcdb TO DISK = 'c:\whatever\srcdb.bak'
4) If needed transfer the file to the test server.
5) RESTORE DATABASE testdb FROM DISK = 'c:\whatever\srcdb.bak'
WITH MOVE 'srcdb' TO '<diskpath>.mdf',
MOVE 'srcdb_log' TO <diskpath>.ldf', REPLACE, STATS = 10
6) Clean up users with sp_change_users_login if needed.
The <diskpath> could be the current location of the test database, or
a new one. It seems like a good idea, to keep the existing test database
and restore copy of a production under a new name.
Once you have learnt how to this, you will find that this is a lot
easier and far less hassle than to run import/export. You get an exact
copy of the database, and not something approxamite.
--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se
Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodinfo/previousversions/books.mspx
Navigation:
[Reply to this message]
|