El tipo de datos filestream en SQL Server 2008

¿Quien no se ha pegado con la necesidad de relacionar información almacenada en ficheros con los registros en una base de datos?. Soluciones inicialmente sencillas como almacenar la ruta UNC del archivo y luego acceder a esos archivos desde la aplicación, pueden ser inicialmente útiles, pero con el tiempo los problemas relacionados con la gestión de los ficheros, la “integridad referencial” y sobre todo, la seguridad acaban por suponer un problema.Almacenar los ficheros en la propia base de datos, tiene también sus problemas, engorda las BD, tiene limitaciones de tamaño y aporta un grado mas de complejidad al acceso a los ficheros desde fuera de la aplicación.SQL Server 2008 aporta una solución muy buena; almacenar los ficheros en el sistema de ficheros, que es donde tienen que estar, pero con una relación definida en SQL Server a través de un nuevo tipo denominado “filestream”, SQL gestionara también la seguridad de tal forma que es posible que solo la cuenta del servicio de SQL Server tenga acceso a los ficheros y que los usuarios accedan a los mismos con las restricciones de seguridad que tengan en la BD, es compatible con el uso de clusters y los backups de SQL Server.El T-SQL se ha enriquecido con instrucciones para el manejo de este nuevo tipo. En definitiva una solución nueva y completa a un viejo problema.Tenéis mas información en un estupendo articulo en ingles sobre el tema:

http://blogs.msdn.com/manisblog/archive/2007/10/21/filestream-data-type-sql-server-2008.aspx

5 comentarios en “El tipo de datos filestream en SQL Server 2008”

  1. Lo siento, he estado usando el FILESTREAM pero poseo un gran inconveniente. Cuando elimino el registro, no se supone que debería borrarse también de la carpeta donde está almacenado su respectivo archivo?…he oido que eso no se ve a simple vista, que hay que esperar Checkpoints o recolectores de elementos no utilizados y no sé que otras cosas pero no me especifican como lograrlo. Quisiera saber si tu podrías colaborarme con ello. Muchas gracias….

  2. Respondo brevemente al último comentario, no creo q él lo lea pero para cualquier persona q por alguna razón llegue aca, al eliminar una fila q tenga un filestream, como tú bien dices el archivo en si no se elimina inmediatamente, para eso está el Garbage Collector que en determinados Checkpoints elimina todos los archivos q no estén siendo utilizados, esto se hace asíncronamente así q no te afecta el performance de la aplicación y tampoco te debes preocupar de eso.

  3. Buenas tardes,

    Muchas gracias por tu artículo. Es muy interesante y la verdad es que este sistema viene muy bien.

    Me surge una duda: sabes si es posible migrar una BBDD de SQL Server 2005 a SQL Server 2008, y después, habilitar el filestream y recuperar los ficheros que había en la BBDD para pasarlos a Directorios? Es decir, filestream “retroactivo”???

    Muchas gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *