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.
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.
Prerequisites — Source (SQL Server)
| Requirement | Notes |
|---|---|
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.
| Requirement | Notes |
|---|---|
| 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
CREATE DATABASE automatically before the first schema
object is written.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.
SOURCE DATABASE
TARGET DATABASE
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.
SOURCE OBJECTS
dbo.Users 33,100 rows
dbo.Products 7,400 rows
dbo.Orders 142,000 rows
dbo.AuditLog 892 rows (temporal)
… (58 more)
COMPATIBILITY NOTES
• NTEXT / IMAGE / TEXT: deprecated, accepted on RDS
• FILESTREAM columns: migrated as VARBINARY(MAX)
• Temporal SysEnd=9999-12-31: will be clamped (ODBC Driver 17)
SysEnd=9999-12-31 clamping — this is informational and expected
(see Known Issues).Select Tables
Switch to the Migration tab. Click Load Tables from Source, confirm all tables are checked, then configure migration options.
rdsadmin from all discovered object lists. Do not manually
include it — attempting to migrate RDS system objects will fail with a
permissions error.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.
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.Verify & Export Report
- Click Verify Data Integrity — compares source vs. target row counts for every migrated table and logs any mismatches to the Migration Log.
- Spot-check temporal tables: confirm that
SysEndrows stored as9998-12-31are present and match expected counts. - Click Export Report (enabled once migration finishes) to save an HTML/text summary of all tables, row counts, type conversions applied, and any warnings.
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
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';
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
| Issue | Details & 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 Type | Target Type | Note |
|---|---|---|
| All standard T-SQL types | Same | Same engine — 1:1 mapping |
| NTEXT | NVARCHAR(MAX) | Deprecated; still accepted on RDS |
| IMAGE | VARBINARY(MAX) | Deprecated; still accepted on RDS |
| TEXT | VARCHAR(MAX) | Deprecated; still accepted on RDS |
| FILESTREAM VARBINARY | VARBINARY(MAX) | FILESTREAM attribute removed; binary content preserved |
| Temporal SysEnd = 9999-12-31 | 9998-12-31 | ODBC Driver 17 clamping — informational; open rows are intact |