Cry How to...
Move a database file
* Important *
Before attempting to move a database file please ensure that you
have a good backup to go back to should things go wrong.
The procedure for moving a database file varies depending on whether
you want to:
Move a database file
This procedure can be used for any database except 'tempdb' or
'master':
To move one or more database files for a given database:
- Consider backing up the database before you start, in case
anything goes wrong.
- Get a list of all the filenames for files currently used in the
database. Do this using:
Use MyDatabase
Go
Exec sp_helpfile
This step is essential - you can only successfully reattach the
database by specifying each and every file.
- Detach the database. This prevents others from using it while
the files are being moved. Do this using:
Exec sp_detach_db 'MyDatabase'
You will not be able to detach a database whilst it is in use.
- Move the database files to their new location, or rename them,
as appropriate to your needs.
- Reattach the database, explicitly specifying the full pathname
of every file that constitutes the database. This includes any files
that were not moved or renamed. For example:
Exec sp_attach_db 'MyDatabase',
'E:\MsSql7\NewHome\MyDatabase_Data.mdf',
'E:\MsSql7\NewHome\MyDatabase_Log.ldf'
Notes:
- '
sp_attach_db' can only be used with up to 16 files. If the
database has more than 16 files then instead use 'Create Database'
with the 'For Attach' clause.
- If the detached database was enabled for replication and is
attached to a DIFFERENT server then '
sp_removedbreplication' should
be run to remove replication from the database.
- Only members of the 'sysadmin' server role can execute '
sp_detach_db'
and 'sp_attach_db'.
Move master database files
Procedure to move the master database:
- Take a full backup that you are confident you can recover from,
incase anything goes wrong.
- Stop MS SQL Server.
- Move the files that constitute the master database to their new
location and/or rename them, as appropriate.
- Change the start-up parameters for SQL Server to reflect the
change.
- The easiest way to do this is to edit the parameters in the
registry, under:
| For SQL Server 2005 |
For SQL Server 7 |
HKEY_LOCAL_MACHINE
\SOFTWARE
\Microsoft
\Microsoft SQL Server
\MSSQL.1
\MSSQLServer
\Parameters
|
HKEY_LOCAL_MACHINE
\SOFTWARE
\Microsoft
\MSSQLServer
\MSSQLServer
\Parameters |
Typical parameters are for SQL Server 2005:
SQLArg0 -dC:\Program Files\Microsoft SQL
Server\MSSQL.1\MSSQL\DATA\master.mdf
SQLArg1 -eC:\Program Files\Microsoft SQL
Server\MSSQL.1\MSSQL\LOG\ERRORLOG
SQLArg2 -lC:\Program Files\Microsoft SQL
Server\MSSQL.1\MSSQL\DATA\mastlog.ldf
or for SQL Server 7:
SQLArg0 -dc:\MSSQL7\data\master.mdf
SQLArg1 -ec:\MSSQL7\log\ERRORLOG
SQLArg2 -lc:\MSSQL7\data\masterlog.ldf
- Restart MS SQL Server.
- Whilst it should be unnecessary, for confidence you may wish to
check the database:
dbcc checkdb (master) with no_infomsgs
Move temporary database files
To move a file that constitutes part of the temporary database use:
Alter database tempdb modify file
(name=<logical-name>, filename='<full-pathname>')
For example, to move the log file for tempdb:
Alter database tempdb modify file
(name=templog, filename='e:\mssql\data\templog.ldf')
or to move the data file for tempdb:
Alter database tempdb modify file
(name=tempdev, filename='e:\mssql\data\tempdb.mdf')
This change will take affect when the MS SQL Server is next
restarted.
These notes have been tested against SQL Server 2008, SQL Server 2005
Express and Server 7.
|