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

相关推荐
给朕把屎铲了3 小时前
涛思数据库:DB error: some vnode/qnode/mnode(s) out of service (10.703928s)
大数据·数据库·涛思数据
先做个垃圾出来………3 小时前
如何判断一个SQL逻辑是否需要拆分为多个事务单元
数据库·sql·oracle
嫂子的姐夫3 小时前
py连接MongoDB
数据库·爬虫·mongodb
suoyue_zhan3 小时前
GBase 8s V8.8 安装部署实践指南
前端·数据库·chrome
晨曦5432103 小时前
数据库视图:数据安全与查询利器
数据库·sql·mysql
漂亮的小碎步丶3 小时前
【3】Spring事务管理
java·数据库·spring
MACKEI3 小时前
数据库操作性能优化方法文档
数据库·性能优化
赤龙绕月3 小时前
SQLite NET
数据库·sqlite
方方怪4 小时前
数据库 SQL 语句大全
数据库·sql·oracle