Aug 10, 2026, 3:24 PM

This commit is contained in:
Paweł Domański
2026-08-10 13:24:35 +00:00
parent e02460d4db
commit 5529f48942
+506 -226
View File
@@ -1,257 +1,537 @@
Dla SQL Server Standalone runbook jest prostszy niż dla FCI, ale paradoksalnie częściej kończy się problemami, bo ludzie zapominają o jobach, linked serverach, ODBC, SSIS i konfiguracji systemowej.
# SQL Server Standalone Migration Runbook
## SQL Server 2016/2019 → SQL Server 2022
Poniżej jest moja produkcyjna checklista DBA do migracji:
**Document Version:** 1.0
**Migration Type:** Side-by-Side Migration
**Source Server:** _________________
**Target Server:** _________________
**Migration Date:** _________________
**DBA:** _________________
SQL Server Standalone → SQL Server 2022 Standalone
---
1. Discovery / Assessment
Serwer źródłowy
System
Nazwa serwera
Windows Version
Patch Level
CPU
RAM
Dyski
Antivirus
Firewall rules
ODBC DSN
Scheduled Tasks
SQL Server
# 1. Discovery / Assessment
## 1.1 Source Server Inventory
### Operating System
- [ ] Server name documented
- [ ] Windows version documented
- [ ] Windows patch level documented
- [ ] CPU configuration documented
- [ ] Memory configuration documented
- [ ] Disk layout documented
- [ ] Antivirus exclusions documented
- [ ] Firewall rules documented
- [ ] ODBC DSNs documented
- [ ] Windows Scheduled Tasks documented
### SQL Server Instance
```sql
SELECT @@VERSION;
```
SQL Version
SQL Edition
CU/SP
Collation
Authentication Mode
Max Server Memory
MaxDOP
Cost Threshold
Trace Flags
TempDB Configuration
Backup Compression
IFI
2. Inwentaryzacja baz
- [ ] SQL Version
- [ ] SQL Edition
- [ ] SQL Build Number
- [ ] SQL CU/SP Level
- [ ] Collation
- [ ] Authentication Mode
- [ ] Max Server Memory
- [ ] MaxDOP
- [ ] Cost Threshold for Parallelism
- [ ] Trace Flags
- [ ] Startup Parameters
- [ ] TempDB Configuration
- [ ] Backup Compression Settings
- [ ] Instant File Initialization Status
Dla każdej bazy:
---
Nazwa
Rozmiar
Recovery Model
Compatibility Level
Owner
TDE
CDC
Replication
Service Broker
FullText
FileStream
CLR
Query Store
3. Obiekty instancji
Security
SQL Logins
Windows Logins
Server Roles
Credentials
Certificates
Endpoints
SQL Agent
Jobs
Job Steps
Schedules
Operators
Alerts
Proxies
Integracje
Linked Servers
Linked Server Logins
Database Mail
SSIS Packages
Maintenance Plans
PowerShell Scripts
Batch Files
4. Nowy serwer
Windows
Serwer zbudowany
Join do domeny
Patchowanie
AV exclusions
Firewall
Dyski
# 2. Database Inventory
Przykład:
For each database collect:
- [ ] Database Name
- [ ] Size (Data / Log)
- [ ] Recovery Model
- [ ] Compatibility Level
- [ ] Database Owner
- [ ] AutoGrowth Settings
- [ ] TDE Enabled
- [ ] CDC Enabled
- [ ] Replication Enabled
- [ ] Service Broker
- [ ] FullText Search
- [ ] FileTables / FILESTREAM
- [ ] CLR Assemblies
- [ ] Query Store
- [ ] Database Scoped Credentials
### Database Report
```sql
SELECT
name,
compatibility_level,
recovery_model_desc,
state_desc
FROM sys.databases;
```
---
# 3. Instance Objects Inventory
## Security
- [ ] SQL Logins
- [ ] Windows Logins
- [ ] Server Roles
- [ ] Credentials
- [ ] Endpoints
- [ ] Certificates
- [ ] Server Permissions
## SQL Agent
- [ ] Jobs
- [ ] Job Steps
- [ ] Schedules
- [ ] Operators
- [ ] Alerts
- [ ] Proxies
## Integrations
- [ ] Linked Servers
- [ ] Linked Server Login Mappings
- [ ] Database Mail
- [ ] Maintenance Plans
- [ ] SSIS Packages
- [ ] PowerShell Scripts
- [ ] Batch Files
- [ ] External Interfaces
---
# 4. Target Server Preparation
## Windows Configuration
- [ ] Server built
- [ ] Joined to domain
- [ ] Latest approved patches installed
- [ ] Antivirus configured
- [ ] Firewall configured
- [ ] Monitoring agent installed
- [ ] Backup agent installed
## Storage Layout
Example:
```text
C: OS
D: SQL Binaries
E: Data
F: Log
F: Logs
G: TempDB
H: Backup
H: Backups
```
Wolumeny utworzone
NTFS 64K
Uprawnienia nadane
5. Instalacja SQL 2022
Instalacja
SQL Engine
Agent
FullText (jeśli używany)
Konfiguracja
Port TCP
Max Memory
MaxDOP
Cost Threshold
Backup Compression
IFI
6. Migracja obiektów instancji
Logins
Migracja z SID
Role
Permissions
Linked Servers
Linked Servers
Login Mapping
Hasła
Database Mail
Accounts
Profiles
Test mail
Agent
Jobs
Schedules
Operators
Alerts
Proxies
7. Test Restore
### Validation
Dla każdej bazy:
- [ ] Disk letters match design
- [ ] NTFS Allocation Unit Size = 64K
- [ ] Capacity validated
- [ ] Permissions configured
Backup
BACKUP DATABASE db
TO DISK='...'
WITH COMPRESSION,CHECKSUM;
---
Restore
# 5. SQL Server 2022 Installation
## Installation
- [ ] SQL Engine installed
- [ ] SQL Agent installed
- [ ] Full Text Search installed (if required)
- [ ] Latest approved CU installed
## Initial Configuration
- [ ] TCP/IP enabled
- [ ] Static TCP Port configured
- [ ] Max Server Memory configured
- [ ] MaxDOP configured
- [ ] Cost Threshold configured
- [ ] IFI enabled
- [ ] TempDB configured
- [ ] Error Log retention configured
### Validation
```sql
SELECT @@VERSION;
```
---
# 6. Migrate Instance Objects
## Logins
- [ ] Script logins with SID
- [ ] Migrate server roles
- [ ] Migrate permissions
- [ ] Validate orphaned users
## Linked Servers
- [ ] Linked Servers migrated
- [ ] Login mappings configured
- [ ] Passwords restored
- [ ] Connectivity tested
## Database Mail
- [ ] Accounts created
- [ ] Profiles created
- [ ] Test email sent
## SQL Agent
- [ ] Jobs imported
- [ ] Schedules imported
- [ ] Operators imported
- [ ] Alerts imported
- [ ] Proxies imported
**Keep all jobs disabled until cutover.**
---
# 7. Migration Testing
## Restore Test
### Backup
```sql
BACKUP DATABASE <DatabaseName>
TO DISK = '<Path>'
WITH CHECKSUM, COMPRESSION;
```
### Verify
```sql
RESTORE VERIFYONLY
FROM DISK = '<Path>';
```
VERIFYONLY
Restore Test
CHECKDB
8. Tydzień przed migracją
Freeze
Brak zmian schematu
Brak nowych jobów
Brak nowych loginów
Brak nowych linked serverów
Test aplikacji
Login
Odczyt
Zapis
Raporty
ETL
9. Cutover
Start
Aplikacje stop
ETL stop
Joby stop
Final Backup
Full
BACKUP DATABASE
### Restore
Log
BACKUP LOG
```sql
RESTORE DATABASE <DatabaseName>
FROM DISK = '<Path>';
```
Restore
Full
RESTORE DATABASE
WITH NORECOVERY
### Validation
Logi
RESTORE LOG
- [ ] Restore successful
- [ ] CHECKDB successful
- [ ] Application connectivity successful
Recovery
WITH RECOVERY
---
Security
Logins
Credentials
Linked Servers
Database Mail
Jobs
Import
Enable
10. Smoke Test
SQL
Wszystkie bazy ONLINE
Logins działają
Agent działa
Backup działa
Aplikacja
Login
Read
Write
Raport
ETL
Job Success
SSIS Success
Import działa
11. Performance Validation
# 8. T-7 Days Activities
Porównanie do starego serwera:
## Change Freeze
CPU
RAM
IOPS
PLE
Wait Stats
Blocking
12. Rollback
- [ ] No schema changes
- [ ] No new jobs
- [ ] No new linked servers
- [ ] No major application releases
Warunki rollback:
## User Acceptance Testing
aplikacja nie startuje
błędy logowania
utrata danych
krytyczne ETL nie działa
brak wydajności
Procedura
Stop nowego środowiska
Disable Jobs
Stop Applications
Powrót
Connection Strings -> stary SQL
Enable Source Jobs
Uruchom aplikacje
Test
Login
Read
Write
13. Najczęściej zapominane rzeczy
- [ ] Login test
- [ ] Read test
- [ ] Write test
- [ ] Reporting test
- [ ] ETL test
To jest moja „killer checklist”:
---
SQL Agent Schedules
SQL Agent Proxies
Linked Server Passwords
ODBC DSN
Windows Scheduled Tasks
Database Mail
TDE Certificates
Backup Jobs
Maintenance Plans
PowerShell scripts
SSIS packages
CLR Assemblies
Service Broker
Monitoring (Splunk)
Antivirus exclusions
Connection strings
Shared folders
Startup parameters
TempDB configuration
Trace flags
Local service accounts
# 9. Cutover Activities
Jeżeli migracja dotyczy typowego środowiska D&B (np. SQL 2016/2019 → SQL 2022), to ja dodatkowo zawsze dopisuję jeszcze sekcję „Post Migration 30 dni”, czyli kontrolę backupów, jobów, wzrostu baz, indeksów i ewentualne podniesienie compatibility level dopiero po zakończeniu okresu stabilizacji.
## Start Change
- [ ] Open bridge call
- [ ] Confirm stakeholders available
- [ ] Confirm rollback owner
---
## Disable Source Activity
### SQL Agent
- [ ] Disable jobs
### Applications
- [ ] Stop application services
- [ ] Stop ETL processes
- [ ] Stop integrations
---
## Final Backup
### Full Backup
```sql
BACKUP DATABASE <DatabaseName>
TO DISK='<FullBackup>';
```
### Transaction Log Backup
```sql
BACKUP LOG <DatabaseName>
TO DISK='<LogBackup>';
```
### Validation
- [ ] Backup completed
- [ ] VERIFYONLY successful
---
## Restore to SQL 2022
### Restore Full
```sql
RESTORE DATABASE <DatabaseName>
FROM DISK='<FullBackup>'
WITH NORECOVERY;
```
### Restore Logs
```sql
RESTORE LOG <DatabaseName>
FROM DISK='<LogBackup>'
WITH NORECOVERY;
```
### Recover Database
```sql
RESTORE DATABASE <DatabaseName>
WITH RECOVERY;
```
---
# 10. Post-Restore Configuration
## Security
- [ ] Logins validated
- [ ] Credentials migrated
- [ ] Linked servers validated
- [ ] Database Mail validated
## SQL Agent
- [ ] Jobs enabled
- [ ] Schedules enabled
- [ ] Operators enabled
- [ ] Alerts enabled
---
# 11. Smoke Testing
## SQL Validation
- [ ] Databases ONLINE
- [ ] SQL Agent running
- [ ] Logins functional
- [ ] Backup path accessible
- [ ] Database Mail functional
### Validation Query
```sql
SELECT
name,
state_desc
FROM sys.databases;
```
---
## Application Validation
- [ ] Login works
- [ ] Read operations work
- [ ] Write operations work
- [ ] Reports work
---
## ETL Validation
- [ ] ETL jobs complete successfully
- [ ] SSIS packages execute successfully
- [ ] Data import/export successful
---
# 12. Performance Validation
Compare against source server baseline.
## Metrics
- [ ] CPU
- [ ] Memory
- [ ] Disk Latency
- [ ] Blocking
- [ ] Wait Statistics
- [ ] TempDB Usage
- [ ] Backup Throughput
### Wait Stats
```sql
SELECT TOP (20)
wait_type,
wait_time_ms
FROM sys.dm_os_wait_stats
ORDER BY wait_time_ms DESC;
```
---
# 13. Rollback Plan
## Rollback Criteria
Rollback if:
- [ ] Application unavailable
- [ ] Data inconsistency
- [ ] Critical login failures
- [ ] ETL failures
- [ ] Severe performance degradation
---
## Rollback Steps
### Stop Target Environment
- [ ] Disable target jobs
- [ ] Stop application services
### Redirect Applications
- [ ] Revert connection strings
- [ ] Revert DNS aliases
### Enable Source
- [ ] Enable source jobs
- [ ] Start source applications
### Validate
- [ ] Login successful
- [ ] Read successful
- [ ] Write successful
---
# 14. 24-Hour Validation
- [ ] Review SQL Error Logs
- [ ] Review Windows Event Logs
- [ ] Validate Backup Success
- [ ] Validate Job Success
- [ ] Validate Monitoring Alerts
- [ ] Validate ETL Execution
---
# 15. 30-Day Stabilization
## Daily Review
- [ ] Backup Status
- [ ] Failed Jobs
- [ ] Database Growth
- [ ] Disk Consumption
- [ ] Blocking Events
- [ ] Long Running Queries
---
## Post-Stabilization Tasks
- [ ] Raise compatibility level (if planned)
- [ ] Enable Query Store tuning (if planned)
- [ ] Remove old server references
- [ ] Update CMDB
- [ ] Update documentation
- [ ] Schedule source server decommission
---
# DBA Killer Checklist
Most frequently forgotten migration items:
- [ ] SQL Agent Schedules
- [ ] SQL Agent Proxies
- [ ] Linked Server Passwords
- [ ] ODBC DSNs
- [ ] Scheduled Tasks
- [ ] Database Mail
- [ ] TDE Certificates
- [ ] Backup Jobs
- [ ] Maintenance Plans
- [ ] SSIS Packages
- [ ] CLR Assemblies
- [ ] Service Broker
- [ ] Monitoring Agents
- [ ] Antivirus Exclusions
- [ ] Shared Folders
- [ ] Connection Strings
- [ ] TempDB Configuration
- [ ] Trace Flags
- [ ] Startup Parameters
- [ ] Local Service Accounts
---
# Migration Success Criteria
Migration is successful when:
- [ ] All databases are ONLINE
- [ ] Applications connected successfully
- [ ] ETL processes completed successfully
- [ ] SQL Agent jobs functioning
- [ ] Backups functioning
- [ ] Monitoring functioning
- [ ] Performance acceptable
- [ ] Business owner sign-off received