SqlServer 数据库 分离复制备份然后附加回数据库 sql代码
2015-10-13 11:11
399 查看
工作中,我们经常需要把数据库进行分离,复制数据库到另一个地方,再将原数据库文件附加回数据库 。
当然通过鼠标操作的步骤比较麻烦:
1、 右键数据库 --------任务------分离
2、打开数据库文件所在目录,复制数据库
3、打开要复制到的目录进行粘贴
4、再回到数据库 右键 ----附加 ----选择路径 ……
懒人们实在受不了这样的操作^_^ 因此写下下面代码 偷懒用
DECLARE @DATABaseName VARCHAR(500)
DECLARE @DATABaseFile VARCHAR(500)
DECLARE @DATALogFile VARCHAR(500)
DECLARE @DATACopyPath VARCHAR(500)
DECLARE @CMD VARCHAR(500)
USE [XXHX030C] --要复制备份的数据库名称。多个数据库复制备份的话,每备份完一个数据库后,只用改此名称即可。
SET @DATACopyPath = 'D:\dataDB\' --要复制备份到的目录
SELECT @DATABaseName = DB_NAME()
SELECT @DATABaseFile = physical_name
FROM sys.database_files
WHERE physical_name LIKE'%.mdf%'
SELECT @DATALogFile = physical_name
FROM sys.database_files
WHERE physical_name LIKE'%.ldf%'
PRINT @DATABaseFile + ' ' + @DATALogFile
USE [master]
IF DB_ID('' + @DATABaseName + '') IS NOT NULL
SET @Cmd = (
'ALTER DATABASE ' + @DATABaseName +
' SET SINGLE_USER WITH ROLLBACK IMMEDIATE '
)
EXEC (@CMD)
EXEC sp_detach_db @DATABaseName
SET @CMD = (
'master.dbo.xp_cmdshell ''copy ' + @DATABaseFile + ' ' + @DATACopyPath +
'' + @DATABaseName + '.mdf'' '
)
PRINT @CMD
EXEC (@CMD)
SET @Cmd = (
'master.dbo.xp_cmdshell ''copy ' + @DATALogFile + ' ' + @DATACopyPath +
'' + @DATABaseName + '.ldf'' '
)
EXEC (@CMD)
IF DB_ID('' + @DATABaseName + '') IS NULL
SET @CMD = (
'CREATE DATABASE ' + @DATABaseName + ' ON (FILENAME = ''' + @DATABaseFile
+ ''') FOR ATTACH_REBUILD_LOG'
)
EXEC (@CMD)
当然通过鼠标操作的步骤比较麻烦:
1、 右键数据库 --------任务------分离
2、打开数据库文件所在目录,复制数据库
3、打开要复制到的目录进行粘贴
4、再回到数据库 右键 ----附加 ----选择路径 ……
懒人们实在受不了这样的操作^_^ 因此写下下面代码 偷懒用
DECLARE @DATABaseName VARCHAR(500)
DECLARE @DATABaseFile VARCHAR(500)
DECLARE @DATALogFile VARCHAR(500)
DECLARE @DATACopyPath VARCHAR(500)
DECLARE @CMD VARCHAR(500)
USE [XXHX030C] --要复制备份的数据库名称。多个数据库复制备份的话,每备份完一个数据库后,只用改此名称即可。
SET @DATACopyPath = 'D:\dataDB\' --要复制备份到的目录
SELECT @DATABaseName = DB_NAME()
SELECT @DATABaseFile = physical_name
FROM sys.database_files
WHERE physical_name LIKE'%.mdf%'
SELECT @DATALogFile = physical_name
FROM sys.database_files
WHERE physical_name LIKE'%.ldf%'
PRINT @DATABaseFile + ' ' + @DATALogFile
USE [master]
IF DB_ID('' + @DATABaseName + '') IS NOT NULL
SET @Cmd = (
'ALTER DATABASE ' + @DATABaseName +
' SET SINGLE_USER WITH ROLLBACK IMMEDIATE '
)
EXEC (@CMD)
EXEC sp_detach_db @DATABaseName
SET @CMD = (
'master.dbo.xp_cmdshell ''copy ' + @DATABaseFile + ' ' + @DATACopyPath +
'' + @DATABaseName + '.mdf'' '
)
PRINT @CMD
EXEC (@CMD)
SET @Cmd = (
'master.dbo.xp_cmdshell ''copy ' + @DATALogFile + ' ' + @DATACopyPath +
'' + @DATABaseName + '.ldf'' '
)
EXEC (@CMD)
IF DB_ID('' + @DATABaseName + '') IS NULL
SET @CMD = (
'CREATE DATABASE ' + @DATABaseName + ' ON (FILENAME = ''' + @DATABaseFile
+ ''') FOR ATTACH_REBUILD_LOG'
)
EXEC (@CMD)
相关文章推荐
- oracle 服务基本操作,启动,停止 故障处理
- mysql远程连接
- MongoDB-Replication Secondary Members
- POSTGRESQL HOT_STANDBY流复制环境搭建
- 如何配置oralce数据库的用户1权限
- 获取SQL SERVER数据库表结构
- 查询Sqlserver 表结构信息 SQL
- 2015重庆思庄携手Oracle University技术巡讲
- centos6上redis搭建配置
- oracle 第06章 数据字典
- 使用嵌套子查询优化hive的SQL
- [转]oracle10客户端PL/SQL Developer如何连接远程服务器上的oracle数据库
- MySQL用变量的方法添加伪序号列,MySql自增序列,序号列
- mysql主从复制Error_code: 1872
- 关于SQL Server将一列的多行内容拼接成一行的问题讨论
- MySQL____函数相关____ing
- 为什么密码要以MD5值存储在数据库
- Mysql 数据库之常用命令[更新中...]
- oracle存储过程
- Oracle如何编译BBED