none
Traspaso Tabla a otro servidor RRS feed

  • Pregunta

  • Estimados.

    En el servidor A tengo un job que tiene varios pasos, uno de ellos un calculo que se deja en una tabla llamada "Calculo"

    Pues bien luego del paso que hace este caculo necesito traspasar dicha tabla a una base de datos del servidor B.

    En el Servidor A tengo linkeado el servidor B, hice la prueba de hacer un Select Into pero demora mucho.

    Que alternativa me aconsejan que pueda utilizar y que la pueda programar como paso del job del servidor A

    Estaba viendo BULK INSERT pero no se como traspasar desde un SQL a otro , siempre lo hice de archivos planos a SQL.

    Saludos Cordiales.

    CristianPM


    DBA SQL Server Santiago/Chile

    martes, 26 de mayo de 2015 16:44

Respuestas

  • CMAPM,

    Parado del lado de origen del linked server (si vas de server A para server B, el linked server debe estar en el A)

    en el caso de querer usar openquery debes realizar lo siguiente:

    insert openquery(nombre linked server destino ,'select * from base.esquema.tabla a insertar')

    select * from tabla a sacar datos;

    Espero te sirva!!

    saludos!!!

    • Marcado como respuesta CMAPM miércoles, 27 de mayo de 2015 15:10
    miércoles, 27 de mayo de 2015 15:00
  • CMAPM,

    encontre q no se puede truncar via linked server.... lo que podrias realizar es lo siguiente

    EXEC nombrelinkedserver.baseaeliminardatos.sys.sp_executesql N'truncate table esquema.tabla'

    tene en cuenta que las opciones de RPC en el linked server deben estar configuradas en true.

    espero te sirva!!

    saludos!

    • Marcado como respuesta CMAPM miércoles, 27 de mayo de 2015 17:04
    miércoles, 27 de mayo de 2015 15:36

Todas las respuestas

  • CMAPM,

    buen dia. como estas? Yo utilizaria openquery :

    https://msdn.microsoft.com/es-AR/library/ms188427.aspx

    pero tambien probaria que es lo que esta pasando en el server dos que demora tanto..... tenes alguna limitacion de ese lado?? o utilizas todos los recursos disponibles??

    saludos!

    martes, 26 de mayo de 2015 16:55
  • Te paso algunos ejemplos...

    OPCION 1: Generando Scripts de SQL (Esquema y Datos)

    1) click derecho sobre tu base de datos/ tarear/Generar scripts
    
    2)Siguiente/ Seleccionar objeto de base de datros especifico/tablas
    
    3)Especificar como se debe de Guardar / Avanzadas / Tipo de datos que debe incluir en ..Esquema y Datos
    
    4)Siguiente y Finalizar
    
    De tal forma generas tu scripts junto con los datos

    OPCION 2 : Utilizando Bull insert

     bulk insert dbo.Archivo      --aqui va la base de datos y la tabla
    	from 'C:\archivo.txt' -- aqui va la ruta del archivo que contiene los datos
    	with
    	(
    	fieldterminator = '|'--aqui se especifica el delimitador, en este caso es pipeline
    	)

    OPCION 3: inser into Select

    insert  into dbo.baseDatos
    select * from Servidor.dbo.BaseDATOS
    OBS: Favor vota si te es útil la información.
    Saludos
    Bader Molinas - Paraguay
    https://deveintel.wordpress.com/


    martes, 26 de mayo de 2015 17:14
  • Hola

    Gonzalo:

    La verdad miro y miro y no se como hacerlo:

    Veo este ejemplo de Microsoft del link que me pasaron

    INSERT OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles')
    VALUES ('NewTitle');

    Lo que yo necesito es:

    Insert into [192.168.1.100].[Base].[dbo].[Tabla]
    Select * From TablaOrigen

    No veo como ese script lo transformo para usar OPENQUERY.

    Bader:

    No me sirve la opcion 3, pues es la que ocupo ahora y se demora mucho, que es lo que habia posteado al crear el tema.

    La opcion 1 tampoco me sirve, pues necesito que la tarea sea automatica y no tener que hacerlo de manera manual.

    La opción 2 la ocupo tal como esta en el ejemplo, es decir con un archivo de texto, por eso repito necesito hacerlo desde una tabla del servidor A a una tabla del servidor B donde tengo configurado un link server, si la forma es sin link server bienvenido sea tambien, pero los datos estan en tablas


    Saludos Cordiales.

    CristianPM.


    DBA SQL Server Santiago/Chile



    • Editado CMAPM miércoles, 27 de mayo de 2015 14:32
    miércoles, 27 de mayo de 2015 14:30
  • CMAPM,

    Parado del lado de origen del linked server (si vas de server A para server B, el linked server debe estar en el A)

    en el caso de querer usar openquery debes realizar lo siguiente:

    insert openquery(nombre linked server destino ,'select * from base.esquema.tabla a insertar')

    select * from tabla a sacar datos;

    Espero te sirva!!

    saludos!!!

    • Marcado como respuesta CMAPM miércoles, 27 de mayo de 2015 15:10
    miércoles, 27 de mayo de 2015 15:00
  • Mil gracias Gonzalo.

    Funcionando !!!

    Mi duda era justamente esa, que abajo de openquery poner el select de la tabla origen, era facil pero de verdad no veia como jeje.

    Saludos y gracias nuevamente.

    Aprovecho de hacer otra consulta.

    Antes de hacer el insert quisiera hacer un truncate desde A a B atravez del link server, pero no se que permiso otrogar al usuario del linked server.


    DBA SQL Server Santiago/Chile

    miércoles, 27 de mayo de 2015 15:12
  • CMAPM,

    buenisimo que funciono!! con respecto al truncate los permisos que debes otorgar son los siguientes:

    (fragmento documentacion oficial)

    Permissions

    table_name." data-guid="68543476-3e39-447d-94c6-3d2e2e65bacd" id="mt36" xml:space="preserve">The minimum permission required is ALTER on table_nameTRUNCATE TABLE permissions default to the table owner, members of the sysadmin fixed server role, and the db_owner and db_ddladmin fixed database roles, and are not transferable. 

    saludos!

    miércoles, 27 de mayo de 2015 15:22
  • Trato:

    En servidor B

    GRANT ALTER On Tabla To usuario

    En servidor A:

    EXEC('TRUNCATE TABLE [NombreLinkServer].[BF].[dbo].[Tabla]')

    Mensaje:

    Mens. 4701, Nivel 16, Estado 1, Línea 1
    Cannot find the object "Tabla" because it does not exist or you do not have permissions.


    DBA SQL Server Santiago/Chile


    • Editado CMAPM miércoles, 27 de mayo de 2015 15:23
    miércoles, 27 de mayo de 2015 15:22
  • CMAPM,

    encontre q no se puede truncar via linked server.... lo que podrias realizar es lo siguiente

    EXEC nombrelinkedserver.baseaeliminardatos.sys.sp_executesql N'truncate table esquema.tabla'

    tene en cuenta que las opciones de RPC en el linked server deben estar configuradas en true.

    espero te sirva!!

    saludos!

    • Marcado como respuesta CMAPM miércoles, 27 de mayo de 2015 17:04
    miércoles, 27 de mayo de 2015 15:36
  • Le di permisos lo ejecute y funciono perfecto.

    Gracias Gonzalo.


    DBA SQL Server Santiago/Chile

    miércoles, 27 de mayo de 2015 17:04