You are here: Re: SqlServer 2005: How *best* to copy one database to another « MsSQL Server « IT news, forums, messages
Re: SqlServer 2005: How *best* to copy one database to another

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]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация