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 15 Abril, 2022 - 12:16Recopilación de dudas técnicas, db scripts y consultas de administración y desarrollo sobre bases de datos Microsoft SQL Server
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 3 Abril, 2020 - 18:57Para 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…
buen dato, gracias por aportar tu conocimiento, soy nueva por estos lares y agradezco toda la informacion aportada.
- Inicie sesión para enviar comentarios
Cómo crear una tabla con una select (CTAS) en SQLServer
Cómo crear una tabla con una select (CTAS) en SQLServer Carlos 4 Junio, 2012 - 17:24En 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 26 May, 2012 - 11:39Si 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 26 Julio, 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
Muchas Gracias me funciono perfectamente...!!
- Inicie sesión para enviar comentarios
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 13 Abril, 2015 - 17:11Buenas 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é
- Inicie sesión para enviar comentarios
buenas noches si señor es un
- Inicie sesión para enviar comentarios
Entonces, asumiendo que de
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?
- Inicie sesión para enviar comentarios
Contadores y Rangos o funcion Rank() en SQLServer
Contadores y Rangos o funcion Rank() en SQLServer hminguet 3 Octubre, 2011 - 14:40Crear 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<=10y filtramos por los 10 primeros, por ejemplo.
Espero que os ayude.
Héctor Minguet.
Con respecto a la función
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.
- Inicie sesión para enviar comentarios
Insert from select en SQL Server
Insert from select en SQL Server Carlos 10 Octubre, 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.Source
SELECT * INTO dbo.Destination FROM dbo.Source
SELECT * INTO dbo.Destination FROM dbo.Source
SELECT * INTO dbo.Destination FROM dbo.Source
SELECT * INTO dbo.Destination FROM dbo.Source
select * into mi_nueva_tabla_destino from mi_tabla_origen
UPDATE con JOIN en SQLServer
UPDATE con JOIN en SQLServer hminguet 8 Julio, 2008 - 10:25Supongamos 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
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?
- Inicie sesión para enviar comentarios
Holas yo soy muy partidario,
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
- Inicie sesión para enviar comentarios
Buena sugerencia. En
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.
- Inicie sesión para enviar comentarios
esta claro y me sirvió muchas
- Inicie sesión para enviar comentarios
Libros de SQL Server ¿Quieres
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.
- Inicie sesión para enviar comentarios
Excelente post...me sirvió
Excelente post...me sirvió para solucionar un problemon (problema grande) en mi trabajo.
Gracias
- Inicie sesión para enviar comentarios
DBlink en sql server
DBlink en sql server gilson 12 Enero, 2010 - 20:12Mi pregunta es muuy sencilla, es posible crear un dblink en sql server, y si es posible, como lo hago, muchisimas gracias!
saludos a todos
En su última entrada de blog,
En su última entrada de blog, il_masacratore comentaba Cómo acceder a MySQL desde SQL Server utilizando un Servidor Vinculado de SQL Server, que sería el equivalente a un database link de Oracle.
Espero que esto ya te sirva.
- Inicie sesión para enviar comentarios
Para crear un linked server
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.
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.
- Inicie sesión para enviar comentarios
Limitaciones en las funciones de SQL Server
Limitaciones en las funciones de SQL Server Carlos 21 Diciembre, 2016 - 17:22Las 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 30 Diciembre, 2016 - 08:51Si 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: MSQLTips, Codeproject
Herramientas de administración para DBA's de SQL Server
Herramientas de administración para DBA's de SQL Server Carlos 22 Septiembre, 2016 - 18:39Con 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
Ssmstools, sp_whoisactive y los scripting de olla hallegreen.
- Inicie sesión para enviar comentarios
Gracias por tu aportación, he
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.
- Inicie sesión para enviar comentarios
Gracias por el Aporte, y
- Inicie sesión para enviar comentarios
¡Gracias por esta
¡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.
- Inicie sesión para enviar comentarios
Access to sql
Access to sql MrAlex 11 Septiembre, 2015 - 20:14Hola Alex Ante todo, no pidas
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.
- Inicie sesión para enviar comentarios
Hola. De acuerdo a tu duda,
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.
- Inicie sesión para enviar comentarios
Almacenar usuario y dominio
Almacenar usuario y dominio jatb 23 Junio, 2013 - 04:53Hola 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
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.
- Inicie sesión para enviar comentarios
Auditoria de bases de datos SQL Server 2008
Auditoria de bases de datos SQL Server 2008 GabrielMartinez1987 19 Enero, 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
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.
- Inicie sesión para enviar comentarios
Base de datos de una web sincronizada con BBDD de locales
Base de datos de una web sincronizada con BBDD de locales Carlos 27 Agosto, 2009 - 11:57Jorge 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
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
- Inicie sesión para enviar comentarios
Si todo está diseñado para
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'.
- Inicie sesión para enviar comentarios
Consulta sobre enviar Suscripciones SSRS
Consulta sobre enviar Suscripciones SSRS hanamichito 10 Enero, 2014 - 17:11Estimados,
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
ya encontre la solución,
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!!!
- Inicie sesión para enviar comentarios
Hola Pablo Muchas gracias por
Hola Pablo
Muchas gracias por compartir la solución. Si no es molestia, puedes decirnos cómo se llama la tabla de eventos?
Saludos,
- Inicie sesión para enviar comentarios
deben de crearse la
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!!!!
- Inicie sesión para enviar comentarios
Crear en SQL Server un rol adicional para ejecutar stored procedures
Crear en SQL Server un rol adicional para ejecutar stored procedures Carlos 21 Noviembre, 2017 - 20:12Có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 25 Noviembre, 2011 - 15:28Hola 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
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.
- Inicie sesión para enviar comentarios
Hola Carlos. Muchisimas
Hola Carlos. Muchisimas gracias por responderme. Me quedó muy claro todo.
Espero poder seguir preguntando.
Saludos Gabriel.
- Inicie sesión para enviar comentarios
Hola Amigo, Tengo una
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
- Inicie sesión para enviar comentarios
No te puedo decir exactamente
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.
- Inicie sesión para enviar comentarios
Muchas gracias por su tan
Muchas gracias por su tan pronta respuesta.
Seguré sus consejos.
Saludos
- Inicie sesión para enviar comentarios
Hola, hay algun query o algun
Hola, hay algun query o algun SP que me permita ver el contenido de los esquemas?
- Inicie sesión para enviar comentarios
Hola Angel El esquema
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
- Inicie sesión para enviar comentarios
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 26 Septiembre, 2016 - 15:21Generar 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 21 Enero, 2010 - 14:24Buenas 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
buenas, sin saber bien el
buenas,
sin saber bien el motivo y exacamente lo que quieres hacer exactamente ten en cuenta esta herramienta...
Saludos
- Inicie sesión para enviar comentarios
buenas, resulta que estoy
buenas, resulta que estoy tomado un curso de transact sql en la universidad y quiero probar, muchas gracias por tu ayuda!
saludos!
- Inicie sesión para enviar comentarios
Instalacion de SQL SERVER 2008 EN xp con SP2
Instalacion de SQL SERVER 2008 EN xp con SP2 gilson 18 Enero, 2010 - 13:12Buenas 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
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
- Inicie sesión para enviar comentarios
Los campos identity se saltan 1000 números aleatoriamente
Los campos identity se saltan 1000 números aleatoriamente Carlos 23 May, 2014 - 18:49En 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
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..
- Inicie sesión para enviar comentarios
En otros foros ha realizado
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
- Inicie sesión para enviar comentarios
Gracias Hans, ya tenemos otro
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…
- Inicie sesión para enviar comentarios
Tengo este problema y no he
Tengo este problema y no he podido solucionarlo alguien me puede comentar si ya lo pudieron solucionar y como?
saludos
- Inicie sesión para enviar comentarios
Esto sucede siempre que se
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.
- Inicie sesión para enviar comentarios
Buenas tardes Respecto al uso
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
- Inicie sesión para enviar comentarios
Tiene mucho sentido, desde
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.
- Inicie sesión para enviar comentarios
Particionamiento de tablas en SQLServer 2005
Particionamiento de tablas en SQLServer 2005 josimac 18 May, 2008 - 01:05Hola 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
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?
- Inicie sesión para enviar comentarios
Las tablas particionadas
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..
- Inicie sesión para enviar comentarios
carlos wrote: Las tablas
[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,
- Inicie sesión para enviar comentarios
Ok. Voy a realizar la
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?
- Inicie sesión para enviar comentarios
Para particionar la tabla has
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.
- Inicie sesión para enviar comentarios
Veo que el post tiene ya algo
Veo que el post tiene ya algo de tiempo.. pero espero obtener alguna respuesta. De qué manera puedo establecer la partición de una tabla alfabéticamente, de forma que en una partición se acomoden todos los resgistros que empiecen de la a "a" a la "f", por ejemplo.. es posible hacer eso?
- Inicie sesión para enviar comentarios
Hola Xóchitl Selene Los
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,
- Inicie sesión para enviar comentarios
Muchas gracias josimac me ha
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..
- Inicie sesión para enviar comentarios
Hola de nuevo. Si me permites
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,
- Inicie sesión para enviar comentarios
Gracias. Es parte de una
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í?
- Inicie sesión para enviar comentarios
Cuando declaras el campo
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.
- Inicie sesión para enviar comentarios
Hola, Mi caso es parecido
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.
- Inicie sesión para enviar comentarios
Tendrás que hacerlo mediante
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.
- Inicie sesión para enviar comentarios
Hola Saludos Se que el post
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?
- Inicie sesión para enviar comentarios
quiero que me ayudes en un
- Inicie sesión para enviar comentarios
Problema con funcion escalar
Problema con funcion escalar gilson 2 Marzo, 2010 - 12:35buen 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 <= @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
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.
- Inicie sesión para enviar comentarios
hola carlos, ayer justamente
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
- Inicie sesión para enviar comentarios
Habría que ver el código del
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.
- Inicie sesión para enviar comentarios
ok carlos voy a buscarlo,
ok carlos voy a buscarlo, agradezco mucho tu ayuda, saludos
lo raro es que uso el mismo raiserror para un procedimiento que inserta personas y no tengo ningun problema con ese procedure
- Inicie sesión para enviar comentarios
Problemas con SQL Server 2000
Problemas con SQL Server 2000 gustavoagk 13 Noviembre, 2014 - 08:59Hola;
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,
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
- Inicie sesión para enviar comentarios
Problemas en conexiones remotas a servidores de SQL Server
Problemas en conexiones remotas a servidores de SQL Server Carlos 4 May, 2016 - 20:24Recientemente 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.
Espero que sirva de ayuda!
Sos Grande Amigo Gracias por
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...
- Inicie sesión para enviar comentarios
Hola Emmanuel, me alegro que
Hola Emmanuel, me alegro que te haya servido de ayuda!
Enlazo un post donde explico con más detalle cómo configurar el server SQL para permitir conexiones remotas
- Inicie sesión para enviar comentarios
Muy buenas
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.
- Inicie sesión para enviar comentarios
Gracias por tu aportación
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!
- Inicie sesión para enviar comentarios
SQL Server
SQL Server lagunas876 17 Diciembre, 2015 - 16:46Me 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
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/
- Inicie sesión para enviar comentarios
Saltarse las constraints en SQL Server
Saltarse las constraints en SQL Server Anonimo (no verificado) 8 Septiembre, 2009 - 18:13Tengo 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
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,
- Inicie sesión para enviar comentarios
¿Y no habrá ningun tipo de
¿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?
- Inicie sesión para enviar comentarios
Justamente al desactivar los
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.
- Inicie sesión para enviar comentarios
Utilización del monitor del sistema para supervisar recursos
Utilización del monitor del sistema para supervisar recursos Carlos 21 Julio, 2010 - 00:53En 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 :)
Hola Carlos Estoy un poco
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.
- Inicie sesión para enviar comentarios
Fernando, he abierto este
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.
- Inicie sesión para enviar comentarios
Información, tips y utilidades sobre SQL Server Integration Services (SSIS)
Información, tips y utilidades sobre SQL Server Integration Services (SSIS) Dataprix 26 Abril, 2022 - 12:45
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 27 Diciembre, 2016 - 20:46Para 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.
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 22 May, 2009 - 13:39Buenas,
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
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.
- Inicie sesión para enviar comentarios
Conectar SSIS con MySQL como destino
Conectar SSIS con MySQL como destino estebi 19 May, 2009 - 17:21Estoy 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,
Prueba cambiando a un ODBC, ya sé que es antiguo pero funca.
- Inicie sesión para enviar comentarios
Il masacratore explica
Il masacratore explica bastante bien cómo hacerlo en el post SSIS: Solución a dos errores sin motivo aparente cuando insertamos datos en MySql.
Supongo que a estas alturas ya habrás encontrado la manera de hacer la inserción en MySQL desde SSIS o una alternativa, pero seguro que esta explicación ayuda a más gente.
- Inicie sesión para enviar comentarios
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 26 Octubre, 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 4 Septiembre, 2019 - 09:10Se 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 12 Marzo, 2020 - 21:20Al 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.
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.
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 8 Septiembre, 2009 - 19:06Cuando 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
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!
- Inicie sesión para enviar comentarios
He ampliado el valor de
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:
- Documento de Microsoft sobre Resolución de problemas de rendimiento en SQL Server 2008
- Entrada MSSQL Error 802 - Insufficient memory available del foro de MonkeyClicker. Dan algunas recomendaciones, entre las que se encuentran la utilización del comando DBCC MEMORYSTATUS para controlar la memoria, y DBCC FREESYSTEMCACHE, DBCC FREESESSIONCACHE, DBCC FREEPROCCACHE para liberar las caches.
David, no he llegado a probar lo que comentas porque lo he podido solucionar antes, pero gracias por el soporte!
- Inicie sesión para enviar comentarios
Introduccion a la metodologia SQLBI
Introduccion a la metodologia SQLBI Dataprix 2 Octubre, 2008 - 00:26En 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
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:
- El package AWDataWarehouseRefresh
- Adventure Works DW
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
- Inicie sesión para enviar comentarios
Ayuda - Jobs - SSIS -
Ayuda - Jobs - SSIS - jatb 17 Julio, 2013 - 17:41Hola 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
- Inicie sesión para enviar comentarios
Carga lenta Desde AS400
Carga lenta Desde AS400 jatb 9 Marzo, 2013 - 00:55Hola Jonathan Supongo que ya
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,
- Inicie sesión para enviar comentarios
Gracias Carlos, Lei el
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
- Inicie sesión para enviar comentarios
Bueno, te sirve toda la parte
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'.
- Inicie sesión para enviar comentarios
La manera que solucione no
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
- Inicie sesión para enviar comentarios
A mi me ha pasado varias
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' :)
- Inicie sesión para enviar comentarios
Conexiones Oracle en DTSx. Solución.
Conexiones Oracle en DTSx. Solución. josimac 2 Agosto, 2012 - 16:36Un 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 11 Agosto, 2009 - 18:46Hola 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
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
- Inicie sesión para enviar comentarios
Necesito Agregar Componentes de Auditar/MAIL en Proceso de ETL
Necesito Agregar Componentes de Auditar/MAIL en Proceso de ETL alfonsocutro 18 Enero, 2014 - 18:18Buenas 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
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..
- Inicie sesión para enviar comentarios
muchisimas Gracias
muchisimas Gracias CARLOS!!!!
Vamos a ver como continua este Proceso de ETL.
Estamos en contacto.
- Inicie sesión para enviar comentarios
Carlos: Ya logre mejorar un
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!!!!
- Inicie sesión para enviar comentarios
Lo que hago yo para llevar
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)
- Inicie sesión para enviar comentarios
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 16 Junio, 2016 - 13:08Recientemente 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
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?
- Inicie sesión para enviar comentarios
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 5 May, 2014 - 23:24Estoy 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
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"
- Inicie sesión para enviar comentarios
Vale, seguro que los tiros
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?
- Inicie sesión para enviar comentarios
Podría ser. Para asegurarte
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
- Inicie sesión para enviar comentarios
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 Anonimo (no verificado) 11 Diciembre, 2009 - 21:45Tengo 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
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.
- Inicie sesión para enviar comentarios
Utilizar SSIS o DTS para trabajar con BBDD Oracle
Utilizar SSIS o DTS para trabajar con BBDD Oracle Carlos 1 Agosto, 2010 - 11:24Abro 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.
Sabes tengo rutinas en
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?
- Inicie sesión para enviar comentarios
Tendrás que explicármelo
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?
- Inicie sesión para enviar comentarios
Es justo lo que quisiera
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.
- Inicie sesión para enviar comentarios
No sé mucho de DTS, pero se
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.
- Inicie sesión para enviar comentarios
ssis etl script
ssis etl script diego_m180 8 Febrero, 2013 - 18:15tengo 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
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í.
- Inicie sesión para enviar comentarios
Información, tips y utilidades sobre SQL Server Analysis Services (SSAS)
Información, tips y utilidades sobre SQL Server Analysis Services (SSAS) Dataprix 28 Abril, 2022 - 19:28Recopilació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 Anonimo (no verificado) 15 Abril, 2010 - 02:27Buenas 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
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?
- Inicie sesión para enviar comentarios
Analysis Services no abre los roles
Analysis Services no abre los roles Boreal 24 May, 2010 - 03:15Buenas 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
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)
-------------------------------------------
- Inicie sesión para enviar comentarios
O si no se puede arreglar
O si no se puede arreglar existe alguna manera de hacerlo manualmente?
Gracias!
- Inicie sesión para enviar comentarios
Auditoria Sql Server 2000
Auditoria Sql Server 2000 EnFin 23 Agosto, 2012 - 22:46Estimados:
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
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.
- Inicie sesión para enviar comentarios
Ayuda diseños de soluciones para Business Inteligence
Ayuda diseños de soluciones para Business Inteligence mcarrillo 10 Octubre, 2012 - 22:25Holas 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,
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,
- Inicie sesión para enviar comentarios
ok muchas gracias Carlos..
ok muchas gracias Carlos..
- Inicie sesión para enviar comentarios
Aprovecho la ocacion para
- Inicie sesión para enviar comentarios
Hola Alfonso Estos que
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.
- Inicie sesión para enviar comentarios
Muchas Gracias
- Inicie sesión para enviar comentarios
Diseño de un Data Warehouse
Diseño de un Data Warehouse juapepa 23 Junio, 2007 - 15:12Estoy 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
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
- Inicie sesión para enviar comentarios
Ayuda
Bueno soy nuevo en esto. y el pos es un poco viejo, pero deciaria poder tener acceso a esta iformacion, es posible?
Gracias
- Inicie sesión para enviar comentarios
Información sobre DWH
Por desgracia juapepa no nos ha contado nada más sobre la evolución de su proyecto. Si quieres hacerte una idea sobre lo que es el Data Warehouse, y aprender una metodología con caso práctico incluido, te recomiendo que consultes en nuestra sección Libros el manual Datawarehousing y Metodología Hefesto
- Inicie sesión para enviar comentarios
Herramientas de BI de Microsoft
Herramientas de BI de Microsoft Carlos 26 Abril, 2009 - 21:37En 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:
Qué software hace falta?
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?
- Inicie sesión para enviar comentarios
Pues sí, eso parece. Adjunto
- Inicie sesión para enviar comentarios
http://www.beyebuilder.com es
- Inicie sesión para enviar comentarios
Ocultar en el cubo miembros de dimensiones que no tengan datos
Ocultar en el cubo miembros de dimensiones que no tengan datos BIDev 2 Marzo, 2012 - 13:32Hay 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
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.
- Inicie sesión para enviar comentarios
Buena idea, los cubos que
Buena idea, los cubos que manejo no son muy grandes y no tendré problemas de procesamiento, seguro que lo pruebo.
Pero en la consulta creo que cambiaré el 'not in' por un 'in' ;)
Gracias por la ayuda!
- Inicie sesión para enviar comentarios
je je, importante lo de
je je, importante lo de quitar el not! Me alegro de que te pueda servir
- Inicie sesión para enviar comentarios
Finalmente lo he probado y
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?
- Inicie sesión para enviar comentarios
Problemas con el Analysis Services 2000
Problemas con el Analysis Services 2000 m a 29 Junio, 2009 - 16:34Hola 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
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
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.
- Inicie sesión para enviar comentarios
URGENTE.- Buenos días, tengo
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.
- Inicie sesión para enviar comentarios
Parece un problema de
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:
- Debe tener permiso de acceso a la siguiente clave del registro en el servidor:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLAP Server\Server Connection Info - 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.
- 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,
- Inicie sesión para enviar comentarios
Tengo el mismo problema, que
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
- Inicie sesión para enviar comentarios
Hola es la primera vez que
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
- Inicie sesión para enviar comentarios
Saludos, Por favor alguien
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
- - La sesion iniciada es administrador del equipo ( Windows 2003 server).
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLAP Server\Server Connection Info
- 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.
- Inicie sesión para enviar comentarios