<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8439314456074268917</id><updated>2011-08-03T11:05:07.162-07:00</updated><title type='text'>M-ROAD</title><subtitle type='html'>Este blog contiene pequeños articulos, tipo "Preguntas y Respuestas" sobre cosas del dia a dia que me han pasado, las he visto pasar, o simplemente preguntas que me han hecho!!. Mi tema preferido son las bases de datos, en especial el area de Business Intelligence, pero quiza publique entradas con cosas de AJAX, LinQ, Arquitectura de Software, etc....</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://abreulj.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8439314456074268917/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://abreulj.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Leonel J Abreu S</name><uri>http://www.blogger.com/profile/04036477726762199969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_-DAUVdz78ZM/Scrv9GM6lDI/AAAAAAAAACw/udaUprfT12o/S220/n1140373566_279242_6476.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8439314456074268917.post-2511368287791513101</id><published>2009-06-03T19:23:00.000-07:00</published><updated>2009-06-03T19:38:30.457-07:00</updated><title type='text'>Reflexión entre estaciones...</title><content type='html'>Hola estimados lectores, tal como se los prometí no me tomé un año para mi próximo post, sin embargo, vuelvo con otra reflexión, todo comenzó el viernes 3 de abril, cuando estaba almorzando en Las Mercedes y debía ir a Los Ruices que es donde se encuentra el cliente.&lt;br /&gt;&lt;br /&gt;El proyecto consistía en una Entonación OLAP, las consultas que se ejecutaban sobre un cubo de Analysis Services 2005 estaban muy pesadas, en esos casos, lo que toca hacer es ver no sólo la instancia de Analysis Services, sino, el modelo estrella o copo de nieve según sea el caso en el Storage Engine, al ir pensando en ello, las estaciones recorridas fueron: Chacaíto, Chacao, Altamira, Miranda, Los Dos Caminos, Los Cortijos.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;De Chacaíto a Chacao:&lt;/strong&gt; Lo primero que se debe evaluar en el Servidor, es el Sistema Operativo, la cantidad de RAM disponible, y establecer algunas características como la propiedad FastDetect del boot.ini (en Windows Server 2003) en /3GB, y /PAE (Phisical Address Extension) para que tome la cantidad máxima de memoria física instalada en el servidor.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_-DAUVdz78ZM/SicxPXAWLEI/AAAAAAAAADQ/zBbG-xTTt0I/s1600-h/INI.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_-DAUVdz78ZM/SicxPXAWLEI/AAAAAAAAADQ/zBbG-xTTt0I/s320/INI.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5343293622841650242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;De Chacao a Altamira:&lt;/strong&gt; Por el lado de SQL Server se tiene la propiedad AWE Enabled (Address Windows Extension), pero esto solamente es posible cuando el SO es de 32 bits, porque en 64 bits no se presenta la limitante mencionada. ¿Y cómo se hace eso? A continuación la respuesta:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_-DAUVdz78ZM/SicxgN0sxtI/AAAAAAAAADY/XQixlBhzoxc/s1600-h/AWE.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_-DAUVdz78ZM/SicxgN0sxtI/AAAAAAAAADY/XQixlBhzoxc/s320/AWE.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5343293912434656978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;De Altamira a Miranda:&lt;/strong&gt; En el servidor de Analysis Services, se debe hacer la misma actividad que se mencionó en el tramo Chacaíto-Chacao, con la diferencia de que no hay una propiedad como AWE Enabled (como con el Storage Engine ocurre) y por lo tanto al tratarse de una arquitectura de 32 bits, se tiene la limitante de trabajar solamente a 3GB de RAM, desaprovechando lo que se tenga de mas, ahí viene la recomendación de migrar a una arquitectura de 64 bits.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;De Miranda a Los Dos Caminos:&lt;/strong&gt; La FactTable del modelo estrella contenía más de 151 millones de registros, SI, LEYERON BIEN CIENTO CINCUENTA Y UN MILLONES, y pesaba alrededor de 46GB, la recomendación en este caso es colocarla en un File Group diferente a donde reside el resto de la data, y dicho File Group, en un arreglo de discos RAID 5 diferente al arreglo donde reside la data (esto cuando el presupuesto del cliente lo permita; segunda recomendación). Los File Groups se agregan por medio del siguiente menú:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_-DAUVdz78ZM/Sicx_G4sHoI/AAAAAAAAADg/JiVsWeCTrpc/s1600-h/FIG.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_-DAUVdz78ZM/Sicx_G4sHoI/AAAAAAAAADg/JiVsWeCTrpc/s320/FIG.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5343294443148287618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;De Los Dos Caminos a Los Cortijos:&lt;/strong&gt; Mover la base de datos TempDB a un arreglo RAID 1, se recomienda este por encima del arreglo RAID 5 ya que en la presente BD solamente hay operaciones de escritura cuando un cubo es procesado o cuando un alto número de transacciones se ejecuta; tercera recomendación. &lt;br /&gt;&lt;br /&gt;Mayor info en este link:  &lt;a href="http://msdn.microsoft.com/en-us/library/ms175527(SQL.90).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms175527(SQL.90).aspx.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;De Los Cortijos a las instalaciones del cliente:&lt;/strong&gt; recibí una llamada donde me decían que el Website de SharePoint donde residían los reportes OLAP debe ser movido de servidor, y las recomendaciones me las tuve que guardar para la semana siguiente.&lt;br /&gt;&lt;br /&gt;Saludos, &lt;br /&gt;&lt;br /&gt;Nos vemos en el próximo post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8439314456074268917-2511368287791513101?l=abreulj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abreulj.blogspot.com/feeds/2511368287791513101/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8439314456074268917&amp;postID=2511368287791513101' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8439314456074268917/posts/default/2511368287791513101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8439314456074268917/posts/default/2511368287791513101'/><link rel='alternate' type='text/html' href='http://abreulj.blogspot.com/2009/06/reflexion-entre-estaciones.html' title='Reflexión entre estaciones...'/><author><name>Leonel J Abreu S</name><uri>http://www.blogger.com/profile/04036477726762199969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_-DAUVdz78ZM/Scrv9GM6lDI/AAAAAAAAACw/udaUprfT12o/S220/n1140373566_279242_6476.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-DAUVdz78ZM/SicxPXAWLEI/AAAAAAAAADQ/zBbG-xTTt0I/s72-c/INI.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8439314456074268917.post-8592640711409930607</id><published>2009-03-12T13:47:00.000-07:00</published><updated>2009-03-25T19:39:54.506-07:00</updated><title type='text'>Después de casi un año...</title><content type='html'>Hola estimados lectores, después de casi un año, la reaparición es con un artículo de BI, y de qué manera... no hay nada técnico, simplemente 100% reflexivo.&lt;br /&gt;&lt;br /&gt;Todo comenzó un día que no fue ayer, en un cliente al cual ya no estoy asignado, con un Portal de KPI’s desarrollado por alguien que no conozco.&lt;br /&gt;&lt;br /&gt;La arquitectura de dicha solución era la siguiente:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://3.bp.blogspot.com/_-DAUVdz78ZM/ScrjiFMCCCI/AAAAAAAAABo/aM-51gjmbb4/s1600-h/post.JPG"&gt;&lt;span style="font-family:arial;"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 253px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5317312484711991330" border="0" alt="" src="http://3.bp.blogspot.com/_-DAUVdz78ZM/ScrjiFMCCCI/AAAAAAAAABo/aM-51gjmbb4/s320/post.JPG" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pero… Siempre tiene que haber un pero, esto era un diseño conceptual muy distanciado de la realidad, no porque no fuera esa la arquitectura, sino por la manera en la que se le dio vida a la misma y de ahí es que viene la reflexión. Inspirado en la obra de Oriana Fallaci “Carta a un niño que no llegó a nacer”, La División Technology Information Workers de CONSEIN presenta: “Documentación de un KPI que no se llegó a ver”.&lt;br /&gt;&lt;br /&gt;#1) Proceso de Negocios: El enfoque inicial consistía en unas plantillas de Excel generadas con data de SOLOMON, las cuales pasaban a una BD, de ahí a un “Modelo Estrella” vía ETL y posteriormente al cubo. En estos escenarios hay que evaluar un aspecto, y es el ver si los datos provenientes de la hoja de Excel van a sufrir alteraciones una vez llegados a la BD (sumarización, desglose, actualización, etc.), de no ser así, por performance lo recomendable es llevar los datos directamente desde Excel al Modelo Estrella o Copo de Nieve, según sea el caso.&lt;br /&gt;&lt;br /&gt;#2) Hechos y Dimensiones: En ese caso se manejaban como dimensiones Empresa, y Tiempo, lo que es perfectamente válido, y en la FactTable cada campo de la misma era un indicador. Pregunta: “¿y si se desea agregar un nuevo indicador?...” Respuesta: “Modificar el ETL y la FactTable”… ¡PLOP! En este contexto hay que manejarse con jerarquías y relaciones reflexivas, crear primero los indicadores átomos, y luego aquellos indicadores que dependan de otros.&lt;br /&gt;&lt;br /&gt;#3) Nuevamente con los Indicadores: un indicador debe ser vinculado a una medida de un cubo, y luego con expresiones, calcular su valor, para finalmente asignarle un color de semáforo (rojo, amarillo o verde; o tipo termómetro si son más de tres las bandas), según los rangos que se establezcan, y dicho valor NO DEBE CALCULARSE al llenar la FactTable, esta recomendación viene dada por motivos de performance, ya que un cálculo muy complejo realizado vía T-SQL impactará negativamente sobre los tiempos de ejecución.&lt;br /&gt;&lt;br /&gt;Finalmente, los cambios necesarios se hicieron, el proyecto culminó, el cliente quedó satisfecho, y CONSEIN salió por la puerta grande.&lt;br /&gt;&lt;br /&gt;Bien... Estimados lectores, no me queda mas que despedirme y decir: nos en el próximo post, claro... no voy a esperar un año para ello. xD.&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;LeonelJ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8439314456074268917-8592640711409930607?l=abreulj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abreulj.blogspot.com/feeds/8592640711409930607/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8439314456074268917&amp;postID=8592640711409930607' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8439314456074268917/posts/default/8592640711409930607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8439314456074268917/posts/default/8592640711409930607'/><link rel='alternate' type='text/html' href='http://abreulj.blogspot.com/2009/03/despues-de-casi-un-ano.html' title='Después de casi un año...'/><author><name>Leonel J Abreu S</name><uri>http://www.blogger.com/profile/04036477726762199969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_-DAUVdz78ZM/Scrv9GM6lDI/AAAAAAAAACw/udaUprfT12o/S220/n1140373566_279242_6476.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_-DAUVdz78ZM/ScrjiFMCCCI/AAAAAAAAABo/aM-51gjmbb4/s72-c/post.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8439314456074268917.post-5274249130066391230</id><published>2008-05-10T17:18:00.000-07:00</published><updated>2008-05-18T17:11:07.141-07:00</updated><title type='text'>Lo prometido es deuda!!</title><content type='html'>Tal como se los dije en el post anterior, en este hablaré de como invocar un paquete de SQL Server 2005 Integration Services, pero cuando el paquete está guardado en el Engine de SQL Server.&lt;br /&gt;&lt;br /&gt;Paso #1 Importar el Siguiente Assembly&lt;br /&gt;&lt;br /&gt;Microsoft.SqlServer.Dts.Runtime, para ello hay que agregar las siguientes referencias:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_-DAUVdz78ZM/SDCYxbLz3sI/AAAAAAAAAA4/9dkLoUOrzus/s1600-h/post3i1.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5201825544491228866" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_-DAUVdz78ZM/SDCYxbLz3sI/AAAAAAAAAA4/9dkLoUOrzus/s320/post3i1.bmp" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Paso #2 Importar las siguientes librerias:&lt;/p&gt;&lt;span style="color:#3333ff;"&gt;&lt;p&gt;using &lt;span style="color:#000000;"&gt;Microsoft.SqlServer.Dts&lt;/span&gt;&lt;span style="color:#000000;"&gt;;&lt;/span&gt;&lt;br /&gt;using &lt;span style="color:#000000;"&gt;Microsoft.SqlServer.Dts.Runtime;&lt;br /&gt;&lt;/span&gt;using &lt;span style="color:#000000;"&gt;Microsoft.SqlServer.Dts.Runtime.Wrapper;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/span&gt;&lt;/p&gt;El método a utilizar es Application.LoadFromDtsServer, que recibe (en este mismo orden) los siguientes parametros, &lt;p&gt;1) Nombre del Paquete -&gt; de tipo String&lt;br /&gt;2) Nombre del Servidor -&gt; de tipo String&lt;br /&gt;3) Eventos -&gt; Clase Events, pero este parametro es opcional, en el ejemplo que se ilustra, se le envia el valor null.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color:#3333ff;"&gt;public string &lt;/span&gt;EjecutarPaqueteSSIS(&lt;span style="color:#009900;"&gt;String &lt;/span&gt;NombreServidor, &lt;span style="color:#009900;"&gt;String &lt;/span&gt;NombrePaquete, &lt;span style="color:#3333ff;"&gt;int&lt;/span&gt; AlgunValor)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;try&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;Microsoft.SqlServer.Dts.Runtime.&lt;span style="color:#009900;"&gt;DTSExecResult &lt;/span&gt;Results;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;Microsoft.SqlServer.Dts.Runtime.&lt;span style="color:#009900;"&gt;Application&lt;/span&gt; app =&lt;br /&gt;new Microsoft.SqlServer.Dts.Runtime.&lt;span style="color:#009900;"&gt;Application&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;Microsoft.SqlServer.Dts.Runtime.&lt;span style="color:#009900;"&gt;Package&lt;/span&gt; package =&lt;br /&gt;(Microsoft.SqlServer.Dts.Runtime.&lt;span style="color:#009900;"&gt;Package&lt;/span&gt;)&lt;br /&gt;app.LoadFromDtsServer(NombrePaquete, NombreServidor, &lt;span style="color:#3333ff;"&gt;null&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;Variables&lt;/span&gt; vars = package.Variables;&lt;br /&gt;vars&lt;span style="color:#990000;"&gt;&lt;span style="color:#000000;"&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#990000;"&gt;"NombreVariable"&lt;/span&gt;].Value = AlgunValor;&lt;br /&gt;&lt;br /&gt;Results = package.Execute();&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;return&lt;/span&gt; Results.ToString();&lt;br /&gt;}&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;catch &lt;/span&gt;(&lt;span style="color:#009900;"&gt;Exception &lt;/span&gt;ex)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;return&lt;/span&gt; ex.ToString();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;OK, y este es todo el camino para invocar un paquete de Integration Services 2005 guardado en el Motor de SQL Server.&lt;/p&gt;&lt;p&gt;Nos vemos en el proximo Post.&lt;/p&gt;&lt;p&gt;Saludos,&lt;/p&gt;&lt;p&gt;LeonelJ&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8439314456074268917-5274249130066391230?l=abreulj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abreulj.blogspot.com/feeds/5274249130066391230/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8439314456074268917&amp;postID=5274249130066391230' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8439314456074268917/posts/default/5274249130066391230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8439314456074268917/posts/default/5274249130066391230'/><link rel='alternate' type='text/html' href='http://abreulj.blogspot.com/2008/05/lo-prometido-es-deuda.html' title='Lo prometido es deuda!!'/><author><name>Leonel J Abreu S</name><uri>http://www.blogger.com/profile/04036477726762199969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_-DAUVdz78ZM/Scrv9GM6lDI/AAAAAAAAACw/udaUprfT12o/S220/n1140373566_279242_6476.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_-DAUVdz78ZM/SDCYxbLz3sI/AAAAAAAAAA4/9dkLoUOrzus/s72-c/post3i1.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8439314456074268917.post-2414397516009223894</id><published>2008-05-06T20:27:00.000-07:00</published><updated>2008-05-08T14:09:51.337-07:00</updated><title type='text'>Invocar un paquete de SQL Server Integration Services 2005</title><content type='html'>Algo que suele presentarse muy frecuentemente es el tener que invocar un paquete de SQL Server Integration Services por programación, en este caso yo seleccioné Visual C#, mi caballito de batallas, aquí se detalla un método, ideal para cuando se guarda el paquete como sistema de archivos (*.dtsx). En el proximo post mostraré como hacerlo si se guarda el paquete en SQL Server.&lt;br /&gt;&lt;br /&gt;En primer lugar es necesario habilitar la caracteristica xp_cmdshell, ya que con ella se va a ejecutar el paquete con la utilidad dtexec, (Antiguo dtsrun en SQL Server 2000) como si se estuviera en la linea de comandos. Esta actividad se hace por medio del SQL Server Surface Area Configuration.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_-DAUVdz78ZM/SCNdtEHnvKI/AAAAAAAAAAg/ssm8CncGlMM/s1600-h/post2i2.JPG"&gt;&lt;/a&gt;&lt;img id="BLOGGER_PHOTO_ID_5198100461624212626" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_-DAUVdz78ZM/SCNc1EHnvJI/AAAAAAAAAAY/nq-41umcOy0/s320/post2i1.JPG" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;El siguiente paso es ir a "Surface Area Configuration for Features" y habilitar el caracteristica mencionada (xp_cmdshell):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_-DAUVdz78ZM/SCNewUHnvMI/AAAAAAAAAAw/OVoqaEGgz0k/s1600-h/post2i2.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5198102579043089602" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_-DAUVdz78ZM/SCNewUHnvMI/AAAAAAAAAAw/OVoqaEGgz0k/s320/post2i2.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La continuación es crear un Stored Procedure que haga uso de xp_cmdshell:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color:#000099;"&gt;CREATE PROCEDURE&lt;/span&gt; usp_CorrerPaqueteSSIS&lt;br /&gt;@Comando &lt;span style="color:#000099;"&gt;VARCHAR&lt;/span&gt;(8000)&lt;br /&gt;&lt;span style="color:#000099;"&gt;AS&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;DECLARE&lt;/span&gt; @returncode &lt;span style="color:#000099;"&gt;INT&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;EXEC&lt;/span&gt; @returncode = &lt;span style="color:#990000;"&gt;xp_cmdshell&lt;/span&gt; @Comando&lt;br /&gt;&lt;span style="color:#000099;"&gt;RETURN&lt;/span&gt; @returncode&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;OK, hasta aqui se tiene toda la estructura de ejecución, pero la gran pregunta: "Y que valor se le manda al parametro @Comando?"...&lt;br /&gt;&lt;br /&gt;La Respuesta: una cadena que cumpla con la siguiente sintaxis:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#006600;"&gt;&lt;strong&gt;dtexec /f "[Ruta del Archivo]" /De [Clave de Cifrado]&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#000099;"&gt;&lt;strong&gt;dtexec /f "C:\Pruebas\Paquete1.dtsx" /De Pa$$w0rd&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;/f indica que el paquete fue guardado en Sistema de Archivos&lt;br /&gt;&lt;br /&gt;/De es el atributo que indica el password con el cual fue cifrada la data critica del paquete (El Password del Connection String)&lt;br /&gt;&lt;br /&gt;Finalmente el codigo C# con el cual se llama al Stored Procedure, aclaro que este codigo no esta basado en las mejores prácticas, esto simplemente ilustra como invocar a usp_CorrerPaqueteSSIS:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color:#000099;"&gt;private int&lt;/span&gt; InvocarPaquete(&lt;span style="color:#000099;"&gt;string&lt;/span&gt; Ruta, &lt;span style="color:#000099;"&gt;string&lt;/span&gt; Password)&lt;br /&gt;{&lt;br /&gt;&lt;span style="color:#000099;"&gt;int&lt;/span&gt; resultado;&lt;br /&gt;&lt;span style="color:#000099;"&gt;string&lt;/span&gt; parametro = &lt;span style="color:#cc0000;"&gt;"dtexec /f "&lt;/span&gt; + Ruta + &lt;span style="color:#cc0000;"&gt;" /De "&lt;/span&gt; + Password;&lt;br /&gt;&lt;span style="color:#000099;"&gt;string&lt;/span&gt; connStr =&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;"Server=(local); Database=Pruebas; uid=usuario; pwd=password;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#009900;"&gt;SqlConnection&lt;/span&gt; conexion = &lt;span style="color:#000099;"&gt;new&lt;/span&gt; &lt;span style="color:#009900;"&gt;SqlConnection&lt;/span&gt;(connStr);&lt;br /&gt;conexion.Open();&lt;br /&gt;&lt;span style="color:#009900;"&gt;SqlCommand&lt;/span&gt; comando = &lt;span style="color:#000099;"&gt;new&lt;/span&gt; &lt;span style="color:#009900;"&gt;SqlCommand&lt;/span&gt;(&lt;span style="color:#cc0000;"&gt;"usp_CorrerPaqueteSSIS"&lt;/span&gt;, conexion);&lt;br /&gt;comando.CommandType = &lt;span style="color:#009900;"&gt;CommandType&lt;/span&gt;.StoredProcedure;&lt;br /&gt;comando.Parameters.Add(&lt;span style="color:#000099;"&gt;new&lt;/span&gt; &lt;span style="color:#009900;"&gt;SqlParameter&lt;/span&gt;(&lt;span style="color:#cc0000;"&gt;"@Comando"&lt;/span&gt;, parametro));&lt;br /&gt;resultado = comando.ExecuteScalar();&lt;br /&gt;&lt;span style="color:#000099;"&gt;return&lt;/span&gt; resultado;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Un pequeño detalle, el usuario que se utilice en el connection string debe estar en el esquema "sys" de la base de datos, de lo contrario todo esto resultará en un SqlException.&lt;br /&gt;&lt;br /&gt;Ya para finalizar con este post, si el paquete recibe parámetros (Variables, ó Variables Globales como se llamaban en SQL Server 2000), a la sintaxis del comando hay que agregarle lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#006600;"&gt;dtexec /f "[Ruta del Archivo]" /De [Clave de Cifrado] /SET \package\DataFlowTask.Variables[User::NombreVariable].Value;Valor&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La diferencia esta en el atributo /SET.&lt;br /&gt;&lt;br /&gt;Nos vemos en el proximo post.&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Leonel J&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8439314456074268917-2414397516009223894?l=abreulj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abreulj.blogspot.com/feeds/2414397516009223894/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8439314456074268917&amp;postID=2414397516009223894' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8439314456074268917/posts/default/2414397516009223894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8439314456074268917/posts/default/2414397516009223894'/><link rel='alternate' type='text/html' href='http://abreulj.blogspot.com/2008/05/invocar-un-paquete-de-sql-server.html' title='Invocar un paquete de SQL Server Integration Services 2005'/><author><name>Leonel J Abreu S</name><uri>http://www.blogger.com/profile/04036477726762199969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_-DAUVdz78ZM/Scrv9GM6lDI/AAAAAAAAACw/udaUprfT12o/S220/n1140373566_279242_6476.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-DAUVdz78ZM/SCNc1EHnvJI/AAAAAAAAAAY/nq-41umcOy0/s72-c/post2i1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8439314456074268917.post-6904228676258101473</id><published>2008-05-06T13:12:00.000-07:00</published><updated>2008-05-06T14:05:56.732-07:00</updated><title type='text'>Migrar de SQL Server 2000 a 2005 con Detach y Attach!!</title><content type='html'>Hola estimado lector, en este pequeño post, se muestra como llevar una base de datos desde SQL Server 2000 a SQL Server 2005, a través de un Detach &amp;amp; Attach...&lt;br /&gt;&lt;br /&gt;El siguiente script ya fue probado en una Virtual PC con Windows Server 2003 R2 SP1, SQL Server 2000 Developer Edition y SQL Server 2005 Developer Edition, la base de datos fue Stores&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1) Correr desde SQL Server 2000 (Query Analyzer) el Stored Procedure sp_detach_db:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;USE&lt;/span&gt; master;&lt;br /&gt;GO&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;EXEC&lt;/span&gt; &lt;span style="color:#990000;"&gt;sp_detach_db&lt;/span&gt; @dbname = N&lt;span style="color:#ff0000;"&gt;'Stores'&lt;/span&gt;;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2) Crear en SQL Server 2005 la base de datos en activando la opción Atach, esto es un CREATE DATABASE común y corriente:&lt;/strong&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;USE&lt;/span&gt; master;&lt;br /&gt;GO&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;CREATE DATABASE&lt;/span&gt; Stores&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;ON PRIMARY&lt;/span&gt;&lt;br /&gt;(&lt;span style="color:#3333ff;"&gt;FILENAME&lt;/span&gt; = &lt;span style="color:#ff0000;"&gt;'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Stores.mdf'&lt;/span&gt;) &lt;span style="color:#cc33cc;"&gt;LOG&lt;/span&gt; ON (&lt;span style="color:#3333ff;"&gt;FILENAME &lt;/span&gt;= &lt;span style="color:#ff0000;"&gt;'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Stores_log.ldf'&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;FOR&lt;/span&gt; ATTACH;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3) Correr desde SQL Server 2005 el Stored Procedure sp_attach_db:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;USE&lt;/span&gt; master;&lt;br /&gt;GO&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;EXEC&lt;/span&gt; &lt;span style="color:#990000;"&gt;sp_attach_db&lt;/span&gt; @dbname = N&lt;span style="color:#ff0000;"&gt;'Stores'&lt;/span&gt;,&lt;br /&gt;@filename1 = N&lt;span style="color:#ff0000;"&gt;'C:\Program Files\Microsoft SQL Server\MSSQL\Data\Stores.mdf'&lt;/span&gt;, @filename2 = N&lt;span style="color:#ff0000;"&gt;'C:\Program Files\Microsoft SQL Server\MSSQL\Data\Stores_log.ldf'&lt;/span&gt;;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;Algo para tener en cuenta: Es ALTAMENTE recomendable (para no decir obligatorio, jejejeje) que se ejecute la sentencia DBCC UPDATEUSAGE, ya que algunas páginas (las tablas de SQL Server se componen de páginas), índices o particiones podrían quedar corruptas. Acá la documentación de ella: &lt;a href="http://msdn.microsoft.com/en-us/library/ms188414.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms188414.aspx&lt;/a&gt;, finalmente, para no tener problemas de inconsistencia con la metadata, se recomienda visitar este link, porque quizá (no siempre pasa, pero Murphy anda suelto) se tenga que crear nuevamente, ya que hubo cambio de versión en la DB. Acá la documentación: &lt;a href="http://msdn.microsoft.com/en-us/library/ms187580.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms187580.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ah, casi lo olvido, estas dos últimas tareas lo más recomendable es que la ejecute la figura del DBA.... Nadie conoce el servidor de bases de datos mejor que el :-)&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Nos vemos en el proximo Post!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8439314456074268917-6904228676258101473?l=abreulj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://abreulj.blogspot.com/feeds/6904228676258101473/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8439314456074268917&amp;postID=6904228676258101473' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8439314456074268917/posts/default/6904228676258101473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8439314456074268917/posts/default/6904228676258101473'/><link rel='alternate' type='text/html' href='http://abreulj.blogspot.com/2008/05/migrar-de-sql-server-2000-2005-con.html' title='Migrar de SQL Server 2000 a 2005 con Detach y Attach!!'/><author><name>Leonel J Abreu S</name><uri>http://www.blogger.com/profile/04036477726762199969</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_-DAUVdz78ZM/Scrv9GM6lDI/AAAAAAAAACw/udaUprfT12o/S220/n1140373566_279242_6476.jpg'/></author><thr:total>2</thr:total></entry></feed>
