Carlos Fernández

Soy el fundador de Dataprix, y doy la bienvenida a todos los visitantes del portal, y os animo a registraros y participar.

A nivel profesional soy Ingeniero Informático, con muchos años de experiencia en entornos de bases de datos y Business Intelligence, y bastantes kilómetros hechos ya con herramientas como Cognos, MicroStrategy, SQL Server Integration Services, PowerBI o Tableau.

Últimamente experimentando con Python.

Knowledge Area
Business Intelligence
Profesional/experto IT (Desarrollador, Analista, Consultor, DBA, Administrador de sistemas, Jefe de proyecto..)
e-mail de contacto
carlos.fernandez@dataprix.com

Miembro desde hace

17 años 1 mes

Publicaciones

  • Crear en SQL Server un rol adicional para ejecutar stored procedures

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

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

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

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

     

    Es tan fácil como hacer algo así:

    -- Crea un nuevo rol para ejecutar stored procedures
    CREATE ROLE db_execute
    
    -- Asigna permisos de ejecución de procedimientos almacenados al rol
    GRANT EXECUTE TO db_execute
    
    -- Agrega un usuario al recién creado rol db_execute role
    EXEC sp_addrolemember 'db_execute', 'usuario'

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

     

  • Pruebas de rendimiento y optimización para hostings y sitios web

    Test de velocidad de carga después de activar PageSpeedEl rendimiento de una web es un factor muy importante, tanto para proporcionar una buena experiencia de navegación al visitante como para que el algoritmo de Google te tenga mejor considerado en sus resultados de búsqueda, así que merece la pena invertir un poco de esfuerzo y a veces de dinero en que tu web responda rápido a las interacciones con los visitantes y usuarios..

  • Cómo hice un cambio de hosting, de Dreamhost a Siteground

    Asignación de permisos en hosting SiteGround para usuario de MySQLLlevaba muchos años utilizando el hosting compartido de Dreamhost, y estaba contento con el servicio, ya que me han ofrecido un servicio muy estable, un panel de control fácil de utilizar, y tráfico y espacio ilimitado para todos mis dominios, pero siempre he tenido el problema de que mis visitas vienen de España, y los servidores de Dreamhost están en Estados Unidos, cosa que penaliza bastante el tiempo de carga.

    Esa ha sido la principal razón del cambio, tener los servidores más cerca de mis usuarios, y también disponer de una IP española para el SEO, eso y también la buena fama de Siteground en cuanto a velocidad y calidad del servicio, y una buena oferta que ofrecían en ese momento, que me hizo acabar de decidirme..

  • Cómo programar la ejecución de jobs y transformaciones de kettle / PDI CE

    Foros IT

    La versión Enterprise de Pentaho Data Integration incluye un scheduler con el que es muy fácil programar la ejecución de jobs de Kettle, pero si tienes la versión CE (Community Edition) no busques este scheduler porque es uno de los 'extras' que incluye la versión de pago de PDI.

    La buena noticia es que, aunque no sea tan intuitivo, con la versión CE es bastante fácil utilizar las aplicaciones kitchen o pan desde la linea de comandos para ejecutar jobs y transformaciones de Kettle, respectivamente.

    Después sólo hay que incluir el comando en un script ejecutable, y llamar al script desde un programador de tareas externo como el CRON de Linux, el Programador de tareas de Windows, desde otras ETL's, o desde gestores de jobs de bases de datos como PostgreSQL o SQLServer.

    Ejemplo de ejecución de jobs de Kettle desde linea de comandos

    Yo lo he hecho desde windows y he utilizado el Agente de SQL Server para crear un trabajo con una programación diaria que ejecuta un archivo .bat con el comando de kitchen que ejecuta un job de kettle, y este es el ejemplo de contenido del .bat:

  • Cómo conectar desde Visual Studio y SSIS con bases de datos Oracle

    Administrador de conexiones SSIS OLEDB a OracleConectar flujos de datos de Integration Services con bases de datos Oracle es muy sencillo, siempre que tengas bien configurado el driver de Oracle que te va a permitir esta conexión.

    Los drivers que vienen por defecto no suelen funcionar bien para conectar con Oracle, y lo más recomendable es instalar y utilizar los conectores que proporciona Oracle, el famoso cliente de Oracle, tanto para trabajar con SQL Server Integration Services, como para crear aplicaciones directamente con Visual Studio..

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

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

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

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

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

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

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