SqlServer修改数据库文件及日志文件存放位置

1. SqlServer修改数据库文件及日志文件存放位置

在Sql Server中,数据库文件和日志文件是存放在操作系统文件系统的某个位置上的,这个位置是在创建数据库时指定的。如果需要更改数据库文件和日志文件的存放位置,可以通过以下步骤完成。

1.1 首先获取当前数据库和日志文件存放位置

可以使用以下Sql语句获取指定数据库和日志文件的当前存放位置。

USE [master]

GO

SELECT [name], [physical_name]

FROM sys.master_files

WHERE [database_id] = DB_ID(N'YourDatabaseName')

说明:

1. 使用USE语句进入master数据库,因为master数据库存储了所有数据库的元数据信息。

2. 通过sys.master_files动态管理视图查询指定数据库的所有数据文件和日志文件。

3. 使用DB_ID函数获取指定数据库名对应的数据库ID。

1.2 停止指定数据库

在修改数据库和日志文件存放位置之前,需要先停止指定数据库的运行。

ALTER DATABASE YourDatabaseName

SET OFFLINE WITH ROLLBACK IMMEDIATE

说明:

1. 使用ALTER DATABASE语句,将指定的数据库设置为OFFLINE状态,用于终止该数据库的使用。

2. 使用WITH ROLLBACK IMMEDIATE选项,可以立即回滚所有未提交的事务,并终止与该数据库相关的所有用户连接。

1.3 移动数据库和日志文件至新位置

可以使用以下Sql语句将指定数据库的数据文件和日志文件移动到新的位置上。

ALTER DATABASE YourDatabaseName

MODIFY FILE (NAME = YourDataFileName, FILENAME = 'NewDataFilePath')

说明:

1. 使用ALTER DATABASE语句,修改指定数据库的文件属性。

2. 使用MODIFY FILE子句,指定要修改的数据或日志文件。

3. 使用NAME选项,指定要修改的文件名。

4. 使用FILENAME选项,指定该文件的新位置。

将上述Sql语句中的YourDataFileName和NewDataFilePath替换为实际的数据文件名和新的存放路径。

同样的,可以使用以下Sql语句将指定数据库的日志文件移动到新的位置上。

ALTER DATABASE YourDatabaseName

MODIFY FILE (NAME = YourLogFileName, FILENAME = 'NewLogFilePath')

说明:

1. 使用ALTER DATABASE语句,修改指定数据库的文件属性。

2. 使用MODIFY FILE子句,指定要修改的数据或日志文件。

3. 使用NAME选项,指定要修改的文件名。

4. 使用FILENAME选项,指定该文件的新位置。

将上述Sql语句中的YourLogFileName和NewLogFilePath替换为实际的日志文件名和新的存放路径。

1.4 启动指定数据库

完成数据库和日志文件移动后,需要将指定数据库重新启动。

ALTER DATABASE YourDatabaseName

SET ONLINE

说明:

1. 使用ALTER DATABASE语句,将指定的数据库设置为ONLINE状态,用于重新启动该数据库。

1.5 检查数据库和日志文件的新位置

可以使用第1步中提到的Sql语句,再次检查指定数据库和日志文件的当前存放位置,确认它们已经移动到了新的位置。

2. 示例:移动AdventureWorks数据库文件和日志文件

下面以Sql Server默认自带的示例数据库AdventureWorks为例,演示如何将该数据库的数据文件和日志文件移动到新的位置上。

2.1 获取当前文件存放位置

使用以下Sql语句获取AdventureWorks数据库的数据文件和日志文件的当前存放位置。

USE [master]

GO

SELECT [name], [physical_name]

FROM sys.master_files

WHERE [database_id] = DB_ID(N'AdventureWorks')

执行结果:

name | physical_name

-------------------

AdventureWorks_log | C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\AdventureWorks_Log.ldf

AdventureWorks | C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\AdventureWorks.mdf

从结果中可以看到,AdventureWorks数据库的数据文件和日志文件都存放在C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA目录下。

2.2 停止AdventureWorks数据库

使用以下Sql语句将AdventureWorks数据库设置为OFFLINE状态。

ALTER DATABASE AdventureWorks

SET OFFLINE WITH ROLLBACK IMMEDIATE

2.3 移动AdventureWorks数据库文件至新位置

假设我们将AdventureWorks数据库的数据文件移动到D:\Data目录下,可以使用以下Sql语句将数据文件移动到该目录。

ALTER DATABASE AdventureWorks

MODIFY FILE (NAME = AdventureWorks, FILENAME = 'D:\Data\AdventureWorks.mdf')

上述Sql语句将AdventureWorks.mdf文件的新路径设置为D:\Data\AdventureWorks.mdf。

2.4 移动AdventureWorks日志文件至新位置

假设我们将AdventureWorks数据库的日志文件移动到D:\Data目录下,可以使用以下Sql语句将日志文件移动到该目录。

ALTER DATABASE AdventureWorks

MODIFY FILE (NAME = AdventureWorks_log, FILENAME = 'D:\Data\AdventureWorks_Log.ldf')

上述Sql语句将AdventureWorks_Log.ldf文件的新路径设置为D:\Data\AdventureWorks_Log.ldf。

2.5 启动AdventureWorks数据库

使用以下Sql语句将AdventureWorks数据库设置为ONLINE状态。

ALTER DATABASE AdventureWorks

SET ONLINE

2.6 检查新文件存放位置

使用以下Sql语句再次检查AdventureWorks数据库的数据文件和日志文件的当前存放位置。

USE [master]

GO

SELECT [name], [physical_name]

FROM sys.master_files

WHERE [database_id] = DB_ID(N'AdventureWorks')

执行结果:

name | physical_name

-------------------

AdventureWorks_log | D:\Data\AdventureWorks_Log.ldf

AdventureWorks | D:\Data\AdventureWorks.mdf

从结果中可以看到,AdventureWorks数据库的数据文件和日志文件已经成功移动到了D:\Data目录下。

3. 总结

通过本文介绍的方法,可以快速、安全地修改SqlServer数据库和日志文件的存放位置。但是,在修改文件位置前需要备份数据库,以避免数据丢失。另外,在移动文件位置后,需要检查新文件位置是否正确,并恢复数据库的使用状态。

数据库标签