none
Error en copia a unidad externa RRS feed

  • Pregunta

  • Buenas,

    Estoy intentando copiar desde mi SQL Server a una ruta UNC en otro servidor, en el cual sobre la carpeta establecí permisos para una cuenta de dominio configurada como de servicio digamos, en el agente de SQL.

    Sin embargo al ejecutar el job que deberia utilizar dicho usuario (supongo) da error, de igual forma si ejecuto el script directamente, cuando lo ejecuto directamente me arroja el siguiente error:

    Msg 3201, Level 16, State 1, Line 11
    Cannot open backup device '\\x.x.x.x\backup.BAK'. Operating system error 67(The network name cannot be found.).
    Msg 3013, Level 16, State 1, Line 11
    BACKUP DATABASE is terminating abnormally.

    Cual podria ser la razón? gracias.

    Saludos

    miércoles, 1 de julio de 2020 13:36

Todas las respuestas

  • Verifica la liga que te mando para ver si resuelves tu problema

    Operating System Error 67


    IIslas Master Consultant SQL Server

    miércoles, 1 de julio de 2020 16:48
  • Hola cmuska,


    Gracias por levantar tu consulta en los foros de msdn. Para poder decirte con exactitud cuál es el problema que se presenta a la hora en que intentas copiar desde tu SQL Server a una ruta UNC en otro servidor, tendrías que darme más detalles (logs de errores), porque existen un gran número de posibilidades. Lo que veo más probable en cuanto a lo que describes es que sea un problema con la ruta UNC o con algún permiso:

    * Usa una ruta UNC apropiada, por ejemplo: \\NombreDeServidor\ruta.

    * Revisa los permisos y configuraciones: Asegúrate de que la seguridad de la carpeta de respaldo da acceso al usuario que ejecuta el servicio SQL Server en el servidor SQL (él debe guardar el archivo de respaldo en esa carpeta y, como tal, debe tener acceso de lectura / escritura).

    En cuanto a los problemas que se presentan cuando intentas utilizar el script directamente: el Mensaje 3201, nos dice que no se logra abrir el dispositivo de respaldo ("backup device"), el Error del sistema operativo 67 nos dice que el nombre de la red no se puede encontrar y finalmente, el Mensaje 3013 nos informa que como una consecuencia de lo anterior, no se pudo llevar a cabo el backup de la base de datos. Pienso que todo esto está siendo causado por la ruta que utilizas en tu script cuando lo ejecutas. Asegúrate de que la ruta sea accesible desde SQL Server, ya que él siempre intentará acceder a la ruta desde sí mismo. También asegúrate de que SQL Server cuente con los permisos necesarios para realizar esta operación.

    Pienso que de ser acertado mi diagnostico en cuanto al problema que se presenta cuando ejecutas el script directamente, esto es lo más sencillo de solucionar.


    Saludos cordiales

     

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    miércoles, 1 de julio de 2020 23:54
    Moderador
  • Buenas Gabriel,

    Bueno la ruta que estoy utilizando ahora mismo es "\\IP\ruta"

    En cuanto a los permisos, el usuario que ejecuta el servicio de SQL Agent es un usuario de dominio que de hecho tiene permisos de más, no es lo ideal pero asi lo he encontrado, y sobre la carpeta también he comprobado mediante el acceso efectivo de los permisos NTFS que tiene lo necesario.

    El servicio de SQL en sí lo ejecuta el por defecto MSSQLSERVER

    Y el log history me dice lo siguiente: The job failed: The job was invoked by User dominio\administrador. The last step to run was stpe 1(nombrejob)

    Executed as user: dominio\domainuser. The server principal "dominio\domainuser" is not able to access the database "database" under the current security content [SQLSTATE 08004][ERROR 916] BACKUP DATABASE is terminating abnormally [SQLSTATE 42000][Error 3013]

    "Domainuser" vendria siendo el usuario con permisos sobre el recurdo y a identidad del Agente SQL, el cual también realiza otro job pero sobre una carpeta del mismo servidor y sin problema.

    Saludos

    jueves, 2 de julio de 2020 9:16
  • Hola cmuska,


    Me queda claro que ya revisaste todo el tema de los permisos, pero podrías verificar si tu usuario está mapeado a la base de datos en la que está intentando iniciar sesión. Según lo que estuve investigando en cuanto al mensaje de error que se te presenta, está asociado a esto. Los inicios de sesión de SQL se definen a nivel del servidor y deben asignarse a usuarios en bases de datos específicas. En el explorador de objetos SSMS, en el servidor que deseas modificar, expande Seguridad, Inicios de sesión y luego haz doble clic en el usuario apropiado. Esto abrirá el cuadro de diálogo "Propiedades de inicio de sesión". Selecciona Asignación de usuario, que mostrará todas las bases de datos en el servidor, con las que tengan seleccionada una asignación existente. Desde aquí puedes seleccionar bases de datos adicionales (y asegurarte de seleccionar a qué roles en cada base de datos debe pertenecer el usuario), luego haz clic en Aceptar para agregar las asignaciones. Estos mapeos pueden llegar a desconectarse después de una restauración u operación similar. En este caso, el usuario aún puede existir en la base de datos, pero en realidad no está asignado a un inicio de sesión. Puedes ejecutar lo siguiente para restaurar el inicio de sesión en caso de que esta sea la causa:

    USE {database};
    ALTER USER {user} WITH login = {login}

    Puedes ejecutar este código para ver si devuelven un hash diferente. De ser así, hay un problema y la consulta los sincronizará.


    use <Database>
    EXEC  sp_change_users_login @Action='update_one', @UserNamePattern='<userLogin>',@LoginName='<userLogin>';
    
    SELECT sid FROM sys.sysusers WHERE name = '<userLogin>'
    SELECT sid FROM sys.syslogins WHERE name = '<userLogin>';


    Puedes probar volver a sincronizar la referencia de la cuenta GUID del usuario con la base de datos en cuestión (usando "sp_change_users_login" como lo harías después de restaurar una db). Este script vuelve a sincronizar las cuentas:


    USE <your database>
    GO
    
    -------- Reset SQL user account guids ---------------------
    DECLARE @UserName nvarchar(255) 
    DECLARE orphanuser_cur cursor for 
          SELECT UserName = su.name 
          FROM sysusers su
          JOIN sys.server_principals sp ON sp.name = su.name
          WHERE issqluser = 1 AND
                (su.sid IS NOT NULL AND su.sid <> 0x0) AND
                suser_sname(su.sid) is null 
          ORDER BY su.name 
    
    OPEN orphanuser_cur 
    FETCH NEXT FROM orphanuser_cur INTO @UserName 
    
    WHILE (@@fetch_status = 0)
    BEGIN 
    --PRINT @UserName + ' user name being resynced' 
    exec sp_change_users_login 'Update_one', @UserName, @UserName 
    FETCH NEXT FROM orphanuser_cur INTO @UserName 
    END 
    
    CLOSE orphanuser_cur 
    DEALLOCATE orphanuser_cur

    Otra causa común de este error es la base de datos en particular a la que está apuntando la conexión. En la ventana de conexión estándar de SQL Server (donde ingresas tus credenciales), revisa la pestaña de Propiedades de conexión (si no la ves, presiona el botón “Options >>”) para verificar que estas eligiendo la base de datos correcta para conectarte. Si Accidentalmente dejas la opción Conectar a la base de datos aquí a como la habías configurado en una sesión anterior, esta podría ser la causa.

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 2 de julio de 2020 22:48
    Moderador
  • Hola cmuska

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

    Espero tu respuesta.  

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 


    Saludos cordiales

    Gabriel Castro

    lunes, 6 de julio de 2020 15:28
    Moderador