944 063 154

Blog

Etiqueta: SQL

Recuperando una BBDD SQL Server y su último ID insertado

Publicado enDesarrollo y Programación en octubre 22, 2018 1:00 pm

En este post vamos a hablar sobre diferentes recuperaciones en SQL Server; de cómo recuperar una base de datos que no contenga ningún archivo de log y del proceso a seguir para conseguir el último ID insertado en SQL.

Recuperar una base de datos

Si por cualquier motivo no tienes el archivo de transacciones (.ldf), lo más seguro es que obtengas un error de este tipo a la hora de intentar adjuntar una base de datos desde el Wizard de SQL. Si quieres recuperar una base de datos sin archivo de log en SQL Server tendrás que seguir los siguientes pasos:

recuperar una bbdd-sql-recuperaciones en sql server

Suponiendo que el .mdf esté en buenas condiciones, puedes probar a adjuntar la base de datos y forzar a la reconstrucción del archivo de transacciones.

El siguiente ejemplo muestra cómo adjuntar la base de datos, que en este caso hemos llamado “sergiosainz”, indicando el path a mi .mdf. En tu caso, deberás sustituir esos valores por los que se correspondan con tu base de datos; de lo contrario no será posible recuperar la base de datos.

USE [master]
GO
CREATE DATABASE [sergiosainz] ON
(FILENAME = N’C:Program FilesMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLDATAsergiosainz.mdf’)
FOR ATTACH_REBUILD_LOG
GO

Si, en vez de recuperar una base de datos, necesitas rescatar un ID, entonces te interesa la segunda parte de nuestro post.

Recuperar el último ID insertado

¿Eres uno de los que aún no utiliza el driver oficial de SQL Server? Si este es tu caso, a continuación, te dejamos un pequeño tip para recuperar el último ID insertado en una consulta de SQL Server con la obsoleta extensión MSSQL de PHP. Aunque pueda no parecerlo, es un proceso que resulta muy sencillo y para el que no hacen falta conocimientos avanzados de programación.

Para recuperar el último ID insertado en tu base de datos MSSQL, necesitarás un script similar al que te indicamos a continuación.


$q = mssql_query("INSERT INTO TableName(...) VALUES(...); SELECT ; LAST_INSERT_ID=@@IDENTITY");
$r = mssql_fetch_assoc($q);

Como puedes comprobar, la ejecución de este script no entraña ninguna dificultad. Siguiendo este simple proceso, podremos recuperar el último ID insertado en una consulta de SQL Server.

Si quieres saber más acerca del lenguaje SQL, échale un vistazo a nuestro post sobre Consultas SQL. En el que hablamos sobre cuáles las consultas SQL que más se ejecutan y la cantidad de CPU que consumen.

Si tienes cualquier duda en relación a bases de datos, estamos a tu disposición a través de nuestras vías de soporte. No dudes en escribirnos mediante el sistemas de tickets o correo electrónico para lo que sea. Y, ya sabes, no te olvides de pasar de vez en cuando por nuestro blog sobre tecnología y programación.

Consultas SQL que más se ejecutan y el CPU que consumen

Publicado enGeneral en octubre 19, 2018 10:15 am
En las tareas de administración de SQL Server, es necesario recabar información; especialmente a fin de conocer las sentencias que más hacen trabajar al servidor. Por ello, es de gran utilidad conocer cuáles son las consultas SQL que más se ejecutan y cual es su consumo de CPU. SQL Server es un sistema que ayuda a la gestión de las bases de datos. Un producto de Microsoft que está basado en el modelo relacional, pero que además, se utiliza para el rendimiento de instancias en el motor de la base de datos. Esto es, depurar procedimientos o llevar a cabo pruebas de esfuerzo.
Lo habitual es que, entre las consultas más ejecutadas en SQL Server, se encuentren consultas de selección o básicas. Pero también pueden darse cualquiera de los otros tipos de consultas, como consultas de descripción, con predicado o de acción.

Las consultas SQL más ejecutadas

Para conocer cuáles son las consultas que con mayor frecuencia se realizan en SQL Server basta con un script. Estas líneas de texto mostrarán, entre otras cosas, el top ten de las consultas que más veces se repiten. Es posible que, en muchos casos, aparezcan repetidas. Para evitar las duplicidades en las consultas, puedes utilizar servicios de caché. De esta forma, se mostrarán las consultas más ejecutadas sin repeticiones.


SELECT TOP 10
qs.execution_count,
SUBSTRING(qt.text,qs.statement_start_offset/2,
(case when qs.statement_end_offset = -1
then len(convert(nvarchar(max), qt.text)) * 2
else qs.statement_end_offset end -qs.statement_start_offset)/2)
as query_text,
qt.dbid, dbname=db_name(qt.dbid),
qt.objectid
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY
qs.execution_count DESC

En ocasiones, es posible que nuestro SQL Server tenga un gran consumo de CPU. Una buena forma de saber de dónde viene ese consumo excesivo de CPU es realizar consultas. De esta forma podremos saber cuáles son las que más sobrecargan, de media, nuestro servidor. Este consumo elevado de CPU en el servidor puede deberse a diferentes motivos; desde fallos en la memoria del servidor a espacio insuficiente. También es posible que esto se deba a la presencia de algún elemento malicioso que ejecuta demasiada actividad aunque no sea visible.

En cualquier caso, el consumo de CPU es un aspecto que no debe descuidarse en un servidor. Ya que esto podría afectar al rendimiento del servidor y provocar problemas de operatividad.

Consultas SQL con mayor consumo de CPU

Para conocer dónde se encuentra el problema, podemos recurrir a un script. De esta forma podremos saber cuáles son las consultas con un consumo más elevado de CPU. Unas consultas que pueden estar sobrecargando la CPU de nuestro servidor.

SELECT TOP 10
qs.total_worker_time/qs.execution_count as [Avg CPU Time],
SUBSTRING(qt.text,qs.statement_start_offset/2,
(case when qs.statement_end_offset = -1
then len(convert(nvarchar(max), qt.text)) * 2
else qs.statement_end_offset end -qs.statement_start_offset)/2)
as query_text,
qt.dbid, dbname=db_name(qt.dbid),
qt.objectid
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY
[Avg CPU Time] DESC

Para mejorar aún más el rendimiento de tu servidor, puedes consultar cuáles son las consultas SQL Server que más se ejecutan para optimizar el alojamiento. Un cambio que se reflejará en el comportamiento de los sitios web que en él se encuentren.

Si además de informarte sobre consultas SQL quieres saber de recuperaciones en SQL Server, en nuestro blog encontrarás la información necesaria.

Clonar una base de datos

Publicado enSistemas TI

Si quieres hacer pruebas, actualizar o cambiar algo en una base de datos, es recomendable realizar antes una copia de seguridad. De esta forma, puedes introducir los cambios que desees en el backup de la base de datos, sin tocar la base de datos en producción. Así, te asegurarás de que tus datos permanezcan siempre a buen recaudo mientras realizas pruebas en el sitio web o en su base de datos. Y es que utilizando para las pruebas una copia de la base de datos en lugar de la base de datos original, evitas perderlo todo en el caso de que la BBDD se corrompa.

Para clonar nuestra base de datos podemos recurrir al panel de control Plesk. Una técnica que es igualmente válida para clonar bases de datos MySQL como aquellas que sean MSSQL. Desde Plesk, además de clonar las bases de datos que necesitemos, también es posible reparar aquellas bases de datos que estén corruptas. Algo que te explicamos en nuestros artículos sobre “Cómo reparar una base de datos, parte 1” y “Cómo reparar una BBDD corrupta, parte 2“, en los que te explicábamos cómo hacerlo paso a paso.

Clonar una base de datos

1. En primer lugar, accede al panel de control Plesk. Una vez allí, ve a Sitios web y dominios > Bases de datos. Selecciona la base de datos la que quieres realizar backup y pincha en Copiar.

2. Suscripción de destino. En el caso de que tengamos más alojamientos en una misma cuenta y dentro de un mismo servidor, será posible escoger otro dominio o suscripción.

  • Base de datos de destino. Tenemos que crear una base de datos nueva y ponerle el nombre que queramos.
  • Crear una copia completa. Seleccionamos esta opción si lo que queremos es traernos todos los registros de la base de datos de origen. En el caso de que sólo necesitemos la estructura de la base de datos tenemos que dejar la opción sin marcar; a fin de evitar importar datos que no necesitamos.

3. Con esto se empezará a clonar la base de datos. Ten en cuenta que en función del tamaño de la base de datos y la opción de copia que hayamos elegido, el tiempo que tarde en completarse el backup puede variar; a mayor número de datos, mayor será el tiempo necesario para la copia de seguridad. Además, verás que el sistema no da la opción de Webadmin si no existe un usuario con permisos. Si este es tu caso, primero deberás crear el usuario corresponiente y otorgarle los permisos necesarios.

4. A continuación, en la pestaña de usuarios, podemos crear el acceso correspondiente.

clonar una base de datos-linube

Con esto ya tenemos nuestra base de datos clonada, rápido y sencillo ¿verdad?

clonar una base de datos-sql

 

Pero, si por el contrario, lo que quieres es recuperar una base de datos sin archivo de log, puedes consultar nuestro artículo sobre recuperaciones en SQL Server.

Si, a pesar de todo sigues teniendo dudas en relación a las bases de datos, puedes ponerte en contacto con nosotros. Estaremos encantados de ayudarte.

Exportar/Importar una BBDD MySQL con Plesk y phpMyAdmin

Publicado enSistemas TI

En muchas ocasiones es probable que necesitemos mover el contenido de una base de datos a otra. Bien sea porque vamos a crear una base de datos a la que añadiremos información disponible en otra base de datos, o por cualquier otro motivo. Si necesitas realizar esta acción, te explicamos qué tienes que hacer, y cómo hacerlo, para mover el contenido de una base de datos MySQL a otra nueva. Para ello, utilizaremos el panel de control Plesk y phpMyAdmin.

Exportar una base de datos MySQL

1. En el panel de control Plesk vamos a SITIOS WEB Y DOMINIOS y desde allí a la opción Bases de Datos.

2. Una vez dentro de la pestaña de bases de datos, seleccionamos la opción Webadmin de la base de datos origen; es decir, de la base de datos que queremos exportar.

3. Ya en phpMyAdmin, vamos a la opción Exportar y le damos a Continuar.

Importar una base de datos MySQL

Cuando ya hemos exportado los datos de una BBDD, tenemos que importarlos en la nueva base de datos. Para ello, tenemos que al Webadmin de la base de datos de destino. Si aún no hemos creado la base de datos nueva, este es el momento de crearla; algo que podemos hacer desde el propio panel de control Plesk.

1. Antes de importar la base de datos tenemos que editar el archivo .sql que nos hemos descargado. Para realizar esta acción podemos utilizar cualquier editor de texto simple, en este ejemplo hemos utilizado Sublime Text; pero cualquier otro es igualmente válido.

Llegados a este punto, nos encontramos con 2 líneas importantes:

CREATE DATABASE. Esta línea podemos borrarla entera. Ya que no es necesario crear la base de datos al haberlo hecho desde el panel de control Plesk.
USE databasename. El databasename debe coincidir con el nombre de la base de datos destino; de no ser así, la información no se importará de forma correcta.


base de datos MySQL-mysqlsublime

2. Con nuestro .sql listo, deberemos ir a la opción Importar. Aquí, seleccionamos la base de datos a subir y le damos a Continuar.


base de datos MySQL-mysqlimport4

3. Si todo ha ido bien, veremos que se han creado las correspondientes tablas y todos sus registros.


base de datos MySQL-mysqlimport5

MySQL es el mayor sistema para la gestión de bases de datos relacionales a nivel mundial.

Si necesitas realizar otro tipo de tareas relacionadas con una base de datos; como por ejemplo clonarla, aquí te explicamos cómo puedes hacerlo. Y, si no encuentras la información que buscas en nuestro blog tecnológico, puedes contactarnos para que elaboremos el tutorial correspondiente.

El blog tecnológico de Linube, lo creamos entre todos.

 

Activar el modo exclusivo en SQL Server

Publicado enSistemas TI

Cuando nos disponemos a realizar ciertas operaciones en SQL Server, es posible que se nos requiera un acceso en modo exclusivo a una determinada base de datos. Y es que muchas de las tareas que se realizan en una base de datos SQL requieren de un uso exclusivo por parte del usuario que las va a realizar. Por ello, es muy habitual obtener errores en el caso de que haya conexiones abiertas contra la base de datos; en estos casos obtendremos un error de aspecto similar a este:

Mens. 5030, Nivel 12, Estado 2, Línea 1
No se puede bloquear de forma exclusiva la base de datos para realizar la operación.

Para poder solucionar este problema, debemos ir a las propiedades de la base de datos SQL. Una vez allí, tendremos que realizar lo siguiente: acudir a las opciones de la BBD > verificar cuál es su estado > restringir acceso a la base de datos. Una vez allí, deberemos seleccionar la opción single.

Modo exclusivo mediante consultas

Los pasos que te hemos indicado con anterioridad no son la única forma de obtener un acceso exclusivo a una base de datos SQL. Si lo prefieres, también puedes realizar una consulta a la base de datos para ejecutar la misma acción. Para ello, deberás realizar los siguiente:

ALTER DATABASE [nombre_bd] SET SINGLE_USER WITH ROLLBACK IMMEDIATE

GO

Una vez hayas ejecutado la consulta, será cuando podamos proceder a realizar los cambios necesarios en la base de datos para otorgar a una determinada aplicación un acceso exclusivo a la base de datos.

Salir del modo exclusivo SQL Server

Cuando ya no necesites un acceso exclusivo a la base de datos SQL Server, puedes volver al modo que permite el acceso a la BBDD a múltiples usuarios. Para ello, primero deberás matar la conexión con la base de datos. Una vez la conexión se haya interrumpidos, podrás volver a cambiar el modo de conexión con la base de datos SQL. Es decir, puedes deshacer los cambios que habías introducido para otorgar el modo exclusivo a un usuario y evitar que aparezcan errores. Si lo que quieres es salir del modo exclusivo SQL Server, puedes hacerlo fácilmente a través de la siguiente consulta:

Kill [spid]
ALTER DATABASE [nombre_bd] SET MULTI USER

De esta forma, se evitará que aparezca el error si una aplicación requiere de acceso exclusivo a una base de datos. Además, podrás deshacer esta operación en cualquier momento con la misma facilidad.

Agregar o quitar una interfaz de red en SQL Server

Publicado enSistemas TI

Una interfaz de red es una aplicación que se encarga de posibilitar que una máquina virtual pueda comunicarse con otros recursos dentro de la red. Una herramienta que es de gran utilidad para, entre otras cosas, manejar y gestionar bases de datos dentro de un servidor; ya sea un servidor físico o uno virtual. En este caso, para mostrar cómo agregar o quitar una interfaz de red en SQL Server utilizaremos una máquina de Azure para realizar estos cambios. Desde la interfaz de red pueden hacerse muchas tareas como, por ejemplo, establecer una conexión entre diferentes recursos. En nuestro caso esta conexión se producirá entre Azure y otros recursos locales alojados en la máquina. Por ello, una única máquina puede contar con varias interfaces de red.

Es importante tener en cuenta que cuando se instala SQL Server en un alojamiento, el gestor de bases de datos tiene que configurarse teniendo en cuenta las interfaces de red. Esto se debe a que no es válido cualquier interfaz de red, sino solo aquellas que se encuentren habilitadas en el momento de la instalación. Pero, si más tarde, queremos habilitar o deshabilitar una nueva intefaz tendremos que hacerlo de forma manual; al no ser posible que la interfaz aparezca o desaparezca con cada cambio en la configuración de red por defecto.

Añadir interfaz de red desde el registro

Si quieres añadir una interfaz de red a una máquina en Azure, puedes hacerlo editando el registro. Esta, además, es una de las mejores formas para agregar o quitar interfaces de red de una máquina. Ya que la máquina dispone de una ubicación específica para guardar todo el registro. En el caso de una máquina Azure podrás encontrar estos datos en la siguiente ubicación:

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL ServerMSSQL.1MSSQLServerSuperSocketNetLibTcp]

Si lo que necesitas es quitar la interfaz de red, en lugar de añadirla, también puedes hacerlo de diferentes maneras. Una de ellas, y con toda seguridad la forma más sencilla, es borrando el registro en el que se encuentra la key. Así, en el caso de que luego quieras volver a añadirla, solo tendrás que exportar una clave y editarla. Para ello, ni siquiera es necesario crear la clave, ya que esta ya existía antes de que se creara el registro; por lo que solo tendrás que editarla de la forma que más te convenga. De esta forma, cuando más tarde se ejecute el .reg se insertarán todos y cada uno de los cambios que hayan sido introducidos.

interfaz de red

Cómo cambiar formato de SQL Server (dateformat)

Publicado enSistemas TI

¿Tienes instalado por defecto otro idioma en tu gestor de bases de datos? Aunque no lo parezca este es un problema que puede suceder al migrar una base de datos a otro entorno MSSQL que no comparta el mismo lenguaje de instalación que el que teníamos en un principio. Las ocasiones en las que hace falta cambiar el lenguaje de SQL (“date format of sql server” en inglés) son bastante numerosas.

En nuestro caso el cambio se ha porducido al restaurar una base de datos que se encontraba en un SQL con lenguaje “español” a otro que habían instalado en “us_english”. Con el primero las fechas (campos de tipo datetime) se muestran en formato “dd/mm/yyy“; pero en inglés las fechas tienen el formato “mm/dd/yyyy”.

Si mostramos la tabla desde el Microsoft SQLServer Managmentent Studio veremos que las fechas SQL se muestran tal y como hemos importado. Pero el problema viene cuando queremos hacer una consulta. Por ejemplo, desde nuestra web, y SQL Server nos devuelve la fecha. En este momento nos encontraremos con que se produce un error que está relacionado con el formato de la fecha. Por ello, y puestos ya en situación, vamos manos a la obra con el date format SQL Server.

¿Cómo ver el lenguaje SQL?

select @@language

Si MSSQL ha sido instalado en inglés seguramente obtendrás us_english como resultado.

Para ver todos los lenguajes disponibles en SQL y cuáles son sus propiedades podemos hacer lo siguiente:

  sp_helplanguage

lenguaje sql server-date format sql server

¿Cómo establecer Date format SQL Server?

De la siguiente manera podemos establecer el lenguaje español para todas las consultas que lancemos desde la sesión y con el usuario que estemos conectados:

SET LANGUAGE Español

También podemos, por ejemplo en el caso de nuestra web, antes de lanzar una consulta SQL especificar el dateformat deseado en cada caso, indicando: 

set dateformat dmy

¿Cómo establecer el lenguaje predeterminado para todas las bases de datos del servidor?

De esta manera conseguimos que por defecto se devuelvan las fechas en inglés al formato dd/mm/yyyy. Lo que debemos hacer es abrir Microsoft SQL Server Managmentent Studio. Y a continuación ir a las propiedades del servidor SQL; en el apartado avanzado, podremos modificar la opción idioma predeterminado por Español.

lenguaje-date format sql server

 

 

 

 

 

 

 

 

Además hay que tener en cuenta el lenguaje por defecto de los Inicios de sesión que existan en el servidor; ya que los que creemos nuevos a partir de ahora lo harán con lenguaje español. Para ello tendremos que hacer lo siguiente:

USE (master) 

GO

AFTER LOGIN (serversqlsergiosainz) WITH DEFAULT_DATABASE=(master) DEFAULT _LANGUAGE= (Spanish)

GO

Recuerda que también es posible modificar el idioma por el deseado desde las propiedades del usuario.

date format sql server

Y hasta aquí el tutorial sobre Date format sql. En lo que respecta a Transact-SQL, estos son los tipos de datos y funciones de fecha y hora a partir de SQL Server 2012.

Y si quieres saber más, ¡consulta nuestros artículos!

Copiar tablas de una base de datos SQL Server a otra

Publicado enSistemas TI

Si cuentas con una base de datos en producción y quieres disponer de una copia de esos datos para crear una base de datos en desarrollo, solo necesitas algunas tablas. Para ello, puedes copiar tablas de una base de datos SQL Server a otra. Aunque esto puedes hacerlo mediante un script, en esta ocasión optaremos por utilizar Wizard. Un asistente para copiar datos desde una base de datos origen a otra base de datos.

Cómo copiar tablas de una base de datos SQL Server

En primer lugar, tendremos que seleccionar la base de datos destino. Cuando la tengamos localizada la BBDD original, ya podemos proceder a la importación de los datos. Para ello, accedemos al menú de Wizard haciendo click con el botón derecho del ratón; Tasks > Import Data…

copiar tablas de una base de datos SQL Server a otra-I

Al hacer click, se iniciará el asistente para la importación y exportación de SQL Server Wizard. Haremos click en Next, para que el proceso siga su curso.

copiar tablas de una base de datos SQL Server a otra-II

Una vez Wizard se haya iniciado, nos solicitará el nombre de servidor en el que se encuentra la base de datos. En nuestro caso, al tratase de una base de datos local, podemos poner un punto como nombre del servidor; en tu caso, deberás poner el nombre correcto del server, de otra forma no será posible conectarse a la base de datos original. Después, tendremos que autentificarmos mediante Windows o a través de SQL. Finalmente, si los datos que hemos proporcionado son correctos, nos dejará seleccionar la base de datos de origen. En este ejemplo, la BBDD origen es la que lleva por nombre LINUBE_PROD.

copiar tablas de una base de datos SQL Server a otra-III

A continuación , Wizard nos pedirá el nombre de la base de datos de destino. Para nosotros, la base de datos a la que deberán copiarse las tablas es LINUBE_DEV. En el caso de que no tuviésemos la base de datos de destino creada, deberías empezar por ello. Para ello, basta con pulsar en ”New…” para que se cree.

copiar tablas de una base de datos SQL Server a otra-IV

Tal y como se muestra en la siguiente captura de pantalla, dejaremos marcada la primera opción; ya que es la opción que buscábamos: copiar tablas de una base de datos a otra.

copiar tablas de una base de datos SQL Server a otra-V

Ahora el asistente nos mostrará las tablas y vistas que podemos importar desde la base de datos de origen. En nuestro caso como solo existe una tabla (T_Servidores_Cloud), que es la que hemos creado a modo de ejemplo, tenemos que seleccionar esa. Si tú tienes más de una base de datos, deberás escoger la que quieras copiar. Como en el destino no existe la tabla, el sistema de forma automática nos la creará con el mismo nombre y los mismos campos que la base de datos de origen.

copiar tablas de una base de datos SQL Server a otra-VI

Si necesitamos que el nombre sea otro, también podemos editarlo. Además, es posible controlar los campos de destino pinchando en el botón “Edit Mappings…” para que se nos muestren todas las opciones posibles.

copiar tablas de una base de datos SQL Server a otra-VII

Finalmente aparecerá un resumen de los cambios que se van a realizar. Si todo está correcto, deberemos pulsar en “Finish” para que la información se copie de una base de datos a otra.

Cuando el proceso haya llegado a su fin, ya contaremos con una nueva base de datos SQL Server con los datos que hemos copiado de la BBDD original.

Couchbase y el esfuerzo por la consolidación NoSQL

Publicado enDesarrollo y Programación

CouchOne, la empresa creadora de CouchDB, y Membase, la empresa madre de Membase Server y Memcached, se han fusionado para crear una nueva iniciativa. Un nuevo proyecto ral que le han dado el nombre de Couchbase. Desde que se produjera la fusión, cada una de las empresas ha continuado asistiendo y apoyando a sus respectivos proyectos CouchDB, Membase y Memcached. Pero han querido crear este nuevo proyecto de código abierto  para tratar de unir esfuerzos en la dirección de la normalización de las bases de datos no relacionales.

Ahora, la nueva compañía surgida a partir de esta fusión tendrá por CEO al ex-CEO de Membase, Bob Wiederhold. Asimismo, el cofundador y CEO de CouchOne, Damien Katz, será el CTO de la misma. Casualidades de la vida, antes de la fusión, Membase estaba buscando un CTO. Mientras que CouchOne andaba detrás de incorporar un nuevo CEO. Con el nacimiento de Couchbase, ambas compañías se quedarán contentas; ya que podrán contar con el perfil que les faltaba, además de dar un paso hacia delante en el apoyo a las bases de datos NoSQL.

Nuevo panorama en las bases de datos con Couchbase

Esta operación se enmarca en el nuevo escenario que muchas empresas se están encontrando en Estados Unidos. Y es que en el país americano ya se habla y se comenta acerca de un posible avance de las bases de datos NoSQL. Para ello, se están basando, en parte, en las decisiones a favor de aplicaciones como FourSquare; a pesar de los problemas que pueden llegar a la hora de escalar la aplicación. También están tomando como ejemplo determinadas redes sociales, entre las que destaca la red de microblogging Twitter.

Por el momento, las bases de datos relacionales le sacan mucha ventaja a aquellas no relacionales o NoSQL. Especialmente en el ámbito empresarial donde el uso de bases de datos SQL se encuentra muy por encima de cualquiera de tipo NoSQL. Y si este es el panorama que tenemos en EEUU, en España la situación es aún peor para las bases de datos no relacionales. Existen muchos consultores y técnicos de sistemas que ni siquiera saben en qué consiste o qué es NoSQL. Es decir, las bases de datos no relacionales, además de en una clara situación de desventaja respecto a las SQL; parece que tendrán que pelear duramente para hacerse con una posición en el mercado.

A pesar de lo díficil que en este momento parece todo, tendremos que darle tiempo al proyecto CouchBase. Quién sabe si dentro de unos años el uso de bases de datos NoSQL pueda llegar a equipararse al de SQL y las bases de datos no relacionales pueden convertirse en el tipo de base de datos del futuro. En cualquier caso, habrá que esperar para comprobar si verdaderamente NoSQL es el paso evolutivo natural de las bases de datos.

PDO en la próxima versión del driver SQL Server para PHP

Publicado enDesarrollo y Programación

Hace unos días podíamos leer que por fin el driver de PHP para trabajar con SQL Server desde PHP contará con soporte para PDO en su versión 2.0.

PDO (PHP Data Objects) es una extensión que permite el acceso a los datos para PHP 5 a través de una capa de abstracción. Esto permite que puedan hacerse consultas a la base de datos de PHP utilizando funciones propias del lenguaje de programación. Una extensión que fue desarrollada en 2003, aunque no fue estable hasta la llegada de PHP 5.0; la versión del lenguaje de programación publicada en 2004. Para poder considerar a PDO como estable y que incluyera su primera interfaz por defecto, aún tendría que pasar otro año más.

Aunque PHP no sea un lenguaje de programación orientado a objetos por sí mismo, sí permite esta funcionalidad. Gracias a la extensión PDO es posible utilizar funciones de extensión regulares para acceder a los datos. Esto es posible debido a la implementación de la tecnología orientada a objetos.

Porqué usar PDO

Esta versión del driver de SQL Server es compatible con la API de PDO. Con independencia a esta compatibilidad, se sigue manteniendo la API nativa de SQL Server que existía hasta el momento. De esta forma es posible ofrecer una compatibilidad absoluta entre las dos API. Además de haberse creado una capa común a ambas que permite disponer de las funciones de ambas APIs; tal y como se indica en el gráfico inferior.

La incorporación de este controlador de SQL Server es un gran avance en el desarrollo de la aplicación.  Y también lo es para todos aquellos desarrolladores que trabajan con PHP bajo algún entorno de Microsoft. Algunos de los ORM más importantes están escritos en PHP; al igual que muchos gestores de contenido, como Drupal. Con el driver PDO es mucho más fácil integrar aplicaciones y añadir más funcionalidades a uno de los frameworks más utilizados para el desarrollo web.

PDO-php-sqlsrv

Puesto que la versión estable aún no se ha publicado, no es posible ofrecer este servicio por el momento. Eso sí, en cuanto esté disponible, procederemos a implantar el driver en todos nuestros servicios de hosting, para poder ofrecerte siempre el mejor servicio. Queremos hacerte la vida en internet mucho más fácil y ofrecer siempre las últimas innovaciones tecnológicas y versiones estables es prueba de ello. Además, utilizar las últimas versiones es una forma muy eficaz de evitar cualquier ataque informático; ya que en cada actualización de los servicios se soluciona cualquier problema de seguridad que pudiera haber.

Importar una base de datos a SQL Azure (II de II)

Publicado enSistemas TI

Anteriormente veíamos cómo importar una base de datos a SQL Azure utilizando un Wizard para ello. En esta ocasión vamos a realizar la operación directamente a través de SQL Server Management Studio (SSMS); para ello, generaremos un script.

Antes de nada, deberemos comprobar si tenemos compatibilidad con Azure. Para ello, es necesario tener instalada la versión R2 de SQL Server Management Studio. Si no cuentas con la última actualización de esta aplicación, puedes descargarla en su sitio oficial.

De local a un script

Para poder exportar la base de datos en local y llevarla a un script en un formato que sea compatible con Azure; primero debemos conectarnos desde SSMS a nuestro server local. Una vez realizada la conexión, podremos realizar la exportación de la base de datos en el formato de Azure. Para ello, utilizaremos el asistente de la aplicación que permite la generación de scripts.

En primer lugar, y una vez dentro de Microsoft SQL Server Management Studio, debemos buscar la base de datos “eventos”. Haciendo click con el botón derecho del ratón, elegiremos tareas > generar scripts de entre las opciones que se despliegan en el menú.

importar una base de datos a sql azure-export

importar una base de datos a sql azure-script

En nuestro caso, vamos a exportar todas las tablas y los usuarios que se encuentran dentro de la base de datos. Si solo necesitas exportar unos datos en concreto, este es momento de que lo indiques. De esperar, ya no será posible hacerlo más tarde.

importar una base de datos a sql azure-objetos

En este paso debemos indicar dónde queremos que se guarde el script que vamos a generar. Para ello, tenemos que acceder a las opciones Avanzadas para especificar qué queremos exportar en formato para Azure. Así, podremos hacerle saber que queremos incluir tanto el esquema como todos los datos que se recogen en la base de datos.

importar una base de datos a sql azure-scripting

importar una base de datos a sql azure-opciones

Con esto, nuestro script ya está listo. Ahora, es el momento de iniciar la importación de la base de datos que hemos exportado previamente en nuestro servidor SQL Azure.

importar una base de datos a sql azure-resumen

importar una base de datos a sql azure-guardar script

Importar una base de datos a SQL Azure

Una vez hemos descargado la base de datos, deberemos seguir los siguientes pasos para subirla a SQL Azure. Para ello, en primer lugar, debemos conectar nuestro servidor con el servicio SQL Azure; para ello, basta con que iniciemos sesión.

SQL Server 2008 R2-importar una base de datos a sql azure

Una vez dentro de nuestra suscripción, y al igual que cuando hemos realizado la importación a través de Wizard, necesitamos crear una nueva base de datos. Como en el anterior tutorial, hemos llamado a esta nueva base de datos “eventos”.

Crear base de datos-importar una base de datos a sql azure

Por último abrimos nuestro script y lo ejecutaremos en el servidor SQL Azure cuando aparezca el mensaje de que los comandos han sido completados de forma correcta.

importar una base de datos a sql azure

De esta forma, nuestra base de datos local en SQL Server, ya estará importada en Azure.

importar una base de datos a sql azure-explorador

Aquí termina nuestro tutorial paso a paso de cómo importar una base de datos a SQL Azure. Y ya sabes, no dudes en escribir si tienes alguna duda o consulta; estaremos encantados de atenderte.

ASP.NET con IIS 7.5 y Plesk 9.3

Publicado enGeneral

Ya está disponible la nueva actualización de Plesk; y con ello hemos detectado el siguiente problema tras instalar Plesk 9.3 sobre Windows Server 2008 R2: “ASP.NET no está autorizado para acceder al recurso solicitado” (is not authorized to access the requested resource).


 Server Error in '/mssql' Application.
 --------------------------------------------------------------------------------

 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
 Description: An unhandled exception occurred during the execution of
 the current web request. Please review the stack trace for more
 information about the error and where it originated in the code.

 Exception Details: System.UnauthorizedAccessException: Access is
 denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

 ASP.NET is not authorized to access the requested resource. Consider
 granting access rights to the resource to the ASP.NET request
 identity. ASP.NET has a base process identity (typically
 {MACHINE}ASPNET on IIS 5 or Network Service on IIS 6) that is used if
 the application is not impersonating. If the application is
 impersonating via , the identity will be
 the anonymous user (typically IUSR_MACHINENAME) or the authenticated
 request user.

 To grant ASP.NET access to a file, right-click the file in Explorer,
 choose "Properties" and select the Security tab. Click "Add" to add
 the appropriate user or group. Highlight the ASP.NET account, and
 check the boxes for the desired access.

 Source Error:

 An unhandled exception was generated during the execution of the
 current web request. Information regarding the origin and location of
 the exception can be identified using the exception stack trace below.

 Stack Trace:

 [UnauthorizedAccessException: Access is denied. (Exception from
 HRESULT: 0x80070005 (E_ACCESSDENIED))]

 [FileLoadException: Could not load file or assembly
 'System.ServiceModel, Version=3.0.0.0, Culture=neutral,
 PublicKeyToken=b77a5c561934e089' or one of its dependencies. Access is
 denied.]
 System.Reflection.Assembly._nLoad(AssemblyName fileName, String
 codeBase, Evidence assemblySecurity, Assembly locationHint,
 StackCrawlMark&; stackMark, Boolean throwOnFileNotFound, Boolean
 forIntrospection) +0
 System.Reflection.Assembly.nLoad(AssemblyName fileName, String
 codeBase, Evidence assemblySecurity, Assembly locationHint,
 StackCrawlMark&; stackMark, Boolean throwOnFileNotFound, Boolean
 forIntrospection) +43
 System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,
 Evidence assemblySecurity, StackCrawlMark&; stackMark, Boolean
 forIntrospection) +127
 System.Reflection.Assembly.InternalLoad(String assemblyString,
 Evidence assemblySecurity, StackCrawlMark&; stackMark, Boolean
 forIntrospection) +142
 System.Reflection.Assembly.Load(String assemblyString) +28

 System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String
 assemblyName, Boolean starDirective) +46

 [ConfigurationErrorsException: Could not load file or assembly
 'System.ServiceModel, Version=3.0.0.0, Culture=neutral,
 PublicKeyToken=b77a5c561934e089' or one of its dependencies. Access is
 denied.]

 System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String
 assemblyName, Boolean starDirective) +613

 System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo
 ai) +57

 System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection
 compConfig) +178
 System.Web.Compilation.BuildProvidersCompiler..ctor(VirtualPath
 configPath, Boolean supportLocalization, String outputAssemblyName) +54

 System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult(Boolean  isPrecompiledApp)
 +232
 System.Web.Compilation.BuildManager.CompileGlobalAsax() +51
 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()  +337

 [HttpException (0x80004005): Could not load file or assembly
 'System.ServiceModel, Version=3.0.0.0, Culture=neutral,
 PublicKeyToken=b77a5c561934e089' or one of its dependencies. Access is
 denied.]

 System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()
 +58
 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()  +512

 System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager
 appManager, IApplicationHost appHost, IConfigMapPathFactory
 configMapPathFactory, HostingEnvironmentParameters hostingParameters)
 +729

 [HttpException (0x80004005): Could not load file or assembly
 'System.ServiceModel, Version=3.0.0.0, Culture=neutral,
 PublicKeyToken=b77a5c561934e089' or one of its dependencies. Access is
 denied.]
 System.Web.HttpRuntime.FirstRequestInit(HttpContext context)  +8897659
 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)  +85

 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest  wr,
 HttpContext context) +333

¿Cómo corregimos el error de ASP.NET?

El error se podía reproducir al tratar de ejecutar una aplicación desde Plesk. En nuestro caso al lanzar el administrador web para bases de datos SQL Server ASP.NET Enterprise Manager o MyLittleAdmin que se ejecutan desde Plesk.

Si tratamos de corregir el error desde la herramienta Plesk Reconfigurator no solucionaremos el problema debido a que los permisos necesarios no están añadidos. Por ello, tendremos que hacerlo a mano.

Lo único que tenemos que hacer es editar el archivo DiskSecurity.xml que encontraremos en la carpeta %PLESK_DIR%etcDiskSecurity y añadirle el siguiente contenido dentro del tag Entries:


<!-- Permisos a Assembly para ASP.NET Enterprise manager -->

<Entry AccounType="1" Account="Psacln" Path="C:Windowsassembly" AceFlags="FilesOnly" AccessMask="Read" EntryFlags="0x0" /&>

Finalmente hay que ejecutar el siguiente comando en bash para que se apliquen los cambios en los permisos:


"%plesk_bin%applysecurity" --apply

 

Recuerda que también ofrecemos servicios para ASP.net MVC y PHP bajo Windows.

Aunque pueda parecer contradictorio debido a los errores que hemos tenido que subsanar, desde Linube te aconsejamos tener siempre SQL Server actualizado.

Importar una base de datos a SQL Azure (I de II)

Publicado enServidores cloud

En el siguiente post veremos como subir una base de datos local en SQL Server 2008 al servicio SQL Azure.

Existen varias maneras de importar una base de datos a SQL Azure:

  1. Mediante los servicios de integración de SQL Server 2008 (SSIS).
  2. Con BCP.
  3. Desde el código, usando la clase System.Data.SqlClient.SqlBulkCopy.
  4. Utilizando wizards o scripts para la carga de los datos.

En este artículo, utilizaremos la ultima opción para importar la base de datos.

El cloud de Microsoft

Azure, la nube de Microsoft, tiene algunas limitaciones. Por ejemplo, no permite la importación de bases de datos mediante un “restore” ni tampoco adjuntar una base de datos al servidor SQL de Azure.

Para poder realizar la importación de una base de datos, en primer lugar, es necesario crear un servidor SQL Azure. A continuación, habrá que copiar el nombre del servidor que hemos creado, ya que será necesario conocerlo para saber dónde tenemos que conectarnos.

En nuestro caso, hemos aprovechado para crear una nueva base de datos a la que hemos llamado “eventos”. Esto es un paso opcional, ya que como veremos más adelante es posible crear nuevas bases de datos desde el propio Wizard.  Este permite la creación de hasta 149 bases de datos por servidor SL Azure y con un tamaño máximo de 1 GB ó 10 GB.

Importando una base de datos con SQL Azure

En primer lugar, deberemos acudir a nuestra suscripción de Windows Azure Services. Una vez hayamos iniciado sesión, deberemos pinchar en SQL Azure > Database. Allí podremos ver cuántas bases de datos tenemos en el servidor, cuál es su tipo y qué tamaño ocupan.

 

SQL Azure

 

Al lado de la pestaña Databases, se encuentra la de Firewall Settings. Aquí tenemos que añadir al menos una regla que permita la conexión desde nuestro equipo al servidor, en nuestro caso contamos con 3 reglas diferentes.

Firewall

Ahora utilizaremos SQL Azure Migration Wizard para poder migrar la base de datos. La descarga de esta aplicación está disponible en CodePlesk. Para instalarla, sólo hay que seguir el asistente de instalación. Un proceso tan sencillo que no es necesaria la explicación. Pero por si acaso te surje alguna duda, adjuntamos los pantallazos del proceso.

SQL Migration Wizard 1

SQL Azure Migration Manager 2

SQL Azure Migration Manager 3

SQL Azure Migration Manager 4

SQL Azure Migration Manager 5

SQL Azure Migration Manager 6

SQL Azure Migration Manager 7

SQL Azure Migration Manager 8

SQL Azure Migration Manager 9

Si tienes instalado Microsoft SQL Server Management Studio R2, puedes conectarte a tu servidor SQL Azure. Y, si no cuentas con esta herramienta, te facilitamos un enlace para que puedas iniciar la descarga.

sql2008R2

En Microsoft SQL Server Management Studio, solo tienes que acudir al explorador de objetos y conectar el servidor. Una vez estés conectado al servidor, deberás abrir la carpeta que lleva el nombre del servidor al que quieres acceder. Y dentro de esta buscar la carpeta que has creado con anterioridad. Recordamos que nosotros le hemos dado el nombre de “eventos”.

SQL 2008 Management Studio R2

¿Buscas otra forma diferente de realizar la importación de una base de datos a SQL Azure? Consulta la segunda parte de cómo importar una base de datos a SQL Azure.

Ejecutar código SQL nativo en Doctrine

Publicado enDesarrollo y Programación

En ocasiones es posible que necesitemos optimizar ciertas consultas SQL. Otras, simplemente, hacer querys algo complejas; incluso es posible que tengamos que lidiar con el código DQL para generar una determinada query. Y en la gran mayoría de las ocasiones, estas acciones pueden llevarnos demasiado tiempo. Para evitarlo, contamos con la posibilidad de ejecutar código nativo desde Doctrine. En este caso, SQL nativo en Doctrine.

El código nativo es el lenguaje que permite el funcionamiento de una máquina. Un lenguaje que puede crearse de dos formas diferentes. Por un lado, es posible desarrollar código nativo para microprocesadores de fácil funcionamiento: Pero, por otra parte, también puede recurrirse al código nativo como código fuente ya compilado y listo para ser utilizado por una determinada máquina. De esta forma, optimizaremos el tiempo que lleva la realización de una consulta a la base de datos.

Cómo ejecutar SQL nativo

Para ejecutar SQL nativo y reducir al máximo el tiempo para realizar una consulta SQL, puedes recurrir a una serie de scripts que te permitan realizar las tareas necesarias.

Empezaremos, en primer lugar, por definir la consulta que vamos a realizar. Para, a continuación, recuperar el singleton de la conexión. El singleton no es más que un patrón de diseño que nos permitirá crear los diferentes objetos que pertenecen a la misma clase o valor de los elementos que componen la base de datos. Su objetivo es asegurar que la clase solo tenga una única instancia y facilitar un punto de acceso de tipo global a la clase.

Una vez realizadas las configuraciones necesarias, pasaremos a ejecutar la consulta. Finalmente, recuperaremos las tuplas de resultados; es decir, una lista ordenada de los elementos que componen las clases.

A continuación, te indicamos cuáles son los scripts que tienes que utilizar para realizar cada una de las tareas necesarias para la ejecución de código nativo SQL desde Doctrine.

//definimos la consulta
$query = "select id from tabla";

//recuperamos el singleton de la conexión
$con = Doctrine_Manager::getInstance()->connection();

//ejecutamos la consulta
$st = $con->execute($query);

//recuperamos las tuplas de resultados
$rs = $st->fetchAll();

Una vez realizado esto, ya podríamos empezar a ejecutar SQL de forma nativa, optimizando así nuestro código. Y, sobre todo, facilitándonos la escritura de nuevo código.

Teniendo en cuenta el tiempo que, en muchas ocasiones, lleva la ejecución de determinadas tareas; unido a las facilidades que ofrece un código ordenado, utilizar este método es todo un acierto. A partir de ahora, solucionar problemas en el código o las bases de datos no solo será más sencillo, sino que requerirá de un tiempo mucho menor.

Conexiones remotas en SQL Server 2008 y 2005

Publicado enSistemas TI

En ocasiones nos encontramos con un SQL recién instalado y la necesidad de conectarnos a él desde un equipo remoto. En estos casos, en primer lugar, si el equipo cliente no cuenta con las herramientas necesarias para SQL Server, el sistema de manejo de bases de datos; deberemos empezar por obtenerlo. Puedes descargar la versión gratuita del administrador de SQL Server 2008, o alguna de sus anteriores versiones. Por si no sabes desde dónde puedes obtener SQL Server, aquí te dejamos los enlaces de descarga.

– Para SQL Server 2005: Microsoft Management Studio Express.

– Para SQL Server 2008: Microsoft 2008 Management Studio Express.

Pero, mejor aún, si lo deseas puedes descargar el Kit de Herramientas de SQL Server Express 2005. Este Kit, además del administrador de SQL Server, incluye una herramienta gráfica de administración. Así como Business Intelligence Development Studio, un entorno de creación y edición de informes que usa SQL Server Reporting Services. Si usas SQL 2008, la descarga más recomendada para ti es Microsoft SQL Server 2008 Express with Advanced Services.

Configurando conexiones remotas en SQL Server 2008

En primer lugar, debemos ir a la utilidad Configuración de superficie de SQL Server 2005 (Surface Area Configuration Utility). Una vez allí, tenemos que acudir a Configuración de superficie para servicios y conexiones y, dentro de esa opción, a conexiones remotas. En esta pestaña deberemos seleccionar Conexiones locales y remotas, además de seleccionar la opción Usar TCP/IP y canalizaciones con nombre.

sql server 2008-2005-configuracion

En seguno lugar, tenemos que acceder a SQL Configuration Manager. Una vez allí, tendremos que abrir la carpeta Configuración de red de SQLEXPRESS > Protocolos de SQLEXPRESS y habilitamos las conexiones TCP/IP, además de las canalizaciones con el nombre de protocolo y su estado.

sql server 2008-configuracion-manager

A continuación, y siguiendo dentro del SQL Configuration Manager > Protocolos de SQL Express > TCP/IP deberemos especificar en las propiedades Direcciones IP > IPALL > Puerto TCP . Aquí, deberás indicar el puerto 1433, o el que tú prefieras habilitar para SQL.

sql server 2008-Protocolos TCP/IP

Cuando hayas especificado el nuevo puerto, es necesario crear una excepción en el firewall, algo similar a esto: C:Archivos de programaMicrosoft SQL ServerMSSQL.1MSSQLBinnsqlsrvr.exe. Y seguidamente, no te olvides de abrir los puertos 1434 (UDP) y 1433 (TCP).

Finalmente, deberás reiniciar el servicio de SQL para que los cambios que has introducido se apliquen de forma correcta. Ahora que las conexiones remotas ya se han configurado, estamos listos para probar la conexión desde el equipo cliente. Si todo funciona de forma correcta, la configuración de SQL Server 2008 habrá finalizado y podremos empezar a conectarnos al sistema de manejo de bases de datos de forma remota.

Si te ha resultado de interés, puedes echar un vistazo a los artículos relacionados Hosting SQL o Interfaz SQL.