Sqlserver——日常维护——使用T-sql语句对数据库进行分离、附加

先简单讲一下分离附加的概念

分离:将数据库物理文件和逻辑实体进行逻辑分离,所以当对数据库A进行分离操作的时候,A在逻辑层面就被删除了,所以在SSMS中不会出现,但是A的物理文件仍然存在(数据还在)。可以用于对A进行另外的附加

附加:将数据库物理文件和逻辑实体进行逻辑关联,和分离对应,通过对数据库的物理文件进行操作,可以将原来分离的数据库进行二次的附加。同时还可以用于数据库的迁移(类似备份还原,不过分离附加操作的是数据库的物理mdf文件)

下面是语句(PS:附带检查要分离数据库中是否有正在连接的进程,同步杀死进程,否则会提示“数据库正在被使用,无法分离的错误”)




--------------------------分离数据库

EXEC sys.sp_detach_db @dbname = 'DbName' --数据库的名称

--------------------------查询是否有连接数据库使用的进程,有的话杀死正在连接的进程

IF EXISTS(SELECT 1 FROM sys.sysprocesses WHERE DB_NAME(dbid)='DbName')
BEGIN

	DECLARE @Spid INT,@SQL NVARCHAR(MAX)

	DECLARE My_Cursor CURSOR READ_ONLY  FAST_FORWARD
	FOR SELECT spid FROM sys.sysprocesses WHERE DB_NAME(dbid)='DbName'
	OPEN My_Cursor
	FETCH NEXT FROM My_Cursor INTO @Spid

	WHILE @@FETCH_STATUS =0
	BEGIN
    
	SET @SQL ='KIll '+CONVERT(NVARCHAR(10),@Spid)
	
	EXEC sys.sp_executesql @SQL

	FETCH NEXT FROM My_Cursor INTO @Spid
	END
	CLOSE My_Cursor ;
	DEALLOCATE My_Cursor
    

END

--------------------------附加数据库

CREATE DATABASE DbName
ON (FILENAME = 'F:\数据库的备份\DbName.mdf')---mdf文件的路径
FOR ATTACH 

 

你可能感兴趣的:(Sqlserver,分离附加,数据库迁移)