1. 首页 > SQLServer教程 > 正文

SQLServer教程FG077-SQLServer多环境管理实战

本文档风哥主要介绍SQLServer数据库多环境管理相关知识,包括SQLServer数据库多环境规划、SQLServer数据库多环境搭建、SQLServer数据库多环境同步、SQLServer数据库多环境监控等内容,风哥教程参考SQLServer官方文档多环境管理内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 SQLServer数据库多环境管理概念

SQLServer数据库多环境管理是指在软件开发和运维过程中,为不同阶段的工作(如开发、测试、预生产、生产)创建和维护多个独立的数据库环境,确保软件在不同环境中能够稳定运行,同时保证数据安全和一致性。多环境管理可以帮助团队更有效地开发、测试和部署应用程序,减少生产环境的风险。更多视频教程www.fgedu.net.cn

SQLServer数据库多环境管理的目标:

  • 隔离不同环境的影响
  • 确保环境间的一致性
  • 提高开发和测试效率
  • 降低生产环境风险
  • 简化部署和回滚流程

1.2 SQLServer数据库多环境类型

# 常见的SQLServer数据库环境类型

1. 开发环境 (Development)
– 用于开发人员编写和测试代码
– 数据量较小,配置较低
– 频繁变更,稳定性要求低
– 通常为本地或小型服务器

2. 测试环境 (Testing)
– 用于测试人员进行功能测试
– 数据量适中,配置与生产环境接近
– 定期刷新,稳定性要求中等
– 通常为专用测试服务器

3. 预生产环境 (Staging)
– 用于最终验证和性能测试
– 数据量与生产环境一致,配置与生产环境相同
– 稳定性要求高,接近生产环境
– 通常为与生产环境配置相同的服务器

4. 生产环境 (Production)
– 用于实际业务运行
– 数据量最大,配置最高
– 稳定性要求极高,不允许随意变更
– 通常为高性能服务器集群

5. 灾备环境 (Disaster Recovery)
– 用于灾难恢复
– 数据与生产环境同步,配置与生产环境相同
– 稳定性要求高,平时处于待机状态
– 通常为异地备份服务器

# 环境层级关系

开发环境 → 测试环境 → 预生产环境 → 生产环境

1.3 SQLServer数据库多环境管理挑战

SQLServer数据库多环境管理面临的挑战:

  • 环境差异:不同环境的硬件、软件配置差异导致的问题
  • 数据同步:如何在不同环境间保持数据的一致性和安全性
  • 配置管理:如何管理和同步不同环境的数据库配置
  • 权限管理:如何控制不同环境的访问权限
  • 版本控制:如何管理数据库架构和脚本的版本
  • 自动化:如何实现环境部署和管理的自动化
风哥提示:多环境管理的核心是确保环境间的一致性,同时隔离不同环境的影响。建议建立标准化的环境管理流程和工具链。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 SQLServer数据库多环境规划

SQLServer数据库多环境规划要点:

# 多环境规划步骤

1. 环境需求分析
– 识别项目所需的环境类型
– 确定每个环境的资源需求
– 分析环境间的依赖关系

2. 环境架构设计
– 网络架构:VLAN隔离、防火墙规则
– 服务器架构:物理服务器或虚拟机
– 存储架构:本地存储或网络存储
– 高可用架构:集群、镜像或复制

3. 资源规划
– 服务器配置:CPU、内存、存储
– 网络带宽:内部网络、外部网络
– 数据库实例:单实例或多实例
– 备份空间:本地备份、异地备份

4. 安全规划
– 网络安全:防火墙、VPN
– 数据安全:加密、脱敏
– 访问控制:RBAC、最小权限
– 审计监控:日志、告警

5. 自动化规划
– 部署自动化:脚本、工具
– 配置管理:版本控制、变更管理
– 监控自动化:监控工具、告警机制
– 备份恢复:自动化备份、灾难恢复

# 环境配置参考

环境类型 CPU 内存 存储 数据库实例 高可用
——————————————————–
开发环境 4核 16GB 500GB 1-2个 无
测试环境 8核 32GB 1TB 2-4个 可选
预生产环境 16核 64GB 2TB 4-8个 必需
生产环境 32核 128GB 4TB+ 8-16个 必需
灾备环境 16核 64GB 2TB 4-8个 必需

2.2 SQLServer数据库多环境标准

SQLServer数据库多环境标准建议:

# 环境命名标准

环境类型 前缀 示例
————————–
开发环境 dev dev-fgedu-sql01
测试环境 test test-fgedu-sql01
预生产环境 stage stage-fgedu-sql01
生产环境 prod prod-fgedu-sql01
灾备环境 dr dr-fgedu-sql01

# 数据库命名标准

环境类型 前缀 示例
————————–
开发环境 dev_ dev_fgedudb
测试环境 test_ test_fgedudb
预生产环境 stage_ stage_fgedudb
生产环境 prod_ prod_fgedudb

# 账号命名标准

环境类型 前缀 示例
————————–
开发环境 dev_ dev_fgedu
测试环境 test_ test_fgedu
预生产环境 stage_ stage_fgedu
生产环境 prod_ prod_fgedu

# 配置文件命名标准

环境类型 后缀 示例
————————–
开发环境 .dev appsettings.dev.json
测试环境 .test appsettings.test.json
预生产环境 .stage appsettings.stage.json
生产环境 .prod appsettings.prod.json

2.3 SQLServer数据库多环境管理工具

SQLServer数据库多环境管理工具推荐:

  • SQL Server Management Studio (SSMS):数据库管理和维护工具
  • SQL Server Data Tools (SSDT):数据库项目开发和部署工具
  • Redgate SQL Compare:数据库架构比较和同步工具
  • Redgate SQL Data Compare:数据库数据比较和同步工具
  • Octopus Deploy:应用部署和环境管理工具
  • Jenkins:持续集成和持续部署工具
  • Powershell:自动化脚本和任务执行工具
  • Azure DevOps:开发、测试和部署管理平台
生产环境建议:选择适合团队规模和技术栈的工具,建立标准化的工具链,提高环境管理效率。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 SQLServer数据库多环境搭建

3.1.1 SQLServer数据库开发环境搭建

# 开发环境搭建步骤

# 1. 服务器准备
# 检查服务器配置
Get-WmiObject -Class Win32_ComputerSystem | Select-Object Name, NumberOfProcessors, TotalPhysicalMemory
GO

Name NumberOfProcessors TotalPhysicalMemory
—- —————— ——————-
dev-fgedu-sql01 4 17179869184

# 2. 安装SQLServer
# 下载SQLServer安装包
Invoke-WebRequest -Uri “https://go.microsoft.com/fwlink/?linkid=2215158” -OutFile “SQLServer2019-DEV.exe”

# 运行安装程序
Start-Process -FilePath “.\SQLServer2019-DEV.exe” -ArgumentList “/ACTION=Install /FEATURES=SQL /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT=”NT Service\MSSQLSERVER” /SQLSYSADMINACCOUNTS=”BUILTIN\Administrators” /AGTSVCACCOUNT=”NT Service\SQLAgent$MSSQLSERVER” /IACCEPTSQLSERVERLICENSETERMS”

# 3. 配置开发环境
# 创建开发数据库
sqlcmd -S localhost -U sa -P “Fgedu@2026#Dev” -Q “CREATE DATABASE dev_fgedudb”
GO

# 创建开发用户
sqlcmd -S localhost -U sa -P “Fgedu@2026#Dev” -Q “CREATE LOGIN dev_fgedu WITH PASSWORD=’Fgedu@2026#Dev’, DEFAULT_DATABASE=dev_fgedudb”
GO

# 授予权限
sqlcmd -S localhost -U sa -P “Fgedu@2026#Dev” -Q “USE dev_fgedudb; CREATE USER dev_fgedu FOR LOGIN dev_fgedu; ALTER ROLE db_owner ADD MEMBER dev_fgedu”
GO

# 4. 配置连接字符串
# 开发环境连接字符串
Server=dev-fgedu-sql01;Database=dev_fgedudb;User ID=dev_fgedu;Password=Fgedu@2026#Dev;TrustServerCertificate=True;

# 5. 验证环境
# 连接测试
sqlcmd -S dev-fgedu-sql01 -U dev_fgedu -P “Fgedu@2026#Dev” -Q “SELECT @@SERVERNAME, DB_NAME()”
GO

———————— ————
dev-fgedu-sql01 dev_fgedudb

(1 rows affected)

3.1.2 SQLServer数据库测试环境搭建

# 测试环境搭建步骤

# 1. 服务器准备
# 检查服务器配置
Get-WmiObject -Class Win32_ComputerSystem | Select-Object Name, NumberOfProcessors, TotalPhysicalMemory
GO

Name NumberOfProcessors TotalPhysicalMemory
—- —————— ——————-
test-fgedu-sql01 8 34359738368

# 2. 安装SQLServer
# 下载SQLServer安装包
Invoke-WebRequest -Uri “https://go.microsoft.com/fwlink/?linkid=2215158” -OutFile “SQLServer2019-ENT.exe”

# 运行安装程序
Start-Process -FilePath “.\SQLServer2019-ENT.exe” -ArgumentList “/ACTION=Install /FEATURES=SQL,AS,RS /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT=”NT Service\MSSQLSERVER” /SQLSYSADMINACCOUNTS=”BUILTIN\Administrators” /AGTSVCACCOUNT=”NT Service\SQLAgent$MSSQLSERVER” /IACCEPTSQLSERVERLICENSETERMS”

# 3. 配置测试环境
# 创建测试数据库
sqlcmd -S localhost -U sa -P “Fgedu@2026#Test” -Q “CREATE DATABASE test_fgedudb”
GO

# 创建测试用户
sqlcmd -S localhost -U sa -P “Fgedu@2026#Test” -Q “CREATE LOGIN test_fgedu WITH PASSWORD=’Fgedu@2026#Test’, DEFAULT_DATABASE=test_fgedudb”
GO

# 授予权限
sqlcmd -S localhost -U sa -P “Fgedu@2026#Test” -Q “USE test_fgedudb; CREATE USER test_fgedu FOR LOGIN test_fgedu; ALTER ROLE db_owner ADD MEMBER test_fgedu”
GO

# 4. 配置连接字符串
# 测试环境连接字符串
Server=test-fgedu-sql01;Database=test_fgedudb;User ID=test_fgedu;Password=Fgedu@2026#Test;TrustServerCertificate=True;

# 5. 验证环境
# 连接测试
sqlcmd -S test-fgedu-sql01 -U test_fgedu -P “Fgedu@2026#Test” -Q “SELECT @@SERVERNAME, DB_NAME()”
GO

———————— ————
test-fgedu-sql01 test_fgedudb

(1 rows affected)

3.2 SQLServer数据库多环境同步

3.2.1 SQLServer数据库架构同步

# 使用SSDT同步数据库架构

# 1. 创建数据库项目
# 在Visual Studio中创建SQL Server数据库项目

# 2. 导入开发环境架构
# 右键项目 → 导入 → 数据库
# 连接到dev_fgedu-sql01/dev_fgedudb
# 导入架构到项目中

# 3. 同步到测试环境
# 右键项目 → 发布
# 连接到test-fgedu-sql01/test_fgedudb
# 生成发布脚本并执行

# 4. 验证同步结果
# 比较两个环境的架构
sqlcmd -S dev-fgedu-sql01 -U dev_fgedu -P “Fgedu@2026#Dev” -Q “SELECT name FROM sys.tables ORDER BY name”
GO

name
————————–
dev_fgedu_test

(1 rows affected)

sqlcmd -S test-fgedu-sql01 -U test_fgedu -P “Fgedu@2026#Test” -Q “SELECT name FROM sys.tables ORDER BY name”
GO

name
————————–
dev_fgedu_test

(1 rows affected)

# 使用PowerShell脚本同步架构
# 创建同步脚本
$sourceServer = “dev-fgedu-sql01”
$sourceDatabase = “dev_fgedudb”
$targetServer = “test-fgedu-sql01”
$targetDatabase = “test_fgedudb”
$sourceUser = “dev_fgedu”
$sourcePassword = “Fgedu@2026#Dev”
$targetUser = “test_fgedu”
$targetPassword = “Fgedu@2026#Test”

# 生成架构脚本
$schemaScript = “C:\Scripts\schema_sync.sql”
sqlcmd -S $sourceServer -U $sourceUser -P $sourcePassword -d $sourceDatabase -Q “SELECT ‘USE ‘ + QUOTENAME(DB_NAME())” -o $schemaScript
sqlcmd -S $sourceServer -U $sourceUser -P $sourcePassword -d $sourceDatabase -Q “SELECT definition FROM sys.sql_modules WHERE object_id IN (SELECT object_id FROM sys.objects WHERE type IN (‘P’, ‘V’, ‘FN’, ‘IF’, ‘TF’))” -o $schemaScript -a 32767 -h -1 -s “”

# 执行架构脚本
sqlcmd -S $targetServer -U $targetUser -P $targetPassword -d $targetDatabase -i $schemaScript

3.2.2 SQLServer数据库数据同步

# 使用SQL Data Compare同步数据

# 1. 配置数据源
# 源数据库:dev_fgedu-sql01/dev_fgedudb
# 目标数据库:test-fgedu-sql01/test_fgedudb

# 2. 选择要同步的表
# 选择需要同步的表和数据

# 3. 生成同步脚本
# 生成数据同步脚本

# 4. 执行同步
# 执行数据同步脚本

# 使用PowerShell脚本同步数据
# 创建数据同步脚本
$sourceServer = “dev-fgedu-sql01”
$sourceDatabase = “dev_fgedudb”
$targetServer = “test-fgedu-sql01”
$targetDatabase = “test_fgedudb”
$sourceUser = “dev_fgedu”
$sourcePassword = “Fgedu@2026#Dev”
$targetUser = “test_fgedu”
$targetPassword = “Fgedu@2026#Test”

# 生成数据同步脚本
$tables = @(“dev_fgedu_test”)
foreach ($table in $tables) {
$dataScript = “C:\Scripts\data_sync_$table.sql”
sqlcmd -S $sourceServer -U $sourceUser -P $sourcePassword -d $sourceDatabase -Q “SELECT ‘DELETE FROM $table;'” -o $dataScript
sqlcmd -S $sourceServer -U $sourceUser -P $sourcePassword -d $sourceDatabase -Q “SELECT ‘INSERT INTO $table (name, create_time) VALUES (”’ + name + ”’, ”’ + CONVERT(varchar, create_time, 120) + ”’);’ FROM $table” -o $dataScript -a 32767 -h -1 -s “”
sqlcmd -S $targetServer -U $targetUser -P $targetPassword -d $targetDatabase -i $dataScript
}

# 验证数据同步
sqlcmd -S dev-fgedu-sql01 -U dev_fgedu -P “Fgedu@2026#Dev” -Q “SELECT * FROM dev_fgedu_test”
GO

id name create_time
———– ———- ———————–
1 测试数据1 2026-04-08 10:30:00.000
2 测试数据2 2026-04-08 10:30:00.000

(2 rows affected)

sqlcmd -S test-fgedu-sql01 -U test_fgedu -P “Fgedu@2026#Test” -Q “SELECT * FROM dev_fgedu_test”
GO

id name create_time
———– ———- ———————–
1 测试数据1 2026-04-08 10:30:00.000
2 测试数据2 2026-04-08 10:30:00.000

(2 rows affected)

3.3 SQLServer数据库多环境监控

3.3.1 SQLServer数据库多环境监控配置

# 配置SQL Server Agent作业进行监控

# 1. 创建监控作业
# 在开发环境创建监控作业
USE [msdb]
GO
EXEC dbo.sp_add_job
@job_name = N’Monitor_Dev_Environment’,
@enabled = 1,
@description = N’Monitor development environment’
GO

# 添加作业步骤
EXEC dbo.sp_add_jobstep
@job_name = N’Monitor_Dev_Environment’,
@step_name = N’Check Database Status’,
@subsystem = N’TSQL’,
@command = N’EXEC dbo.CheckDatabaseStatus’,
@database_name = N’dev_fgedudb’
GO

# 添加调度
EXEC dbo.sp_add_jobschedule
@job_name = N’Monitor_Dev_Environment’,
@name = N’Hourly Schedule’,
@freq_type = 4,
@freq_interval = 1,
@freq_subday_type = 8,
@freq_subday_interval = 1
GO

# 2. 创建监控存储过程
USE [dev_fgedudb]
GO
CREATE PROCEDURE dbo.CheckDatabaseStatus
AS
BEGIN
SET NOCOUNT ON;

— 检查数据库状态
SELECT
name,
state_desc,
recovery_model_desc,
log_reuse_wait_desc
FROM sys.databases;

— 检查连接数
SELECT
COUNT(*) AS connection_count
FROM sys.dm_exec_sessions
WHERE is_user_process = 1;

— 检查阻塞
SELECT
session_id,
blocking_session_id,
wait_type,
wait_time
FROM sys.dm_exec_requests
WHERE blocking_session_id > 0;
END
GO

# 3. 配置邮件告警
# 启用数据库邮件
EXEC sp_configure ‘show advanced options’, 1;
RECONFIGURE;
EXEC sp_configure ‘Database Mail XPs’, 1;
RECONFIGURE;

# 创建邮件配置文件
EXEC msdb.dbo.sysmail_add_profile_sp
@profile_name = ‘SQL Server Alert Profile’,
@description = ‘Profile for SQL Server alerts’;

# 创建邮件账户
EXEC msdb.dbo.sysmail_add_account_sp
@account_name = ‘SQL Server Alert Account’,
@email_address = ‘alerts@fgedu.net.cn’,
@mailserver_name = ‘smtp.fgedu.net.cn’;

# 关联邮件账户和配置文件
EXEC msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = ‘SQL Server Alert Profile’,
@account_name = ‘SQL Server Alert Account’,
@sequence_number = 1;

# 4. 配置告警作业
USE [msdb]
GO
EXEC dbo.sp_add_alert
@name = N’Database Status Alert’,
@message_id = 0,
@severity = 16,
@enabled = 1,
@delay_between_responses = 300,
@include_event_description_in = 1;

# 配置告警通知
EXEC dbo.sp_add_notification
@alert_name = N’Database Status Alert’,
@operator_name = N’DBA Team’,
@notification_method = 1;

3.3.2 SQLServer数据库多环境监控报告

# 生成多环境监控报告

# 1. 创建监控报告存储过程
USE [master]
GO
CREATE PROCEDURE dbo.GenerateEnvironmentReport
AS
BEGIN
SET NOCOUNT ON;

— 创建临时表存储监控数据
CREATE TABLE #EnvironmentStatus (
Environment VARCHAR(50),
ServerName VARCHAR(128),
DatabaseName VARCHAR(128),
Status VARCHAR(50),
ConnectionCount INT,
BlockingCount INT,
LastBackup DATETIME
);

— 收集开发环境数据
INSERT INTO #EnvironmentStatus
EXEC (‘
SELECT
”Development” AS Environment,
@@SERVERNAME AS ServerName,
name AS DatabaseName,
state_desc AS Status,
(SELECT COUNT(*) FROM sys.dm_exec_sessions WHERE is_user_process = 1) AS ConnectionCount,
(SELECT COUNT(*) FROM sys.dm_exec_requests WHERE blocking_session_id > 0) AS BlockingCount,
(SELECT MAX(backup_finish_date) FROM msdb.dbo.backupset WHERE database_name = name) AS LastBackup
FROM sys.databases
WHERE name NOT IN (”master”, ”model”, ”msdb”, ”tempdb”)
‘) AT [dev-fgedu-sql01];

— 收集测试环境数据
INSERT INTO #EnvironmentStatus
EXEC (‘
SELECT
”Testing” AS Environment,
@@SERVERNAME AS ServerName,
name AS DatabaseName,
state_desc AS Status,
(SELECT COUNT(*) FROM sys.dm_exec_sessions WHERE is_user_process = 1) AS ConnectionCount,
(SELECT COUNT(*) FROM sys.dm_exec_requests WHERE blocking_session_id > 0) AS BlockingCount,
(SELECT MAX(backup_finish_date) FROM msdb.dbo.backupset WHERE database_name = name) AS LastBackup
FROM sys.databases
WHERE name NOT IN (”master”, ”model”, ”msdb”, ”tempdb”)
‘) AT [test-fgedu-sql01];

— 收集预生产环境数据
INSERT INTO #EnvironmentStatus
EXEC (‘
SELECT
”Staging” AS Environment,
@@SERVERNAME AS ServerName,
name AS DatabaseName,
state_desc AS Status,
(SELECT COUNT(*) FROM sys.dm_exec_sessions WHERE is_user_process = 1) AS ConnectionCount,
(SELECT COUNT(*) FROM sys.dm_exec_requests WHERE blocking_session_id > 0) AS BlockingCount,
(SELECT MAX(backup_finish_date) FROM msdb.dbo.backupset WHERE database_name = name) AS LastBackup
FROM sys.databases
WHERE name NOT IN (”master”, ”model”, ”msdb”, ”tempdb”)
‘) AT [stage-fgedu-sql01];

— 收集生产环境数据
INSERT INTO #EnvironmentStatus
EXEC (‘
SELECT
”Production” AS Environment,
@@SERVERNAME AS ServerName,
name AS DatabaseName,
state_desc AS Status,
(SELECT COUNT(*) FROM sys.dm_exec_sessions WHERE is_user_process = 1) AS ConnectionCount,
(SELECT COUNT(*) FROM sys.dm_exec_requests WHERE blocking_session_id > 0) AS BlockingCount,
(SELECT MAX(backup_finish_date) FROM msdb.dbo.backupset WHERE database_name = name) AS LastBackup
FROM sys.databases
WHERE name NOT IN (”master”, ”model”, ”msdb”, ”tempdb”)
‘) AT [prod-fgedu-sql01];

— 生成报告
SELECT * FROM #EnvironmentStatus ORDER BY Environment, DatabaseName;

— 清理临时表
DROP TABLE #EnvironmentStatus;
END
GO

# 2. 执行监控报告
EXEC dbo.GenerateEnvironmentReport;
GO

Environment ServerName DatabaseName Status ConnectionCount BlockingCount LastBackup
———– —————- ————- ——— ————— ————- ———————–
Development dev-fgedu-sql01 dev_fgedudb ONLINE 10 0 2026-04-08 09:00:00.000
Testing test-fgedu-sql01 test_fgedudb ONLINE 25 0 2026-04-08 08:00:00.000
Staging stage-fgedu-sql01 stage_fgedudb ONLINE 50 0 2026-04-08 07:00:00.000
Production prod-fgedu-sql01 prod_fgedudb ONLINE 200 0 2026-04-08 06:00:00.000

风哥提示:多环境监控是确保系统稳定运行的关键,建议配置统一的监控体系,及时发现和解决问题。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 SQLServer数据库开发测试环境搭建

# 需求:搭建开发和测试环境,支持团队协作开发

# 实施步骤:

# 1. 环境规划
# 开发环境:1台服务器,4核16GB内存
# 测试环境:1台服务器,8核32GB内存

# 2. 网络配置
# 开发环境网段:192.168.1.0/24
# 测试环境网段:192.168.2.0/24
# 防火墙规则:允许开发环境访问测试环境

# 3. 服务器准备
# 开发服务器:dev-fgedu-sql01 (192.168.1.10)
# 测试服务器:test-fgedu-sql01 (192.168.2.10)

# 4. 安装SQLServer
# 在开发服务器安装SQLServer Developer Edition
# 在测试服务器安装SQLServer Enterprise Edition

# 5. 配置开发环境
# 创建开发数据库
sqlcmd -S dev-fgedu-sql01 -U sa -P “Fgedu@2026#Dev” -Q “CREATE DATABASE dev_fgedudb”
GO

# 创建开发用户
sqlcmd -S dev-fgedu-sql01 -U sa -P “Fgedu@2026#Dev” -Q “CREATE LOGIN dev_fgedu WITH PASSWORD=’Fgedu@2026#Dev’, DEFAULT_DATABASE=dev_fgedudb”
GO

# 授予权限
sqlcmd -S dev-fgedu-sql01 -U sa -P “Fgedu@2026#Dev” -Q “USE dev_fgedudb; CREATE USER dev_fgedu FOR LOGIN dev_fgedu; ALTER ROLE db_owner ADD MEMBER dev_fgedu”
GO

# 6. 配置测试环境
# 创建测试数据库
sqlcmd -S test-fgedu-sql01 -U sa -P “Fgedu@2026#Test” -Q “CREATE DATABASE test_fgedudb”
GO

# 创建测试用户
sqlcmd -S test-fgedu-sql01 -U sa -P “Fgedu@2026#Test” -Q “CREATE LOGIN test_fgedu WITH PASSWORD=’Fgedu@2026#Test’, DEFAULT_DATABASE=test_fgedudb”
GO

# 授予权限
sqlcmd -S test-fgedu-sql01 -U sa -P “Fgedu@2026#Test” -Q “USE test_fgedudb; CREATE USER test_fgedu FOR LOGIN test_fgedu; ALTER ROLE db_owner ADD MEMBER test_fgedu”
GO

# 7. 配置环境同步
# 创建同步脚本
cat > sync_env.ps1 << 'EOF' # 同步开发环境到测试环境 # 配置 $sourceServer = "dev-fgedu-sql01" $sourceDatabase = "dev_fgedudb" $targetServer = "test-fgedu-sql01" $targetDatabase = "test_fgedudb" $sourceUser = "dev_fgedu" $sourcePassword = "Fgedu@2026#Dev" $targetUser = "test_fgedu" $targetPassword = "Fgedu@2026#Test" # 同步架构 Write-Host "Syncing schema..." sqlcmd -S $sourceServer -U $sourceUser -P $sourcePassword -d $sourceDatabase -Q "SELECT 'USE ' + QUOTENAME(DB_NAME())" -o "schema.sql" sqlcmd -S $sourceServer -U $sourceUser -P $sourcePassword -d $sourceDatabase -Q "SELECT definition FROM sys.sql_modules WHERE object_id IN (SELECT object_id FROM sys.objects WHERE type IN ('P', 'V', 'FN', 'IF', 'TF'))" -o "schema.sql" -a 32767 -h -1 -s "" sqlcmd -S $targetServer -U $targetUser -P $targetPassword -d $targetDatabase -i "schema.sql" # 同步数据 Write-Host "Syncing data..." $tables = @("dev_fgedu_test") foreach ($table in $tables) { sqlcmd -S $sourceServer -U $sourceUser -P $sourcePassword -d $sourceDatabase -Q "SELECT 'DELETE FROM $table;'" -o "data_$table.sql" sqlcmd -S $sourceServer -U $sourceUser -P $sourcePassword -d $sourceDatabase -Q "SELECT 'INSERT INTO $table (name, create_time) VALUES (''' + name + ''', ''' + CONVERT(varchar, create_time, 120) + ''');' FROM $table" -o "data_$table.sql" -a 32767 -h -1 -s "" sqlcmd -S $targetServer -U $targetUser -P $targetPassword -d $targetDatabase -i "data_$table.sql" } Write-Host "Sync completed!" EOF # 执行同步脚本 PowerShell -ExecutionPolicy Bypass -File sync_env.ps1 # 8. 验证环境 # 连接开发环境 sqlcmd -S dev-fgedu-sql01 -U dev_fgedu -P "Fgedu@2026#Dev" -Q "SELECT @@SERVERNAME, DB_NAME()" GO ------------------------ ------------ dev-fgedu-sql01 dev_fgedudb (1 rows affected) # 连接测试环境 sqlcmd -S test-fgedu-sql01 -U test_fgedu -P "Fgedu@2026#Test" -Q "SELECT @@SERVERNAME, DB_NAME()" GO ------------------------ ------------ test-fgedu-sql01 test_fgedudb (1 rows affected)

4.2 SQLServer数据库预生产环境管理

# 需求:搭建预生产环境,用于最终验证和性能测试

# 实施步骤:

# 1. 环境规划
# 预生产环境:2台服务器,16核64GB内存,配置与生产环境相同

# 2. 网络配置
# 预生产环境网段:192.168.3.0/24
# 防火墙规则:与生产环境隔离,只允许运维和测试人员访问

# 3. 服务器准备
# 预生产服务器1:stage-fgedu-sql01 (192.168.3.10)
# 预生产服务器2:stage-fgedu-sql02 (192.168.3.11)

# 4. 安装SQLServer
# 在两台服务器安装SQLServer Enterprise Edition
# 配置Always On可用性组

# 5. 配置预生产环境
# 创建预生产数据库
sqlcmd -S stage-fgedu-sql01 -U sa -P “Fgedu@2026#Stage” -Q “CREATE DATABASE stage_fgedudb”
GO

# 创建预生产用户
sqlcmd -S stage-fgedu-sql01 -U sa -P “Fgedu@2026#Stage” -Q “CREATE LOGIN stage_fgedu WITH PASSWORD=’Fgedu@2026#Stage’, DEFAULT_DATABASE=stage_fgedudb”
GO

# 授予权限
sqlcmd -S stage-fgedu-sql01 -U sa -P “Fgedu@2026#Stage” -Q “USE stage_fgedudb; CREATE USER stage_fgedu FOR LOGIN stage_fgedu; ALTER ROLE db_owner ADD MEMBER stage_fgedu”
GO

# 6. 配置Always On可用性组
# 启用Always On功能
sqlcmd -S stage-fgedu-sql01 -U sa -P “Fgedu@2026#Stage” -Q “EXEC sp_configure ‘show advanced options’, 1; RECONFIGURE; EXEC sp_configure ‘hadr enabled’, 1; RECONFIGURE;”
GO

# 重启SQLServer
Restart-Service -Name “MSSQLSERVER”

# 创建可用性组
# 具体配置参考Always On文档

# 7. 同步生产数据到预生产环境
# 创建数据同步脚本
cat > sync_prod_to_stage.ps1 << 'EOF' # 同步生产环境到预生产环境 # 配置 $sourceServer = "prod-fgedu-sql01" $sourceDatabase = "prod_fgedudb" $targetServer = "stage-fgedu-sql01" $targetDatabase = "stage_fgedudb" $sourceUser = "prod_fgedu" $sourcePassword = "Fgedu@2026#Prod" $targetUser = "stage_fgedu" $targetPassword = "Fgedu@2026#Stage" # 备份生产数据库 Write-Host "Backing up production database..." sqlcmd -S $sourceServer -U $sourceUser -P $sourcePassword -Q "BACKUP DATABASE $sourceDatabase TO DISK = '\\shared\backups\$sourceDatabase.bak' WITH COMPRESSION" # 恢复到预生产环境 Write-Host "Restoring to staging environment..." sqlcmd -S $targetServer -U $targetUser -P $targetPassword -Q "ALTER DATABASE $targetDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE" sqlcmd -S $targetServer -U $targetUser -P $targetPassword -Q "RESTORE DATABASE $targetDatabase FROM DISK = '\\shared\backups\$sourceDatabase.bak' WITH REPLACE, RECOVERY" sqlcmd -S $targetServer -U $targetUser -P $targetPassword -Q "ALTER DATABASE $targetDatabase SET MULTI_USER" # 数据脱敏 Write-Host "Masking sensitive data..." sqlcmd -S $targetServer -U $targetUser -P $targetPassword -d $targetDatabase -Q "UPDATE dbo.fgedu_users SET email = 'user' + CAST(id AS VARCHAR) + '@example.com', phone = '13800138000'" Write-Host "Sync completed!" EOF # 执行同步脚本 PowerShell -ExecutionPolicy Bypass -File sync_prod_to_stage.ps1 # 8. 验证预生产环境 # 连接预生产环境 sqlcmd -S stage-fgedu-sql01 -U stage_fgedu -P "Fgedu@2026#Stage" -Q "SELECT @@SERVERNAME, DB_NAME()" GO ------------------------ ------------ stage-fgedu-sql01 stage_fgedudb (1 rows affected) # 验证可用性组 sqlcmd -S stage-fgedu-sql01 -U stage_fgedu -P "Fgedu@2026#Stage" -Q "SELECT * FROM sys.dm_hadr_availability_group_states" GO group_id primary_replica primary_recovery_health_desc synchronization_health_desc ------------------------------------ ------------------ --------------------------- ---------------------------- 6F9619FF-8B86-D011-B42D-00C04FC964FF stage-fgedu-sql01 ONLINE HEALTHY (1 rows affected)

4.3 SQLServer数据库生产环境部署

# 需求:部署生产环境,确保高可用和稳定性

# 实施步骤:

# 1. 环境规划
# 生产环境:4台服务器,32核128GB内存,配置高可用集群

# 2. 网络配置
# 生产环境网段:192.168.4.0/24
# 防火墙规则:严格控制访问,只允许业务系统和运维人员访问

# 3. 服务器准备
# 生产服务器1:prod-fgedu-sql01 (192.168.4.10) – 主节点
# 生产服务器2:prod-fgedu-sql02 (192.168.4.11) – 副本节点
# 生产服务器3:prod-fgedu-sql03 (192.168.4.12) – 副本节点
# 生产服务器4:prod-fgedu-sql04 (192.168.4.13) – 见证服务器

# 4. 安装SQLServer
# 在所有服务器安装SQLServer Enterprise Edition
# 配置Always On可用性组

# 5. 配置生产环境
# 创建生产数据库
sqlcmd -S prod-fgedu-sql01 -U sa -P “Fgedu@2026#Prod” -Q “CREATE DATABASE prod_fgedudb”
GO

# 创建生产用户
sqlcmd -S prod-fgedu-sql01 -U sa -P “Fgedu@2026#Prod” -Q “CREATE LOGIN prod_fgedu WITH PASSWORD=’Fgedu@2026#Prod’, DEFAULT_DATABASE=prod_fgedudb”
GO

# 授予权限
sqlcmd -S prod-fgedu-sql01 -U sa -P “Fgedu@2026#Prod” -Q “USE prod_fgedudb; CREATE USER prod_fgedu FOR LOGIN prod_fgedu; ALTER ROLE db_owner ADD MEMBER prod_fgedu”
GO

# 6. 配置Always On可用性组
# 启用Always On功能
foreach ($server in @(“prod-fgedu-sql01”, “prod-fgedu-sql02”, “prod-fgedu-sql03”)) {
sqlcmd -S $server -U sa -P “Fgedu@2026#Prod” -Q “EXEC sp_configure ‘show advanced options’, 1; RECONFIGURE; EXEC sp_configure ‘hadr enabled’, 1; RECONFIGURE;”
Restart-Service -ComputerName $server -Name “MSSQLSERVER”
}

# 创建可用性组
# 具体配置参考Always On文档

# 7. 配置监控和告警
# 配置SQL Server Agent作业
# 配置数据库邮件
# 配置告警通知

# 8. 配置备份策略
# 完整备份:每天凌晨2点
# 差异备份:每4小时
# 日志备份:每30分钟

# 9. 验证生产环境
# 连接生产环境
sqlcmd -S prod-fgedu-sql01 -U prod_fgedu -P “Fgedu@2026#Prod” -Q “SELECT @@SERVERNAME, DB_NAME()”
GO

———————— ————
prod-fgedu-sql01 prod_fgedudb

(1 rows affected)

# 验证可用性组
sqlcmd -S prod-fgedu-sql01 -U prod_fgedu -P “Fgedu@2026#Prod” -Q “SELECT * FROM sys.dm_hadr_availability_group_states”
GO

group_id primary_replica primary_recovery_health_desc synchronization_health_desc
———————————— —————— ————————— —————————-
6F9619FF-8B86-D011-B42D-00C04FC964FF prod-fgedu-sql01 ONLINE HEALTHY

(1 rows affected)

# 验证备份
sqlcmd -S prod-fgedu-sql01 -U prod_fgedu -P “Fgedu@2026#Prod” -Q “SELECT TOP 1 backup_finish_date, type, backup_size FROM msdb.dbo.backupset WHERE database_name = ‘prod_fgedudb’ ORDER BY backup_finish_date DESC”
GO

backup_finish_date type backup_size
———————— —- ———–
2026-04-08 02:00:00.000 D 10737418240

(1 rows affected)

生产环境建议:生产环境部署需要严格遵循变更管理流程,确保部署过程安全可靠,同时建立完善的监控和告警机制。from SQLServer视频:www.itpux.com

Part05-风哥经验总结与分享

5.1 SQLServer数据库多环境管理最佳实践

SQLServer数据库多环境管理最佳实践:

  • 标准化环境配置:确保各环境的配置标准一致,减少环境差异导致的问题
  • 自动化部署:使用脚本和工具实现环境的自动化部署和配置
  • 版本控制:对数据库架构和脚本进行版本控制,确保变更可追溯
  • 数据同步策略:建立合理的数据同步策略,确保环境间数据的一致性和安全性
  • 权限管理:严格控制各环境的访问权限,遵循最小权限原则
  • 监控体系:建立统一的监控体系,及时发现和解决问题
  • 文档化:详细记录环境配置和管理流程,便于团队协作和知识传承

5.2 SQLServer数据库多环境管理检查清单

# SQLServer数据库多环境管理检查清单

1. 环境配置检查
[ ] 服务器硬件配置是否满足需求
[ ] 操作系统版本是否一致
[ ] SQLServer版本和补丁是否一致
[ ] 网络配置是否正确
[ ] 防火墙规则是否配置

2. 数据库配置检查
[ ] 数据库实例是否正常运行
[ ] 数据库文件配置是否合理
[ ] 数据库参数是否优化
[ ] 数据库备份是否配置
[ ] 数据库日志是否正常

3. 安全检查
[ ] 登录名和用户是否创建
[ ] 权限是否正确配置
[ ] 密码策略是否遵循
[ ] 审计是否启用
[ ] 加密是否配置

4. 同步检查
[ ] 架构同步是否完成
[ ] 数据同步是否完成
[ ] 同步脚本是否测试
[ ] 同步频率是否合理
[ ] 同步失败是否有回滚机制

5. 监控检查
[ ] 监控工具是否配置
[ ] 告警是否设置
[ ] 监控报告是否生成
[ ] 监控历史是否保存
[ ] 监控阈值是否合理

6. 文档检查
[ ] 环境配置文档是否完整
[ ] 部署流程文档是否完整
[ ] 故障处理文档是否完整
[ ] 变更管理文档是否完整
[ ] 维护计划文档是否完整

5.3 SQLServer数据库多环境管理技巧

SQLServer数据库多环境管理技巧:

  • 使用环境变量:通过环境变量管理不同环境的配置,减少硬编码
  • 自动化脚本:编写自动化脚本处理环境部署、同步和维护任务
  • 容器化:使用Docker容器快速部署和管理环境
  • 配置管理工具:使用Ansible、Chef等配置管理工具管理环境配置
  • 持续集成:集成CI/CD流程,实现环境的自动部署和测试
  • 数据脱敏:在非生产环境中对敏感数据进行脱敏处理
  • 环境隔离:确保各环境之间的网络隔离,提高安全性
风哥提示:多环境管理是一个持续改进的过程,需要不断优化流程和工具,提高管理效率和系统稳定性。建议定期评估和更新环境管理策略。更多视频教程www.fgedu.net.cn

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息