DBA 运维 数据库 备份 还原 MSSQL

该文档详细说明了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

数据库优化-sqlserver表分区 实操

https://blog.csdn.net/cao919/article/details/119616082

相关推荐
IT瑞先生4 小时前
MariaDB与Mysql差异及版本对照
数据库·mysql·mariadb
草莓熊Lotso4 小时前
【Linux网络】深入理解Linux IO多路复用:从本质到select服务器实战
linux·运维·服务器·c语言·网络·数据库·c++
秋风渡.5 小时前
MySQL数据库操作
数据库·mysql
李燚5 小时前
LLM 可靠性设计:Retry + Failover 源码拆解(第58篇-E44)
数据库
乐橙开放平台5 小时前
养殖 SaaS 笔记:乐橙 IoT 物模型管环境,视频 OpenAPI 管回看
数据库·笔记·物联网·mysql·音视频
草莓熊Lotso5 小时前
【LangChain】输出解析器全解:让大模型输出从 “聊天” 变 “机器可读”
服务器·数据库·python·langchain·pip
GuWenyue6 小时前
放弃云端API!5套技术栈实战WebGPU端侧AI,前端独立跑本地大模型,省成本还保隐私
前端·数据库·人工智能
鸽芷咕7 小时前
MySQL/PostgreSQL 迁移金仓 KES:LEFT JOIN 丢数据排查与避坑指南
数据库·mysql·postgresql
2401_8414956417 小时前
【数据结构】B+树
数据结构·数据库·c++·b+树·概念·结构·操作原理