Problema con xp_cmdshell y las "

22/12/2004 - 11:28 por Salvador Ramos | Informe spam
Hola a todos:

Tengo el siguiente mandato, para compactar una base de datos Access, que
funciona perfectamente desde línea de comandos.
"C:\Archivos de programa\Microsoft Office\OFFICE11\msaccess"
"F:\Andamur\Tmp Importacion\Extranet\ExAndamur.mdb" /compact

Ahora quiero ejecutarlo con xp_cmdshell, y me da error. Sé que el problema
lo tengo en las comillas dobles, pero no logro dar con la solución (no puedo
quitar las comillas dobles porque la ruta contiene espacios).

Podeis indicarme cómo hacerlo ?

master..xp_cmdshell ' "C:\Archivos de programa\Microsoft
Office\OFFICE11\msaccess" "F:\Andamur\Tmp
Importacion\Extranet\ExAndamur.mdb" /compact '

No funciona, me indica que
"C:\Archivos" no se reconoce como un comando externo o externo.
Efectivamente ese no es el comando, ya que lo está truncando por el primer
espacio en blanco que encuentra.

También he intentado hacer un bat y ponerlo en una ruta sin espacios, y
tampoco funciona (en cambio si ejecuto el bat desde el explorador de windows
si que funciona):
xp_cmshell 'F:\Andamur\CompactarExAndamur.bat'
En este caso lo estoy probando desde el query analyzer y se me queda el
proceso ejecutandose infefinidamente.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

Preguntas similare

Leer las respuestas

#6 Salvador Ramos
22/12/2004 - 16:49 | Informe spam
Hola:

En primer lugar quiero agradecerte tu acertada respuesta, y decirte que aquí
todos estamos para aprender cosas nuevas y compartir lo que ya sabemos
(aludiendo a la famosa frase del maestro fernando guerrero). Además decirte
que me has sacado los colores, que ni soy ningún gurú, ni sé tanto como me
gustaría sobre sql server. Y por supuesto que soy uno más del grupo y que a
veces también necesito ayuda como todo el mundo :-)

La verdad que hasta ahora prácticamente no he necesitado utilizar
xp_cmdshell para casi nada. Siempre que he podido encontrar otra alternativa
la he aplicado.

Ahora voy a contaros en detalle el problema completo y el porqué mi idea de
utilizar este procedimiento almacenado, pero por supuesto, si hay otra
alternativa, estupendo, la aplicaré.

Quiero tener accesible para consultar en la web de la empresa un subconjunto
de datos de los que tengo en local en SQL Server, desde una aplicación
asp.net que accederá a una base de datos access (no puedo contratar en el
hosting sql server por temas de presupuesto, y porque el volumen de datos
será muy pequeño y serán de poca importancia). Para ello necesito hacer tres
procesos:
1) Actualizar en local la base de datos Access mediante DTS
2) Actualizar unos campos que quiero tener encriptados. Para ello he
generado una aplicación de consola (un .exe) con vb.net para aprovechar las
clases de seguridad del .net framework y realizar la encriptación
3) Compactar la base de datos access (me refiero a ejecutar la opción del
menú herramientas de access que permite esto, no a generar un .zip o
similar), ya que hago un borrado masivo y una nueva inserción de los datos
actualizados, y esto hace que quede espacio que puedo comprimir, para así
hacer un envío más rápido y estar consumiendo menos espacio donde tengo el
hosting.
4) subir el .mdb local al hosting mediante FTP (esto lo haré mediante un
.bat).

Mi idea es que el punto 2) se ejecute desde el propio paquete DTS como un
proceso más una vez finalizado el punto 1), y así lo he hecho, llamando al
.exe con xp_cmdshell
Hasta aquí ningún problema, ya lo tengo probado y todo va perfectamente.

Ahora, he querido aplicar lo mismo para hacer la compactación del .mdb, para
ello access permite ser invocado desde la línea de comandos de la siguiente
forma:
msaccess MiBd.mdb /compact
el problema primero ha sido que debo incluir la ruta del fichero
msaccess.exe y la del fichero MiBd.mdb, que era donde tenía el problema de
las comillas, que ya está resuelto. Aquí me ocurre lo ya me anticipó
qwalgrande, que se no compacta y se queda ejecutandose indefinidamente el
proceso msaccess.exe

Qué alternativas me proponeis para completar los puntos 3) y 4) del proceso
?

Muchas gracias

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"qwalgrande" <qwalgrande*nospam*@yahoo.es> escribió en el mensaje
news:
Mostrar la cita
realizar
Mostrar la cita
tarea,
Mostrar la cita
recognized
Mostrar la cita
lanzar
Mostrar la cita
habrá
Mostrar la cita
matarla.
Mostrar la cita
obtengo
Mostrar la cita
general
Mostrar la cita
problema
Mostrar la cita
puedo
Mostrar la cita
primer
Mostrar la cita
windows
Mostrar la cita
#7 Maxi
22/12/2004 - 17:12 | Informe spam
Salva:

Pregunta de curioso nomas:

Para que desde Sql compactar una BDD Access? en mi modelo mental eso no me
cierra :(


Salu2
Maxi


"Salvador Ramos" escribió en el
mensaje news:eRZk%
Mostrar la cita
#8 Salvador Ramos
22/12/2004 - 17:20 | Informe spam
Si, claro no es lógico, pero te explico el motivo:

Todo este proceso se va a ejecutar de forma programada. Así si lo hago en un
paquete DTS, puedo establecer un flujo para que el siguiente paso se ejecute
al concluir correctamente el paso que se está ejecutando (los enlazo en el
paquete con líneas verdes indicando el flujo).
Si los hago de forma independiente, tendré por un lado que programar el
paquete dts que genera los datos, y luego de forma totalmente independiente
programar una tarea en windows que ejecute la compactación. En este caso
tengo que estar calculando tiempos para que siempre se ejecute después de
haber finalizado el DTS, y además no tengo garantía de que se ejecute sólo
si ha sido correcta la ejecución del DTS.
En fin, es sólo por tenerlo todo en un sólo flujo de trabajo :-)

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Maxi" escribió en el mensaje
news:
Mostrar la cita
escribió
Mostrar la cita
(no
Mostrar la cita
y
Mostrar la cita
el
Mostrar la cita
ningun
Mostrar la cita
#9 Salvador Ramos
22/12/2004 - 17:24 | Informe spam
Bueno, la verdad que me he ido cegando yo mismo :-), os cuento lo que estaba
haciendo:

Estaba incluyendo en el paquete dts una 'tarea de ejecución de SQL' y en
ella sólo había una línea que era la ejecución de xp_cmdshell, con lo
sencillo que es incluir una 'tarea de ejecución de proceso' y allí indicar
el mandato win32 a ejecutar y sus parámetros. En fin, que a veces a uno se
le cierra la mente y no ve el camino lógico y sencillo :-)

Muchas gracias a todos.

Pd. Necesito unas vacaciones, pero ya la consumí todassss :-(

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Salvador Ramos" escribió en el
mensaje news:%
Mostrar la cita
aquí
Mostrar la cita
decirte
Mostrar la cita
a
Mostrar la cita
alternativa
Mostrar la cita
de
Mostrar la cita
subconjunto
Mostrar la cita
tres
Mostrar la cita
las
Mostrar la cita
para
Mostrar la cita
siguiente
Mostrar la cita
proceso
Mostrar la cita
pueda
Mostrar la cita
para
Mostrar la cita
tu
Mostrar la cita
la
Mostrar la cita
lanzar
Mostrar la cita
temprano
Mostrar la cita
ya
Mostrar la cita
que
Mostrar la cita
y
Mostrar la cita
el
Mostrar la cita
#10 Maxi
22/12/2004 - 17:27 | Informe spam
ok, pero una duda no: vos comparaste la BDD access cuanto disminuye? porque
ademas de estar recargando al servidor con una operacion de estas, quizas el
costo benefico no tenga sentido, o sea: has notado una considerada reduccion
en el archivo MDB? y este archivo MDB pesa mucho ?


Salu2
Maxi


"Salvador Ramos" escribió en el
mensaje news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida