<?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>PortalSQL &#187; Relacional</title>
	<atom:link href="http://portalsql.com/index.php/category/relacional/feed/" rel="self" type="application/rss+xml" />
	<link>http://portalsql.com</link>
	<description>Compartiendo conocimiento SQL</description>
	<lastBuildDate>Sun, 18 Dec 2011 19:15:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>Reindexar una base de datos Express por linea de comandos</title>
		<link>http://portalsql.com/index.php/2011/12/reindexar-una-base-de-datos-express-por-linea-de-comandos/</link>
		<comments>http://portalsql.com/index.php/2011/12/reindexar-una-base-de-datos-express-por-linea-de-comandos/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 08:07:14 +0000</pubDate>
		<dc:creator>Miguel Egea</dc:creator>
				<category><![CDATA[Basicos Newsgroup]]></category>
		<category><![CDATA[Relacional]]></category>

		<guid isPermaLink="false">http://portalsql.com/?p=480</guid>
		<description><![CDATA[graba el contenido del código T-SQL en un fichero que se llame reindexa.SQL  El código está sacado de los libros en pantalla de la ayuda del producto. Una vez que tengas ese fichero (llamado en mi caso c:\reindexa.sql ejecuta desde la linea de comandos esta línea c:\&#62;sqlcmd -S localhost -E -d tubasededatos -i c:\reindex.sql con [...]]]></description>
			<content:encoded><![CDATA[<p>graba el contenido del código T-SQL en un fichero que se llame reindexa.SQL  El código está sacado de los libros en pantalla de la ayuda del producto.</p>
<p>Una vez que tengas ese fichero (llamado en mi caso c:\reindexa.sql ejecuta desde la linea de comandos esta línea</p>
<p>c:\&gt;sqlcmd -S localhost -E -d tubasededatos -i c:\reindex.sql</p>
<p>con esto se ejecutará el script que en principio debe reindexar toda tu base de datos. recuerda cambiar en la ejecutcion de arriba donde pone tubasededatos por el nombre de tu base de datos.</p>
<p>&nbsp;</p>
<div>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p480code2'); return false;">View Code</a> T-SQL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p4802"><td class="code" id="p480code2"><pre class="t-sql" style="font-family:monospace;">SET NOCOUNT ON;
DECLARE @objectid int;
DECLARE @indexid int;
DECLARE @partitioncount bigint;
DECLARE @schemaname nvarchar(130); 
DECLARE @objectname nvarchar(130); 
DECLARE @indexname nvarchar(130); 
DECLARE @partitionnum bigint;
DECLARE @partitions bigint;
DECLARE @frag float;
DECLARE @command nvarchar(4000); 
-- Conditionally select tables and indexes from the sys.dm_db_index_physical_stats function 
-- and convert object and index IDs to names.
SELECT
    object_id AS objectid,
    index_id AS indexid,
    partition_number AS partitionnum,
    avg_fragmentation_in_percent AS frag
INTO #work_to_do
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'LIMITED')
WHERE avg_fragmentation_in_percent &amp;gt; 10.0 AND index_id &amp;gt; 0;
&nbsp;
-- Declare the cursor for the list of partitions to be processed.
DECLARE partitions CURSOR FOR SELECT * FROM #work_to_do;
&nbsp;
-- Open the cursor.
OPEN partitions;
&nbsp;
-- Loop through the partitions.
WHILE (1=1)
    BEGIN;
        FETCH NEXT
           FROM partitions
           INTO @objectid, @indexid, @partitionnum, @frag;
        IF @@FETCH_STATUS &amp;lt; 0 BREAK;
        SELECT @objectname = QUOTENAME(o.name), @schemaname = QUOTENAME(s.name)
        FROM sys.objects AS o
        JOIN sys.schemas as s ON s.schema_id = o.schema_id
        WHERE o.object_id = @objectid;
        SELECT @indexname = QUOTENAME(name)
        FROM sys.indexes
        WHERE  object_id = @objectid AND index_id = @indexid;
        SELECT @partitioncount = count (*)
        FROM sys.partitions
        WHERE object_id = @objectid AND index_id = @indexid;
&nbsp;
-- 30 is an arbitrary decision point at which to switch between reorganizing and rebuilding.
        IF @frag &amp;lt; 30.0
            SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE';
        IF @frag &amp;gt;= 30.0
            SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD';
        IF @partitioncount &amp;gt; 1
            SET @command = @command + N' PARTITION=' + CAST(@partitionnum AS nvarchar(10));
        EXEC (@command);
        PRINT N'Executed: ' + @command;
    END;
&nbsp;
-- Close and deallocate the cursor.
CLOSE partitions;
DEALLOCATE partitions;
&nbsp;
-- Drop the temporary table.
DROP TABLE #work_to_do;
print &quot;reindexación completada&quot;
GO</pre></td></tr></table></div>

</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://portalsql.com/index.php/2011/12/reindexar-una-base-de-datos-express-por-linea-de-comandos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Luis Franco hablando de CROSS APPLY</title>
		<link>http://portalsql.com/index.php/2011/09/luis-franco-hablando-de-cross-apply/</link>
		<comments>http://portalsql.com/index.php/2011/09/luis-franco-hablando-de-cross-apply/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 16:18:17 +0000</pubDate>
		<dc:creator>Miguel Egea</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Relacional]]></category>

		<guid isPermaLink="false">http://portalsql.com/?p=392</guid>
		<description><![CDATA[Cross Apply y las funciones escalares, una comparativa con el uso de funciones y como cazar lo que están haciendo realmente. Adicionalmente a lo que dice Luis, las funciones escalares no solamente pueden degradar el rendimiento cuando esas funciones a su vez llaman a tablas (en ese caso la degradacion es espectacular), sino que también [...]]]></description>
			<content:encoded><![CDATA[<p>Cross Apply y las funciones escalares,  una comparativa con el uso de funciones y como cazar lo que están haciendo realmente. Adicionalmente a lo que dice Luis, las funciones escalares no solamente pueden degradar el rendimiento cuando esas funciones a su vez llaman a tablas (en ese caso la degradacion es espectacular), sino que también lo es cuando sin ese acceso se usan como herramientas matemáticas por ejemplo (una multiplicación, operaciones con fechas o cosas así )</p>
<p>El motivo es que se ejecutan para cada fila, sin posibilidad de optimización y acaban sobrecargando la cpu de la máquina, y dando un mal rendimiento. Así pues.. usad la forma que dice Luis.</p>
<p>Por cierto, si alguno me visteis dar una charla en el developer day de ¿2009? con <a href="http://blogs.solidq.com/fguerrero/Home.aspx">Fernando G. Guerrero</a> , <a href="http://geeks.ms/blogs/lfranco/archive/2011/09/26/funciones-escalares-en-tsql-joins-cross-apply-y-la-madre-que-pari-243-al-topo.aspx">esto de lo que habla Luis</a>, fué la demo que hice <img src='http://portalsql.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://portalsql.com/index.php/2011/09/luis-franco-hablando-de-cross-apply/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Denali. Objeto Sequence</title>
		<link>http://portalsql.com/index.php/2011/09/sql-denali-objeto-sequence/</link>
		<comments>http://portalsql.com/index.php/2011/09/sql-denali-objeto-sequence/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 11:59:37 +0000</pubDate>
		<dc:creator>Miguel Egea</dc:creator>
				<category><![CDATA[Relacional]]></category>

		<guid isPermaLink="false">http://portalsql.com/?p=390</guid>
		<description><![CDATA[En los grupos de noticias en castellano de SQL Server un amigo preguntaba sobre como hacer un autoincremental sobre un campo texto. lo cierto es que los campos texto no tienen autoincrementales, pero su objetivo era poder generar números muchísimo más grandes que los 18 mil millones de millones que tiene un bigint. La verdad [...]]]></description>
			<content:encoded><![CDATA[<p>En los grupos de noticias en castellano de SQL Server un amigo preguntaba sobre como hacer un autoincremental sobre un campo texto. lo cierto es que los campos texto no tienen autoincrementales, pero su objetivo era poder generar números muchísimo más grandes que los 18 mil millones de millones que tiene un bigint. La verdad es que todos le dijimos que si tienes en una tabla por estrecha que sea, más de 18 mil millones de millones de filas, el menor de tus problemas es el autoincremental,.. pero en cualquier caso si que me dió una idea para hablar sobre las secuencias.</p>
<p>Las secuencias son un objeto nuevo en SQL Server Denali, que van a ayudar a que podamos tener &#8220;más de un autonumérico&#8221; por cada una de las tablas. Este artículo será una versión corta de como se pueden solucionar este tipo de problemas. De momento, lo que se me ocurrió fué lo siguiente:</p>
<p>1.- Crear dos campos bigint, que sean la clave primaria de la tabla</p>
<p>2.- Crear un campo calculado de tipo texto que sea la concatenación de ceros y el valor del campo 1 en los 18 dígitos menos significativos y la misma operación para el campo 2</p>
<p>3.- Comprobar cuando el campo menos significativo supera el rango de los bigint, es decir, cuando vuelve a cero.</p>
<p>4.- En ese caso incrementar en uno el campo más significativo.</p>
<p>Creo que con esta técnica el campo calculado responde a la pregunta de nuestro amigo, aunque realmente no tenga más que una utilidad educativa y no práctica (en mi humilde opinión)</p>
<p>Como quiera que  un trozo de código vale más que mil palabras, aquí está la solución que propongo.</p>
<p>&nbsp;</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p390code4'); return false;">View Code</a> TSQL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3904"><td class="code" id="p390code4"><pre class="tsql" style="font-family:monospace;"><span style="color: #0000FF;">create</span> <span style="color: #0000FF;">sequence</span> SecuenciaA <span style="color: #0000FF;">as</span> <span style="color: #0000FF;">bigint</span> <span style="color: #0000FF;">start</span> <span style="color: #0000FF;">with</span> <span style="color: #000;">1</span> increment <span style="color: #0000FF;">by</span> <span style="color: #000;">1</span> <span style="color: #0000FF;">no</span> maxvalue <span style="color: #0000FF;">cycle</span>;
<span style="color: #0000FF;">create</span> <span style="color: #0000FF;">sequence</span> Secuenciab <span style="color: #0000FF;">as</span> <span style="color: #0000FF;">bigint</span> <span style="color: #0000FF;">start</span> <span style="color: #0000FF;">with</span> <span style="color: #000;">0</span> increment <span style="color: #0000FF;">by</span> <span style="color: #000;">1</span> <span style="color: #0000FF;">no</span> maxvalue;
go
<span style="color: #0000FF;">create</span> <span style="color: #0000FF;">table</span> t <span style="color: #808080;">&#40;</span>id1 <span style="color: #0000FF;">bigint</span> not null ,id2 <span style="color: #0000FF;">bigint</span> not null, datotest <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">10</span><span style="color: #808080;">&#41;</span>,
campotexto <span style="color: #0000FF;">as</span> <span style="color: #0000FF;">right</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'000000000000000000'</span><span style="color: #808080;">+</span> <span style="color: #0000FF;">cast</span><span style="color: #808080;">&#40;</span> id2 <span style="color: #0000FF;">as</span> <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">19</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>,<span style="color: #000;">19</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">+</span>
<span style="color: #0000FF;">right</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'000000000000000000'</span><span style="color: #808080;">+</span> <span style="color: #0000FF;">cast</span><span style="color: #808080;">&#40;</span> id1 <span style="color: #0000FF;">as</span> <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">19</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>,<span style="color: #000;">19</span><span style="color: #808080;">&#41;</span> , <span style="color: #0000FF;">constraint</span> pk_t <span style="color: #0000FF;">primary</span> <span style="color: #0000FF;">key</span> <span style="color: #808080;">&#40;</span>id1,id2<span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>
go
<span style="color: #0000FF;">create</span> <span style="color: #0000FF;">procedure</span> insertaent @datotest <span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">10</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">as</span>
<span style="color: #0000FF;">begin</span>
  <span style="color: #0000FF;">declare</span> @valor1 <span style="color: #0000FF;">bigint</span>
  <span style="color: #0000FF;">declare</span> @valor2 <span style="color: #0000FF;">bigint</span>
  <span style="color: #0000FF;">select</span> @valor1<span style="color: #808080;">=</span><span style="color: #0000FF;">NEXT</span> <span style="color: #0000FF;">VALUE</span> <span style="color: #0000FF;">FOR</span> SecuenciaA;
  <span style="color: #0000FF;">if</span> @valor1<span style="color: #808080;">=</span><span style="color: #000;">0</span> 
    <span style="color: #0000FF;">select</span> @valor2<span style="color: #808080;">=</span><span style="color: #0000FF;">NEXT</span> <span style="color: #0000FF;">VALUE</span> <span style="color: #0000FF;">FOR</span> secuenciaB;
  <span style="color: #0000FF;">else</span>
   <span style="color: #0000FF;">select</span> @valor2<span style="color: #808080;">=</span><span style="color: #0000FF;">cast</span><span style="color: #808080;">&#40;</span>current_value <span style="color: #0000FF;">as</span> <span style="color: #0000FF;">bigint</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">FROM</span> sys.<span style="color: #202020;">sequences</span> <span style="color: #0000FF;">where</span> name<span style="color: #808080;">=</span><span style="color: #FF0000;">'SecuenciaB'</span>;
  <span style="color: #0000FF;">insert</span> <span style="color: #0000FF;">into</span> dbo.<span style="color: #202020;">t</span> <span style="color: #0000FF;">values</span> <span style="color: #808080;">&#40;</span>@valor1,@valor2,@datotest<span style="color: #808080;">&#41;</span>;
<span style="color: #0000FF;">end</span>;
go
<span style="color: #0000FF;">exec</span> insertaent <span style="color: #FF0000;">'hola'</span>
go
<span style="color: #0000FF;">SELECT</span> <span style="color: #808080;">*</span> <span style="color: #0000FF;">FROM</span> DBO.<span style="color: #202020;">t</span>
go
<span style="color: #0000FF;">drop</span> <span style="color: #0000FF;">procedure</span> insertaent;
<span style="color: #0000FF;">drop</span> <span style="color: #0000FF;">table</span> t;
<span style="color: #0000FF;">drop</span> <span style="color: #0000FF;">sequence</span> secuenciaA;
<span style="color: #0000FF;">drop</span> <span style="color: #0000FF;">sequence</span> secuenciaB;</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://portalsql.com/index.php/2011/09/sql-denali-objeto-sequence/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQL DMO y sus utilidades</title>
		<link>http://portalsql.com/index.php/2011/09/sql-demo-y-sus-utilidades/</link>
		<comments>http://portalsql.com/index.php/2011/09/sql-demo-y-sus-utilidades/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 08:00:50 +0000</pubDate>
		<dc:creator>Miguel Egea</dc:creator>
				<category><![CDATA[Relacional]]></category>

		<guid isPermaLink="false">http://portalsql.com/?p=384</guid>
		<description><![CDATA[Es muy común que para desarrolladores de base de datos, incluso los más instruidos, no necesiten nunca o casi nunca usar el sistema de automatización que proveen todos los productos de microsoft. Generalmente todas las herramientas (SQL Server Management Studio es un ejemplo), no son más que interfaces que usan esa funcionalidad, que por otra [...]]]></description>
			<content:encoded><![CDATA[<p>Es muy común que para desarrolladores de base de datos, incluso los más instruidos, no necesiten nunca o casi nunca usar el sistema de automatización que proveen todos los productos de microsoft. Generalmente todas las herramientas (SQL Server Management Studio es un ejemplo), no son más que interfaces que usan esa funcionalidad, que por otra parte está disponible para cualquier desarrollador con un poquito de inquietud y una necesidad de emular esos comportamientos.</p>
<p>Lo que os dejo hoy son dos links, uno más general sobre <a title="Generar Script SQLDmo  SQL server" href="http://www.sqlteam.com/article/using-sql-dmo-and-windows-script-to-customize-script-generation" target="_blank">como usar estas funcionalidades desde scripts de windows</a>, y un segundo enlace que va orientado a aquellos desarrolladores que quieren usar estas funcionalidades desde dentro de TSQL, no es que sea una practica a hacer en todos los casos, pero es posible que nos saque de un apuro alguna vez y eso siempre se agradece. Así que si quereis podeis <a title="SQL Dmo TSQL script" href="http://www.sqlteam.com/article/introduction-to-sql-dmo" target="_blank">seguir este enlace</a> . En el vereis como conseguir la generación de un script de una tabla (por ejemplo) desde TSQL.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://portalsql.com/index.php/2011/09/sql-demo-y-sus-utilidades/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Heaps (montones) y tablas con índices Clustered</title>
		<link>http://portalsql.com/index.php/2011/09/heaps-montones-y-tablas-con-indices-clustered/</link>
		<comments>http://portalsql.com/index.php/2011/09/heaps-montones-y-tablas-con-indices-clustered/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 10:12:37 +0000</pubDate>
		<dc:creator>Miguel Egea</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Relacional]]></category>

		<guid isPermaLink="false">http://portalsql.com/?p=381</guid>
		<description><![CDATA[A veces hay que leer no solo lo que la gente usa como buenas prácticas, sino también lo que se usa como malas prácticas. En este caso Luis nos cuenta algun caso que seguramente se habrá encontrado por ahí, y su analisis sobre la fragmentación de los heaps y como alguna gente intenta evitarla, sin [...]]]></description>
			<content:encoded><![CDATA[<p>A veces hay que leer no solo lo que la gente usa como buenas prácticas, sino también lo que se usa como malas prácticas. En este caso Luis nos cuenta algun caso que seguramente se habrá encontrado por ahí, y su analisis sobre la fragmentación de los heaps y como alguna gente intenta evitarla, sin demasiado éxito y consumiendo recursos.</p>
<p>Totalmente recomendable como lectura</p>
<p><a title="Defragmentacion heap" href="http://blogs.solidq.com/ElRinconDelDBA/Post.aspx?ID=196&amp;title=Mitos+y+Leyendas%E2%80%A6+Defragmentaci%C3%B3n+en+Heaps" target="_blank">Artículo de BI Corner, Mitos y leyendas, defragmentacion de heaps</a></p>
]]></content:encoded>
			<wfw:commentRss>http://portalsql.com/index.php/2011/09/heaps-montones-y-tablas-con-indices-clustered/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Administrador multiserver con SQL Server Management Studio</title>
		<link>http://portalsql.com/index.php/2011/08/administrador-multiserver-con-sql-server-management-studio/</link>
		<comments>http://portalsql.com/index.php/2011/08/administrador-multiserver-con-sql-server-management-studio/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 08:00:15 +0000</pubDate>
		<dc:creator>Miguel Egea</dc:creator>
				<category><![CDATA[Relacional]]></category>

		<guid isPermaLink="false">http://portalsql.com/?p=365</guid>
		<description><![CDATA[Hace uno dias, en los foros de noticias uno de los compañeros preguntaba por herramientas de administración multiservidor. Me explico, una herramienta que cuando ejecutes un script, no solo lo ejecute en un server, sino que se encargue de que tu comando (tanto si es de manipulación de datos -DML es decir insert,update&#8230;- , como [...]]]></description>
			<content:encoded><![CDATA[<div><a href="http://portalsql.com/wp-content/uploads/2011/08/multiserver-02.jpg"></a><a href="http://portalsql.com/wp-content/uploads/2011/08/multiserver-03.jpg"></a><a href="http://portalsql.com/wp-content/uploads/2011/08/multiserver-04.jpg"></a><a href="http://portalsql.com/wp-content/uploads/2011/08/multiserver-04.jpg"></a><a href="http://portalsql.com/wp-content/uploads/2011/08/multiserver-05.jpg"></a>Hace uno dias, en los foros de noticias uno de los compañeros preguntaba por herramientas de administración multiservidor. Me explico, una herramienta que cuando ejecutes un script, no solo lo ejecute en un server, sino que se encargue de que tu comando (tanto si es de manipulación de datos -DML es decir insert,update&#8230;- , como si es de definición de datos -DDL, es decir create table, etc- se ejecute en un conjunto de servidores.</div>
<div>Me sorprendió ver como muy poca gente conocía que esta funcionalidad la tiene SQL Server Management Studio, es cierto que no es probablemente una funcionalidad para un gran porcentaje de usuarios, pasará desapercibido, no tendrá utilidad. Sin embargo veo algunos escenarios de mucha utilidad:</div>
<ul>
<li> Para aquellos que administren siquiera dos servidores pueden beneficiarse de comprobaciones de fragmentación, de índices, de seguimiento de bloqueos, y de muchas tareas administrativas.</li>
<li>Para aquellos que mantengan bases de datos idénticas en distintos servers, y que quieran asegurarse que realmente son idénticas.</li>
</ul>
<div>Seguro que hay otro montón de escenarios útiles, pero creo que con estos dos, el lector interesado sabrá de que estoy hablando, y si no esta en estos, el que lo necesite, seguramente sea capaz de inferir que esta funcionalidad puede ser útil, también para él.</div>
<div>Voy a hacer la demostración y la captura de pantallas con el SQL Server Management Studio de la CTP3 de Denali, pero esto ya funciona, desde versiones anteriores (desde SQL 2008).</div>
<div>Lo primero que haremos será, tras abrir nuestro SQL Server Management Studio, ir al menú de Ver, y ahí elegir servidores registrados, notad como hay una carpeta llamada Central Management Servers, como puede observarse en la siguiente figura. Disculpad aquellos que no utiliceis las versiones en inglés, entiendo que para un hispano hablante, quizá debiera usar esas versiones, pero por mi trabajo, me veo muy a menudo obligado a usarlo en inglés y prefiero no hacerme un lio con las traducciones. Mis disculpas al que le moleste.</div>
<div><img class="aligncenter size-full wp-image-366" title="multiserver 01" src="http://portalsql.com/wp-content/uploads/2011/08/multiserver-01.jpg" alt="" width="296" height="186" /></div>
<div>Pulsando con el botón derecho sobre Central Management Servers nos aparecerá un  menú contextual con leyenda &#8220;Register Central Management Server&#8221;, este será el servidor que nos valga como nodo principal, por decirlo de una forma poco ortodoxa, pero bastante comprensible.  En el asistente nos permite especificar tanto una descripción como una forma de conectarse, en mi caso, lo haré con mi usuario Administrador y con seguridad integrada. Cabe destacar que para no almacenar contraseñas que además lo serían de usuarios con muchos privilegios, solamente está permitida la seguridad integrada, según se detalla en este artículo <a href="http://msdn.microsoft.com/en-us/library/bb934126(v=SQL.100).aspx">http://msdn.microsoft.com/en-us/library/bb934126(v=SQL.100).aspx</a> Aquí simplemente hemos de conectarnos con los suficientes privilegios. (Son privilegios obviamente de administración de los servidores es decir, unos privilegios bastante elevados)</div>
<div><a href="http://portalsql.com/wp-content/uploads/2011/08/multiserver-02.jpg"><img title="multiserver 02" src="http://portalsql.com/wp-content/uploads/2011/08/multiserver-02.jpg" alt="" width="611" height="665" /></a></div>
<div>Tras comprobar que nos conectamos de forma adecuada, pulsaremos save, a partir de este momento hemos de añadir los servidores que serán administrados desde éste.  No es necesario añadirlo dentro de la subcarpeta Central Management Servers, es más podemos crear grupos de servidores que se comporten como tales. Por ejemplo, podemos crear un grupo Desarrollo, de forma que script aplicados a server de desarrollo se apliquen a tantos servidores de desarrollo como tengamos registrados.</div>
<div>Veamos un ejemplo de como hacerlo. Sobre &#8220;Local Server Groups&#8221; pulsamos botón derecho y &#8220;New SQL Server Group&#8221;, esto hace que creemos una carpeta común bajo la que ubicar servers. dentro de esa carpeta, botón derecho de nuevo y registraremos nuestros servers, como puede verse en la siguiente figura.</div>
<div><a href="http://portalsql.com/wp-content/uploads/2011/08/multiserver-03.jpg"><img title="multiserver 03" src="http://portalsql.com/wp-content/uploads/2011/08/multiserver-03.jpg" alt="" width="272" height="174" /></a></div>
<div>En el caso del ejemplo tenemos registrados dos servidores, en realidad son las instancias SQL 2008 R2 y SQL 2005 que tengo instaladas en mi equipo.</div>
<div>Si sobre el grupo Desarrollo, presionamos botón derecho new query, nos aparecerá una ventanita, en la que, podremos comprobar como la barra de estado, no es amarilla ni gris, sino de un color rosado, También nos dice cuantos servidores hay contectados. Cualquier query ejecutado ahí, se ejecutará en ambos servers. Ojo, con el tipo de queries que hacemos, puesto que pueden fallar. Suelo decir que cuando alguien ejecuta un SELECT * , Dios mata un gatito, es una broma que me gusta hacer y que en este caso cobra especial relevancia, en mi caso por ejemplo, si hago esto saldrá este mensaje.</div>
<div><span style="font-family: Consolas; font-size: xx-small;"><span style="font-family: Consolas; font-size: xx-small;"> </span></span></div>
<div>.\SQK2K8R2(WIN-P3PS5OB2GSJ\Administrator): (15 row(s) affected)</div>
<div>.\SQL2K5(WIN-P3PS5OB2GSJ\Administrator): An error occurred while executing batch. Error message is: The result set could not be merged because the result schema did not match the schema from the first responding server.</div>
<div>.\SQL2K5(WIN-P3PS5OB2GSJ\Administrator): (8 row(s) affected)</div>
<div>Esto es básicamente porque lo que hace SQL Server Management Studio es ejecutar el mismo comando en ambos servers y unir el resultado como si de un UNION ALL se tratara. En mi caso, entre la versión SQL 2005 y la versión SQL 2008 R2, la tabla sys.sysdatabases tiene estructuras distintas, así pues.. no puede unir el resultado. Cambiaré ese * y así podré ver como si que funciona. La sentencia que ejecutaré y el resultado podeis verlo en la siguiente captura de pantalla. Notad como aparece una columna que yo no he solicitado ([Server Name]) que indica a que server pertenecen esos objetos.</div>
<div><a href="http://portalsql.com/wp-content/uploads/2011/08/multiserver-04.jpg"></a></div>
<div><a href="http://portalsql.com/wp-content/uploads/2011/08/multiserver-04.jpg"><img title="multiserver 04" src="http://portalsql.com/wp-content/uploads/2011/08/multiserver-04-1024x717.jpg" alt="" width="1024" height="717" /></a></div>
<div>Si os fijais ha aparecido esa columna que mencionabamos además de aparecer la barra de estado en color rosa.</div>
<div>Esta opción es una opción del propio SQL Server Management Studio,  tanto que mezcle los resultados ( lo que hablabamos antes y que tiene problemas con servidores con distintas versiones) tanto que añada el nombre del servidor o incluso el nombre de login. Si vamos al menú Tools (herramientas) a la opcion &#8220;Options&#8221; (Opciones), bajo Query Results, SQL Server veremos un apartado Multiserver Results  en el que controlar ese comportamiento. Obviamente podremos cambiarlo hasta que se adecúe lo mejor posible a nuestro propio entorno. Como puede verse en la siguiente figura.</div>
<div><a href="http://portalsql.com/wp-content/uploads/2011/08/multiserver-05.jpg"><img title="multiserver 05" src="http://portalsql.com/wp-content/uploads/2011/08/multiserver-05.jpg" alt="" width="637" height="374" /></a></div>
<div><strong>Conclusion: </strong>SQL Server Management Studio, es una herramienta realmente potente, con un gran número de opciones y funcionalidades, algunas que permanecen ocultas para muchos, merece la pena bucear un poquito en su funcionamiento para realmente sacarle el máximo provecho.  En este caso, para la administración multi servidor.</div>
]]></content:encoded>
			<wfw:commentRss>http://portalsql.com/index.php/2011/08/administrador-multiserver-con-sql-server-management-studio/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Instalando la CTP3 de SQL Server 2011, CodeName Denali</title>
		<link>http://portalsql.com/index.php/2011/08/instalando-la-ctp3-de-sql-server-2011-codename-denali/</link>
		<comments>http://portalsql.com/index.php/2011/08/instalando-la-ctp3-de-sql-server-2011-codename-denali/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 10:59:34 +0000</pubDate>
		<dc:creator>Miguel Egea</dc:creator>
				<category><![CDATA[Analisys Services]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Relacional]]></category>

		<guid isPermaLink="false">http://portalsql.com/?p=333</guid>
		<description><![CDATA[Aunque ya lo publicamos hace algun tiempo, la versión CTP3, del nuevo SQL Server está aquí. Desde el pasado Noviembre en que tuvimos acceso algunos pocoas a la CTP1, en PASS hasta ahora, muchas cosas han aparecido y están implementadas, ayer mismo linkabamos un avance de las novedades TSQL, muchas novedades en funciones de Ranking, [...]]]></description>
			<content:encoded><![CDATA[<p>Aunque ya lo publicamos hace algun tiempo, la versión CTP3, del nuevo SQL Server está aquí. Desde el pasado Noviembre en que tuvimos acceso algunos pocoas a la CTP1, en PASS hasta ahora, muchas cosas han aparecido y están implementadas, ayer mismo linkabamos un avance de las novedades TSQL, muchas novedades en funciones de Ranking, algunas no incluidas en el artículo de Enrique.</p>
<p>Recordad que esto es una guía, y aunque omita pasos es muy muy sencilla. </p>
<p><em>Nota, yo lo he instalado en inglés, porque me siento más cómodo con las versiones en inglés.. creo que hay versión en castellano, </em></p>
<p>Lo bueno de las versiones CTP publicas es que todos podemos jugar con ellas, todos podemos cacharrear. Para que os hagais una idea de los pasos que hay que seguir voy a ir poniendo el paso a paso que yo he seguido. No será un tutorial al uso, omitiré seguramente cosas que me parezcan obvias. Espero no obstante, no omitir ninguna que el lector considere importante. </p>
<p>Comenzando con esto, lo primero que hemos de hacer es descargar la versión. Nos pedirá que nos registremos y podremos descargarlo. Podéis seguir <a href="http://technet.microsoft.com/en-us/evalcenter/hh225126">este link</a> para comenzar esa operación.</p>
<p>Una vez completado el proceso.. acabará teniendo una pantalla muy parecida a esta.<br />
<a href="http://portalsql.com/wp-content/uploads/2011/08/instalando-denaly.jpg"><img src="http://portalsql.com/wp-content/uploads/2011/08/instalando-denaly-1024x696.jpg" alt="" title="instalando denaly" width="1024" height="696" class="aligncenter size-large wp-image-334" /></a></p>
<p>Hecha la descarga vamos a seguir con la instalación del producto, recordad elegir la versión adecuada, 32 o 64 bits a vuestro sistema operativo, y revisar los requisitos del sistema para asegurar que no perderéis el tiempo, es decir que finalmente conseguireis instalar. </p>
<p>Tras descargar, hemos de ejecutar el programita  de setup, que realmente nos descomprimirá los fcheros en una carpeta, como podeis ver en las dos siguientes imágenes<br />
<a href="http://portalsql.com/wp-content/uploads/2011/08/01-preparando-instalacion.jpg"><img src="http://portalsql.com/wp-content/uploads/2011/08/01-preparando-instalacion.jpg" alt="" title="01 preparando instalacion" width="454" height="117" class="aligncenter size-full wp-image-337" /></a><br />
y en la siguiente que podeis ver la carpeta donde está el fichero Setup.exe.. que habremos de ejecutar.<br />
<a href="http://portalsql.com/wp-content/uploads/2011/08/02-descomprimidos-ficheros.jpg"><img src="http://portalsql.com/wp-content/uploads/2011/08/02-descomprimidos-ficheros.jpg" alt="" title="02 descomprimidos ficheros" width="668" height="313" class="aligncenter size-full wp-image-338" /></a></p>
<p>Al ejecutarlo, nos aparecerá la pantalla tipica desde SQL Server 2005, en donde está la parte de Planning, es decir donde decidimos y comprobamos los requisitos.<br />
<a href="http://portalsql.com/wp-content/uploads/2011/08/03-pantalla-bienvenida.jpg"><img src="http://portalsql.com/wp-content/uploads/2011/08/03-pantalla-bienvenida.jpg" alt="" title="03 pantalla bienvenida" width="793" height="599" class="aligncenter size-full wp-image-343" /></a><br />
y tras eso, pulsaremos en Installation y haremos el setup que necesitemos ( en nuestro caso nueva instancia StandAlone)<br />
><a href="http://portalsql.com/wp-content/uploads/2011/08/04-instalacion.jpg"><img src="http://portalsql.com/wp-content/uploads/2011/08/04-instalacion.jpg" alt="" title="04 instalacion" width="772" height="348" class="aligncenter size-full wp-image-348" /></a></p>
<p>Una vez elegida la instalación que vamos a realizar, el propio instalador comprueba que la instalación será exitosa, que no hay pre-requisitos pendientes  para que funcione el instalador y nos ofrece este resumen de las cosas que ha comprobado. Este resumen, por defecto está escondido, pero se puede ver fácilmente.<br />
<a href="http://portalsql.com/wp-content/uploads/2011/08/05-comprobacion.jpg"><img src="http://portalsql.com/wp-content/uploads/2011/08/05-comprobacion.jpg" alt="" title="05 comprobacion" width="809" height="600" class="aligncenter size-full wp-image-353" /></a></p>
<p>Al pulsar siguiente aparecerá la pantalla de licencia, obviamente hemos de leer y aceptar los terminos de licencia, que es de evaluación de 180 dias,  y continuar con la instalación.</p>
<p><a href="http://portalsql.com/wp-content/uploads/2011/08/06-licencia.jpg"><img src="http://portalsql.com/wp-content/uploads/2011/08/06-licencia.jpg" alt="" title="06 licencia" width="797" height="559" class="aligncenter size-full wp-image-354" /></a></p>
<p>El producto en ese momento se conecta a Internet para ver si hay actualizaciones de la CTP que aplicar, en mi caso detectó 2, y en sistemas no en producción, como es el caso, lo mejor es instalarlo todo. En producción es otra historia, hay que probar, al menos mínimamente que el impacto no es negativo.</p>
<p><a href="http://portalsql.com/wp-content/uploads/2011/08/07-actualiaciones.jpg"><img src="http://portalsql.com/wp-content/uploads/2011/08/07-actualiaciones.jpg" alt="" title="07 actualiaciones" width="817" height="603" class="aligncenter size-full wp-image-355" /></a></p>
<p>Además de las comprobaciones del instalador y prerequisitos, el asistente también comprobará que no van a existir problemas conocidos con la instalación de los ficheros de soporte, así pues se comprueban estos 8 puntos. y tienen que pasar todos (aunque sea con warning) para que la instalación pueda completarse.<br />
<a href="http://portalsql.com/wp-content/uploads/2011/08/08-setup-rules.jpg"><img src="http://portalsql.com/wp-content/uploads/2011/08/08-setup-rules.jpg" alt="" title="08 setup rules" width="802" height="512" class="aligncenter size-full wp-image-356" /></a></p>
<p>Tras las comprobaciones hay que ver que cosas queremos hacer. Instalar los servicios o quizá instalar PowerPivot para Sharepoint  o quizá añadir funciones. En nuestro caso vamos a hacer una nueva instalación.</p>
<p><a href="http://portalsql.com/wp-content/uploads/2011/08/09-role.jpg"><img src="http://portalsql.com/wp-content/uploads/2011/08/09-role.jpg" alt="" title="09 role" width="817" height="596" class="aligncenter size-full wp-image-357" /></a></p>
<p>Ahora el Asistente nos permite seleccionar las herramientas que instalaremos, yo he instalado todo lo que tengo intención de probar, pero nada relacionado con Sharepoint puesto que no voy a probar, de momento esa parte.</p>
<p><a href="http://portalsql.com/wp-content/uploads/2011/08/10-funcionalidades.jpg"><img src="http://portalsql.com/wp-content/uploads/2011/08/10-funcionalidades.jpg" alt="" title="10 funcionalidades" width="657" height="448" class="aligncenter size-full wp-image-358" /></a></p>
<p>Tras esto tenemos que elegir el nombre de instancia, en mi caso, además vereis que aparecen otras instancias ya instaladas, la edicion enterprise de SQLServer 2008 R2 y la edición developer de SQL SErver 2005. con las versiones y parches que tengo instalados.  En mi caso puedo elegir default instance, porque no tengo ninguna instancia por defecto, aún así, he preferido poner como nombre de instancia SQLDenali, me gustan las instancias nombradas <img src='http://portalsql.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><a href="http://portalsql.com/wp-content/uploads/2011/08/11-INSTANCIA.jpg"><img src="http://portalsql.com/wp-content/uploads/2011/08/11-INSTANCIA.jpg" alt="" title="11 INSTANCIA" width="860" height="472" class="aligncenter size-full wp-image-359" /></a></p>
<p>Permisos y cuentas: Esta parte, es muy importante en instalaciones no de test, como la mia. Yo suelo poner cuentas de dominio sin ningún privilegio, de esa forma el propio asistente da los permisos mínimos que necesita. Esto hace que luego esa cuenta no tenga acceso a muchos directorios, pero eso, que puede ser percibido como un problema, es sin embargo una norma de seguridad básica.<br />
Otra pestaña, de la que no ponemos mensaje, pero que es necesario saber que hace es la de Collation, esto indicará el modo por defecto del servidor, es decir el modo por defecto de las bases de datos, y el modo por defecto de cada columna de texto. Es importante porque cada Collation lleva implicito una ordenación, si distingue o no entre mayúsculas y minúsculas&#8230; en fin que no es algo de poca importancia.</p>
<p><a href="http://portalsql.com/wp-content/uploads/2011/08/12-services-acount-y-colation.jpg"><img src="http://portalsql.com/wp-content/uploads/2011/08/12-services-acount-y-colation.jpg" alt="" title="12 services acount y colation" width="659" height="256" class="aligncenter size-full wp-image-360" /></a></p>
<p>Tras dejar cerrado el apartado seguridad y colation, llegamos al apartado de Analysis Services Configuration (esto supongo que solo sale si has instalado Analysis Servcies). Esta nueva versión lleva incorporado un nuevo modo, además del tradicional, Ambos no pueden funcionar a la vez en la misma instancia. Digamos que TAbular Mode es una especie de PowerPivot de Servidor, pero no tiene, aún al menos, toda la potencia que esperamos de analisis services, tiempo tendremos de ir hablando sobre él.<br />
De momento en esta instalación instalaremos el modo tradicional.</p>
<p><a href="http://portalsql.com/wp-content/uploads/2011/08/13-modo-multidimensional.jpg"><img src="http://portalsql.com/wp-content/uploads/2011/08/13-modo-multidimensional.jpg" alt="" title="13 modo multidimensional" width="886" height="314" class="aligncenter size-full wp-image-361" /></a></p>
<p>DEspues de pulsar siguiente.. el instalador ya tiene los datos que necesita&#8230;. ahora paciencia. A esperar a que termine la instalación y a disfrutar del siguiente cartel, cuando salga.</p>
<p><a href="http://portalsql.com/wp-content/uploads/2011/08/14-final.jpg"><img src="http://portalsql.com/wp-content/uploads/2011/08/14-final.jpg" alt="" title="14 final" width="892" height="994" class="aligncenter size-full wp-image-362" /></a></p>
<p>Espero que os resulte de utilidad.</p>
]]></content:encoded>
			<wfw:commentRss>http://portalsql.com/index.php/2011/08/instalando-la-ctp3-de-sql-server-2011-codename-denali/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Novedades en SQL Server 2011 por Enrique Catalá</title>
		<link>http://portalsql.com/index.php/2011/08/novedades-en-sql-server-2011-por-enrique-catala/</link>
		<comments>http://portalsql.com/index.php/2011/08/novedades-en-sql-server-2011-por-enrique-catala/#comments</comments>
		<pubDate>Sun, 21 Aug 2011 12:09:53 +0000</pubDate>
		<dc:creator>Miguel Egea</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Relacional]]></category>

		<guid isPermaLink="false">http://portalsql.com/?p=331</guid>
		<description><![CDATA[Repasando los contenidos de mis compañeros del mundo relacional he encontrado este interesantísimo post, especialmente recomendado para aquellos que os gusta ir un pasito por delante, en el artículo Enrique cuenta las novedades T-SQL que trae la nueva versión de SQL Server Si quereis más información. seguid este Enlace]]></description>
			<content:encoded><![CDATA[<p>Repasando los contenidos de mis compañeros del mundo relacional he encontrado este interesantísimo post, especialmente recomendado para aquellos que os gusta ir un pasito por delante, en el artículo Enrique cuenta las novedades T-SQL que trae la nueva versión de SQL Server</p>
<p>Si quereis más información. <a href="http://blogs.solidq.com/ElRinconDelDBA/Post.aspx?ID=192&#038;title=SQL+Server+2011+Novedades+T-SQL">seguid este Enlace</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://portalsql.com/index.php/2011/08/novedades-en-sql-server-2011-por-enrique-catala/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Backups del log, cuando sean necesarios</title>
		<link>http://portalsql.com/index.php/2011/08/backups-del-log-cuando-sean-necesarios/</link>
		<comments>http://portalsql.com/index.php/2011/08/backups-del-log-cuando-sean-necesarios/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 10:17:20 +0000</pubDate>
		<dc:creator>Miguel Egea</dc:creator>
				<category><![CDATA[Relacional]]></category>

		<guid isPermaLink="false">http://portalsql.com/?p=323</guid>
		<description><![CDATA[Este es un mini-artículo, tip, que escribí en 2003 y que he creido interesante recuperar. Es una de esas cosas que periodicamente alguien te vuelve a preguntar, y aunque pueda parecer extraño, parece uno de esos temas que no pasan de moda. Introducción El crecimiento de log de transacciones es sin duda alguna la pregunta [...]]]></description>
			<content:encoded><![CDATA[<p>Este es un mini-artículo, tip, que escribí en 2003 y que he creido interesante recuperar. Es una de esas cosas que periodicamente alguien te vuelve a preguntar, y aunque pueda parecer extraño, parece uno de esos temas que no pasan de moda.</p>
<p>Introducción </p>
<p>    El crecimiento de log de transacciones es sin duda alguna la pregunta número uno en los grupos y foros de noticias, por eso entiendo, que cualquier cosa que aclare un poquito como funciona será beneficioso. Mi amigo Ivan del rincón del programador , me sugería hace un ratillo que estaría bien algo así como un backup del log &#8216;bajo demanda&#8217;. </p>
<p>    La verdad es que no hay un evento o trigger que nos vaya a servir para hacerlo bajo demanda, pero siempre podemos crear un job que llame a este procedimiento almacenado y que por tanto nos mantenga nuestro fichero de log bajo control. Al ser el log una estructura circular, si le hacemos backup cuando esté muy lleno, no va a crecer, sino a rehusar el espacio que marcamos como libre por el mero hecho de hacer la copia. De hecho veréis que si ejecutáis dos veces el procedimiento almacenado, realmente la segunda no hará ninguna copia. Claro, estará prácticamente vacío. </p>
<p>    Ya sabéis que prefiero el código a las explicaciones así que os pongo el procedimiento almacenado en cuestión. La verdad es que está bastante comentado.</p>
<p>    Suerte y gracias por seguirnos.</p>
<p>El código</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p323code6'); return false;">View Code</a> TSQL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3236"><td class="code" id="p323code6"><pre class="tsql" style="font-family:monospace;"><span style="color: #0000FF;">if</span> not <span style="color: #FF00FF;">object_id</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'backupwhennecesary'</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">is</span> null
    <span style="color: #0000FF;">drop</span> <span style="color: #0000FF;">proc</span> backupWhenNecesary
go
<span style="color: #0000FF;">create</span> <span style="color: #0000FF;">proc</span> backupWhenNecesary <span style="color: #808080;">&#40;</span>@<span style="color: #0000FF;">file</span> sysname<span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">as</span>
    <span style="color: #0000FF;">begin</span>
        <span style="color: #008080;">-- primero que no se produzcan salidas no deseadas--</span>
        <span style="color: #0000FF;">set</span> <span style="color: #0000FF;">nocount</span> <span style="color: #0000FF;">on</span>
        <span style="color: #008080;">-- Necesitamos la tabla y la ruta en la que hacer el backup --</span>
        <span style="color: #008080;">-- podría ser a cinta directamente, pero en mi portatil no --</span>
        <span style="color: #008080;">-- tengo systema de cintas, así que,no puedo probarlo --</span>
        <span style="color: #0000FF;">declare</span> @tabla sysname
        <span style="color: #0000FF;">Declare</span> @fileabs sysname
        <span style="color: #008080;">-- Creamos una tabla temporal para guardar el resultado de --</span>
        <span style="color: #008080;">-- DBCC --</span>
        <span style="color: #0000FF;">create</span> <span style="color: #0000FF;">table</span> #temp <span style="color: #808080;">&#40;</span>nombre sysname,tam <span style="color: #0000FF;">float</span>,pct <span style="color: #0000FF;">float</span>,status <span style="color: #0000FF;">int</span><span style="color: #808080;">&#41;</span>
           <span style="color: #0000FF;">insert</span> <span style="color: #0000FF;">into</span> #temp <span style="color: #0000FF;">exec</span><span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'DBCC sqlperf(logspace)'</span><span style="color: #808080;">&#41;</span>
            <span style="color: #008080;">-- Usaremos un cursor, ¡sí, yo también uso cursores!, poco --</span>
          <span style="color: #008080;">-- pero alguna vez :-D --</span>
        <span style="color: #0000FF;">declare</span> cr <span style="color: #0000FF;">Cursor</span> <span style="color: #0000FF;">for</span> 
            <span style="color: #0000FF;">select</span> nombre <span style="color: #0000FF;">from</span> #temp <span style="color: #0000FF;">where</span> pct<span style="color: #808080;">&gt;</span><span style="color: #000;">75</span> 
                                        and <span style="color: #FF00FF;">DATABASEPROPERTYEX</span><span style="color: #808080;">&#40;</span>nombre, N<span style="color: #FF0000;">'RECOVERY'</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&lt;&gt;</span><span style="color: #FF0000;">'SIMPLE'</span> 
        <span style="color: #008080;">-- 75 porciento de uso, si queréis más o menos,...</span>
        <span style="color: #008080;">-- el modelo de recuperación si es simple no permite</span>
        <span style="color: #008080;">-- hacer backup de log, y nosotros no queremos que nuestro</span>
        <span style="color: #008080;">-- procedimiento almacenado falle :-D</span>
        <span style="color: #0000FF;">open</span> cr
        <span style="color: #0000FF;">fetch</span> <span style="color: #0000FF;">next</span> <span style="color: #0000FF;">from</span> cr <span style="color: #0000FF;">into</span> @tabla
        <span style="color: #0000FF;">while</span> <span style="color: #FF00FF;">@@fetch_status</span><span style="color: #808080;">=</span><span style="color: #000;">0</span>
            <span style="color: #0000FF;">begin</span>
                <span style="color: #008080;">-- construyo de forma dinámica el nombre del fichero en</span>
                <span style="color: #008080;">-- donde guardaremos la copia de seguridad</span>
&nbsp;
&nbsp;
&nbsp;
<span style="color: #008080;">-- modificamos este trozo de código el día 13 de agosto de 2003 </span>
&nbsp;
<span style="color: #008080;">-- El código nos lo propone el maestro Fernando Guerrero y con esta modificación guardamos ficheros</span>
&nbsp;
<span style="color: #008080;">-- de log independientes, en lugar de todo en un solo fichero. </span>
             <span style="color: #0000FF;">set</span> @fileabs<span style="color: #808080;">=</span>@<span style="color: #0000FF;">file</span>
                        <span style="color: #808080;">+</span> <span style="color: #FF0000;">'_'</span>
                        <span style="color: #808080;">+</span> @tabla 
                        <span style="color: #808080;">+</span> <span style="color: #FF0000;">'_'</span>
                        <span style="color: #808080;">+</span> <span style="color: #0000FF;">select</span> 
                        <span style="color: #FF00FF;">replace</span><span style="color: #808080;">&#40;</span>
                        <span style="color: #FF00FF;">replace</span><span style="color: #808080;">&#40;</span>
                        <span style="color: #FF00FF;">replace</span><span style="color: #808080;">&#40;</span>
                        <span style="color: #FF00FF;">replace</span><span style="color: #808080;">&#40;</span>
                        <span style="color: #0000FF;">convert</span><span style="color: #808080;">&#40;</span><span style="color: #0000FF;">varchar</span><span style="color: #808080;">&#40;</span><span style="color: #000;">25</span><span style="color: #808080;">&#41;</span>, <span style="color: #FF00FF;">getdate</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#41;</span>, <span style="color: #000;">121</span><span style="color: #808080;">&#41;</span>
                        , <span style="color: #FF0000;">'-'</span>, <span style="color: #FF0000;">''</span><span style="color: #808080;">&#41;</span>
                        , <span style="color: #FF0000;">' '</span>, <span style="color: #FF0000;">'_'</span><span style="color: #808080;">&#41;</span>
                        , <span style="color: #FF0000;">':'</span>, <span style="color: #FF0000;">''</span><span style="color: #808080;">&#41;</span>
                        , <span style="color: #FF0000;">'.'</span>, <span style="color: #FF0000;">''</span><span style="color: #808080;">&#41;</span>
                <span style="color: #808080;">+</span><span style="color: #FF0000;">'.trn'</span>
                    <span style="color: #008080;">-- fin modificación</span>
&nbsp;
                <span style="color: #008080;">-- ejecutamos la copia</span>
                <span style="color: #0000FF;">exec</span> <span style="color: #AF0000;">sp_executesql</span> N<span style="color: #FF0000;">'backup log @p1 to disk= @p2 '</span>,N<span style="color: #FF0000;">'@p1 sysname, @p2 sysname'</span>,@tabla,@fileabs
                    <span style="color: #008080;">-- a la siguiente bd.</span>
                <span style="color: #0000FF;">fetch</span> <span style="color: #0000FF;">next</span> <span style="color: #0000FF;">from</span> cr <span style="color: #0000FF;">into</span> @tabla
            <span style="color: #0000FF;">end</span>
        <span style="color: #008080;">-- cerramos</span>
        <span style="color: #0000FF;">close</span> cr
        <span style="color: #008080;">-- liberamos</span>
        <span style="color: #0000FF;">deallocate</span> cr
        <span style="color: #008080;">-- y borramos nuestras tablas...</span>
        <span style="color: #0000FF;">drop</span> <span style="color: #0000FF;">table</span> #temp 
<span style="color: #0000FF;">end</span>
go</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://portalsql.com/index.php/2011/08/backups-del-log-cuando-sean-necesarios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tip: Roles y permisos en SQL SErver</title>
		<link>http://portalsql.com/index.php/2011/08/tip-roles-y-permisos-en-sql-server/</link>
		<comments>http://portalsql.com/index.php/2011/08/tip-roles-y-permisos-en-sql-server/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 15:38:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Relacional]]></category>

		<guid isPermaLink="false">http://portalsql.com/?p=315</guid>
		<description><![CDATA[Hoy, un compañero de los grupos de noticias de SQL Server preguntaba sobre como gestionar los permisos de roles y usuarios en el grupo de noticias sobre SQL server en castellano. Me gustó la pregunta así que me permito copiaros mi respuesta (aunque aún no se si es la buena) este es el post Y [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy, un compañero de los grupos de noticias de SQL Server preguntaba sobre como gestionar los permisos de roles y usuarios en el grupo de noticias sobre SQL server en castellano. Me gustó la pregunta así que me permito copiaros mi respuesta (aunque aún no se si es la buena) <a href="http://social.msdn.microsoft.com/Forums/es-ES/sqlserveres/thread/94e04d42-1d2f-4190-9fc6-b4f2273dd1be">este es el post</a></p>
<p>Y esta mis respuesta</p>
<p>Los usuarios para tener acceso han existir en las bases de datos, o bien, darle permisos a public, yo te sugiero que hagas algo como lo que hace el siguiente script. Obviamente, estamos dando muchos permisos.. así que quizá, si la seguridad es un factor importante podrías pensarte bien si es la situación adecuada. (ojo con el script que al final borro las bases de datos.. a ver si vamos a tener un disgusto <img src='http://portalsql.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> )</p>
<p>create database tesoreria;<br />
go<br />
create database contabilidad;<br />
go<br />
create login a with password=&#8217;Contra1Se@ia&#8217;;<br />
create login b with password=&#8217;Otr0P@sss&#8217;;<br />
go<br />
use tesoreria;<br />
go<br />
create user a for login a;<br />
create user b for login b;<br />
create role leeryejecutar;<br />
exec sp_addrolemember &#8216;leeryejecutar&#8217;,'a&#8217;;<br />
exec sp_addrolemember &#8216;leeryejecutar&#8217;,'b&#8217;;<br />
go<br />
declare @sql nvarchar(max)<br />
set @sql=&#8221;;<br />
select @sql=@sql+&#8217;GRANT DELETE, INSERT, SELECT, UPDATE ON &#8216; +QUOTENAME(table_schema)+&#8217;.'+ quotename(TABLE_NAME) +&#8217; TO leeryejecutar;&#8217; from INFORMATION_SCHEMA.TABLES ;/* tablas y vistas */<br />
exec sp_executesql @sql,N&#8221;<br />
set @sql=&#8221;;<br />
select @sql=@sql+&#8217;GRANT EXEC ON &#8216; + QUOTENAME(ROUTINE_SCHEMA)+&#8217;.'+QUOTENAME(ROUTINE_NAME) +&#8217; TO leeryejecutar;&#8217; from INFORMATION_SCHEMA.ROUTINES ;/* tablas y vistas */<br />
exec sp_executesql @sql,N&#8221;<br />
go<br />
use contabilidad;<br />
create table a(id int);<br />
go<br />
create procedure PROC_a @id int as begin select * from a end ;<br />
go<br />
create user a for login a;<br />
create user b for login b;<br />
create role leeryejecutar;<br />
exec sp_addrolemember &#8216;leeryejecutar&#8217;,'a&#8217;;<br />
exec sp_addrolemember &#8216;leeryejecutar&#8217;,'b&#8217;;<br />
go<br />
declare @sql nvarchar(max)<br />
set @sql=&#8221;;<br />
select @sql=@sql+&#8217;GRANT DELETE, INSERT, SELECT, UPDATE ON &#8216; +QUOTENAME(table_schema)+&#8217;.'+ quotename(TABLE_NAME) +&#8217; TO leeryejecutar;&#8217; from INFORMATION_SCHEMA.TABLES ;/* tablas y vistas */<br />
exec sp_executesql @sql,N&#8221;<br />
set @sql=&#8221;;<br />
select @sql=@sql+&#8217;GRANT EXEC ON &#8216; + QUOTENAME(ROUTINE_SCHEMA)+&#8217;.'+QUOTENAME(ROUTINE_NAME) +&#8217; TO leeryejecutar;&#8217; from INFORMATION_SCHEMA.ROUTINES ;/* tablas y vistas */<br />
exec sp_executesql @sql,N&#8221;<br />
go</p>
<p>use master;</p>
<p>drop database contabilidad;<br />
drop database tesoreria;<br />
drop login a;<br />
drop login b;</p>
]]></content:encoded>
			<wfw:commentRss>http://portalsql.com/index.php/2011/08/tip-roles-y-permisos-en-sql-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

