tag:blogger.com,1999:blog-32483712039697044782024-03-12T20:55:42.923-07:00SQL Server DBABuscando la excelencia.Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comBlogger64125tag:blogger.com,1999:blog-3248371203969704478.post-20552185745019562612013-05-21T15:21:00.003-07:002013-05-21T15:22:34.716-07:00Herramientas Gratuitas y poco conocidas de Microsoft<span lang=""><span lang=""></span></span><h4>
<span lang=""><span lang="">
Las siguientes son una serie de herramientas, algunas quizás no tan conocidas, provistas gratuitamente por Microsoft y que pueden ser de utilidad para los profesionales IT.</span></span></h4>
<span lang=""><span lang="">
<h2>
WSCC - Windows System Control Center</h2>
</span>
</span><span style="font-size: small;">Mi primera opción no es en realidad una herramienta de Microsoft per se: Windows System Control Center es un programa de descarga de una sola parada para casi 300 herramientas de mantenimiento de Sysinternals de Microsoft y las suites cada vez más populares NirSoft: simplemente descargue WSCC de KLS-Soft, revise toda la herramientas que necesita y pulse en "Install". Minutos más tarde estás equipado con algunas de las herramientas más útiles que hay, incluyendo Disk2vhd, inicio de sesión automático y Autoruns (descrito más adelante). WSCC guarda estos archivos en C: \ Archivos de programa (x86) \ Sysinternals Suite NirSofts mientras que las herramientas se encuentran en C: \ Archivos de programa (x86) \ NirSoft Utilities.<br />
<br />
<span lang=""><span lang=""><img alt="Windows System Control Center" src="http://www.itworld.com/sites/default/files/Tools-02-600.png" /></span></span>
<br />
WSCC instala herramientas que puede hacer que tu antivirus lo alerte como potencial amenaza pero no hay de que temer dado que encontramos que algunas de las herramientas NirSoft dan falsos positivos de activación debido a su naturaleza. NirSoft es consciente del problema.<br />
</span><br />
<h2>
RichCopy 4.0</h2>
<span style="font-size: small;"><img alt="RichCopy 4.0" src="http://www.itworld.com/sites/default/files/Tools-04-600.png" /><br />
Sí, todo el mundo conoce Robocopy, la línea de la versión "Pro" de comandos de herramienta integrada de transferencia de archivos del Explorador de Windows, que le ofrece muchas más opciones para copiar y mover carpetas. Sólo que ahora, hay una gran interfaz de interfaz de usuario para Robocopy - RichCopy 4.0 . Esta pequeña invención de TechNet le ahorra el dolor de cabeza del aprendizaje, el control y volver a escribir líneas de comandos. Estas son sólo algunas de las razones por las RichCopy es mucho mejor que el incorporado en los mecanismos de transferencia de archivos del Explorador de Windows:<br />
<br />
Copiar datos en un horario regular (por ejemplo, copiar archivos de su disco duro a un disco externo cada noche)<br />
<br />
Serializar el acceso a disco: acceso optimizar el disco para los dispositivos basados en ATA a través de USB.<br />
<br />
Transferencias de archivos más rápidas (en algunos casos) por evitar la memoria intermedia del sistema para operaciones de archivo.<br />
<br />
Copiar archivos de forma asíncrona mediante varios subprocesos.<br />
<br />
Configuración de fecha y hora, los controles de tamaño de archivo y la configuración de seguridad.<br />
<br />
Además, RichCopy es más resistente contra las conexiones lentas o errores de transferencia. Si bien no tiene mucho sentido para copiar un archivo o una carpeta más pequeña, es esencial si usted está moviendo regularmente bultos de datos de un lugar a otro.<br />
<br />
</span><b><span style="font-size: large;">Microsoft Attack Surface Scanner<br />
<img alt="Microsoft Attack Surface Scanner" src="http://www.itworld.com/sites/default/files/Tools-05-600.png" /></span></b><span style="font-size: small;">Este tool es una especie de lista de control que le ayuda a analizar los problemas de seguridad y vulnerabilidades de enchufe rápido posible. MSATA escanea puertos, registros de eventos de seguridad, las entradas de ejecución automática, los servicios y la configuración de cortafuegos (entre otros) y consolida los resultados en un archivo CAB:<br />
</span><b><span style="font-size: large;">Microsoft Standalone System Sweeper Tool<br />
</span></b><span style="font-size: small;">MSSSST (sí, esa es la convención de nomenclatura de Microsoft en su mejor momento) crea un CD, DVD o memoria USB que aloja una copia sin conexión de Microsoft Security Essentials - incluyendo todas las últimas firmas descargados desde los servidores de MS de antemano. Especial para infecciones de rootkits.<br />
<img alt="Microsoft Standalone System Sweeper Tool" src="http://www.itworld.com/sites/default/files/Tools-06-600.png" /><br />
<br />
</span><b><span style="font-size: large;">VMMap - Un vistazo dentro de la memoria de tu PC<br />
<img alt="VMMap" src="http://www.itworld.com/sites/default/files/Tools-07-600.png" /></span></b><span style="font-size: small;">Alguna vez te preguntaste cuánto espacio de direcciones, la memoria principal y la memoria virtual de un proceso en ejecución está utilizando? VMMap tiene respuestas - y mucho, mucho más. Como uno de mis favoritos Sysinternals Suite (WSCC ver arriba), VMMap muestra una representación gráfica de todo el uso de la memoria que le ayuda a entender el costo de memoria de cada aplicación que se está ejecutando o en desarrollo. El bloque inferior de VMMap también detalla los archivos que están siendo utilizados por el proceso y cuánta memoria se recoge en el proceso.<br />
<br />
<br />
</span><b><span style="font-size: large;">Disk2VHD<br />
<img alt="Disk2VHD" src="http://www.itworld.com/sites/default/files/Tools-08-600.png" /></span></b><span style="font-size: small;"></span><span style="font-size: small;">Otra herramienta de Sysinternals que no podía dejar de lado: Disk2vhd (también disponible a través de WSCC o directamente desde aquí: </span><a href="http://technet.microsoft.com/en-us/sysinternals/ee656415"><span style="font-size: small;"><span lang="">http://technet.microsoft.com/en-us/sysinternals/ee656415</span></span></a><span style="font-size: small;"><span lang=""> ) con esto podes clonar tus particiones del sistema físico en un archivo de disco duro virtual (VHD) para su uso en Windows Virtual PC o para arrancar desde nativa (el arranque VHD es compatible con Windows 7 Enterprise). Esto es fantástico para la evaluación de software o para pasar a un nuevo sistema: básicamente se puede salvar todo el sistema operativo Windows, incluyendo todos los programas, configuraciones y datos, pasar a un sistema y todavía arrancar sus viejas ventanas dentro de un entorno virtual - sólo en caso de haber perdido algo! Cuidado: Disk2vhd no admite particiones de más de 127 GB y también clones de su registro partición entera (incluyendo su firma partición), por lo que podría encontrarse con problemas si usted está tratando de montar el archivo clonado con el sistema "vhd." que creó en el primer lugar</span></span><br />
<span style="font-size: small;"> </span><b><span style="font-size: large;">Microsoft Windows Performance Toolkit<br />
<img alt="Microsoft Windows Performance Toolkit" src="http://www.itworld.com/sites/default/files/Tools-10-600.png" /></span></b><span style="font-size: small;">Estas herramientas de rendimiento de Microsoft son las pruebas de velocidad más fiables para medir con precisión el rendimiento del PC durante un cierto período de tiempo. Para analizar el uso de PC a través de una cierta cantidad de tiempo, utilice el comando "xperf DiagEasy-on" para iniciar y "xperf-d trace.etl" para detener.<br />
<br />
Yo lo uso para solucionar problemas de un lento o pegado de arranque, apagado, en espera e hibernación. Se vincula estrechamente con todos estos procesos y le da un resumen de lo que está causando retrasos o problemas. <br />
</span><b><span style="font-size: large;">TCPView<br />
<img alt="TCPView" src="http://www.itworld.com/sites/default/files/Tools-13-600.png" /></span></b><span style="font-size: small;">Sufris de una conexión lenta? Tenes la sensación de que algo está empantanamiento el WiFi o el adaptador de Ethernet? TCPView (también parte de Sysinternals y disponibles a través de WSCC) es su oportunidad de averiguar qué proceso está costando a la cantidad de ancho de banda y hacer frente a este problema de conexión. Simplemente basta con abrir TCPView y ordenar todos los procesos haciendo clic en los "paquetes / bytes enviados" o "paquetes / bytes rcvd" de cabecera para obtener los datos de ancho de banda superior.<br />
</span><b><span style="font-size: large;">Enhanced Experience Toolkit 2.0 Mitigación<br />
<img alt="Enhanced Mitigation Experience Toolkit 2.0" src="http://www.itworld.com/sites/default/files/Tools-16-600.png" /></span></b><span style="font-size: small;">EMET refuerza la seguridad para las aplicaciones sin tener que recompilarlas o esperar a que los desarrolladores lancen una nueva versión.<br />
Añade varios parches a la aplicación de su elección, incluyendo SEHOP, Dynamic Data Execution Prevention y ASLR obligatoria.<br />
</span>Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.com0tag:blogger.com,1999:blog-3248371203969704478.post-64240265145002131302012-10-12T19:58:00.003-07:002012-10-12T20:00:45.830-07:00Jesús Muñoz Torres explica como crear un Cluster SQL Server en Windows Server 2008 R2<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-nlUIg70dZcc/UHjYv1AtKvI/AAAAAAAABug/U3R9UgJNXIE/s1600/cluster+sql+server+mundoeva.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="297" src="http://3.bp.blogspot.com/-nlUIg70dZcc/UHjYv1AtKvI/AAAAAAAABug/U3R9UgJNXIE/s320/cluster+sql+server+mundoeva.jpg" width="320" /></a></div>
En este video, Jesús Muñoz Torres explica paso a paso y magistralmente como armar un cluster para SQL Server 2008 R2 sobre Windows Server 2008 R2. Toda esta explicación está dada sobre entornos virtualizados de modo de poder replicarlo localmente a modo de prueba.<br />
<iframe allowfullscreen="allowfullscreen" frameborder="0" height="315" src="http://www.youtube.com/embed/NeBHLbHgx_8" width="560"></iframe><br />Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.com1tag:blogger.com,1999:blog-3248371203969704478.post-13783405484997884972012-04-29T04:29:00.002-07:002012-04-29T05:08:48.608-07:00Encontrar los queries que consumen mas recursos<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-QmOwwCPcUW8/T50nokjqCzI/AAAAAAAABsc/0Tbma5wdRv4/s1600/databases.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="240" src="http://3.bp.blogspot.com/-QmOwwCPcUW8/T50nokjqCzI/AAAAAAAABsc/0Tbma5wdRv4/s320/databases.jpg" width="320" /></a></div>
<span style="font-size: small;"><code>Los DMVs (Dynamic Management Views) son una magnífica forma de encontrar información de performance a partir de SQL Server 2005 en adelante (2008/2008R2/2012)</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>En este query de Pinal Dave se utilizan DMVs para encontrar los queries que mas consumen en un server SQL Server 2005/2008 (recordar que este script funciona solo en bases compatibilidad 2005/2008)</code></span></div>
<div style="text-align: justify;">
<code style="font-size: 12px;"><span style="color: blue;"><br /></span></code></div>
<div style="text-align: justify;">
<br />
<code style="font-size: 12px;"><span style="color: blue;">Query: </span></code><br />
<br />
<br />
<code style="font-size: 12px;"><span style="color: blue;">SELECT TOP </span><span style="color: black;">10 </span><span style="color: magenta;">SUBSTRING</span><span style="color: grey;">(</span><span style="color: black;">qt.</span><span style="color: blue;">TEXT</span><span style="color: grey;">, (</span><span style="color: black;">qs.statement_start_offset</span><span style="color: grey;">/</span><span style="color: black;">2</span><span style="color: grey;">)+</span><span style="color: black;">1</span><span style="color: grey;">,<br />
((</span><span style="color: magenta;">CASE </span><span style="color: black;">qs.statement_end_offset<br />
</span><span style="color: blue;">WHEN </span><span style="color: grey;">-</span><span style="color: black;">1 </span><span style="color: blue;">THEN </span><span style="color: magenta;">DATALENGTH</span><span style="color: grey;">(</span><span style="color: black;">qt.</span><span style="color: blue;">TEXT</span><span style="color: grey;">)<br />
</span><span style="color: blue;">ELSE </span><span style="color: black;">qs.statement_end_offset<br />
</span><span style="color: blue;">END </span><span style="color: grey;">- </span><span style="color: black;">qs.statement_start_offset</span><span style="color: grey;">)/</span><span style="color: black;">2</span><span style="color: grey;">)+</span><span style="color: black;">1</span><span style="color: grey;">),<br />
</span><span style="color: black;">qs.execution_count</span><span style="color: grey;">,<br />
</span><span style="color: black;">qs.total_logical_reads</span><span style="color: grey;">, </span><span style="color: black;">qs.last_logical_reads</span><span style="color: grey;">,<br />
</span><span style="color: black;">qs.total_logical_writes</span><span style="color: grey;">, </span><span style="color: black;">qs.last_logical_writes</span><span style="color: grey;">,<br />
</span><span style="color: black;">qs.total_worker_time</span><span style="color: grey;">,<br />
</span><span style="color: black;">qs.last_worker_time</span><span style="color: grey;">,<br />
</span><span style="color: black;">qs.total_elapsed_time</span><span style="color: grey;">/</span><span style="color: black;">1000000 total_elapsed_time_in_S</span><span style="color: grey;">,<br />
</span><span style="color: black;">qs.last_elapsed_time</span><span style="color: grey;">/</span><span style="color: black;">1000000 last_elapsed_time_in_S</span><span style="color: grey;">,<br />
</span><span style="color: black;">qs.last_execution_time</span><span style="color: grey;">,<br />
</span><span style="color: black;">qp.query_plan<br />
</span><span style="color: blue;">FROM </span><span style="color: black;">sys.dm_exec_query_stats qs<br />
</span><span style="color: grey;">CROSS </span><span style="color: black;">APPLY sys.dm_exec_sql_text</span><span style="color: grey;">(</span><span style="color: black;">qs.sql_handle</span><span style="color: grey;">) </span><span style="color: black;">qt<br />
</span><span style="color: grey;">CROSS </span><span style="color: black;">APPLY sys.dm_exec_query_plan</span><span style="color: grey;">(</span><span style="color: black;">qs.plan_handle</span><span style="color: grey;">) </span><span style="color: black;">qp<br />
</span><span style="color: blue;">ORDER BY </span><span style="color: black;">qs.total_logical_reads </span><span style="color: blue;">DESC </span><span style="color: green;">-- logical reads<br />
-- ORDER BY qs.total_logical_writes DESC -- logical writes<br />
-- ORDER BY qs.total_worker_time DESC -- CPU time</span></code></div>
<div style="text-align: justify;">
<br /></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Obviamente se puede cambiar el ordenamiento del script para destacar otro criterio de búsqueda.</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<br /></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-09-02-58-12/DMV_5F00_All_2D00_Stars_5F00_v20100801.sql" target="_blank"><code>No está de más destacar un conjunto de queries, <span style="color: #0c343d;">los DMVs AllStars</span>, que se puede descargar <span style="color: red;">de aquí</span> y que es una interesante herramienta para todo DBA en busca de detectar problemas de performance.</code></a></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<br /></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">SQLServer777@gmail.com </a></code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.com2tag:blogger.com,1999:blog-3248371203969704478.post-49036795331409470942012-04-25T12:29:00.003-07:002012-04-29T05:09:25.570-07:00Como reparar usuarios "huérfanos"?<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-pISpAjs-OTg/T5hQUWyfq8I/AAAAAAAABr0/9-jIAN7c5_k/s1600/login+sql.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="228" src="http://2.bp.blogspot.com/-pISpAjs-OTg/T5hQUWyfq8I/AAAAAAAABr0/9-jIAN7c5_k/s320/login+sql.jpg" width="320" /></a></div>
Muchas veces encontramos que el user de una base de datos está "huérfano", lo que significa que ya no existe un login asociado al mismo.<br />
Puede ocurrir que exista un login incluso con el mismo nombre, pero internamente su SID no coincide.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Lo primero que hacemos es verificar cuales usuarios son huérfanos en la base de datos<br />
<br />
<span style="color: blue;">use [su base de datos]</span><br />
<span style="color: blue;">go</span><br />
<span style="color: blue;">EXEC sp_change_users_login 'Report'</span><br />
con la opción Report le estamos diciendo que liste los usuarios huérfanos.<br />
Una vez que encontramos los usuarios huérfanos los reparamos con la siguiente sentencia.<br />
<span style="color: blue;">EXEC sp_change_users_login 'Auto_Fix', 'user'</span><br />
Donde user es el nombre del usuario que queremos "reparar".<br />
<br />
Ahora bien, si además se quiere crear un nuevo login y password para este usuario, usaremos la siguiente sentencia:<br />
<br />
<span style="color: blue;">EXEC sp_change_users_login 'Auto_Fix', 'user', 'login', 'password'</span><br />
<br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.com1tag:blogger.com,1999:blog-3248371203969704478.post-73931777277281561442012-02-13T08:00:00.001-08:002012-04-29T05:09:51.368-07:00SQL Server Best Practices for Developers<a href="http://2.bp.blogspot.com/-Q4Nf6AIk7wA/TzkzwKYCMTI/AAAAAAAABps/YmfsGqHTYh8/s1600/SQL-Server-2012-Hugo%2BBernachea.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5708650905180713266" src="http://2.bp.blogspot.com/-Q4Nf6AIk7wA/TzkzwKYCMTI/AAAAAAAABps/YmfsGqHTYh8/s400/SQL-Server-2012-Hugo%2BBernachea.png" style="cursor: hand; cursor: pointer; float: left; height: 329px; margin: 0 10px 10px 0; width: 400px;" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<a href="http://www.scribd.com/doc/81467387/SQL-Server-Best-Practices-Hugo-Bernachea-Part-One" style="-x-system-font: none; display: block; font-family: Helvetica,Arial,Sans-serif; font-size-adjust: none; font-size: 14px; font-stretch: normal; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; margin: 12px auto 6px auto; text-decoration: underline;" title="View SQL Server Best Practices - Hugo Bernachea - Part One on Scribd">SQL Server Best Practices - Hugo Bernachea - Part One</a><iframe class="scribd_iframe_embed" frameborder="0" height="800" id="doc_93282" ratio="1.2938689217759" scrolling="no" src="http://www.scribd.com/embeds/81467387/content?start_page=1&view_mode=list&access_key=key-in7v9wvru7t70otny8i" width="600"></iframe><br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.com0tag:blogger.com,1999:blog-3248371203969704478.post-23045221432214282002012-02-13T06:27:00.001-08:002013-04-06T12:49:41.600-07:00Máquina virtual para probar las nuevas características de Business Intelligence de SQL Server 2012 (denali)<div style="text-align: justify;">
<a href="http://3.bp.blogspot.com/-AIRmU7LjXs4/TzkeyQPm8iI/AAAAAAAABpg/JbRtfLnIue4/s1600/sqlserver2012_RC0.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5708627851371541026" src="http://3.bp.blogspot.com/-AIRmU7LjXs4/TzkeyQPm8iI/AAAAAAAABpg/JbRtfLnIue4/s400/sqlserver2012_RC0.png" style="cursor: hand; cursor: pointer; float: left; height: 254px; margin: 0 10px 10px 0; width: 400px;" /></a><span style="font-weight: bold;">Microsoft ha puesto a disposición la Base ImageX Server que es una imagen de Máquina virtual para testear las últimas características de Business Intelligence de SQL Server 2012 (denali) - RC0, incluyendo PowerView Reports y PowerPivot Excel Documents.</span></div>
<br />
<br />
<br />
<br />
<br />
<br />
<span style="color: #738da0; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 13px;">La máquina la pueden obtener de esta url: </span><a href="http://www.microsoft.com/betaexperience/pd/BIVHD/enus/" style="color: #b10069; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 13px; text-decoration: none;">http://www.microsoft.com/betaexperience/pd/BIVHD/enus/</a><span style="color: #738da0; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 13px;">, para conectarse a la máquina pueden utilizar el usuario CONTOSO\Administrator, con la contraseña pass@word1 (precaución con el idioma de la máquina, está en inglés por lo que es posible que la @ la tengan que introducir con Shift+2).</span><br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code><br /></code></span>
<span style="font-size: small;"><code><br /></code></span>
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
<br />Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.com2tag:blogger.com,1999:blog-3248371203969704478.post-90370906184770375772012-01-05T02:38:00.000-08:002012-04-29T05:10:29.485-07:00Configurando una replicación Master a Master usando MySQL<div style="color: black;">
<span style="color: black; font-family: Arial; font-size: 15px; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Todos </span><span style="color: black; font-family: Arial; font-size: 15px; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">sabemos de la importancia de implementar mecanismos de alta disponibilidad en los servidores que nos toca administrar. En este caso, voy a detallar los pasos para implementar una replicación master to master o bidireccional entre servidores MySQL (una especie de espejado o mirror).<br /><br />En ambos servers debemos hacer las siguientes tareas:</span><b id="internal-source-marker_0.9797903657890856" style="font-weight: normal;"><br />1. Crear una carpeta Logs, por ejemplo:<br /><span style="color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">c:\program files\mysql\logs\</span><br /><br />2. Crear un usuario para la replicación con suficientes permisos.<br /><span style="color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">mysql -u root -p</span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">SuPassword (sin espacios el pass y el -p)<br /></span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">GRANT REPLICATION SLAVE ON *.* TO </span><span style="background-color: #fefefe; color: #cc0000; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">'usuario'</span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">@</span><span style="background-color: #fefefe; color: #cc0000; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">'%'</span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> IDENTIFIED BY </span><span style="background-color: #fefefe; color: #cc0000; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">'</span><span style="color: black; font-family: Arial; font-size: 16px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">pepe</span><span style="background-color: #fefefe; color: #cc0000; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">'</span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">;</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">FLUSH PRIVILEGES;</span><br /><br /><span style="font-weight: bold;">En el master principal</span><br /><span style="background-color: #fefefe; color: red; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 15px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Hay que editar el archivo my.ini (en windows) o my.conf (en linux).<br />En la sección marcada como</span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> [mysqld] </span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">agregar lo siguiente.<br /></span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">log-bin = “D:\MySQL\MySQL Server 5.1\Logs” (cuidado con las comillas)</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">binlog-do-db=mibase</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">server-id=</span><span style="background-color: #fefefe; color: maroon; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">1</span><br /><span style="background-color: #fefefe; color: maroon; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />y agregar al final del archivo lo siguiente:<br /><span style="background-color: #fefefe; color: red; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><span style="color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">slave-net-timeout = 30</span><br /><span style="color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">master-connect-retry = 30</span><br /><span style="background-color: #fefefe; color: maroon; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />Una vez hecho esto, grabamos y reiniciamos el servicio, ya sea por services o por línea de comandos:<br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">mysqld restart</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: #fefefe; color: #222222; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">En el Master secundario:</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />Lo mismo, cambiar my.ini o my.conf, segun sea Windows o Linux y agregar lo siguiente en la sección:<span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> [mysqld] </span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">log-bin = “c:\program files\mysql\logs\” (cuidado con las comillas)</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">binlog-do-db=winnings</span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: #fefefe; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">server-id=2</span> (fijarse que este número es distinto al del master principal)<br /><span style="background-color: #fefefe; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />y al final del archivo agregar:<span style="background-color: #fefefe; color: red; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">slave-net-timeout = 30</span><br /><span style="color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">master-connect-retry = 30</span><span style="background-color: #fefefe; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: #fefefe; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />grabar el archivo y reiniciar el servicio mysql<br /><span style="background-color: #fefefe; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">mysqld restart</span><span style="color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">En el Master principal:</span><br /><span style="color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />Para evitar problemas vamos a bloquear las tablas hasta que finalicemos la operatoria.<br /><span style="background-color: white; color: red; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: #fefefe; color: #330000; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">FLUSH TABLES WITH READ LOCK; </span><br /><span style="background-color: #fefefe; color: red; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: #fefefe; color: red; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><span style="background-color: white; color: #222222; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">En el Master secundario:</span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Creamos la base a ser replicada:<br /></span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">mysql -u root -pSuPassword</span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">CREATE DATABASE suBase;</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">mysql -u root -pSuPassword suBase < suBase_backup.sql</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: #fefefe; color: #222222; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">En el Master principal:</span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">mysql -u root -p</span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">SuPassword</span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">use SuBase</span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">go</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">SHOW MASTER STATUS;</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="text-decoration: underline;"><span style="font-weight: bold;">Esto nos mostrará algo asi<br /></span></span></span><a href="http://aciddrop.com/2008/01/10/step-by-step-how-to-setup-mysql-database-replication/#"><span style="background-color: white; color: black; font-family: Arial; font-size: 11px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">PLAIN TEXT</span></a><br /><span style="background-color: white; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">CODE:</span><br /><span style="background-color: white; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">+---------------------+----------+-------------------------------+------------------+</span><br /><span style="background-color: white; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |</span><br /><span style="background-color: white; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">+---------------------+----------+-------------------------------+------------------+</span><br /><span style="background-color: white; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">| </span><span style="background-color: white; color: black; font-family: 'Courier New'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">mysql-bin.000001</span><span style="background-color: white; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> | </span><span style="background-color: white; color: maroon; font-family: 'Courier New'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">21197930</span><span style="background-color: white; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> | my_database,my_database | |</span><br /><span style="background-color: white; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">+---------------------+----------+----------------------------</span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span>Lo que nos interesa a nosotros es el dato del file (mysql-bin.000001) y el número de la posición (21197930) . Con esos datos nos vamos al master secundario.<br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">En el master secundario:<br /></span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">mysql -u root -p</span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">SuPassword</span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">stop slave;</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">CHANGE MASTER TO MASTER_HOST=</span><span style="background-color: #fefefe; color: #cc0000; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">'10.33.0.14'</span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, MASTER_USER=</span><span style="background-color: #fefefe; color: #cc0000; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">'usuario'</span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, MASTER_PASSWORD=</span><span style="color: #274e13; font-family: 'Courier New'; font-size: 12px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">'pepe’</span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, MASTER_LOG_FILE=</span><span style="background-color: #fefefe; color: #cc0000; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">'mysql-bin.000001'</span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, MASTER_LOG_POS=</span><span style="background-color: #fefefe; color: maroon; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">21197930</span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">;</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">start slave;</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />Fijense que en los parametros master_log_file y master_log_pos pusimos los datos que guardamos en el paso anterior en el master principal. En master user pusimos el usuario que creamos originalmente para la replicación y en Master_password su correspondiente password.<br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span>A continuación ejecutamos lo siguiente para ver como está funcionando la replicación:<br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: black; font-family: Verdana; font-size: 12px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Show Slave Status;</span><span style="background-color: white; color: black; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: black; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">A este punto ya tendríamos seteada la replicación desde el master principal al master secundario, pero nos faltaría hacer la inversa, replicación desde el secundario al principal, por lo tanto...<br /></span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Vamos al Master secundario.<br /></span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">use SuBase</span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">go</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">SHOW MASTER STATUS;</span><br />Lo mismo que antes, tomamos los valores de file y position y los llevamos ahora al master principal.<br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">En el master principal<br /></span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">mysql -u root -p</span><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">SuPassword</span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">stop slave;</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">CHANGE MASTER TO MASTER_HOST=</span><span style="background-color: #fefefe; color: #cc0000; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">'10.33.0.13'</span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, MASTER_USER=</span><span style="background-color: #fefefe; color: #cc0000; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">'usuarios'</span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, MASTER_PASSWORD=</span><span style="color: #274e13; font-family: 'Courier New'; font-size: 12px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">'pepe’</span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, MASTER_LOG_FILE=</span><span style="background-color: #fefefe; color: #cc0000; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">'Logs.000001'</span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, MASTER_LOG_POS=</span><span style="background-color: #fefefe; color: maroon; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">107</span><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">;</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">start slave;</span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: #fefefe; color: #222222; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span>Y como habiamos bloqueado las tablas para replicar sin problemas ahora es el momento de desbloquearlas:</b><br />
<span style="background-color: #fefefe; color: black; font-family: 'Courier New'; font-size: 13px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: 100%;">unlock tables</span>;</span><br />
<b id="internal-source-marker_0.9797903657890856" style="font-weight: normal;"><br />Si se siguieron todos los pasos, en este momento la replicación debería estar funcionando.<br /></b><br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
<b id="internal-source-marker_0.9797903657890856" style="font-weight: normal;"><br /></b><br />
<b id="internal-source-marker_0.9797903657890856" style="font-weight: normal;"><br /><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br /><span style="background-color: white; color: #222222; font-family: Verdana; font-size: 11px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b></div>Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.com2tag:blogger.com,1999:blog-3248371203969704478.post-24864918500901573372011-11-15T12:33:00.000-08:002012-04-29T05:10:49.922-07:00Where In usando Variables varchar.<a href="http://3.bp.blogspot.com/-wDWwz-EwwXQ/TsLQvn8oLjI/AAAAAAAABlw/RojgSB7_FYE/s1600/portada.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5675327997035949618" src="http://3.bp.blogspot.com/-wDWwz-EwwXQ/TsLQvn8oLjI/AAAAAAAABlw/RojgSB7_FYE/s400/portada.jpg" style="cursor: hand; cursor: pointer; float: left; height: 113px; margin: 0 10px 10px 0; width: 150px;" /></a><br />
Esta es una cuestión que muchas veces queremos resolver, como hacer un where in contra una variable de tipo varchar.<br />
Obviamente que en reporting services está cuestión se resuelve por si misma, pero el punto es cuando queremos ejecutar sentencias con where in dados por una variable.<br />
Está claro que se puede ejecutar por medio de xml o sql dinámico, pero estas soluciones no están exentas de su complejidad.<br />
<br />
La solución propuesta en este caso es la creación de una función que transforma el contenido de una variable de tipo varchar en un resultset de integers.<br />
<br />
La función<br />
<br />
Create function dbo.SplitToInt(@values varchar(8000), @delimiter varchar(10))<br />
returns @result table (value int)<br />
as<br />
begin<br />
declare @v as varchar(8000);<br />
while charindex(@delimiter,@values) <> 0<br />
begin<br />
set @v = substring(@values,1,charindex(@delimiter,@values)-1);<br />
if isnumeric(@v)=1<br />
insert into @result<br />
values(@v);<br />
set @values = substring(@values,charindex(@delimiter,@values)+1,len(@values))<br />
end<br />
if isnumeric(@values)=1<br />
insert into @result<br />
values(@values);<br />
return;<br />
end<br />
<br />
Un ejemplo:<br />
<br />
declare @sIds varchar(10)<br />
set @sIds = '1,3,4'<br />
select * from tabla where id in (select * from SplitToInt(@sIds, ','))<br />
<br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
<b id="internal-source-marker_0.9797903657890856" style="font-weight: normal;"></b>Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.com0tag:blogger.com,1999:blog-3248371203969704478.post-16261659279841749322011-05-07T19:35:00.000-07:002012-04-29T05:11:15.830-07:00Consejo de Experto, Qing Song Yao recomienda NO usar char o varchar !Qing Song Yao: Hoy quisiera recomendarles que NO usen los tipos de datos char o varchar para representar strings en su base de datos. Nunca se arrepentirán de haber usado nchar o nvarchar en cualquier implementación.<br />
Por ejemplo, nuestra implementación de Sharepoint usa exclusivamente el tipo de datos nvarchar y nunca hemos tenido problemas relacionados con almacenar caracteres en diferentes lenguajes. Y adicionalmente los tipos unicode (nvarchar y nchar) tienen mejor soporte en .NET, ODBC, JDBC y Windows.<br />
<br />
En cambio Varchar y Char solo admiten un rango mas limitado de caracteres y el soporte de herramientas no es tan amplio comparado con los tipos unicode (nvarchar o nchar).<br />
<br />
Ah, me dirán que nvarchar ocupa el doble de espacio de almacenamiento si la mayor parte de los datos está dada en alfabetos latinos. Pero en SQL Server 2008 R2 existen la opción de Compresión de Datos a nivel de página, que les permite obtener una compresión a hasta la mitad del tamaño sin por eso tener un impacto significativo a nivel de performance.<br />
De modo que recomiendo usar nvarchar junto a la compresión a nivel de página para lograr ambas cosas: menor espacio en disco y mejor soporte a nivel plataforma.<br />
artículo original: Qing Song Yao<br />traducido por : Hugo Bernachea<br /><br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-60667313206878127372011-04-21T16:14:00.000-07:002012-04-29T05:38:09.960-07:00Como hacer una migración de SQL Server<a href="http://4.bp.blogspot.com/-23u2y-Shc4o/TbC8l_myrjI/AAAAAAAABi0/kaXvKMwE1CM/s1600/ServerUpgradePhase1.gif"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5598181697736846898" src="http://4.bp.blogspot.com/-23u2y-Shc4o/TbC8l_myrjI/AAAAAAAABi0/kaXvKMwE1CM/s400/ServerUpgradePhase1.gif" style="cursor: pointer; float: left; height: 211px; margin: 0pt 10px 10px 0pt; width: 314px;" /></a>Esta nota es un resumen de los puntos principales de la Charla de Maxi Accotto en el Edificio de Microsoft Argentina el pasado martes 19 de Abril de 2011. Esta charla trató sobre las estrategias correctas para implementar un plan de migración exitoso de una versión a otra de SQL Server.<br />
<br />
1. Razones para migrar:<br />
1.a) Por los nuevos features.<br />
1.b) Por las mejoras a nivel rendimiento.<br />
1.c) Las viejas versiones pierden soporte (sql server 7 y 2000 perdieron soporte oficial)<br />
<br />
2. Armar un plan de Migración<br />
2.1) El plan de migración contiene los pasos reproducibles para una migración exitosa.<br />
2.2) Relevar todas las bases de datos a ser migradas/actualizada para detectar bases que tienen versiones no migrables (por ejemplo SQL Server 7 no puede ser migrado directamente a SQL Server 2008)<br />
2.3) El Upgrade Advisor se ejecuta sobre el servidor a ser migrado para indicar problemas e issues: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=f5a6c5e9-4cd9-4e42-a21c-7291e7f0f852&displaylang=en<br />
2.4) El upgrade advisor puede tomar trazas del profiler previamente guardadas para dar un análisis mas certero de cambios y eventuales problemas e incompatibilidades.<br />
2.5) Nunca está de mas leer la documentación oficial de Microsoft acerca de las buenas prácticas (best practices) para migrar servidores SQL : <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=66d3e6f5-6902-4fdd-af75-9975aea5bea7&displaylang=en">http://www.microsoft.com/downloads/en/details.aspx?FamilyID=66d3e6f5-6902-4fdd-af75-9975aea5bea7&displaylang=en</a><br />
<br />
3. Como realizar la migración:<br />
3.1) In place Upgrade (no recomendada por limitar la posibilidad de rollback).<br />
3.2) Punto a punto.<br />
<br />
4. Puntos a garantizar en la migración.<br />
4.1) Parte funcional de la base.<br />
4.2) Performance.<br />
<br />
5. Analisis de performance previo.<br />
5.1.) RML Tools. Se toman las trazas de profiler de Replay y se aplican en el destino utilizando las herramientas RML. Las rml tools se descargan desde aquí: <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyId=7EDFA95A-A32F-440F-A3A8-5160C8DBE926&displaylang=en">para X86</a> y para<a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b60cdfa3-732e-4347-9c06-2d1f1f84c342"> 64bits</a><br />
Estas herramientas tienen además otras utilidades para medir performance.<br />
<br />
6. Tareas post migración<br />
6.1) Update statistics<br />
6.2) Eventualmente recrear via script todos los índices clustered.<br />
6.3) Transferir los logins por el famoso problema del sid que dejaría huérfanos los users de base de datos en el destino. Existen dos proc que generan el script de migración: Aquí el mismo Microsoft lo explica y dá el código fuente: <a href="http://support.microsoft.com/kb/246133">http://support.microsoft.com/kb/246133</a>. Maxi Accotto modificó este script para que además transfiera los roles y pueden encontrar ese script en el blog de Maxi Accotto aquí: <a href="http://blog.maxiaccotto.com/post/2009/10/04/Pasando-Logins-entre-servidores-SQL.aspx">http://blog.maxiaccotto.com/post/2009/10/04/Pasando-Logins-entre-servidores-SQL.aspx</a><br />
7. Objetos a Migrar y orden de migración<br />
7.1. operadores<br />
7.2. Restauran bases<br />
7.3. Logins.<br />
7.4. Jobs<br />
<br />
8. Plan de Rollback por si las cosas no salen bien.<br />
<br />
9. Estabilizar la plataforma.<br />
9.1. Darle un tiempo a la plataforma antes de empezar a aplicar los new features de la versión<br />
<br />
Esto es solo un resumén de puntos sobre los que pueden trabajar para armar un plan de migración para servidores SQL Server.<br />
<br />
Hugo Bernachea (oido en la charla de Max Accotto)<br />
<a href="http://www.linkedin.com/in/bernachea">http://www.linkedin.com/in/bernachea</a><br />
<br />
<br />
Otras fuentes de referencia:<br />
<a href="http://blog.maxiaccotto.com/">http://blog.maxiaccotto.com/</a><br />
<a href="http://www.microsoft.com/sql">http://www.microsoft.com/sql</a><br />
<a href="http://www.sqlservercentral.com/articles/Upgrade/65872/">http://www.sqlservercentral.com/articles/Upgrade/65872/</a><br />
<br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
<b id="internal-source-marker_0.9797903657890856" style="font-weight: normal;"></b>Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-9141521235695025492011-02-23T09:59:00.000-08:002012-04-29T05:37:58.121-07:00Consideraciones imprescindibles para instalar SQL Server 2008 R2 en clústerUn "must read" sobre todas las consideraciones a tener en cuenta, tanto a nivel de hardware, desde como formatear el disco de la forma mas conveniente, así como consideraciones a nivel permisos, software y distintos pre-requisitos para lograr conseguir una instalación exitosa de SQL Server 2008 R2 en cluster:<br />
<a href="http://msdn.microsoft.com/es-es/sqlserver/gg601099#01">http://msdn.microsoft.com/es-es/sqlserver/gg601099#01</a><br />
<br />
Muy pero muy buena nota, que hay que leer si o si.<br />
<br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
<b id="internal-source-marker_0.9797903657890856" style="font-weight: normal;"></b>Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-48465024716806156402011-01-31T07:49:00.000-08:002012-04-29T05:37:43.827-07:00Falló el DBCC CHECKDB, y ahora que hacemos?<a href="http://1.bp.blogspot.com/_qjUj6Bhew2E/TUbeemUClVI/AAAAAAAABgA/u_8T8BX6W2w/s1600/dbtoast.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5568382606552241490" src="http://1.bp.blogspot.com/_qjUj6Bhew2E/TUbeemUClVI/AAAAAAAABgA/u_8T8BX6W2w/s400/dbtoast.png" style="cursor: hand; cursor: pointer; float: left; height: 295px; margin: 0 10px 10px 0; width: 400px;" /></a><br />
<div style="text-align: justify;">
Que pasaría si encontraras un error en los logs indicando que tenés un error de los siguientes: torn page o checksum error. Que hacemos??</div>
<div style="text-align: justify;">
Que hacemos?</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
La mayoría en realidad no tiene ni idea de que es lo que hay que hacer. Que harías en esa situación en que un error de consistencia se ha detectado en una de las bases que tu (tu) administras?</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
La respuesta pasa por usar <b>DBCC CHECKDB</b> diariamente para detectar errores de consistencia.</div>
<br />
La sintaxis básica es:<br />
<br />
DBCC CHECKDB ('Nombre de SU base') WITH NO_INFOMSGS<br />
<br />
NO_INFOMSGS previene que se disparen un número excesivo de mensajes, de todas maneras hay muchas opciones, pero esta realiza los chequeos mínimos necesarios.<br />
<br />
<div style="text-align: justify;">
Esta sentencia puede tomar un tiempo importante en ejecutarse si las bases de datos son grandes y en ese caso quizás pudiera querer especificar la opción PHYSICAL_ONLY, ya que esta opción chequea fisicamente en las estructuras en disco, pero omite los chequeos lógicos:</div>
<br />
La sintaxis es:<br />
<br />
DBCC CHECKDB ('Nombre de SU base') WITH PHYSICAL_ONLY<br />
<br />
Ok, hay un problema y... ahora?<br />
<br />
<div style="text-align: justify;">
Siempre asumimos la existencia de los backups, no?. Todos sabemos que un indice non-clustered puede ser reconstruido sin mayores problemas, pero un indice clustered no.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
La mejor opción es siempre recuperar desde un backup (en realidad siempre lo mejor es tener implementada una opción de alta disponibilidad tipo cluster o mirroring y el backup mantenerlo solamente como opción B, pero bueno, supongamos que tenemos que ir a los backups).</div>
<br />
<div style="text-align: justify;">
Primero vamos a ver que páginas están dañadas y que tipo de datos son los que están dañados (recuerdan clustered y non-clustered?)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para empezar veamos que nos dice DBCC CHECKDB, por ejemplo una salida típica puede ser la siguiente:</div>
<br />
Object ID 2088535921, index ID 0, partition ID 72345201021503994, alloc unit ID 72345201051571606 (type In-row data): Page (1:95555) could not be processed. See other errors for details.<br />
Msg 8939, Level 16, State 98, Line 1<br />
Table error: Object ID 2088535921, index ID 0, partition ID 72345201021503994, alloc unit ID 72345201051571606 (type In-row data), page (1:95555). Test (IS_OFF (BUF_IOERR, pBUF->bstat)) failed.<br />
CHECKDB found 0 allocation errors and 2 consistency errors in table 'SU_tabla' (object ID 2088535921).<br />
CHECKDB found 0 allocation errors and 2 consistency errors in database 'SU_base_de_datos'.<br />
repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB (SU_base_de_datos).<br />
<br />
Acá ya sabemos cual es la página corrupta: (1:95555)<br />
<br />
<div style="text-align: justify;">
Ahora necesitamos saber si los datos están en un montón (heap), en un indice cluster o en un índice non-clustered.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Entre los datos podemos ver que es index ID 0. Podemos examinar especificamente la página (1:95555 en 'SU_base_de_datos') como vemos a continuación:</div>
<br />
DBCC TRACEON (3604, -1)<br />
GO<br />
DBCC PAGE('SU_base_de_datos', 1, 95555, 3)<br />
GO<br />
<br />
En la salida vamos a ver algo como:<br />
<br />
Metadata: IndexId = n<br />
<br />
<div style="text-align: justify;">
Si n es mayor a 1 entonces puede festejar ya que se trata de un índice non-clustered que puede ser borrado y recreado.</div>
<div style="text-align: justify;">
Ahora bien, si es 0 o 1 entonces ya se trata de corrupción de datos directamente y vamos a tener que hacer de lo que describiremos mas abajo.</div>
<br />
RECUPERAR DESDE UN BACKUP<br />
<br />
<div style="text-align: justify;">
Si el "recovery model" es FULL entonces usted hará un backup de tail log (si no sabe que es un tail log backup recuerde google es nuestro amigo).</div>
<div style="text-align: justify;">
Entonces, tail log backup, restore full backup, differential backups, logs backups, etc, etc todos con la opción WITH NORECOVERY y finalmente recupere el backup de tail log pero esta vez con la opción WITH RECOVERY.</div>
<div style="text-align: justify;">
Asumo que usted tiene bien en claro los procesos de backup/restore, si así no fuera entonces llamen a un administrador experimentado antes de perder datos y eventualmente su trabajo.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Si solo fueron afectadas unas pocas páginas entonces tenemos la opción de recuperar solamente las páginas dañadas, como vemos a continuación:</div>
<br />
RESTORE DATABASE SU_base_de_datos PAGE = '1:95555'<br />
FROM DISK = 'C:\SU_backup.bak'<br />
WITH NORECOVERY<br />
<br />
<div style="text-align: justify;">
Si el "recovery model" está en modo simple, entonces no tiene absolutamente ninguna opción y va a tener que aplicar un procedimiento de restore completo.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ahora si usted no tiene absolutamente ningún backup, entonces podría llegar a aplicar la opción de automatic repair. (haga backup de todo por favor)</div>
<br />
OPCIONES AUTOMATICAS DE REPARACION<br />
<br />
<div style="text-align: justify;">
Primero: backup, backup, backup. Queda avisado: BACKUP antes de hacer cualquier cosa que se le ocurra hacer.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ok, miremos nuevamente la salida de CHECKDB. Ahí se especifica el mínimo nivel de reparación.</div>
<br />
REPAIR_REBUILD<br />
Si el nivel mínimo de reparación es REPAIR_REBUILD usted debería estar mas o menos feliz.<br />
La sintaxis es:<br />
<br />
DBCC CHECKDB('SU_base_de_datos', REPAIR_REBUILD)<br />
<br />
REPAIR_ALLOW_DATA_LOSS<br />
Con esta opción ya no debería estar tan contento.<br />
<div style="text-align: justify;">
Esta opción intentará reparar todos los errores encontrados pero retirará eventualmente la página afectada y modificará los links entre páginas,</div>
<div style="text-align: justify;">
de modo que todo quedará como si esa página nunca hubiera existido. Algo se habrá borrado y habrá que ver que consecuencias a nivel de integridad referencial y perdida de datos esto pueda haber generado.</div>
<br />
La sintaxis es:<br />
<br />
DBCC CHECKDB('SU_base_de_datos', REPAIR_ALLOW_DATA_LOSS)<br />
<br />
Despues asegúrese de ejecutar DBCC CHECKCONSTRAINTS una vez finalizado el checkdb para verificar problemas de integridad referencial que puedan ocurrir y tomar las medidas apropiadas.<br />
<br />
FINALMENTE<br />
<br />
<div style="text-align: justify;">
La opción correcta es (en el 99% de los casos) recuperar un backup. Solo usamos las opciones automáticas de recuperación cuando no nos queda absolutamente otra opción.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
DBCC CHECKDB es una herramienta poderosa, pero muy peligrosa en las manos equivocadas, es como un bisturí, que tiene una utilidad en las manos de un cirujano y otra muy distinta en las manos de un chipancé.<br />
<b id="internal-source-marker_0.9797903657890856" style="font-weight: normal;"><br /></b><br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
<b id="internal-source-marker_0.9797903657890856" style="font-weight: normal;"></b></div>
Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-81498179013818619722011-01-21T13:09:00.000-08:002012-04-29T05:37:26.343-07:00Libro Gratuito de Microsoft sobre PowerShell<div style="text-align: justify;">
<a href="http://3.bp.blogspot.com/_qjUj6Bhew2E/TTn3fkANHFI/AAAAAAAABeE/hjH3ObCY5Jg/s1600/PowerShell%2BProgress_63173619-d8f5-4b95-b8ae-25d4f7321b01.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5564750936205499474" src="http://3.bp.blogspot.com/_qjUj6Bhew2E/TTn3fkANHFI/AAAAAAAABeE/hjH3ObCY5Jg/s400/PowerShell%2BProgress_63173619-d8f5-4b95-b8ae-25d4f7321b01.png" style="cursor: pointer; float: left; height: 300px; margin: 0pt 10px 10px 0pt; width: 353px;" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
La gente de Microsoft publicó hace algún tiempo un libro electrónico en inglés sobre Windows PowerShell. </div>
<div style="text-align: justify;">
El libro ha resultado ser un éxito. Sus casi 50 páginas ayudan a aquellos que quieren conocer Windows PowerShell.</div>
<div style="text-align: justify;">
</div>
<div style="text-align: justify;">
A continuación ustedes tienen los enlaces correspondientes:</div>
<div style="text-align: justify;">
</div>
<ul style="text-align: justify;">
<li>Acceder al <a class="" href="http://download.microsoft.com/download/a/9/4/a94270c7-ed16-4c72-8280-658c66315719/Windows%20Powershell%20-%20EN.zip" target="_blank">libro electrónico en inglés</a> (aproximadamente 2 Mb).</li>
<li>Acceder a los <a class="" href="http://download.microsoft.com/download/a/9/4/a94270c7-ed16-4c72-8280-658c66315719/PowerShell-Demofiles.zip" target="_blank">ejemplos y documentación adicional</a> (aproximadamente 5 Mb).</li>
</ul>
<div style="text-align: justify;">
<br />
Alguna documentación interesante mas ejemplos, scripts y artículos en los siguientes links:<br />
<a href="http://technet.microsoft.com/es-ar/library/ee221100%28en-us%29.aspx">http://technet.microsoft.com/es-ar/library/ee221100%28en-us%29.aspx</a><br />
<a href="http://technet.microsoft.com/es-es/scriptcenter/dd742419">http://technet.microsoft.com/es-es/scriptcenter/dd742419</a><br />
<br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
<b id="internal-source-marker_0.9797903657890856" style="font-weight: normal;"></b></div>
Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-68298093765823279542010-12-14T10:45:00.000-08:002012-04-29T05:37:03.186-07:00Eliminar todas las conexiones activas de una base de datosCREATE PROCEDURE dbo.KillConexiones<br />
@dbName SYSNAME<br />
AS<br />
BEGIN<br />
SET NOCOUNT ON<br />
<br />
DECLARE @spid INT,<br />
@cnt INT,<br />
@sql VARCHAR(255)<br />
<br />
SELECT @spid = MIN(spid), @cnt = COUNT(*)<br />
FROM master..sysprocesses<br />
WHERE dbid = DB_ID(@dbname)<br />
AND spid != @@SPID<br />
<br />
PRINT 'Eliminando '+RTRIM(@cnt)+' procesos.'<br />
<br />
WHILE @spid IS NOT NULL<br />
BEGIN<br />
PRINT 'Eliminando Proceso '+RTRIM(@spid)<br />
SET @sql = 'KILL '+RTRIM(@spid)<br />
EXEC(@sql)<br />
SELECT @spid = MIN(spid), @cnt = COUNT(*)<br />
FROM master..sysprocesses<br />
WHERE dbid = DB_ID(@dbname)<br />
AND spid != @@SPID<br />
PRINT RTRIM(@cnt)+' Procesos por eliminar.'<br />
END<br />
END<br />
GO<br />
<br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-52307099471236627912010-12-01T06:15:00.000-08:002012-04-29T05:36:46.488-07:00Traducción del Checklist de Mejores Prácticas para ser un DBA excepcional por Brad McGehee<div style="text-align: justify;">
<a href="http://3.bp.blogspot.com/_qjUj6Bhew2E/TPZcbZQ1sQI/AAAAAAAABZo/hB6sxpyMl_U/s1600/DBA_SQLDATA.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5545721616861081858" src="http://3.bp.blogspot.com/_qjUj6Bhew2E/TPZcbZQ1sQI/AAAAAAAABZo/hB6sxpyMl_U/s400/DBA_SQLDATA.jpg" style="cursor: pointer; float: left; height: 178px; margin: 0pt 10px 10px 0pt; width: 283px;" /></a><span class="" id="result_box" lang="es"><span title=""><span style="font-weight: bold;">Mejores Prácticas para ser un DBA excepcional SQL Server (redactado por el genial Brad McGehee )</span></span></span><br />
<br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">1. </span><span title="">Ingresa a un SQL grupo de usuarios (chapters.sqlpass.org)</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">2. </span><span title="">Únete a SQL PASS (www.sqlpass.org)</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">3. </span><span title="">Asistir a por lo menos una conferencia de profesionales cada año.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">4. </span><span title="">Asistir a por lo menos una sesión de entrenamiento cada año.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">5. </span><span title="">Lea por lo menos cuatro libros sobre SQL Server cada año.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">6. </span><span title="">Lea el libro electrónico Cómo convertirse en un DBA excepcional (descarga free en red-gate.com)</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">7. </span><span title="">Aprenda todo lo que pueda acerca de su trabajo, especialmente aquellas áreas que nadie más le gusta o quiere dominar.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">8. </span><span title="">Sea voluntario en su trabajo para tareas nuevas y difíciles que le harán conocer en toda su organización.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">9. </span><span title="">Instale SQL Server en una computadora portátil o de escritorio y practique nuevos aspectos de SQL Server, especialmente de SQL Server 2008 y 2008R2 y del nuevo denali (2010).</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">10. </span><span title="">Participar en los foros de SQL Server (preguntar y responder preguntas)</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">1. </span><span title="">www.SQLServerCentral.com</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">2. </span><span title="">http://ask.sqlservercentral.com/com</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">3. </span><span title="">www.microsoft.com / comunidades / grupos de noticias / en-us / default.aspx</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">11. </span><span title="">Obtenga la certificación como DBA de SQL Server:</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">1. </span><span title="">a. </span><span title="">Microsoft Certified Technology Specialist (http://www.microsoft.com/learning/en/us/certification/cert-sql-server.aspx # Tab2)</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">2. </span><span title="">b. </span><span title="">TI de Microsoft Certified Professional (http://www.microsoft.com/learning/en/us/certification/cert-sql-server.aspx # tab3)</span></span><br />
<a href="http://4.bp.blogspot.com/_qjUj6Bhew2E/TPZcxh65MBI/AAAAAAAABZw/rnkWVzIi5HE/s1600/DBA_SQLDATA_001.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5545721997142077458" src="http://4.bp.blogspot.com/_qjUj6Bhew2E/TPZcxh65MBI/AAAAAAAABZw/rnkWVzIi5HE/s400/DBA_SQLDATA_001.jpg" style="cursor: pointer; float: left; height: 256px; margin: 0pt 10px 10px 0pt; width: 256px;" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<span class="" id="result_box" lang="es"><span title=""><span style="font-size: 130%;"><span style="font-weight: bold;">Día a día</span></span></span></span><br />
<span class="" id="result_box" lang="es"><span title=""></span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">1. </span><span title="">Compruebe los registros de eventos del S.O. y los registros de SQL Server para detectar eventos inusuales.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">2. </span><span title="">Verifique que todos los trabajos programados se han ejecutado correctamente.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">3. </span><span title="">Confirme que las copias de seguridad se han hecho y guardado con éxito a un lugar seguro.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">4. </span><span title="">Monitoree el espacio en disco para asegurarse de que sus servidores de SQL no se quedarán sin espacio en disco. </span><span title="">Para un mejor rendimiento, todos los discos deben tener 15% o más de espacio libre.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">5. </span><span title="">A lo largo del día, haga un seguimiento periódico de rendimiento utilizando Monitor de sistema y de perfiles / Traza de SQL.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">6. </span><span title="">Monitorear regularmente e identificar problemas de bloqueo.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">7. </span><span title="">Mantenga un registro de los cambios que realice a los servidores, incluyendo la documentación de los problemas de rendimiento a identificar y corregir.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">8. </span><span title="">Crear alertas de SQL Server para que le avise de posibles problemas, y las envíe por mail. </span><span title="">Tomar las medidas necesarias.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">9. </span><span title="">Regularmente restaure copias de seguridad en un servidor de prueba para verificar que realmente los puede restaurar. </span><span title="">No es necesario para restaurar todas las copias de seguridad todos los días, pero debiera hacerlo a menudo para asegurarse de que usted tiene buenas copias de seguridad.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">10. </span><span title="">Tómese su tiempo para aprender algo nuevo como un DBA para promover su desarrollo profesional.</span></span><br />
<br />
<span class="" id="result_box" lang="es"><span title=""><span style="font-size: 130%; font-weight: bold;">Instalación</span></span></span><br />
<span class="" id="result_box" lang="es"><span title=""></span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">1. </span><span title="">Siempre documente las instalaciones de modo completo, aun cuando parezca redundante, esto hará que las instancias de SQL Server se pueden reproducir fácilmente en caso de emergencia.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">2. </span><span title="">Si es posible, instalar y configurar todas las instancias de SQL Server de una manera consistente, de la misma forma , basándose en las normas pre-acordadas de su organización.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">3. </span><span title="">No instale los servicios de SQL Server que no se utilizan, como Microsoft indexación de texto completo, Reporting Services o Analysis Services.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">4. </span><span title="">Para obtener el mejor rendimiento de SQL Server, detenga todos los servicios del sistema operativo que no son necesarios.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">5. </span><span title="">Para un óptimo rendimiento de SQL Server, no ejecutar al SQL Server junto con ninguna otra aplicación.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">6. </span><span title="">Para obtener el mejor rendimiento I / O, busque los archivos de base de datos (. mdf) y archivos de registro (. ldf) en discos separados para aislar a los patrones de acceso a disco.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">7. </span><span title="">Si tempdb se utiliza en gran medida, pongalo en un disco aparte.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">8. </span><span title="">No instale SQL Server en un controlador de dominio.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">9. </span><span title="">Asegúrese de que SQL Server se instala en una partición NTFS.</span></span><br />
<span class="" id="result_box" lang="es"><span title=""> </span><span title="">10. </span><span title="">No utilice NTFS con cifrado de archivos de datos (EFS) y ni compresión de datos sobre el disco de la base de datos de SQL Server y los archivos de registro.</span></span><br />
<br />
<span class="" id="result_box" lang="es"><span title=""><span style="font-size: 130%;"><span style="font-weight: bold;">Actualizar</span></span></span><span title="">1. </span><span title="">Ejecute el Upgrade Advisor de SQL Server antes de actualizar. </span><span title="">Haga los cambios necesarios antes de realizar la actualización.</span><span title="">2. </span><span title="">Realizar una actualización de prueba antes de actualizar los servidores de producción. </span><span title="">Y no se olvide de probar las aplicaciones con la nueva versión también.</span><span title="">3. </span><span title="">Antes de actualizar, asegúrese de tener un plan para revertir los cambios en caso que la actualización sea problemática.</span><span title="">4. </span><span title="">No actualizar clústeres de SQL Server en su lugar. </span><span title="">En cambio, a reconstruirlos en un nuevo hardware.</span><span title="">5. </span><span title="">Si actualiza desde una versión anterior de SQL Server, debe actualizar todas las estadísticas en todas las bases de datos. </span><span title="">Esto se debe a que las estadísticas no se actualizan automáticamente durante el proceso de actualización.</span></span><br />
<br />
<h2>
<span style="color: black;">Seguridad</span> </h2>
<ol style="margin-bottom: 0cm; margin-top: 0cm;" type="1">
<li class="MsoNormal" style="color: black;"><span style="color: black;">Asegure la seguridad física de cada Servidor SQL , previniendo que cualquier usuario no autorizado pueda acceder físicamente a sus servidores.</span> </li>
<li class="MsoNormal" style="color: black;">Instalar solamente las mínimas y necesarias nettwork libraries y network protocols en sus instancias SQL </li>
<li class="MsoNormal" style="color: black;">Minimize el número de usuarios sysadmins con acceso a SQL Server. </li>
<li class="MsoNormal" style="color: black;">Como DBA, logueesé como sysadmin solo cuando realmente lo necesite. Cree cuentas específicas para DBAs para que puedan acceder a SQL Server cuando no necesiten privilegios sysadmin. </li>
<li class="MsoNormal" style="color: black;">Asigne a la cuenta "sa" una password realmente compleja y no la use nunca para loguearse a SQL Server. En vez de eso use una cuenta Windows Authentication para acceder SQL Server como sysadmin. </li>
<li class="MsoNormal" style="color: black;">Dele a los usuarios los mínimos permisos necesarios que le permitan a ellos realizar su trabajo. </li>
<li class="MsoNormal" style="color: black;">De ser posible, use stored procedures o views para el acceso a los datos en vez de dejarlos acceder directamente a las tablas. </li>
<li class="MsoNormal" style="color: black;">De ser posible, use Windows Authentication logins en vez de SQL Server logins. </li>
<li class="MsoNormal" style="color: black;">Use strong passwords (combinación de mayúsculas, minúsculas, numeros y caracteres especiales) para todos los SQL Server login. </li>
<li class="MsoNormal" style="color: black;">No le asigne permisos al rol de base de datos "public" </li>
<li class="MsoNormal" style="color: black;">Remueve Logins IDs que ya no necesitan acceder a SQL Server apenas los detecte. </li>
<li class="MsoNormal" style="color: black;">Deshabilite el usuario "guest" en cada base de datos usando REVOKE CONNECT FROM GUEST. </li>
<li class="MsoNormal" style="color: black;">No use "cross database ownership chaining" si no es realmente necesario. </li>
<li class="MsoNormal" style="color: black;">Nunca habilite permisos a xp_cmdshell a los usuarios que no son sysadmin. </li>
<li>Eliminar las bases de ejemplo (adventureworks, pubs, northwind) de todas las instancias de producción. </li>
<li class="MsoNormal" style="color: black;">Usar Windows Global Groups, o SQL Server Roles para manejar grupos de usuarios con similares permisos. </li>
<li class="MsoNormal" style="color: black;">No debería crear ni permitir crear network shares en servidores SQL Server. </li>
<li class="MsoNormal" style="color: black;">Configurar login auditing , de esta manera se puede ver quienes intentaron loguearse y los intentos fallidos de login. </li>
<li class="MsoNormal" style="color: black;">No use jamás la cuenta sa ni login ids que sean sysadmin como cuentas de acceso desde aplicaciones. </li>
<li class="MsoNormal" style="color: black;">Asegurese que sus servidores están detrás de un firewall y no están expuestos directamente a internet. </li>
<li class="MsoNormal" style="color: black;">En SQL Server 2005 y previos, remover el grupo de BUILTIN/Administrators para evitar que los administradores locales del servidor puedan acceder a SQL Server. En SQL Server 2008, el grupo BUILTIN/Administrators group no existe en forma predeterminada. </li>
<li class="MsoNormal" style="color: black;">Ejecute cada servicio SQL Server bajo una cuenta de dominio diferente. </li>
<li class="MsoNormal" style="color: black;">Dele a las cuentas asignadas a los servicios SQL Server los minimos permisos que le permitan al mismo ejecutarse de la manera correcta. En la mayoría de los casos los permisos de un administrador local no son necesarios y menos aún los permisos de un administrador de dominio. </li>
<li class="MsoNormal" style="color: black;">Cuando use queries distribuidas use linked servers en vez de remote servers. Remote servers están solo por backward compatibility. </li>
<li class="MsoNormal" style="color: black;">No navegue internet desde una instancia de producción de SQL Server. </li>
<li class="MsoNormal" style="color: black;">En vez de instalar antivirus/antispyware en un SQL Server, realice scaneos desde un servidor remoto y solo cuando la actividad del servidor SQL no sea tan alta. </li>
<li class="MsoNormal" style="color: black;">Agregue los service packs, tanto de SQL Server com de sistema operativo apenás estén disponibles. </li>
<li class="MsoNormal" style="color: black;">Considere la posibilidad de encriptar los backups con herramientas como Red Gate SQL Backup Pro u otras. </li>
<li class="MsoNormal" style="color: black;">Solo habilite las trazas de "C2 auditing" o "Common Criteria compliance" cuando sea realmente necesario, porque sobrecargan el servidor si están habilitadas. </li>
<li class="MsoNormal" style="color: black;">Considere seriamente ejecutar un SQL Server security scanner para detectar si hay huecos de seguridad en sus servidores, tanto a nivel sistema operativo como servidor de base de datos. <a href="http://searchsqlserver.techtarget.com/feature/SQL-Server-security-test-checklist">http://searchsqlserver.techtarget.com/feature/SQL-Server-security-test-checklist </a> </li>
<li class="MsoNormal" style="color: black;">Considere habilitar SSL or IPSEC para las conexiones entre sql server y los clientes. </li>
<li class="MsoNormal" style="color: black;">Si está utilizando SQL Server 2005/2008, habilite password policy checking. </li>
<li class="MsoNormal" style="color: black;">Si está usando SQL Server 2008 en un entorno de alta seguridad, considere implementar TDE, Transparent Data Encryption para proteger los datos de su servidor. </li>
<li>Si utiliza SQL Server 2005, no use SQL Server Surface Area Configuration para desbloquear características que nunca se utilizan y que pueden traer solamente problemas de seguridad.</li>
<li>Si está usando SQL Server 2005/2008 y crea endpoints, solo habilite permisos grant CONNECT a los logins que realmente necesitan acceder esos endpoints. Explicitamente deniegue (deny) CONNECT permissions a los endpoints que no son necesarios para los usuarios.</li>
</ol>
<br />
<h2>
Mantenimiento de Jobs </h2>
<ol style="margin-bottom: 0cm; margin-top: 0cm;" type="1">
<li class="MsoNormal" style="color: black;">Evite ejecutar jobs en el mismo horario. Preferentemente cada job debe ejecutarse en su propio horario. </li>
<li class="MsoNormal" style="color: black;">Cuando cree jobs asegurese de incluir intercepción de errores, de loguear la actividad del job y de establecer alertas (mails por ejemplo) para asegurarse de saber al momento de cualquier fallo que pudiera ocurrir. </li>
<li class="MsoNormal" style="color: black;">Cree un login específico con el solo propósito de ejecutar jobs y asignele a dicho login todos los jobs. </li>
<li class="MsoNormal" style="color: black;">Si su job incluye código Transact-SQL, asegurese que está optimizado para que se ejecute correctamente. </li>
<li>Periodicamente (diario, semanal, mensual) reconstruya o reorganice los índices de sus bases de datos para remover la fragmentación logica y aprovechar mejor el especio en disco.</li>
<li>Periódicamente y como parte de sus tareas de mantenimiento, ejecute DBCC CHECKDB en todas sus bases de datos para comprobar su integridad y detectar eventuales problemas.</li>
<li class="MsoNormal" style="color: black;">Evite ejecutar comandos DBCC en los horarios donde se da la mayor carga de trabajo en sus servidores. Estos comandos son altamente requirientes en términos de recursos y afectan la performance. </li>
<li>Si usted reinicia muy raramente el servicio SQL Server service, se va a encontrar con que el log de SQL Server se pone muy grande y toma mucho tiempo para cargar y ser mostrado. Usted puede cerrar el log error actual y crear uno nuevo ejecutando sp_cycle_errorlog o DBCC ERRORLOG. Establezca esto como un job semanal.</li>
<li class="MsoNormal" style="color: black;">Haga un script de todos los jobs y guarde esos scripts en un lugar seguro por si necesita en algun momento reconstruir los servers. </li>
</ol>
<br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
<b id="internal-source-marker_0.9797903657890856" style="font-weight: normal;"></b></div>
Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-89731935065212839512010-11-12T06:04:00.001-08:002012-01-05T04:20:20.734-08:00Como obtener el último registro de una categoría dada usando la función RANKSupongamos que queremos obtener el último producto vendido de cada categoría, la forma mas sencilla de realizar esto es utilizando la función RANK particionando por la categoría y ordenando por orden inverso por la fecha de venta, luego filtramos por el rango obtenido ( rank = 1) y ahi obtenemos el último de cada categoría.<br /><br />SELECT *<br />FROM<br />(<br /> SELECT top 100 categoria_id<br /> , producto_id<br /> , fechadeventa, Rank() over (Partition BY categoria_id ORDER BY fechadeventa DESC ) AS rango<br /> FROM<br /> productosvendidos<br />) rs WHERE rango = 1<br /><br /><b id="internal-source-marker_0.9797903657890856" style="font-weight: normal; ">Hugo Bernachea<br /></b><a href="https://twitter.com/bernachea">Twitter: @bernachea</a><b id="internal-source-marker_0.9797903657890856" style="font-weight: normal; "><br />el.kyrios@yahoo.com</b>Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-76230717082594260462010-11-05T05:55:00.000-07:002012-04-29T05:36:21.704-07:00Cannot open user default database. Login failed. SQL 2005<span style="font-size: 130%;">En linea de comandos ejecutar la utilidad sqlcmd:</span><span style="font-size: 130%;"><span id="_ctl5_ctlTopic"><span id="_ctl5_ctlTopic_ctlPanelBar"><span id="_ctl5_ctlTopic_ctlPanelBar_ctlTopicsRepeater__ctl11_lblFullMessage"> sqlcmd -E -d master<br /><br />Una vez dentro de la línea de comandos de SQL Server ejecutar (reemplazar miLogin con el login que no está pudiendo acceder al servidor)<br /><br />alter login miLogin with default_database = master</span></span></span><br />go<br /><br />Y ya estaría habilitado el acceso a la base.<br /></span><br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
<b id="internal-source-marker_0.9797903657890856" style="font-weight: normal;"></b>Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-53173947799053024202010-11-05T05:49:00.000-07:002012-04-29T05:36:02.262-07:00Error 945 Database cannot be opened due to inaccessible files<span style="color: red;"><i>SQL SERVER – FIX : Error 945 Database cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server error log for details</i></span><br />
<span style="font-size: 130%;">Este es un error mas o menos común y los pasos de verificación son los siguientes:</span><br />
<span style="font-size: 130%; font-weight: bold;">Paso 1:</span><span style="font-size: 130%;"> Identificar el status de la base de datos</span><br />
<span style="font-size: 130%;">use master<br />select databaseproperty(‘db_name’,'isShutdown’)</span><br />
<span style="font-size: 130%;">La mayor parte de las veces debería devolver 1 en esta situación.</span><br />
<span style="font-size: 130%; font-weight: bold;">Paso 2:</span><span style="font-size: 130%;"> Limpiar el estado interno de la Base de datos.<br />use master<br />alter database db_name set offline</span><br />
<span style="font-size: 130%;">Finaliza sin error en la mayoría de los casos...</span><br />
<span style="font-size: 130%; font-weight: bold;">Paso 3: </span><span style="font-size: 130%;">Poner la base de nuevo Online<br /><br />use master</span><br />
<span style="font-size: 130%;"> alter database db_name set online</span><br />
<span style="font-size: 130%;">SQL Server verificará el log y la base de datos y si todo está ok ya tendriamos la base nuevamente online y funcional.</span><br />
<br />
<br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-66535114392028925712010-10-04T08:06:00.001-07:002012-04-29T05:35:19.914-07:00SQL Server 2008 Clustering en Windows Server 2008<iframe frameborder="0" height="600" src="http://player.vimeo.com/video/14503790" width="800"></iframe><br />
<a href="http://vimeo.com/14503790">SQL Server 2008 Clustering - Part 7</a> from <a href="http://vimeo.com/ramu">Ramu Poonjolai</a> on <a href="http://vimeo.com/">Vimeo</a>.<br />
<br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-28549428778679450202010-09-29T13:02:00.000-07:002012-04-29T05:34:30.054-07:00xType en syscolumnsA diferencia de 'xType" en sysobjects, no es tan facil de encontrar que significan esos valores en la tabla syscolumns, teniendo en cuenta que en los Books online mencionan al xtype como "for internal purpose" (para uso interno).<br />
<br />
La tabla que tiene esta info es sysTypes y podemos escribir un query tipo:<br />
<br />
SELECT xtype, name [tipo] FROM systypes ORDER BY xType<br />
<br />
y esto devuelve<br />
<br />
XType tipo<br />
----------------<br />
34 image<br />
35 text<br />
36 uniqueidentifier<br />
48 tinyint<br />
52 smallint<br />
56 int<br />
58 smalldatetime<br />
59 real<br />
60 money<br />
61 datetime<br />
62 float<br />
98 sql_variant<br />
99 ntext<br />
104 bit<br />
106 decimal<br />
108 numeric<br />
122 smallmoney<br />
127 bigint<br />
165 varbinary<br />
167 varchar<br />
173 binary<br />
175 char<br />
189 timestamp<br />
231 nvarchar<br />
231 sysname<br />
239 nchar<br />
241 xml<br />
<br />
<br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-60766790585995526312010-09-16T17:15:00.000-07:002012-04-29T05:34:02.440-07:00Abraham Silberschatz - Fundamentos de Bases de Datos<a href="http://www.scribd.com/doc/308283/UNED-Fundamentos-de-bases-de-datos" style="display: block; font: 14px Helvetica,Arial,Sans-serif; margin: 12px auto 6px; text-decoration: underline;" title="View UNED Fundamentos de bases de datos on Scribd">UNED Fundamentos de bases de datos</a> <br />
<br />
<br />
<object data="http://d1.scribdassets.com/ScribdViewer.swf" height="600" id="doc_923881537047452" name="doc_923881537047452" style="outline: medium none;" type="application/x-shockwave-flash" width="100%"> <param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf">
<param name="wmode" value="opaque">
<param name="bgcolor" value="#ffffff">
<param name="allowFullScreen" value="true">
<param name="allowScriptAccess" value="always">
<param name="FlashVars" value="document_id=308283&access_key=kse4ctpngqtfe&page=1&viewMode=list">
<embed id="doc_923881537047452" name="doc_923881537047452" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=308283&access_key=kse4ctpngqtfe&page=1&viewMode=list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" bgcolor="#ffffff" width="100%" height="600"></embed> </object> <br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-47831384932100626492010-09-13T15:39:00.000-07:002012-04-29T05:32:01.054-07:00SQL Injection Attacks<span style="font-size: 130%;"><span style="font-weight: bold;">Un pequeño instructivo con algunas técnicas básicas de injection sql, interesante para empezar a entender estas técnicas de ataque a servidores de bases de datos:</span><br /><span style="font-weight: bold;">El libro se encuentra en:</span></span><br />
<a href="http://www.securitydocs.com/pdf/3348.PDF">http://www.securitydocs.com/pdf/3348.PDF</a><br />
<br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-40945791856033740992010-08-24T16:47:00.000-07:002012-04-29T05:32:41.564-07:00Portqry - Monitor de estados de puertos TCP/IP<span style="font-size: 130%; font-weight: bold;"><span style="font-family: arial;">Portqry.exe es un utilitario que informa sobre el estado de un puerto TCP/IP.</span><br /><span style="font-family: arial;"><br />Este utilitario se puede descargar desde:</span></span><span style="font-size: 130%; font-weight: bold;"><span style="font-family: arial;"></span><br /><span style="font-family: arial;">Para línea de comandos:</span><br /><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=89811747-C74B-4638-A2D5-AC828BDC6983&displaylang=en" style="font-family: arial;">http://www.microsoft.com/downloads</a></span><span style="font-size: 130%; font-weight: bold;"><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=89811747-C74B-4638-A2D5-AC828BDC6983&displaylang=en" style="font-family: arial;">/details.aspx?FamilyID=89811747-C74B-4638-A2D5-AC828BDC6983&displaylang=en</a></span><br />
<br />
<span style="font-size: 130%; font-weight: bold;"><a href="http://3.bp.blogspot.com/_qjUj6Bhew2E/THRc_cmPleI/AAAAAAAABSQ/omapLbKe2ns/s1600/portqry.png" style="font-family: arial;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5509130489259070946" src="http://3.bp.blogspot.com/_qjUj6Bhew2E/THRc_cmPleI/AAAAAAAABSQ/omapLbKe2ns/s400/portqry.png" style="float: left; height: 268px; margin: 0pt 10px 10px 0pt; width: 400px;" /></a></span><br />
<span style="font-size: 130%; font-weight: bold;"><br /><br /><br /><br /><br /><br /><br /><br /><br /><span style="font-family: arial;"><br /></span></span><br />
<span style="font-size: 130%; font-weight: bold;"><span style="font-family: arial;">Interfaz Gráfica:</span><br /><a href="http://download.microsoft.com/download/3/f/4/3f4c6a54-65f0-4164-bdec-a3411ba24d3a/portqryui.exe" style="font-family: arial;">http://download.microsoft.com/download/3/f/4/3f4c6a54-65f0-4164-bdec-a3411ba24d3a/portqryui.exe</a></span><span style="font-size: 130%; font-weight: bold;"><br /></span><span style="font-size: 130%; font-weight: bold;"><a href="http://4.bp.blogspot.com/_qjUj6Bhew2E/THRc_CQ9PfI/AAAAAAAABSI/SxHq-RGTz8Y/s1600/20040320_portqry_20040805.png" style="font-family: arial;"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5509130482190466546" src="http://4.bp.blogspot.com/_qjUj6Bhew2E/THRc_CQ9PfI/AAAAAAAABSI/SxHq-RGTz8Y/s400/20040320_portqry_20040805.png" style="cursor: pointer; float: left; height: 344px; margin: 0pt 10px 10px 0pt; width: 400px;" /></a></span><br />
<span style="font-size: 130%; font-weight: bold;"><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><span style="font-family: arial;"><br /><br />Este utilitario informa el estado de puertos de tres formas distintas: </span></span><br />
<ul style="font-family: arial; font-weight: bold;">
<li><span style="font-size: 130%;"><span style="color: #660000;">Listening</span><br />Hay un proceso a la escucha en el puerto del equipo seleccionado. Portqry.exe recibió una respuesta desde el puerto.</span></li>
</ul>
<br />
<ul style="font-family: arial; font-weight: bold;">
<li><span style="font-size: 130%;"><span style="color: #660000;">Not Listening</span><br />No hay ningún proceso a la escucha en el puerto de destino del sistema de destino. Portqry.exe recibió el mensaje "Destino inalcanzable: Puerto inaccesible" de Protocolo de mensajes de control de Internet (ICMP) para el puerto UDP de destino. O bien, si el puerto de destino es un puerto TCP, Portqry recibió un paquete de confirmación TCP con el indicador <i>Reset</i>.</span></li>
</ul>
<br />
<ul style="font-family: arial; font-weight: bold;">
<li><span style="font-size: 130%;"><span style="color: #660000;">Filtered</span><br />El puerto del equipo que seleccionó tiene activado un filtro. Portqry.exe no recibió una respuesta desde el puerto. Es posible que haya un proceso a la escucha en el puerto. De manera predeterminada, los puertos TCP se consultan tres veces y los puertos UDP una antes de que el informe indique que el puerto tiene activado un filtro.</span></li>
</ul>
<span style="font-size: 130%; font-weight: bold;"><span style="font-family: arial;"> Portqry.exe puede consultar un solo puerto, una lista ordenada de puertos o un intervalo secuencial de puertos.</span><br /><br /><span style="font-family: arial;">Ejemplos</span><br /><span style="font-family: arial;">El comando siguiente intenta resolver "reskit.com" como una dirección IP y, a continuación, consulta el puerto TCP 25 en el host correspondiente:</span></span><script type="text/javascript">
loadTOCNode(2, 'moreinformation');
</script><br />
<div class="indent" style="font-family: arial; font-weight: bold;">
<span style="font-size: 130%;">portqry -n www.mundoeva.com -p tcp -e 25</span></div>
<span style="font-size: 130%; font-weight: bold;"><span style="font-family: arial;"> El comando siguiente intenta resolver "169.254.0.11" como un nombre de host y después consulta los puertos TCP 143, 110 y 25 (en ese orden) en el host que seleccionó. Este comando también crea un archivo de registro (Portqry.log) que contiene un registro del comando que ejecutó y su resultado.</span></span><br />
<div class="indent" style="font-family: arial; font-weight: bold;">
<span style="font-size: 130%;"><br />portqry -n 169.254.0.11 -p tcp -o 143,110,25 -l portqry.log</span></div>
<span style="font-size: 130%; font-weight: bold;"><br /><span style="font-family: arial;">El comando siguiente intenta resolver </span><var style="font-family: arial;">miServidor</var><span style="font-family: arial;"> como una dirección IP y después consulta el intervalo especificado de puertos UDP (135-139) en orden secuencial en el host correspondiente. Este comando también crea un archivo de registro (</span><var style="font-family: arial;">miServidor</var><span style="font-family: arial;">.txt) que contiene un registro del comando que ejecutó y su resultado.</span></span><br />
<div class="indent" style="font-family: arial; font-weight: bold;">
<span style="font-size: 130%;"><br />portqry -n <var>miServidor</var> -p udp -r 135:139 -l <var>miServidor.txt</var></span></div>
<span style="font-size: 130%; font-weight: bold;"><br /><span style="font-family: arial;">Este utilitario es una herramienta de utilidad y que debemos tener siempre en cuenta al momento de monitorear estados de puertos remotos.</span></span><br />
<br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>
Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-38208690852393551842010-08-18T17:30:00.000-07:002012-04-29T05:27:38.438-07:00FAIL_VIRTUAL_RESERVE - Insuficiente memoria para ejecutar el query.Este es un problema relativo al Virtual Address Space (VAS).<br />
<br />
Este mensaje FAIL_VIRTUAL_RESERVE 589824 significa (al menos lo que yo se) que estamos fallando en asignar espacio contiguo de alocacion de 589824 bytes aprox.<br />
<br />
Generalmente la solución es agregar el switch o parametro de startup -g 512 y reiniciar el servicio, tal como indica microsoft: <a href="http://msdn.microsoft.com/en-us/library/ms190737.aspx">http://msdn.microsoft.com/en-us/library/ms190737.aspx</a><br />
<br />
If este seteo no funcionara existen algunos otros puntos a mirar:<br />
<br />
1. Estrategia de indices para mejorar la performance de los queries y disminuir los bloqueos.<br />
2. Minimum y Max memory size. Dejarle algo de memoria libre para el sistema operativo, al menos medio gb.<br />
3. Aplicar los ultimos service pack y patchs, para lo cual pueden comparar su versión y patchs aplicados con respecto a la ultima en http://www.sqlteam.com/article/sql-server-versions<br />
4. Permisos de Lock Pages in Memory Permissions para el user que ejecuta el servicio sql server<br />
http://www.tipandtrick.net/2008/enable-lock-pages-in-memory-to-prevent-database-paging-to-disk/<br />
5. Chequear si las estadisticas están des-actualizadas.<br />
<br />
Una muy buena explicacion de estos temas: <a href="http://blogs.msdn.com/b/sqlserverfaq/archive/2010/02/16/how-to-find-who-is-using-eating-up-the-virtual-address-space-on-your-sql-server.aspx">http://blogs.msdn.com/b/sqlserverfaq/archive/2010/02/16/how-to-find-who-is-using-eating-up-the-virtual-address-space-on-your-sql-server.aspx</a><br />
<br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.comtag:blogger.com,1999:blog-3248371203969704478.post-57357213703231587152010-07-30T12:10:00.001-07:002012-04-29T05:27:09.821-07:00The Power of Cross Join<a href="http://weblogs.sqlteam.com/jeffs/archive/2005/09/12/7755.aspx">http://weblogs.sqlteam.com/jeffs/archive/2005/09/12/7755.aspx</a><br />
<br />
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Hugo Román Bernachea</code></span><br />
<span style="font-size: small;"><code><a href="mailto:SQLServer777@gmail.com" target="_blank">Mail de contacto: SQLServer777@gmail.com </a><br />
</code></span><br />
<span style="font-size: small;"><code>Microsoft Certified DBA<br />Microsoft Certified Trainer</code></span></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<a href="http://www.linkedin.com/in/bernachea"><span style="font-size: small;"><code>http://www.linkedin.com/in/bernachea</code></span></a></div>
<div style="color: black; font-family: Arial,Helvetica,sans-serif; text-align: justify;">
<span style="font-size: small;"><code>Twitter: @bernachea</code></span></div>
<div style="text-align: justify;">
<br /></div>Románhttp://www.blogger.com/profile/04425855912922732902noreply@blogger.com