sqlserver数据库移动数据库路径的脚本示例

      前段时间做过这么一件事情,把原本放在c盘的所有数据库(除了sql server系统文件外)文件Move到D盘,主要是为了方便后续管理以及减少磁盘I/O阻塞(C,D是2个独立磁盘)。脚本需输入2个参数:目标数据库名字和目标目录

 
代码如下:
USE master
GO
 
DECLARE
    @DBName sysname,
    @DestPath varchar(256)
DECLARE @DB table(
    name sysname,
    physical_name sysname)
 
 
BEGIN TRY
 
SELECT
    @DBName = 'TargetDatabaseName',   --input database name
    @DestPath = 'D:SqlData'         --input destination path
 
 
-- kill database processes
DECLARE @SPID varchar(20)
DECLARE curProcess CURSOR FOR
 
SELECT spid
FROM sys.sysprocesses
WHERE DB_NAME(dbid) = @DBName
 
OPEN curProcess
    FETCH NEXT FROM curProcess INTO @SPID
    WHILE @@FETCH_STATUS = 0
    BEGIN
            EXEC('KILL ' + @SPID)
            FETCH NEXT FROM curProcess
    END
CLOSE curProcess
DEALLOCATE curProcess
 
-- query physical name
INSERT @DB(
    name,
    physical_name)
SELECT
    A.name,
    A.physical_name
FROM sys.master_files A
INNER JOIN sys.databases B
    ON A.database_id = B.database_id
        AND B.name = @DBName
WHERE A.type <=1
 
--set offline
EXEC('ALTER DATABASE ' + @DBName + ' SET OFFLINE')
 
--move to dest path
DECLARE
    @login_name sysname,
    @physical_name sysname,
    @temp_name varchar(256)
DECLARE curMove CURSOR FOR
SELECT
    name,
    physical_name
FROM @DB
OPEN curMove
    FETCH NEXT FROM curMove INTO @login_name,@physical_name
        WHILE @@FETCH_STATUS = 0
        BEGIN
            SET @temp_name = RIGHT(@physical_name,CHARINDEX('',REVERSE(@physical_name)) - 1)
            EXEC('exec xp_cmdshell ''move "' + @physical_name + '" "' + @DestPath + '"''')
            EXEC('ALTER DATABASE ' + @DBName + ' MODIFY FILE ( NAME = ' + @login_name
                    + ', FILENAME = ''' + @DestPath + @temp_name + ''')')
            FETCH NEXT FROM curMove INTO @login_name,@physical_name
        END
CLOSE curMove
DEALLOCATE curMove
 
-- set online
EXEC('ALTER DATABASE ' + @DBName + ' SET ONLINE')
 
-- show result
SELECT
    A.name,
    A.physical_name
FROM sys.master_files A
INNER JOIN sys.databases B
    ON A.database_id = B.database_id
        AND B.name = @DBName
END TRY
BEGIN CATCH
    SELECT ERROR_MESSAGE() AS ErrorMessage
END CATCH
GO
 
 

时间: 2024-08-30 02:15:47

sqlserver数据库移动数据库路径的脚本示例的相关文章

sqlserver数据库移动数据库路径的脚本示例_MsSql

复制代码 代码如下: USE masterGO DECLARE    @DBName sysname,    @DestPath varchar(256)DECLARE @DB table(    name sysname,    physical_name sysname) BEGIN TRY SELECT    @DBName = 'TargetDatabaseName',   --input database name    @DestPath = 'D:\SqlData\'       

MS SQLServer 批量附加数据库

************************************************************ * 标题:MS SQLServer 批量附加数据库 * 说明:请根据下面的注释使用此脚本 * 时间: 2015/7/13 11:16:41 ************************************************************/ USE MASTER GO IF OBJECT_ID('[sp_AttchDataBase]') IS NOT N

SqlServer定时备份数据库和定时杀死数据库死锁解决

原文:SqlServer定时备份数据库和定时杀死数据库死锁解决 上周五组长更我说了一句要杀死数据库的死锁进程,因为自己对数据库不是很熟悉,突然组长说了我也就决定一定要倒腾一下,不然自己怎么提高呢?现在不研究,说不定下次还是要研究呢,倒腾出来了就可以在下次用到了,后来组长又补了一句:"还有定是备份数据库的问题要解决",说干就干. PS:Sqlserver 2008 R2,windows 8 64位 1.备份数据库  因为要备份,我们就要用到Sqlserver的代理,默认数据库的代理是不开

详解SQLServer 2008 R2数据库SSAS建模及扩展能力_mssql2008

SQLServer 2008 R2数据库中提供的SSAS建模工具包括包括SQL Server Management Studio 和Business Intelligence Development Studio,那么建模的过程是怎样的呢?本文我们就来介绍这些,接下来就让我们来一起了解一下SQLServer 2008 R2数据库的建模工具和关键过程以及数据挖掘.权限和访问接口等的知识吧. 建模工具和关键过程 SSAS的建模的目的是设计多维数据库对象,建模的工具包括SQL Server Manag

.NET数据库编程求索之路--2.示例系统概览与设计(2)

2  示例系统概览与设计(2) 2.4  设计界面 我们先创建一个界面原型系统,为后续具体功能的编程实现打下一个基础.启动Visual Studio 2010,单击[文件]→[新建项目],在"新建项目"对话框中(图2-6),选择"Windows窗体应用程序",输入项目名称 "HomeShop.WinForm",位置"D:\",解决方案名称"HomeShop",然后单击[确定].系统在D盘根目录下创建了&qu

ASP.NET连接MySql数据库的2个方法及示例

 这篇文章主要介绍了ASP.NET连接MySql数据库的2个方法及示例,使用的是MySQL官方组件和ODBC.NET,需要的朋友可以参考下 方法一: 使用MySQL官方组件 使用MySQL推出的 MySQL Connector/Net 组件, 该组件是MySQL为ADO.NET访问MySQL数据库设计的.NET专用访问组件.完成该组件后,需要在项目中引用这个组件,也可以直接在配置文件的< assemblies>节点内添加下面的节点:      代码如下:<add assembly=&qu

asp.net读取数据库图片的路径,然后显示到页面如何做?

问题描述 asp.net读取数据库图片的路径,然后显示到页面如何做?情况是这样的,用户通过上传图片到服务器,图片存储在一个文件夹,数据库只存储图片的路径,如何读取图片的路径,然后显示在页面.主要是页面哪里不知道如何获取并显示,高手给个案例或者教程啊 解决方案 解决方案二:引用楼主my328420969的回复: asp.net读取数据库图片的路径,然后显示到页面如何做?情况是这样的,用户通过上传图片到服务器,图片存储在一个文件夹,数据库只存储图片的路径,如何读取图片的路径,然后显示在页面.主要是页

sqlserver-同样SQL语句使用SQLserver跟access数据库,SQLserver可以进行增删改,而access不能

问题描述 同样SQL语句使用SQLserver跟access数据库,SQLserver可以进行增删改,而access不能 同样的SQL语句,在一SQL server做后台数据库可以实现增删改,而使用access数据库就无法实现,在未关闭自己写的程序,再次查询时,使用access数据库可以再程序中看到增删改的效果,只是在access数据库内就没有数据改动.咋么回事? 解决方案 你看连接字符串,程序操作的access文件和你打开的不是用一个文件

请问有人知道qt中的QSQLITE创建的数据库和数据库表的存放路径在哪里吗?

问题描述 请问有人知道qt中的QSQLITE创建的数据库和数据库表的存放路径在哪里吗? 我想删掉重新建立数据库,还有就是有什么好的命令可以直接删除表呢?最好有代码谢谢啦 解决方案 可以用drop table,drop database来删除表,数据库