Administración, tips, SQL y utilidades sobre bases de datos SQL Server

Administración, tips, SQL y utilidades sobre bases de datos SQL Server Dataprix Fri, 04/15/2022 - 12:16

Tips sobre SQL Server

Recopilación de dudas técnicas, db scripts y consultas de administración y desarrollo sobre bases de datos Microsoft SQL Server

 

Databases

Cómo crear un identificador secuencial en una tabla de SQL Server

Cómo crear un identificador secuencial en una tabla de SQL Server Carlos Fri, 04/03/2020 - 18:57

Para crear un identificador único de secuencia en una tabla de SQL Server lo más sencillo es definir un campo de tipo Identity, y que se vaya generando sólo, pero si no se puede utilizar esta solución, o no es apropiada para un caso concreto, una solución muy sencilla para informar de manera puntual un campo con un número secuencial para cada fila es utlizar ROW_NUMBER() OVER para generar esa secuencia.

Si, por ejemplo, queremos generar estos identificadores consecutivos para todas las filas de una tabla 'MyTable' en un campo 'MyRow_id' , sólo tenemos que hacer algo así:

-- Update MyRow_id with a sequential identifier

;WITH TableRanked AS(
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as rownumber, 
       MyRow_id
FROM MyTable
) 
UPDATE TableRanked SET MyRow_id=rownumber
OPTION (MAXDOP 1)

Esta sería una solución puntual, otra cosa es si se desea mantener este campo actualizado..

buen dato, gracias por aportar tu conocimiento, soy nueva por estos lares y agradezco toda la informacion aportada.

Cómo crear una tabla con una select (CTAS) en SQLServer

Cómo crear una tabla con una select (CTAS) en SQLServer Carlos Mon, 06/04/2012 - 17:24

En Oracle, para crear fácilmente una tabla a partir de una consulta SQL se puede utilizar la siguiente sentencia:

CREATE TABLE NuevaTabla AS (SELECT * FROM OtraTabla);

Este tipo de sentencia se conoce como Create Table As Select (CTAS). Es muy útil para hacer pruebas rápidas con datos, para crear tablas de muchos campos que se parecen mucho a otras, o para 'materializar' una vista creando una tabla a partir de la select sobre la vista.

El caso es que en SQL Server también se puede hacer lo mismo, pero la sintaxis cambia bastante, y para el que esté más acostumbrado a la de Oracle puede serle útil saber que con SQL Server, para crear una tabla a partir de una sentencia SQL se puede utilizar una instrucción como esta:

SELECT * INTO NuevaTabla FROM OtraTabla;

 

 

Cómo recuperar los privilegios de administración (SYSADMIN) en SQLServer

Cómo recuperar los privilegios de administración (SYSADMIN) en SQLServer Carlos Sat, 05/26/2012 - 11:39

Si eres DBA y no puedes gestionar tus instancias de SQL Server porque no puedes entrar con el usuario 'sa', y no tienes ningún otro usuario con rol SYSADMIN, en el post How to connect to SQL Server if you are completely locked out, de MSSQLTips, nos explican una manera de recuperar el acceso a SQL Server como SYSADMIN.

Es algo parecido al método que explicaba il_masacratore para Recuperar la contraseña del usuario sys y system en Oracle, la clave está en entrar en la base de datos utilizando el usuario de sistema Administrador del servidor en el que está instalada.

Al conectar en modo 'single user' con un administrador local del servidor, podremos disfrutar de los permisos de administración de SYSADMIN para recuperar todo lo que haga falta, o asignar los privilegios necesarios a cualquier usuario.

 

Cómo reiniciar el valor de un campo identity de SQL Server

Cómo reiniciar el valor de un campo identity de SQL Server Carlos Thu, 07/26/2012 - 22:30

Si una tabla de SQL Server tiene un campo de tipo identidad, o identity, en un momento dado puede interesar volverlo a dejar con su valor inicial, o a otro valor que interese para que siga autoincrementándose a partir del mismo.

Con un sencillo comando DBCC se puede dejar el valor actual del campo identity al que se desee, aunque hay que tener cuidado con no utilizar un valor que al incrementarse se pueda encontrar registros que ya existan con ese valor.

Lo más habitual es utilizar este comando cuando, por ejemplo, se eliminan todos los registros de una tabla, y se quiere volver a comenzar a insertar registros identificados por el campo autoincremental a partir de un valor inicial, normalmente 0. Si se utiliza para cualquier otra cosa hay que tener cuidado con los conflictos que puedan aparecer con registros existentes en la tabla.

  Este es el comando para inicializar a cero el valor actual del autoincremental de un campo identity de la tabla 'mi_tabla', en una base de datos SQLServer: DBCC CHECKIDENT ('mi_tabla', RESEED,0)   Espero que sea de utilidad,

Muchas Gracias me funciono perfectamente...!!

Cómo restar dos fechas que contengan un parámetro de inicio y fin

Cómo restar dos fechas que contengan un parámetro de inicio y fin ariel Mon, 04/13/2015 - 17:11

Buenas tardes tengo una consulta a ver quien me la puede ayudar a resolver, tengo un tabla que tienen los siguientes datos:

id usuario nombre usuario feha y hora estado huellero 
1 pepito 01/01/2015 08:00 inicio 1 
1 pepito 01/01/2015 10:00 fin 1 
1 pepito 01/01/2015 13:00 inicio 1 
1 pepito 01/01/2015 13:10 fin 1 
1 pepito 01/01/2015 13:50 fin 1 
1 pepito 02/01/2015 08:00 inicio 1 
1 pepito 02/01/2015 20:00 fin 1 
1 pepito 03/01/2015 13:00 inicio 2 
1 pepito 03/01/2015 13:50 fin 2 
2 maria 01/01/2015 08:00 inicio 2 
2 maria 01/01/2015 13:00 fin 2 
2 maria 01/01/2015 21:00 fin 2 
2 maria 02/01/2015 08:00 inicio 2

La idea es que la consulta me diga las horas transcurridas una persona teniendo en cuenta que el fin es cuando encuentre el siguiente inicio y que hay tener en cuenta que pueden ser de diferentes huelleros. Les agradezco me colaboren con esto que lo estoy necesitando urgente. gracias

Hola Me faltaria aclarar qué criterio se sigue para definir lo que es 'inicio', 'fin'. Como primera aproximación yo haría esto, a falta de pulir y optimizar: select [id usuario], datediff(h,a.fecha,b.fecha) [Diferencia en horas] from tabla a join tabla b on a.idusuario=b.idusuario and a.fecha dispositivo lector de huella digital?

buenas noches si señor es un lector de huella para registro de entrada y salida de personal. el ejemplo mas claro que tengo de lo que pasa con el lector es el siguiente: teniendo el ejemplo que coloco las horas deberían decir asi 1 pepito 01/01/2015 08:00 inicio 1 1 pepito 01/01/2015 10:00 fin 1 aquí serian dos horas laboradas el dia 1 1 pepito 01/01/2015 13:00 inicio 1 1 pepito 01/01/2015 13:10 fin 1 1 pepito 01/01/2015 13:50 fin 1 en este ejemplo como la persona timbro dos veces debería de restar es el ultimo fin es decir ahí serian 50 min, porque pasa esto porque una persona se equivoco, o porque no marco, o porque salio al otro dia, en fin son muchas variables es por ello que la resta debe comenzar donde encuentra un unicio con el fin que esta antes de otro inicio. se que se ve complicado pero esta es la realidad de lo que tocaria hacer en la consulta.

In reply to by ariel

Entonces, asumiendo que de cada día lo que te interesa es el primer fichaje de inicio y el último fichaje de fin, podrías solventar el problema de los registros de más modificando la consulta anterior por algo así:

select a.id, a.usuario, a.dia datediff(h,a.fecha,b.fecha) [Diferencia en horas] from (select id, usuario, estado, year(fecha)*10000+month(fecha)*100+day(fecha) dia, min(fecha) from tabla_fichajes          where estado='inicio'
         group by id, usuario, estado, year(fecha)*10000+month(fecha)*100+day(fecha) ) tabla a

join (select id, usuario, estado, year(fecha)*10000+month(fecha)*100+day(fecha) dia, max(fecha)
        from tabla_fichajes 
        where estado='fin'
        group by id, usuario, estado, year(fecha)*10000+month(fecha)*100+day(fecha)) tabla b on a.idusuario=b.idusuario and a.dia=b.dia

Con esto, si no me equivoco, te quedarías en las tablas a y b con sólo el primer y el último fichaje diario de cada usuario, independientemente del huellero que utilicen, ¿es más o menos lo que buscabas?

 

Contadores y Rangos o funcion Rank() en SQLServer

Contadores y Rangos o funcion Rank() en SQLServer hminguet Mon, 10/03/2011 - 14:40

Crear contadores en SQLSERVER, simple pero útil.

 

1. Contador de registros:

select num = (select count(*) from d_Category r where r.id_Category<=t.id_category), t.* from d_category t

 

1.1. Con la función Ranking (sólo a partir del SQLSERVER 2005):

select rank() over (order by t.id_Category asc) as Ranking, t.* from d_category t order by 1

 

2. Contador por la suma del valor de un campo (por ranking).

En este caso obtendremos los 10 mejores clientes en ventas del 2010

select rank=count(*), s1.Customer, Val=round(s1.Val,0) from (select Customer, Val=round(sum(importe),0) from f_sales where year=2010 group by Customer) s1, (select Customer, Val=round(sum(importe),0) from f_sales where year=2010 group by Customer) s2 where s1.Val<= s2.Val group by s1.Customer having count(*)<11 order by 1

 

2.1. Con la función Ranking (sólo a partir del SQLSERVER 2005):

select * from ( select rank() over (order by importe desc) as Ranking, a.* from (select customer, sum(importe) as importe from f_sales where year=2010 group by Customer ) a ) F_TABLE where Ranking<=10

y filtramos por los 10 primeros, por ejemplo.

 

 

Espero que os ayude.

Héctor Minguet.

 

Con respecto a la función rank() over.., en lugar de necesitar una ordenación de todos los registros para sacar los 10 primeros, como en el último ejemplo, podemos necesitar una ordenación parcial de grupos de registros. Por ejemplo, en lugar de los 10 clientes con más importe pueden interesarnos los 10 clientes de cada zona con mayor importe, que es algo más habitual.

Ordenar registros agrupados con rank() over (partition by campo1 order by campo2)

Para ordenar agrupaciones de registros y quedarnos con los que nos interese (los primeros, los últimos..) lo único que hay que hacer es añadir a la sentencia la clausula 'partition by' de SQLServer para que nos haga las agrupaciones, y devuelva así el ranking, pero dentro de cada grupo o partición. Con el ejemplo anterior sería algo así:

select * from
( 
  select rank() over (partition by zona order by importe desc) as Ranking, 
         a.*
  from (select zona, customer, sum(importe) as importe
        from f_sales where year=2010 group by zona, Customer ) a
) F_TABLE
where Ranking<=10 

Con esta consulta obtendríamos los 10 mejores clientes de cada zona, rankeados del 1 al 10 por su importe.

 

Eliminar duplicados en SQL Server con rank over y partition by

Este tipo de sentencias también puede ser muy útil para eliminar duplicados, y quedarnos sólo con un registro de varios. Sería algo tan simple como agrupar con partition by por los campos que queremos que nos definan los registros únicos, y quedarnos sólo con el primero de los que nos devuelva la ordenación.

Si, por ejemplo, sabemos que tenemos clientes duplicados porque se han hecho altas de clientes cuando estos ya existían, y el cliente bueno es el de la última fecha de alta, podemos 'librarnos' de los obsoletos con algo así:

select * from
( 
  select rank() over (partition by customer order by fecha_alta desc) as Ranking, 
         a.*
  from (select customer, fecha_alta, sum(importe) as importe
        from f_sales where year=2010 group by Customer, fecha_alta ) a
) F_TABLE
where Ranking=1 

 

Eliminar duplicados en SQL Server con row_number over y partition by

El método con rank() para eliminar registros duplicados sólo tiene un problemilla, y es que el rank, si en el campo por el que ordena se encuentra dos valores iguales, devuelve la misma posición o rango a los dos registros del grupo, es decir, que si un cliente se diera de alta dos veces el mismo día, y esa fuera la fecha de alta más reciente, el rank nos devolvería un 1 para los dos registros, y nos quedaríamos con los dos, comiéndonos el duplicado.

Para evitar que nos pase esto, que además puede costar de ver, y generar bastantes problemas si se nos cuela el registro duplicado, en lugar de rank() se puede utilizar row_number(), que devuelve un número para cada registro del grupo, aunque el valor de la ordenación sea el mismo.

Siguiendo con el ejemplo anterior, para asegurarnos de que nos quedamos sólo con uno de los registros de cliente que se han podido dar de alta en varias ocasiones, sólo tenemos que cambiar rank() por row_number():

select * from
( 
  select row_number() over (partition by customer order by fecha_alta desc) as fila, 
         a.*
  from (select customer, fecha_alta, sum(importe) as importe
        from f_sales where year=2010 group by Customer, fecha_alta ) a
) F_TABLE
where fila=1 

La sentencia anterior sería para hacer la selección de los registros que nos interesan, descartando los duplicados, y después se pueden guardar en una tabla con un insert, por ejemplo.

Pero si queremos eliminar los registros duplicados existentes en una tabla la sentencia SQL a utilizar sería diferente. La subselect del ejemplo ya no tiene sentido, ahora crearemos una sentencia SQL más sencilla trabajando directamente sobre todos los registros de una tabla customer_table.

Además, contaremos con la ayuda del ;with de CTE para eliminar los duplicados que no interesan, tal como se sugiere en este tema sobre borrado de registros duplicados:

;with duplicado as 
( 
 select row_number() over (partition by customer order by fecha_alta desc) as fila, 
        c.*
 from customer_table c 
) 
delete from duplicado where fila>1

Bueno, pues así ya tenemos controlados contadores, rangos, agrupaciones y duplicados en SQL Server, y tenemos algunos ejemplos de la función rank() de SQLServer, que cuesta un poco de entender, pero una vez que se aprende a utilizar nos puede evitar muchos quebraderos de cabeza con nuestras consultas, que de otra manera se pueden complicar bastante, y más si además queremos deshacernos de registros duplicados.

 

Insert from select en SQL Server

Insert from select en SQL Server Carlos Mon, 10/10/2016 - 19:38

Insertar registros con una select

Para hacer un insert para añadir registros a una tabla a partir de una sentencia Select en SQL Server se puede hacer algo tan simple como esto:

insert into mi_tabla_destino
select * from mi_tabla_origen

 

Insertar registros con nombre de campo o diferente número con una select

Eso siempre que los campos de ambas tablas sean iguales. Si no coinciden exactamente, en número, nombre, etc., en lugar de utilizar el * hay que indicar el nombre de los campos que vamos a utilizar en la tabla origen y la tabla destino:

insert into mi_tabla_destino (campo_destino1, campo_destino2, campo_destino3)
select (campo_origen1, campo_origen2, campo_origen3)

 

Crear una nueva tabla a partir de una select (CTAS)

Esto si la tabla ya existe, si lo que se quiere es crear una nueva tabla a partir de los datos de una select sobre otras tablas, algo conocido como CTAS (Create As Select), la sintaxis de la sentencia cambia un poco:

SELECT * INTO dbo.Destination FROM dbo.SourceSELECT * INTO dbo.Destination FROM dbo.SourceSELECT * INTO dbo.Destination FROM dbo.SourceSELECT * INTO dbo.Destination FROM dbo.SourceSELECT * INTO dbo.Destination FROM dbo.Sourceselect * into mi_nueva_tabla_destino from mi_tabla_origen

 

UPDATE con JOIN en SQLServer

UPDATE con JOIN en SQLServer hminguet Tue, 07/08/2008 - 10:25

Supongamos que queremos actualizar en nuestra bbdd SQLServer el campo de costes de la tabla de hechos FAC_TABLE con el coste unitario de nuestra tabla de COSTES.

UPDATE FAC_TABLE
SET COSTE_UNITARIO = ct.COSTE_UNITARIO
FROM COSTES ct
WHERE FAC_TABLE.id_articulo = ct.id_articulo

 

Algo más sencillo que en Oracle.

 

Espero que os ayude.

Héctor Minguet.

Reconozco que esta sentencia de UPDATE a partir de una SELECT de otra tabla en SQLServer es simple y efectiva pero, aunque no lo parezca, para mi es más fácil de recordar, y te diría que más comprensible esta otra sentencia SQL de Update, que yo calificaría de más estandar, y en la que se separa la condición de Join de los filtros del Where:

UPDATE Fact SET coste_unitario = ct.coste_unitario
FROM FAC_TABLE Fact INNER JOIN Costes ct ON Fact.id_articulo = ct.id_articulo
WHERE Fact.idfecha > 20120101

Alguien conoce alguna sentencia SQL mejor, o diferente, para hacer un 'UPDATE FROM SELECT' con SQL Server?

 

In reply to by Carlos

Holas

yo soy muy partidario, cuando se complica mucho la cosa, de los bloques cte (tambien para oracle), se ve muy claro todo:

;with fact_CTE as (
    SELECT fact.coste_unitario,
           ct.coste_unitario as coste_unitario_UPD
    FROM FAC_TABLE Fact 
         INNER JOIN Costes ct ON Fact.id_articulo= ct.id_articulo
    WHERE   Fact.idfecha > 20120101 )
UPDATE fact_CTE set  coste_unitario= coste_unitario_UPD

 

In reply to by Anonimo (not verified)

Buena sugerencia. En estos ejemplos de Updates con join las sentencias son bastante simples, pero con queries más complejas la utilización de bloques CTE con el with de SQL Server puede simplificar muchísimo la comprensión de la sentencia, y a veces también el rendimiento.

 

 


Libros de SQL Server

¿Quieres profundizar más en Transact-SQL o en administración de bases de datos SQL? Puedes hacerlo consultando alguno de estos libros de SQL Server.

También puedes revisar la lista completa de los últimos libros de SQL Server publicados en Amazon según lo que te interese aprender.


Excelente post...me sirvió para solucionar un problemon (problema grande) en mi trabajo.

Gracias

DBlink en sql server

DBlink en sql server gilson Tue, 01/12/2010 - 20:12

Mi pregunta es muuy sencilla, es posible crear un dblink en sql server, y si es posible, como lo hago, muchisimas gracias!

 

saludos a todos

Para crear un linked server de SQL Server que conecte con una base de datos Oracle primero hay que instalar el conector OLEDB de Oracle, y después crear y configurar el linked server con T-SQL, o con SSMS.

Instalar el conector OLEDB de Oracle

Si no lo tienes, hay que instalar un cliente de Oracle que incluya este conector. Ojo porque el Instant client, el cliente básico de Oracle no lo incluye, se puede instalar el cliente, y después un paquete de complemento que lo incluya, pero lo más recomendable es instalar el paquete ODAC (Oracle Data Access Components), que sí que incluye el proveedor OLEDB de Oracle.

Si tienes un SQLServer de 64 bits en teoría es mejor que utilices los conectores de 64 bits que incluye este ODAC 64 bits de Oracle, pero si vas a conectar desde Visual Studio o desde SSIS curiosamente a día de hoy sólo te funcionarán los conectores de 32 bits, que puedes descargar desde la versión ODAC with Oracle Developer Tools for Visual Studio, de 32 bits. Según lo que vayas a hacer puede que lo mejor sea instalar los dos.

Visual Studio de 32 bits

Apps de 32 bits en Ordenador con Windows 10 de 64bits y SQL Server de 64bits

Si tienes algún problema con esta instalación, otra opción que no suele fallar es instalar directamente un Oracle XE en tu máquina cliente, que también incluye el driver OLEDB, y no ocupa mucho más que el ODAC con las Tools. Nunca está de más disponer de una pequeña base de datos Oracle en la máquina que se va a conectar al server, aunque sólo sea para hacer pruebas. Puedes descargar el instalador de Oracle XE 11g desde aqui. Elige la versión de 32 o 64 bits con el mismo criterio que para las ODAC, si vas a conectar también Visual Studio/SSIS, aunque tu sistema y tu SQL Server sean de 64 bits instala la BD Oracle de 32 bits.

Crear el linked server a Oracle en SQL Server

Si ya tienes bien instalado el proveedor OLEDB de Oracle esta debería ser la parte más fácil. Se puede hacer desde el entorno gráfico de SQL Server Management Studio, utilizando el botón derecho sobre la carpeta 'Servidores vinculados' para crear un nuevo linked server que utice OLEDB para conectar con una BD Oracle.

Enlazo un sitio que lo explica bastante bien, y te dejo dos pantallazos de ayuda para la parte donde te pueden surgir más dudas.

Creación de un linked server a Oaacle en SSMS

Creación de un linked server a Oaacle en SSMS

 

Limitaciones en las funciones de SQL Server

Limitaciones en las funciones de SQL Server Carlos Wed, 12/21/2016 - 17:22

Las funciones de usuario de SQL Server tienen bastantes limitaciones comparadas con otras funciones de otras bases de datos, como Oracle, o con lo que se puede hacer en los procedimientos almacenados.

Las principales limitaciones, bajo mi punto de vista, son estas dos:

  • Dentro de una función de SQL Server no se pueden ejecutar sentencias de actualización de datos como INSERT, UPDATE o DELETE, es decir, que una función de usuario NO puede modificar valores de las tablas de una base de datos.
  • Las funciones de T-SQL no permiten el tratamiento de excepciones con bloques TRY CATCH

Es importante recordar estas limitaciones antes de comenzar a desarrollar funciones personalizadas, porque es bastante habitual terminar creando un procedure porque alguna cosa no se puede hacer o controlar con una función.

¿Conoces más limitaciones de las funciones de usuario de TSQL? 

 

SQL Dinámico con retorno de valores en procedimientos de SQL Server

SQL Dinámico con retorno de valores en procedimientos de SQL Server Carlos Fri, 12/30/2016 - 08:51

Si necesitas parametrizar algo más que los valores de los campos que se introducen en la parte del WHERE en una sentencia T-SQL de un procedimiento almacenado seguramente vas a tener que utilizar SQL dinámico, aunque si se puede hacer lo mismo sin SQL dinámico siempre es mejor, más seguro y más eficiente.

Ejemplo de sentencias que se pueden hacer dentro de un procedure con SQL 'Estático'

INSERT INTO estadisticas(idFecha,fecha,bd,tabla,campo,filtro,funcion,valor) 
            values (@idfecha,getdate(),@bd,@tabla,@campo,'','COUNT',@valor)

SELECT @valor= valor FROM estadisticas WHERE bd=@bd and tabla=@tabla and campo=@campo

Ejemplos de sentencias que se pueden hacer dentro de un procedure con SQL dinámico

Si es necesario parametrizar el nombre de la tabla de la query, o partes de la sentencia fuera del WHERE, se puede utilizar SQL dinamico con la opción poco recomendada porque el motor no puede optimizar nada, y porque se corre el peligro de sufrir un ataque de SQL Injection de montar la sentencia en un string, y ejecutarlo directamente con EXEC.

Un ejemplo de lo que se puede hacer, pero es mejor evitar:

SET @SQLQuery= 'SELECT ' + cast(@funcion as NVARCHAR(50)) + '('+ cast(@campo as NVARCHAR(50)) +') 
                FROM ' +cast(@bd as NVARCHAR(50))+ '.' + cast(@tabla as nvarchar(50))
EXECUTE(@SQLQuery)

Un ejemplo para obtener el mismo resultado, pero de manera más segura y eficiente. Se define además una variable de salida para recuperar un valor de la query.

Sin duda esta es la opción más recomendada para ejecutar SQL dinámico en procedures de T-SQL:

DECLARE
@Tabla sysname,
@Funcion nvarchar(50),

SET @SQLQuery='SELECT @valor=' + @funcion + '(' + @campo + ') FROM ' + QUOTENAME(@tabla)
EXECUTE sp_executesql @SQLQuery, N'@campo nvarchar(50),@valor bigint OUTPUT', 
                      @campo=@campo,@valor=@valor OUTPUT
SELECT @valor as valor

Destacar que @tabla y @funcion son variables locales que se pueden preparar dinámicamente dentro del procedure, e incluirlas directamente en la sentencia y que @campo sería, por ejemplo, un parámetro del procedure.

@Tabla es de tipo sysname porque se utiliza como nombre de tabla en el FROM, si se definiera como NVARCHAR en algunos casos podrían producirse errores de ejecución.

Referencias de otros sitios con más detalles y ejemplos: MSQLTipsCodeproject

 

Herramientas de administración para DBA's de SQL Server

Herramientas de administración para DBA's de SQL Server Carlos Thu, 09/22/2016 - 18:39

Con SQL Server Management Studio se gestiona bastante bien la administrción básica de SQL Server, pero siempre hay herramientas que pueden ayudar a hacer las cosas más fáciles.

Mi idea es dejar aquí una lista de las que consideremos más útilles, y así podamos consultarla en cuanto tengamos que hacer alguna cosa específica.

Las primeras que propongo son gratuítas, o tienen versión free, al menos para una instancia, sin caducidad:

Herramientas y scripts complementarios gratuítos para SQLServer

  • SQLSentry Plan Explorer
    Perfecta para optimizar consultas, y mucho más completa que el analizador de Management Studio. Además se puede agregar como Add-In de SSMS para poder llamarla directamente desde un plan de ejecución de SSMS.
  • Toad for SQL Server
    La versión free para mi no aporta mucho más que SSMS, pero en un listado de software freeware para DBA'a creo que no debe faltar Toad :)
  • Redgate SQL Search
    Un Add-in superútil de redgate para SQL Server Management Studio que permite realizar búsquedas sobre los objetos y de la base de datos y localizar fragmentos de código SQL en tablas, vistas, procedimientos almacenados, funciones, vistas, jobs..
  • Idera SQL Check
    Útil herramienta para monitorización del rendimiento cuya versión gratuíta se puede utilizar con un servidor y para monitorizar hasta 20 métricas, sin necesidad de instalar ningñun agente.
  • Who is active (sp_whoisactive)
    Procedimiento almacenado para monitorización de actividad y optimización del rendimiento
  • SQL Server Maintenance Solution
    Scripts de Ola Hallengren para mantenimiento de bases de datos SQL Server (DatabaseBackup.sql, DatabaseIntegrityCheck.sql, IndexOptimize.sql, CommandExecute.sql y CommandLog.sql)

 

¿Utilizas otras herramientas complementetarias para administrar tus bases de datos SQL Server? Dinos cuáles son y haremos crecer la lista..

Ssmstools, sp_whoisactive y los scripting de olla hallegreen.

In reply to by Anonimo (not verified)

Gracias por tu aportación, he incluído SP_Whoisactive y SQLServer MaintenanceSolution en la lista de herramientas y scripts gratuítos.

SSMS Tools Pack también parece muy útil, pero no es gratuíta, aunque es bastante barata, así que la dejo aquí enlazada. La licencia de demo sirve para 60 días de prueba.

 

Gracias por el Aporte, y tomarte el tiempo para realizar esto. Lo revisare

¡Gracias por esta información!

Me gustaría añadir que existe una herramienta más que puede acelerar la escritura de códigos SQL, ofrecer sugerencias inteligentes basadas en el contexto, realizar formateo y refactorización automáticos, mejorar la legibilidad del código, aumentar la productividad y reducir los costos.

Access to sql

Access to sql MrAlex Fri, 09/11/2015 - 20:14
Pido disculpas, soy principiante con sql server, indicarme si esta pregunta no es del nivel de este foro, por favor. Tenemos 4 bases de datos (Ms Access 2013 - aprox. suman 2 GB), con codigo, consultas, formularios y tablas vinculadas entre ellas, queremos migrarlas a sql server express 2012 y seguir trabajando con los formularios de access. Podemos migrar las 4 bases de datos o antes habría que convertirla a una sola base de datos o cual seria una mejor opcion. Gracias!

Hola Alex

Ante todo, no pidas disculpas por participar en el foro, todas las aportaciones adecuadas a la temática de los foros de Dataprix son bienvenidas, y tu consulta encaja perfectamente, seguro que no eres el primero que migra de Access a SQL Server :)

Entrando en el tema que planteas, la decisión que has de tomar a la hora de migrar las bases de datos de Access a SQLServer depende de muchos factores, y has de evaluar tu mismo pros y contras y decidir. Para mi los factores que más te pueden influir son el diseño, el rendimiento y la seguridad. Te comento lo que veo de cada punto:

  • Diseño: Si las bases de datos tienen relación lógica entre ellas, o normalmente son compartidas por la misma aplicación, conexiones o usuarios te puede simplificar bastante la gestión y el desarrollo unificarlas en una sola. Si tienes muchas tablas vinculadas seguramente es que estarían mejor unificadas.
  • Rendimiento: A nivel de rendimiento, como no son bases de datos grandes, si todas van a estar en el mismo servidor no creo que notes mucha diferencia entre mantenerlas separadas y utilizar servidores vinculados para compartir la información de las tablas en las consultas, o tener todas en la misma base de datos y olvidarte de servidores vinculados. Pero ya te digo, si necesitas utilizar muchos linked servers para las consultas es que puede que los datos no tendrían que estar tan separados, no? Donde sí podrías notar alguna diferencia de rendimiento, según cómo se gestionen las conexiones en tus aplicaciones es al abrir las conexiones, no es lo mismo abrir una que cuatro.
  • Política de Seguridad: Si las bases de datos van a compartir usuarios y aplicaciones puede que sea más fácil tener una sola. Si no es así, y hay usuarios de base de datos, o de aplicaciones, que es mejor que sólo tengan acceso a tablas de alguna de las bases de datos, entonces asignar una base de datos a cada usuario te simplificaría la gestión de la política de seguridad porque lo harías a nivel de base de datos, y no de tablas u objetos.

Espero haberte ayudado con estas reflexiones, ya nos contarás si al final haces la migración desde los Access dejando las bases de datos separadas, o las unificas en una sóla base de datos de SQL Server.

 

 

Hola. De acuerdo a tu duda, considero que todo depende de como tengas funcionando tu BD, si la utilizas para diferentes ambientes, por ejemplo una base de datos para insertar en la pantalla persona y otra base de datos para registrar ventas y sí te ha funcionado no hay ningun problema para migrarlo a SQL incluso te daría un mejor performance, estabilidad y un futuro para tu aplicación.

 

Solo debes checar que la BD tenga concordancia y cumpla con un diseño correcto para que pueda funcionarte correctamente.

Si afecta a tus tablas si deberías considerar la opci+on de restructurar y ponerla en una sola Base de Dato

Espero te haya servido mi comentario.

Almacenar usuario y dominio

Almacenar usuario y dominio jatb Sun, 06/23/2013 - 04:53

 Hola a todos,

 

Espero me puedan ayudar, quiero guaradar el historial de los usuarios que visualizan los reportes, los parametros del reporte son los parametros que pasan por el sp en sql, ahora lo que quiero es guaradar en una tabla que usuario y el dominio esta generando el reporte.

Como se puede lograr esto?

Dentro del sp incluye un insert into tabla_custom con todos los valores hora de ejecucion y demas.
Suele usarse este metodo mas para debug añadiendo bloque try catch, pudiendo detectar errores no reportados por el usuario.

Auditoria de bases de datos SQL Server 2008

Auditoria de bases de datos SQL Server 2008 GabrielMartinez1987 Thu, 01/19/2012 - 18:39

Existen herramientas ya definidas en SQL Server que sirvan para llevar adelante una  auditoria de una base de datos?

Entiendo que podemos definir triggers para registrar inserciones, actualizaciones y demas operaciones sobre los datos, pero quiero saber si ya existen herramientas para esto.

 

Saludos.

Gracias

La herramienta predefinida para auditar la base de datos SQL Server es SQL Server Audit, y la puedes utilizar desde el mismo SQL Server Management Studio.

Te enlazo la página de Descripción de SQL Server Audit de MSDN, y el artículo An Introduction to SQL Server 2008 Audit, del blog SQL Aloha, que explica muy bien lo que puede hacer la herramienta, y te da un ejemplo sobre cómo utilizarla.

Según lo que tengas que hacer, si también te interesa realizar análisis de la distribución o perfilado de los datos, otra herramienta muy útil de SQL Server 2008 es la Data Profile Task de SSIS, y el Data Profile Viewer para visualizar los resultados. Te enlazo el artículo Data profiling con SQL Server 2008, en el que explico cómo se utilizan.

 

Base de datos de una web sincronizada con BBDD de locales

Base de datos de una web sincronizada con BBDD de locales Carlos Thu, 08/27/2009 - 11:57

Jorge pregunta en otro tema lo siguiente:

[quote=jorgebcl] Hola, Carlos esta genial el ETL, te hago otra consulta, esta muy bueno el tema, ya que esto es de base de datos, como funciona un pagina que se dedica a vender articulos por intenet en cuanto a la base de datos?, la idea aqui es que todos los locales esten en linea y haci usar esa base de datos para la venta en WEB, pero la linea dedicada es muy costasa y no estoy viendo el retorno por ninguna parte(ya que las ventas por intenet de nuestros articulos uqe son neumaticos es una idea que quizas mas adelante funcion como tirerack), la pregunta es como lo hacen las empresas que tiene esta figura, no seria mejor hacre un respaldo cada una hora por ejemplo y usar estos respaldos de locales para que la web se conexte a esta base de respaldo, lo que tendria baja probabiilidad de no tener stock, y ahorrarmen la linea dedicada. Saludos Jorge [/quote]

Hola Jorge

Si no tienes la necesidad de mantenerlo todo sincronizado en tiempo real puede que sea buena idea ahorrarte la línea dedicada. Tal como comentas, si tienes locales y una web puedes mantener una base de datos centralizada que se vaya actualizando con los datos de todos los puntos de venta, y esta actualización no es necesario que sea en tiempo real. Supongo que también tendrás que pensar en una actualización en sentido contrario.

  • Lo más sencillo sería trabajar con descargas de datos cada cierto tiempo. El stock deberías actualizarlo más a menudo, pero los datos maestros como artículos y tarifas pueden actualizarse diariamente, por ejemplo. En la parte de la base de datos centralizada/ servidora de la web puedes tener un SQL Server y utilizar SSIS para incorporar los datos que provengan de los locales.
     
  • Si la tecnología de la aplicación de punto de venta te lo permite también podrías plantearte la utilización de web services para mantener el stock lo más actualizado posible.
  • Y si pudieras utilizar bases de datos SQL Server en el punto de venta podría funcionarte muy bien, y sin tener que pagar más licencias, utilizar SQL Server Express en los locales y realizar la sincronización entre la BD servidora y las locales mediante el mecanismo de replicación de SQL Server. En el sentido de BD local a BD Servidora seguramente tendrías que seguir utilizando SSIS, por las limitaciones de uso de la versión Express.

Aparte de la reducción de los costes de la linea, ten en cuenta que de esta manera también independizas el funcionamiento de todos los puntos de venta, ya que cada uno tiene su propia base de datos que funciona independientemente de lo que pase fuera. Si un TPV se queda sin ADSL podrá seguir vendiendo sin problemas hasta que recupere la conexión.

Bueno, parece que tienes otro proyecto interesante entre manos, ya nos contarás por qué tecnología te decides y cómo te va..

 

 

 

 Ola carlos, me comentan aca que por diseño del sistema que se desarrollo esta, estubo pensando siempre para que este en linea, por lo que la base de datos es solo una, para hacer lo que tu me dijiste habria que tener fotos de toda esta informacion, al parecer habria que hacerlo asi, estan cotizando tener en los locales Ancho de banda mayor. Yo no estaba al inicio del proyecto, pero me parece que demoraria mucho un replantamiento del tema......el problema con esto que llevar demasiado tiempo

 

Saludos

In reply to by jorgebcl

Si todo está diseñado para trabajar con una base de datos servidora está claro que cambiar a un funcionamiento con ésta más bases de datos locales supone un cambio importante que tiene sus ventajas, pero también sus costes e inconvenientes.
Al menos tienes un plan B en mente por si tuvieras algún problema con la 'opción online'.

Consulta sobre enviar Suscripciones SSRS

Consulta sobre enviar Suscripciones SSRS hanamichito Fri, 01/10/2014 - 17:11

 Estimados,

 Buenas, hace tiempo que no posteo en esta gran comunidad y en esta oportunidad quisiera preguntarles si saben del procedimiento o job que se ejecuta el momento de enviar una suscripcion esto lo pregunto ya que estoy trabajando en una aplicacion que debe de cumplir la tarea que hace automaticamente el SQL SERVER... 

muchisimas gracias!!!!

 

y quedo atento a sus comentarios y les dejo mi contacto ...

 

Pablo Meneses Leiva

Ingeniero Magister en Informatica

pmeneses.leiva@gmail.com

 ya encontre la solución, todo pasa por una tabla de eventos que tiene la bbdd de Report y luego de eso hay un proceso que escucha esta tabla y lo que este en ella lo envia por correo electronico...

 

 

muchas gracias!!!!!!!!!

 

 

saludos!!!

 deben de crearse la siguiente VIEW en la base ReportServer...

 

 

 

GO

 

/****** Object:  View [dbo].[vw_reportes_suscripciones]    Script Date: 01/27/2014 16:13:23 ******/

SET ANSI_NULLS ON

GO

 

SET QUOTED_IDENTIFIER ON

GO

 

 

ALTER view [dbo].[vw_reportes_suscripciones]

as

SELECT Subscriptions.SubscriptionId

  ,Subscriptions.Description AS SubscriptionName

 ,Schedule.ScheduleID AS JobID

 ,Catalog.Name AS ReportName

FROM dbo.Subscriptions

INNER JOIN dbo.ReportSchedule

ON ReportSchedule.SubscriptionID = Subscriptions.SubscriptionID

INNER JOIN dbo.Schedule

ON ReportSchedule.ScheduleID = Schedule.ScheduleID

INNER JOIN dbo.Catalog

ON ReportSchedule.ReportID = Catalog.ItemID

 

 

 

SALUDOS Y ESPERO LES SIRVA!!!!

Crear en SQL Server un rol adicional para ejecutar stored procedures

Crear en SQL Server un rol adicional para ejecutar stored procedures Carlos Tue, 11/21/2017 - 20:12

Cómo crear un rol en SQL Server para poder dar a los usuarios fácilmente permisos para ejecutar stored procedures.

En SQL Server no existe un rol predefinido para que un usuario pueda ejecutar stored procedures, aparte del db_owner.

Si se trabaja con stored procedures y se quiere permitir a usuarios que no tengan porqué ser owners de una base de datos ejecutar procedimientos almacenados de la misma, se puede crear un rol específico con un grant de permisos de ejecución 'EXECUTE'.

Así después sólo hay que asignar ese rol a los usuarios que tengan que ejecutar stored procedures de una base de datos.

 

Es tan fácil como hacer algo así:

-- Crea un nuevo rol para ejecutar stored procedures
CREATE ROLE db_execute

-- Asigna permisos de ejecución de procedimientos almacenados al rol
GRANT EXECUTE TO db_execute

-- Agrega un usuario al recién creado rol db_execute role
EXEC sp_addrolemember 'db_execute', 'usuario'

Después de esto 'usuario' ya podrá ejecutar stored procedures de la base de datos en la que se ha creado el rol aunque no sea 'db_owner' de esa base de datos..

 

Esquemas en Sql Server 2005

Esquemas en Sql Server 2005 GabrielMartinez1987 Fri, 11/25/2011 - 15:28

Hola buen dia. 

Soy nuevo en la pagina y ademas recien arranco con Sql Server 2005, escuche hablar sobre Esquemas y la verdad no se cual es el motivo por el cual se usan. Es decir, para que sirven y cuando tengo que usarlos. 

Agradeceria su ayuda para solventar esta duda. Muchas gracias de antemano. 

Saludos. Gabriel

Gabriel, te he montado una defición de esquemas de SQL Server, obtenida de las librerías de microsoft:

Un esquema simplemente es un contenedor de objetos. Cada esquema es un espacio de nombres distinto que existe de forma independientemente del usuario de base de datos que lo creó. Cualquier usuario puede ser propietario de un esquema, y esta propiedad es transferible.

A partir de SQL Server 2005, los esquemas son entidades explícitas reflejadas en los metadatos y, como resultado, los esquemas solo pueden tener un propietario. Sin embargo, un único usuario puede poseer muchos esquemas.

 

Los esquemas te sirven sobretodo para organizar los objetos, y también la seguridad de la base de datos, especialmente cuando tengas varios usuarios. Si un usuario posee un esquema, tiene por defecto permisos sobre los objetos de ese esquema que no tendrán otros usuarios, a menos que se les hayan concedido expresamente.

In reply to by Carlos

 Hola Amigo,

 

Tengo una pregunta a tu respuesta con respecto a los esquemas en SQL Server. Crear muchos esquemas puede realentizar la Base de datos? o puede hacer que se consuman más recursos? la idea es crear un esquema por cada sistema que manejamos, y asi mantener los objetos de cada uno separados.

 

Gracias por tu respuesta.

 

 

Saludos

In reply to by dchiari

No te puedo decir exactamente la incidencia que tiene en el rendimiento de la base de datos la existencia de diferentes esquemas en lugar de uno sólo, pero ha de ser insignificante con respecto a otros aspectos a tener en cuenta, más de ventajas/desventajas de organización y seguridad.

Supongo que tampoco tendréis tantos sistemas, por lo que por lo que cuentas a mi me parece una buena práctica crear un esquema para cada uno.

Piensa que además, si se asignan ficheros físicos diferentes a los diferentes esquemas, puedes obtener muchas ventajas de cara al mantenimiento, backups, restauraciones, etc. Incluso, según los datos que tengas en cada sistema, puede llegar a ser más eficiente que estén separados. 

In reply to by angelluisgo

Hola Angel

El esquema INFORMATION_SCHEMA guarda información sobre la estructura de objetos de SQL Server como tablas y vistas.

Para comenzar a explorarlo puedes probar con sentencias sencillas como:

SELECT * FROM INFORMATION_SCHEMA.TABLES;
SELECT * FROM INFORMATION_SCHEMA.COLUMNS;
SELECT * FROM INFORMATION_SCHEMA.VIEWS;

Espero que sea lo que buscas

 

Generación de codificación geográfica y zona de tiempo a partir de direcciones en SQL Server con PowerShell, T-SQL y GoogleMaps

Generación de codificación geográfica y zona de tiempo a partir de direcciones en SQL Server con PowerShell, T-SQL y GoogleMaps Carlos Mon, 09/26/2016 - 15:21

Generar las coordenadas geográficas a partir de una dirección utilizando la API de Web Services de Google Maps, y todo dentro de SQL Server, me parece algo tan útil como técnicamente interesante.

Como estoy seguro de que no tardaré en probarlo o necesitarlo para algo, enlazo aquí el post de MSSQLTips sobre cómo hacerlo para saber dónde encontrarlo como lo necesite, y me guardo la función de llamada a la API:

 
#
# Name:      Get-Geo-Coding
# Purpose:   Use Google api 4 address 2 location calc.
#

function Get-Geo-Coding {
    [CmdletBinding()] 
    param(
        [Parameter(Mandatory = $true)]
        [String] $ServiceKey,

        [Parameter(Mandatory = $true)]
        [string] $FullAddress
    )

    # Create request string
    [string]$ApiUrl = ""
    $ApiUrl += "https://maps.googleapis.com/maps/api/geocode/xml?address="
    $ApiUrl += $FullAddress
    $ApiUrl += "&key="
    $ApiUrl += $ServiceKey

    # Make request
    $Request = [System.Net.WebRequest]::Create($ApiUrl)
    $Request.Method ="GET"
    $Request.ContentLength = 0

    # Read responce
    $Response = $Request.GetResponse()
    $Reader = new-object System.IO.StreamReader($Response.GetResponseStream())
    

    # Return the result
    return $Reader.ReadToEnd()
} 

 

Importar base de datos desde Oracle

Importar base de datos desde Oracle gilson Thu, 01/21/2010 - 14:24

Buenas a todos, tengo una base de datos en oracle 9i, y me gustaria migrar esa base de datos a sql server 2008, ojala alguien podria ayudarme con esto, desde ya estoy muy agradecido.

 

saludos a todos

Instalacion de SQL SERVER 2008 EN xp con SP2

Instalacion de SQL SERVER 2008 EN xp con SP2 gilson Mon, 01/18/2010 - 13:12

Buenas a todos, tengo un problema al instalar el motor, me sale un error al iniciar el mismo, les comento que anteriormente tenia el sql 2005 que al parecer no lo desinstale correctamente, por que al iniciar mi pc me sale un error del sql dumper, que podria hacer para solucionar este problema?, es posible descargar nuevamente la utilidad sql dump, o que me dices ustedes?..

Muchisimas gracias por su ayuda

Saludos

 

 

Podrías especificar el error que comentas que te sale al iniciar SQL Server? También sería útil saber la versión de SQL Server que has instalado, si es Express, Standard o Enterprise. No creo que sea el caso, pero recordemos que la Enterprise, por ejemplo, se ha de instalar sobre un Windows Server.

De todas maneras puedes consultar en la web de Soporte de Microsoft el artículo Cómo desinstalar manualmente una instancia de SQL Server 2005, puede que así encuentres lo que se haya quedado sin desisntalar.

Otra cosa que también te podría ser de utilidad, sobretodo si has detectado que algo en concreto se ha quedado sin desinstalar es la herramienta Windows Installer CleanUp Utility, que se suele utilizar cuando los desinstaladores estandar no terminan bien su trabajo

Los campos identity se saltan 1000 números aleatoriamente

Los campos identity se saltan 1000 números aleatoriamente Carlos Fri, 05/23/2014 - 18:49

En el grupo SQL Server Si! de Linkedin, me han hecho una consulta sobre un funcionamiento anormal de los campos Identity de una base de datos SQL Server. La traslado aquí porque es algo que a mi nunca me ha pasado.

En un SQL Server 2012 sp1 las claves primarias definidas como campos identity, en distintas tablas, y de manera aleatoria, cada semana en una, por ejemplo, se saltan 1000 registros de la secuencia.

Como digo es algo que nunca me he encontrado, así que si alguien tiene idea de lo que puede estar ocurriendo en esta base de datos le agradezco que lo comparta.

 

Desde Twitter, Daniel Trabas (@DaniT20), ha sugerido que podrían ser registros que se eliminen, o transacciones sucias.

Lo de los registros que se eliminen parece demasiado simple, pero tiene mucho sentido, podría haber algún proceso, procedure, aplicación etc. que por alguna razón fuera eliminando esos 1.000 registros, ¿habéis comprobado si os faltan datos o están todos y el hueco está sólo en la numeración?

Yo nunca he visto algo así, pero otra opción que se me ocurre es que por bloqueos o algo así os estén fallando algunas operaciones de insert, pero el contador se incremente igual. ¿Tenéis definidos triggers en las tablas o son todo inserts sin más? Con los triggers podrían pasar cosas de este tipo..

 

En otros foros ha realizado la misma consulta, y es un problema que trae sqlserver 2012 sp1, se de colocar en el parametro del trace flag 272, (-t272) con ello desaparece el problema

In reply to by Hans (not verified)

Gracias Hans, ya tenemos otro misterio de SQL Server resuelto :)

Enlazo uno de los blogs que he encontrado al buscar 'trace flag 272' donde explican cómo utilizar el parámetro, y también otra manera de evitar el problema, gracias a la opción NOCACHE en la creación de la secuencia:http://jamessql.blogspot.com.es/2013/07/gap-issue-in-sql-server-2012-id…

 

Tengo este problema y no he podido solucionarlo alguien me puede comentar si ya lo pudieron solucionar y como?

 

saludos

 

Esto sucede siempre que se reinicia el computador mientras está funcionando (grabando o leyendo datos) el motor de SQL, y se daña la secuencia de las tablas que estaban en uso. Hasta ahora no he encontrado solución. Me ha tocad siempre que sucede esto, reparar los datos y reinicializar la numeración.

Buenas tardes

Respecto al uso de columnas con propiedad Identity.

Valores consecutivos después de un reinicio del servidor u otros errores: SQL Server podría almacenar en memoria caché los valores de identidad por motivos de rendimiento y algunos de los valores asignados podrían perderse durante un error de la base de datos o un reinicio del servidor. Esto puede tener como resultado espacios en el valor de identidad al insertarlo.

Si no es aceptable que haya espacios, la aplicación debe usar mecanismos propios para generar valores de clave. El uso de un generador de secuencias con la opción NOCACHE puede limitar los espacios a transacciones que nunca se llevan a cabo. https://docs.microsoft.com/es-es/sql/t-sql/statements/create-table-transact-sql-identity-property

 

In reply to by Anonimo (not verified)

Tiene mucho sentido, desde luego si no hay manera de garantizar que nunca se generen estos saltos y es crítico que los id's sean siempre consecutivos, hay que pensar en utilizar otras soluciones, como un mantenimiento independiente de las secuencias en estructuras, o una consulta del último valor para poder generar el siguiente antes de cada inserción, más ineficiente, pero más seguro, gracias por las dos sugerencias.

 

Particionamiento de tablas en SQLServer 2005

Particionamiento de tablas en SQLServer 2005 josimac Sun, 05/18/2008 - 01:05

Hola a todos.

Es sabido por todo el mundo de las capacidades de particionamiento que posee Oracle desde sus mas antiguos releases. En Sql Server 2000 existia una especie de "chapuza" para poder hacerlo mediante restricciones "CHECK" en los campos y utilizando vistas mediante UNIONS.

El panorama en SQL Server 2005 a mejorado un poco respecto a eso.
No puedo dar fe absoluta sobre las ventajas de utilizar dicho particionamiento (lo usé en una tabla de hechos con pocos millones de registros) pero al menos es una tecnología más reciente que las "vistas".

PASO 1: Crear una función de partición
CREATE PARTITION FUNCTION [MiFuncionDeParticion] (char(15))
AS RANGE LEFT FOR VALUES ('VALOR1', 'VALOR2', 'VALOR3')

PASO 2: Crear un schema para la partición con el grupo de archivos SQL a utilizar
CREATE PARTITION SCHEME [MiNombreDeSchema]
AS PARTITION [MiFuncionDeParticion] ALL TO ([PRIMARY]) <------- Nombre del grupo de archivos de SQL Server.

PASO 3: Se crea la tabla que va a ser particionada
CREATE TABLE [dbo].[MiTabla] (
[CAMPO1] [int] NOT NULL,
[CAMPO2] [int] NOT NULL,
[CAMPO3] [char](15) COLLATE Modern_Spanish_CI_AS NOT NULL,
[CAMPO4] [char](15) COLLATE Modern_Spanish_CI_AS NOT NULL,
[CAMPO5] [float] NULL
) ON [MiNombreDeSchema] ([CAMPO3])

Existen mas valores de configuración para realizar este tipo de particiones.
Si alquien quiere saber mas...... en la documentación de SQL hay más información y si no, pues podeis preguntar lo que querais.

Saludos,

Yo tengo una tabla con 45 millones de registros. Como hago para hacer la particíon con SQL Server 2005? En el ejemplo veo que creas la tabla pero se puede hacer sobre una ya creada?

In reply to by Anonimo (not verified)

Las tablas particionadas almacenan los registros separados por particiones, por lo que pasar de una tabla normal a una particionada implicaría mover físicamente todos los datos. No creo que exista ninguna opcion de ALTER TABLE que te permita hacer esto, y si la hubiera seguramente lo que haría es recrear la tabla completa.

Precisamente por el gran volumen de registros que tienes yo te recomendaría crear una tabla vacía particionada, y hacer después una migración de los datos insertándolos en esta tabla particionada, y sin tocar la original, por si algo no sale como esperabas.

Esto además, dependiendo de las condiciones del entorno, te permitirá hacer alguna prueba de rendimiento sobre ambas tablas para comprobar que el particionamiento realmente te beneficia.

Ya nos explicarás..

 

In reply to by Carlos

[quote=carlos]

Las tablas particionadas almacenan los registros separados por particiones, por lo que pasar de una tabla normal a una particionada implicaría mover físicamente todos los datos. No creo que exista ninguna opcion de ALTER TABLE que te permita hacer esto, y si la hubiera seguramente lo que haría es recrear la tabla completa.

Precisamente por el gran volumen de registros que tienes yo te recomendaría crear una tabla vacía particionada, y hacer después una migración de los datos insertándolos en esta tabla particionada, y sin tocar la original, por si algo no sale como esperabas.

Esto además, dependiendo de las condiciones del entorno, te permitirá hacer alguna prueba de rendimiento sobre ambas tablas para comprobar que el particionamiento realmente te beneficia.

Ya nos explicarás..

 

[/quote]

Exacto...
Particionar una tabla que ya contiene registros los veo una temeridad y más con semejante volumen de registros.
En cualquier caso, creo que no se puede hacer sobre una tabla ya existente.

Saluditos,

In reply to by josimac

Ok.

Voy a realizar la prueba.

Se puede realizar partición sobre cualquier tipo de datos?

Por ej me serviria realizar la particion por un campo "usuario" que es un varchar.

Si me aparecen nuevos usuarios en la tabla, puedo agregar nuevas particiones?

In reply to by Anonimo (not verified)

Para particionar la tabla has de definir los rangos en los que se han de agrupar los registros. Para ello se utiliza la función de particionamiento, que te permite definir estos grupos a partir de los valores de campos de los registros.

Estos campos pueden ser de diferentes tipos de datos. Puedes utilizar campos varchar, de fecha, enteros, etc.

Los nuevos registros entrarán en la partición que les toque según tengas definida la función de particionamiento.

Lo normal es crear rangos, por fechas, o por orden alfabético o numérico.

Aunque se puede hacer, yo no te aconsejaría crear una partición para cada usuario. Primero por lo que tu mismo dices, con cada nuevo usuario tendrías que crear una nueva partición. Segundo, seguro que la distribución de registros por usuario no es muy homogénea, lo más eficiente es que no haya demasiadas diferencias de volumen entre las particiones.

In reply to by Xóchitl Selene (not verified)

Hola Xóchitl Selene

Los valores que pongas en la función de partición son utilizados como rangos SIEMPRE.
Es decir, si miras el siguiente ejemplo:

Crear una función de partición
CREATE PARTITION FUNCTION [MiFuncionDeParticion] (char(1))
AS RANGE RIGHT FOR VALUES ('A', 'G', 'M', 'Z')

Se comportará creando 5 grupos:
1.) < 'A'
2.) >= 'A' y < 'G' (es decir, de la A a la F)
3.) >= 'G' y < 'M'
4.) >= 'M' y < 'Z'
5.) >= 'Z'

Esto te funcionará seguro.

Saludos,

In reply to by josimac

Muchas gracias josimac me ha servido mucho :).

 

Tengo otra consulta..

Para hacer un particionamiento vertical como sería??.. Entiendo en teoría q ese particionamiento es para dividir una tabla en varias con menos campos en una relación 1:1, y que juntándolas se forma la misma tabla inicial.. Pero esto significa crear nuevas tablas con los campos divididos??.. No se puede hacer esto de forma lógica tal como se hace en el particionamiento horizontal?? o cómo podría hacerlo para no tener q crear nuevas tablas?

 

De antemano muchas gracias..

In reply to by Xóchitl Selene (not verified)

Hola de nuevo.

Si me permites la pregunta, ¿para que quieres hacer algo así?
Desde el punto de vista transaccional vas ha incrementar las escrituras en bbdd.
Desde el punto de vista de reporting o dw te verás en la obligación de hacer un diseño lógico del tipo snow-flake con lo que eso comporta (más joins para desnormalizar las tablas).

Si lo que quieres es "particionar" esos datos para , por ejemplo, crear diferentes orígenes de datos que alimenten un cubo OLAP puedes hacerlo mediante vistas de la tabla.

Si nada de que lo que te he dicho te convence.... entonces necesito que me contestes la primera pregunta que te hago.

Saludos,

In reply to by josimac

 

 

Gracias. Es parte de una práctica de bases de datos distribuidas :). Supongo que tendré que recurrir a la creación de las nuevas tablas.

Por otra parte, regresando al script de particionamiento.. despues de crear la funcion y el esquema de partición he intentado crear la tabla de la siguiente manera:

 

CREATE TABLE articulos
(
  ArtID int identity(1,1) NOT NULL,
  ArtLetra char(1) COLLATE Modern_Spanish_CI_AS NOT NULL,
  CONSTRAINT PK_Art PRIMARY KEY(ArtID)
) ON practicalAbcDistributionScheme(ArtLetra);
GO

 

pero al ejecutar me muestra el siguiente mensaje:

 

La columna 'ArtLetra' es una columna de particionamiento del índice 'PK_Art'. Las columnas de particionamiento de un índice único deben ser un subconjunto de la clave de índice.

 

--

 

le quito la linea que hace referencia al campo llave (  CONSTRAINT PK_Art PRIMARY KEY(ArtID) )

y el script es ejecutado de manera correcta.. por qué sucede eso??

 

Mi solución es declarar los campos sin llaves y después modificarlas para indicarles los campos llave.. pero como se hace para no tener que hacerlo así?

 

 

 

 

 

In reply to by Xóchitl Selene (not verified)

Cuando declaras el campo "ArtID" como autoincremental le estás asignando una primary key. Cuando la función de particionamiento genere más de una tabla vas a tener codigos iguales en distintas tablas que no van a servirte para nada.

Si quieres utilizar claves surrogadas las vas a tener que gestionar en tiempo de carga, es decir, calcularlas tu. Creo que se queja de eso.

Hola,

 

Mi caso es parecido sólo que las particiones están en función de la fecha. Tenemos una tabla ya particionada con unos 40 mill de registros. El caso es que sólo debemos guardar 6 meses, quizás me explico mejor con un ejemplo. Pongamos que estamos en Junio del 2010, mi tabla tendrá 6 particiones ordenadas por fecha que serán las correspondientes a enero, febrero, marzo, ..., y junio, pero al llegar julio, debemos desprendernos de enero para así seguir teniendo 6 particiones que irían desde febrero hasta julio.

¿Me podríais orientar cómo puedo hacer este proceso de reciclado de particiones?

 

Muchas gracias.

In reply to by Javi (not verified)

Tendrás que hacerlo mediante un script que elimine la partición del mes más antiguo, y cree la del nuevo mes.

Es fácil decirlo, pero no tan trivial de implementar. La eliminación de la partición de ha de hacer de una manera eficiente, sobretodo la tabla particionada es grande, como es tu caso. Hay que evitar que se termine haciendo un delete de cada registro.

Te enlazo algunas entradas del blog de Dan Guzman, que presenta una solución para mover la partición a una tabla auxiliar, sobre la que después se puede hacer un truncate, e incluye los scripts para hacerlo:

Sliding Window Table Partitioning

Automating Sliding Window Maintenance

Automating RANGE RIGHT Sliding Window

Te enlazo de paso Partition Details and Row Counts, que te puede ser de utilidad para obtener información de las particiones.

Hola

Saludos

 

Se que el post es viejo pero como se hace esto:

 

Tengo una tabla de ventas con 15.000.000 Millones de registros, dentro de mi tabla hay un campo FechaHora que es la fecha donde se realizo la venta.
 

Requiero que se haga una particion de la tabla por cada mes del año

 

Como podria hacer esto ? 

En el ejemplo que colocas tu usas RANGE LEFT FOR VALUES ('VALOR1', 'VALOR2', 'VALOR3')

Como podria usar el campo de FechaHora de mi tabla para realizar esta particion?

 

Estoy usando SQL SERVER 2008 R2

 

y que significa o que haces con esto

CREATE PARTITION SCHEME [MiNombreDeSchema]
 AS PARTITION [MiFuncionDeParticion] ALL TO ([PRIMARY]) , osea esto es el archivo MDF y de LOG de la base de datos?


 

quiero que me ayudes en un examen k tengo pero la ocacion es k no e ido a clases por motivos problemas ....

Problema con funcion escalar

Problema con funcion escalar gilson Tue, 03/02/2010 - 12:35

 buen dia a todos, tengo un problema con una funcion escalar, lo que quiero es que me devuelva un tipo de dato money pero al ejecutar la funcion me retorna 0.00, y no se por que esta sucediendo eso 

aqui les dejo la codificacion de la funcion

USE [sisfinan]
GO
/****** Object:  UserDefinedFunction [dbo].[obtener_total_interes_sistema_aleman]    Script Date: 03/02/2010 00:00:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create function [dbo].[obtener_total_interes_sistema_aleman]
              (
               @deuda money,
       @plazo smallint,
       @tasa real,
      )
returns money
as
begin
declare @monto_interes money,@id_cuota smallint, @total_interes money
select @id_cuota = 1;
while @id_cuota &lt;= @plazo
begin
select @monto_interes  = @monto_interes + @deuda *(@tasa/100),
    @total_interes  = @total_interes + @monto_interes,
@deuda  = @deuda - @capital
        select @id_cuota = @id_cuota +1;          
end;
return isnull(@total_interes,0);

muchas gracias por su ayuda

saludos

 

 

 

 

 

Creo que lo que te falta es inicializar las variables que utilizas en los cálculos. Seguramente intervienen en las operaciones con valor nulo, y por eso el resultado también es nulo.

Asígnale valor inicial 0 a monto_interes y a total_interes, y asegúrate de que deuda se pasa también con un valor definido.

In reply to by Carlos

 hola carlos, ayer justamente inicialize las variables y me funciona perfectamente, muchas gracias por tu ayuda, ahora tengo 

otro pequeño problema, al ejecutar un procedimiento me sale este error  Mens 2732, Nivel 16, Estado 1, Procedimiento

sp_ins_propuesta, Línea 449 El número de error 8134 no es válido. El número debe estar comprendido entre 13000 y 2147483647 y no puede ser 50000., 

a que se debera este error por que todos los errores capturo con raiserror('mensaje',16,1)

muchisimas gracias por tu ayuda

saludos

 

 

 

In reply to by Anonimo (not verified)

Habría que ver el código del PROCEDURE, pero en algún lugar se tiene que estar asignando el número 8.134 como código de error. Puede que sea en alguna función o procedure a los que llame el principal.
Deberías poder encontrarlo y cambiar ese número por uno mayor que 13.000.

Problemas con SQL Server 2000

Problemas con SQL Server 2000 gustavoagk Thu, 11/13/2014 - 08:59

Hola;
El motivo de mi tema, es un problema que se ha estado presentando en una aplicación que utiliza SQL Server 2000.
En nuestra empresa, contamos con una aplicación que se desarrollo en Visual basic 5.0, y la DB se encuentra en sql server 2000.

Resulta que hace ya varias semanas ciertos usuarios han tenido problemas de conexion desde la aplicacion de su pc a la DB.

Les indica que la aplicacion no responde, y errroes de conectividad.

Lo que me gustaria saber, que pruebas podria analizar o determinar en el sevidor de base de datos para poder determinar el performance de la DB y corregir en caso de que sea el servidor.

Agracederia su apoyo con respecto a esta problematica.

Saludos

Hola Falta mucha informacion, pero a grandes rasgos:

  • En que estado se encuentra el servidor?
  • Cómo se ha configurado?
  • Cual ha sido su mantenimiento?
  • Cual es la estrategia de indexación, tratamiento de datos obsoletos?
  • Como y en que medida crecen los transaccionales?
  • Se ha cambiado/actualizado algo en hard/soft en pc cliente, servidor?
  • Que tipo de servicios ha de aguantar el ancho de banda y, cual es la proporción de cada uno de ellos?

Revisa los informes de sql y añadir trazas, revision de monitor y revsion de esperas.

Respondiendo alguna de estas preguntas y posiblemente alguna mas, esta la respuesta:

Lo muy fácil seria actualizar a ,minimo, 2005 y redimensionar el hardware. Pero suena a típico problema de arquitectura, diseño y nulo mantenimiento (los planes de mantenimiento por si mismos son insuficientes), pero en esto ultimo estoy especulando.

Un saludo DBA

Problemas en conexiones remotas a servidores de SQL Server

Problemas en conexiones remotas a servidores de SQL Server Carlos Wed, 05/04/2016 - 20:24

Recientemente he tenido problemas para establecer una conexión remota a un servidor SQL Server 2012 de mi red. La conexión estaba bien definida, los puertos estaban abiertos, el server permitía conexiones remotas y, sin embargo, no había manera de conectar desde otra máquina, con SQL Server Management Studio, por ejemplo.

Después de mucho revisar descubrí que el problema venía de las opciones de configuración de red de SQL Server, que no estaban bien definidas en el servidor. Lo apunto aquí por si le pasa a alguien más. En mi caso tenía deshabilitado el protocolo 'Canalizaciones con nombre', y ha de estar habilitado, y en las propiedades del protocolo TCP/IP faltaba incluir la IP del servidor, y el puerto TCP, normalmente el 1433.

Todo esto se configura abriendo el 'Administrador de configuración de SQL Server' o  'SQL Server Configuration Manager' desde el menú de aplicaciones de Microsoft SQL Server, subcarpeta 'Herramientas de configuración'.

Como una imagen vale más que 1.000 palabras, esta es la captura de pantalla de la configuración que me ha resuelto el problema de conexión remota a SQL Server.

Protocolos de red para SQL Server

Configuración de propiedades TCP/IP para conexión remota con SQL Server

Espero que sirva de ayuda!

 

Sos Grande Amigo Gracias por tu aporte. Mi problema era una conexion que se desconectaba, pero desde otro segmento de la red. En el local si funcionaba, el remoto por vpn NO, me ayudo mucho tu aporte para revisar...

Muy buenas noches,

Anteriormente yo tuve el mismo problema, solo que en mi caso y, al utilizar un equipo con Windows, tuve que hacer una configuración adicional en el "Firewall de Wondows". El cual consistia en generar una regla de entrada y una regla de salida con el puerto 1433. El procedimiento es el siguiente:

  • Hay que entrar en Panel de Control - Firewall de Windows.
  • Después situarse en configuración avanzanda.
  • Seleccionamos la opción de regla de entrada/Nueva regla.
  • Dentro de la ventana que aparece (Tipo de regla) seleccionamos "Puerto" y le damos siguiente.
  • Apare la ventana con titulo "Protocolo y puertos", aquí se deja la opción de TCP seleccionada y escribimos el mismo puerto que se habilito en 'Administrador de configuración de SQL Server", es decir, el 1433 y damos siguiente.
  • Se selecciona permitir la conexión y se da siguiente.
  • El siguiente  punto o ventana que aparece es Perfil se deja como esta y se presiona "Siguiente".
  • Posteriormente pide se asigne un nombre al puerto, en mi caso le puse "SQL Giro", que es el sistema de nóminas con el que estamos trabajando.
  • Por último damos en finalizar.
  • Ahora tenemos que ir al apartado de "Reglas de salida" y damos de nueva cuenta "Nueva Regla" e iniciamos con los mismos pasos antes mencionados.

De esta manera yo desde mi lugar de trabajo, el cual esta en otra oficina aunque en el mismo edificio pude acceder a la Base de Datos de SQL Server, aunque en nuestro caso es 2008.

Hay otra opción que te pudiera recomendar, el cual es mediante una NoIP realizar la triangulación de acceso a tu servidor, pero para ello se debe de hacer una configuración previa en el router que se utiliza y conectarte por ejemplo desde tu casa.

 

Para que quede un poco mas claro lo anterior, pongo un tutorial donde viene explicado lo que menciona Carlos y la configuración adicional que les comento.

Video:

 

Saludos.

Martín Flores.

In reply to by Martín Flores

Gracias por tu aportación Martín.

Aprovecho para añadir que, aunque no es lo habitual, si en un mismo servidor se instala más de una instancia de SQL Server el servicio 'SQL Server Browser' ha de estar habilitado, ya que este servicio dirige las conexiones entrantes hacia el puerto correspondiente según la instancia de la conexión.

Tener SQL Server Browser deshabilitado es otra posible causa de error de conexión remota en servidores con varias instancias de SQLServer. Este servicio también necesita disponer de un puerto UDP abierto en el firewall, por defecto el 1434.

Saludos!

SQL Server

SQL Server lagunas876 Thu, 12/17/2015 - 16:46

Me sale el siguiente mensaje de error cuando una aplicación envía una consulta:

Msj 605, nivel 21, estado 3, línea 1

Intentar recuperar la página lógica (1: 224) en la base de datos de 11 fracasado. Pertenece a la unidad de asignación no 72058253744865280-72057594040287232

¿Que esta mal?

Si DBCC CHECKDB o CHECKTABLE informa de un error (que debe ser Msj 2533), la página está dañado o una página incorrecta. Usted debe restaurar desde una copia de seguridad para resolver el problema. Si no puede restaurar desde una copia de seguridad, utilice las opciones de reparación con DBCC CHECKDB. Para encontrar la causa de este problema se debe utilizar técnicas como lo haría con otros errores de corrupción de base de datos que incluye:

Compruebe si hay problemas de hardware o de nivel de sistema (Una herramienta como SQLIOSim puede ser útil para hacer esto. Barcos SQLIOSim con SQL Server 2008 y SQL Server 2008 R2 y no requiere una descarga por separado)

Asegúrese de que tiene la opción de base de datos = CHECKSUM PAGE_VERIFY encendido. Si bien es posible todavía encontrar un 605 error Msj con suma de verificación habilitado (Ex. "Escribidor" problema o una página incorrecta proporcionada desde el sistema de E / S), lo que permite la suma de comprobación puede proporcionar la prueba definitiva de que la página fue modificada de forma incorrecta en el que el sistema de E / S .

Trate de restaurar una copia de seguridad de base de datos que sabe que será "limpio" (sin errores de CHECKDB) y copias de seguridad del registro de transacciones sabes abarcan el momento en que se encuentra el error. Si usted puede "reproducir" este problema mediante la restauración de una copia de seguridad de base de datos "limpios" y los registros de transacciones póngase en contacto con soporte técnico de Microsoft para obtener ayuda.

Para obtener más información acerca de los problemas de corrupción de base de datos ver aquí:

Recovery Toolbox for SQL Server https://sql.recoverytoolbox.com/es/

Saltarse las constraints en SQL Server

Saltarse las constraints en SQL Server Anonymous (not verified) Tue, 09/08/2009 - 18:13

Tengo que hacer una carga masiva de datos en muchas tablas de SQL Server que tienen definidas bastantes constraints, sobretodo claves foráneas (FK) entre tablas.

He intentado seguir un orden para cargarlas para que no me devuelva errores de restricciones de integridad, pero son tantas que no consigo encontrar el orden correcto.

Estoy pensando ya en eliminar las FK de todas las tablas, pero seguro que hay alguna manera mejor de solucionarlo.

Alguien me puede ayudar?

Las constraints de una tabla de SQL Server se pueden desactivar temporalmente con la opción NOCHECK CONSTRAINT ALL de ALTER TABLE.

El comando quedaría así:

ALTER TABLE tabla NOCHECK CONSTRAINT ALL;

Con esto se desactivan y puedes hacer la carga de datos sin que te molesten las FK

 

Después, para volver a activarlas sólo tienes que hacer este otro ALTER TABLE:

ALTER TABLE tabla WITH CHECK CHECK CONSTRAINT ALL;

Reactiva las constraints chequeando que los datos de las tablas las cumplan

 

Si quieres volver a habilitarlas sin validar los datos que hayas cargado, aunque no es muy recomendable también se puede hacer:

ALTER TABLE tabla  CHECK CONSTRAINT ALL;

 

Espero que te sea de ayuda,

 

¿Y no habrá ningun tipo de problema en cuanto los datos/registros que hayas modificado una vez vuelvas a activar las CONSTRAINTS?

Por ejemplo si yo cambio el valor de un campo, el cual lo esta cogiendo de una primary key de otra tabla, al volver a a activar las CONSTRAINTS, ¿No habrá conflictos?

In reply to by Jaime (not verified)

Justamente al desactivar los constraints pierdes la garantía de que los datos respetan el modelo relacional, y entonces la responsabilidad es tuya con las modificaciones que hagas, que una vez terminadas han de seguir manteniendo la integridad referencial del modelo, o al menos de los constraints que haya definidos.

Es decir, que tendrás conflictos al reactivarlos sólo si no respetas las reglas que definen los constraints.

Utilización del monitor del sistema para supervisar recursos

Utilización del monitor del sistema para supervisar recursos Carlos Wed, 07/21/2010 - 00:53

En el tema de Scripts y consultas útiles de Oracle Fernando pregunta cómo consultar con una query los cursores abiertos en la base de datos.

No sé si se puede hacer directamente con una consulta, como en Oracle, pero como mínimo se puede utilizar la utilidad Monitor del sistema para controlar temas de rendimiento, y consultar indicadores y medidas de rendimiento sobre cursores y otros objetos de la base de datos y del sistema.

Para abrir la aplicación hay que ejecutar en el Windows donde esté instalada la instancia de SQL Server, desde el menú inicio o desde linea de comandos el programa perfmon.

Enlazo la ayuda en linea de Microsoft TechNet donde se hace referencia a los objetos de SQL Server que se pueden monitorizar, y también a la parte que concreta los indicadores del objeto Cursor Manager by Type, cuyo primer contador es el número de cursores activos.

Si alguien conoce una manera diferente o más sencilla de monitorizar los cursores de la base de datos le agradeceremos que lo comparta :)

In reply to by Carlos

Hola Carlos
Estoy un poco desesperado, no lo encuentro por ninguna parte, sabrías alguna query para sacar los cursores abiertos, pero en SQL Server??

muchas gracias por tu ayuda.

In reply to by Fernando (not verified)

Fernando, he abierto este tema con lo que he podido encontrar, que es monitorizar indicadores sobre cursores con la utilidad Monitor del Sistema.

No es justo lo que buscas, pero espero que te sirva de ayuda.

Información, tips y utilidades sobre SQL Server Integration Services (SSIS)

Información, tips y utilidades sobre SQL Server Integration Services (SSIS) Dataprix Tue, 04/26/2022 - 12:45

 

 

Tips sobre SQL Server

Recopilación de dudas técnicas, consultas, tips y opiniones de SQL Server Analysis Services, motor de datos analíticos de Microsoft SQL Server.Recopilación de dudas técnicas, consultas, tips y opiniones de SQL Server Integration Services, la herramienta ETL de Integración de datos de Microsoft SQL Server.

Cambio del proyecto de modo implementación de paquetes a implementación de proyectos

Cambio del proyecto de modo implementación de paquetes a implementación de proyectos Carlos Tue, 12/27/2016 - 20:46

Para cambiar el modo de implementación de paquetes a proyectos, y poder desplegar el proyecto en el catálogo IS de SQL Server se puede utilizar el asistente que se inicia fácilmente con un clic en el botón derecho sobre el proyecto, en el explorador de soluciones, y seleccionando la opción 'Convertir al modelo de implementación de proyectos'.

Es todo muy intuitivo menos, al menos para mi, el paso de seleccionar las configuraciones que se han de convertir. En mi caso utilizaba configuraciones para alimentar variables con valores almacenados en la tabla SSIS Configurations de SQL Server, y los paquetes que utilizaban estas configuraciones me salían con un estado 'No se puedo conectar con el servidor', error de inicio de sesión..

Este problema se soluciona con la opción 'Agregar configuraciones..', que permite volver a introducir los datos de conexión y 'leer' las configuraciones de la tabla SSIS Configurations. Se agrega una nueva configuración con el asistente para cada una de las que está en estado 'No se pudo conectar..' y después se seleccionan sólo las nuevas, que ya han de mostrar un estado 'Aceptar'.

Con esta acción se consigue pasar la validación, y el asistente ya puede realizar la conversión de los paquetes a modo proyecto, aunque el asistente en realidad no habilita la configuración en los paquetes, y si es necesario que las variables del package sigan recogiendo sus valores de los que se guardan en la tabla [SSIS Configurations] de la base de datos SQL Server, hay que habilitar después en cada paquete la configuración de paquetes, y agregar de nuevo las definiciones de configuraciones que se estaban utilizando en el modo de implementación de paquetes.

Como a partir de SSIS 2012 la tendencia es utilizar parámetros y variables de entorno en las implementaciones de proyecto, la opción de seguir utilizando configuraciones de paquetes en 'modo proyecto' está un poco escondida, pero se puede utilizar y funciona.

Para habilitar la configuración de paquetes a partir de SSIS 2012 hay que situarse en la pestaña de 'Flujo de control' y acceder a las propiedades haciendo click en la pantalla de fondo, o seleccionar propiedades después de hacer clic con el botón derecho. En la sección 'Varios' de propiedades del flujo del paquete la propiedad 'configurations' permite acceder al asistente para habilitar y crear configuraciones de paquetes. Después de habilitarlo, al crear una nueva configuración, si ya existía una configuración en la tabla [SSIS Configurations], el asistente lo detecta y permite reutilizarla.

Habilita configuracion de paquetes a partir de SSIS 2012

También habrá que revisar las variables del paquete, y cambiar la expresión que haya generado el asistente de conversión, que será algo así como '$Package::variable' por la variable de usuario, en este caso sería 'User::variable', y eliminar también los parámetros que el asistente genera, y que ya no se utilizarán porque se han cambiado por las variables de usuario que se alimentan ahora desde la tabla de configuración de SQL Server, [SSIS Configurations].

 

Carga masiva de ficheros

Carga masiva de ficheros roberto Fri, 05/22/2009 - 13:39

Buenas,

tengo un problema con SSIS, estoy intentando hacer una carga sobre una tabla desde varios ficheros que tengo en un directorio pero me veo obligado a crear un origen de datos para cada fichero. El problema añadido es que los ficheros cambian de nombre segun la fecha, asi que el proceso no me sirve para posteriores cargas.

¿Hay alguna manera de definir un origen de datos que cargue todo el contenido de un directorio, o algun tipo de script que haga un union de los ficheros?

 

Gracias,

Roberto 

Hola Roberto,

a mi me paso lo mismo hace unas semanas, intentando hacer una carga en la que se veian involucrados varios ficheros con el mismo formato pero diferente nombre. Es algo habitual que recibas ficheros diariamente y que el sistema tenga que cargarlos sin tener que especificarle el nombre de fichero exacto.

Ya que no especificas la version, te digo lo que sé de la que yo estoy usando, SQLServer 2008.

En esta version me encontre con que el origen de tipo fichero plano te obliga a crear una conexion a fichero especificando el nombre exacto. Para hacer lo que quieres, previamente tienes que ir al panel Connection Managers (debajo del area de diseño) y crear una conexion a multiples ficheros. La conexion a multiples ficheros no esta disponible por defecto en el menu contextual, asi que tendras que ir por New Connection... y ahi te saldra una lista con todas las conexiones que acepta SSIS, seleccionas MULTIPLEFLATFILE y en el dialogo de configuracion si que te deja elegir directorio y multiples ficheros mediante mascara. Una vez hayas creado la conexion a multiples ficheros, añades el origen de datos a fichero plano en el diseñador y en vez de crear la conexion a un fichero con nombre exacto veras que tienes la conexion a multiples ficheros en la lista desplegable. La seleccionas, haces los mapeos y ya esta!

 

Espero que te haya servido.

Conectar SSIS con MySQL como destino

Conectar SSIS con MySQL como destino estebi Tue, 05/19/2009 - 17:21

Estoy intentando conectar desde SSIS con una base de datos MySQL como destino, para insertar datos, y no encuentro la manera de que funcione. He probado el OLEDB MySQL Provider y conecta, pero en lugar de mostrarme la BD que yo le indico, conecta con el Information_Schema de MySQL. Si pruebo igualmente a hacer algo me crea tablas, pero luego no las ve.

Alguien sabe cómo puedo hacer para cargar datos en MySQL sin problemas?

 

Prueba cambiando a un ODBC, ya sé que es antiguo pero funca.

Consultas y comandos para controlar ejecuciones de packages del catálogo de SSIS

Consultas y comandos para controlar ejecuciones de packages del catálogo de SSIS Carlos Wed, 10/26/2016 - 19:53

Consultar las ejecuciones del catálogo de SSIS activas, y parar una ejecución

Después de conectar a la base de datos del catálogo, para comprobar las ejecuciones que hay activas actualmente se puede ejecutar la siguiente query:

select * from catalog.executions where start_time is not null and end_time is null

En los resultados de esta consulta, el primer campo que podremos ver es el execution_id, que es el id de la ejecución del proceso, el mismo que podremos ver desde el entorno gráfico si consultamos las operaciones activas haciendo click con el botón derecho sobre la base de datos del catálogo, y seleccionamos la opción 'Operaciones activas'.

Desde el mismo entorno gráfico se puede utilizar el botón 'Detener' para parar una ejecución, aunque también se puede hacer con un comando de consulta utilizando el execution_id que ha salido en la consulta anterior (si, por ejemplo el id fuera 12345):

Exec catalog.stop_operation @operation_id =  12345

 

Consultar los mensajes de ejecuciones de paquetes del catálogo de SSIS

Query para consultar los mensajes de las ejecuciones de los paquetes (en este caso de la última ejecución realizada):

SELECT event_message_id,MESSAGE,package_name,event_name,message_source_name,package_path,execution_path,message_type,message_source_type
FROM   (
       SELECT  em.*
       FROM    SSISDB.catalog.event_messages em
       WHERE   
           em.operation_id = (SELECT MAX(execution_id) FROM SSISDB.catalog.executions)
           AND event_name NOT LIKE '%Validate%'
       )q
--WHERE --event_name = 'OnPostExecute' and
        -- message like '%Finalizado%'and
        -- package_name = 'Package.dtsx'
        -- execution_path LIKE '%<ejecutable>%'
ORDER BY message_time DESC

Cómo utilizar Google Sheets como origen o destino de SSIS

Cómo utilizar Google Sheets como origen o destino de SSIS Carlos Wed, 09/04/2019 - 09:10

Google sheets dphSe puede hacer descargando la API de Google, y creando un script para leer y escribir en una hoja de cálculo de Google Docs.

Enlazo los dos sitios que he encontrado sobre cómo hacerlo:

http://www.statslice.com/leveraging-google-docs-with-ssis

http://sqldeveloperramblings.blogspot.com.es/2010/06/ssis-google-spreadsheets-data-source.html

Otra opción más sencilla, pero de pago sería utilizar el componente que ha desarrollado cdata:

http://www.cdata.com/drivers/gsheets/ssis/

Error de SSIS al conectar con Excel ejecutando desde el catálogo

Error de SSIS al conectar con Excel ejecutando desde el catálogo Carlos Thu, 03/12/2020 - 21:20

Al utilizar Excel como origen de datos en SSIS suele pasar que nuestro sistema es de 64 bits, y el conector de Excel que funciona aún es de 32 bits.

Desde Visual Studio en nuestra máquina cliente se suele solucionar marcando en las propiedades del proyecto que la ejecución se fuerce en 32 bits en lugar de 64, pero después puede pasar que despleguemos el paquete en un servidor SQL Server, y el conector no funcione.

Aunque lo ejecutemos igualmente en 32 bits, marcando en las propiedades avanzadas de la ejecución del paquete el check de '32-bit runtime', (o haciendo lo mismo en un job que lance el paquete si no queremos tener que marcar el check en cada ejecución), si el server no tiene el driver de 32 bits, que se suele instalar con las office, y en la máquina cliente sí solemos tener, el resultado suele ser un fallo en la ejecución. 

Ejecutar paquetes SSIS en 32 bits

Este es el error que registra el catálogo:

Error: El proveedor OLE DB Microsoft.Jet.OLEDB.4.0 solicitado no está registrado. Si el controlador de 64 bits no está instalado, ejecute el paquete en modo de 32 bits

Si hemos hecho que paquete se ejecute en modo de 32 bits y a pesar de ello falla, entonces lo que tiene que faltar es el driver, así que normalmente la solución es tan sencilla como descargar de esta dirección de la página de descargas de Microsoft el componente redistribuible de 32 bits del motor de access y ejecutarlo en el servidor.

Componente redistribuible de Access

La otra solución es esperar a que Microsoft se decida a sacar un conector de 64 bits que funcione con Excel y Office, que este tema ya huele.. ;)

 

Error de memoria insuficiente en el buffer con SSIS

Error de memoria insuficiente en el buffer con SSIS estebi Tue, 09/08/2009 - 19:06

Cuando ejecuto un flujo de SSIS me falla una tarea que se encarga de cargar una tabla a partir de los datos de otra. Se produce el siguiente error de memoria:

Hresult: 0x80004005  Description: "There is insufficient memory available in the buffer pool

La tabla es bastante grande, tiene más de 1 millón de filas. Supongo que será cuestión de tocar alguna variable o parámetro de memoria, pero no se dónde. Yo he probado a reducir los valores de DefaultBufferMaxRows, DefaultBufferSize y EngineThreads en las propiedades de la Task, pero sigo obteniendo el mismo error.

Puedo seguir probando a tocar estas cosas, pero si alguien sabe cómo solucionarlo le agradezco la ayuda.
 

Pues no tengo ni idea, pero en Microsoft deberian hablar de ello, ya que me parece muy raro que te de un error de memoria solo por tener mas de 1 millón de filas.

Se supone que una ETL tiene que estar preparada para tratar estas cantidades de registros.

Has comentado los valores DefaultBufferMaxRows, DefaultBufferSize y EngineThreads, pero has probado "max server memory"?

Otra cosa, si trata el proceso de carga como una transaccion, ¿puedes evitarlo de alguna manera? para que no se coma el segmento de rollback.

Si lo solucionas ya nos avisaras!

Saludos!

In reply to by David

He ampliado el valor de DefaultBufferMaxRows al número de filas que tiene la tabla y por fin ha funcionado.

En el apartado Adjust the sizing of buffers del capítulo Improving the Performance of the Data Flow de la documentación online de MSDN explican que para calcular el tamaño del buffer que va a utilizar, el motor lo primero que hace (luego hace otros cálculos) es multiplicar el tamaño estimado de una fila por el valor de DefaultBufferMaxRows. Supongo que al ser el valor por defecto muy inferior al del número de filas, el buffer al final se quedaba corto.

Ya que he estado buscando información sobre este problema de memoria comparto dos enlaces que pueden resultar de ayuda:

David, no he llegado a probar lo que comentas porque lo he podido solucionar antes, pero gracias por el soporte!

Introduccion a la metodologia SQLBI

Introduccion a la metodologia SQLBI Dataprix Thu, 10/02/2008 - 00:26

En SQLBI han preparado el primer borrador de un documento que propone una metodología para implementar soluciones de BI con las herramientas de la suite de Business Intelligence de Microsoft.

Aunque la metodología se enfoca hacia estas herramientas, los conceptos son extensibles a cualquier proyecto de BI. Esta es la traducción de los títulos principales del índice:

Introducción

Arquitectura de una solución de BI

Clasificación de soluciones de BI

Actores

Usuario / Cliente

Analista BI

Microsoft BI Suite

Arquitectura

Componentes de una solución de BI

La metodología de Kimball

Cuándo y porqué utilizar la metodología Kimball

La metodología Inmon

Cuándo y porqué utilizar la metodología Inmon

Construyendo la arquitectura

Diseñando los datos relacionales

Adjunto esta primera versión del documento, y espero que dentro de poco pueda actualizar el post con otra versión con nuevos capítulos..

Una vez publicada la metodología, Alberto Ferrari y Marco Russo nos obsequian con el manual SQLBI Methodology at work, una aplicación práctica de la misma utilizando como base recursos que proporciona Microsoft para probar las funcionalidades BI de SQLServer:

Los autores muestran como reconstruir la solución BI de Microsoft aplicando su propia metodología para obtener para obtener así otra versión de esta solución. No se atreven a decir que mejor que la original, eso tendremos que juzgarlo los que la probemos..

Traduzco a continuación el índice del documento:

 

Introducción

La imagen completa

El proceso de análisis

Análisis del paquete de ETL

Análisis de las vistas de orígenes de datos de SSAS

Utilización de esquemas

Base de datos del Data Warehouse

Área de análisis Financiera

Área de análisis Común

Área de análisis de Producción

Área de análisis de Ventas

Utilidad del Nivel del Data Warehouse

Base de datos espejo OLTP

Carga del espejo OLTP

Vistas del espejo OLTP

Base de datos de configuración

Configuración del Area de análisis de Ventas

Ficheros CSV transformados en tablas

Fase de ETL del Data Warehouse

Prestar atención a los planes compilados para las vistas

Valores Actuales/Históricos

Tipos de datos XML

Vistas de Data Mart

Fase de ETL de los Data Mart

Tratamiento de las Claves Subrogadas

Tratamiento de Valores Ficticios

Implementación de los cubos

Vista de Origen de Datos

Canal de Ventas

Promociones

Documentación del proyecto

Ayuda - Jobs - SSIS -

Ayuda - Jobs - SSIS - jatb Wed, 07/17/2013 - 17:41

Hola con todos,

Tengo el siguiente caso:

Mi carga de datos esta hecha en DTS 2000 y estamos en la migracion a SSIS, con el programa DTS Backup 2000 los migre a SSIS hasta aquí todo perfecto.

Cree las tareas dentro del paquete de SSIS lo ejecuto manualmente el resultado es ok.

El paquete lo guardo Package Collection SQL Server, pongo el servidor en la opcion de Proetction Level Do not save sensitive data, voy al Management studio me conecto a Integratios Services y en la carpeta MSDB esta el paquete le doy click derecho run package y el estado de finalizacion es ok.

Cuando creo el job me da el siguiente error al momento de ejecutar:

Porque se pierde la conexión al momento de crear el JOB, cuál puede ser una posible solución ?

Error: 2013-07-17 10:12:12.01     Code: 0xC0202009     Source: XXXX  Connection manager "XXX"     Description: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80004005.  An OLE DB record is available.  Source: "Microsoft OLE DB Provider for ODBC Drivers"  Hresult: 0x80004005  Description: "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified".  End Error  Error: 2013-07-17 10:12:12.01     Code: 0xC020801C     Source: Data Flow Task OLE DB Source [1]     Description: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER.  The AcquireConnection method call to the connection manager "XX" failed with error code 0xC0202009.  There may be error messages posted before this with more information on why the AcquireConnection method call failed.  End Error  Error: 2013-07-17 10:12:12.01     Code: 0xC0047017     Source: Data Flow Task SSIS.Pipeline     Description: component "OLE DB Source" (1) failed validation and returned error code 0xC020801C.  End Error  Error: 2013-07-17 10:12:12.01     Code: 0xC004700C     Source: Data Flow Task SSIS.Pipeline     Description: One or more component failed validation.  End Error  Error: 2013-07-17 10:12:12.01     Code: 0xC0024107     Source: Data Flow Task      Description: There were errors during task validation.  End Error  DTExec: The package execution returned DTSER_FAILURE (1).  Started:  10:12:11 AM  Finished: 10:12:12 AM  Elapsed:  0.281 seconds.  The package execution failed.  The step failed.

La conexión que da el error es la migrada de DB2, realice el mismo ejercicio pero solo con la conexión a sql y el resultado es ok.

Ahora al crear un new datasource , provider Native OLD BE\Micro... for DB2.

Existen algunos campos Initial Catalog, package collection y defautl schema, que debe ir ahi como obtengo esa información?

En la pestaña Advance existe DBM2 plataform, Host CCSID y PC code page que es otra duda que tengo.

Hola Jatb. El problema es la encriptación de los paquetes que hace SSIS. Mírate este link: http://support.microsoft.com/kb/918760/es Te recomendaría la creación de un USER PROXY en el servidor SQL-Server que lance los paquetes. Es sencillo de hacer, efectivo y definitivo. Para salir del paso o de manera temporal, puedes editar las conexiones del paquete dtsx dentro del job y añadir al final la coletilla "password=;". Tendrás que hacerlo cada vez que modifiques la dtsx. Saludos,

Carga lenta Desde AS400

Carga lenta Desde AS400 jatb Sat, 03/09/2013 - 00:55
Hola a todos, Estoy haciendo en SSIS 2008 la carga de información de tablas de as400, las tablas pequeñas no tengo problemas me trae bien, pero al traer una tabla de 711534 registros la misma que tiene 253 columnas el tiempo de carga es de alrededor de 40 min lo cual es algo que no sirve, anteriormente lo teniamos en DTS 2000 y el tiempo de carga no es mayor a 2 min. Intentado algunas cosas pero ninguna me da resultado, no se que me recomiendan hacer para poder hacer esto con igual o menor tiempo que la version 2000. Espero sus respuestas. De antemano gracias.

Hola Jonathan

Supongo que ya habréis hecho pruebas, pero me parece una diferencia demasiado grande para venga sólo por el cambio de versión de DTS a SSIS. Yo antes que nada me aseguraría de que no hay algún factor más que os ralentiza esta carga, como saturación de las bases de datos, espacio, bloqueos..

De la parte de SSIS tampoco tengo gran experiencia, pero yo revisaría sobretodo los parámetros de carga, asegurándome de que estuvieran orientados a cargas masivas, sin validaciones ni transformaciones, y utilizando el máximo de memoria posible. Según cómo lo hagas suele ser la opción 'Fast Load', y revisar las opciones 'FastLoadOptions'. 

Te enlazo el post Using SQL Server Integration Services to Bulk Load Data, que comenta bastante detalladamente tres métodos de carga que podrías probar. Si has utilizado OLE DB, por ejemplo, si la revisión de parámetros no te funciona, puedes probar con el componente SQL Server Destination, que según el artículo permite definir propiedades como BATCHSIZE=0 para realizar toda la carga en un solo batch.

You might have noticed that the Advanced screen does not include any options related to batch sizes. SSIS handles batch sizes differently from other batch-loading options. By default, SSIS creates one batch per pipeline buffer and commits that batch when it flushes the buffer. You can override this behavior by modifying the Maximum Insert Commit Size property in the SQL Server Destination advanced editor. You access the editor by right-clicking the component and then clicking Show Advanced Editor. On the Component Properties tab, modify the property with the desired setting:

  • A setting of 0 means the entire batch is committed in one large batch. This is the same as the BULK INSERT option of BATCHSIZE = 0.
  • A setting less than the buffer size but greater than 0 means that the rows are committed whenever the number is reached and also at the end of each buffer.
  • A setting greater than the buffer size is ignored. (The only way to work with batch sizes larger than the current buffer size is to modify the buffer size itself, which is done in the data flow properties.)

Espero que te sea de ayuda,

 

 


Gracias Carlos,

Lei el articulo que me has dicho, pero esto es mas orientado a archivos planos o conexiones entre bases sql, pero de as400 a sql server no sirve.

Te cuento un poco mas para hacer la conexion utilizo el proivder: IBM DB2 UDB for iSeries IBMDA400 OLE DB Provider, al hacer test me da ok, dentro del OLE DB Source utilizo esta conexion compartida y ingreso SQL command y pongo en preview y me muestra la data, esto le uno al OLE DB Destination utilizando la propieda fast load, mapeo los datos y previwe y todo ok.

Cuando mando ejecutar el contenderon me trae un promedio de 20000 por minuto que es un tiempo alto ya que en el DTS 2000 en 2 minutos ya trae los 7mil registros.

Para la tranfornmacion de datos e utilizado Multicast, Derived Column, entre otros pero la respuesta es igual de lenta.

Los epsacios en discos y lo relacionado con la bdd esta muy bien.

Espero alguien me ayude.

Saludos

In reply to by jatb

Bueno, te sirve toda la parte de configuración de los componentes destino, OLE DB o SQL Server Destination. Si no has encontrado nada que ya no hayas probado ya es otra cosa.

Otra cosa que puedes hacer es separar la importación de datos de las transformaciones, es decir, hacer una carga directa desde OLE DB Source a OLE DB Destination, que puedes dejar en una tabla temporal de SQL Server. Después haces todas las transformaciones desde la tabla temporal hacia la definitiva, así separas entornos y seguro que lo tienes más fácil para localizar el 'cuello de botella'.

 

 La manera que solucione no se si es la adecuada es con el uso de tablas vinculadas con access, con esto la respuesta fue la misma que trabajar con DTS del 2000.

 

Es sorprendente que una version 8 años mas a ctual sea 100% mas lenta la carga desde as400.

 

Saludos

In reply to by jatb

 A mi me ha pasado varias veces que he intentado hacer algo utilizando los componentes de SSIS para que sea más fácil de mantener, y al final, por la manera en que Integration Services trata el flujo de datos, prácticamente registro a registro, para que la carga no se haga eterna he terminado por eliminar los componentes y hacer la mayor parte del 'trabajo' con llamadas a sentencias SQL.

De todas maneras para una simple importación de datos no tendrían que pasar estas cosas, es muy fuerte que te funcione mejor con tablas vinculadas con access, y espero que al menos el problema sea sólo al importar desde AS400, algún bug en el driver o algo así..

Muchas gracias por compartir la solución, y me alegro de que al menos hayas podido solventar el problema de lentitud, aunque haya sido 'tirando de Access' :)

Conexiones Oracle en DTSx. Solución.

Conexiones Oracle en DTSx. Solución. josimac Thu, 08/02/2012 - 16:36

Un problema bastante común cuando realizamos un proyecto que tiene lectura y/o escritura desde una dts a un oracle, es que cuando se crea un job de ejecución se pierde el password de acceso a oracle.

Una solución a esto es editar las conexiones del paquete dentro del job y ponerle a mano el password. El problema es que cada vez que cambiamos la dts se tiene que hacer lo mismo.

La solución definitiva ha esto es crear una variable de tipo string en el paquete que contiene la cadena de conexión completa.

Dicha cadena sería:
"Data Source=;User ID=;Provider=OraOLEDB.Oracle.1;Persist Security Info=True;Password=;"

Una vez hecho esto, hay que entrar en la propiedades de la conexión en el "Connection Manager" (parte inferior de la dts) y añadir una expresión clicando con el ratón en la elipse.

Añadir una expresión de tipo "ConnectionString" y arrastar en el diálogo la varible que hemos rellenado antes.

Ya está. Saludos!

Licencias de SQL Server

Licencias de SQL Server stbanti Tue, 08/11/2009 - 18:46

Hola a todos

Me estoy planteando un proyecto empresarial que va tener como base tecnológica una base de datos, procesos de integración (ETL), y puede que alguna cosa de Business Intelligence.

De las opciones disponibles me gusta bastante SQL Server porque ya viene con SSIS y Analysis Services, y encuentro Integration Services muy manejable.

De cara a las licencias necesitaría un servidor de base de datos y 2 usuarios de acceso, que trabajarían desde clientes Windows. He buscado información sobre licencias para ir preparando mis previsiones, pero no sé si me aclaro bien. Lo que me ha parecido entender es que necesito una licencia para el server y dos para los clientes (CALs). Lo que pasa es que sólo he encontrado un precio para una SQLServer Standard Edition de unos 6.000 $ por procesador (para USA). Supongo que debe haber otro licenciamiento a nivel de usuario más económico, ya que yo sólo voy a necesitar que la utilicen 2 usuarios.

Alguien me puede decir donde encontrarlo, o cuánto me podría costar todo el montaje? Tampoco tengo claro como funcionan los upgrades o el coste de mantenimiento anual una vez adquirida la licencia inicial.

Gracias por anticipado,

sobre las licencias de SQL Server, te cuento que cuando compras compras la ultima version

en este momento seria SQL Server 2008 standart, sale alrededor de U$S 780 en argentina

necesitarias tambein 2 cal por usuario que salen U$S168 cada una, con esto te bastaria

 para lo que necesitas. El modo de licenciamiento de microsoft no es anual, por lo que al comprar la

licencia no necesitarias pagar nada mas, los upgrade de version te salen casi como comprar

la version nueva, pero los service pack son sin costo.

 

saludos

 

 

 

Necesito Agregar Componentes de Auditar/MAIL en Proceso de ETL

Necesito Agregar Componentes de Auditar/MAIL en Proceso de ETL alfonsocutro Sat, 01/18/2014 - 18:18

Buenas esta vez, necesito una ayuda bastante basica, pero como soy novato en el mundo SQLServer todo medio complejo.
Estoy haciendo un Proyecto BI relacionado con un Banco y donde estoy en la etapa de ETL (inicial) c/SISS de AS/400 a SQLServer 2012
Resulta que traigo todas las tablas de intervinientes del Ambiente de AS/400 a SQLServer.
Hasta ahora marcha todo bien, pero estoy necesitando tener todo auditado (hora de inicio, hora de fin, etc) y ademas quiero que dispare algún mail (caso de tener algún inconveniente que envie un mail a los responsables del proceso de ETL).
Bueno era eso no mas. Disculpen

Para la auditoría, si te creas un flujo de datos, dentro de las transformaciones de flujo de datos que puedes utilizar,
en el cuadro de herramientas, tienes la transformación que se llama 'Auditoría', que supongo que es la que comentas, y que puedes utilizar para añadir al flujo de datos campos de información como hora de ejecución, nombre del usuario, del equipo, de la tarea.. Luego guardas lo que te interese en un campo de la tabla destino y ya lo tienes.
Otra opción es utilizar la transformación 'Columna derivada' y añadir en la misma un campo que calcule lo que
quieras registrar, como por ejemplo la función 'GETDATE()' para calcular la fecha y hora actual.

Para enviar un email si el proceso va bien o mal, entre los elementos del flujo de control hay una tarea 'Tarea enviar correo',
pero es demasiado simple, y sólo te funcionará en determinadas condiciones. Yo cuando lo implementé al final utilicé una
'Tarea script' que ejecutaba un código de visual basic (.vb) para hacer el envío de un email utilizando el objeto 'SmtpClient'.
Esta tarea se puede ejecutar al final del flujo de control para el caso de que todo vaya bien, y también puedes llamar
a la misma tarea, o a otra del mismo tipo, una vez creada, desde el evento OnError del controlador de eventos (pestaña 'Controladores de eventos').

Espero haberte aclarado algo..

muchisimas Gracias CARLOS!!!!
Vamos a ver como continua este Proceso de ETL.
Estamos en contacto.

Carlos:
Ya logre mejorar un 80 % del Proyecto -->(Paquete SISS)
Colocando en comienzo y en al fin del Flujo de Datos la función "GETDATE()" para calcular las respectivas fechas.
Las mismas se almacenan en una Tabla donde esta toda esa data.
Me estaría faltando rescatar esos datos para mandarlos por el Conector de manda MAIL.
Seguramente hay muchas formas de hacer este Proceso, asi que escucho Mejoras!!!!!
Saludos y Muchas Gracias Carlos (x ayudarme nueva//)
Saludos!!!!

Lo que hago yo para llevar una auditoria para cuando falla o tiene problemas alguna tarea es lo siguiente:
 
1-      Tengo una tabla de eventos en la cual almaceno toda la información que relevante a la ejecución del packages y del error específicamente
PERIODO
FEC_ERROR
SECUENCIA
PACKAGES
ERROR
HOST
STARTTIME
ENDTIME
 
 
2-      Luego tengo 3 Tareas ScriptSQL
CAPTURA ERROR (PASO1)
LIMPIA ERROR (PASO 2)
INGRESA ERROR (PASO 3)

Problema al ejecutar un paquete SSIS desde un proyecto del catálogo de Integration Services de SQLServer

Problema al ejecutar un paquete SSIS desde un proyecto del catálogo de Integration Services de SQLServer Carlos Thu, 06/16/2016 - 13:08

Recientemente he llevado a cabo una migración de un proyecto de SSIS 2008 a SSIS 2010 fruto de una migración de un servidor SQL Server 2008 R2 a un SQL Server 2012.

En primera instancia, tras el proceso de migración y hacer algunos ajustes, todo funcionó correctamente, y todos los paquetes se ejecutaban sin problemas, tanto desde el entorno IDE de Integracion Services, SQL Server Data Tools, como si se programaba su ejecución desde el agente de SQL Server.

Para aprovechar las nuevas características de SQL Server 2012, el siguiente paso fue la conversión de las conexiones de cada paquete a conexiones globales, y cargar el proyecto y los paquetes dentro del catálogo de Integration Services de la nueva base de datos, y configurar un entorno de producción y otro de desarrollo dentro del mismo catálogo para poder así lanzar los mismos procesos en uno u otro entorno de una manera flexible y bien controlada, un gran avance de esta versión de SSIS.

Todo bien menos un problema que surge al programar la ejecución de los paquetes del catálogo desde el agente de SQL Server. La ejecución de los paquetes se lanza correctamente, pero uno de ellos siempre produce una excepción devolviendo un error de memoria. No es problema de la llamada desde el agente porque este paquete en realidad se llama desde otro paquete, que es el que ejecuta el job del agente, y los otros packages a los que llama se ejecutan sin problemas.

Lo más extraño es que este error sólo se produce en la ejecución desde el catálogo de IS de la base de datos, pero si se ejecuta el mismo paquete desde SQL Server Data Tools, tanto directamente como llamándolo desde el otro package, el paquete se ejecuta con normalidad, no devuelve ningún error, y hace todo lo que tiene que hacer.

Es verdad que este package es uno de los que maneja mayor volumen de datos, y por eso en algún punto debe tener algún problema de memoria que lo hace fallar al ejecutarlo desde el catálogo, pero debería funcionar igual desde ambos entornos, no?

¿Alguien se ha encontrado algún problema parecido? ¿Puede ser algún problema de configuración de la base de datos o del entorno de ejecución?

El error de overflow de memoria se puede solucionar configurando los componentes para utilizar buffers de memoria en lugar de utilizar la opción por defecto que no los utiliza, y para más seguridad se puede definir un fichero donde almacenar la caché si la memoria llega a su límite, pero lo raro sigue siendo que con SQL Server 2008 no hubiera ningún problema, y con SQL Server 2012 surjan estos problemas con la gestión de la memoria.

Además me he encontrado otro cliente al que le ha pasado lo mismo al pasar de 2008 a 2012. ¿Alguien sabe si es un problema de la versión, o si no es un problema sino que la gestión de memoria se ha de llevar de otra manera?

¿A alguien le ha pasado lo mismo con SQL Server 2014 o 2016?

 

Problema con los parámetros de un origen de flujo de datos OLEDB

Problema con los parámetros de un origen de flujo de datos OLEDB Carlos Mon, 05/05/2014 - 23:24

Estoy preparando una carga de un Data Warehouse con Integration Services de un SQL Server 2008, y me he encontrado un problema con los parámetros de un origen de flujo de datos OLEDB de SSIS que no he podido resolver, yo le veo pinta de bug, pero lo planteo aquí por si alguien también se lo ha encontrado y me puede iluminar.

En una tarea de flujo de datos, tengo el origen de flujo de datos de OLEDB definido con una select que incluye un parámetro, que es el valor de una variable FechaActual de tipo DateTime, y que en el proceso de carga contiene la fecha actual.

La tabla sobre la que se ejecuta la consulta contiene registros con fechas hasta el día actual, y la sentencia select del origen es la siguiente:

select * from ax_almacenlote
where DATEDIFF(day,max_createddatetime,?)=0
or DATEDIFF(day,max_modifieddatetime,?)=0

 
El resultado esperado serían los registros de esta tabla con fecha de creación o modificación a día de hoy (FechaActual), pero, aunque he comprobado que los registros existen, el flujo de datos no devuelve ningún registro.

Lo más curioso es que después de hacer un montón de pruebas me doy cuenta de que si le añado 2 días a la comparación de fechas obtengo el resultado que esperaba, es decir, los registros creados o modificados en el día actual. Esta sería la Select que me saca estos registros:

select * from ax_almacenlote
where DATEDIFF(day,max_createddatetime,?)<3
or DATEDIFF(day,max_modifieddatetime,?)<3

Curioso no? Alguien me puede explicar porqué hay que añadir 2 días para que funcione esta comparación de fechas? Yo no le encuentro la lógica.
 

Para asegurarme de que no es un tema de la base de datos, o de la consulta, he capturado las queries que se generan en SQL Server, y los resultados siguen indicando que el problema está en la parte de Integration Services. Estas son las queries de cada caso:

Primero, esta es la consulta de base de datos que he intentado parametrizar y que, poniénle la fecha actual donde va el parámetro de SSIS devuelve correctamente los registros creados o modificados en el día actual, a la consulta o a los datos no se les puede echar la culpa:

select * from ax_almacenlote  
where DATEDIFF(day,max_createddatetime,getdate())=0  
   or DATEDIFF(day,max_modifieddatetime,getdate())=0

Después, al ejecutar el proceso con la consulta inicial en el origen OLEDB, la que no devuelve nada, la base de datos muestra esta select:

select * from ax_almacenlote  
where DATEDIFF(day,max_createddatetime,@P1)=0  
   or DATEDIFF(day,max_modifieddatetime,@P2)=0

Finalmente, al añadir los dos días a la comparación para que el flujo retorne los datos del día actual, esta es la sentencia SQL que muestra la base de datos como ejecutada:

select * from ax_almacenlote  
where DATEDIFF(day,max_createddatetime,@P1)<3  
   or DATEDIFF(day,max_modifieddatetime,@P2)<3

Si alguien lo entiene le agradezco que me lo explique porque yo no le veo ningún sentido.

 

 

Puede ser porque el formato de fecha que está enviando a la select está girada porque la envia en formato texto.

Por ejemplo:
En mi caso, si hago un "select getdate()" me devuelve: "09/05/14 18:13:23"

Acto seguido, ejecuto la select tuya con lo que me devuelve el getdate():

select * from entidades where DATEDIFF(day,comodin10,'09/05/14 18:13:23')=0

El resultadoes un frustrante "0 Rows"

Pero si giras el mes y el año devuelve los registros que tiene que devolver:

select * from entidades where DATEDIFF(day,comodin10,'05/09/14 18:13:23')=0

Resultado "698 Rows"

 

Vale, seguro que los tiros van por ahí, pero a mi la select ejecutada directamente contra la base de datos me devuelve los registros que espero, la select ya está bien para el formato de fecha que utiliza la base de datos.

¿Puede ser que SSIS o el driver de OLEDB cambien el formato de la fecha?

 

In reply to by Carlos

Podría ser. Para asegurarte de que el formato de fecha es el que esperas puedes probar a especificarlo, en la base de datos, o mejor en el componente, antes de la select. Algo así:

set dateformat dmy;
declare @fecha datetime
set @fecha = getdate()

select *
from Mitabla
where DATEDIFF(day,CampoDeFecha,@fecha)=0

Problema en el exceso de caracteres en la expresion de flujo de datos

Problema en el exceso de caracteres en la expresion de flujo de datos Anonymous (not verified) Fri, 12/11/2009 - 21:45

Tengo un mega Query que necesito poner en la expresion de flujo de datos, pero pasa el limite de 4000 caracteres ya intente de 1000 usando variables. que se podria hacer??

 

Seguro que una query tan grande no la puedes partir, aunque sea utilizando tablas temporales intermedias? Así también tendrías más controlado lo que haces, porque normalmente meter mano y mantener consultas de estas proporciones suele ser complicado.

Otra opción sería utilizar un fichero para almacenar la query. No lo he probado, pero el SQLSourceType te permite seleccionarlo con el tipo File connection.

También, según lo que tengas que hacer, podr&ias crear un procedimiento almacenado en la base de datos, meter dentro la consulta, y llamar al procedure desde SSIS.

Utilizar SSIS o DTS para trabajar con BBDD Oracle

Utilizar SSIS o DTS para trabajar con BBDD Oracle Carlos Sun, 08/01/2010 - 11:24

Abro este tema para comentar cuestiones sobre conexiones de DTS o SQL Server Integration Services que utilicen como origen de datos una base de datos Oracle para recoger datos, ejecutar procesos, etc.

In reply to by Carlos

Sabes tengo rutinas en SQLServer 2005 DTS que levantan bastos, pero necesito automatizar la ejecución.

Ya que actualmente se ejecuta cuando nos llega un correo de confirmacion donde otras rutinas han terminado.

La ejecución es manual,manualmente ejecuto el dts

Soy nueva en Oracle.

Por fa como podria automatizarlo?

In reply to by Priccyy (not verified)

Tendrás que explicármelo mejor. Por lo que he entendido lanzas manualmente procesos de DTS que atacan una BD Oracle, y quieres que se ejecuten automáticamente cuando llegue un mail.
Eso deberías hacerlo desde el mismo DTS, no?

In reply to by Carlos

Es justo lo que quisiera saber, como puedo hacer para que un DTS se ejecute cuando llegue un correo o cuando una tabla en BD Oracle esté actualizado a la fecha del día.

 

 

In reply to by Priccyy (not verified)

No sé mucho de DTS, pero se me ocurre que podrías Planificar el package DTS para ejecución para que se lanzara cada cierto tiempo, y dentro de tu package agregar una tarea que consultara el valor de la tabla de Oracle, y ejecutara las tareas que ya tienes preparadas sólo si se cumpliera la condición de la expresión que tendrías que definir en función de la fecha.

Supongo que debe haber otras soluciones más elegantes con manejadores de eventos y similares, pero esta seguro que te funciona sin complicarte mucho.

ssis etl script

ssis etl script diego_m180 Fri, 02/08/2013 - 18:15

tengo un problema, cree un etl pero ahora quiero hacer un script o algo similar para que el que lo quiera ejecutar no tenga que entrar a la herramienta y poner el botón play, si me pudiesen dar los pasos de como hacer eso lo agradecería.

 Hola diego_m180, entiendo que tienes un paquete DTS diseñado en SSIS y quieres que se pueda ejecutar como un aplicativo. Si es así te propongo que generes un archivo .bat en el cual utilizes la utilidad dtexec, que se utiliza para configurar y ejecutar paquetes de SQL Server Integration Service. Tienes más información aquí.

 

Información, tips y utilidades sobre SQL Server Analysis Services (SSAS)

Información, tips y utilidades sobre SQL Server Analysis Services (SSAS) Dataprix Thu, 04/28/2022 - 19:28

Tips sobre SQL Server

Recopilación de dudas técnicas, consultas, tips y opiniones de SQL Server Analysis Services, motor de datos analíticos de Microsoft SQL Server.

SSAS proporciona funcionalidades de modelo de datos semánticos para aplicaciones de business intelligence, análisis de datos e informes, como Power BI, Excel, Reporting Services y otras herramientas de visualización de datos.

Analysis Services

Analysis Services Anonymous (not verified) Thu, 04/15/2010 - 02:27

Buenas tades, actualmente trabajo con analysys services instalado en un servidor windows 2003, pero necesito instalar analysis services en una computadora con windows XP y desde esta misma computadora ejecutar excel y conectarme a los cubos, hasta el momento no lo he logrado, esto es posible?

El mensaje de error es:

No se puede conectar con el origen de datos. Razon: no se puede encontrar el servidor de la base de datos. Compruebe si el nombre de la base de datos que escribió es correcto o póngase en contacto con el administrador de la misma para obtener ayuda.

Saludos

 

Si, eso es posible.Que versión de Excel usas? Que versión de SSAS?

Es posible que no hayas seleccionado el servidor de SSAS?

Es posible que no hayas seleccionado conexion a SSAS al momento de hacer la conexión en Excel y hayas puesto conexion a SQL?

 

Analysis Services no abre los roles

Analysis Services no abre los roles Boreal Mon, 05/24/2010 - 03:15

Buenas tardes:

 

Tengo un servidor con windows server 2000, el cual se ocupa para conectarse a un as400 sacar información y mostrarla a los usuarios por medio de excel (cubos), este server perntecene a un dominio denominado domain.

Ahora se acaba de crear un dominio diferente denominado cmex, entonces deseo cambiar al server de domain a cmex y en la sección de analysis services agregar el rol de cmex/Administrator, pero cuando lo cambie de dominio y accese con el user administrator de dominio cmex (superusuario), al inicia me manda el siguiente error:

ID. de suceso: 26
Origen: Cuadro emergente de aplicación
Descripción: Aplicación emergente: Administrador de control de servicios: error al menos un servicio o controlador durante el inicio del sistema. Utilice el Visor de sucesos para examinar los detalles en el registro de sucesos.

y todos mis servicios de sql están arriba, pero cuando abro el analisis services para agregar el rol no abre absolutamente nada.

Les agradecería si alguien supiera acerca de este issue ya que es un server de producción.

 

Nuevamente mil gracias y Saludos!

Hola,

En principio parece un problema con el servicio y la cuenta de inicio, que debes cambiar a una del nuevo dominio.

Utiliza SQL Server Configuration Manager y desde allí revisa las cuentas con las que está iniciandose el servicio, y cambialas por cuentas del nuevo dominio.

Aquí tienes un link con información de las configuraciones recomendadas para las cuentas de SQL Server
http://technet.microsoft.com/en-us/library/ms143504.aspx
y en él aparecen otra serie de links donde puedes ver más detalles aún.

Ya nos cuentas si una vez visto esto, y arrancado el servicio correctamente, consigues acceder o qué problema queda aún por resolver.

Si trabajas habitualmente con SQL Server y todos los servicios que incluye, te recomiendo que utilices este grupo de Microsoft:

http://social.msdn.microsoft.com/Forums/es-ES/sqlserveres

donde estamos muchos compañeros dispuestos a ayudarte

 

Un saludo
Salvador Ramos
http://www.salvador-ramos.com
-------------------------------------------
http://www.cursosqlserver.com (video-cursos gratuitos sobre SQL Server)
http://www.sqlserversi.com (información sobre SQL Server y Business Intelligence)
http://www.helpdna.net (información sobre SQL Server y Microsoft .Net)
-------------------------------------------

 

Auditoria Sql Server 2000

Auditoria Sql Server 2000 EnFin Thu, 08/23/2012 - 22:46

 Estimados:

Tengo la necesidad de generar una auditoria de los accesos a los cubos de la empresa, en Sql server me resulto fácil, con el sql server profiler genere un trace y al llevarlo a una base de datos y trabajar sobre ella genera un informe con los usuarios, los cubos y los dias que los actualizan. El problema es que quise replicar lo mismo en Sql 2000 pero me di cuenta que las opciones de el trace son distintas, no existe el discover begin en el cual me sale el cubo accesado, mi pregunta es: ¿Existe alguna otra forma de poder obtener esta informacion en sql server 2000? De antemano muchas gracias y saludos a todos!

Pues que yo sepa no, pero la verdad es que casi no he tocado SQL Server 2000, así que no me hagas mucho caso.

He buscado un poco a ver si encontraba alguna alternativa, y lo más decente que he encontrado son estos artículos sobre cómo crear y supervisar trazas de SQL Server 2000. Puede que revisando las opciones encuentres alguna información que te sea útil: 

Cómo crear una traza de SQL Server 2000

Cómo supervisar las trazas de SQL Server 2000

 

De todas maneras, revisando por encima la lista de eventos que se pueden monitorizar con SQL Profiler, en la página de Objects Event Classes he visto esta anotación, que parece sospechosa: 

The event classes Object:Closed and Object:Opened are provided for running traces on SQL Server 7.0 and earlier. 
These objects do not exist in SQL Server 2000.

 

Puede que con SQL Server 2000 no puedas monitorizar accesos a cubos.

 

Ayuda diseños de soluciones para Business Inteligence

Ayuda diseños de soluciones para Business Inteligence mcarrillo Wed, 10/10/2012 - 22:25

Holas a Todos:

soy algo nuevo en Business Inteligence. tengo que realizar un Cubo de compras y estado de resultados..

alguien tiene diseños de soluciones para estos temas.. porfabor podrian ayudarme....

Si comienzas ahora con el BI, te recomiendo consultar la Metodología HEFESTO para Data Warehousing, de Dario Bernabeu. En este manual se explican los conceptos básicos de Business Intelligence y Data Warehousing, y se propone una metodología de desarrollo de proyectos de BI, incluyendo un pequeño ejemplo de diseño, centrado en ventas (como prácticamente todas las metodologías de inicio), pero es que es el ejemplo más fácil de entender para comenzar.

Una vez comprendidos los conceptos principales no te debería costar demasiado diseñar un cubo de compras en lugar de uno de ventas.

Por otro lado, si necesitas más ejemplos de diseño, otra opción sería recurrir a bibliografía como alguno de los libros de Kimball, o de Inmon, que incluyen ejemplos de diseño orientado a diferentes áreas de negocio. Pero incluso estos libros te serán más fáciles de comprender si comienzas siguiendo la metodología que te recomiendo.

Saludos,

Aprovecho la ocacion para consultarte Carlos, sobre los siguientes Autores (Kimball,Inmon). Me recomendas algun libro de ellos /Existe alguna version online o pdf. GRACIAS

Hola Alfonso

Estos que referencio a continuación son los clásicos:

Ralph Kimball. The data warehouse toolkit: Practical techniques for building dimensional data warehouse, 1996.

Bill Inmon. Building the Data Warehouse. 1st Edition. Wiley and Sons, 1992.

He copiado la referencia del artículo 'Modelos de construcción de Data Warehouses', de José María Arce, que te recomiendo consultar.

Estoy bastante de acuerdo en el enfoque de José María, y una buena aproximación puede ser comenzar leyendo el de Kimball, que es uno de los grandes pilares del Data Warehousing y BI, y pasar después a estudiar bibliografía de Inmon, que para mi propone un modelo de diseño más completo.

Estos libros puedes encontrarlos en formato electrónico, y en ediciones más recientes que las mencionadas, pero en Amazon, o tiendas online, yo creo que estos dos autores no han llegado a liberar ningún libro completo.

 

Muchas Gracias CARLOS: Siempre es bueno tener alguno de estos libros de cabecera. Voy a ver como puedo hacer para conseguirlos. Gracias

Diseño de un Data Warehouse

Diseño de un Data Warehouse juapepa Sat, 06/23/2007 - 15:12

Estoy realizando un proyecto para el diseño de un data warehouse, utilizando como gestor de base de datos Sql Server 2005.

Los pasos para el diseño del mismo por lo que he averiguado serían:

  • recogida y análisis de requisitos
  • diseño conceptual: entidad-relación
  • diseño lógico: modelado multidimensional y esquemas en estrella
  • diseño físico: definición del esquema rolap o molap, diseño ETL
  • implementación: carga del almacén y la preparación de las vistas de usuario mediante herramientas OLAP

Sql Server 2005 cubriría la carga del datawarehouse (ETL) mediante SQL Integration Services, y la explotación del mismo (OLAP Y mineria de datos) mediante sql analysis services.

Mi principal duda es construir, diseñar el datawarehouse, sobre todo tengo dudas a la hora del diseño lógico y físico del mismo. He leido tutoriales, manuales y ninguno de ellos me resuelve el problema.

Si pudieran adjuntarme algún ejemplo práctico, sugerencia o experencia personal sobre el tema lo agradecería.

A medida que avance el proyecto y vaya resolviendo dudas las publicaré.

Mi correo es juapepa@ei.upv.es

 

Un saludo y gracias.

En Pinceladas sobre el diseño de un Data Warehouse puedes encontrar mi punto de vista sobre las cosas que considero más importantes a nivel de diseño lógico y físico. Sobre la implementación del sistema sobre ROLAP o MOLAP puedes consultar ROLAP vs MOLAP No sé si esto te aporta algo para la orientación que buscas, pero al menos es un buen punto de partida para poder profundizar más donde sea necesario, o para que alguien más aporte su visión.. Esperamos ver cómo va evolucionando ese proyecto que tienes por delante, y qué decisiones vas tomando sobre diseño, arquitectura, etc. Puede ser muy enriquecedor para todos. Carlos Fernández Analista de sistemas

Herramientas de BI de Microsoft

Herramientas de BI de Microsoft Carlos Sun, 04/26/2009 - 21:37

En esta presentación de MicrosoftTechNet se muestra cómo se combinan las diferentes herramientas y Microsoft ... Servers para montar una plataforma completa de BI/BPM. Recomiendo especialmente los esquemas de los slides 5 y 17, donde podemos ver cómo se relacionan SQLServer Analysis Services, Office Excel, Office PerformancePoint Server y Office Sharepoint Server:

Business Intelligence For It Professionals Part 4 Scorecards Dashboards And Analytics from Microsoft TechNet

Entonces por lo que veo si no hace falta montar algo muy grande con Analysis Services, Reporting Services y Excel ya sería suficiente, y si se necesita hacer dashboards, temas de gestión del rendimiento y más integración, acceso por web, etc habría que usar PerformancePoint y SharePoint, no?

http://www.beyebuilder.com es una página que os recomiendo que echar un vistazo para crear soluciones de BI basadas en Microsoft SQLServer 2012, personalizadas y gratis.

Ocultar en el cubo miembros de dimensiones que no tengan datos

Ocultar en el cubo miembros de dimensiones que no tengan datos BIDev Fri, 03/02/2012 - 13:32

Hay alguna manera de hacer que en el cubo de Analisis Services se oculten los miembros de una dimensión que no tengan datos en la tabla de hechos?.

En la base de datos sí que quiero tener la dimensión completa, pero en el cubo no quiero que me aparezcan los miembros que no están enlazados en la tabla de hechos para que el usuario no tenga que filtrar esos registros cuando haga sus consultas sobre el cubo.

Alguien sabe cómo se puede hacer?

Yo lo que hago normalmente es crear las dimensiones sobre vistas que sólo devuelven aquellos elementos para los que hay datos en la tabla de hechos.

Por ejemplo:

SELECT ID_CLIENTE, NOMBRE_CLIENTE FROM DIM_CLIENTE

WHERE ID_CLIENTE NOT IN (SELECT ID_CLIENTE FROM TDH_VENTAS)

 

Evidentemente esto ralentiza el tiempo de procesado del cubo, pero puede ser una solución en tu caso.

In reply to by scepas

Finalmente lo he probado y funciona bien, en las jerarquías de la dimensión tiempo ya no tengo fechas de las que no haya datos en la tabla de hechos.

Pero crear la vista me ha provocado un efecto secundario un poco raro.

Al utilizar el 'Asistente para Inteligencia de Negocio' para crear medidas basadas en periodos (YTD, MTD, Acumulados, etc.), que sobre la tabla funcionaba bien, ahora al procesar el cubo me genera un error que dice que necesito añadir un campo a la vista o algo así, ahora no lo tengo delante.

A alguien le ha pasado algo parecido? Es mejor intentar solucionar el problema retocando la vista, o al crear las medidas de periodos sin utilizar el asistente no tendré este problema?

 

Problemas con el Analysis Services 2000

Problemas con el Analysis Services 2000 m a Mon, 06/29/2009 - 16:34

Hola a todos, primero saludos, soy un nuevo usuario del sitio y espero poder tener una relacion de ayuda mutua con todo el foro.

 

estoy creando un sistema Data Ware House para un sistema de administración de recursos humanos, y bueno el cubo lo tengo listo en Analysis Services del sql server 2000 y lo puedo conectar con el excel desde mi maquina pero al momento de querer acceder al cubo desde otra maquina no lo puedo hacer ni a palos! me he puesto a revisar el problema y segun algunos articulos dicen que hay que instalar el service pack 4 para cada componente pero ya lo instale y nada que funciona.... por favor alguien sabe como puedo hacer para que las maquinas remotas se puedan conectar?

 

ademas estoy yendo a usar un pentaho, solo que aun no se como se usa esa herramienta... como veran me falta mucho por aprender de BI pero estoy muy aplicado porque el sistema lo necesito de urg.

 

 

Saludos

 

m a

Antes de nada te quiero dar la bienvenida a Dataprix .

Sobre el problema que comentas con Analysis Services 2000 lo primero que se me ocurre es que el problema pueda estar en la versión de Excel. Cuál estas utilizando?

Las que parecen ir bien con Analysis Services 2000 son MSOffice Excel 2002 y Excel 2003, enlazo el Complemento de Excel 2002/2003 para SQL Server Analysis Services SP1

Sobre Excel 2007 y Analysis Services 2000 no he encontrado ninguna referencia donde se comente que funciona, puede que sólo sea compatible con SQL Server 2005

 

Incluyo también algunos enlaces de la página de soporte de Microsoft sobre problemas entre Analysis Services 2000 y Excel por si alguno no lo hubieras consultado ya:

Error al conectarse a OLAP después de instalación de SQL Server 2000 Analysis Services

Cubos OLAP en una base de datos servicios de análisis no están accesibles después de aplicar a Analysis Services SP3

XL2000: No se ve cubos creados en Analysis Services de SQL 2000 Server

No se puede ver todos los cubos al conectarse desde Excel 2000 a Analysis Services

 

Si adjuntas el detalle del error que te da o comentas en más detalle qué es lo que falla podemos mirar de investigar un poco más..

 

Sobre Pentaho, si no lo has hecho ya, te recomiendo que pruebes la imagen virtual que ha creado Dario, ya que la mayoría de la información y demos que puedes encontrar por ahí son sobre componentes específicos, y es complicado hacerse una idea global de cómo funciona todo el sistema, y más instalarlo de cero. En esta imagen lo tienes todo instalado sobre Ubuntu, funcionando y con ejemplos y datos de prueba.

URGENTE.-

Buenos días, tengo problemas con Analysis Services 2000, no permite agregar usuarios en Database Roles, pero en SQL si lo hace. Cuando presiono el botón Add no hace nada, tampoco muestra mensajes en el visor de sucesos. ¿Tienen idea de que pueda estar pasando? Gracias.

In reply to by Jean Silvestre (not verified)

Parece un problema de permisos. Que puedas hacer algo a nivel de usuarios en la BD de SQL Server 2000 y desde Analysis Services no seguramente es porque la seguridad de Analysis Services 2000 funciona con las cuentas de usuario y grupos de Windows, no con los de la base de datos. Deberías crear las cuentas y los grupos con Active Directory.

Asegúrate sobretodo que el usuario con el que estás administrando desde Analysis Services pertenezca al OLAP Administrators group

Extraigo un fragmento del documento INF: Permisos que se necesita para administrar un servidor OLAP, de los servicios de soporte de Microsoft:

Hay ciertos permisos requeridos para conectarse a un servidor OLAP mediante el OLAP Manager o secuencia de comandos de DSO:

  1. Debe tener permiso de acceso a la siguiente clave del registro en el servidor:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLAP Server\Server Connection Info
  2. Debe tener permisos de escritura en el recurso compartido oculto MsOLAPRepository $, que contiene el repositorio de servicios OLAP y bloqueo de archivos. De forma predeterminada este recurso compartido es el directorio bin en los servicios OLAP directorio.
  3. También debe tener derechos de control total en los directorios Bin y datos en el programa de programa\Microsoft Analysis Services\Bin directorio. De manera predeterminada, estas carpetas deben permite todos control total, pero si por motivos de seguridad desea reforzar la seguridad, asegúrese de que el grupo Administradores OLAP mantiene los derechos de control total.

Al instalar Servicios OLAP, se crea un grupo local denominado 'Administradores de OLAP' y se le da 'Control total' para la clave del registro anterior y el recurso compartido de $ MsOLAPRepository. También se agrega el instalador al grupo 'Administradores de OLAP'.

Espero que te sirva de ayuda,

In reply to by Carlos

Tengo el mismo problema, que le doy add en database roles; y no muestra; pero en una máquina con Windows XP con mi usuario si me permite; pero en una con Windows Vista no. Las dos máquinas están conectadas al DOMINIO.

Gracias

Hola es la primera vez que ingreso a esta pagina y por fa necesito de su ayuda

Estoy haciendo un sistema que abarca varias bases de datos en una sola base de datos, estoy utilizando paquetes ETL, y para las consultas estoy elaborando cubos OLAP, pero al momento de implementar el cubo me sale un error que dice que no tengo permisos para crear cubos, pero SQL SERVER 2005 lo instale como administrador, ahora he leido que para que funcione el Analisis Server debe estar instalado el SP1 y ya lo instale pero resulta y no lo puedo hacer por favor me pueden ayudar

 

 

Saludos

Sol Fernández

 

 

Saludos,

 

Por favor alguien puede ayudarme, tengo sql 2000, cuando agrego un rol a un cubo luego de cerrar el analysis server y volverlo a abrir el rol agregado desaparece, pense inicialmente que era cuestion de permisos, pero no es asi hasta donde he revisdado, he verificado lo siguiente:

 

- el usuario con el que estás administrando desde Analysis Services pertenezca al OLAP Administrators group

-

  1. Debe tener permiso de acceso a la siguiente clave del registro en el servidor:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLAP Server\Server Connection Info
  2. Debe tener permisos de escritura en el recurso compartido oculto MsOLAPRepository $, que contiene el repositorio de servicios OLAP y bloqueo de archivos. De forma predeterminada este recurso compartido es el directorio bin en los servicios OLAP directorio.
  3. También debe tener derechos de control total en los directorios Bin y datos en el programa de programa\Microsoft Analysis Services\Bin directorio. De manera predeterminada, estas carpetas deben permite todos control total, pero si por motivos de seguridad desea reforzar la seguridad, asegúrese de que el grupo Administradores OLAP mantiene los derechos de control total.

- La sesion iniciada es administrador del equipo ( Windows 2003 server).

- La base de datos esta en el mismo equipo.

- He desactivado el antivirus si por casualidad tenga algo que ver, pero todo sigue igual.

- Los parches del Sistema operativo, del sql server, del analysis server estan todos actualizados (ya estaban actualizados), pero el problema persiste.

 

Por favor agredecere alguna ayuda al respecto.