Compartir a través de


La copia de seguridad de una base de datos de SQL Server mediante una aplicación de copia de seguridad de VSS puede generar un error en algunas bases de datos.

Este artículo le ayuda a resolver el problema que se produce al usar aplicaciones basadas en Servicios de instantáneas de volumen (VSS) para realizar copias de seguridad de las bases de datos de SQL Server.

Versión del producto original: SQL Server
Número de KB original: 2014054

Síntomas

Cuando se usan aplicaciones basadas en Volume Shadow Copy Services (VSS) para realizar copias de seguridad de las bases de datos de SQL Server, la operación de copia de seguridad puede producir un error si el nombre de la base de datos contiene espacios iniciales o finales o caracteres no imprimibles.

También puede producirse el mismo problema al intentar realizar una copia de seguridad de un volumen que contenga una de estas bases de datos.

Causa

Las aplicaciones de copia de seguridad basadas en VSS usan SQLServerWriter (SQLWriter) para consultar la información del componente de metadatos del escritor para determinar qué archivos de base de datos deben realizar copias de seguridad. SQLWriter crea el componente de metadatos de escritor mediante la API de VSS y contiene tres conjuntos de datos:

  • Información de identificación y clasificación del escritor
  • Especificaciones de nivel de escritor
  • Datos de componentes

Cuando un nombre de base de datos contiene espacios iniciales o finales o caracteres no imprimibles, es posible que este documento no se cree correctamente. Como resultado, las aplicaciones basadas en VSS no podrán realizar copias de seguridad de estas bases de datos ni de ningún volumen que contenga estas bases de datos.

Solución

Cambie el nombre de todas las bases de datos que contengan espacios iniciales o finales o caracteres no imprimibles en sus nombres. Puede usar la siguiente consulta para buscar la presencia de estos caracteres delante o al final de los nombres:

SELECT database_id AS DatabaseID, '##'+name+'##' AS DatabaseName FROM sys.databases  

Salida de ejemplo:

DatabaseID         DatabaseName
8                  ##AdventureWorks##          -- DB name is fine
15                 ## DBWithLeadingSpace##     -- DB name contains leading spaces
17                 ##DBWithTrailingSpace ##    -- DB name contains trailing spaces  

Nota:

En la consulta anterior, si el nombre de la base de datos contiene caracteres no imprimibles, se pueden imprimir como espacios o como elementos no deseados.

Más información

Los escritores (como SQL Writer) agregan componentes mediante IVssCreateWriterMetadata::AddComponent, especificando la siguiente información de componente:

  • Tipo
  • Nombre
  • Ruta de acceso lógica (si existe)
  • Característica compatible
  • Capacidad de selección
  • Metadatos que usará el escritor durante la restauración
  • Información de visualización
  • Información de notificación

C (Servicio de instantáneas de volumen) son colecciones de archivos que forman una unidad lógica con fines de copia de seguridad y restauración. Todos los archivos de un componente (excepto los excluidos explícitamente) deben realizar copias de seguridad y restaurarse como una unidad.

Para obtener más información, consulte Metadatos de VSS.

Puede usar uno o varios de los métodos siguientes para identificar si tiene este problema:

  • Varias aplicaciones de copia de seguridad pueden generar mensajes personalizados sobre SqlServerWriter (o SQLWriter) que no se encuentran.

  • Al ejecutar desde un símbolo del sistema en el equipo de SQL Server de destino, no verá SqlServerWriter en la salida.

    vssadmin list writers