Standard Operating Procedure

SQL Server → AWS RDS for SQL Server

Step-by-step procedure for migrating a SQL Server on-premises database to AWS RDS for SQL Server using Endrias Bridge, including all prerequisites, connection configuration, and post-migration tasks specific to the RDS managed environment.

Tool: Endrias Bridge · Source: SQL Server 2016+ on-prem · Target: AWS RDS for SQL Server SE2/EE

📚 Overview & Scope

This SOP covers a full copy (schema + data) from a SQL Server on-premises instance into an AWS RDS for SQL Server SE2 or EE instance using Endrias Bridge's row-copy mode. Because source and target are the same engine, the vast majority of types map 1:1. The key differences are RDS platform restrictions: no xp_cmdshell, no direct msdb writes, no FILESTREAM, and the reserved rdsadmin system database.

Bidirectional support: Endrias Bridge also supports RDS for SQL Server → on-prem SQL Server. Swap source and target connections — useful for on-prem DR seeding or dev refresh.
Estimated time: 10–20 minutes for setup + assessment, plus data copy time (varies by database size and network throughput between migration host and RDS endpoint).

Prerequisites — Source (SQL Server)

RequirementNotes
SQL login MigrationUser with db_datareader + VIEW SERVER STATE on EndriasBridge db_owner required if using CDC mode
ODBC Driver 17 for SQL Server installed on migration host Required by Endrias Bridge connection layer
TCP 1433 reachable from migration host to sql-source-server Confirm with: Test-NetConnection sql-source-server -Port 1433
SQL Server allows SQL authentication (mixed-mode), or use Windows Auth Check Security > Server Authentication in SSMS

Prerequisites — Target (AWS RDS for SQL Server)

RDS for SQL Server has platform restrictions that differ from on-premises. Review each requirement before starting the migration wizard.

RequirementNotes
RDS instance edition: SE2 or EE Express does not support CDC; SE2 is sufficient for row-copy mode
Option group includes SQLSERVER_BACKUP_RESTORE Required for native backup/restore mode only — not needed for row-copy mode
Security group: inbound TCP 1433 from migration host IP Add inbound rule in the RDS instance's VPC security group
SQL login with db_owner on EndriasBridgeTarget No sa / sysadmin — RDS blocks those roles
Target database pre-created before Step 4 See SQL below, or use "Auto-create" checkbox in Migration Projects Step 3
Connect via RDS cluster endpoint (not instance ARN) Format: instance.xxxxxx.us-east-1.rds.amazonaws.com
rdsadmin database — do not access or migrate it RDS system database; Endrias Bridge automatically excludes it from discovery

Pre-create the target database via SSMS or the RDS query editor:

-- Run as a login with dbcreator or higher on the RDS instance
CREATE DATABASE [EndriasBridgeTarget];
GO

-- Map the migration login to a database user
USE [EndriasBridgeTarget];
GO
CREATE USER [MigrationUser] FOR LOGIN [MigrationUser];
EXEC sp_addrolemember 'db_owner', 'MigrationUser';
GO
💡
Alternatively, check Auto-create target database in the Migration Projects Step 3 panel — Endrias Bridge will issue CREATE DATABASE automatically before the first schema object is written.
Provision RDS storage at 1.2× the source database size minimum. RDS storage cannot be decreased after provisioning — size up front.
1

Configure Connections

Open Endrias Bridge, navigate to Migration Projects → New Project, and fill in both connection blocks. The target host is the RDS cluster endpoint — not the instance ARN.

  Endrias Bridge — New Migration Project: Source & Target

SOURCE DATABASE

SQL Server
sql-source-server
1433
EndriasBridge
MigrationUser
••••••••••••

TARGET DATABASE

SQL Server
rds-target.us-east-1.rds.amazonaws.com
1433
EndriasBridgeTarget
MigrationUser
••••••••••••
Test Connections
Save Project
💡
Click Test Connections before proceeding. A green checkmark on both sides confirms network access and credential validity. If the source passes but target fails, revisit the security group inbound rule and confirm the RDS instance's VPC is reachable from the migration host.
2

Run Assessment

Switch to the Assessment tab and click Run Assessment. The tool connects to the source, enumerates all tables and columns, and flags type conversions that will be applied.

  Endrias Bridge
Assessment
Migration
Jobs
Schema Objects
Tools
Database Assessment
Discovers source database objects and checks compatibility with target.
Run Assessment

SOURCE OBJECTS

📁 Tables (62)
  dbo.Users   33,100 rows
  dbo.Products   7,400 rows
  dbo.Orders   142,000 rows
  dbo.AuditLog   892 rows (temporal)
  … (58 more)

COMPATIBILITY NOTES

• Same engine — most types map 1:1
• NTEXT / IMAGE / TEXT: deprecated, accepted on RDS
• FILESTREAM columns: migrated as VARBINARY(MAX)
• Temporal SysEnd=9999-12-31: will be clamped (ODBC Driver 17)
Because source and target are both SQL Server, the assessment will show very few type-conversion warnings. The main item to note is the temporal SysEnd=9999-12-31 clamping — this is informational and expected (see Known Issues).
3

Select Tables

Switch to the Migration tab. Click Load Tables from Source, confirm all tables are checked, then configure migration options.

  Endrias Bridge
Assessment
Migration
Jobs
Schema Objects
Tools
Migrate Schema & Data
Select tables and copy schema / data to target database.
Migrate schema (CREATE TABLE)
Migrate data (INSERT rows)
Sync mode:
Full copy
Incremental (watermark column)
SQL Server CDC
Load Tables from Source
Start Migration
Verify Data Integrity
Export Report
dbo.Users
dbo.Products
dbo.Orders
dbo.AuditLog
… (all 62 tables, checked)
Endrias Bridge automatically excludes rdsadmin from all discovered object lists. Do not manually include it — attempting to migrate RDS system objects will fail with a permissions error.
4

Start Migration & Monitor

Click Start Migration. The Migration Log updates in real time as each table's schema is created on the RDS target and rows are copied in batches. The same-engine path is fast — no column type coercions required for standard T-SQL types.

  Endrias Bridge — Migration Log
14:02:11 --- Data type conversions (SQL Server -> RDS SQL Server) ---
14:02:11 Same engine — most types map 1:1
14:02:11 WARNING: SysEnd clamped: 892 row(s) in AuditLog had SysEnd=9999-12-31
14:02:11 → clamped to 9998-12-31 (ODBC Driver 17 limitation, informational)
14:02:12 Schema: created 62 table(s)
14:02:12 [1/62] Users ... 33,100 row(s)
14:02:13 [2/62] Products ... 7,400 row(s)
14:02:45 --- Full copy: 3,200,000+ row(s) in 61s ---
14:02:45 --- Done ---
The SysEnd clamped WARNING is informational — 9998-12-31 is the expected stored value for temporal table "open" rows when using ODBC Driver 17. See Known Issues for details.
If a previous run was interrupted after a partial copy, Endrias Bridge will log a WARNING about PK duplicates and skip the affected tables rather than inserting on top of existing rows. Re-run from scratch with Truncate target tables before copy enabled to clear the partial data first.
5

Verify & Export Report

  1. Click Verify Data Integrity — compares source vs. target row counts for every migrated table and logs any mismatches to the Migration Log.
  2. Spot-check temporal tables: confirm that SysEnd rows stored as 9998-12-31 are present and match expected counts.
  3. Click Export Report (enabled once migration finishes) to save an HTML/text summary of all tables, row counts, type conversions applied, and any warnings.
6

Post-Migration Tasks

Row-copy mode migrates schema and data. The following post-migration steps are required to make the RDS database fully operational.

1. Update statistics

-- Run on the RDS target after migration completes
USE [EndriasBridgeTarget];
EXEC sp_updatestats;
GO

2. Recreate SQL Agent jobs — the standard system stored procedures work directly on RDS for SQL Server (confirmed against AWS's own RDS SQL Server Agent documentation); no RDS-specific proc names are needed. The easiest path is the built-in one: tick "Also migrate SQL Agent jobs, operators & alerts" on the Migrate tab before running the migration and this step is done automatically. To do it manually instead:

-- Standard sp_add_job / sp_add_jobstep / sp_add_schedule work as-is on RDS
USE msdb;
GO

EXEC msdb.dbo.sp_add_job
    @job_name = N'YourJobName';

EXEC msdb.dbo.sp_add_jobstep
    @job_name      = N'YourJobName',
    @step_id       = 1,
    @step_name     = N'Step1',
    @subsystem     = N'TSQL',
    @command       = N'EXEC dbo.YourProcedure;',
    @database_name = N'EndriasBridgeTarget';

EXEC msdb.dbo.sp_add_schedule
    @schedule_name      = N'DailySchedule',
    @freq_type          = 4,   -- daily
    @freq_interval      = 1,
    @active_start_time  = 020000;  -- 02:00 AM

EXEC msdb.dbo.sp_attach_schedule
    @job_name      = N'YourJobName',
    @schedule_name = N'DailySchedule';

EXEC msdb.dbo.sp_add_jobserver
    @job_name = N'YourJobName';
GO
RDS limitation: Agent jobs are fully supported on RDS for SQL Server, but Agent operators and alerts are not supported at all — there is no RDS equivalent for either. The tool's automated checkbox detects an RDS target and skips operators/alerts automatically (jobs still migrate); email/notification-based alerting has to be rebuilt using RDS Event Notifications or CloudWatch instead.

3. Verify SysEnd clamped rows

-- Confirm temporal "open" rows present with expected clamped value
-- 9999-12-31 is NOT stored — 9998-12-31 is correct and expected
SELECT COUNT(*) AS OpenRows
FROM [EndriasBridgeTarget].[dbo].[AuditLog]
WHERE SysEndTime = '9998-12-31 23:59:59.9999999';
💡
Run DBCC CHECKDB ([EndriasBridgeTarget]) after migration to confirm database consistency. On RDS, DBCC output goes to the error log — retrieve it with: EXEC msdb.dbo.rds_read_error_log 0, 1, N'CHECKDB';

Known Issues

IssueDetails & Resolution
SysEnd clamping ODBC Driver 17 cannot represent 9999-12-31; temporal open rows are stored as 9998-12-31 23:59:59.9999999. Informational — no data is lost. FOR SYSTEM_TIME ALL queries still return open rows correctly on RDS.
SQL Server Agent Jobs are fully supported via the standard sp_add_job/sp_add_jobstep/sp_add_schedule procs — no RDS-specific proc names needed. Operators and alerts are not supported on RDS at all — see Step 6 above.
xp_cmdshell Not available on RDS. Application code or jobs relying on xp_cmdshell must be redesigned to use Lambda, SSM Run Command, or an EC2-hosted process.
FILESTREAM / FILETABLE Not supported on RDS. Endrias Bridge migrates FILESTREAM VARBINARY columns as VARBINARY(MAX) (file content only). The FILESTREAM attribute is removed from the DDL. Store binary files in S3 post-migration.
Linked servers Cannot target arbitrary external servers from RDS. Use RDS Federated Queries or migrate dependent workloads to AWS-native services.
rdsadmin database RDS system database — do not attempt to migrate it. Endrias Bridge auto-excludes it from all object discovery queries.
TCP 10054 — idle connection drop RDS drops idle pooled connections after the VPC idle timeout. Endrias Bridge auto-detects connection reset errors and retries once after pool dispose. No action required.
Storage provisioning Provision RDS storage at 1.2× source size minimum. RDS storage cannot be decreased after provisioning.
PK duplicate on re-run If a previous run was interrupted after partial copy, Endrias Bridge skips the copy with a WARNING rather than inserting on top of existing rows. Re-run from scratch with truncate enabled.

📊 Type Conversions (SQL Server → RDS SQL Server)

Source TypeTarget TypeNote
All standard T-SQL typesSameSame engine — 1:1 mapping
NTEXTNVARCHAR(MAX)Deprecated; still accepted on RDS
IMAGEVARBINARY(MAX)Deprecated; still accepted on RDS
TEXTVARCHAR(MAX)Deprecated; still accepted on RDS
FILESTREAM VARBINARYVARBINARY(MAX)FILESTREAM attribute removed; binary content preserved
Temporal SysEnd = 9999-12-319998-12-31ODBC Driver 17 clamping — informational; open rows are intact