SQL Server 可更新订阅的发布和订阅的数据库文件迁移

--	SQL Server 可更新订阅的发布和订阅的数据库迁移

/*=======================================================================================================

*******************************************【发布服务器数据文件迁移】************************************

========================================================================================================*/

USE master 
GO

/*【1. 查看文件路径】*/
SELECT file_id,name,type_desc,physical_name,state_desc FROM sys.master_files WHERE database_id = DB_ID('dbName'); 

/*【2. 手动停止[sqlserver代理],不要停止sqlserver服务!】*/

/*【3. 打开[复制监视器]查看复制相关代理是否停止】*/

/*【4. 设置数据库为单用户模式】*/
ALTER DATABASE dbName SET SINGLE_USER --WITH ROLLBACK IMMEDIATE
GO

/*【5. 数据库脱机】*/
ALTER DATABASE dbName SET OFFLINE 
GO

/*【6. 更改数据库逻辑文件名对应的物理文件名位置!】*/
ALTER DATABASE dbName MODIFY FILE ( NAME = dbName, FILENAME = "E:\DataBase\dbName\dbName.mdf")		--new path
ALTER DATABASE dbName MODIFY FILE ( NAME = dbName_log, FILENAME = "E:\DataBase\dbName\dbName_log.ldf")	--new path


/*【7.移动mdf和ldf文件到新的位置】*/
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

EXEC master..xp_cmdshell 'MOVE D:\DataBase\dbName\dbName.mdf  E:\DataBase\dbName\'		--move to a new path
EXEC master..xp_cmdshell 'MOVE D:\DataBase\dbName\dbName_log.ldf  E:\DataBase\dbName\'	--move to a new path
GO
/*
EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE;
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;
*/


<pre code_snippet_id="463183" snippet_file_name="blog_20140903_1_2705579" name="code" class="sql">/*【8. 数据库联机】*/
ALTER DATABASE dbName SET ONLINE 
GO


/*【9. 设置数据库为多用户模式】*/
ALTER DATABASE dbName SET MULTI_USERGO--注意:先不要启动发布数据库上的代理!等待订阅数据库迁移完成后在启动发布服务器的代理!!!

/*【10. 手动开启[sqlserver代理]】*/

/*【11 完成!打开[复制监视器]查看复制相关代理是否开启,网页上测试】*/
/*=======================================================================================================
**********************************************【订阅数据文件迁移】*****************************************
========================================================================================================*/
/*手动停止[sqlserver代理],不要停止sqlserver服务!*/
SELECT file_id,name,type_desc,physical_name,state_desc FROM sys.master_files WHERE database_id = DB_ID('subDB'); 

ALTER DATABASE subDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE subDB SET OFFLINE 
GO
ALTER DATABASE subDB MODIFY FILE ( NAME = subDB, FILENAME = "E:\DataBase\subDB\subDB.mdf") 
ALTER DATABASE subDB MODIFY FILE ( NAME = subDB_log, FILENAME = "E:\Database\subDB\subDB_log.ldf") 
GO
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
EXEC master..xp_cmdshell 'MOVE D:\DataBase\subDB\subDB.mdf E:\DataBase\subDB\'
EXEC master..xp_cmdshell 'MOVE D:\DataBase\subDB\subDB_log.ldf E:\DataBase\subDB\'
/*
EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE;
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE;
*/

ALTER DATABASE subDB SET MULTI_USER
GO
ALTER DATABASE subDB SET ONLINE 
GO

-- 启动 [sqlserver代理]


DECLARE @Database NVARCHAR(100)
DECLARE @PhysicalPath NVARCHAR(100)

SET @Database = N'mydb'
SET @PhysicalPath = N'E:\DataBase\'

SET @PhysicalPath = CASE WHEN RIGHT(@PhysicalPath,1)<>'\' THEN @PhysicalPath+'\' ELSE @PhysicalPath END

SELECT 'ALTER DATABASE Platform MODIFY FILE ( NAME = "'+name+'", FILENAME = "'+@PhysicalPath
	+REVERSE(LEFT(REVERSE(physical_name),CHARINDEX('\',REVERSE(physical_name))-1))+'")'
FROM sys.master_files WHERE database_id = DB_ID(@Database); 

SELECT 'EXEC master..xp_cmdshell ''MOVE "'+physical_name+'" '+@PhysicalPath+''''
FROM sys.master_files WHERE database_id = DB_ID(@Database); 




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值