SQL Server

Cómo configurar SQL para que utilice SANs

Hillaryt Cotter ha creado este webcast http://searchsqlserver.bitpipe.com/detail/RES/1213128440_243.html?src=wc_sqlsrv_fgru_06_16_08&li=122419&asrc=EM_FGWC_3845466&uid=5650610 en el cual explica la forma que se debe configurar SQL Server cuando se trabaja con SANs

 

Slds

Eduardo Castro - http://comunidadwindows.org

 

Technorati Tags:
Posted: Aug 14 2008, 04:22 AM by ecastro | with no comments
Filed under:
Ver el historial de las ejecuciones de los Policy Management Framework

SQL 2008 incluye una nueva vista en MSDB que permite ver el historial de ejecución de la verificación de políticas definidas por el Policy Management Framework

 

select *  from syspolicy_policy_execution_history_details

 

Trae un detalle como el siguiente

image

 

Saludos,

Eduardo Castro -  Comunidad Windows - http://mswindowscr.org

 

Technorati Tags:
Posted: Aug 12 2008, 04:07 AM by ecastro | with no comments
Filed under:
Maraton de SQL Server 2008
 

clip_image002

 

 

 

 

Hola como parte de una iniciativa creada por Benjamin Figueroa se creó el Maraton de SQL Server donde todo el contenido fue creado por MVPs de SQL de Latinoamerica. Podrán encontrar el anuncio oficial en el blog de Benjamin.

Les dejo algunos de los videos:

Monitoreando el desempeño mediante Performance Data Collector

image

image
Gestión del Servidor mediante facetas
image
Diseño de cubos con Analysis Services

image
Introducción al Declarative Management Framework
image
Instalando SQL Server 2008 en Windows Server 2008

image
Manejo de recursos mediante Resource Governor
image
Nuevos tipos de datos en SQL Server 2008

image
Compresión de datos en SQL Server 2008
image
Monitoreando el desempeño mediante Performance Data Collector

image
Administración mediante Políticas 1
image
Administración mediante Políticas 2

image
Administración mediante Políticas 3

 

Saludos

Eduardo Castro - Comunidad Windows - http://mswindowscr.org

Posted: Aug 12 2008, 02:42 AM by ecastro | with no comments
Filed under:
Table valued parameters

Si se tienen que insertar más de una fila dentro de una tabla, usualmente se ejecuta el insert o procedimiento almacenado tantas veces como filas tenga, con los table valued parameters se pueden enviar múltiples filas de datos dentro un mismo TSQL sin necesidad de crear tablas temporales o haciendo múltiples llamadas.

 

Los Table Valued-Parameters son nuevos en SQL 2008

 

Primero tienes que crear el tipo que se va insertar

 

CREATE TYPE tipo_linea (consecutivo INT, _id INT, producto INT, cantidad INT);

 

Después se crea un procedimiento almacenado que recibe como parámetro ese tipo

 

CREATE PROC InsertarIventario (@_id INT, @datos_por_insertar tipo_linea)
AS

INSERT INTO tablainventario VALUES (@_id ... ) ;
INSERT INTO detalleinventario
  SELECT * FROM @datos_por_insertar;

 

Slds

Eduardo Castro Comunidad Windows http://mswindowscr.org

 

Technorati Tags:
Posted: Aug 11 2008, 11:56 PM by ecastro | with no comments
Filed under:
Procedimiento para encontrar índices duplicados en SQL Server

Greg Liwood escribió un procedimiento para detectar los índices duplicados en SQL Server, lo cual ayuda a mejorar el desempeño.

 

exec sp_MSForEachTable 'usp_duplicateindexes''?'''

Here's the proc script:

USE master

GO

create procedure [dbo].[usp_duplicateindexes]

@tablename varchar(255)

as

set nocount on

print @tablename

--dump sp_helpindex into temp table

if object_id('tempdb..#helpindex') > 0 drop table #helpindex

create table #helpindex (

index_name varchar (900) not null primary key

, index_description varchar (1000) null

, index_keys varchar (1000) null)

insert #helpindex exec sp_helpindex @tablename

--add [inccols] to temp table & cursor over output, adding included col defs

alter table #helpindex add inccols varchar(1000) null

declare cr cursor for

select si.name, sc.name

from sysobjects so

join sysindexes si on so.id = si.id

join sys.index_columns ic on si.id = ic.object_id and si.indid = ic.index_id

join sys.columns sc on ic.object_id = sc.object_id and ic.column_id = sc.column_id

where so.xtype = 'U'

and so.name = @tablename

and ic.is_included_column = 1

order by si.name, ic.index_column_id

declare @siname varchar(1000), @scname varchar(1000)

open cr

fetch next from cr into @siname, @scname

while @@fetch_status = 0

begin

update #helpindex set inccols = isnull(inccols , '') + @scname + ', ' where index_name = @siname

fetch next from cr into @siname, @scname

end

update #helpindex set inccols = left(inccols, datalength(inccols) - 2) where right(inccols, 2) = ', '

close cr

deallocate cr

--dump duplicates into second temp table & pump results if there are any

if object_id('tempdb..#helpindex2') > 0 drop table #helpindex2

create table #helpindex2 (

index_name varchar (900) not null primary key

, index_description varchar (1000) null

, index_keys varchar (1000) null

, inccols varchar(1000) null

)

insert into #helpindex2

select hi.index_name, hi.index_description, hi.index_keys, hi.inccols

from #helpindex hi

join #helpindex h2 on hi.index_keys=h2.index_keys

and hi.index_description=h2.index_description

and hi.index_name<>h2.index_name

if @@rowcount > 0

select @tablename as "tablename", * from #helpindex2 order by index_name, index_keys, inccols

--cleanup temp objects

if object_id('tempdb..#helpindex2') > 0 drop table #helpindex2

if object_id('tempdb..#helpindex') > 0 drop table #helpindex

 

Slds

Eduardo Castro - Comunidad Windows http://mswindowscr.org

Permitiendo la administración de los jobs a usuarios que no son System Administrators en SQL Server Agent 2005 o superior

Antes de que llegara el Microsoft SQL Server 2005 al mercado, si usted deseaba que alguien tuviera acceso a ver, modificar, crear y ejecutar los SQL Server Agent Jobs, necesitaba darle permisos de Systems Administrator al login deseado de SQL Server, con el inconveniente que de también le iba a permitir hacer lo que deseara en esa instancia.

A partir del SQL Server 2005, se incluyeron los siguientes 3 roles:

SQLAgentUserRole: Los usuarios pueden crear jobs y manejar solo los jobs que ellos han creado.
SQLAgentReaderRole: Van a tener los privilegios del rol SQLAgentUserRole junto con la habilidad de enumerar y ver el historial de todos los jobs.
SQLAgentOperatorRole: Van a tener los mismos privilegios del rol SQLAgentReaderRole junto con la habilidad de ejecutar jobs locales de los cuales ellos no son dueños.

El procedimiento para asignarle permisos a un login en alguno de esos roles es el siguiente:

1. Agregue el usuario deseado a la base de datos "msdb":

USE [msdb]

GO

CREATE USER [MyUser] FOR LOGIN [MyUser]

GO

2. Asigne el rol deseado al usuario:

USE [msdb]

GO

EXEC sp_addrolemember 'SQLAgentUserRole', 'MyUser'

GO

 

Aporte de Hector Bejarano - http://citicr.org

Compresión de backups en SQL Server 2008

Una de las grandes mejoras que recibió el Microsoft SQL Server 2008 es la capacidad de poder comprimir backups de manera nativa. Lo mejor de todo es que se puede lograr de una manera muy sencilla, solo necesita especificar COMPRESSION en la cláusula WITH del comando BACKUP. Por ejemplo:

BACKUP DATABASE Adventureworks 
TO DISK = 'C:\Advc.bak' 
WITH INIT, COMPRESSION

Para que tenga una idea del beneficio de esta nueva funcionalidad, si usted hace un backup de la base de datos ejemplo de SQL Server 2005 y SQL Server 2008 llamada "AdventureWorks", notará que un backup normal demanda 129 MB (hecho en 7.5 segundos) de espacio contra 35 MB (hecho en 3.8 segundos) cuando utiliza la compresión.

Por otra parte, cuando usted quiere restaurar no de estos backups, no necesita especificar nada adicional al comando de restore (La restauración del backup normal tomó 10.4 segundos contra 6.3 del backup comprimido).

 

Aporte de Hector Bejarano - http://citicr.org

Curso gratis sobre SQL Server 2008

Microsoft tiene disponible de forma gratuita un curso sobre las nuevas características de SQL Server 2008, puede inscribirse en la siguiente dirección 6187 e-Clinic: What's New in Microsoft SQL Server 2008 

Slds,

 

Eduardo Castro

Comunidad Windows Costa Rica - http://mswindowscr.org

Comunidad TI bien social - http://citicr.org

Technorati Tags:
Posted: Aug 01 2008, 05:10 PM by ecastro | with no comments
Filed under:
SQL Server Data Services (SSDS)

Los SQL Server Data Services son servicios de almacenamiento bajo demanda y consulta, está basado en SQL Server y Windows Server technologies, proveen alta disponiblidad, seguridad y estándares basados en web, con facilidades de programación, pueden bajar el beta esta dirección.

 

http://www.microsoft.com/sql/dataservices/default.mspx

 

Saludos,

 

Eduardo Castro

Comunidad Windows Costa Rica - http://mswindowscr.rog

Comunidad Social de TI - http://citicr.org

Posted: Jul 31 2008, 05:28 AM by ecastro | with no comments
Filed under:
Enumerando el número de fila devuelto por una sentencia SQL en SQL Server 2005 o superior

Muchas veces, nos encontramos con que necesitamos el número de fila en el cual se devolvieron los registros, por ejemplo, si hiciera una consulta que me devuelve 10 filas, puede que yo necesite una columna que me indique el número de fila, es decir, que me enumere del 1 al 10 las filas devueltas.

Pues bien, SQL 2005 implementa una nueva función que me devuelve el número de fila a partir de cierto criterio que yo especifique. La sintaxis es esta:

ROW_NUMBER () OVER (ORDER BY <order by column name>)

o

ROW_NUMBER () OVER (PARTITION BY <partition by column name>)

Por ejemplo, si necesitamos devolver la lista de empleados enumerados por orden de primer apellido, nuestra sentencia podría verse así:

SELECT ROW_NUMBER() OVER (ORDER BY Primer_Apellido) AS ROW, EmpID FROM Empleados

 

Aporte de Hector Bejarano

Posted: Jul 31 2008, 05:05 AM by ecastro | with no comments
Filed under:
Resource Governor

El SQL Server 2008 incluye una nueva característica llamada el gobernador de recursos, el cual ofrece varias maneras de manejar sus cargas de trabajo en SQL 2008.

Básicamente, usted puede definir o limitar los recursos que pueden utilizar sus instancias de SQL Server mediante reglas, de esta manera, usted podrá hacer cosas como:

- Especificar una cantidad máxima de solicitudes para grupos específicos
- Cantidad máxima de tiempo (segundos) que puede correr una solicitud para grupos específicos
- Asignar % de memoria a grupos específicos
- Mínimo y máximo de % de CPU y % de memoria para grupos específicos
- Grado de paralelismo (cantidad de operaciones simultáneas que pueden ser ejecutadas) para grupos específicos

Por ejemplo, digamos que tengo un servidor con SQL Server 2008 recién instalado, y quiero separar claramente grupos de trabajo según su función, es decir, yo quiero establecer claramente grupos para los siguientes tipos de solicitudes:

- Las que son hechas por mi aplicación (quiero darles un mínimo de 50% de procesador y se caracterizarán por provenir de una aplicación llamada "MiAplicación" o desde el Management Studio)
- Las que son hechas desde mi servidor de reportes (quiero darles un máximo de 50% de procesador y se caracterizarán por ser enviadas desde mi servidor de Report Server)
- Las que son hechas por los administradores (quiero darles un máximo de 10% de procesador y se caracterizarán por ser enviadas utilizando el usuario "sa")

La sintaxis para crear los grupos (sin especificar prioridades en el procesador de momento) sería la siguiente:

BEGIN TRAN

CREATE WORKLOAD GROUP groupAdhoc

CREATE WORKLOAD GROUP groupReports

CREATE WORKLOAD GROUP groupAdmin

GO

CREATE FUNCTION rgclassifier_v1() RETURNS SYSNAME

WITH SCHEMABINDING

AS

BEGIN

DECLARE @grp_name AS SYSNAME

IF (SUSER_NAME() = 'sa')

SET @grp_name = 'groupAdmin'

IF (APP_NAME() LIKE '%MANAGEMENT STUDIO%')

OR (APP_NAME() LIKE '%MiAplicacion%')

SET @grp_name = 'groupAdhoc'

IF (APP_NAME() LIKE '%REPORT SERVER%')

SET @grp_name = 'groupReports'

RETURN @grp_name

END

GO

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.rgclassifier_v1)

COMMIT TRAN

GO

ALTER RESOURCE GOVERNOR RECONFIGURE

GO

En este punto, solo queda especificar las reglas de procesador para cada uno de los grupos. Para simplificar el ejemplo, solo crearemos la regla para las solicitudes de aplicación y queda a discreción del lector inferir las otras dos reglas:

BEGIN TRAN

ALTER RESOURCE POOL poolAdhoc

WITH (MIN_CPU_PERCENT = 50);

ALTER WORKLOAD GROUP groupAdhoc

USING poolAdhoc;

COMMIT TRAN

GO

ALTER RESOURCE GOVERNOR RECONFIGURE

GO


Aporte realizado por Hector Bejarano

Posted: Jul 31 2008, 04:56 AM by ecastro | with no comments
Filed under:
Transferir logines de SQL Server de un servidor a otro

Idera ha liberado un software gratuito que permite generar un T-Script para mover los logines y permisos de un servidor a otro. Puede mover solo una cuenta, una base de datos o toda la seguridad de todas las bases de datos. Pueden bajarlo en la siguiente dirección: http://www.idera.com/products/sqlpermissions/default.aspx?s=TL_WUG

 

Slds,

Eduardo Castro

Comunidad Windows Costa Rica - http://mswindowscr.org

 

Technorati Tags:
Posted: Jul 15 2008, 06:36 PM by ecastro | with no comments
Filed under:
MSDTC New transaction cannot enlist in the specified transaction coordinator

 

Cuando se recibe este error

New transaction cannot enlist in the specified transaction coordinator

Se debe a que el MSDTC no está configurado correctamente para corregirlo tienen que seguir los siguientes pasos:

- En el MSDTC hay que poner la configuración de autentication en No Requerida

- El Servicio de SQL Server tienen que iniciarse despues que se ha iniciado el MSDTC

- Hay que ir al Firewall de Windows habilitarlo, despues deshahbilitarlo y crear dos excepcones: una para el programa c:\windows\system32\msdtc.exe y otra para el puerto 135

- Esto se tiene que hacer tanto en la maquina donde está corriendo el cliente, por ejemplo el IIS tanto como en el SQL Server

El MSDTC tiene que estar configurado asi tanto en el server como en el cliente

clip_image002

clip_image004

clip_image006

clip_image008

 

Saludos,

Eduardo Castro - Comunidad Windows Costa Rica - http://mswindowscr.org

Cómo ejecutar un paquete de Integration Services desde un procedimiento almacenado

Chirag Patel escribió un artículo sobre cómo ejecutar un paquete de Integration Services desde un procedimiento almacenado, este es un buen utilitario que puede utilizarse en proyectos de inteligencia de negocios y datawarehouse, pueden leer el artículo en la siguiente dirección http://www.codeproject.com/KB/database/Call_SSIS_from_SP.aspx

 

Slds

 

Eduardo Castro

Comunidad Windows Costa Rica - http://mswindowscr.org

 

Limpiar el Cache en Reporting Services

Encontré esta información sobre cómo limpiar el caché en SQL Server Reporting Services.

You can find information about scripting here:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rsuiref/htm/cpu_rs_v1_5fxe.asp

You should also look at this:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rsprog/htm/rsp_prog_soapapi_script_3249.asp

The flush cache method is here:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/rsprog/htm/rsp_ref_soapapi_service_ak_22i9.asp

You script will look something like this (not sure this is 100% correct)

Public Sub Main()
    Dim items() As CatalogItem
    items = rs.ListChildren("/", True)

    Dim type as ItemTypeEnum
    Dim item As CatalogItem
    For Each item In items
type = rs.GetItemType(item)
if (type == ItemTypeEnum.Report || type == ItemTypeEnum.LinkedReport)
         rs.FlushCache(item)
    Next item
End Sub

I think I mixed in C# and VB.Net, but hopefully you can get the idea.

 

Saludos,

Eduardo Castro

Comunidad Windows Costa Rica http://mswindowscr.org

Posted: Jun 18 2008, 08:05 PM by ecastro | with no comments
Filed under:
More Posts Next page »