Restaurar la base de datos del archivo de respaldo de una versión / edición diferente

11

Leí que es posible restaurar una base de datos en SQL Server siempre que restaure una versión anterior a una nueva, por razones de compatibilidad con versiones anteriores.

¿Alguien sabe de antemano si puede restaurar una base de datos desde un archivo * .bak para diferentes ediciones de SQL Server? Estamos moviendo una base de datos muy grande a través de FTP que tomará un par de días, por lo que preferimos hacer esto solo una vez. Si nadie responde cuando transferimos la base de datos a través de FTP, obviamente lo intentaremos y veremos si funciona mediante pruebas, y responderemos nuestra propia pregunta.

A continuación se muestra una consulta para obtener detalles de la versión de SQL Server. El productversionestá en el formato {major revision}.{minor revision}.{release revision}.{build number}. En mi caso, {release revision}tiene un valor 5500para la fuente y 5512para el destino. Entonces eso se ve bien. Sin embargo, el editiones diferente.

Consulta:

SELECT 
  SERVERPROPERTY('productversion'), 
  SERVERPROPERTY('productlevel'), 
  SERVERPROPERTY('edition')

Base de datos de origen:

10.0.5500.0
SP3
Developer Edition (64-bit)

Base de datos de destino:

10.0.5512.0
SP3
Enterprise Edition (64-bit)
MacGyver
fuente
¿Qué hay de restaurar un archivo de copia de seguridad de SQL Server 2012 Business Intelligence Edition en una instancia de desarrollador?
sdg320

Respuestas:

15

De Desarrollador a Empresa estará bien, solo asegúrese de que si está utilizando licencias de procesador, tenga licencias en el servidor de destino para cubrir todas las CPU. Y no es suficiente solo ocultarlos de SQL, si están físicamente conectados a la máquina, usted es responsable de ellos.

Además, cuando pasa de una versión inferior a una versión superior, la versión de su base de datos aumentará. Hay algunos escenarios en los que esto puede ser problemático; por ejemplo, si está utilizando 15,000 particiones compatibles con una compilación específica de 2008, no funcionará cuando actualice a una compilación específica de 2008 R2. También puede depender de optimizaciones (y tener soluciones alternativas) que en realidad son errores en una compilación anterior, pero que se corrigen en la nueva compilación, y esto puede conducir a un peor rendimiento. También es vital revisar cualquier indicador de rastreo en uso en la fuente y determinar si también deben habilitarse en el destino. No importa trabajos, inicios de sesión, etc.

Por supuesto que no puedes ir hacia atrás. Nunca he intentado una degradación menor como 10.0.5512 -> 10.0.5500, pero definitivamente no es posible bajar en service pack o versión. Por lo tanto, si tiene una base de datos de 2012 en su instancia de Developer Edition y desea ponerla en producción en su instancia de 2008, tendrá que trabajar mucho para usted (consulte aquí y aquí ), especialmente si ha utilizado las funciones de 2012 .


Pero para cubrir otros casos que podrían hacer que las personas se enfrenten a esta pregunta (por ejemplo, alguien quiere ir de Desarrollador -> Estándar o Empresa -> Express o lo que sea) ...

Hay otras ediciones -> actualizaciones de ediciones que no funcionarán tan bien, por ejemplo, de Desarrollador -> Express si ha utilizado alguna función que no es compatible con Express (y lo mismo ocurre con cualquier edición que no sea Enterprise). Algunos ejemplos de características que no podrá usar en ediciones de nivel inferior (en cuyo caso la restauración morirá en el momento en que intente poner la base de datos en línea):

  • Fraccionamiento
  • Cambiar captura de datos
  • Compresión de datos
  • Cifrado de datos transparente

No sé si hay una manera de saber esto directamente desde el archivo .BAK (estoy seguro de que hay algo de magia que se puede extraer de los encabezados de página en alguna parte, o si tienes un fin de semana para grabar con un editor hexadecimal) , pero mientras la base de datos aún está intacta en la instancia de origen, siempre puede hacer lo siguiente para ver si está utilizando alguna función que esté disponible debido a la SKU en la que se encuentra:

SELECT feature_name FROM sys.dm_db_persisted_sku_features;

No estoy seguro de si SQL Server Audit debería estar en esa lista: la exclusividad de edición de esa característica ha cambiado, por lo que probablemente dependa de lo que esté haciendo con ella. Hay otras cosas que podría estar usando pero que no aparecerán en el DMV (algunas porque están en su código, que el DMV no analiza, y otras porque su base de datos depende de elementos externos como el Agente SQL Server , Service Broker, etc.):

  • reflejo
  • ciertas formas de replicación
  • envío de registro
  • instantáneas de la base de datos
  • indexación en línea
  • vistas particionadas distribuibles actualizables
  • compresión de respaldo
  • gestión basada en políticas
  • guías de plan
  • correo de la base de datos
  • planes de mantenimiento
  • búsqueda de texto completo

También hay casos en los que no podrá pasar de Developer a Express debido a las limitaciones de tamaño de archivo (las bases de datos Express están limitadas a 10 GB en tamaño de archivo de datos total).

Por supuesto, puede haber otras trampas de las que no se le advertirá: no evitarán la migración, pero pueden conducir a un rendimiento muy diferente en el objetivo. Ejemplos:

  1. Diferentes limitaciones de memoria / CPU en la edición de destino (o incluso el sistema operativo subyacente en el destino). Esto mordió a muchas personas que pasaron de 2008 R2 Enterprise a 2012 Enterprise (CAL), donde el servicio está limitado artificialmente a los primeros 20 núcleos). Esto puede conducir a diferencias de rendimiento sencillas (por ejemplo, no hay suficiente memoria para satisfacer una consulta, o un rendimiento de consulta en paralelo mucho más lento); los más sutiles incluyen opciones de planes que se hacen debido al diferente hardware subyacente.
  2. La confianza en características como la coincidencia de vista indexada en el origen no se respetará automáticamente en el destino sin cambiar el código fuente para usar NOEXPAND. Y es posible que ni siquiera se dé cuenta de que esta capacidad es la razón por la cual sus consultas se ralentizan repentinamente.
  3. Lo mismo ocurre con las operaciones de índice en paralelo y probablemente con muchas otras optimizaciones que no se me ocurren en este momento (afortunadamente, trabajo casi exclusivamente en el espacio Enterprise, por lo que no tengo que preocuparme por las limitaciones de las ediciones inferiores en la mayoría de los casos). )

ACTUALIZACIÓN basada en este duplicado :

Puede haber casos en los que intente restaurar una base de datos de una edición determinada a una edición menor (incluso en la misma versión), y obtenga errores que no son útiles :

RESTORE falló para el servidor 'server \ instance'.
RESTORE no pudo iniciar la base de datos 'databasename'.

Esto no es muy intuitivo. Sin embargo, si profundiza en los registros de eventos de SQL Server, verá más errores útiles (solo un ejemplo):

La base de datos 'databasename' no se puede iniciar porque parte de la funcionalidad de la base de datos no está disponible en la edición actual de SQL Server.
La base de datos 'databasename' no se puede iniciar en esta edición de SQL Server porque contiene una función de partición '_dta_pf__9987'. Solo la edición Enterprise de SQL Server admite funciones de partición.

Ahora, eso no es del todo cierto: también puede restaurar a la Edición de evaluación o la Edición de desarrollador, pero eso no viene al caso. Para restaurar esta base de datos, básicamente tiene dos opciones:

  1. Restaurar a una edición apropiada de SQL Server, lo que significará localizar o instalar una nueva instancia.
  2. Restaure la copia de seguridad en el servidor de origen como una nueva base de datos con un nombre diferente, elimine todas y cada una de las características de Enterprise, luego haga una copia de seguridad de la base de datos nuevamente y restaure eso en la edición menor. (En este caso específico, dejé el nombre de la función de partición en el mensaje de error, porque de todos modos esto parece descartable: fue creado por el Asesor de ajuste de motor de base de datos y puede haberlo hecho alguien que no lo hizo saber lo que estaban haciendo. Este no es siempre el caso).

Una variación en (2) sería simplemente eliminar la partición y otras características de la base de datos de origen, y tomar otra copia de seguridad. Pero si no está roto ...

Aaron Bertrand
fuente
3

Developer y Enterprise son el mismo software, solo que con diferentes acuerdos de licencia.

Debería estar bien restaurando esta base de datos en su destino.

Mark Henderson
fuente