Cómo Migrar Base de Datos SQL Server 2000 a SQL Server 2019 en MU
Guía completa para migrar la base de datos MuOnline de SQL Server 2000 a SQL Server 2019 sin perder personajes, cuentas ni ítems.
Migrar la base de datos de MU Online de SQL Server 2000 a SQL Server 2019 requiere pasos intermedios — no existe una ruta de actualización directa. Esta guía cubre el proceso completo, desde el backup inicial hasta la reconexión del GameServer.
Por qué se requiere un servidor intermediario
SQL Server 2019 no soporta restaurar backups generados por SQL Server 2000 (nivel de compatibilidad 80). La ruta de actualización obligatoria es:
SQL Server 2000 → SQL Server 2008 R2 (intermediario) → SQL Server 2019
Si tu servidor ya corre SQL Server 2008 o 2012, puedes saltarte el primer tramo y comenzar desde el paso del servidor intermediario.
Paso 1 — Backup completo en SQL Server 2000
1.1 Abre el SQL Server Enterprise Manager (SQL 2000) → expande el servidor → clic derecho en MuOnline dentro de Databases → All Tasks → Backup Database.
1.2 Configura el backup:
- Backup type: Database - complete
- Destination: agrega la ruta
C:\Backup\MuOnline_2000.bak - Marca Overwrite existing media
1.3 Haz clic en OK y espera la finalización. Verifica el archivo:
-- Ejecuta en Query Analyzer para verificar integridad
RESTORE VERIFYONLY FROM DISK = 'C:\Backup\MuOnline_2000.bak'
MuOnline_2000.bak a un disco externo u otra máquina antes de continuar. Tener dos copias evita pérdidas irreversibles.Paso 2 — Restaurar en SQL Server 2008 R2 (servidor intermediario)
2.1 En el servidor con SQL Server 2008 R2, abre SQL Server Management Studio (SSMS).
2.2 Clic derecho en Databases → Restore Database:
- To database:
MuOnline_v2008 - From device: selecciona
C:\Backup\MuOnline_2000.bak - Pestaña Options: marca Overwrite the existing database (WITH REPLACE)
2.3 Ejecuta la restauración. Si aparece error de archivo físico (.mdf/.ldf), ajusta las rutas en la pestaña Files:
RESTORE DATABASE MuOnline_v2008
FROM DISK = 'C:\Backup\MuOnline_2000.bak'
WITH MOVE 'MuOnline_Data' TO 'C:\SQL\Data\MuOnline_v2008.mdf',
MOVE 'MuOnline_Log' TO 'C:\SQL\Log\MuOnline_v2008.ldf',
REPLACE;
2.4 Eleva el nivel de compatibilidad a 100 (SQL 2008):
USE master;
ALTER DATABASE MuOnline_v2008 SET COMPATIBILITY_LEVEL = 100;
GO
2.5 Identifica tipos de datos obsoletos antes de continuar:
USE MuOnline_v2008;
GO
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE IN ('text', 'ntext', 'image')
AND TABLE_CATALOG = 'MuOnline_v2008'
ORDER BY TABLE_NAME;
2.6 Convierte cada columna detectada. Ejemplo para T_Character:
-- Convertir tipos obsoletos a equivalentes modernos
ALTER TABLE T_Character ALTER COLUMN MemoInfo NVARCHAR(MAX);
ALTER TABLE T_GuildMember ALTER COLUMN GuildMasterMemo NVARCHAR(MAX);
-- Repite para cada fila devuelta por la consulta anterior
READTEXT o WRITETEXT deben reescribirse con instrucciones estándar SELECT/UPDATE después de convertir estos tipos de columna.Paso 3 — Generar un backup limpio en SQL 2008 R2
3.1 Con la base de datos corregida, genera un backup limpio:
BACKUP DATABASE MuOnline_v2008
TO DISK = 'C:\Backup\MuOnline_2008.bak'
WITH FORMAT, COMPRESSION, STATS = 10;
3.2 Verifica la integridad del backup:
RESTORE VERIFYONLY FROM DISK = 'C:\Backup\MuOnline_2008.bak';
Paso 4 — Restaurar en SQL Server 2019
4.1 Copia MuOnline_2008.bak al servidor que corre SQL Server 2019.
4.2 En SSMS conectado al SQL 2019, ejecuta:
RESTORE DATABASE MuOnline
FROM DISK = 'C:\Backup\MuOnline_2008.bak'
WITH MOVE 'MuOnline_Data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MuOnline.mdf',
MOVE 'MuOnline_Log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MuOnline_log.ldf',
REPLACE, STATS = 5;
GO
4.3 Eleva la compatibilidad a SQL 2019:
ALTER DATABASE MuOnline SET COMPATIBILITY_LEVEL = 150;
GO
4.4 Habilita las opciones de rendimiento recomendadas:
ALTER DATABASE MuOnline SET RECOVERY SIMPLE;
ALTER DATABASE MuOnline SET AUTO_UPDATE_STATISTICS ON;
ALTER DATABASE MuOnline SET PAGE_VERIFY CHECKSUM;
GO
Paso 5 — Recrear login SQL y permisos
Los logins de SQL 2000 no se transfieren automáticamente a SQL 2019.
5.1 Crea el login usado por el GameServer (ej: muonline):
USE master;
CREATE LOGIN muonline WITH PASSWORD = 'TuContrasenaSegura123!',
DEFAULT_DATABASE = MuOnline,
CHECK_EXPIRATION = OFF,
CHECK_POLICY = OFF;
GO
5.2 Mapea el login a la base de datos y asigna permisos:
USE MuOnline;
CREATE USER muonline FOR LOGIN muonline;
ALTER ROLE db_owner ADD MEMBER muonline;
GO
db_owner en producción si quieres separación de responsabilidades. Crea un rol personalizado con permisos solo sobre las tablas que el GameServer necesita (T_Account, T_Character, T_Item, etc.).Paso 6 — Reconfigurar ODBC y GameServer.ini
6.1 En la máquina Windows del servidor de juego, abre el administrador ODBC de 64 bits: C:\Windows\System32\odbcad32.exe
6.2 Pestaña System DSN → Add → selecciona ODBC Driver 17 for SQL Server (descarga desde https://aka.ms/downloadmsodbcsql si no está instalado).
6.3 Configura:
- Name:
GameServer(o el nombre que ya existe en el ini) - Server:
127.0.0.1o la IP del servidor SQL 2019 - Autenticación SQL: login
muonliney contraseña
6.4 Edita GameServer/GameServer.ini:
[ServerInfo]
DBAddr = 127.0.0.1
DBPort = 1433
DBID = muonline
DBPwd = TuContrasenaSegura123!
DBName = MuOnline
DataServer/DataServer.ini para la cadena de conexión. Revisa ambos archivos y actualiza según sea necesario.Paso 7 — Verificación post-migración
7.1 Verifica el conteo de filas en las tablas principales para confirmar integridad de datos:
USE MuOnline;
SELECT 'T_Account' AS Tabla, COUNT(*) AS Total FROM T_Account
UNION ALL
SELECT 'T_Character', COUNT(*) FROM T_Character
UNION ALL
SELECT 'T_Item', COUNT(*) FROM T_Item
UNION ALL
SELECT 'T_Guild', COUNT(*) FROM T_Guild;
7.2 Inicia DataServer.exe y revisa el log en DataServer/Log/DataServer_YYYYMMDD.log — no deben aparecer errores de conexión.
7.3 Inicia GameServer.exe y ConnectServer.exe. Prueba el login con una cuenta GM.
7.4 Confirma que los stats, posiciones e ítems del personaje están intactos:
SELECT Name, Class, Level, Strength, Dexterity, Vitality, Energy
FROM T_Character
WHERE Name = 'NombreDetuPersonaje';
Solución de problemas comunes
| Error | Causa | Solución |
|---|---|---|
Database cannot be opened. It is in the middle of a restore | Restauración incompleta | Ejecuta RESTORE DATABASE MuOnline WITH RECOVERY; |
Login failed for user 'muonline' | Login no mapeado a la base de datos | Repite el Paso 5 — verifica sys.syslogins |
Named Pipes Provider, error 40 | SQL no acepta conexiones TCP | Habilita TCP/IP en SQL Server Configuration Manager |
| GameServer no conecta tras la migración | DSN ODBC apunta a la instancia antigua | Recrea el DSN de sistema según el Paso 6 |
Arithmetic overflow en procedimientos almacenados | Nivel de compatibilidad aún en 80 | Confirma SELECT compatibility_level FROM sys.databases WHERE name = 'MuOnline' — debe devolver 150 |
syscolumns, sysobjects u otras vistas del catálogo de SQL 2000, seguirán funcionando en SQL 2019 mediante el modo de compatibilidad. A largo plazo, es recomendable migrarlos a sys.columns, sys.objects y el resto de las vistas modernas del catálogo.Perguntas frequentes
¿Puedo migrar directamente de SQL 2000 a SQL 2019 sin servidor intermediario?
No. SQL Server 2019 no puede restaurar backups (.bak) creados por SQL Server 2000 directamente. Es obligatorio usar un SQL Server intermediario (2008 R2 o 2012) para elevar el nivel de compatibilidad de 80 a 100, generar un nuevo .bak y recién entonces restaurar en SQL 2019.
¿Hay tablas de MuOnline que se rompen en la migración?
Sí. Las columnas de tipo 'text', 'ntext' e 'image' usadas en versiones antiguas del MuServer (ej: T_Account, T_Character) pueden generar errores. Ejecuta SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE IN ('text','ntext','image') AND TABLE_CATALOG='MuOnline' para identificarlas y convertirlas a VARCHAR(MAX), NVARCHAR(MAX) y VARBINARY(MAX) antes de migrar.
Tras la migración, el GameServer conecta pero no muestra personajes. ¿Qué revisar?
Verifica el DSN ODBC configurado en GameServer/GameServer.ini (entradas DBAddr, DBPort, DBID, DBPwd). En SQL 2019 el driver ODBC cambia — usa 'ODBC Driver 17 for SQL Server' en lugar del driver legacy 'SQL Server'. Recrea el DSN en el panel ODBC de 64 bits (C:/Windows/System32/odbcad32.exe).
¿Necesito cambiar el nivel de compatibilidad después de restaurar en SQL 2019?
Sí. Ejecuta: ALTER DATABASE MuOnline SET COMPATIBILITY_LEVEL = 150; para SQL 2019. El nivel de compatibilidad 80 (SQL 2000) bloquea funciones modernas y puede causar errores en procedimientos almacenados de versiones recientes del MuServer.