<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sergio Sainz &#187; SQL SERVER</title>
	<atom:link href="http://www.sergiosainz.com/category/sistemas/windows/sql-server/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sergiosainz.com</link>
	<description>Apuntes técnicos de un administrador de sistemas</description>
	<lastBuildDate>Sat, 26 Jun 2010 17:37:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Lenguaje de SQL Server (dateformat)</title>
		<link>http://www.sergiosainz.com/2009/02/06/lenguaje-de-sql-server-dateformat/</link>
		<comments>http://www.sergiosainz.com/2009/02/06/lenguaje-de-sql-server-dateformat/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 00:35:00 +0000</pubDate>
		<dc:creator>Sergio Sainz</dc:creator>
				<category><![CDATA[SQL SERVER]]></category>

		<guid isPermaLink="false">http://www.sergiosainz.com/2009/02/06/lenguaje-de-sql-server-dateformat/</guid>
		<description><![CDATA[Hace poco me he enfrentado a un problema que puede suceder al migrar una base de datos a otro entorno mssql que no comparta el mismo lenguaje de instalación que el que teníamos en un principio. En este caso ha sido al restaurar una base de datos que se encontraba en un sql con lenguaje [...]]]></description>
			<content:encoded><![CDATA[<p>Hace poco me he enfrentado a un problema que puede suceder al migrar una base de datos a otro entorno mssql que no comparta el mismo lenguaje de instalación que el que teníamos en un principio.</p>
<p>En este caso ha sido al restaurar una base de datos que se encontraba en un sql con lenguaje “español” a otro que habían instalado en “us_english”. Con el primero las fechas (campos de tipo <em>datetime</em>) se muestran en formato “<em>dd/mm/yyy</em>” pero en inglés las fechas tienen el formato “<em>mm/dd/yyyy”.</em></p>
<p>Si mostramos la tabla desde el Microsoft Sql Server Managmentent Studio veremos que las fechas se muestran tal y como hemos importado, pero el problema viene cuando queremos hacer una consulta por ejemplo desde nuestra web y Sql Server nos devuelve la fecha, entonces veremos que se produce un error que esta relacionado con el formato de la fecha.</p>
<p>Puestos en situación, vamos manos a la obra.</p>
<p><strong>¿Como ver el lenguaje de Sql Server?</strong></p>
<blockquote><p><font color="#0000ff">select</font> <font color="#ff00ff">@@language</font></p>
</blockquote>
<p><font color="#555555">Si mssql ha sido instalado en inglés seguramente obtendrás <strong>us_english</strong> como resultado.</font></p>
<p><font color="#555555"><strong>¿Como ver todos los lenguajes disponibles y sus propiedades?</strong></font></p>
<blockquote><p><font color="#800000">sp_helplanguage</font></p>
</blockquote>
<p><a href="http://www.sergiosainz.com/wp-content/uploads/2009/02/image1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.sergiosainz.com/wp-content/uploads/2009/02/image-thumb1.png" width="364" height="202" /></a> </p>
<p><strong>¿Como establecer el lenguaje?</strong></p>
<p><font color="#000000">De esta manera establecemos el lenguaje español para todas las consultas que lancemos desde la sesión y con el usuario que estemos conectados:</font></p>
<blockquote><p><font color="#0000ff">SET LANGUAGE</font> <font color="#00ffff">Español</font></p>
</blockquote>
<p>También podemos, por ejemplo en el caso de nuestra web, antes de lanzar una consulta sql especificar el dateformat deseado en cada caso, indicando:&#160;&#160; </p>
<blockquote><p><font color="#0000ff">set dateformat</font> <font color="#00ffff">dmy</font></p>
</blockquote>
<p><strong>¿Como establecer el lenguaje predeterminado para TODAS las bases de datos del servidor?</strong></p>
<p>De esta manera conseguimos que por defecto se devuelvan las fechas en formato <em>dd/mm/yyyy</em>. Lo que debemos hacer es abrir Microsoft Sql Server Managmentent Studio, ir a las propiedades del servidor SQL y en el apartado <em>avanzado, </em>modificar la opción <em>idioma predeterminado</em> por <em>Español.</em></p>
<p><a href="http://www.sergiosainz.com/wp-content/uploads/2009/02/image2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.sergiosainz.com/wp-content/uploads/2009/02/image-thumb2.png" width="364" height="322" /></a></p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>Además hay que tener en cuenta el lenguaje por defecto de los <em>Inicios de sesión </em>que existan en el servidor, ya que los que creemos nuevos a partir de ahora lo harán con lenguaje español. Para ello:</p>
<blockquote><p><font color="#0000ff">USE <font color="#00ffff">[master]</font>        <br />GO        <br />ALTER LOGIN <font color="#00ffff">[serversql\sergiosainz]</font> WITH DEFAULT_DATABASE=<font color="#00ffff">[master]</font>, DEFAULT_LANGUAGE=<font color="#00ffff">[Spanish]         <br /></font>GO</font></p>
</blockquote>
<p>También es posible modificar el idioma por el deseado desde las propiedades del usuario.</p>
<p><a href="http://www.sergiosainz.com/wp-content/uploads/2009/02/image3.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.sergiosainz.com/wp-content/uploads/2009/02/image-thumb3.png" width="364" height="323" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sergiosainz.com/2009/02/06/lenguaje-de-sql-server-dateformat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TIP MSSQL: Recuperar una BBDD sin archivo de log</title>
		<link>http://www.sergiosainz.com/2009/02/02/tip-mssql-recuperar-una-bbdd-sin-archivo-de-log/</link>
		<comments>http://www.sergiosainz.com/2009/02/02/tip-mssql-recuperar-una-bbdd-sin-archivo-de-log/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 14:15:00 +0000</pubDate>
		<dc:creator>Sergio Sainz</dc:creator>
				<category><![CDATA[SQL SERVER]]></category>

		<guid isPermaLink="false">http://www.sergiosainz.com/2009/02/02/tip-mssql-recuperar-una-bbdd-sin-archivo-de-log/</guid>
		<description><![CDATA[Si por cualquier motivo no tienes el archivo de transacciones (.ldf) obtendrás un error de este tipo a la hora de intentar adjuntar una BD desde el Wizard de SQL. Suponiendo que el .mdf esté en buenas condiciones puedes adjuntar la BD y forzando la reconstrucción del archivo de transacciones. El siguiente ejemplo muestra como [...]]]></description>
			<content:encoded><![CDATA[<p>Si por cualquier motivo no tienes el archivo de transacciones (<strong>.ldf)</strong> obtendrás un error de este tipo a la hora de intentar adjuntar una BD desde el Wizard de SQL.</p>
<p><a href="http://www.sergiosainz.com/wp-content/uploads/2009/01/image2.png"><img style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" title="image" src="http://www.sergiosainz.com/wp-content/uploads/2009/01/image-thumb3.png" border="0" alt="image" width="364" height="124" /></a></p>
<p>Suponiendo que el <strong>.mdf</strong> esté en buenas condiciones puedes adjuntar la BD y forzando la reconstrucción del archivo de transacciones.</p>
<p>El siguiente ejemplo muestra como adjuntar la BD “sergiosainz” indicando el path a mí .mdf (sustituye esos valores por los que correspondan en tu caso):</p>
<blockquote><p>USE [master]<br />
GO<br />
CREATE DATABASE [sergiosainz] ON<br />
(FILENAME = N&#8217;C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\sergiosainz.mdf&#8217;)<br />
FOR ATTACH_REBUILD_LOG<br />
GO</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.sergiosainz.com/2009/02/02/tip-mssql-recuperar-una-bbdd-sin-archivo-de-log/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL SERVER: Reparar una bbdd corrupta II</title>
		<link>http://www.sergiosainz.com/2008/09/11/sql-server-reparar-una-bbdd-corrupta-ii/</link>
		<comments>http://www.sergiosainz.com/2008/09/11/sql-server-reparar-una-bbdd-corrupta-ii/#comments</comments>
		<pubDate>Thu, 11 Sep 2008 05:00:46 +0000</pubDate>
		<dc:creator>Sergio Sainz</dc:creator>
				<category><![CDATA[SQL SERVER]]></category>

		<guid isPermaLink="false">http://www.sergiosainz.com/?p=192</guid>
		<description><![CDATA[En el post anterior veíamos como reparar una bbdd. Si el estado es cualquiera de los otro dos (REPAIR MODE o EMERGENCY), entonces tendremos que recurrir a otro tipo de apaños. En mi caso he experimentado el problema tras tratar de recrear un nuevo transaction log para una bbdd, pero también puede servir en casos [...]]]></description>
			<content:encoded><![CDATA[<p>En el post anterior veíamos como reparar una bbdd. Si el estado es cualquiera de los otro dos (REPAIR MODE o EMERGENCY), entonces tendremos que recurrir a otro tipo de apaños. En mi caso he experimentado el problema tras tratar de recrear un nuevo transaction log para una bbdd, pero también puede servir en casos en el que el archivo de datos este dañado.
</p>
<p>Voy a indicar lo que hice para reproducir el problema. Separé una bbdd y borré su .LDF, luego al adjuntarla obtenía este error:
</p>
<p><span style="color:#c00000"><em>Error al adjuntar las bases de datos. Haga clic en el hipervínculo de la columna de mensajes para obtener más información.<br />
</em></span></p>
<p>Crearlo a mano no es muy buena idea según nos muestra el siguiente error:
</p>
<p><span style="color:#c00000"><em>The operating system returned error 38(Se ha alcanzado el final del archivo.) to SQL Server during a read at offset 0000000000000000 in file &#8216;C:\Archivos de programa\SWsoft\Plesk\Databases\MSDE\MSSQL\Data\sergiodb_log.ldf&#8217;. Additional messages in the SQL Server error log and system event log may provide more detail. This is a severe system-level error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online. (Microsoft SQL Server, Error: 823)<br />
</em></span></p>
<p>Dado que no era posible adjuntar la bbdd, el siguiente paso fue renombrar el archivo de datos sergiodb.mdf por sergiodb_bak.mdf y crear una nueva bbdd con el nombre sergiodb. Con esto obtenemos un nuevo mdf y un ldf limpio.
</p>
<p>El siguiente paso fue detener SQL Server y sobrescribir sergiodb.mdf por el bueno e iniciar de nuevo SQL. Con esto se produce el siguiente error al intentar por ejemplo ver las propiedades de la bbdd:
</p>
<p><span style="color:red"><em>Unable to open the physical file &#8220;C:\Archivos de programa\SWsoft\Plesk\Databases\MSDE\MSSQL\Data\sergiodb.mdf&#8221;. Operating system error 5: &#8220;5(Acceso denegado.)&#8221;. (Microsoft SQL Server, Error: 5120)<br />
</em></span></p>
<p>Tras dar permisos NTFS al archivo de datos, el error cambiaba a:
</p>
<p><span style="color:red"><em>Database &#8216;sergiodb&#8217; cannot be opened due to inaccessible files or insufficient memory or disk space.  See the SQL Server errorlog for details. (Microsoft SQL Server, Error: 945)<br />
</em></span></p>
<p>Con todo esto el estado de mi BD era RECOVERY_PENDING
</p>
<p><span style="font-family:Courier New; font-size:10pt"><span style="color:blue">SELECT</span> state_desc <span style="color:blue">FROM </span><span style="color:green">sys.databases </span><span style="color:blue">WHERE </span><span style="color:blue">name </span><span style="color:gray">=</span><span style="color:red">&#8216;sergiodb&#8217;</span><span style="color:gray">;</span></span></p>
<p>
 </p>
<p><strong>SOLUCION<br />
</strong></p>
<p><span style="font-family:Courier New; font-size:10pt"><span style="color:blue">ALTER </span><span style="color:blue">DATABASE</span> sergiodb <span style="color:blue">SET</span> EMERGENCY <span style="color:gray">;</span><span style="color:green">&#8211; lo primero que haremos es pasar la bbdd del modo &#8220;RECOVERY_PENDING&#8221; al modo &#8220;EMERGENCY&#8221; (es necesario tener privilegio de sysadmin)</span></span></p>
<p><span style="font-family:Courier New; font-size:10pt"><span style="color:blue">ALTER </span> <span style="color:blue">DATABASE</span> sergiodb <span style="color:blue">SET </span>SINGLE_USER <span style="color:gray">;</span><span style="color:green">&#8211; La ponemos en modo de usuario único.<br />
</span></span></p>
<p><span style="font-family:Courier New; font-size:10pt"><span style="color:blue">DBCC</span> CHECKDB <span style="color:gray">(</span>sergiodb<span style="color:gray">,</span> REPAIR_ALLOW_DATA_LOSS <span style="color:gray">)</span><span style="color:blue">WITH </span> NO_INFOMSGS <span style="color:gray">;</span><span style="color:green">&#8211; Chequeamos la bd con la opción REPAIR_ALLOW_DATA_LOSS<br />
</span></span></p>
<p><span style="font-family:Courier New; font-size:10pt"><span style="color:blue">ALTER </span><span style="color:blue">DATABASE</span> sergiodb <span style="color:blue">SET</span> MULTI_USER <span style="color:gray">;</span><span style="color:green">&#8211; Por ultimo la ponemos en modo multiusuario<br />
</span></span></p>
</p>
<p><span style="font-family:Courier New; font-size:10pt">Ahora debería estar en modo ONLINE y funcionando.<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sergiosainz.com/2008/09/11/sql-server-reparar-una-bbdd-corrupta-ii/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>SQL SERVER: Reparar bbdd corrupta I</title>
		<link>http://www.sergiosainz.com/2008/09/10/sql-server-reparar-bbdd-corrupta-i/</link>
		<comments>http://www.sergiosainz.com/2008/09/10/sql-server-reparar-bbdd-corrupta-i/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 05:00:51 +0000</pubDate>
		<dc:creator>Sergio Sainz</dc:creator>
				<category><![CDATA[SQL SERVER]]></category>

		<guid isPermaLink="false">http://www.sergiosainz.com/?p=181</guid>
		<description><![CDATA[Debido a múltiples circunstancias como cortes eléctricos inesperados, problemas de espacio en disco, fallos de hardware, que hayas borrado el archivo de log (.ldf), etc. Una bbdd puede corromperse, normalmente la mejor manera de solucionar esto es recurrir a la última copia de seguridad pero como puede ocurrir en estos casos no hay copia o [...]]]></description>
			<content:encoded><![CDATA[<p>Debido a múltiples circunstancias como cortes eléctricos inesperados, problemas de espacio en disco, fallos de hardware, <a href="http://www.sergiosainz.com/2008/09/09/sql-server-log-de-transacciones">que hayas borrado el archivo de log (.ldf)</a>, etc. Una bbdd puede corromperse, normalmente la mejor manera de solucionar esto es recurrir a la última copia de seguridad pero como puede ocurrir en estos casos no hay copia o la que tenemos disponible es ya algo vieja. En esos casos quizá aún podamos recuperar la información.
</p>
<p>Una bbdd puede tener estos estados (<a href="http://technet.microsoft.com/es-es/library/ms190442(SQL.90).aspx">LINK</a>):
</p>
<ul>
<li><strong>ONLINE</strong>: La base de datos está disponible para su acceso. El grupo de archivos principal está en línea, aunque la fase de deshacer de la recuperación puede no haberse completado.
</li>
<li><strong>OFFLINE</strong>: La base de datos no está disponible. Una base de datos pasa a estar sin conexión por la acción explícita del usuario y permanece sin conexión hasta que el usuario toma otra acción. Por ejemplo, la base de datos puede desconectarse para mover un archivo a un nuevo disco. La base de datos se vuelve a poner en línea una vez completado el traslado.
</li>
<li><strong>RESTORING</strong>: Uno o varios archivos del grupo de archivos principal se está restaurando, o uno o varios archivos secundarios se están restaurando sin conexión. La base de datos no está disponible.
</li>
<li><strong>RECOVERING</strong>: Se está recuperando la base de datos. El proceso de recuperación es un estado transitorio, la base de datos se pone automáticamente en línea si la recuperación tiene éxito. Si la recuperación no tiene éxito, la base de datos pasa a ser sospechosa. La base de datos no está disponible.
</li>
<li><strong>RECOVERY PENDING</strong>: SQL Server ha encontrado un error relacionado con un recurso durante la recuperación. La base de datos no está dañada pero pueden faltar archivos o bien limitaciones de recursos del sistema pueden estar impidiendo que se inicie. La base de datos no está disponible. Se necesita una acción adicional por parte del usuario para resolver el error y permitir que se complete el proceso de recuperación.
</li>
<li><strong>SUSPECT</strong>: Como mínimo un grupo de archivos principal es sospechoso y puede estar dañado. La base de datos no se puede recuperar durante el inicio de SQL Server. La base de datos no está disponible. Se requiere una acción adicional por parte del usuario para resolver el problema.
</li>
<li>
<div><strong>EMERGENCY</strong>: El usuario ha cambiado la base de datos y ha establecido el estado en EMERGENCY. La base de datos está en modo de usuario único y se puede reparar o restaurar. La base de datos está marcada como READ_ONLY, el registro está deshabilitado y el acceso está limitado a miembros de la función fija de servidor <strong>sysadmin</strong>. EMERGENCY se utiliza principalmente para solucionar problemas. Por ejemplo, una base de datos marcada como sospechosa se puede establecer en el estado EMERGENCY. Esto puede permitir al administrador del sistema acceso de sólo lectura a la base de datos. Sólo los miembros de la función fija de servidor <strong>sysadmin</strong> pueden establecer una base de datos en el estado EMERGENCY<span style="font-family:Times New Roman; font-size:12pt">.</span>
			</div>
<p>
 </p>
</li>
</ul>
<p>Cuando se corrompe la tendremos seguramente en <strong>Online, Recovery pending</strong> o <strong>Suspect</strong>.
</p>
<p>Puedes ver el estado de la BD utilizando esta consulta (sustituye sergiodb por la bbdd a consultar):
</p>
<p><code>SELECT state_desc FROM sys.databases WHERE name = 'sergiodb';</code>
	</p>
<p>Si la bbdd está en estado <strong>ONLINE</strong>, lo más fácil es intentar un checkdb con la opción REPAIR_ALLOW_DATA_LOSS.
</p>
<p><span style="font-family:Courier New; font-size:10pt"><span style="color:blue">DBCC</span> CHECKDB <span style="color:gray">(</span>MAGIC<span style="color:gray">,</span> REPAIR_ALLOW_DATA_LOSS<span style="color:gray">)</span><span style="color:blue">WITH</span> NO_INFOMSGS<br />
</span></p>
<p>Más info en <a href="http://technet.microsoft.com/es-es/library/ms188422.aspx">http://technet.microsoft.com/es-es/library/ms188422.aspx</a>
	</p>
<p>Mañana publicaré como reparar si la bbdd se encuentra en alguno de los otros 2 modos o no se puede adjuntar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sergiosainz.com/2008/09/10/sql-server-reparar-bbdd-corrupta-i/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQL SERVER: Log de Transacciones</title>
		<link>http://www.sergiosainz.com/2008/09/09/sql-server-log-de-transacciones/</link>
		<comments>http://www.sergiosainz.com/2008/09/09/sql-server-log-de-transacciones/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 05:00:38 +0000</pubDate>
		<dc:creator>Sergio Sainz</dc:creator>
				<category><![CDATA[SQL SERVER]]></category>

		<guid isPermaLink="false">http://www.sergiosainz.com/?p=173</guid>
		<description><![CDATA[El Transaction Log de SQL server es uno de los quebraderos de cabeza para muchos administradores noveles que no cuentan con un buen plan de mantenimiento o no conocen a fondo el funcionamiento de SQL como para reducirlo a mano. En este post trataré de explicar y dar algunas soluciones rápidas para evitar el aburrimiento. [...]]]></description>
			<content:encoded><![CDATA[<p>El Transaction Log de SQL server es uno de los quebraderos de cabeza para muchos administradores noveles que no cuentan con un buen plan de mantenimiento o no conocen a fondo el funcionamiento de SQL como para reducirlo a mano. En este post trataré de explicar y dar algunas soluciones rápidas para evitar el aburrimiento. A quien quiera información más detallada le recomiendo los <a href="http://msdn.microsoft.com/es-es/library/ms130214(SQL.90).aspx">Libros en Pantalla de SQL</a> o Googlear un poco que nunca está de más <img src='http://www.sergiosainz.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p><strong>¿Qué es el Transaction Log?<br />
</strong></p>
<p><em>Por cada bbdd (archivo .mdf) se crea un archivo de log (archivo .ldf) en el que se almacenan todos los cambios que se producen en la bbdd. En él se van guardando cambios que luego permitirán volver atrás (rollback) en una transacción o incluso hacer una recuperación a un estado anterior.<br />
</em></p>
<p><strong>¿Por qué puede ocupar mucho más que la propia bbdd?<br />
</strong></p>
<p><em>Cuando se ejecutan muchas consultas y/o afectan a un gran número de registros, produciendo cambios en la bbdd. Todos los cambios se van almacenando en el transaction log, si además no tenemos un plan de mantenimiento que reduzca este log de forma periódica el .ldf se irá llenando hasta ocupar una gran cantidad de espacio y terminará por llenar el disco.<br />
</em></p>
<p><strong>¿Cómo se reduce el log de transacciones?<br />
</strong></p>
<p><em>Existen varias maneras, la forma más recomendable es utilizando un plan de mantenimiento que realice una copia de seguridad del registro de transacciones. A continuación vamos a ver algunos ejemplos y posibilidades:<br />
</em></p>
<ul>
<li><strong>Backup log: </strong>Guardamos un backup y luego <strong></strong>reducimos el log de la bbdd &#8220;sergiodb&#8221; a 10 Mb<strong></strong></li>
</ul>
<blockquote><p><span style="font-size: 10pt; font-family: courier new;"><em><span style="color: blue;">USE</span> [sergiodb] <span style="color: green;">&#8211; Utilizamos la bbdd sergiodb</span></em></span><span style="font-size: 10pt; font-family: courier new;"><br />
<em><span style="color: blue;">CHECKPOINT</span> <span style="color: green;">&#8211; Para que todas las páginas de memoria se escriban en la bd</span></em></span><span style="font-size: 10pt; font-family: courier new;"><br />
</span><span style="font-size: 10pt; font-family: courier new;"><em><span style="color: #0000ff;">GO</span></em></span></p>
<p><span style="font-size: 10pt; font-family: courier new;"><em></em><span style="font-size: 10pt; font-family: courier new;"><em></em></span></span><span style="font-size: 10pt; font-family: courier new;"><span style="font-size: 10pt; font-family: courier new;"><em><span style="color: blue;">EXEC</span> </em></span></span><span><em><span style="color: maroon;">sp_addumpdevice </span><span style="color: red;">&#8216;disk&#8217; </span><span style="color: gray;">,</span><span style="color: red;">&#8216;CopiaMiBase_sergiodb&#8217; </span><span style="color: gray;">,</span><span style="color: red;">&#8216;c:\LogMiBase_sergiodb.bak&#8217; </span></em></span><span style="font-size: 10pt; font-family: courier new;"><span style="color: green;">&#8211; Creamos un punto donde guardaremos el log y procedemos a hacer el backup con truncado del log</span></span></p></blockquote>
<blockquote>
<h6><span style="font-size: 10pt; font-family: courier new;"><span style="color: blue;">BACKUP </span><span style="color: blue;">DATABASE</span> sergiodb <span style="color: blue;">TO</span> CopiaMiBase_sergiodb<br />
<span style="font-size: 10pt; font-family: courier new;"><span style="color: blue;">BACKUP</span><span style="color: fuchsia;"> LOG</span> pruebamm <span style="color: blue;">WITH</span> TRUNCATE_ONLY<br />
</span><span style="font-size: 10pt; font-family: courier new;"><span style="color: blue;">DBCC</span> SHRINKFILE <span style="color: gray;">(</span><span style="color: red;">&#8216;sergiodb_log&#8217;</span><span style="color: gray;">,</span> 10<span style="color: gray;">) </span><span style="color: green;">–- Dejamos el archivo de log con un tamaño de 10 Mb<br />
</span></span></span></h6>
</blockquote>
<ul>
<li><span style="font-size: 10pt; font-family: courier new;"><strong>Reducir sin hacer backup:</strong></span></li>
</ul>
<blockquote><p><span style="font-size: 10pt; font-family: courier new;"><span style="font-size: 10pt; font-family: courier new;"><em><span style="color: blue;">USE</span> [sergiodb] <span style="color: green;">&#8211; Utilizamos la bbdd sergiodb</span></em></span><span style="font-size: 10pt; font-family: courier new;"><br />
</span><span style="font-size: 10pt; font-family: courier new;"><em><span style="color: blue;">CHECKPOINT </span><span style="color: green;">&#8211; Para que todas las páginas de memoria se escriban en la bd</span></em></span><span style="font-size: 10pt; font-family: courier new;"><br />
</span><span style="font-size: 10pt; font-family: courier new;"><em><span style="color: #0000ff;">GO</span></em><br />
</span><span style="font-size: 10pt; font-family: courier new;"><em><span style="color: blue;">BACKUP</span><br />
<span style="color: fuchsia;">LOG</span> sergiodb<span style="color: blue;"> WITH</span> TRUNCATE_ONLY </em><span style="color: green;"><em>&#8211; Truncamos el registro<br />
</em></span></span><span style="font-size: 10pt; font-family: courier new;"><em><span style="color: blue;">DBCC</span> SHRINKFILE <span style="color: gray;">(</span>sergiodb _Log<span style="color: gray;">,</span> 10<span style="color: gray;">) </span><span style="color: green;">&#8211; Lo reducimos a 10 Mb</span><br />
</em></span> </span></p></blockquote>
<ul>
<li><span style="font-size: 10pt; font-family: courier new;"><strong>Eliminar el archivo de log para que se genere de nuevo: </strong>Esta solución es más arriesgada, aunque a veces es necesario tirar de ella por ejemplo cuando el log es tan grande que el servidor no tiene espacio o memoria como para gestionarlo.</span></li>
</ul>
<blockquote><p><span style="font-size: 10pt; font-family: courier new;"><span style="font-size: 10pt; font-family: courier new;"><em><span style="color: blue;">ALTER </span><span style="color: blue;">DATABASE</span> [sergiodb]<span style="color: blue;"> SET</span> SINGLE_USER<span style="color: gray;">;</span> <span style="color: green;">&#8211; Ponemos la bbdd en single user</span></em></span><span style="font-size: 10pt; font-family: courier new;"><br />
</span><span style="font-size: 10pt; font-family: courier new; color: blue;"><em></em></span><span style="font-size: 10pt; font-family: courier new;"><span style="color: #0000ff;">GO</span><br />
</span><span style="font-size: 10pt; font-family: courier new;"><em><span style="color: maroon;">sp_detach_db </span><span style="color: red;">&#8216;sergiodb&#8217;</span> </em><span style="color: green;"><em>&#8211; Separamos la bbdd</em><br />
</span></span></span></p>
<p><span style="color: #000000;">Ahora es necesario localizar el archivo de log, en mi caso C:\Archivos de programa\SWsoft\Plesk\Databases\MSDE\MSSQL\Data\sergiodb_log.ldf y eliminarlo. Luego ejecutamos esta nueva consulta para adjuntarla de nuevo.</span></p>
<blockquote><p><span style="font-size: 10pt; font-family: courier new;"><span style="color: blue;">USE</span> [master]</span><span style="font-size: 10pt; font-family: courier new;"><br />
</span><span style="font-size: 10pt; font-family: courier new;"><span style="color: blue;">CREATE&lt;/SPAN<span style="color: blue;">DATABASE</span> [sergiodb] <span style="color: blue;">ON</span></span><span style="font-size: 10pt; font-family: courier new;"><span style="color: blue;">FILENAME</span><span style="color: gray;">=</span>(<span style="color: red;">&#8216;C:\Archivos de programa\SWsoft\Plesk\Databases\MSDE\MSSQL\Data\sergiodb.mdf&#8217;</span><span style="color: gray;">),<br />
</span></span><span style="font-size: 10pt; font-family: courier new;"><span style="color: gray;">(</span><span style="color: blue;">FILENAME</span><span style="color: gray;">=</span><span style="color: red;">&#8216;C:\Archivos de programa\SWsoft\Plesk\Databases\MSDE\MSSQL\Data\sergiodb_log.LDF&#8217;</span><span style="color: gray;">)<br />
</span></span><span style="font-size: 10pt; font-family: courier new;"><span style="color: blue;">FOR</span> ATTACH</span><span style="font-size: 10pt; font-family: courier new;"><br />
</span><span style="font-size: 10pt; font-family: courier new;"><span style="color: blue;">ALTER </span><span style="color: blue;">DATABASE</span> sergiodb <span style="color: blue;">SET</span> MULTI_USER<span style="color: gray;">;</span> <span style="color: green;">&#8211; Ponemos la bbdd en multi user</span></span></span></p></blockquote>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.sergiosainz.com/2008/09/09/sql-server-log-de-transacciones/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>TIP SQL Server: Agregar o quitar una interfaz de red</title>
		<link>http://www.sergiosainz.com/2008/07/22/tip-sql-server-agregar-o-quitar-una-interfaz-de-red-2/</link>
		<comments>http://www.sergiosainz.com/2008/07/22/tip-sql-server-agregar-o-quitar-una-interfaz-de-red-2/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 17:51:32 +0000</pubDate>
		<dc:creator>Sergio Sainz</dc:creator>
				<category><![CDATA[SQL SERVER]]></category>

		<guid isPermaLink="false">http://www.sergiosainz.com/2008/07/22/tip-sql-server-agregar-o-quitar-una-interfaz-de-red-2/</guid>
		<description><![CDATA[Cuando se instala SQL Server, este se configura teniendo en cuenta las interfaces habilitada en ese momento. Pero si más tarde habilitamos una nueva interfaz o la deshabilitamos esta no aparece/desaparece de la configuración de red. La forma que he encontrado para hacer esto es editando el registro, toda la información se guarda en: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando se instala SQL Server, este se configura teniendo en cuenta las interfaces habilitada en ese momento. Pero si más tarde habilitamos una nueva interfaz o la deshabilitamos esta no aparece/desaparece de la configuración de red.
</p>
<p><img align="left" src="http://www.sergiosainz.com/wp-content/uploads/2008/07/072208-1751-tipsqlserve1.png" alt=""/><br />
La forma que he encontrado para hacer esto es editando el registro, toda la información se guarda en:
</p>
<p><span style="font-family:Consolas; font-size:8pt"><strong>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\SuperSocketNetLib\Tcp\]<br />
</strong></span></p>
<p>Por tanto una forma de quitar una IP es borrar su registro y para añadirla lo que yo hago es exportar una clave ya existente y editarla como deseo antes de ejecutar el .reg para que inserte los cambios.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sergiosainz.com/2008/07/22/tip-sql-server-agregar-o-quitar-una-interfaz-de-red-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Permitir a un usuario ver el Monitor de Actividad de SQL Server</title>
		<link>http://www.sergiosainz.com/2008/03/27/permitir-a-un-usuario-ver-el-monitor-de-actividad-de-sql-server/</link>
		<comments>http://www.sergiosainz.com/2008/03/27/permitir-a-un-usuario-ver-el-monitor-de-actividad-de-sql-server/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 11:00:13 +0000</pubDate>
		<dc:creator>Sergio Sainz</dc:creator>
				<category><![CDATA[SQL SERVER]]></category>

		<guid isPermaLink="false">http://www.sergiosainz.com/2008/03/27/permitir-a-un-usuario-ver-el-monitor-de-actividad-de-sql-server/</guid>
		<description><![CDATA[Muchos programadores dejan abiertas (en Sleeping) todas las consultas que abren contra una bbdd sin ser conscientes de la carga que provocan al servidor y sólo se preocupan cuando se excede el límite de conexiones y se deniega el servicio. En muchos casos como este, puede ser útil proporcionar al programador permisos para poder ver [...]]]></description>
			<content:encoded><![CDATA[<p>Muchos programadores dejan abiertas (en <em>Sleeping</em>) todas las consultas que abren contra una bbdd sin ser conscientes de la carga que provocan al servidor y sólo se preocupan cuando se excede el límite de conexiones y se deniega el servicio.
</p>
<p>En muchos casos como este, puede ser útil proporcionar al programador permisos para poder ver el <strong>Monitor de Actividad</strong> de SQL Server y así controlar cuantas querys quedan abiertas de forma innecesaria. Para dar permisos al usuario &#8220;sergiosainz&#8221;  basta con ejecutar la siguiente sentencia:
</p>
<p><span style="color:blue; font-family:Courier New">use master<br />
</span></p>
<p><span style="color:blue; font-family:Courier New">GRANT VIEW SERVER STATE TO sergiosainz<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sergiosainz.com/2008/03/27/permitir-a-un-usuario-ver-el-monitor-de-actividad-de-sql-server/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TIP MSSQL: Mostrar las 10 consultas que más veces se ejecutan</title>
		<link>http://www.sergiosainz.com/2007/10/06/tip-mssql-mostrar-las-10-consultas-que-mas-veces-se-ejecutan/</link>
		<comments>http://www.sergiosainz.com/2007/10/06/tip-mssql-mostrar-las-10-consultas-que-mas-veces-se-ejecutan/#comments</comments>
		<pubDate>Sat, 06 Oct 2007 10:05:48 +0000</pubDate>
		<dc:creator>Sergio Sainz</dc:creator>
				<category><![CDATA[SQL SERVER]]></category>

		<guid isPermaLink="false">http://www.sergiosainz.com/2007/10/06/tip-mssql-mostrar-las-10-consultas-que-mas-veces-se-ejecutan/</guid>
		<description><![CDATA[SELECT TOP 10 qs.execution_count, SUBSTRING(qt.text,qs.statement_start_offset/2, (case when qs.statement_end_offset = -1 then len(convert(nvarchar(max), qt.text)) * 2 else qs.statement_end_offset end -qs.statement_start_offset)/2) as query_text, qt.dbid, dbname=db_name(qt.dbid), qt.objectid FROM sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt ORDER BY qs.execution_count DESC]]></description>
			<content:encoded><![CDATA[<p><code>SELECT TOP 10<br />
        qs.execution_count,<br />
        SUBSTRING(qt.text,qs.statement_start_offset/2,<br />
			(case when qs.statement_end_offset = -1<br />
			then len(convert(nvarchar(max), qt.text)) * 2<br />
			else qs.statement_end_offset end -qs.statement_start_offset)/2)<br />
		as query_text,<br />
		qt.dbid, dbname=db_name(qt.dbid),<br />
		qt.objectid<br />
FROM sys.dm_exec_query_stats qs<br />
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt<br />
ORDER BY<br />
        qs.execution_count DESC</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sergiosainz.com/2007/10/06/tip-mssql-mostrar-las-10-consultas-que-mas-veces-se-ejecutan/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TIP MSSQL: Mostrar las 10 consultas que mas CPU consumen de media</title>
		<link>http://www.sergiosainz.com/2007/10/06/tip-sql-mostrar-las-consultas-que-mas-cpu-consumen-de-media/</link>
		<comments>http://www.sergiosainz.com/2007/10/06/tip-sql-mostrar-las-consultas-que-mas-cpu-consumen-de-media/#comments</comments>
		<pubDate>Sat, 06 Oct 2007 10:02:56 +0000</pubDate>
		<dc:creator>Sergio Sainz</dc:creator>
				<category><![CDATA[SQL SERVER]]></category>

		<guid isPermaLink="false">http://www.sergiosainz.com/2007/10/06/tip-sql-mostrar-las-consultas-que-mas-cpu-consumen-de-media/</guid>
		<description><![CDATA[SELECT TOP 10 qs.total_worker_time/qs.execution_count as [Avg CPU Time], SUBSTRING(qt.text,qs.statement_start_offset/2, (case when qs.statement_end_offset = -1 then len(convert(nvarchar(max), qt.text)) * 2 else qs.statement_end_offset end -qs.statement_start_offset)/2) as query_text, qt.dbid, dbname=db_name(qt.dbid), qt.objectid FROM sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt ORDER BY [Avg CPU Time] DESC]]></description>
			<content:encoded><![CDATA[<p><code>SELECT TOP 10<br />
        qs.total_worker_time/qs.execution_count as [Avg CPU Time],<br />
        SUBSTRING(qt.text,qs.statement_start_offset/2,<br />
			(case when qs.statement_end_offset = -1<br />
			then len(convert(nvarchar(max), qt.text)) * 2<br />
			else qs.statement_end_offset end -qs.statement_start_offset)/2)<br />
		as query_text,<br />
		qt.dbid, dbname=db_name(qt.dbid),<br />
		qt.objectid<br />
FROM sys.dm_exec_query_stats qs<br />
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt<br />
ORDER BY<br />
        [Avg CPU Time] DESC</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sergiosainz.com/2007/10/06/tip-sql-mostrar-las-consultas-que-mas-cpu-consumen-de-media/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modo exclusivo</title>
		<link>http://www.sergiosainz.com/2007/09/26/modo-exclusivo/</link>
		<comments>http://www.sergiosainz.com/2007/09/26/modo-exclusivo/#comments</comments>
		<pubDate>Wed, 26 Sep 2007 09:56:21 +0000</pubDate>
		<dc:creator>Sergio Sainz</dc:creator>
				<category><![CDATA[SQL SERVER]]></category>

		<guid isPermaLink="false">http://www.sergiosainz.com/2007/09/26/modo-exclusivo/</guid>
		<description><![CDATA[Ciertas operaciones requieren acceso exclusivo a la bbdd por lo que si hay conexiones abiertas contra ella obtenemos un error como este: Mens. 5030, Nivel 16, Estado 2, Línea 1 No se puede bloquear de forma exclusiva la base de datos para realizar la operación. Debemos ir a las propiedades de la BBDD > Opciones [...]]]></description>
			<content:encoded><![CDATA[<p>Ciertas operaciones requieren acceso exclusivo a la bbdd por lo que si hay conexiones abiertas contra ella obtenemos un error como este:</p>
<p><code>Mens. 5030, Nivel 16, Estado 2, Línea 1<br />
No se puede bloquear de forma exclusiva la base de datos para realizar la operación.</code></p>
<p>Debemos ir a las propiedades de la BBDD > Opciones > Estado > Restringir acceso y seleccionamos <strong>single</strong>. </p>
<p>También se puede ejecutar la consulta:</p>
<p><code>ALTER DATABASE [nombre_bd] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE<br />
GO</code></p>
<p>Ahora se pueden hacer los cambios necesarios.</p>
<p>Para volver al modo de multiples usuarios hay que matar la conexión y cambiar el modo, se puede hacer fácilmente con esta consulta:</p>
<p><code>Kill [spid]</p>
<p>ALTER DATABASE [nombre_bd] SET MULTI_USER</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sergiosainz.com/2007/09/26/modo-exclusivo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
