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

代码如下:

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

(0)

相关推荐

  • 自动定时备份sqlserver数据库的方法

    下面是我已经证实可用的自动备份的方法. 1.打开企业管理器->管理->sql server代理 2.新建一个作业,作业名称随便取,例如:data备份,所有者选择sa,当然你也可以选择其他用户,前提是该用户有执行作业的权限: 3.点击步骤标签,进入步骤面板.新建步骤,步骤名可以随便填写,如步骤1,类型和数据库默认,不需要修改.命令中写入以下语句: BACKUP DATABASE [数据库名] TO DISK = N'F:\\databack\\firenews备份' WITH NOINIT ,

  • sqlserver数据库导入数据操作详解(图)

    Microsoft SQL Server Management Studio是SQL SERVER的客户端工具,相信大家都知道.我不知道大伙使用导入数据的情况怎么样,反正我最近是遇到过.主要是因为没有远程数据库服务器的权限,而需要测试新修改的内容对旧数据的冲突.因为流程改变,免不了需要修改数据来适应新的变化.所以需要在测试环境里面去模拟真实环境的数据.当时还搞笑,直接是粘贴到EXCEL,然后再复制到数据库.对于一般来说,这种方式也可以,但是对于一些特殊的字符,如果直接粘贴到EXCEL里面的话,并

  • sqlserver数据库主键的生成方式小结(sqlserver,mysql)

    主键的生成方式主要有三种: 一. 数据库自动生成 二. GUID 三. 开发创建 严格讲这三种产生方式有一定的交叉点,其定位方式将在下面进行讲解. 第一种方式,主要将其定位在自增长的标识种子:可以设置起始数值,及增长步长.其优点在于使用时完全将并发任务交于数据库引擎管理,你不用担心存在多用户使用的时候会产生两个相同的ID的情况.其缺点也在于此,多数的数据库不提供直接获取标识ID的方式,对于开发人员来说产生ID的方式是透明的,开发人员几乎无法干预此项.对于数据的迁移也不是很方便. 由于存在上面的利

  • sqlserver数据库出现置疑的解决思路

    先备份数据库,再用下面的办法: 复制代码 代码如下: USE MASTER GO SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE GO ALTER DATABASE Database_Name SET EMERGENCY GO sp_dboption 'Database_Name', 'single user', 'true' GO DBCC CHECKDB('Database_Name','REPAIR_ALLOW_DATA_L

  • SQLSERVER数据库中的5173错误解决方法

    昨天同事给你我一个有问题的数据库,叫我修复一下因为客户那边需要这个数据库,这个数据库只有一个mdf文件和一个ldf文件, 当我附加数据库的时候报错,数据库是SQL2005 附上有损坏的数据库文件: 因为之前在论坛也遇到过,所以按照论坛的方法来解决,结果还是不行 把ldf文件移到别的地方,然后附加的时候使用下面SQL语句重建事务日志文件 我的数据库文件放在C:\Users\Administrator\Desktop\新建文件夹目录下 复制代码 代码如下: USE [master] GO CREAT

  • sqlserver数据库大型应用解决方案经验总结

    随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的问题. 一.负载均衡技术负载均衡集群是由一组相互独立的计算机系统构成,通过常规网络或专用网络进行连接,由路由器衔接在一起,各节点相互协作.共同负载.均衡压力,对客户端来说,整个群集可以视为一台具有超高性能的独立服务器. 1.实现原理实现数据库的负载均衡技术,首先要有一个可以控制连接数据库的控制端.在这里,它截

  • SQLSERVER数据库升级脚本图文步骤

    只能远程协助的方式.我特意做了一个脚本,用电话指导客户在SSMS里执行一下脚本就可以了 1.0的数据库跟1.1的数据库的区别是1.1的数据库里的其中一个[CT_OuterCard]表比1.0的多了6个字段,其他所有表都一样 还有存储过程增加了很多,其他都没有改变 首先,先在公司的服务器数据库上生成存储过程脚本,数据库是1.1版本的,下面的图片里没有说明的,都是默认设置,下一步即可 选中数据库->右键->任务->生成脚本 当然,如果你的数据库里有自定义函数的话,也可以勾选函数,如果我们的数

  • 将ACCESS数据库迁移到SQLSERVER数据库两种方法(图文详解)

    ACCESS2000文件 用ACCESS2007打开,并迁移到SQLSERVER2005里 打开ACCESS2007的数据库工具 方法一:使用ACCESS2007自带的数据库迁移工具 1.打开ACCESS2007的数据库迁移向导 2.点击SQLSERVER按钮,弹出升迁向导对话框 3.选择新建数据库 4.输入计算机名,我的本地计算机名字叫joe,因为SQLSERVER安装在本地,所以选择使用可信连接就可以了 数据库名称默认就可以了 5.选择所有表,移动到右边框 6.把表索引也一起升迁到SQLSE

  • 重命名SQLServer数据库的方法

    企业管理器中没有改数据库名的功能,如果一定要用企业管理器来实现,你可以备份数据库,然后还原,在还原时候可以指定另一个库名,然后再删除旧库就行了. 这里以 SQLServer 20000 为例,旧数据库名字为 Admin10000, 新数据库名字为 jb51.net. 第一步.备份数据库 打开企业管理器 -- 右键一个数据库 -- 所有任务 -- 备份数据库 -- 目的--备份到中选择添加 -- 输入一个备份的文件名(注意,如果原来有文件名,要删除它) -- 确定 第二步.还原数据库,并指定一个新

  • SQLSERVER数据库备份后无法还原的解决办法

    有时候完全备份, 当还原的时候说不时数据库文件不让还原, 解决办法: 可以直接复制数据库文件, xxx.mdf 和 xxx.ldf (实际复制过程中需要先停止sqlserver服务才可以) 用 sp_attach_db 存储过程 就能搞定. 示例 下面的示例将 pubs 中的两个文件附加到当前服务器. EXEC sp_attach_db @dbname = N'pubs', @filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Da

  • 将备份的SQLServer数据库转换为SQLite数据库操作方法

    操作方法:先要安装好SQLServer2005,并且记住安装时自己设置的用户名和密码.下面以恢复SQLServer下备份的数据库文件epdmdb20101008.bak为SQLite数据库为例来说明操作的步骤. ① 打开SQLServer2005,如下图所示: 在登陆界面输入登录名和密码,点"连接". 登录之后的界面如下: ② 新建一个数据库. 点左边导航栏的数据库,右键-新建数据库:如下图所示: 在弹出的新建数据库窗口中输入"数据库名称",点"添加&qu

随机推荐