该文档详细说明了SQL Server数据库的备份、恢复与重命名操作流程。首先通过修改实例名称实现数据库备份(原数据库→原数据库备份),然后创建新数据库实例并执行初始化脚本。接着将新数据库重命名为目标名称,完成替换操作。文档包含强制断开连接、设置单用户模式、修改实例网络名称等关键步骤,并提供了SQL脚本示例和操作说明。最后需重启服务使配置生效,并通过查询验证修改结果。整个过程确保数据库替换的安全性和完整性。
1.DB Backup.
Backup and rollback are supported by changing the instance name. Script: 要替换的原来的数据库_to_原来的数据库备份.sql
use master
go
alter database 要替换的原来的数据库
set Single_user
with rollback immediate;
go
exec sp_renamedb '要替换的原来的数据库','原来的数据库备份';
go
use master
go
alter database 原来的数据库备份
set Multi_user;
go
2. Create a new database instance named 初始化的数据库
3. Execute the database initialization script 初始化的数据库.sql
4. Use this new database renamed as below for DB.
InvitationQAinstall_to_要替换的原来的数据库.sql
use master
go
alter database 初始化的数据库
set Single_user
with rollback immediate;
go
exec sp_renamedb '初始化的数据库','要替换的原来的数据库';
go
use master
go
alter database 要替换的原来的数据库
set Multi_user;
go
--步骤 1:强制断开所有连接并切换单用户模式
-- 1. 查看当前所有活跃连接(可选,确认连接来源)
SELECT
session_id,
host_name,
program_name,
login_name,
status
FROM sys.dm_exec_sessions
WHERE status = 'running' AND session_id <> @@SPID; -- 排除当前执行脚本的会话
-- 2. 强制杀死所有非当前会话的连接(关键步骤)
DECLARE @KillSQL NVARCHAR(MAX) = '';
SELECT
@KillSQL += 'KILL ' + CAST(session_id AS VARCHAR(10)) + '; '
FROM sys.dm_exec_sessions
WHERE status = 'running'
AND session_id <> @@SPID -- 排除当前会话
AND session_id NOT IN (1,2,3,4); -- 排除系统会话(避免误杀)
EXEC sp_executesql @KillSQL;
PRINT '已强制断开所有活跃连接';
-- 3. 将实例设置为单用户模式(需重启生效,此处先执行配置,后续手动重启)
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'user instances enabled', 0; -- 禁用用户实例(避免冲突)
EXEC sp_configure 'single user', 1; -- 启用单用户模式
RECONFIGURE WITH OVERRIDE;
PRINT '单用户模式配置已生效,需重启 SQL Server 服务';
--步骤 2:重启 SQL Server 服务(使单用户模式生效)
--脚本执行后,需手动重启 SQL Server 服务(单用户模式需重启激活):
--打开「服务」(services.msc)。
--找到对应 SQL Server 实例的服务(如 SQL Server (MSSQLSERVER) 或 SQL Server (实例名))。
--右键「重启」,等待服务重启完成(重启后实例进入单用户模式,仅允许一个连接)。
--步骤 3:单用户模式下修改实例网络名称
-- 1. 确认当前实例名称(旧名称)
SELECT @@SERVERNAME AS 旧实例名称;
-- 2. 删除旧的服务器名称记录
IF EXISTS (SELECT 1 FROM sys.servers WHERE name = @@SERVERNAME)
BEGIN
EXEC sp_dropserver @@SERVERNAME;
PRINT '已删除旧实例名称记录';
END
-- 3. 添加新的服务器名称(替换为你的目标实例名)
DECLARE @新实例名 NVARCHAR(128) = '新实例名称'; -- 例如:'SQLSERVER2025'
EXEC sp_addserver @新实例名, 'local';
PRINT '已添加新实例名称:' + @新实例名;
-- 4. 验证修改(需重启服务后生效,此处仅确认配置)
SELECT name AS 新实例名称 FROM sys.servers WHERE is_local = 1;
--步骤 4:退出单用户模式并重启服务
-- 1. 关闭单用户模式,恢复多用户模式
EXEC sp_configure 'single user', 0;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE WITH OVERRIDE;
PRINT '已退出单用户模式,恢复多用户模式';
--步骤 5:验证修改结果
SELECT @@SERVERNAME AS 当前实例名称; -- 应显示新实例名
SELECT name FROM sys.servers WHERE is_local = 1; -- 应显示新实例名
其他
SQL 大数据查询如何进行优化?sqlserver和oracle整理
https://blog.csdn.net/cao919/article/details/68485289
DBA mssql 解决排序规则冲突 QA prod 和开发配置都是一样的服务器排序规则 为啥开发环境的的存储过程需要 加这个COLLATE Chinese_PRC_CI_AS
https://blog.csdn.net/cao919/article/details/155199415
MYSQL与MSSQL的区别及优劣比较
https://blog.csdn.net/cao919/article/details/142319868
SQL server 文件占用硬盘过大 日志 读写分离同步文件过大清理 DBCC收缩数据库 分发数据库distribution收缩
https://blog.csdn.net/cao919/article/details/131999181
DB SQL server应用 with 查询歌手歌曲总量大于13首,且浏览量大于100的曲目报表。
https://blog.csdn.net/cao919/article/details/126791781