<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;Ck4ARX05fCp7ImA9WhdbFEs.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464</id><updated>2011-10-12T16:09:04.324-07:00</updated><category term="Silverlight 4.0" /><category term="Interes" /><category term="Capacitación" /><category term="Arquitectura" /><category term=".NET" /><category term="SQL Server" /><title>SQL &amp; .NET un amor compartido</title><subtitle type="html">Blog para compartir experiencia en SQL Server ,C#, ASP.NET y arquitectura de aplicaciones.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/SqlnetUnAmorCompartido" /><feedburner:info uri="sqlnetunamorcompartido" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CUQHQXc9fCp7ImA9WhdQE04.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-3267290802356312223</id><published>2011-08-14T07:42:00.000-07:00</published><updated>2011-08-14T07:48:50.964-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-14T07:48:50.964-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Arquitectura" /><title>Microsoft Magazine</title><content type="html">&lt;div&gt;Una forma de mantenerse actualizado&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/default.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/default.aspx&lt;/a&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"Sólo cuando se empieza a estar mar adentro nos damos cuanta de la inmensidad de el, adentrémonos pues en el mar"&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-3267290802356312223?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0n-bVVuhoFt6WO5_ghr9F-E-o-E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0n-bVVuhoFt6WO5_ghr9F-E-o-E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0n-bVVuhoFt6WO5_ghr9F-E-o-E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0n-bVVuhoFt6WO5_ghr9F-E-o-E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/v0wsKR01xCg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/3267290802356312223/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2011/08/microsoft-magazine.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/3267290802356312223?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/3267290802356312223?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/v0wsKR01xCg/microsoft-magazine.html" title="Microsoft Magazine" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2011/08/microsoft-magazine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMCRnkzeSp7ImA9WhdRFk0.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-3922690186793774795</id><published>2011-08-05T22:08:00.000-07:00</published><updated>2011-08-05T22:11:07.781-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-05T22:11:07.781-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><title>Glosario</title><content type="html">&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; Esta es la liga de un glosario del NetFramework que nos servirá mas de una vez:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://msdn.microsoft.com/es-es/library/6c701b8w(v=VS.90).aspx"&gt;http://msdn.microsoft.com/es-es/library/6c701b8w(v=VS.90).aspx&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-3922690186793774795?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t0BjjeysalZCLk40-6FfewqR3f8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t0BjjeysalZCLk40-6FfewqR3f8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t0BjjeysalZCLk40-6FfewqR3f8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t0BjjeysalZCLk40-6FfewqR3f8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/CgMxn1Tg2pg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/3922690186793774795/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2011/08/glosario.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/3922690186793774795?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/3922690186793774795?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/CgMxn1Tg2pg/glosario.html" title="Glosario" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2011/08/glosario.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEHRX4yfyp7ImA9WhdTGUs.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-6209861699878458388</id><published>2011-07-16T17:04:00.000-07:00</published><updated>2011-07-17T20:43:54.097-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-17T20:43:54.097-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Arquitectura" /><title>Calidad en el software</title><content type="html">&lt;p align="justify"&gt;Calidad en el software ¿Cómo lo logramos,qué medimos?&lt;br /&gt;En teoría los sistemas deberían satisfacer un conjunto de requerimientos, y lo que muchas veces hacemos a un lado es que son esos requerimientos los que definen o mejor dicho deberían definir la arquitectura de nuestro sistema.&lt;br /&gt;&lt;br /&gt;Es por eso que en este post quisiera resaltar la importancia de una correcta definición y categorización de los requerimientos.&lt;br /&gt;&lt;br /&gt;He de decir que a lo largo de mi experiencia profesional he visto y vivido problemáticas en algunos proyectos por problemas de “calidad” en el software que estamos por entregar, ¿y esto que tiene que ver con los requerimientos y más aun con la arquitectura de nuestra aplicación? Todo, he de decir que todo.&lt;br /&gt;&lt;br /&gt;A donde quiero llegar es que la calidad de nuestro producto que entreguemos a los usuarios dependerá de una correcta definición de los requerimientos (lo cual parecería obvio, pero a veces no lo es), y va mas allá de eso.&lt;br /&gt;&lt;br /&gt;¿Cuántos de nosotros hemos estado enterados que existen normas y estándares para definir la calidad del software? Bueno espero que ya haya sembrado la semilla de la duda y de esa curiosidad que nos lleva a conocer nuevas y mejores formas de hacer las cosas, empecemos con la carnita.&lt;br /&gt;&lt;br /&gt;Sabemos que un requerimiento es una característica de nuestro sistema y se dividen en funcionales y no funcionales.&lt;br /&gt;&lt;br /&gt;Existe una norma / estandar (&lt;strong&gt;ISO/IEC 9126)&lt;/strong&gt; que clasifica las características que debemos contemplar en nuestros sistemas de la siguiente forma&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.-&lt;strong&gt;Funcionalidad &lt;/strong&gt;:Indica las características que nuestro software debe cumplir y contempla: exactitud, seguridad, interoperabilidad y cumplimiento de normas y estándares.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;En esta categoría incluimos las necesidades de negocio a satisfacer&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;.- &lt;strong&gt;Confiabilidad &lt;/strong&gt;: Indica las capacidades de nuestro software de mantener un nivel de desempeño específico bajo condiciones definidas. Debe contemplar madurez, tolerancia a fallos y recuperación.&lt;br /&gt;&lt;br /&gt;1. La madurez se refiere a que nuestro software no experimente interrupciones en el caso de errores internos.&lt;br /&gt;2. Tolerancia a fallos indica la capacidad de controlar los fallos en función de mantener un nivel de comportamiento aceptable de nuestra aplicación.&lt;br /&gt;3. Recuperación indica la capacidad de que nuestro sistema se recupere en caso de error.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;En esta categoría deberíamos definir mecanismos de replica para nuestra base de datos, como es que nuestra aplicación apuntara de forma automática al nuevo servidor de BD, saber que nuestra aplicación debe estar disponibles cuantos horas y cuantos días al año.&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;.- &lt;strong&gt;Usabilidad &lt;/strong&gt;: Indica la capacidad de que nuestro software sea intuitivo, y fácil de entender y usar por nuestros usuarios.&lt;br /&gt;&lt;br /&gt;.- &lt;strong&gt;Eficiencia &lt;/strong&gt;: Indica la capacidad de mantener un nivel de desempeño en términos de tiempos de respuestas y cantidad de recursos disponibles.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;En esta categoría es donde deberíamos definir una “Baseline” para nuestra aplicación la cual define el comportamiento de nuestro aplicativo con “n” usuarios, con “X” cantidad de memoria, capacidad de red. Capacidad de procesador&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;.- &lt;strong&gt;Mantenibilidad &lt;/strong&gt;: Indica la capacidad de nuestro software para ser modificado y tener un nivel bajo de riesgo de introducir errores, así como de que estas modificaciones sean fáciles de implementar.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;En esta categoría deberíamos prestar atención especial al diseño de nuestras clases, componentes, capas, estilos de arquitectura a utilizar. Proyectos de pruebas unitarias a ser implementados.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;.- &lt;strong&gt;Portabilidad &lt;/strong&gt;: Indica la capacidad de que nuestro software sea potable entre plataformas y la capacidad de que coexista.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;em&gt;Como podran ver, el establecer correctamente los requerimientos de nuestro sistema seran el input que necesitamos para empezar a definir la arquitectura de la futura aplicación.&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:85%;"&gt;Hace un tiempo estuve involucrado en un proyecto que tenia al menos dos años en desarrollo, mantenimiento y entregas. Me entere en algún momento que el cliente cuestionaba entre otras cosas la usabilidad y parecía que la moda de haber echo un sitio Web no era la solución tecnológica por la que se debió optar, sin duda respondernos las preguntas que nacen de seguir la norma ISO/IEC 9126) habría evitado esa amarga experiencia.&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:85%;"&gt;Espero les sea de utilidad&lt;/span&gt;&lt;/strong&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-6209861699878458388?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/z3fWqELDzTuJ6ITHDj7UsK6zh7w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/z3fWqELDzTuJ6ITHDj7UsK6zh7w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/z3fWqELDzTuJ6ITHDj7UsK6zh7w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/z3fWqELDzTuJ6ITHDj7UsK6zh7w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/KjCjv8AT3Lc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/6209861699878458388/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2011/07/calidad-en-el-software.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/6209861699878458388?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/6209861699878458388?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/KjCjv8AT3Lc/calidad-en-el-software.html" title="Calidad en el software" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2011/07/calidad-en-el-software.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4GSXo8fip7ImA9WhdTF0o.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-6846538184959916793</id><published>2011-07-15T15:41:00.000-07:00</published><updated>2011-07-15T16:02:08.476-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-15T16:02:08.476-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight 4.0" /><title>Publicar Servicio Web para Silverlight</title><content type="html">Si te ha aparecido el siguiente error tratando de publicar tu aplicación Silverlight que utiliza servicios de WCF, esto quiza te pueda intersar&lt;br /&gt;&lt;br /&gt;"&lt;br /&gt;Se ha producido un error al intentar realizar una solicitud al URI 'http://localhost/XXXXX/XXXXXXX/XXXXXXService.svc'.&lt;br /&gt;Puede deberse a un intento de acceso a un servicio de configuración entre dominios sin una política&lt;br /&gt;entre dominios adecuada en contexto o una política no apropiada para servicios SOAP.&lt;br /&gt;Es posible que necesite ponerse en contacto con el propietario del servicio para publicar un archivo de política&lt;br /&gt;entre dominios y para asegurarse de que permite enviar encabezados HTTP relacionados con SOAP. Este error también puede deberse al uso de tipos internos en el proxy de servicios web sin utilizar el atributo InternalsVisibleToAttribute. Para obtener más información, consulte la excepción interna."&lt;br /&gt;&lt;br /&gt;Sucede que Silverlight de forma predeterminada por seguridad sólo permite llamadas a servicios dentro del mismo dominio de la aplicación, un dominio de la forma http://Midominio.com unicamente podra acceder a servicios que esten dentro de ese mismo dominio, ejemplo:&lt;br /&gt;&lt;br /&gt;.- Cuando estamos en nuestro ambiente de desarrollo muy probablemente los End Point de los servicios que estemos consumiendo esten apuntando a "localhost"&lt;br /&gt;&lt;br /&gt;&lt;service name="BBP.BC.Server.Services.LayOut.LayOutService" behaviorconfiguration="CommonServiceBehavior"&gt;&lt;br /&gt;&lt;endpoint name="basicHttpBindingEndPoint" contract="BBP.BC.Server.Services.LayOut.ILayOutService" binding="basicHttpBinding" address="" behaviorconfiguration="SilverlightFaultBehavior" bindingconfiguration=""&gt;&lt;br /&gt;&lt;identity&gt;&lt;br /&gt;&lt;dns value="localhost"&gt;&lt;br /&gt;&lt;/identity&gt;&lt;br /&gt;&lt;/endpoint&gt;&lt;br /&gt;&lt;endpoint name="mexHttpBindingEndPoint" contract="IMetadataExchange" binding="mexHttpBinding" address="mex"&gt;&lt;br /&gt;&lt;/service&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-kpBJbwQlyc8/TiDE3YYBytI/AAAAAAAAAHU/WRMH28LHMpw/s1600/conf%2Bde%2Bservicio.JPG"&gt;&lt;img style="MARGIN: 0px 0px 10px 10px; WIDTH: 400px; FLOAT: right; HEIGHT: 380px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5629715989928200914" border="0" alt="" src="http://1.bp.blogspot.com/-kpBJbwQlyc8/TiDE3YYBytI/AAAAAAAAAHU/WRMH28LHMpw/s400/conf%2Bde%2Bservicio.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La configuración de nuestra referencia al servicio quiza se vea del tipo :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cuando intentamos publicar nuestro sitio Web resulta que contrario a nuestro ambiente de desarrollo estariamos indicando el nombre del dominio o de nuestro servidor y entonces empezaran los problemas, nuestra aplicación sí iniciara pero el consumir los servicios no sera posible.&lt;br /&gt;&lt;br /&gt;La solución a este problema es utilizar los mecanismos que Silverlight nos ofrece para acceder a servicios entre dominios que son:&lt;br /&gt;&lt;br /&gt;1) Archivo crossdomain.xml válido&lt;br /&gt;2) Archivo clientaccesspolicy.xml&lt;br /&gt;&lt;br /&gt;Adicionalmente cuando publiquemos nuestro sitio publicado debera apuntar a "NOMBRESERVIDOR" pues aun cuando ellos esten en el mismo servidor y dentro de nuestro sitio Web tendremos un pequeño dolor de cabeza si continuamos utilizando "localhost". Al cambiar los End- point y la configuración de la referencia de servicio será suficiente para quitar este error y poder publicar nuestra aplicación web que consume servicios de WCF.&lt;br /&gt;&lt;br /&gt;Aqui dejo unas referencias que a mi me ayudaron&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/es-es/library/cc197955(v=VS.95).aspx"&gt;http://msdn.microsoft.com/es-es/library/cc197955(v=VS.95).aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/es-es/library/cc197940(v=VS.95).aspx"&gt;http://msdn.microsoft.com/es-es/library/cc197940(v=VS.95).aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-6846538184959916793?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_Xzl2ZTAN2YVDxiqQCobkMfjXok/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_Xzl2ZTAN2YVDxiqQCobkMfjXok/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_Xzl2ZTAN2YVDxiqQCobkMfjXok/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_Xzl2ZTAN2YVDxiqQCobkMfjXok/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/vwWhxsOfm-I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/6846538184959916793/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2011/07/publicar-servicio-web-para-silverlight.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/6846538184959916793?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/6846538184959916793?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/vwWhxsOfm-I/publicar-servicio-web-para-silverlight.html" title="Publicar Servicio Web para Silverlight" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-kpBJbwQlyc8/TiDE3YYBytI/AAAAAAAAAHU/WRMH28LHMpw/s72-c/conf%2Bde%2Bservicio.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2011/07/publicar-servicio-web-para-silverlight.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EDQHo-fCp7ImA9WhdTF0s.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-3560817740358862596</id><published>2011-07-15T15:35:00.000-07:00</published><updated>2011-07-15T15:41:11.454-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-15T15:41:11.454-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>SQL Server Denali</title><content type="html">Esta puede ser una noticia no tan fresca para muchos y aunque esperaba que no tardara mucho he de decir que no me dejó de sorprender la noticia de que ya esta liberada la nueva version beta de SQL Server, denominada Denali.&lt;br /&gt;&lt;br /&gt;Podran encontrar mas información en:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://download.microsoft.com/download/d/9/4/d948f981-926e-40fa-a026-5bfcf076d9b9/Spatial_Denali_CTP1.docx"&gt;http://download.microsoft.com/download/d/9/4/d948f981-926e-40fa-a026-5bfcf076d9b9/Spatial_Denali_CTP1.docx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/sqlserver/en/us/future-editions.aspx"&gt;http://www.microsoft.com/sqlserver/en/us/future-editions.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Por lo mientras un tema mas en que seguirse manteniendo actualizado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-3560817740358862596?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/q0kNnyt7sxD-yI2XAUm2j3Yh2LQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q0kNnyt7sxD-yI2XAUm2j3Yh2LQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/q0kNnyt7sxD-yI2XAUm2j3Yh2LQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q0kNnyt7sxD-yI2XAUm2j3Yh2LQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/d-CQ5Z8OS-c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/3560817740358862596/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2011/07/sql-server-denali.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/3560817740358862596?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/3560817740358862596?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/d-CQ5Z8OS-c/sql-server-denali.html" title="SQL Server Denali" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2011/07/sql-server-denali.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMHQX8yeCp7ImA9WhZaEEg.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-872229974405603779</id><published>2011-06-25T20:08:00.000-07:00</published><updated>2011-06-25T20:20:30.190-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-25T20:20:30.190-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Beneficios de los Filegroups, un acercamiento</title><content type="html">Hace poco mas de un año que fue la ultima vez que escribi aqui, en la entrada mas añeja hablaba de particionar indices y una tarea que esta intrinseca en ello es crear filegroups adicionales.&lt;br /&gt;Este es un tema muy extenso y quisiera dar un acercamiento a los beneficios que obtendremos al crear Filegroups en nuestras Bases de Datos.&lt;br /&gt;&lt;br /&gt;Es una mejor practica agregar Filegroups y Files adicionales a nuestras Bases de datos y tratare de resumir la explicación mas importante:&lt;br /&gt;&lt;br /&gt;.-Al crear más de un Filegroup podremos tener una mejor administración de nuestros archivos en le futuro, ejemplo: Una vez que tenemos agrupaciones de archivos y tablas si existiera la necesidad de con el menor esfuerzo hacer que un conjunto de tablas estén sólo disponibles como lectura únicamente bastaría modificar un atributo(ReadOnly) al Filegroup al que pertenecen y así evitamos hacer cambios mayores y afectaciones a otros módulos y aplicaciones cuyas tablas estén ajenas a nuestro interés.&lt;br /&gt;&lt;br /&gt;.-Al tener más de un Filegroup proveemos del mayor aislamiento posible I/O. Los datos en las tablas de Sistema de nuestra base de Datos no cambian tan frecuentemente como las tablas de usuario y al minimizar la escritura en el Filegroup Primary reducimos el riesgo de introducir daños a los archivos que lo conforman,  es necesario mencionar que el estado del Filegroup Primary determina el estado de la Base de Datos, al tener más de Filegroup incrementamos  la disponibilidad de nuestra base de datos porque estaremos minimizando los cambios hechos al Filegroup Primary.&lt;br /&gt;&lt;br /&gt;.-Si en el futuro además de crear Filegroups adicionales, los archivos pudieran estar en unidades de disco separadas es posible crear una estrategia de almacenamiento / consultas tal que nos permita reducir los cuellos de botella I/O en el disco duro (Contención).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-872229974405603779?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hpgr1YzcvkvrDz8CMrasKPbGtJc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hpgr1YzcvkvrDz8CMrasKPbGtJc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hpgr1YzcvkvrDz8CMrasKPbGtJc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hpgr1YzcvkvrDz8CMrasKPbGtJc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/3Sr4R52reEc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/872229974405603779/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2011/06/beneficios-de-los-filegroups-un.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/872229974405603779?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/872229974405603779?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/3Sr4R52reEc/beneficios-de-los-filegroups-un.html" title="Beneficios de los Filegroups, un acercamiento" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2011/06/beneficios-de-los-filegroups-un.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYFRHk4fSp7ImA9WxFUFk0.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-4142784389178137327</id><published>2010-06-26T17:49:00.000-07:00</published><updated>2010-06-26T17:55:15.735-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-26T17:55:15.735-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Particionar Indice SQL</title><content type="html">Hola nuevamente, y con la esperanza de que este post sea de utilidad para al menos una persona me dispongo a escribir.&lt;br /&gt;&lt;br /&gt;Si alguien ya ha leído alguna otra entrada empezara a notar que tengo el tatuaje de Microsoft en la palma de las manos, y la realidad es que me gusta .NET y SQL y mucho, el que algunas soluciones tecnológicas aveces no corran como se espera tiene mas que ver con el echo de desconocer la tecnología e implementar de una manera equivocada algo.&lt;br /&gt;&lt;br /&gt;Esta vez hablare de particionar Indices en SQL, y si bien es algo que en el escenario ideal debe contemplarse desde un inicio del proyecto el ejemplo que pondré se concentra en una base de datos ya poblada, esta es una técnica sumamente importante para mejorar el desempeño de nuestras bases de datos.&lt;br /&gt;Para nuestro ejemplo hare referencia a la Base de datos ADVENTUREWORKS, la cual podemos confirmar tiene solo un FileGroup, para lo cual usaremos&lt;br /&gt;&lt;br /&gt;USE ADVENTUREWORKS&lt;br /&gt;&lt;br /&gt;Select * from sys.filegroups  &lt;br /&gt; Lo primero que haremos sera crear FileGroups adicionales para nuestra Base de datos&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SQL Server nos permite un mejor manejo de tablas sumamente grandes mediante el uso de particiones.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I. Agregar FileGroups a la Base de datos&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;ALTER DATABASE ADVENTUREWORKS&lt;br /&gt;ADD FILEGROUP Productos_200;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;ALTER DATABASE ADVENTUREWORKS&lt;br /&gt;ADD FILEGROUP Productos_400;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;ALTER DATABASE ADVENTUREWORKS&lt;br /&gt;ADD FILEGROUP Productos_600;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;ALTER DATABASE ADVENTUREWORKS&lt;br /&gt;ADD FILEGROUP Productos_800;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;Alter database AdventureWorks&lt;br /&gt;add Filegroup Productos_2000&lt;br /&gt;GO&lt;br /&gt;ALTER DATABASE ADVENTUREWORKS&lt;br /&gt;ADD FILEGROUP Productos_X;&lt;br /&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;II. Para consultar las particiones creadas lo pueden hacer mediante el Managment Studio o con el script :&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;Select * from sys.filegroups&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;III. El siguiente paso es agregar archivos de datos para cada FileGroup&lt;br /&gt;a. En este punto aplicaremos las mejores prácticas respecto a&lt;br /&gt;i. Inicializar los archivos de datos con espacio suficiente(tanto como tengamos disponible sin afectar otras aplicaciones y sin dejar sin espacio el o los discos duros disponibles).&lt;br /&gt;ii. Respecto a la forma en que crecerán los archivos (Menos de un 1 GB al mismo tiempo)&lt;br /&gt;iii. Todos los archivos de datos con el mismo tamaño.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;Alter DataBASE ADVENTUREWORKS Add FILE&lt;br /&gt;(&lt;br /&gt;NAME=Productos_200,&lt;br /&gt;FILENAME='C:\AdventureWorks\Productos_200.ndf',&lt;br /&gt;SIZE=1000MB,&lt;br /&gt;FILEGROWTH =150MB&lt;br /&gt;) TO FILEGROUP Productos_200;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;Alter DataBASE ADVENTUREWORKS&lt;br /&gt;Add FILE&lt;br /&gt;(&lt;br /&gt;NAME=DatosPromotorias_400,&lt;br /&gt;FILENAME='C:\AdventureWorks\Productos_400.ndf',&lt;br /&gt;SIZE=1000MB,&lt;br /&gt;FILEGROWTH =150MB&lt;br /&gt;) TO FILEGROUP Productos_400;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;Alter DataBASE ADVENTUREWORKS&lt;br /&gt;Add FILE&lt;br /&gt;(&lt;br /&gt;NAME=Productos_600,&lt;br /&gt;FILENAME='C:\AdventureWorks\Productos_600.ndf',&lt;br /&gt;SIZE=1000MB,&lt;br /&gt;FILEGROWTH =150MB&lt;br /&gt;) TO FILEGROUP Productos_600;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;Alter DataBASE ADVENTUREWORKS&lt;br /&gt;Add FILE&lt;br /&gt;(&lt;br /&gt;NAME=Productos_800,&lt;br /&gt;FILENAME='C:\AdventureWorks\Productos_800.ndf',&lt;br /&gt;SIZE=1000MB,&lt;br /&gt;FILEGROWTH =150MB&lt;br /&gt;) TO FILEGROUP Productos_800;&lt;br /&gt;GO&lt;br /&gt;Alter DataBASE ADVENTUREWORKS&lt;br /&gt;Add FILE&lt;br /&gt;(&lt;br /&gt;NAME=Productos_2000,&lt;br /&gt;FILENAME='C:\AdventureWorks\Productos_2000.ndf',&lt;br /&gt;SIZE=1000MB,&lt;br /&gt;FILEGROWTH =150MB&lt;br /&gt;) TO FILEGROUP Productos_2000;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;Alter DataBASE ADVENTUREWORKS&lt;br /&gt;Add FILE&lt;br /&gt;(&lt;br /&gt;NAME=Productos_X,&lt;br /&gt;FILENAME='C:\AdventureWorks\Productos_X00.ndf',&lt;br /&gt;SIZE=1000MB,&lt;br /&gt;FILEGROWTH =150MB&lt;br /&gt;) TO FILEGROUP Productos_X;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;IV. Posteriormente será necesario crear una función de partición&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;Create Partition Function FnParticionesProductos(Int)&lt;br /&gt;as Range Left&lt;br /&gt;For Values (200,400,600,800,2000);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;a. Es posible consultar su creación mediante el query :&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;SELECT * FROM sys.partition_functions WHERE name = 'FnParticionesProductos'&lt;br /&gt;SELECT * FROM sys.partition_range_values&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;V. Una vez creada la función de partición se procede a crear un schema de partición, el cual en conjunto con la función antes creada se encargaran de encapsular el que SQL sepa a que FileGroup y FileData se grabara o se leerá nuestra información&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;Create Partition Scheme SchemaProductos&lt;br /&gt;as Partition FnParticionesProductos&lt;br /&gt;TO (&lt;br /&gt;Productos_200,&lt;br /&gt;Productos_400,&lt;br /&gt;Productos_600,&lt;br /&gt;Productos_800,&lt;br /&gt;Productos_2000,&lt;br /&gt;Productos_X&lt;br /&gt;)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;a. Es posible consultar el schema de partición que se ha creado mediante el query :&lt;br /&gt;Select * from sys.partition_schemes&lt;br /&gt;&lt;br /&gt;b. La información en nuestra implementación caería de la siguiente manera&lt;br /&gt;&lt;br /&gt;Filegroup Particion Min ProductoID Max ProductoID&lt;br /&gt;Productos_200 1 -Max(Int) 200&lt;br /&gt;Productos_400 2 201 400&lt;br /&gt;Productos_600 3 401 600&lt;br /&gt;Productos_800 4 601 800&lt;br /&gt;Productos_2000 5 801 2000&lt;br /&gt;Productos_X 6 2001 Max(Int)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;VI. Utilizaremos la tabla Sales.SalesOrderDetail para mostrar cómo es posible particionar una tabla poblada&lt;br /&gt;a. Consultamos sus índices,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Normalmente usaria el store procedure Sp_helpIndex para verificarlos, sin embargo al tener un schema diferente al que tengo como predeterminado en mi usuario , me quede pensando y arme un script que nos da los indices, finalmente un problema nos da una oportunidad de hacer las cosas de una forma diferente, asi que :&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;Select Distinct Indexes.Name,Indexes.Index_Id,Type_desc,Columns.Name from sys.indexes Indexes&lt;br /&gt;Inner join sys.columns Columns on Indexes.Object_ID=Columns.Object_ID&lt;br /&gt;Inner join sys.index_columns IndexColumns&lt;br /&gt;ON Columns.Object_ID=IndexColumns.Object_ID and Columns.Column_ID=IndexColumns.Column_ID&lt;br /&gt;where Columns.object_ID=(Select object_id&lt;br /&gt;from sys.tables where name='SalesOrderDetail')&lt;br /&gt;Order by Indexes.Index_Id&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;b. Se identifican los índices que están involucrados con la columna mediante la cual deseamos crear un índice particionado.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;Drop index AK_SalesOrderDetail_rowguid on Sales.SalesOrderDetail&lt;br /&gt;Drop index IX_SalesOrderDetail_ProductID on Sales.SalesOrderDetail&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;c. Recreamos el índice conforme a nuestros requerimientos&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;Create NonClustered Index NC_ProducID_SalesOrderDetail&lt;br /&gt;On Sales.SalesOrderDetail(ProductID)&lt;br /&gt;on SchemaProductos(ProductID)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;d. Posteriormente podemos consultar la información de cómo esta ahora particionada nuestra tabla&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;Select * from sys.partitions where object_ID=(Select object_id&lt;br /&gt;from sys.tables where name='SalesOrderDetail')&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ejemplo :Para identificar que tenemos grabado en una partición especifica&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;Select $Partition.FnParticionesProductos(777)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ejemplo: Para identificar a que partición le corresponde un valor.&lt;br /&gt;&lt;br /&gt;Nota: Particionar una tabla sin datos es aun más sencillo pues únicamente tenemos que hacer referencia al esquema de partición al crear la tabla.&lt;br /&gt;Beneficios&lt;br /&gt;&lt;br /&gt;Tener una estrategia de tablas particionadas le permite a SQL Server evitar leer del mismo FileGroup y FileData la información solicitada, si la condición SARG se hace sobre un índice particionado SQL sabrá en que segmento debe buscar por lo que es mas rápido el acceso a la información.&lt;br /&gt;&lt;br /&gt; Si los archivos de datos se encuentran en unidades de disco duro independiente SQL puede efectuar lecturas paralelas.&lt;br /&gt;&lt;br /&gt;Nota Final: Como se menciono, el detalle de la estrategia a implementar usando particiones depende de la infraestructura disponible, no es tarea sencilla y debe hacerse con el respeto que se merece esta tarea respaldando siempre la BD y los scripts de los constraints e índices a borrar y recrear en caso de tablas ya pobladas.&lt;br /&gt;&lt;br /&gt;Referencias&lt;br /&gt;http&lt;span style="color:#000099;"&gt;://msdn.microsoft.com/en-us/library/ms186307(SQL.90).aspx&lt;br /&gt;http://msdn.microsoft.com/en-us/library/ms179854.aspx&lt;br /&gt;http://msdn.microsoft.com/en-us/library/ms187802(v=SQL.90).aspx&lt;br /&gt;http://msdn.microsoft.com/en-us/library/ms175012(v=SQL.90).aspx&lt;br /&gt;http://msdn.microsoft.com/en-us/library/aa275464(SQL.80).aspx&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-4142784389178137327?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QgcfGcvH3T3fshqh47MRMnRtzIk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QgcfGcvH3T3fshqh47MRMnRtzIk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QgcfGcvH3T3fshqh47MRMnRtzIk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QgcfGcvH3T3fshqh47MRMnRtzIk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/ZqaUJfhVyUU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/4142784389178137327/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/06/particionar-indice-sql.html#comment-form" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/4142784389178137327?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/4142784389178137327?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/ZqaUJfhVyUU/particionar-indice-sql.html" title="Particionar Indice SQL" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/06/particionar-indice-sql.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcGSXsyfCp7ImA9WxFbF08.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-8799976968198900098</id><published>2010-06-26T17:03:00.000-07:00</published><updated>2010-07-09T17:50:28.594-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-09T17:50:28.594-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Diccionario de datos</title><content type="html">Si alguien se pregunta sobre la posibilidad de obtener la definiciòn de tablas (Nombre, tipo de dato, longitud, nulo) en SQL, la respuesta es si.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Es realmente muy sencillo, existen otras formas de obtenerlo , les comparto una :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000066;"&gt;Declare @Tabla varchar(100)&lt;br /&gt;Set @Tabla= 'CAT_TIPOS_ARCHIVO'&lt;br /&gt;Select Schemas.Table_Name [Tabla],schemas.Column_name [Columna],&lt;br /&gt;EP.Value [Descripcion]&lt;br /&gt;,Schemas.data_type [Tipo de dato],&lt;br /&gt;col.max_length [Longitud],col.is_nullable [Permite Nullo]from&lt;br /&gt;INFORMATION_SCHEMA.COLUMNS Schemas&lt;br /&gt;Inner join (Select * from Sys.columns&lt;br /&gt;where object_id=(Select Object_ID from sys.objects where name=@Tabla)&lt;br /&gt;) Col&lt;br /&gt;On Schemas.Column_name=Col.Name&lt;br /&gt;Left Join sys.extended_properties EP&lt;br /&gt;on EP.Major_id=Col.object_id and EP.minor_id=Col.Column_id&lt;br /&gt;where Schemas.Table_Name=@Tabla&lt;br /&gt;EXEC sys.sp_addextendedproperty @name=N'MS_Description',&lt;br /&gt;@value=N'Clave del usuario que modifico el registro' ,&lt;br /&gt;@level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',&lt;br /&gt;@level1name=N'CAT_TIPOS_ARCHIVO', @level2type=N'COLUMN',&lt;br /&gt;@level2name=N'TAR_CVE_USUARIO';&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Espero sea de su utilidad&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Saludos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-8799976968198900098?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xq2uvtBQ5lZ8ov5CdE7pLeH1GA0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xq2uvtBQ5lZ8ov5CdE7pLeH1GA0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xq2uvtBQ5lZ8ov5CdE7pLeH1GA0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xq2uvtBQ5lZ8ov5CdE7pLeH1GA0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/FrAtLKxEU6g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/8799976968198900098/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/06/diccionario-de-datos.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/8799976968198900098?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/8799976968198900098?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/FrAtLKxEU6g/diccionario-de-datos.html" title="Diccionario de datos" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/06/diccionario-de-datos.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMBQ34yeCp7ImA9WxFVFUo.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-5195771658869265432</id><published>2010-06-14T20:25:00.000-07:00</published><updated>2010-06-14T20:27:32.090-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-14T20:27:32.090-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Habilitar AWE</title><content type="html">Por Default el máximo de memoria que puede utilizar SQL Server en un sistema operativo de 32 Bits es de 2 GB , sin deseamos poder acceder a mas memoria es necesario habilitar AWE lo cual no per-mitirá usar hasta 3 GB en un sistema operativo de 32 Bits. Describiremos los pasos para habilitarlo.&lt;br /&gt;&lt;br /&gt;A. Procedemos a habilitar el mostrar opciones avanzadas en la instancia instalada y habili-tamos AWE&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;sp_configure 'show advanced options', 1&lt;br /&gt;RECONFIGURE&lt;br /&gt;GO&lt;br /&gt;sp_configure 'awe enabled', 1&lt;br /&gt;RECONFIGURE&lt;br /&gt;GO&lt;br /&gt;&lt;/span&gt;B. Redimensionamos los limites de memoria a usar&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;sp_configure 'min server memory', 1024&lt;br /&gt;RECONFIGURE&lt;br /&gt;GO&lt;br /&gt;sp_configure 'max server memory', 3144&lt;br /&gt;RECONFIGURE&lt;br /&gt;GO &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;C. Modificamos el archivo Boot.Ini ,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Agregue lo siguiente al final de la línea de inicio que incluye el modificador /fastdetect: /3GB&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Referencias&lt;br /&gt;http://msdn.microsoft.com/es-es/library/ms190731.aspx&lt;br /&gt;http://technet.microsoft.com/es-es/library/bb124810(EXCHG.65).aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-5195771658869265432?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5m5nWSU-ltslgWKDku3cbg6TdDg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5m5nWSU-ltslgWKDku3cbg6TdDg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5m5nWSU-ltslgWKDku3cbg6TdDg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5m5nWSU-ltslgWKDku3cbg6TdDg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/Lhp3w3jRMZI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/5195771658869265432/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/06/habilitar-awe.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/5195771658869265432?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/5195771658869265432?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/Lhp3w3jRMZI/habilitar-awe.html" title="Habilitar AWE" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/06/habilitar-awe.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUMRX88eip7ImA9WxFVFUo.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-4612031835538083842</id><published>2010-06-14T20:22:00.000-07:00</published><updated>2010-06-14T20:24:44.172-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-14T20:24:44.172-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Indices perdidos</title><content type="html">Cuando creamos nuestros objetos de base de datos, concretamente Tablas y vistas indexa-das suele ocurrir que no contemplemos todos los índices que serán necesarios para satisfacer nuestras llamadas a la Base de Datos.&lt;br /&gt;&lt;br /&gt;Una forma de identificar índices perdidos (no existen) es hacer uso de la vista del sistema &lt;span style="color:#000099;"&gt;sys.dm_db_missing_index_details&lt;/span&gt; la cual nos regresa información detallada de los índices que hacen falta en nuestra Base de datos. Si nuestra labor fuera supervisar el funcionamiento de un servidor o un conjunto de servidores con una o más instancias de SQL Server lo correcto sería empezar a dar prioridad a las Bases de Datos con un número de índices no creados más alto, para lo cual podemos hacer uso del siguiente script:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;SELECT&lt;br /&gt;DB_NAME(database_id) [Nombre de base de datos]&lt;br /&gt;, count(*) [Numero de indices perdidos]&lt;br /&gt;FROM sys.dm_db_missing_index_details&lt;br /&gt;GROUP BY DB_NAME(database_id)&lt;br /&gt;ORDER BY 2 DESC;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Una vez que sabemos que Base de datos es la que nos puede involucrar en mayor medida índices que no fueron creados el siguiente paso es identificar las tablas y columnas que corresponden a dichos índices.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hasta aquí hemos visto en que nos podemos apoyar, nuestro siguiente paso es generar un script que nos retorne el detalle de los índices perdidos:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;SELECT TOP 100&lt;br /&gt;DB_NAME(database_id) [Nombre de base de datos]&lt;br /&gt;,[Costo total] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0)&lt;br /&gt;, avg_user_impact&lt;br /&gt;, TableName = statement&lt;br /&gt;, [EqualityUsage] = equality_columns&lt;br /&gt;, [InequalityUsage] = inequality_columns&lt;br /&gt;, [Include Cloumns] = included_columns&lt;br /&gt;FROM sys.dm_db_missing_index_groups g&lt;br /&gt;INNER JOIN sys.dm_db_missing_index_group_stats s&lt;br /&gt;ON s.group_handle = g.index_group_handle&lt;br /&gt;INNER JOIN sys.dm_db_missing_index_details d&lt;br /&gt;ON d.index_handle = g.index_handle&lt;br /&gt;ORDER BY [Nombre de base de datos],[Costo total] DESC;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Una vez analizado este punto, podemos darnos cuenta que el crear los índices perdidos no es un proceso que se pueda automatizar de una manera por decir sencilla, ya que la creación de un índice que involucra más de una columna y que incluso tiene columnas de tipo INCLUDE es una tarea que debe ser revisada detalladamente, pues el orden de las columnas en que establezcamos la creación de nuestros índices puede marcar la diferencia entre un índice bien construido y uno mal o regularmente construido.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-4612031835538083842?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/k8Ub8LWB2OXLIdRHudgF59VciL8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k8Ub8LWB2OXLIdRHudgF59VciL8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/k8Ub8LWB2OXLIdRHudgF59VciL8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k8Ub8LWB2OXLIdRHudgF59VciL8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/xGSMAW_kDeU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/4612031835538083842/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/06/indices-perdidos.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/4612031835538083842?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/4612031835538083842?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/xGSMAW_kDeU/indices-perdidos.html" title="Indices perdidos" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/06/indices-perdidos.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcMQnk8fip7ImA9WxFVFUo.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-3338655967760486928</id><published>2010-06-14T20:18:00.000-07:00</published><updated>2010-06-14T20:21:23.776-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-14T20:21:23.776-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Indices mas costosos no utilizados</title><content type="html">&lt;strong&gt;Identificar indices mas costosos no utilizados &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Las operaciones de Inserción, actualización y eliminación provocan un mantenimiento a los índices relacionados a nuestra tabla. Recordemos que SQL determina el mejor camino (plan de ejecución) con el que resolverá una consulta, se apoya en las estadísticas de las columnas de las tablas involucradas y en el porcentaje de fragmentación de los índices, si bien es cierto que podemos forzar el uso de un índice cuando se resuelve una consulta esto debe hacerse solo en casos extremos y con un amplio análisis.&lt;br /&gt;&lt;br /&gt;El punto al cual pretende dirigir esta tema es que si un índice no esta siendo usado por SQL , su presencia puede afectar el desempeño de nuestras consultas ,por lo cual es importante identificarlos y borrarlos una vez que hemos comprobado que las columnas involucradas tie-nen sus estadísticas actualizadas y que a pesar de eso SQL no los usa.&lt;br /&gt;&lt;br /&gt;Una vez mas nos apoyaremos en las vistas dinámicas del sistema , &lt;span style="color:#000099;"&gt;sys.dm_db_index_usage_stats&lt;/span&gt; es el nombre de la vista que usaremos y las columnas de nuestro interés son:&lt;br /&gt;&lt;br /&gt;database_id  : Id. de la base de datos en la que se define la tabla o vista.&lt;br /&gt;object_id : Id. de la tabla o vista en la que se define el índice.&lt;br /&gt;index_id : Id. del índice.&lt;br /&gt;user_seeks : Número de consultas de búsqueda realizadas por el usuario.&lt;br /&gt;user_scans             : Número de consultas de recorrido realizadas por el usuario.&lt;br /&gt;user_lookups         : Número de búsquedas de marcadores realizadas por consultas de usuario.&lt;br /&gt;user_updates        : Número de consultas de actualización realizadas por el usuario.&lt;br /&gt;last_user_seek     : Hora en que el usuario realizó la última búsqueda.&lt;br /&gt;last_user_scan     : Hora en que el usuario realizó el último recorrido.&lt;br /&gt;last_user_lookup : Hora de la última búsqueda del usuario.&lt;br /&gt;last_user_update : Hora en que el usuario realizó la última actualiza-ción.&lt;br /&gt;system_seeks      : Número de consultas de búsqueda realizadas por el sistema.&lt;br /&gt;system_scans      : Número de consultas de recorrido realizadas por el sistema.&lt;br /&gt;system_lookups  : Número de búsquedas realizadas por consultas del sistema.&lt;br /&gt;system_updates  : Número de consultas de actualización realizadas por el sistema.&lt;br /&gt;&lt;br /&gt;Para recolectar la información correspondiente a los índices más costosos no utilizados de-berán ejecutar el siguiente script :&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;SELECT OBJECT_NAME(ind.object_id) [Tabla], ind.name [Indice]&lt;br /&gt;FROM Sys.Indexes ind&lt;br /&gt;INNER JOIN Sys.Objects obj ON obj.object_id = in-d.object_id&lt;br /&gt;WHERE OBJECTPROPERTY(obj.object_id,'IsUserTable') = 1&lt;br /&gt;AND NOT EXISTS&lt;br /&gt;(SELECT 1 FROM Sys.dm_db_index_usage_stats usg&lt;br /&gt;WHERE usg.object_id = ind.object_id&lt;br /&gt;AND usg.index_id = ind.index_id&lt;br /&gt;AND ind.index_id = usg.index_id&lt;br /&gt;) and ind.name is not null&lt;br /&gt;ORDER BY&lt;br /&gt;[Tabla],&lt;br /&gt;[Indice] &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Referencias&lt;br /&gt;http://technet.microsoft.com/es-mx/library/ms188755.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-3338655967760486928?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xw_LgCb91MAN3EDR7HL_03xMxIY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xw_LgCb91MAN3EDR7HL_03xMxIY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xw_LgCb91MAN3EDR7HL_03xMxIY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xw_LgCb91MAN3EDR7HL_03xMxIY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/xNtxzNe8W3w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/3338655967760486928/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/06/indices-mas-costosos-no-utilizados.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/3338655967760486928?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/3338655967760486928?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/xNtxzNe8W3w/indices-mas-costosos-no-utilizados.html" title="Indices mas costosos no utilizados" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/06/indices-mas-costosos-no-utilizados.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4ARX0-fSp7ImA9WhdbFEs.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-5800055061701403273</id><published>2010-06-14T20:10:00.000-07:00</published><updated>2011-10-12T16:09:04.355-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-12T16:09:04.355-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Optimizar TEMPDB</title><content type="html">TEMPDB es una base de datos de SQL (sistema), optimizarla nos ayudara a que nuestras operaciones sean mas rapidas, en busca de dar una receta de cocina se dira lo siguiente :&lt;br /&gt;&lt;br /&gt;I. Modo de recuperación : Establecer el modo de recuperación de la BD en SIMPLE , se puede consultar el modo actual de recuperación mediante el siguiente script&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;Select [name] ,state_desc ,recovery_model_desc From sys.databases where Name='TEMPDB'&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Posteriormente en caso de encontrar en un modo diferente a [SIMPLE], se puede modificar con el script :&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;ALTER DATABASE tempdb SET RECOVERY SIMPLE;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;II. Ubicación : Colocar TEMPDP en un Disco duro diferente al disco duro del sistema operativo y diferente al disco duro donde radica la BD del SIP.&lt;br /&gt;a. SQL Server 2005 efectúa operaciones en TEMPDB al crear tablas tempora-les, agrupar, ordenar , utilizar cursores, entre algunas otras. Cuando movemos de ubicación TEMPDB logramos reducir el nivel de contención al disco duro.&lt;br /&gt;b. Debe ser un disco duro independiente ,no una partición.&lt;br /&gt;&lt;br /&gt;III. Data File : Crear un archivo de datos por cada procesador existente en el servidor, es decir si el servidor tuviera 8 procesadores deberíamos tener 8 archivos de datos. Asigne el mismo tamaño a cada archivo creado&lt;br /&gt;&lt;br /&gt;IV. Establecer el tipo de crecimiento de los archivos en tamaño ,la configuración deberá corresponder a que la suma de los archivos de datos de TEMPDB no excedan 500 Megas. Si se desea un valor más exacto deberá hacerse un análisis de la capacidad de escritura en el disco duro del procesador,&lt;br /&gt;&lt;br /&gt;a. Para evitar que se produzcan tiempos de espera de bloqueo temporal, se recomienda limitar la operación de crecimiento automático a unos dos minutos&lt;br /&gt;&lt;br /&gt;Por ejemplo, si el subsistema de E/S puede inicializar un archivo a 50 MB por segundo, se deberá establecer el incremento de FILEGROWTH en 6 GB como máximo.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Como siempre podemos recurrir a las recomendaciones de Microsoft, aqui una excelente referencia&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc966545.aspx"&gt;http://technet.microsoft.com/en-us/library/cc966545.aspx&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-5800055061701403273?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qbddOhcJO2M0qjegj7i8Hg4TGg4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qbddOhcJO2M0qjegj7i8Hg4TGg4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qbddOhcJO2M0qjegj7i8Hg4TGg4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qbddOhcJO2M0qjegj7i8Hg4TGg4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/hGjgEln6Mgw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/5800055061701403273/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/06/optimizar-tempdb.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/5800055061701403273?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/5800055061701403273?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/hGjgEln6Mgw/optimizar-tempdb.html" title="Optimizar TEMPDB" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/06/optimizar-tempdb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkENQnw8eCp7ImA9WxFWEE8.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-2583176222208150678</id><published>2010-05-27T21:20:00.000-07:00</published><updated>2010-05-27T21:24:53.270-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-27T21:24:53.270-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Casos de Exito SQL Server</title><content type="html">Muchas veces he escuchado comentarios sobre que SQL Server no es tan bueno, no soporta mucha informacion y cosas por el estilo. Yo no coincido con ellos, SQL Server es un excelente producto que solo debemos saber explotar.&lt;br /&gt;&lt;br /&gt; Les dejo la siguiente liga, yo pues entre mas conosco el producto mas me enamoro de el.&lt;br /&gt;&lt;br /&gt; &lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/case-studies.aspx"&gt;http://www.microsoft.com/sqlserver/2008/en/us/case-studies.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-2583176222208150678?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/142X5iZ_FV-TPwNNgVJtDpYHWuc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/142X5iZ_FV-TPwNNgVJtDpYHWuc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/142X5iZ_FV-TPwNNgVJtDpYHWuc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/142X5iZ_FV-TPwNNgVJtDpYHWuc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/DhO-786s3w8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/2583176222208150678/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/05/casos-de-exito-sql-server.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/2583176222208150678?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/2583176222208150678?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/DhO-786s3w8/casos-de-exito-sql-server.html" title="Casos de Exito SQL Server" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/05/casos-de-exito-sql-server.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkECRXw-eCp7ImA9WxFXFkg.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-7162959199241194541</id><published>2010-05-23T14:18:00.000-07:00</published><updated>2010-05-23T14:37:44.250-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-23T14:37:44.250-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Identificando planes de ejecuciòn ineficientes</title><content type="html">&lt;div align="justify"&gt;&lt;br /&gt;El tema de optimizar nuestra Base de datos es bastante amplio, esta entrada será solo una de una serie que pretendo subir tocando diversos puntos para identificar y solucionar problemas en nuestra Base de Datos.&lt;br /&gt;Recuerdo haber tenido contacto con un administrador de Base de datos al que se le cuestionaba el rendimiento tan pobre de la Base de datos, su respuesta era mostrarnos una grafica del Monitor de performance en donde se veían picos en el servidor y cuellos de botella en el procesador. ¿Pero eso es suficiente? La respuesta es no, los cuellos de botella en nuestro procesador se pueden deber a diversas causas, es decir eso solo es lo que se ve por fuera, pero tenemos que investigar que es lo que exactamente hizo que el procesador estuviera tan demandado.&lt;br /&gt;Para hacerlo una opción es ejecutar una traza y analizarla pero también debemos siempre buscar apoyarnos en las DMVs que SQL desde la versión 2005 nos proporciona, estas son vistas y funciones que nos proporcionan detalle del comportamiento de nuestra Base de datos.&lt;br /&gt;En esta ocasión las usaremos para obtener un script que nos permita identificar las consultas más costosas en términos de procesador, el resultado se debe analizar a fondo, pues un escenario posible es que tengamos una consulta sumamente costosa pero que se ejecuta solo esporádicamente y quizá otra menos costosa pero que se ejecuta cientos o miles de veces, entonces debemos nosotros saber a dónde apuntar nuestra atención.&lt;br /&gt;&lt;span style="color:#000099;"&gt;Select Top 10&lt;br /&gt;total_worker_time/execution_count as avg_cpu_cost,plan_handle,&lt;br /&gt;execution_count,(Select substring(text,statement_start_offset/2+1,&lt;br /&gt;(Case when Statement_end_offset=-1&lt;br /&gt;Then len(convert(nvarchar(max),text))*2&lt;br /&gt;Else Statement_end_offset&lt;br /&gt;End - statement_start_offset)/2)&lt;br /&gt;From sys.dm_exec_sql_text(sql_handle)) as query_text&lt;br /&gt;From sys.dm_exec_query_stats&lt;br /&gt;Order by [avg_cpu_cost] desc&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Lo que nos regresa esta consulta es el porcentaje promedio de CPU que es utilizado cada vez que se ejecuta una consulta , el número de veces que es invocada esa consulta , el Id del plan de ejecución y por último la consulta en sí, nuestro trabajo es una vez identificadas poder aislar el porqué de ese costo. &lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;Nota: La ejecuciòn de esta consulta unicamente nos traera los planes que SQL mantiene en el cache, es decir pudieran existir otros que no nos arroje la consulta . Para resolver este problema la recomendaciòn de Microsoft es que ejecutemos periodicamente esta consulta para obtener informaciòn mas completa.&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Por ahora con esto termino este post, esto solo es una pequeña parte de las cosas que tenemos que considerar cuando buscamos optimizar nuestra Base de datos, saludos y ojala les sea de utilidad. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-7162959199241194541?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/diooGO6zUNO-p5Pv_XtQ2_uNxGw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/diooGO6zUNO-p5Pv_XtQ2_uNxGw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/diooGO6zUNO-p5Pv_XtQ2_uNxGw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/diooGO6zUNO-p5Pv_XtQ2_uNxGw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/0_y84gKTJhc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/7162959199241194541/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/05/identificando-planes-de-ejecucion.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/7162959199241194541?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/7162959199241194541?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/0_y84gKTJhc/identificando-planes-de-ejecucion.html" title="Identificando planes de ejecuciòn ineficientes" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/05/identificando-planes-de-ejecucion.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUGSHc_cSp7ImA9WxFXFk8.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-2740413140630618059</id><published>2010-05-23T07:35:00.000-07:00</published><updated>2010-05-23T07:50:29.949-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-23T07:50:29.949-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Schemas</title><content type="html">&lt;div align="justify"&gt;SQL Server desde la version 2005 nos ofrece como una de las nuevas características el uso de schemas, ¿para qué sirven, que son, realmente es importante calificar los nombres de los objetos con el esquema al que pertenecen? &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Los esquemas son objetos que sirven como contenedores de otros objetos, para la gente que es de tecnología de .NET la analogía serian los NameSpaces. Los esquemas nos permiten agrupar objetos en ellos. &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;La sintaxis para crear un esquema es &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;Create Schema [NombreEsquema] AUTHORIZATION [NombreUsuario] &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Tambien lo podemos crear mediante el asistente para lo cual abrimos el Managment Studio/Object Explorer, nos colocamos en el nodo de nuestra Base de Datos, despues en el nodo [Security] y dentro de el en el nodo [Schemas] podemos crearlo haciendo  click con el botòn derecho en la opcion Nuevo esquema.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Vamos a crear nuestro esquema y continuaremos profundizando sobre su uso &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;Create Schema Audit; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Como se menciono antes los esquemas nos permiten contener objetos de Base de datos.&lt;br /&gt;Crearemos un par de tablas que estaran dentro del esquema Audit. &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;Create Table Audit.Tbl_Eventos&lt;br /&gt;(&lt;br /&gt;ID Int Identity(1,1) Primary key&lt;br /&gt;,Evento varchar(100)&lt;br /&gt;);&lt;br /&gt;GO&lt;br /&gt;Create Table Audit.Tbl_Usuarios&lt;br /&gt;(&lt;br /&gt;ID Int Identity(1,1) Primary key&lt;br /&gt;,Usuario varchar(100)&lt;br /&gt;);&lt;/span&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Veamos como funciona esto mendiante un select a nuestras tablas antes creadas&lt;br /&gt;Lo que muchas veces hacemos al invocar el nombre de un objeto es apuntar directamente a el con algo como: &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;Select * from Tbl_Eventos; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Lo cual si lo ejecutan veran que les ha generado un error ¿Por qué? , la razon es porque desde SQL 2005 los nombres de objetos se califican mediante cuatro partes &lt;strong&gt;[DBServerName].[DBName].[Schema].[Table]&lt;/strong&gt;, en la version de SQL 2000 los nombres se calificaban de una manera un poco distinta y era mediante &lt;strong&gt;[DBServer].[DBName].[ObjectOwner].[Table]&lt;/strong&gt;&lt;/div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;div align="justify"&gt;&lt;br /&gt;Analizando lo anterior,lo que debemos entender es que SQL antes calificaba los nombres de objetos directamente asociandolos al propietario.Desde SQL 2005 los objetos no le pertenecen directamente a un usuario, a quien estan vinculados es a un esquema y el esquema tiene un dueño, esto nos habre posibilidades de las cosas que podemos hacer con los esquemas.&lt;br /&gt;Nuestra instrucción Select debe quedar de la forma &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;Select * from Audit.Tbl_Eventos; &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;¿Por qué es bueno indicar el nombre del esquema? SQL al resolver una petición y no tener especificado el esquema al que pertenece el objeto invocado tiene que determinar si existe en el esquema que tiene por default el usuario firmado, parece poco, sin embargo todo es importante y al calificar nuestra tabla con el esquema nos aseguramos de indicarle a SQL en que esquema esta nuestra tabla.&lt;br /&gt;Los esquemas además nos sirven muy bien para asegurar los accesos a nuestros objetos, imaginemos que tenemos cien tablas dentro del esquema Audit y que tenemos que dar acceso de solo lectura a todas ellas a un usuario nuevo, siempre que pensemos en resolver algo lo debemos hacer en términos de “con el menor esfuerzo”.&lt;br /&gt;La instrucción que nos permite asignarle algún permiso&lt;br /&gt;&lt;span style="color:#000099;"&gt;GRANT [Permiso] ON SCHEMA::[SchemaName] TO [NombreUsuario]&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Ejemplo:&lt;br /&gt;&lt;span style="color:#000099;"&gt;CREATE LOGIN MyLogin WITH PASSWORD='pa$w00rd'&lt;br /&gt;GO&lt;br /&gt;CREATE USER MyLogin FROM LOGIN MyLogin &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;GRANT SELECT ON SCHEMA::[Audit] TO [MyLogin]&lt;br /&gt;&lt;/span&gt;¿Pero que sucede si un dia necesitamos cambiar de un esquema la ubicación de una tabla? Eso es relativamente sencillo.&lt;br /&gt;Con la instrucciòn &lt;span style="color:#000099;"&gt;Alter Schema &lt;/span&gt;lo podemos hacer&lt;br /&gt;Ejemplo&lt;br /&gt;&lt;span style="color:#000099;"&gt;Create schema Audit2&lt;br /&gt;--transferir objetos&lt;br /&gt;Alter schema Audit2 Transfer Audit.Tbl_Eventos &lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Como podemos ver es realmente simple cambiar de esquema una table.&lt;br /&gt;Por último me gustaría mencionar algo que se llaman Sinónimos en SQL y que nos pueden ahorrar un poco de trabajo al nombrar objetos.&lt;br /&gt;Los sinónimos no son más que objetos que nos sirven para asignarle un alias a otro objeto, si este está en un esquema podemos ahorrarnos entonces tener que escribir el esquema y el nombre completo del objeto.&lt;br /&gt;Ejemplo:&lt;br /&gt;&lt;span style="color:#000099;"&gt;Create Synonym AD For Audit2.Tbl_Eventos&lt;br /&gt;Select * from Ad&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Con esto terminamos el post sobre esquemas, solo quiero volver a mencionar la importancia de pensar en términos del menor esfuerzo, ¿Qué significa, que implica? Lo que implica es que sepamos diversas soluciones a un problema, que sepamos o que busquemos cual es la mejor y eso con el pasar del tiempo nos dara oportunidad de tener más tiempo que debemos ocupar en aprender, aprender y seguir aprendiendo. Es redondo, cuando nos preocupamos y ocupamos por lo importante antes que lo urgente nos hace mejores profesionistas. Recuerdo con afecto a un jefe hace años , bastante severo en algunas cosas, pero con mucha experiencia y la verdad con mucha sabiduría. &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Un día llamandome la antencion me dijo :Charly imaginate que vas en carretera, conduces tu auto, te urge llegar a tu destino es urgentísimo llegar, pero te das cuenta que la gasolina no te alcanzara, ¿Qué debes hacer? La reflexion es que lo urgente es llegar , pero lo importante es que tengas como hacerlo, se tendria uno que dar un tiempo para recargar gasolina. &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Así mismo en nuestro trabajo tenemos lo urgente y lo importante, lo importante es que nuestro conocimiento sea más amplio en buscar la mejor forma de resolver un problema lo cual nos llevara a ser mejores profesionistas y a encajar mejor en nuestro empleo, a poder ayudar de una mejor forma a la empresa para la que trabajamos y eso se los aseguro se traducirá en bienestar para nosotros.&lt;br /&gt;Esto no quiere decir que debemos ser obsesivos con la perfección en más de una ocasión yo he tenido que decidir que así como esta mi código debe quedarse aunque no sea la mejor forma, porque si no nunca terminaríamos un proyecto.&lt;br /&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;  &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Les dejo mis mejores saludos, y espero les sea de utilidad este post. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-2740413140630618059?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uHImPQLo7wfjrqVyEh9yiYrVayA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uHImPQLo7wfjrqVyEh9yiYrVayA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uHImPQLo7wfjrqVyEh9yiYrVayA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uHImPQLo7wfjrqVyEh9yiYrVayA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/7FRGYT5neq4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/2740413140630618059/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/05/schemas.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/2740413140630618059?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/2740413140630618059?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/7FRGYT5neq4/schemas.html" title="Schemas" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/05/schemas.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUECSXk7eip7ImA9WxFXFUQ.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-4919928995129287379</id><published>2010-05-22T21:04:00.000-07:00</published><updated>2010-05-22T22:47:48.702-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-22T22:47:48.702-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Guia de Instalaciòn de SQL Server</title><content type="html">¿Como instalar SQL Server?, en esta ocasiòn la intención es compartirle un documento de Word que contiene los pasos y una breve explicación sobre cada uno de ellos. Me resulta a veces un poco complicado el tema de pegar imágenes en el post y como este tiene muchas decidí mejor subir el archivo y dejarles la liga.&lt;br /&gt;&lt;br /&gt;http://docs.google.com/Doc?docid=0AdMayil2lBnHZGRzNHN3c3ZfMTk4YjY0OXpnaw&amp;hl=en&lt;br /&gt;&lt;br /&gt;o&lt;br /&gt;&lt;br /&gt;Download ...&lt;br /&gt;http://docs.google.com/leaf?id=0B9Mayil2lBnHYTRmODZiMjAtZGVlZi00ZmRmLWE1MzktMDFjYzhjNGM0NTYz&amp;hl=en&lt;br /&gt;&lt;br /&gt;Saludos y espero les sea de utilidad&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-4919928995129287379?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dNaNl4B_h0qc6O0nhuduLAnN1sw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dNaNl4B_h0qc6O0nhuduLAnN1sw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dNaNl4B_h0qc6O0nhuduLAnN1sw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dNaNl4B_h0qc6O0nhuduLAnN1sw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/epRdjVUdyW4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/4919928995129287379/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/05/guia-de-instalacion-de-sql-server.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/4919928995129287379?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/4919928995129287379?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/epRdjVUdyW4/guia-de-instalacion-de-sql-server.html" title="Guia de Instalaciòn de SQL Server" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/05/guia-de-instalacion-de-sql-server.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04GQHg9eCp7ImA9WxFXFUs.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-1247637457384864218</id><published>2010-05-20T21:10:00.000-07:00</published><updated>2010-05-22T15:05:21.660-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-22T15:05:21.660-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Save Transaction</title><content type="html">&lt;div align="justify"&gt;Hablemos un poco de transacciones, lo  ideal es que nuestras peticiones a la Base de Datos sean ACID, que quiere decir Atómicas, Consistente, Aisladas y durables, siempre que una serie de instrucciones a la Base de datos cumple con estas características se denomina transacción.&lt;br /&gt;ACID : (Atómicas)Lo que quiere decir es que nuestras peticiones sean ejecutadas como un solo bloque en el que se ejecuta todo o nada ,(Consistente) en el que se garantice que la integridad de nuestra base de datos no es alterada ,(Aisladas) que nuestras peticiones estén aisladas u ofrezcan un tipo de aislamiento que nos garantice que otras peticiones sobre los mismos datos no afecten las nuestras y que una vez que se ejecutaron los datos persistan y no se pierdan (durable).&lt;br /&gt;El tema de las transacciones realmente es muy amplio, en este post únicamente pretendo abordar un escenario específico que son los puntos de retorno en una transacción.&lt;br /&gt;En nuestra vida profesional nos puede tocar enfrentarnos a escenarios en los cuales tengamos algún proceso de SQL que requiera que podamos hacer un Rollback parcial. En otras palabras es posible con esto establecer puntos de retorno para nosotros en donde podamos deshacer solo parte de nuestra transacciòn.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;Para poder crear puntos de retorno lo hacemos mediante la instrucciòn Save Transation [NOMBRE TRANSACTION] , en nuestro codigo podemos tener tantos como querramos y cuando necesitemos regresar a un punto en especifico lo que se ejecuta es RollBack Transaction [NOMBRE TRANSACTION].&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;Para dejar atrás la teoría necesitaremos crear una tabla que utilizaremos en nuestro ejemplo.&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;--Creamos la tabla que usaremos&lt;br /&gt;&lt;span style="color:#000099;"&gt;If Not exists(Select * from sys.Objects where name='Tbl_Clientes'&lt;br /&gt;and Type='U')&lt;br /&gt;Create Table dbo.Tbl_Clientes&lt;br /&gt;(&lt;br /&gt;ClienteId Int Identity(1,1) Primary Key&lt;br /&gt;,Nombre varchar(30) Not null&lt;br /&gt;,[Fecha Registro] DateTime Not null Default Getdate()&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;Begin Transaction&lt;br /&gt;Insert into dbo.Tbl_Clientes(Nombre)&lt;br /&gt;Values('Julio Rodriguez');&lt;br /&gt;Insert into dbo.Tbl_Clientes(Nombre)&lt;br /&gt;Values('Oscar Rodriguez');&lt;br /&gt;Insert into dbo.Tbl_Clientes(Nombre)&lt;br /&gt;Values('Lourdes Rodriguez');&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Save Transaction PrimerBloque&lt;br /&gt;Select ClienteId,Nombre,[Fecha REgistro] from dbo.Tbl_Clientes&lt;br /&gt;&lt;br /&gt;Insert into dbo.Tbl_Clientes(Nombre)&lt;br /&gt;Values('Omar Ramirez');&lt;br /&gt;Insert into dbo.Tbl_Clientes(Nombre)&lt;br /&gt;Values('Mario Ramirez');&lt;br /&gt;Insert into dbo.Tbl_Clientes(Nombre)&lt;br /&gt;Values('Fernando Ramirez');&lt;br /&gt;&lt;br /&gt;Save Transaction SegundoBloque&lt;br /&gt;Select ClienteId,Nombre,[Fecha REgistro] from dbo.Tbl_Clientes&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Insert into dbo.Tbl_Clientes(Nombre)&lt;br /&gt;Values('Dante Romero');&lt;br /&gt;Insert into dbo.Tbl_Clientes(Nombre)&lt;br /&gt;Values('Ignacio Romero');&lt;br /&gt;&lt;br /&gt;Save Transaction TercerBloque&lt;br /&gt;Select ClienteId,Nombre,[Fecha REgistro] from dbo.Tbl_Clientes&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Rollback Transaction SegundoBloque&lt;br /&gt;Select ClienteId,Nombre,[Fecha REgistro] from dbo.Tbl_Clientes&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Commit Transaction;&lt;br /&gt;GO&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color:#000099;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color:#000000;"&gt;El punto a ejemplificar es que las posibilidades de lo que podemos hacer con esto ,pues estan en nuestras manos, nosotros podemos condicionar que bajo algun tipo de error o logica efectuemos un commit de nuestra transaccion y podamos hacer a un lado algo que se ejecuto pero que al final no nos interesa.&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color:#000099;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color:#000099;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color:#000099;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color:#000000;"&gt;Espero les sea de utilidad&lt;/span&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;span style="color:#000099;"&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-1247637457384864218?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lhi3mx4GBhq_cvAJ18EV3n_-hm0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lhi3mx4GBhq_cvAJ18EV3n_-hm0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lhi3mx4GBhq_cvAJ18EV3n_-hm0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lhi3mx4GBhq_cvAJ18EV3n_-hm0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/8U3mw0cWtKk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/1247637457384864218/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/05/hablemos-un-poco-de-transacciones-lo.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/1247637457384864218?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/1247637457384864218?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/8U3mw0cWtKk/hablemos-un-poco-de-transacciones-lo.html" title="Save Transaction" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/05/hablemos-un-poco-de-transacciones-lo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYDQnY_eip7ImA9WxFXEEk.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-5166931758258321054</id><published>2010-05-16T15:14:00.001-07:00</published><updated>2010-05-16T15:16:13.842-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-16T15:16:13.842-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Intersect</title><content type="html">Alguna vez platicaba con algunos compañeros expresándoles que SQL Server no solo son sentencias Insert y Select, es necesario que nosotros como desarrolladores conozcamos las diferentes ofertas que nos da SQL para resolver diferentes problemas.&lt;br /&gt;En esta ocasión quiero platicarles de una nueva forma de unir tablas que esta disponible desde SQL Server 2005 y esto es con la instrucción Intersect.&lt;br /&gt;Para poder ejemplificar y buscar dejar claro este tema crearemos un par de tablas y ejecutaremos una unión con INNER y la otra con Intersect para mostrar las diferencias.&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;Create Table dbo.Tbl_Clientes&lt;br /&gt;(&lt;br /&gt;IdCliente Int Identity(1,1) Primary key&lt;br /&gt;,Nombre varchar(200)&lt;br /&gt;,observaciones varchar(400)&lt;br /&gt;)&lt;br /&gt;Go&lt;br /&gt;&lt;br /&gt;Insert into dbo.Tbl_Clientes&lt;br /&gt;Values ('Cliente 1','NA');&lt;br /&gt;Insert into dbo.Tbl_Clientes&lt;br /&gt;Values ('Cliente 2','NA');&lt;br /&gt;Insert into dbo.Tbl_Clientes&lt;br /&gt;Values ('Cliente 3','NA');&lt;br /&gt;Insert into dbo.Tbl_Clientes&lt;br /&gt;Values ('Cliente 4','NA');&lt;br /&gt;&lt;br /&gt;Go&lt;br /&gt;&lt;br /&gt;Create Table dbo.Tbl_Facturas&lt;br /&gt;(&lt;br /&gt;IdFactura Int Identity(1,1) primary key&lt;br /&gt;,idCliente Int Not null&lt;br /&gt;,Fecha Datetime Not null Default Getdate()&lt;br /&gt;,Iva float Not null&lt;br /&gt;,Importe float Not null&lt;br /&gt;,Total float Not null&lt;br /&gt;,Observaciones varchar(max)&lt;br /&gt;)&lt;br /&gt;GO&lt;br /&gt;Alter Table dbo.Tbl_Facturas add Constraint Fk_Cliente&lt;br /&gt;Foreign key (idCliente) References dbo.Tbl_Clientes(IdCliente)&lt;br /&gt;Select IdCliente,Nombre from dbo.Tbl_Clientes;&lt;br /&gt;Insert dbo.Tbl_Facturas&lt;br /&gt;Values (1,getdate(),16,100,116,'Factura A');&lt;br /&gt;&lt;br /&gt;Insert dbo.Tbl_Facturas&lt;br /&gt;Values (1,getdate(),16,100,116,'Factura A.1');&lt;br /&gt;&lt;br /&gt;Insert dbo.Tbl_Facturas&lt;br /&gt;Values (1,getdate(),16,100,116,'Factura A.2');&lt;br /&gt;&lt;br /&gt;Insert dbo.Tbl_Facturas&lt;br /&gt;Values (2,getdate(),16,100,116,'Factura B');&lt;br /&gt;&lt;br /&gt;Insert dbo.Tbl_Facturas&lt;br /&gt;Values (3,getdate(),16,100,116,'Factura A');&lt;br /&gt;&lt;br /&gt;Insert dbo.Tbl_Facturas&lt;br /&gt;Values (4,getdate(),16,100,116,'Factura A');&lt;br /&gt;&lt;br /&gt;Select IdFactura ,idCliente ,Fecha ,Iva ,Importe ,Total ,Observaciones From dbo.Tbl_Facturas&lt;br /&gt;&lt;/span&gt;Ahora veremos justamente las diferencias entre usar INNER e Intersect&lt;br /&gt;&lt;br /&gt;Al crear un Select con una union interna veremos que nos regresa seis filas&lt;br /&gt;&lt;span style="color:#000099;"&gt;Select Tbl_Clientes.IdCLiente from dbo.Tbl_Clientes&lt;br /&gt;Inner join dbo.Tbl_Facturas on Tbl_Clientes.IDCliente=Tbl_Facturas.IDCliente&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Si agregamos la condiciòn Distinct recuperamos cuatro filas&lt;br /&gt;&lt;span style="color:#000099;"&gt;Select Distinct Tbl_Clientes.IdCLiente from dbo.Tbl_Clientes&lt;br /&gt;Inner join dbo.Tbl_Facturas on Tbl_Clientes.IDCliente=Tbl_Facturas.IDCliente&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Si hacemos uso de Intersect veremos que hace lo mismo que el anterior pero de una forma mas facil&lt;br /&gt;&lt;span style="color:#000099;"&gt;Select IdCliente from dbo.Tbl_Clientes&lt;br /&gt;Intersect&lt;br /&gt;Select IdCliente from dbo.Tbl_Facturas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Es decir, Intersect devuelve los valores distintos retornados por las consultas del lado izquierdo y derecho de la consulta&lt;br /&gt;La condición que tenemos para poder utilizar Intersect es que las consultas que estamos ejecutando tengan las mismas columnas y tipo de datos&lt;br /&gt;Saludos y hasta la proxima&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-5166931758258321054?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UtipphPFdDtOn_ibiyrTnRDnlSc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UtipphPFdDtOn_ibiyrTnRDnlSc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UtipphPFdDtOn_ibiyrTnRDnlSc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UtipphPFdDtOn_ibiyrTnRDnlSc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/IjcCPx2UbIg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/5166931758258321054/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/05/intersect.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/5166931758258321054?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/5166931758258321054?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/IjcCPx2UbIg/intersect.html" title="Intersect" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/05/intersect.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQNQHc5eyp7ImA9WxFXEE8.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-7067738128133483153</id><published>2010-05-16T09:03:00.000-07:00</published><updated>2010-05-16T09:29:51.923-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-16T09:29:51.923-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Capacitación" /><title>Download AdventureWorks</title><content type="html">Practicar, practicar y volver a practicar, es la única forma de mejorar nuestro perfil, Microsoft nos proporciona ejemplos en su documentación y mayormente esta referida a las bases de datos de AdventureWorks. SQL Server 2005 y 2008 no instalan por default las bases de datos de ejemplo, si te interesa descargarlas puedes hacerlo desde el sitio:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sqlserversamples.codeplex.com/"&gt;http://sqlserversamples.codeplex.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En donde además encontraras ejemplos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-7067738128133483153?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/n64qC8QSHZhE6-rDEjNN6eBoNyA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n64qC8QSHZhE6-rDEjNN6eBoNyA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/n64qC8QSHZhE6-rDEjNN6eBoNyA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n64qC8QSHZhE6-rDEjNN6eBoNyA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/oS9myUK1nBA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/7067738128133483153/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/05/download-adventureworks.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/7067738128133483153?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/7067738128133483153?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/oS9myUK1nBA/download-adventureworks.html" title="Download AdventureWorks" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/05/download-adventureworks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAFSHs9eip7ImA9WxFQGUk.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-2185909377625049184</id><published>2010-05-15T10:41:00.000-07:00</published><updated>2010-05-15T11:38:39.562-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-15T11:38:39.562-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Arquitectura" /><title>El Rol de un arquitecto</title><content type="html">&lt;div align="justify"&gt;Hola a todos nuevamente, es un placer para mi poder contribuir en algo a las nuevas generaciones y porque no también a los que ya estamos encaminados, ciertamente todos los días se puede aprender algo.&lt;br /&gt;&lt;br /&gt;Para comenzar este post quisiera poner una pregunta en la mesa ¿nos gusta desarrollar, te apasiona? ¿Quisieras cambiar de actividad y el desarrollo dejarlo en un par de años? . Creo que es válido que tengamos aspiraciones distintas, que nuestros gustos varíen. Si eres uno a quienes les apasiona la tecnología y el desarrollo seguramente esperas crecer tu perfil técnico, obtener alguna certificación y en algún momento erguirte como arquitecto de software.&lt;br /&gt;¿Pero es suficiente saber mucho? En mi opinión la respuesta es no, un arquitecto no solo debe ser un experto en tecnología, no es suficiente eso. Un arquitecto debe ser un excelente comunicador, de hecho si leemos sobre la certificación de Microsoft veremos el peso que ellos mismos le dan a las habilidades blandas de los candidatos.&lt;br /&gt;Un arquitecto efectivamente debe tener un excelente nivel no solo en aplicaciones, creo yo que también en Bases de datos pues uno es el complemento del otro, pero además debe ser capaz de poder compartir su experiencia y guiar a su equipo de trabajo y no hablo de dar un ejemplo sino de ser el ejemplo, de respeto a sus compañeros ,de buscar crear un ambiente de camaradas, en el que la gente se reconoce imperfecta y que sabe pedir ayuda y recibirla; pues siempre es mejor en un proyecto poder ahorrarnos tres días de búsqueda e investigación si en el equipo tenemos a un experto.&lt;br /&gt;Un arquitecto también debe poder hablar en el lenguaje de los usuarios entenderlos y no marearlos porque para ellos sus requerimientos, su funcionalidad debe hablarse en el lenguaje del negocio.&lt;br /&gt;Un arquitecto debe buscar ser un mentor para su equipo, debe apostar por el bienestar del grupo, de su gente. Porque sabe que su papel depende del papel del equipo y que es el pieza clave en la tarea de guiarlos al éxito&lt;br /&gt;Un arquitecto no tiene miedo de compartir su conocimiento porque todos los días hará algo por saber más que el día anterior y sabe también que cuando enseña aprende dos veces, que cuando se vuelve en mentor de un equipo de una persona perdurara en alguien mas y eso es una satisfacción en sí misma.&lt;br /&gt;Un arquitecto debe lograr ser asertivo, tolerante y que su acción sea el detonante para que la gente que trabaje con él o a su lado se esfuerce por ser un mejor profesional.&lt;br /&gt;Un arquitecto no sustituye la labor de un Project Manager, la función de administrar el proyecto sigue siendo del PM&lt;br /&gt;&lt;br /&gt;No quisiera redundar en esto, mejor los refiero a las publicaciones de Microsoft en donde la revista Architecture Journal en su número 15 nos habla del The Role of an Architect .&lt;br /&gt;Los invito a subscribirse a &lt;a href="http://msdn.microsoft.com/en-us/architecture/bb410935.aspx"&gt;http://msdn.microsoft.com/en-us/architecture/bb410935.aspx&lt;/a&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;En resumen yo diría que el expertice técnico no basta la actitud es importante, es lo más importante, con una buena actitud nos abrimos puertas, nos ganamos un amigo, vencemos la frustración porque les aseguro que más de una vez es la actitud la que nos sacara de un problema aun por encima de los conocimientos técnicos y es redondo porque es una buena actitud la que nos hace humildes, nos permite aprender de los demás sin miedo y es lo que nos mueve a buscar ser mejores.&lt;br /&gt;&lt;br /&gt;No pretendo que este post tenga la definiciòn de el Rol de un arquitecto, mi intenciòn solo es enumerar algunas cualidades, espero les sea de utilidad.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-2185909377625049184?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/k2pS_vhfAiuXuzCeWCft5WkY3gI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k2pS_vhfAiuXuzCeWCft5WkY3gI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/k2pS_vhfAiuXuzCeWCft5WkY3gI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k2pS_vhfAiuXuzCeWCft5WkY3gI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/7X8LFcFD0Bk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/2185909377625049184/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/05/el-rol-de-un-arquitecto.html#comment-form" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/2185909377625049184?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/2185909377625049184?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/7X8LFcFD0Bk/el-rol-de-un-arquitecto.html" title="El Rol de un arquitecto" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/05/el-rol-de-un-arquitecto.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMFQHw_fip7ImA9WxFXEE8.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-3113191186197843</id><published>2010-05-10T20:13:00.000-07:00</published><updated>2010-05-16T09:30:11.246-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-16T09:30:11.246-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Capacitación" /><title>Capacitaciòn gratuita Microsoft</title><content type="html">&lt;div align="justify"&gt;Hola nuevamente ,siguiendo mis convicciones sobre "el conocimiento que no se comparte no se esta utilizando de la manera correcta" les quiero compartir un recurso que recien encontre en esta busqueda de sitios y foros que puedan nutrir.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;a href="http://www.mslatam.com/latam/technet/mva2/Home.aspx"&gt;http://www.mslatam.com/latam/technet/mva2/Home.aspx&lt;/a&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;En el podremos encontrar cursos y carreras, pero para que nos les cuente mejor visitenlo.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;Creo que nuestra mentalidad en general debe ser de compartir, de ver crecer a los demas y alegrarnos por ellos, de no conformarnos y de aspirar siempre a un futuro mejor, cuando logramos en nosotros cambiar nuestro comportamiento podemos darle la vuelta al problema de cambiar a la gente, recuerden : &lt;em&gt;No puedes cambiar a la gente pero puedes cambiar tu, si cambias tu ,quiza puedas cambiar a tu hermano a tus hijos , a tus compañeros y entonces podremos cambiar a la gente.&lt;/em&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-3113191186197843?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DzL3GWZBE4SuHiN9_hZZwlKDVRc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DzL3GWZBE4SuHiN9_hZZwlKDVRc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DzL3GWZBE4SuHiN9_hZZwlKDVRc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DzL3GWZBE4SuHiN9_hZZwlKDVRc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/xZ8NFQrvoYM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/3113191186197843/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/05/capacitacion-gratuita-microsoft.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/3113191186197843?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/3113191186197843?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/xZ8NFQrvoYM/capacitacion-gratuita-microsoft.html" title="Capacitaciòn gratuita Microsoft" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/05/capacitacion-gratuita-microsoft.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkACRnw9cCp7ImA9WxFQGUk.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-6199260624803174213</id><published>2010-05-10T19:56:00.000-07:00</published><updated>2010-05-15T11:39:27.268-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-15T11:39:27.268-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Auditar Base de datos usando Trigger DDL</title><content type="html">Recientemente un compañero me pregunto si existía forma de identificar en que fecha se agrego una columna a una tabla en la base de datos, en ese momento respondí que no aunque mi respuesta no fue completa.&lt;br /&gt;&lt;br /&gt;Quiero en este blog compartir como debió terminar esa conversación .&lt;br /&gt;SQL Server nos permite auditar lo que sucede en nuestra Base de datos con diferentes mecanismos como C2 Audit ,SQL Server Audit o incluso una traza y desde la versión de SQL 2005 se agrego el uso de trigers DDL(Data Definition Language)&lt;br /&gt;Como siempre hago hincapié en que el objetivo de tener diferentes formas de atacar un problema es para usar lo más adecuado a nuestras necesidades y circustancias, por ejemplo si tenemos problemas de desempeño activar un mecanismo como C2 Audit nos podría generar aun más problemas, aun mas quizá solo nos interesa auditar cambios a la estructura de nuestra BD y no un nivel granular.&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;br /&gt;Para nuestro caso utilizaremos desencadenadores DDL para auditar cambios en la estructura de nuestra Base de datos, específicamente capturaremos todos los eventos del tipo &lt;strong&gt;DDL_DATABASE_LEVEL_EVENTS&lt;/strong&gt;,a continucación se muestra un arbol de eventos para tener presentes que tipo de acciones estaremos auditando.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_FSaJMczGI_M/S-jJ6ClOwwI/AAAAAAAAAGA/Ubl6uy1IZcw/s1600/eventos.gif"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 172px; DISPLAY: block; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5469843746404090626" border="0" alt="" src="http://1.bp.blogspot.com/_FSaJMczGI_M/S-jJ6ClOwwI/AAAAAAAAAGA/Ubl6uy1IZcw/s400/eventos.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Los eventos se recuperan con la función &lt;strong&gt;EVENTDATA&lt;/strong&gt; la cual retorna un XML con el ID del proceso, la fecha, el evento y la sentencia ejecutada&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;El script para crear y probar nuestro disparador DDL es :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;CREATE DATABASE AuditDDL –Creamos l&lt;br /&gt;&lt;br /&gt;use AuditDDL&lt;br /&gt;&lt;br /&gt;Create schema Audit&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CREATE TABLE Audit.DDL_DATABASE_LEVEL_EVENTS_LOG&lt;br /&gt;(&lt;br /&gt;ID uniqueIdentifier primary key Default NewId()&lt;br /&gt;, Fecha datetime Not null&lt;br /&gt;, DB_Session_User nvarchar(100) Not null default Session_User&lt;br /&gt;, DB_System_User nvarchar(100) Not null default System_User&lt;br /&gt;, DB_User_Name nvarchar(100) Not null default User_Name()&lt;br /&gt;, DB_Nombre varchar(100) Not null default Db_Name()&lt;br /&gt;, Host nvarchar(50) Not null default Host_Name()&lt;br /&gt;, Evento nvarchar(1000) Not null&lt;br /&gt;, Sentencia nvarchar(Max) Not null&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000099;"&gt;GO&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CREATE TRIGGER LogEventos&lt;br /&gt;ON DATABASE&lt;br /&gt;FOR DDL_DATABASE_LEVEL_EVENTS&lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt;Set NoCount ON&lt;br /&gt;DECLARE @data XML&lt;br /&gt;,@Definicion varchar(1000)&lt;br /&gt;SET @data = EVENTDATA();&lt;br /&gt;&lt;br /&gt;INSERT Audit.DDL_DATABASE_LEVEL_EVENTS_LOG&lt;br /&gt;( ID&lt;br /&gt;, Fecha&lt;br /&gt;, DB_Session_User&lt;br /&gt;, DB_System_User&lt;br /&gt;, DB_User_Name&lt;br /&gt;, DB_Nombre&lt;br /&gt;, Host&lt;br /&gt;, Evento&lt;br /&gt;, Sentencia )&lt;br /&gt;VALUES&lt;br /&gt;(NewId(),&lt;br /&gt;GETDATE(),&lt;br /&gt;CONVERT(nvarchar(100), Session_User),&lt;br /&gt;CONVERT(nvarchar(100), System_User),&lt;br /&gt;CONVERT(nvarchar(100), User_Name()),&lt;br /&gt;CONVERT(nvarchar(100), Db_Name()),&lt;br /&gt;CONVERT(nvarchar(100), Host_Name()),&lt;br /&gt;@data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),&lt;br /&gt;@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)')&lt;br /&gt;) ;&lt;br /&gt;END;&lt;br /&gt;GO&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Se que en la Web existen ejemplos similares e indudablemente en las referencias de Microsoft siempre encontraremos cada dato que necesitamos, mi idea es solo compartir algún ejemplo y en su caso mi interpretación ,creo que un ejemplo adicional nunca está de mas. &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-6199260624803174213?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JfxpmytlA1_Guzm2VtAnSpgap2s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JfxpmytlA1_Guzm2VtAnSpgap2s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JfxpmytlA1_Guzm2VtAnSpgap2s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JfxpmytlA1_Guzm2VtAnSpgap2s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/wpfyAmijRUI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/6199260624803174213/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/05/auditar-base-de-datos-usando-trigger.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/6199260624803174213?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/6199260624803174213?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/wpfyAmijRUI/auditar-base-de-datos-usando-trigger.html" title="Auditar Base de datos usando Trigger DDL" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_FSaJMczGI_M/S-jJ6ClOwwI/AAAAAAAAAGA/Ubl6uy1IZcw/s72-c/eventos.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/05/auditar-base-de-datos-usando-trigger.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMAR3w9eSp7ImA9WxFXEE8.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-933550466417679399</id><published>2010-05-08T07:40:00.000-07:00</published><updated>2010-05-16T09:30:46.261-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-16T09:30:46.261-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Capacitación" /><title>Reconocimiento Microsoft</title><content type="html">Hola, les quiero compartir que hace unos días me llego un paquete por parte de Microsoft con un libro de certificación, una playera, una pluma, una carpeta, un tarjetero muy bonito de madera y un termo.&lt;br /&gt;&lt;br /&gt;Antes de eso me habían escrito por mail para hacerme saber que me iban a enviar un reconocimiento por mi asistencia/participación en los eventos del 2009 este gesto considero es sumamente gratificante porque la realidad es que es un regalo solo por aprender. No dejen de buscar y asistir a eventos de Microsoft, en especial a los webcast que son sumamente enriquecedores.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_FSaJMczGI_M/S-V5Ty7t6AI/AAAAAAAAAFw/r6IRSXlcvL4/s1600/reconocimiento.JPG"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 271px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5468910703508056066" border="0" alt="" src="http://4.bp.blogspot.com/_FSaJMczGI_M/S-V5Ty7t6AI/AAAAAAAAAFw/r6IRSXlcvL4/s400/reconocimiento.JPG" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-933550466417679399?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HKzzA5wW_o9KjcHQn-mgyhHGf0A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HKzzA5wW_o9KjcHQn-mgyhHGf0A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HKzzA5wW_o9KjcHQn-mgyhHGf0A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HKzzA5wW_o9KjcHQn-mgyhHGf0A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/5lhC3nbSkXU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/933550466417679399/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/05/reconocimiento-microsoft.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/933550466417679399?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/933550466417679399?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/5lhC3nbSkXU/reconocimiento-microsoft.html" title="Reconocimiento Microsoft" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_FSaJMczGI_M/S-V5Ty7t6AI/AAAAAAAAAFw/r6IRSXlcvL4/s72-c/reconocimiento.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/05/reconocimiento-microsoft.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8ERHkycCp7ImA9WxFQGUk.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-188232041973008086</id><published>2010-04-10T21:26:00.000-07:00</published><updated>2010-05-15T11:40:05.798-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-15T11:40:05.798-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Crecimiento de archivos log y mdf, SQL Server</title><content type="html">Establecer el crecimiento de nuestra Base de datos&lt;br /&gt;&lt;br /&gt;Las bases de datos se conforman de dos tipos de archivos: Datos y Log.&lt;br /&gt;Es preciso que cuando se cree una Base de Datos se establezca un tamaño adecuado para el archivo de datos y para el Log, por default el crecimiento del archivo Log esta en automático y a un 10%, sin embargo mantener estos valores la mayor parte de las veces no es una buena práctica. Imaginemos el escenario en que tendremos cuando nuestro Log sea muy pequeño y posteriormente cuando sea muy grande.&lt;br /&gt;&lt;br /&gt;Si el archivo tuviera un tamaño digamos de 1 MB y el crecimiento está establecido en un 10% de forma automática estaría incrementando de tamaño muy frecuentemente afectando el performance de nuestra Base de Datos&lt;br /&gt;Si nuestro archivo Log ha crecido bastante digamos 20 Gigabytes y el crecimiento está establecido de forma automático por porcentaje ¿Qué sucederá la siguiente vez que necesite crecer? El crecimiento del archivo tardara cada vez mas hasta que llegue a provocar un problema de TimeOut si coincide con operaciones de alta demanda&lt;br /&gt;&lt;br /&gt;SQL internamente divide el Log de transacciones en pequeños fragmentos llamados VLFs (Virtual Log Files). Cuando no establecemos un tamaño adecuado al log de transacciones tendremos una gran cantidad de VLFs.&lt;br /&gt;&lt;br /&gt;Una buena práctica es&lt;br /&gt;&lt;br /&gt;A. Limitar el tamaño de nuestro Log de transacciones&lt;br /&gt;B. Establecer su crecimiento en MB y no en porcentaje&lt;br /&gt;&lt;br /&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 322px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5458738153775067922" border="0" alt="" src="http://3.bp.blogspot.com/_FSaJMczGI_M/S8FVbeGicxI/AAAAAAAAAFg/BKsBNs0JpSE/s400/1.JPG" /&gt; &lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 207px; DISPLAY: block; HEIGHT: 162px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5458739074193839970" border="0" alt="" src="http://2.bp.blogspot.com/_FSaJMczGI_M/S8FWRC7eV2I/AAAAAAAAAFo/7Z5Iir-DMS4/s400/2.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Este razonamiento aplica igualmente para los archivos de datos y para el de Log, y si consideramos que podemos tener más de un archivo de datos y de Log de transacciones cuando necesite incrementar su tamaño, SQL incrementa el tamaño de todos los archivos.&lt;br /&gt;&lt;br /&gt;Referencias&lt;br /&gt;http://www.dbasupport.com.mx/index.php?option=com_content&amp;amp;view=article&amp;amp;id=11:Fragmentación%20en%20el%20log%20de%20Transacciones&amp;amp;catid=11:administracion&amp;amp;Itemid=2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-188232041973008086?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8547c9V7n3WSb5Qv8Olo4VP4aUk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8547c9V7n3WSb5Qv8Olo4VP4aUk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8547c9V7n3WSb5Qv8Olo4VP4aUk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8547c9V7n3WSb5Qv8Olo4VP4aUk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/G4iSyRRzw_E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/188232041973008086/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/04/mejores-practicas-en-el-tamano-de-los.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/188232041973008086?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/188232041973008086?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/G4iSyRRzw_E/mejores-practicas-en-el-tamano-de-los.html" title="Crecimiento de archivos log y mdf, SQL Server" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_FSaJMczGI_M/S8FVbeGicxI/AAAAAAAAAFg/BKsBNs0JpSE/s72-c/1.JPG" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/04/mejores-practicas-en-el-tamano-de-los.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8HQHs6fip7ImA9WxFQGUk.&quot;"><id>tag:blogger.com,1999:blog-8026604927159379464.post-1579745342623594436</id><published>2010-04-10T21:20:00.000-07:00</published><updated>2010-05-15T11:40:31.516-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-15T11:40:31.516-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Mantenimiento al LOG de transacciones ,SQL Server</title><content type="html">Si nunca diéramos un mantenimiento al archivo de Log de transacciones este crecería indefinidamente, esto tiene dos implicaciones.&lt;br /&gt;&lt;br /&gt;A. El espacio ocupado en disco duro&lt;br /&gt;a. Cuando nuestro archivo Log ha ocupado todo el espacio disponible en el disco duro o ha llegado a su límite de crecimiento establecido el Log ya no puede crecer y si consideramos que cualquier transacción Insert, Delete , update se registra en el Log de transacciones tendremos un problema pues ninguna de estas transacciones podrá ejecutarse en la BD&lt;br /&gt;B. Un problema de timeOut cuando el Log de transacciones necesite crecer y sea ya demasiado grande.&lt;br /&gt;&lt;br /&gt;Es conveniente crear un plan de mantenimiento que respalde el Log de transacciones y posteriormente lo trunque, lo cual nos permitirá reducir el tamaño del Log de transacciones.&lt;br /&gt;&lt;br /&gt;El siguiente script satisface nuestros requerimientos:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* 1) Nombre de la BD a utilizar&lt;br /&gt;Nota : El nombre de la BD debera ser re-emplazado por la BD en cuestion */&lt;br /&gt;USE [MyDataBase]&lt;br /&gt;&lt;br /&gt;/* 2) Permitirmos que todas las transacciones&lt;br /&gt;en el Buffer pendientes hagan commit */&lt;br /&gt;CHECKPOINT&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;/* 3)Agregamos un medio de respaldo para almacenar el backup del LOG&lt;br /&gt;Nota: La ruta o dispositivo de respaldo debera ser re-emplazada&lt;br /&gt;por una ruta valida */&lt;br /&gt;Declare @Mes varchar(2) --variable para guardar el mes&lt;br /&gt;,@dia varchar(2) --variable para guardar el dia&lt;br /&gt;,@Anio varchar(4) --variable para guardar el año&lt;br /&gt;,@Fecha varchar(10) --variable para guardar la fecha&lt;br /&gt;,@Archivo varchar(100) --variable para guardar el nombre del archivo&lt;br /&gt;Select @Mes=Day(getdate()),@dia=Month(getdate()),@Anio=Year(getdate())&lt;br /&gt;&lt;br /&gt;Select @Fecha= @Mes+ @dia+ @Anio , @Archivo='C:\Respaldos\LogMiBase_db' + @Fecha + '.bak'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* Eliminamos el dispositivo de respaldo para evitar un error&lt;br /&gt;en caso de que ya existiera */&lt;br /&gt;if Exists (Select * from sys.backup_devices where name='CopiaMiBase_db')&lt;br /&gt;exec sys.sp_dropdevice 'CopiaMiBase_db'&lt;br /&gt;&lt;br /&gt;/* Linea para agregar el dispositivo de respaldo&lt;br /&gt;Nota : El nombre del dispositov y/o las caracteristicas del mismo&lt;br /&gt;deberan ser re-emplazadas por las que satisfagan nuestros&lt;br /&gt;requerimientos*/&lt;br /&gt;EXEC sp_addumpdevice 'disk'&lt;br /&gt;,'CopiaMiBase_db'&lt;br /&gt;,@Archivo&lt;br /&gt;&lt;br /&gt;/* 4)Respaldamos el Log de transacciones y la BD&lt;br /&gt;Nota: El nombre de la Base de datos y el LOG&lt;br /&gt;debera ser re-emplazado por el nombre real de la BD en cuestion&lt;br /&gt;y por el nombre logico del archivo LOG de transacciones&lt;br /&gt;*/&lt;br /&gt;BACKUP DATABASE [MyDataBase] TO CopiaMiBase_db&lt;br /&gt;BACKUP LOG [MyDataBase] WITH TRUNCATE_ONLY&lt;br /&gt;&lt;br /&gt;--5)Establecemos un tamaño adecuado al Log de transacciones&lt;br /&gt;DBCC SHRINKFILE ('MyDataBase_log', 100)&lt;br /&gt;/*[100] debera ser re-emplazado por el tamaño&lt;br /&gt;adecuado para el LOG de la BD en cuestion */&lt;br /&gt;&lt;br /&gt;Lo que restaría es crear un JOB que se encarge de ejecutar nuestras sentencias antes vistas. Espero que sea de utilidad este ejemplo, se que en la red existen muchos, pero uno mas no cae mal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8026604927159379464-1579745342623594436?l=sqlnetunamorcompartido.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Yyld8mBgaGWSZP4YxgHN3_6VdCQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Yyld8mBgaGWSZP4YxgHN3_6VdCQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Yyld8mBgaGWSZP4YxgHN3_6VdCQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Yyld8mBgaGWSZP4YxgHN3_6VdCQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/SqlnetUnAmorCompartido/~4/QfKkw5kxl1I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://sqlnetunamorcompartido.blogspot.com/feeds/1579745342623594436/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://sqlnetunamorcompartido.blogspot.com/2010/04/mantenimiento-al-log-de-transacciones.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/1579745342623594436?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8026604927159379464/posts/default/1579745342623594436?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SqlnetUnAmorCompartido/~3/QfKkw5kxl1I/mantenimiento-al-log-de-transacciones.html" title="Mantenimiento al LOG de transacciones ,SQL Server" /><author><name>Carlos Nabor Espinoza Garduño</name><uri>http://www.blogger.com/profile/14042323741276241215</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://1.bp.blogspot.com/_FSaJMczGI_M/TCA6cSyR8yI/AAAAAAAAAGY/6u-GRvMw7e8/S220/c.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://sqlnetunamorcompartido.blogspot.com/2010/04/mantenimiento-al-log-de-transacciones.html</feedburner:origLink></entry></feed>

