SQL Server 2008 Bootcamp Día 2 SQL 2008 FILESTREAM
Información sobre versión Beta Toda la información y ejemplos son relativos a la beta pública de SQL Server 2008 CTP5 Los comandos y funcionalidades pueden diferir de la versión RTM final 2
Agenda FILESTREAM FILESTREAM Escenarios Propiedades clave Uso Uso desde aplicaciones cliente Seguridad Limitaciones Integración con otras características de SQL 2008 3
Escenario Como capturamos datos binarios no estructurados? Documentos, Imágenes y similares Hasta ahora solo existían 2 formas Internamente en SQL Server como un BLOB Externamente a SQL Server, usando el sistema de archivos y guardándonos la referencia al archivo en la base de datos Ambas soluciones tienen sus pros y sus contras 4
Escenario Una compañía de seguros necesita almacenar documentos para que luego puedan ser recuperarlos por los procesos que los demanden Un minorista de Internet necesita almacenar videos de uso de sus productos para mostrarlos en su comercio electrónico Un sistema telefónico necesita almacenar mensajes hablados como secuencias de audio para que puedan ser recuperados remotamente 5
Escenario Una estación de radio necesita permitir realizar búsquedas sobre su librería de podcasts disponibles para descarga desde su web Un consultor legal necesita almacenar copias electrónicas de documentos como imágenes, para que sean fácilmente recuperables y vinculados a un caso o cliente individual 6
Escenario Un arquitecto necesita almacenar y recuperar planos digitales y sus datos vinculados al cliente Una biblioteca necesita convertir grandes documentos a formato digital para indexarlo y poder usar una herramienta digital de búsqueda. 7
Propiedades clave Es un atributo de una columna varbinary(max) Especificar que la columna se ha de almacenar en el sistema de ficheros NTFS La columna sigue siendo manejable mediante comandos T-SQL Además, se puede acceder desde el sistema de ficheros y desde la API del SO 8
Uso El almacenamiento de FILESTREAM se implementa como una columna varbinary(max) en la que los datos son guardados como BLOBs en el sistema de ficheros El tamaño máximo de los BLOBs vienen limitados únicamente por el tamaño del volumen de almacenamiento La limitación estándar de los tipos varbinary(max) de 2-GB no se aplican a estos BLOBs que se almacenan en el sistema de ficheros Los datos FILESTREAM se deben guardar en grupos de ficheros FILESTREAM 9
Uso Un grupo de ficheros FILESTREAM es un grupo de ficheros especial que contiene directorios del sistema en lugar de archivos propiamente dicho A estos directorios se les llama contenedores de datos Los contenedores de datos, son la interfaz entre el motor de base de datos y el almacenamiento del sistema Los grupos de ficheros FILESTREAM pueden residir en grupos volúmenes comprimidos 10
Uso Cuándo usar FILESTREAM? Necesitas almacenar objetos que ocupan como media mas de 1 Mb Importancia en acceso de lectura rápido Estas desarrollando aplicaciones que utilizan una capa intermedia para la lógica de tu aplicación 11
Uso Habilitación de soporte filestream a nivel de BBDD sp_filestream_configure @enable_level 0 = Deshabilitado. Es el valor por defecto 1 = Habilitado solo para acceso T-SQL 2 = Habilitado solo para T-SQL y acceso local al sistema de ficheros 3 = Habilitado para Transact-SQL, acceso local y remoto al sistema de ficheros 12
Uso Añade un grupo de ficheros de base de datos dedicado Con al menos un fichero Apunta a un directorio, no a un archivo La ruta hasta el padre del último directorio ha de existir y el último directorio no ha de existir El directorio contiene un archivo filestream.hdr y una carpeta $FSLOG 13
Uso Crea una tabla con un varbinary(max) Pon los atributos FILESTREAM La tabla debe contener una columna con ROWGUID único Uso estándar de sentencias DML Soporte transaccional Los borrados del sistema de ficheros se realizan ante truncamientos del log 14
DEMO 1 Vistazo al uso de FILESTREAM 15
Uso desde aplicaciones cliente El método PathName devuelve la ruta UNC al dato filestream SELECT column_name.pathname() La columna ROWGUID de una tabla que tiene el atributo FILESTREAM de almacenamiento ha de ser visible en las consultas en las que se llama PathName() Esto se aplica a sentencias T-SQL realizadas sobre vistas, tablas derivadas, subconsultas relacionadas y subconsultas escalares 16
Uso desde aplicaciones cliente Todos los acceso a filestreams deben ser parte de la transacción El token transaccional es utilizado para enlistar el ámbito de transacción y los bloqueos necesarios Token transaccional: SELECT GET_FILESTREAM_TRANSACTION_CONTEXT() 17
Uso desde aplicaciones cliente El API OpenSqlFilestream obtiene un manejador de archivo Win32 La aplicación usa dicho manejador para acceder a los datos FILESTREAM y además, para pasárselo a las siguientes API de Win32: ReadFile, WriteFile, TransmitFile, SetFilePointer, SetEndOfFile, o FlushFileBuffers. Si la aplicación llama a cualquier otra API utilizando dicho manejador, se devuelve un error ERROR_ACCESS_DENIED La aplicación debe cerrar el manejador utilizando CloseHandle 18
Uso desde aplicaciones cliente Envoltura API para la API Win32 OpenSqlFilestream para.net disponible aquí: http://www.codeplex.com/sqlsrve2e Ejemplo SQL2K8 FILESTREAM-WPF-HTTP Ejemplos SQL Server 2008 http://www.codeplex.com/sqlserversamples 19
DEMO 2 Uso desde aplicaciones cliente 20
Limitaciones Cuando una tabla contiene una columna FILESTREAM, cada fila ha de tener un ID de fila único Los contenedores FILESTREAM no pueden jerarquizarse En Microsoft Clustering, los grupos de ficheros FILESTREAM deben estar en recursos compartidos de disco 21
Limitaciones Para acceder a los archivos de sistema sólo se soporta el nivel de aislamiento read-commited es soportado Se soportan Repeatable read, serializable y snapshot isolations, cuando los datos FILESTREAM se acceden desde T-SQL. Lectura sucia no está soportada. El acceso a archivos de sistema abre operaciones que no esperan a ningún bloqueo Las operaciones abiertas fallan inmediatamente si no pueden acceder a los datos 22
Seguridad Solo la cuenta de servicio tiene permisos sobre el sistema de ficheros del contenedor FILESTREAM Cuando una base de datos se abre, SQL Server restringe el acceso al contenedor/es FILESTREAM, excepto cuando el acceso se realiza desde transacciones T-SQL y la API OpenSqlFilestream 23
Seguridad Cuando la BBDD se cierra, los datos físicos del contenedor son completamente accesibles y sujetos a la seguridad de Windows Es recomendable asegurar los directorios que contienen FILESTREAMs para que los archivos no sean accidentalmente modificados o borrados Desde un punto de vista SQL Server, la seguridad de los FILESTREAMs se realiza desde comandos DCL estandares 24
Integración con otras características de SQL Server 2008 No se soportan Instantáneas de BBDD Puedes crear instantáneas de grupos de ficheros estándar (no-filestream) Los grupos de ficheros FILESTREAM se marcan como offline para dichas instantáneas de BBDD Se soporta Replicación Log Shipping Se soporta Full-Text indexing Microsoft Clustering Los grupos de ficheros FILESTREAM filegroups han de residir en recursos compartidos SQL Express tiene soporte para FILESTREAM 25
Integración con otras características de SQL Server 2008 Las columnas FILESTREAM solo pueden almacenar datos en volúmenes de disco locales Almacenamiento remoto en futuras versiones de SQL Server No se soporta Encriptación transparente (Transparent Data Encription) Columnas FILESTREAM en parámetros de tabla Database Mirroring 26
Preguntas y respuestas
SQL Server 2008 Links Site de SQL Server 2008 http://www.microsoft.com/sql/2008/ Ejemplos de SQL Server 2008 http://www.codeplex.com/sqlserversamples 2007 Solid Quality Mentors 28