FILESTREAM (SQL Server)FILESTREAM (SQL Server)

APLICA-SE A: simSQL Server (somente para o Windows) nãoBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server (Windows only) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

O FILESTREAM permite que aplicativos baseados no SQL ServerSQL Server armazenem dados não estruturados, como documentos e imagens, no sistema de arquivos.FILESTREAM enables SQL ServerSQL Server-based applications to store unstructured data, such as documents and images, on the file system. Os aplicativos podem utilizar as APIs de streaming avançado e o desempenho do sistema de arquivos e, ao mesmo tempo, manter consistência transacional entre os dados não estruturados e os dados estruturados correspondentes.Applications can leverage the rich streaming APIs and performance of the file system and at the same time maintain transactional consistency between the unstructured data and corresponding structured data.

O FILESTREAM integra o Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine com um sistema de arquivos NTFS ou ReFS armazenando dados de BLOB (objeto binário grande) varbinary(max) como arquivos no sistema de arquivos.FILESTREAM integrates the Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine with an NTFS or ReFS file systems by storing varbinary(max) binary large object (BLOB) data as files on the file system. Transact-SQLTransact-SQL podem inserir, atualizar, consultar, pesquisar e fazer backup de dados FILESTREAM.statements can insert, update, query, search, and back up FILESTREAM data. As interfaces do sistema de arquivos do Win32 fornecem acesso de streaming aos dados.Win32 file system interfaces provide streaming access to the data.

O FILESTREAM usa o cache do sistema NT para armazenar dados de arquivos.FILESTREAM uses the NT system cache for caching file data. Isso ajuda a reduzir qualquer efeito que os dados FILESTREAM possam ter no desempenho do Mecanismo de Banco de DadosDatabase Engine.This helps reduce any effect that FILESTREAM data might have on Mecanismo de Banco de DadosDatabase Engine performance. O pool de buffers do SQL ServerSQL Server não é usado. Portanto essa memória está disponível para processamento de consulta.The SQL ServerSQL Server buffer pool is not used; therefore, this memory is available for query processing.

FILESTREAM não é habilitado automaticamente quando você instalar ou atualiza o SQL ServerSQL Server.FILESTREAM is not automatically enabled when you install or upgrade SQL ServerSQL Server. Você deve habilitar o FILESTREAM usando o SQL Server Configuration Manager e o SQL Server Management StudioSQL Server Management Studio.You must enable FILESTREAM by using SQL Server Configuration Manager and SQL Server Management StudioSQL Server Management Studio. Para usar o FILESTREAM, você deve criar ou modificar um banco de dados para conter um tipo especial de grupo de arquivos.To use FILESTREAM, you must create or modify a database to contain a special type of filegroup. Em seguida, crie ou modifique uma tabela de modo que ela contenha uma coluna varbinary(max) com o atributo FILESTREAM.Then, create or modify a table so that it contains a varbinary(max) column with the FILESTREAM attribute. Depois que você concluir essas tarefas, poderá usar Transact-SQLTransact-SQL e Win32 para gerenciar os dados de FILESTREAM.After you complete these tasks, you can use Transact-SQLTransact-SQL and Win32 to manage the FILESTREAM data.

Quando usar FILESTREAMWhen to Use FILESTREAM

No SQL ServerSQL Server, os BLOBs podem ser dados varbinary(max) padrão que armazenam os dados em tabelas ou objetos varbinary(max) FILESTREAM que armazenam os dados no sistema de arquivos.In SQL ServerSQL Server, BLOBs can be standard varbinary(max) data that stores the data in tables, or FILESTREAM varbinary(max) objects that store the data in the file system. O tamanho e o uso dos dados determinam se você deve usar armazenamento de banco de dados ou armazenamento de sistema de arquivos.The size and use of the data determines whether you should use database storage or file system storage. Se as condições a seguir forem verdadeiras, você deve considerar o uso de FILESTREAM:If the following conditions are true, you should consider using FILESTREAM:

  • Os objetos que estão sendo armazenados têm, em média, mais de 1 MB.Objects that are being stored are, on average, larger than 1 MB.
  • O acesso rápido para leitura é importante.Fast read access is important.
  • Você está desenvolvendo aplicativos que usam uma camada intermediária para lógica de aplicativo.You are developing applications that use a middle tier for application logic.

Para objetos menores, o armazenamento de BLOBs varbinary(max) no banco de dados, normalmente, fornece melhor desempenho de streaming.For smaller objects, storing varbinary(max) BLOBs in the database often provides better streaming performance.

Armazenamento de FILESTREAMFILESTREAM Storage

O armazenamento de FILESTREAM é implementado como uma coluna varbinary(max) , na qual os dados são armazenados como BLOBs no sistema de arquivos.FILESTREAM storage is implemented as a varbinary(max) column in which the data is stored as BLOBs in the file system. Os tamanhos dos BLOBs são limitados apenas pelo tamanho do volume do sistema de arquivos.The sizes of the BLOBs are limited only by the volume size of the file system. A limitação padrão de varbinary(max) de tamanhos de arquivos de 2 GB não se aplica a BLOBs que são armazenados no sistema de arquivos.The standard varbinary(max) limitation of 2-GB file sizes does not apply to BLOBs that are stored in the file system.

Para determinar que uma coluna deve armazenar dados no sistema de arquivos, especifique o atributo FILESTREAM em uma coluna varbinary(max) .To specify that a column should store data on the file system, specify the FILESTREAM attribute on a varbinary(max) column. Isso faz com que o Mecanismo de Banco de DadosDatabase Engine armazene todos os dados dessa coluna no sistema de arquivos, mas não no arquivo do banco de dados.This causes the Mecanismo de Banco de DadosDatabase Engine to store all data for that column on the file system, but not in the database file.

Os dados FILESTREAM devem ser armazenados em grupos de arquivos FILESTREAM.FILESTREAM data must be stored in FILESTREAM filegroups. Um grupo de arquivos FILESTREAM é um grupo de arquivos especial que contém diretórios do sistema de arquivos em vez dos próprios arquivos.A FILESTREAM filegroup is a special filegroup that contains file system directories instead of the files themselves. Esses diretórios do sistema de arquivos são chamados de contêineres de dados.These file system directories are called data containers. Os contêineres de dados são a interface entre armazenamento Mecanismo de Banco de DadosDatabase Engine e armazenamento de sistema de arquivos.Data containers are the interface between Mecanismo de Banco de DadosDatabase Engine storage and file system storage.

Ao usar armazenamento de FILESTREAM, considere o seguinte:When you use FILESTREAM storage, consider the following:

  • Quando uma tabela contém uma coluna FILESTREAM, cada linha deve ter uma ID de linha exclusiva não nula.When a table contains a FILESTREAM column, each row must have a nonnull unique row ID.
  • Vários contêineres de dados podem ser adicionados a um grupo de arquivos FILESTREAM.Multiple data containers can be added to a FILESTREAM filegroup.
  • Os contêineres de dados FILESTREAM não podem ser aninhados.FILESTREAM data containers cannot be nested.
  • Quando você usa clustering de failover, os grupos de arquivos FILESTREAM devem estar em recursos de disco compartilhados.When you are using failover clustering, the FILESTREAM filegroups must be on shared disk resources.
  • Grupos de arquivos FILESTREAM podem estar em volumes compactados.FILESTREAM filegroups can be on compressed volumes.

Gerenciamento integradoIntegrated Management

Como FILESTREAM é implementado como uma coluna varbinary(max) e integrado diretamente ao Mecanismo de Banco de DadosDatabase Engine, a maioria das funções e ferramentas de gerenciamento do SQL ServerSQL Server funciona sem nenhuma modificação para dados FILESTREAM.Because FILESTREAM is implemented as a varbinary(max) column and integrated directly into the Mecanismo de Banco de DadosDatabase Engine, most SQL ServerSQL Server management tools and functions work without modification for FILESTREAM data. Por exemplo, é possível usar todos os modelos de backup e recuperação com dados FILESTREAM e o backup dos dados FILESTREAM pode ser feito com os dados estruturados no banco de dados.For example, you can use all backup and recovery models with FILESTREAM data, and the FILESTREAM data is backed up with the structured data in the database. Se você não desejar fazer backup de dados FILESTREAM com dados relacionais, poderá usar um backup parcial para excluir grupos de arquivos FILESTREAM.If you do not want to back up FILESTREAM data with relational data, you can use a partial backup to exclude FILESTREAM filegroups.

Segurança IntegradaIntegrated Security

No SQL ServerSQL Server, os dados FILESTREAM são protegidos exatamente como outros dados, com a concessão de permissões em níveis de tabela ou coluna.In SQL ServerSQL Server, FILESTREAM data is secured just like other data is secured: by granting permissions at the table or column levels. Se um usuário tiver permissão para a coluna FILESTREAM em uma tabela, ele poderá abrir os arquivos associados.If a user has permission to the FILESTREAM column in a table, the user can open the associated files.

Observação

Não há suporte para criptografia em dados FILESTREAM.Encryption is not supported on FILESTREAM data.

Apenas a conta na qual a conta de serviço do SQL ServerSQL Server é executada recebe permissões para o contêiner FILESTREAM.Only the account under which the SQL ServerSQL Server service account runs is granted permissions to the FILESTREAM container. É recomendável que nenhuma outra conta receba permissões no contêiner de dados.We recommend that no other account be granted permissions on the data container.

Observação

Os logons do SQL não funcionarão com contêineres FILESTREAM.SQL logins will not work with FILESTREAM containers. Somente uma autenticação NTFS ou ReFS funcionará com contêineres FILESTREAM.Only NTFS or ReFS authentication will work with FILESTREAM containers.

Acessando dados BLOB com o Transact-SQL e o acesso a streaming do sistema de arquivosAccessing BLOB Data with Transact-SQL and File System Streaming Access

Depois de armazenar dados em uma coluna FILESTREAM, você pode acessar os arquivos usando transações Transact-SQLTransact-SQL ou usando APIs do Win32.After you store data in a FILESTREAM column, you can access the files by using Transact-SQLTransact-SQL transactions or by using Win32 APIs.

Acesso ao Transact-SQLTransact-SQL Access

Usando Transact-SQLTransact-SQL, é possível inserir, atualizar e excluir dados FILESTREAM:By using Transact-SQLTransact-SQL, you can insert, update, and delete FILESTREAM data:

  • Você pode usar uma operação de inserção para pré-popular um campo FILESTREAM com um valor nulo, vazio ou com dados embutidos relativamente curtos.You can use an insert operation to prepopulate a FILESTREAM field with a null value, empty value, or relatively short inline data. No entanto uma quantidade grande de dados é transmitida de maneira mais eficiente em um arquivo que usa interfaces Win32.However, a large amount of data is more efficiently streamed into a file that uses Win32 interfaces.
  • Ao atualizar um campo FILESTREAM, você modifica os dados BLOB subjacentes no sistema de arquivos.When you update a FILESTREAM field, you modify the underlying BLOB data in the file system. Quando um campo FILESTREAM é definido como NULL, os dados BLOB associados ao campo são excluídos.When a FILESTREAM field is set to NULL, the BLOB data associated with the field is deleted. Não é possível usar uma atualização de Transact-SQLTransact-SQL em bloco, implementada como UPDATE . Write(), para executar atualizações parciais nos dados.You cannot use a Transact-SQLTransact-SQL chunked update, implemented as UPDATE . Write(), to perform partial updates to the data.
  • Ao excluir uma linha ou ao excluir ou truncar uma tabela que contém dados FILESTREAM, você também exclui os dados BLOB subjacentes do sistema de arquivos.When you delete a row or delete or truncate a table that contains FILESTREAM data, you delete the underlying BLOB data in the file system.

Acesso a streaming do sistema de arquivosFile System Streaming Access

O suporte a streaming do Win32 funciona no contexto de uma transação do SQL ServerSQL Server.The Win32 streaming support works in the context of a SQL ServerSQL Server transaction. Dentro de uma transação, é possível usar funções FILESTREAM para obter um caminho do sistema de arquivos UNC lógico de um arquivo.Within a transaction, you can use FILESTREAM functions to obtain a logical UNC file system path of a file. Em seguida, use a API OpenSqlFilestream para obter um identificador de arquivo.You then use the OpenSqlFilestream API to obtain a file handle. Esse identificador pode então ser usado por interfaces de streaming de arquivo do Win32, como ReadFile() e WriteFile(), para acessar e atualizar o arquivo por meio do sistema de arquivos.This handle can then be used by Win32 file streaming interfaces, such as ReadFile() and WriteFile(), to access and update the file by way of the file system.

Como as operações de arquivo são transacionais, não é possível excluir ou renomear arquivos FILESTREAM por meio do sistema de arquivos.Because file operations are transactional, you cannot delete or rename FILESTREAM files through the file system.

Modelo de instruçãoStatement Model

O acesso ao sistema de arquivos FILESTREAM modela uma instrução Transact-SQLTransact-SQL usando abertura e fechamento de arquivo.The FILESTREAM file system access models a Transact-SQLTransact-SQL statement by using file open and close. A instrução inicia quando um identificador de arquivo é aberto e termina quando o identificador é fechado.The statement starts when a file handle is opened and ends when the handle is closed. Por exemplo, quando um identificador de gravação é fechado, qualquer gatilho AFTER que esteja registrado na tabela será acionado como se uma instrução UPDATE fosse concluída.For example, when a write handle is closed, any possible AFTER trigger that is registered on the table fires as if an UPDATE statement is completed.

Namespace de armazenamentoStorage Namespace

No FILESTREAM, o Mecanismo de Banco de DadosDatabase Engine controla o namespace do sistema de arquivos físico do BLOB.In FILESTREAM, the Mecanismo de Banco de DadosDatabase Engine controls the BLOB physical file system namespace. Uma nova função intrínseca, PathName, fornece o caminho UNC lógico do BLOB que corresponde a cada célula FILESTREAM na tabela.A new intrinsic function, PathName, provides the logical UNC path of the BLOB that corresponds to each FILESTREAM cell in the table. O aplicativo usa esse caminho lógico para obter o identificador do Win32 e operar nos dados BLOB usando interfaces normais de sistema de arquivos do Win32.The application uses this logical path to obtain the Win32 handle and operate on the BLOB data by using regular Win32 file system interfaces. A função retornará NULL se o valor da coluna FILESTREAM for NULL.The function returns NULL if the value of the FILESTREAM column is NULL.

Acesso a sistema de arquivos transacionadoTransacted File System Access

Uma nova função intrínseca, GET_FILESTREAM_TRANSACTION_CONTEXT(), fornece o token que representa a transação atual à qual a sessão está associada.A new intrinsic function, GET_FILESTREAM_TRANSACTION_CONTEXT(), provides the token that represents the current transaction that the session is associated with. A transação deve ter sido iniciada e ainda não anulada ou confirmada.The transaction must have been started and not yet aborted or committed. Obtendo um token, o aplicativo associa as operações de streaming do sistema de arquivos FILESTREAM a uma transação iniciada.By obtaining a token, the application binds the FILESTREAM file system streaming operations with a started transaction. A função retorna NULL no caso de nenhuma transação explicitamente iniciada.The function returns NULL in case of no explicitly started transaction.

Todos os identificadores de arquivo devem ser fechados antes de a transação ser confirmada ou anulada.All file handles must be closed before the transaction commits or aborts. Se um identificador for deixado aberto além do escopo da transação, leituras adicionais em relação ao identificador provocarão uma falha. Gravações adicionais em relação ao identificador serão bem-sucedidas, mas os dados reais não serão gravados em disco.If a handle is left open beyond the transaction scope, additional reads against the handle will cause a failure; additional writes against the handle will succeed, but the actual data will not be written to disk. De maneira semelhante, se o banco de dados ou a instância do Mecanismo de Banco de DadosDatabase Engine for desligado, todos os identificadores abertos serão invalidados.Similarly, if the database or instance of the Mecanismo de Banco de DadosDatabase Engine shuts down, all open handles are invalidated.

Durabilidade transacionalTransactional Durability

Com FILESTREAM, na confirmação da transação, o Mecanismo de Banco de DadosDatabase Engine verifica a durabilidade da transação de dados BLOB FILESTREAM que são modificados no acesso de streaming ao sistema de arquivos.With FILESTREAM, upon transaction commit, the Mecanismo de Banco de DadosDatabase Engine ensures transaction durability for FILESTREAM BLOB data that is modified from the file system streaming access.

Semântica de isolamentoIsolation Semantics

A semântica de isolamento é governada pelos níveis de isolamento da transação do Mecanismo de Banco de DadosDatabase Engine.The isolation semantics are governed by Mecanismo de Banco de DadosDatabase Engine transaction isolation levels. O nível de isolamento confirmado por leitura tem suporte para Transact-SQLTransact-SQL e acesso ao sistema de arquivos.Read-committed isolation level is supported for Transact-SQLTransact-SQL and file system access. As operações de leitura repetidas, assim como os isolamentos de instantâneo e serializáveis, têm suporte.Repeatable read operations, and also serializable and snapshot isolations, are supported. Não há suporte para leitura suja.Dirty read is not supported.

As operações de abertura de acesso ao sistema de arquivos não aguardam nenhum bloqueio.The file system access open operations do not wait for any locks. Em vez disso, as operações de abertura falham imediatamente caso não possam acessar os dados por causa do isolamento da transação.Instead, the open operations fail immediately if they cannot access the data because of transaction isolation. As chamadas da API de streaming falharão com ERROR_SHARING_VIOLATION se a operação de abertura não puder continuar por causa de violação de isolamento.The streaming API calls fail with ERROR_SHARING_VIOLATION if the open operation cannot continue because of isolation violation.

Para permitir a realização de atualizações parciais, o aplicativo pode emitir um controle de FS de dispositivo (FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT) para buscar o conteúdo antigo no arquivo ao qual o identificador aberto faz referência.To allow for partial updates to be made, the application can issue a device FS control (FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT) to fetch the old content into the file that the opened handle references. Isso acionará uma cópia de conteúdo antigo no lado do servidor.This will trigger a server-side old content copy. Para obter melhor desempenho do aplicativo e evitar a ocorrência de tempos limites potenciais ao trabalhar com arquivos muito grandes, recomendamos usar E/S assíncrona.For better application performance and to avoid running into potential time-outs when you are working with very large files, we recommend that you use asynchronous I/O.

Se o FSCTL for emitido após o identificador ter sido gravado, a última operação de gravação persistirá e as gravações anteriores feitas no identificador serão perdidas.If the FSCTL is issued after the handle has been written to, the last write operation will persist, and prior writes that were made to the handle are lost.

APIs do sistema de arquivos e níveis de isolamento com suporteFile System APIs and Supported Isolation Levels

Quando uma API do sistema de arquivos não pode abrir um arquivo devido a uma violação de isolamento, uma exceção ERROR_SHARING_VIOLATION é retornada.When a file system API cannot open a file because of an isolation violation, an ERROR_SHARING_VIOLATION exception is returned. Essa violação de isolamento ocorre quando duas transações tentam acessar o mesmo arquivo.This isolation violation occurs when two transactions try to access the same file. O resultado da operação de acesso depende do modo no qual o arquivo foi aberto e da versão do SQL ServerSQL Server na qual a transação está sendo executada.The outcome of the access operation depends on the mode the file was opened in and the version of SQL ServerSQL Server that the transaction is running on. A tabela a seguir descreve os possíveis resultados para duas transações que estão acessando o mesmo arquivo.The following table outlines the possibly outcomes for two transactions that are accessing the same file.

Transação 1Transaction 1 Transação 2Transaction 2 Resultado no SQL Server 2008Outcome on SQL Server 2008 Resultado no SQL Server 2008 R2 e em versões posterioresOutcome on SQL Server 2008 R2 and later versions
Abrir para leitura.Open for read. Abrir para leitura.Open for read. Ambas realizadas com êxito.Both succeed. Ambas realizadas com êxito.Both succeed.
Abrir para leitura.Open for read. Abrir para gravação.Open for write. Ambas realizadas com êxito.Both succeed. As operações de gravação na transação 2 não afetam as operações de leitura executadas na transação 1.Write operations under transaction 2 do not affect read operations performed in transaction 1. Ambas realizadas com êxito.Both succeed. As operações de gravação na transação 2 não afetam as operações de leitura executadas na transação 1.Write operations under transaction 2 do not affect read operations performed in transaction 1.
Abrir para gravação.Open for write. Abrir para leitura.Open for read. A abertura da transação 2 falhará com uma exceção ERROR_SHARING_VIOLATION.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Ambas realizadas com êxito.Both succeed.
Abrir para gravação.Open for write. Abrir para gravação.Open for write. A abertura da transação 2 falhará com uma exceção ERROR_SHARING_VIOLATION.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception. A abertura da transação 2 falhará com uma exceção ERROR_SHARING_VIOLATION.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception.
Abrir para leitura.Open for read. Abrir para SELECT.Open for SELECT. Ambas realizadas com êxito.Both succeed. Ambas realizadas com êxito.Both succeed.
Abrir para leitura.Open for read. Abrir para UPDATE ou DELETE.Open for UPDATE or DELETE. Ambas realizadas com êxito.Both succeed. As operações de gravação na transação 2 não afetam as operações de leitura executadas na transação 1.Write operations under transaction 2 do not affect read operations performed in transaction 1. Ambas realizadas com êxito.Both succeed. As operações de gravação na transação 2 não afetam as operações de leitura executadas na transação 1.Write operations under transaction 2 do not affect read operations performed in transaction 1.
Abrir para gravação.Open for write. Abrir para SELECT.open for SELECT. A transação 2 é bloqueada até a transação 1 confirmar ou finalizar a transação, ou o bloqueio da transação atingir o tempo limite.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out. Ambas realizadas com êxito.Both succeed.
Abrir para gravação.Open for write. Abrir para UPDATE ou DELETE.Open for UPDATE or DELETE. A transação 2 é bloqueada até a transação 1 confirmar ou finalizar a transação, ou o bloqueio da transação atingir o tempo limite.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out. A transação 2 é bloqueada até a transação 1 confirmar ou finalizar a transação, ou o bloqueio da transação atingir o tempo limite.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out.
Abrir para SELECT.Open for SELECT. Abrir para leitura.Open for read. Ambas realizadas com êxito.Both succeed. Ambas realizadas com êxito.Both succeed.
Abrir para SELECT.Open for SELECT. Abrir para gravação.Open for write. Ambas realizadas com êxito.Both succeed. As operações de gravação na transação 2 não afetam a transação 1.Write operations under transaction 2 do not affect transaction 1. Ambas realizadas com êxito.Both succeed. As operações de gravação na transação 2 não afetam a transação 1.Write operations under transaction 2 do not affect transaction 1.
Abrir para UPDATE ou DELETE.Open for UPDATE or DELETE. Abrir para leitura.Open for read. A operação de abertura da transação 2 falhará com uma exceção ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Ambas realizadas com êxito.Both succeed.
Abrir para UPDATE ou DELETE.Open for UPDATE or DELETE. Abrir para gravação.Open for write. A operação de abertura da transação 2 falhará com uma exceção ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. A operação de abertura da transação 2 falhará com uma exceção ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception.
Abra para SELECT com leitura repetida.Open for SELECT with repeatable read. Abrir para leitura.Open for read. Ambas realizadas com êxito.Both succeed. Ambas realizadas com êxito.Both succeed.
Abra para SELECT com leitura repetida.Open for SELECT with repeatable read. Abrir para gravação.Open for write. A operação de abertura da transação 2 falhará com uma exceção ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. A operação de abertura da transação 2 falhará com uma exceção ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception.

Gravação de clientes remotosWrite-Through from Remote Clients

O acesso do sistema de arquivos remoto a dados FILESTREAM é habilitado pelo protocolo SMB.Remote file system access to FILESTREAM data is enabled over the Server Message Block (SMB) protocol. Se o cliente for remoto, nenhuma operação de gravação será armazenada em cache pelo lado do cliente.If the client is remote, no write operations are cached by the client side. Os operações de gravação sempre serão enviados ao servidor.The write operations will always be sent to the server. Os dados podem ser armazenados em cache no lado de servidor.The data can be cached on the server side. Recomendamos que aplicativos que estão em execução em clientes remotos consolidem operações de gravação pequenas para fazer menos operações de gravação usando um tamanho maior de dados.We recommend that applications that are running on remote clients consolidate small write operations to make fewer write operations using larger data size.

Não há suporte para a criação de exibições mapeadas de memória (E/S mapeada de memória) usando um identificador de FILESTREAM.Creating memory mapped views (memory mapped I/O) by using a FILESTREAM handle is not supported. Se o mapeamento de memória for usado para dados FILESTREAM, o Mecanismo de Banco de DadosDatabase Engine não poderá garantir consistência e durabilidade dos dados ou integridade do banco de dados.If memory mapping is used for FILESTREAM data, the Mecanismo de Banco de DadosDatabase Engine cannot guarantee consistency and durability of the data or the integrity of the database.

Habilitar e configurar FILESTREAMEnable and Configure FILESTREAM
Criar um banco de dados habilitado para FILESTREAMCreate a FILESTREAM-Enabled Database
Criar uma tabela para armazenar dados FILESTREAMCreate a Table for Storing FILESTREAM Data
Acessar dados FILESTREAM com Transact-SQL Criar aplicativos clientes para dados FILESTREAMAccess FILESTREAM Data with Transact-SQL Create Client Applications for FILESTREAM Data
Acessar dados do FILESTREAM com OpenSqlFilestreamAccess FILESTREAM Data with OpenSqlFilestream
Fazer atualizações parciais em dados do FILESTREAMMake Partial Updates to FILESTREAM Data
Evitar conflitos com operações de banco de dados em aplicativos de FILESTREAMAvoid Conflicts with Database Operations in FILESTREAM Applications
Mover um banco de dados habilitado para FILESTREAMMove a FILESTREAM-Enabled Database
Configurar FILESTREAM em um cluster de failoverSet Up FILESTREAM on a Failover Cluster
Configurar um firewall para acesso ao FILESTREAMConfigure a Firewall for FILESTREAM Access

Compatibilidade do FILESTREAM com outros recursos do SQL ServerFILESTREAM Compatibility with Other SQL Server Features
Exibições de gerenciamento dinâmico de fluxo de arquivos e FileTable (Transact-SQL)Filestream and FileTable Dynamic Management Views (Transact-SQL)
Exibições de catálogo de fluxo de arquivos e FileTable (Transact-SQL)Filestream and FileTable Catalog Views (Transact-SQL)
Procedimentos armazenados de fluxo de arquivos e FileTable (Transact-SQL)Filestream and FileTable System Stored Procedures (Transact-SQL)