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

相关推荐
一个有温度的技术博主5 分钟前
Redis系列七:Java客户端Jedis的入门
java·数据库·redis
枕布响丸辣7 分钟前
【无标题】
数据库·oracle
Cory.眼11 分钟前
MySQL语法错误与修正指南
数据库·sql·oracle
LSL666_18 分钟前
Redis值数据类型——sorted set
数据库·redis·缓存·数据类型
supericeice24 分钟前
GraphRAG 和 RAG 的区别:企业知识问答什么时候该升级到 GraphRAG
数据库·知识图谱·rag·graphrag
菜菜小狗的学习笔记24 分钟前
黑马程序员Redis--基础篇
数据库·redis·缓存
是桃萌萌鸭~26 分钟前
Oracle参数db_unique_name详解
数据库·sql·oracle·database
Binary-Jeff28 分钟前
MySQL MVCC 原理解析:Undo Log、ReadView 与版本可见性机制
java·数据库·后端·mysql·spring
bug远离Jemma28 分钟前
MySql基本使用命令记录
数据库·mysql·oracle
Leon-Ning Liu28 分钟前
SQL Server在ldf文件误删的情况下恢复数据库
数据库·sqlserver