Acceso remoto a MySQL de Bluehost

Tener acceso remoto a una base de datos MySQL de un hosting compartido, nos dará mas posibilidades de administración si logramos configurar la conexión.  Si estás pensando que phpMyAdmin es lo único  que existe, estás muy equivocado.  Existen muchas herramientas, entre ellas MySQL Workbench, que apoyan las tareas de administración.

Por ejemplo, si necesitamos cargar un respaldo de 400MB y el límite de phpMyAdmin es de solo 50 MB, este tipo de herramientas nos ayudará a concretar esta tarea.

Actualmente estoy usando Bluehost para realizar una prueba de un portal y para habilitar el acceso remoto a MySQL hice lo siguiente:

acceso_remoto_mysql_bluehost
En el cPanel ir a la opción Remote MySQL dentro del menú Database Tools
Después agregas las IP que requieren acceder a las bases de datos
Después agregas las IP que requieren acceder a las bases de datos

Y listo. Intenten conectarse desde algún proveedor ODBC o alguna herramienta de administración.

¡Chau!

 

Solucionar error de idioma y localizacion de SQL Server en la instalacion

Hola Mundo.

Después de algunas semanitas de ausencia vuelvo otra vez con un tip para solucionar un problema bastante recurrente en la instalacion de SQL Server cuando se realiza sobre Windows que no coincide con el medio de instalación.

Este error aparece por primera vez en SQL Server 2008 R2 por una nueva política de localización.

El error es este:

Error Localizacion SQL Server Instalacion
Error Localizacion SQL Server Instalacion

El error dice: SQL Server setup media does not support the language of the OS or does not have ENU localized files. Use the matching language-specific SQL Server media or change the OS locale through control panel.

Solucionarlo es muy simple:

  • Ir a Panel de Control
  • Abrir propiedades de Region y Localización
  • Cambiar el formato y la ubicacion a la raiz del idioma del sistema operativo. Por ejemplo, si estás usando es-cl (Español de Chile) debes cambiarlo a es-es (Español de España).
  • Aplicar cambios, guardar y cerrar.
  • Volver a intentar la instalación.

Con este workaround no debieras tener problemas.

 

 

 

Navega Anónimo con Tor Browser

Hace un par de años, escribí como usar Tor en Windows . En el post hablaba sobre como configurar tor para poder usarlo en Windows y navegar de forma anónima.

Quizá instalar los componentes por separado sea incómodo y engorroso. Peor aun, configurar el proxy y después dejarlo como estaba cuando lo único que queríamos era navegar de forma anónima o pasar por la red de tor.

Menos mal que hace algún tiempo existe un paquete que contiene  todo listo para llegar y usar.  Contiene un navegador ya configurado y todo corriendo para tenerlo en el equipo o llevarlo en un flash drive a cualquier parte.

Está disponible para Windows, MacOSX y Linux. En este link: https://www.torproject.org/projects/torbrowser.html están todas las opciones de descargas (donde podemos escoger el idioma) y están las instrucciones para cada sistema.

¡Ya no hay excusa para no probar Tor!

Error 1478 en SQL Server Mirroring

Este error es bastante recurrente cuando se quiere levantar Database Mirroring. Puede que al momento de configurarlo no se haya presentando ningún warning y ningún error en el proceso, pero si al momento de echar a andar el mecanismo de mirroring aparece este error, es porque no se realizó un paso previo.

Error 1478
Error 1478

Así se ve el error y la solución es re simple. Solo hay que respaldar el log de transacciones de la base de datos primaria y restaurar este respaldo en la base de datos de espejo con la opción de NORECOVERY.
Una vez que esta tarea se ha realizado, ya se puede levantar Mirroring y debiéramos tener problemas.

Duplicar datos tabla en la misma tabla (Y como comerse la memoria y el disco de forma brutal)

Hoy estaba jugando con mi SQL Server, obviamente en entorno de pruebas,  y tuve la «brillante» idea de duplicar los datos de una tablas de hecho de AdventureWorksDW. Aparte de lograr que los registros se duplicaran, noté bastantes cosas que quiero compartir con ustedes.

Importante: Antes de duplicar los datos dentro de la misma tabla, debes desactivar las claves primarias. De lo contrario, arrojará un error. Recomiendo copiar los datos hacia una tabla temporal.

Sentencias:

INSERT INTO tabla SELECT * FROM tabla
Esta es la sentencia básica. Lo que hace es seleccionar todos los registros y volverlos a insertar. O sea, si se tienen 10 registros, insertará esos mismos 10 registros, quedando así con 20 registros. Ésta es la forma mas básica que hay.

INSERT INTO tabla SELECT top 100 * FROM tabla
Esta selecciona los 100 primeros registros y las inserta. O sea, si se tienen 1000 registros, insertará los primeros 100 registros, quedando así con 1100 registros.

INSERT INTO tabla SELECT * FROM tabla WHERE campo1 = 'algo'
Esta sentencia selecciona e inserta solo los registros donde la clausula WHERE se cumpla. No importa cuantos registros sean.

INSERT INTO tabla SELECT top 100 * FROM tabla WHERE campo1 = 'algo'
Esta hace lo mismo que la anterior, pero solo tomando en cuenta los 100 primeros registros.

Nunca hagas esto (a no ser de que sepas muy bien lo que estás haciendo)

Puedes hacer un sencillito script que duplique de forma exponencial los registros, causando un excesivo uso de disco y recursos de memoria. Con esta operación, el log de transacciones crece de forma desmesurada.


DECLARE @contador int
SET @contador = 0
WHILE (@contador < 10)
BEGIN
INSERT INTO tabla SELECT * FROM tabla
SET @contador = @contador + 1
END
GO

Si tenemos una tabla de 1000 registros, la primera vez insertará 1000 registros, quedando así con 2000 registros. La segunda vez, seleccionará los 2000 registros y los insertará, quedando así con 4000 registros. Esto ocurrirá hasta que se cumpla la condición (Imagina este escenario, pero  partiendo con 60000 registros)

Para finalizar quiero exponer algunas conclusiones:

  1. Nunca realices experimentos así en entornos de producción.
  2. Siempre ten un respaldo de las bases de datos.
  3. Ten controlado el crecimiento del log de transacciones. Hay mucha documentación al respecto.
  4. Si vas a duplicar los datos de tu tabla, hazlo de manera controlada y no de forma brutal (como lo hice yo)

Chau!

Compresión de respaldos con SQL Server

Mayo ha sido un mes movido, por lo menos, para mi. He tenido bastantes actividades, tanto en el trabajo como en mi vida personal, que me tenían un poco privado de tiempo para compartir alguna cosa poca.

Por ejemplo, estuve en Concepción la semana pasada hablando sobre SQL Server (¡Que novedad! ¿o no?) y aprobé el examen para la licencia de radioaficionado. Desde ahora soy CD6375. Supongo que a nadie le importa esto, así que vamos a lo importante.

Comprimir respaldos se realiza por los siguientes motivos:

  • Toma menos tiempo generar uno.
  • Ocupa menos espacio en disco.
  • Si respaldamos en cintas, ocupa menos espacio en cinta, por lo tanto, ocupará menos respaldo en el lugar donde guardemos las cintas.
  • Toma menos tiempo hacer una restauración desde un respaldo.

En este ejemplo solo tocaré la creación de respaldos. Dejemos la cháchara y vamos al choque.


--Estadisticas
set statistics io on
set statistics time on

--Respaldo sin comprimir
backup database AdventureWorks2012_Data
to disk = 'C:Program FilesMicrosoft SQL ServerMSSQL11.MSSQLSERVERMSSQLBackupbak1.bak'
with init, no_compression

--Limpiar caché
dbcc freeproccache

--Respaldo con comprimir
backup database AdventureWorks2012_Data
to disk = 'C:Program FilesMicrosoft SQL ServerMSSQL11.MSSQLSERVERMSSQLBackupbak2.bak'
with init, compression

El script tiene varias partes:

  1. Estadisticas: Activa las estadisticas del servidor para la transaccion.
  2. Respaldo sin comprimir: Crea un respaldo comun y corriente de la base de datos. Respaldo sin tratamiento
  3. Liberar Caché: Limpia la caché.
  4. Respaldo con «comprimir»: Crea un respaldo comprimido de la base de datos.

Esto suena muy lindo. Tal para no creer. Veamos algunas imágenes

Estadisticas sin comprimir
Estadisticas sin comprimir

 

Estadisticas con compresión habilitada
Estadisticas con compresión habilitada

 

Propiedades archivo de respaldo sin comprimir
Propiedades archivo de respaldo sin comprimir

 

Propiedades archivo de respaldo comprimido
Propiedades archivo de respaldo comprimido

Si no les gusta copiar y pegar, pueden descargar el archivo .sql desde aqui: http://www.4shared.com/document/nN-PRmL1/demo_compresion_respaldos.html

 

Exportar datos de MAP Toolkit

Hola Mundo. Último dia de Abril. En el post anterior conté que conocí a una herramienta bastante potente para hacer inventario dentro de una red. Ésta trabaja sobre un SQL Server 2008 Express, por lo que no se puede conectar a través de SQL Server Management Studio.

En su momento, pensé que iba a tener algunos problemas para exportar la info. Después de bastante rato de intentarlo, llegué a lo siguiente:

Recuerden que estaba haciendo un inventario de SQL Server

  1. Iniciar el servicio de SQL Browser desde el Configuration Manager
  2. Importar datos desde SQL Server. Conectarse a la instancia MAPS. (OJO Piojo. Hay que indicar el nombre del equipo y la instancia. Por ejemplo: Mi máquina se llama SQL2 y la instancia se llama MAPS, entonces debo conectarme a SQL2MAPS)
  3.  Importar las siguientes tablas/vistas: sql_inventory_dbinstance_view, sql_dbinstance_databases_view, sql_databaseserverproperties y sql_databaseproperties

Con esto tendrán la info en un Excel lista para llevar.

 

MAP: Microsoft Assessments and Planning

La historia es la siguiente: Estaba en la oficina y me solicitaron que realizara una tarea de inventariado de un grupo de máquinas con SQL Server en una empresa. La verdad es que nunca había hecho esto, ni mucho menos conocía algún software que lo hiciera por mi. Ya me veía anotando en mi libreta todos los SQL Server que estaban funcionando. De ser así, tendría un tedioso día.

El panorama se comenzó a arreglar, cuando se me ocurrió preguntar como lo podía hacer. Una persona, con bastante experiencia en el tema, me dijo que existía MAP: Microsoft Assessments and Planning.

MAP Toolkit es una herramienta que ayuda a hacer inventariados, evaluaciones e informes para pequeñas y grandes empresas sin necesidad de instalar agente en ningún equipo. De este modo las empresas pueden planear de una manera más eficiente la migración de sus sistemas.

Volviendo a la historia, tuve que aprender a usar la herramienta para cumplir el propósito.

Mi memoria es frágil, así que hice un PDF con fotos para que nunca más se me olvide: http://www.4shared.com/office/_NGbSxPM/Microsoft_Assessment_and_Plann.html

Hablemos sobre Filestream en SQL Server

En una base de datos podemos almacenar datos estructurados y datos no estructurados. Los datos estructurados corresponden a los que están fuertemente tipados. Por ejemplo, los que se almacenan del tipo int, float, etc. En cambio, tenemos los no estructurados que se almacenan como objetos, usualmente llamados blob (Binary Large OBject).

Todos los motores de bases de datos tienen la capacidad de  almacenar binarios, pero SQL Server ofrece una funcionalidad (incluida en la versión 2008) llamada Filestream  que permite almacenar los objetos binarios directamente en el sistema de archivos, pero transparente para el usuario. Por lo que se pueden seguir ejecutando transacciones sobre estos registrosm esto permite un acceso más rápido a dicha información, y adicionalmente, permite poder liberar de carga de memoria a SQL Server, ya que para el acceso a datos FILESTREAM podría no utilizarse el Buffer Pool.

Para habilitar Filestream en la instancia de SQL Server (si es que no se activó en la instalación) se debe abrir  SQL Server Configuration Manager, ir a SQL Server  Services  (Yo lo tengo en Inglés) y abrir las propiedades de la instancia. En las ventana de propiedades, ir a la pestaña de Filestream y veremos algo así:

 

Configuracion de Filestream
Configuracion de Filestream

Una vez de que la característica esta activada, aceptamos, aplicamos y reiniciamos el servicio. Abrimos el Management Studio, seleccionamos la base de datos en la cual queremos activar Filestream y escribimos lo siguiente:

EXEC sp_configure filestream_access_level, 2

RECONFIGURE

Para poder empezar a usar filestream es necesario crear un filegroup que contenga el atributo CONTAINS FILESTREAM. Para eso, utilizaremos este código:

ALTER DATABASE MiDB
ADD FILEGROUP MiDB_filegroup_filestream CONTAINS FILESTREAM
GO
ALTER DATABASE MiDB
ADD FILE
(
NAME= ‘MiDB_filestream’,
FILENAME = ‘C:dbfs’
)
TO FILEGROUP MiDB_filegroup_filestream
GO

Es importante que el directorio c:db esté creado. El directorio fs dentro de C:db lo creará SQL Server. Para crear la tabla que «almacenará» nuestro objeto, es necesario que una columna sea del tipo VARBINARY(MAX).

create table fs
(
id uniqueidentifier rowguidcol not null unique,
archvo varbinary(max) filestream null
)

Con la tabla ya creada, ya es posible guardar algo. Por ejemplo:

–Declarar la variable del ID
DECLARE @ID UNIQUEIDENTIFIER
–Genera un valor unico
SET @ID = NEWID()
–Inserta un blob en la base de datos. En este caso, es un video. OJO Pijo que hace un cast a la ruta del archivo.
INSERT INTO dbo.fs
(ID, archvo)
VALUES
(@ID, CAST(‘E:Windows Server 2008 R2Wildlife.wmv’ AS VARBINARY(MAX)))
–Selecciona el registro recien creado y muestra su ruta
SELECT ID, archvo
FROM dbo.fs
WHERE ID = @ID
SELECT archvo.PathName()
FROM dbo.fs
WHERE ID = @ID

Y nos debiera dar un resultado mas o menos así:

Resultado de Insercion de datos con Filestream

Mas informacion:
http://technet.microsoft.com/es-es/library/cc645923.aspx
http://www.mssqltips.com/sqlservertip/1489/using-filestream-to-store-blobs-in-the-ntfs-file-system-in-sql-server-2008/
http://www.guillesql.es/Articulos/Almacenamiento_FILESTREAM_SQLServer.aspx

Feliz Pascua de Resurrección!

Compresión en SQL Server

Desde SQL Server 2008 es posible comprimir los datos a nivel de filas y páginas y respaldos. En este pequeño artículo hablaré sobre la compresión a nivel de filas. Para páginas y respaldos vendrán en otra entrega.

Compresión en Filas
La compresion de filas está recomendada cuando se tiene una alta carga de trabajo de escritura en disco. Es posible comprimir las filas en los siguientes escenarios:

  • Tablas con y sin indices agrupados y no agrupados
  • Vistas indexadas
  • Indices y tablas particionadas

Recomendaciones

  • Evaluar el ahorro que se genera con la compresion
  • No comprimir todos los elementos de la base de datos sin antes evaluar. Si es pequeño no es necesario comprimir. Considerar comprimir si el elemento es accesado pocas veces.

Código


--tamaño de tabla
exec sp_spaceused MiTabla
go
--compresion por fila
alter table MiTabla rebuild with(data_compression = row)
go
exec sp_spaceused MiTabla
go

Primero muestra el espacio utilizado por la tabla que vamos a comprimir, luego la comprime y al final muestra el espacio ocupado por la tabla ya comprimida para comparar.

Al realizar esta prueba, nos da el siguiente resultado sobre una tabla sin comprimir:

Tabla sin comprimir
Tabla sin comprimir

Pero al comprimir por fila la misma tabla, nos da el siguiente resultado:

Tabla comprimida
Tabla comprimida

Los números hablan solos.

 

Saludos!