sql filestream что это
FILESTREAM
Информация для этой статьи взята с сайта http://msdn.microsoft.com/ и проиллюстрирована мной для большей наглядности.
Что такое FILESTREAM и для чего он нужен читайте перейдя по ссылке http://msdn.microsoft.com/ru-ru/library/bb933993%28v=sql.100%29
Если не хотите переходить, то кратко:
Хранилище FILESTREAM объединяет компонент SQL Server Database Engine с файловой системой NTFS, размещая данные больших двоичных объектов (BLOB) типа varbinary(max) в файловой системе в виде файлов. С помощью инструкций Transact-SQL можно вставлять, обновлять, запрашивать, выполнять поиск и выполнять резервное копирование данных FILESTREAM.
В следующем примере кода создается база данных с именем Archive. В этой базе данных содержатся три файловые группы: PRIMARY, Arch1 и FileStreamGroup1. PRIMARY и Arch1 — это обычные файловые группы, которые не могут содержать данные хранилища FILESTREAM. FileStreamGroup1 — это файловая группа хранилища FILESTREAM.
CREATE DATABASE Archive ON PRIMARY ( NAME = Arch1, FILENAME = ‘c:\data\archdat1.mdf’), FILEGROUP FileStreamGroup1 CONTAINS FILESTREAM( NAME = Arch3, FILENAME = ‘c:\data\filestream1’) LOG ON ( NAME = Archlog1, FILENAME = ‘c:\data\archlog1.ldf’) GO
Для файловой группы FILESTREAM параметр FILENAME содержит путь. Должен существовать путь вплоть до последнего каталога, но последнего каталога существовать не должно. Для этого примера должен существовать каталог c:\data. Но вложенная папка filestream1 не может существовать, если выполняется инструкция CREATE DATABASE. Дополнительные сведения о синтаксисе см. в разделе CREATE DATABASE (Transact-SQL).
Sql filestream что это
Итак, Ваша база данных уже создана и, например, работает некоторое время. Вы решили использовать filestream для каких-то новых данных в вашей базе. (О том как включить filestream на уже созданной таблице с blob (бинарными) данными читайте в следующей статье.)
Т.е. в данном примере стоит задача создать новую таблицу для хранения filestream данных на уже существующей базе данных.
Итак, инструкция:
Шаг 1. Создание файловой группы. Все созданные в дальнейшем папки для хранения записей типа filestream будут объединяться в эти группы. Вы можете создать одну группу или несколько в зависимости от потребностей.
Первоначально нам необходимо открыть свойства базы данных, для этого в окне Object Explorer выберите свою базу и в контекстном меню перейдите по пункту «Properties«:
В открывшемся диалоговом окне свойств выбранной БД в блоке «Select a page» выберите пункт «Filegroups«.
В правой части окна под блоком Filestream нажмите кнопку «Add«. Появится новая строка, в которой в колонке «Name» введите любое произвольное название группы на англ.языке без пробелов.
Шаг 2. Создание папки для хранения данных типа filestream.
Не закрывая предыдущее окно, в блоке «Select a page» выберите пункт «Files«. Нажмите кнопку «Add» и в появившейся строке заполните следующие колонки:
Теперь можно нажать кнопку ОК, чтобы сохранить результат:
Чтобы увидеть, что сделал SQL сервер в результате наших действий, перейдите по пути, который Вы указали как путь для хранения filestream-данных.
Вы увидите, что была создана папка, по имени «Logical Name«, в которой расположены некоторые служебные файлы и папки:
Изменять или удалять данную служебную информацию не рекомендуется.
Шаг 3. Создание новой таблицы для хранения данных типа filestream. Вот здесь к сожалению без SQL-скрипта не обойтись, т.к. создать подобный filestream-столбец через конструктор таблиц невозможно. Поэтому я рекомендую сначала создать таблицу с обязательными для filestream колонками с помощью скрипта, а затем уже через конструктор дополнить ее нужными Вам полями.
Итак, открываем окно для ввода скриптов (для этого выберите свою БД и нажмите кнопку «New Query«).
В открывшемся окне введите следующий скрипт:
После выполнения данного скрипта в созданной ранее папке Вы увидите новую папку с именем, похожим на некий идентификатор. Эта папка будет соответствовать Вашей таблице и в ней будут храниться сохраненные файлы.
Теперь Вы можете перейти в конструктор таблицы и дополнить ее нужными полями.
Обратите внимание, что из конструктора не видно, является ли поле fileDATA полем типа filestream.
Если Вы хотите проверить, является ли колонка полем типа filestream, можно выполнить такой скрипт:
В результате выполнения этого скрипта, Вы увидите список всех колонок указанной таблицы, которые имеют атрибут filestream.
Теперь можно работать с данной таблицей. Информации об этом довольно много в сети. Например, официальный ресурс от Microsoft: http://msdn.microsoft.com/ru-ru/library/gg471497
Пошаговая инструкция по переносу содержимого KooBoo с XML на SQL Server 2008 R2
Совместимость FILESTREAM с другими компонентами SQL Server
Поскольку данные FILESTREAM находятся в файловой системе, в данном разделе приводятся основные сведения, рекомендации и ограничения по использованию FILESTREAM со следующими компонентами SQL Server:
Службы SQL Server Integration Services
Службы SQL Server Integration Services (SSIS) обрабатывают данные FILESTREAM в потоке данных как любые другие данные большого двоичного объекта с использованием типа данных DT_IMAGE SSIS.
Загрузку файлов из файловой системы в столбец FILESTREAM можно выполнить с помощью преобразования «Импорт столбца». Преобразование «Экспорт столбца» также можно использовать, чтобы извлечь файлы из столбца FILESTREAM в другую папку файловой системы.
Распределенные запросы и связанные серверы
Шифрование
Данные FILESTREAM не шифруются, даже если включено прозрачное шифрование данных.
Моментальные снимки базы данных
SQL Server не поддерживает моментальные снимки базы данных для файловых групп FILESTREAM. Если файловая группа FILESTREAM включена в предложение CREATE DATABASE ON, выполнение этой инструкции завершится сбоем и приведет к возникновению ошибки.
При использовании FILESTREAM моментальные снимки базы данных можно создавать для стандартных файловых групп (отличных от FILESTREAM). В таких моментальных снимках баз данных файловые группы FILESTREAM отмечаются как вне сети.
В инструкции SELECT, выполняемой в отношении таблицы FILESTREAM в моментальном снимке базы данных, не должно содержаться столбцов FILESTREAM; в противном случае будет возвращено следующее сообщение об ошибке:
Could not continue scan with NOLOCK due to data movement.
Replication
Репликация больших значений данных с подписчиков SQL Server в SQL Server 2005 (9.x) ограничена максимальным значением 256 МБ значений данных. Дополнительные сведения см. в разделе Maximum Capacity Specifications.
Вопросы использования репликации транзакций
При использовании столбцов FILESTREAM в таблицах, опубликованных для репликации транзакций, обратите внимание на следующие положения.
Если в какой-либо из таблиц содержатся столбцы с атрибутом FILESTREAM, значения database snapshot или database snapshot character нельзя использовать для свойства @sync_method хранимой процедуры sp_addpublication.
Параметр max text repl size задает максимально допустимый объем данных, добавляемых в опубликованный для репликации столбец. Этот параметр позволяет управлять размером реплицируемых данных FILESTREAM.
Общие вопросы репликации слиянием
При использовании столбцов FILESTREAM в таблицах, опубликованных для репликации слиянием, обратите внимание на следующие положения.
При добавлении столбца FILESTREAM к таблице, уже опубликованной для репликации слиянием, необходимо убедиться, что у столбца uniqueidentifier имеется ограничение UNIQUE. Если ограничение UNIQUE отсутствует, добавьте именованное ограничение к таблице в базе данных публикации. По умолчанию репликация слиянием опубликует данное изменение схемы, и оно будет применено к каждой базе данных подписки.
Если ограничение UNIQUE добавляется вручную согласно описанию и репликацию слиянием требуется удалить, то сначала необходимо удалить ограничение UNIQUE, иначе удаление репликации завершится неуспешно.
По умолчанию в репликации слиянием используется значение NEWSEQUENTIALID(), поскольку, по сравнению с NEWID(), оно обеспечивает лучшую производительность. При добавлении столбца uniqueidentifier к таблице, уже опубликованной для репликации слиянием, в качестве значения по умолчанию следует указать NEWSEQUENTIALID().
Репликация слиянием включает в себя оптимизацию репликации типов больших объектов. Оптимизация управляется при помощи параметра @stream_blob_columns хранимой процедуры sp_addmergearticle. Если параметр схемы настроен на репликацию атрибута FILESTREAM, параметру @stream_blob_columns присваивается значение true. Эта оптимизация может быть переопределена с помощью хранимой процедуры sp_changemergearticle. Эта хранимая процедура позволяет задать параметру @stream_blob_columns значение false. При добавлении столбца FILESTREAM в таблицу, уже опубликованную для репликации слиянием, значение true рекомендуется присвоить параметру при помощи хранимой процедуры sp_changemergearticle.
Включение параметра схемы для FILESTREAM после создания статьи может привести к сбою репликации, если размер данных столбца FILESTREAM превышает 2 ГБ и если во время репликации возникает конфликт. Если возникновение данной ситуации не исключено, рекомендуется удалить и повторно создать статью таблицы с соответствующим параметром схемы FILESTREAM, включенным во время создания.
Репликация слиянием позволяет синхронизировать данные FILESTREAM во время HTTPS-соединения при помощи веб-синхронизации. Размер этих данных не должен превышать ограничение в 50 МБ для веб-синхронизации, иначе возникнет ошибка выполнения.
Доставка журналов
Вдоставке журналов предусмотрена поддержка FILESTREAM. Как на сервере-источнике, так и на сервере-получателе должна быть запущена версия SQL Server 2008или более поздняя версия и должен быть включен параметр FILESTREAM.
Зеркальное отображение базы данных
Зеркальное отображение базы данных не поддерживает FILESTREAM. Создание файловой группы FILESTREAM на основном сервере невозможно. Настройка зеркального отображения для базы данных, содержащей файловые группы FILESTREAM, невозможна.
Полнотекстовое индексирование
Полнотекстовый поиск индексирует содержимое блоков больших двоичных объектов (BLOB) FILESTREAM. Индексирование таких файлов, как изображения, может оказаться нецелесообразным. При обновлении блоков больших двоичных объектов (BLOB) FILESTREAM выполняется их повторное индексирование.
Отказоустойчивая кластеризация
В целях отказоустойчивой кластеризации файловые группы FILESTREAM могут быть помещены на общий диск. Параметр FILESTREAM должен быть включен на каждом узле кластера, на котором будет размещен экземпляр FILESTREAM. Дополнительные сведения см. в статье Установка FILESTREAM в отказоустойчивом кластере.
SQL Server Express
SQL Server Express предусмотрена поддержка FILESTREAM. Ограничение размера базы данных в 10 ГБ не включает контейнер данных FILESTREAM.
Автономные базы данных
Для использования функции FILESTREAM требуется выполнение определенной настройки вне базы данных. Поэтому база данных, использующая FILESTREAM или FileTable, не является полностью автономной.
Для автономности базы данных можно установить значение PARTIAL при необходимости использовать некоторые функции автономных баз данных, например такие, как функция автономных пользователей. В этом случае следует иметь в виду, что некоторые параметры базы данных не хранятся в самой базе данных и не перемещаются автоматически при перемещении базы данных.
Доступ к данным FILESTREAM с OpenSqlFilestream
API OpenSqlFilestream получает дескриптор файла, совместимый с Win32, для большого двоичного объекта FILESTREAM, хранящегося в файловой системе. Дескриптор может быть передан в любой из следующих API-интерфейсов Win32: ReadFile, WriteFile, TransmitFile, SetFilePointer, SetEndOfFile или FlushFileBuffers. При передаче этого дескриптора любому другому API Win32 будет возвращена ошибка ERROR_ACCESS_DENIED. Дескриптор следует закрыть, передав его API-интерфейсу Win32 CloseHandle перед фиксацией или откатом транзакции. Если дескриптор не будет закрыт, то это вызовет утечку ресурсов со стороны сервера.
Если открывается доступ к файлу для записи, то транзакция принадлежит агенту FILESTREAM. Пока транзакция не будет разблокирована, возможен только файловый ввод-вывод Win32. Для освобождении транзакции дескриптор записи должен быть закрыт.
Синтаксис
Параметры
DesiredAccess
[in] Задает режим, используемый при доступе к данным FILESTREAM BLOB. Это значение передается функции DeviceIoControl Function.
Имя | Значение | Значение |
---|---|---|
SQL_FILESTREAM_READ | 0 | Данные могут быть считаны из файла. |
SQL_FILESTREAM_WRITE | 1 | Данные могут быть записаны в файл. |
SQL_FILESTREAM_READWRITE | 2 | Данные могут быть считаны из файла и записаны в него. |
Эти значения определяются в перечислении SQL_FILESTREAM_DESIRED_ACCESS, расположенном в файле sqlncli.h.
OpenOptions
[in] Атрибуты и флаги файла. В этот параметр может входить любое сочетание следующих флагов.
Флаг | Значение | Значение |
---|---|---|
SQL_FILESTREAM_OPEN_NONE | 0x00000000L | Файл открывается или создается без специальных параметров. |
SQL_FILESTREAM_OPEN_FLAG_ASYNC | 0x00000001L | Файл открывается или создается для асинхронного ввода-вывода. |
SQL_FILESTREAM_OPEN_FLAG_NO_BUFFERING | 0x00000002L | Система открывает файл, не используя системное кэширование. |
SQL_FILESTREAM_OPEN_FLAG_NO_WRITE_THROUGH | 0x00000004L | Система не записывает данные в промежуточный кэш. Запись производится непосредственно на диск. |
SQL_FILESTREAM_OPEN_FLAG_SEQUENTIAL_SCAN | 0x00000008L | Доступ к файлу осуществляется последовательно от начала до конца. Система может использовать это в качестве указания для оптимизации кэширования файлов. Если приложение перемещает указатель файла для случайного доступа, кэширование может произойти неоптимально. |
SQL_FILESTREAM_OPEN_FLAG_RANDOM_ACCESS | 0x00000010L | Доступ к файлу осуществляется случайным образом. Система может использовать это в качестве указания для оптимизации кэширования файлов. |
AllocationSize
[in] Указывает изначально выделяемый размер файла данных в байтах. Не учитывается в режиме чтения. Этот параметр может иметь значение NULL, в этом случае используется поведение файловой системы по умолчанию.
Возвращаемое значение
Если функция завершается успешно, возвращается открытый дескриптор на указанный файл. Если функция завершается неудачно, возвращается значение INVALID_HANDLE_VALUE. Дополнительные сведения об ошибке можно получить с помощью функции GetLastError().
Примеры
В следующих примерах показано, как можно использовать функцию API OpenSqlFilestream для получения дескриптора Win32.
Remarks
Параметры инструкции ALTER DATABASE для файлов и файловых групп (Transact-SQL)
Изменяет файлы и файловые группы, связанные с базой данных. Добавляет или удаляет файлы и файловые группы из базы данных и изменяет атрибуты базы данных или ее файлов и файловых групп. См. дополнительные сведения о других параметрах ALTER DATABASE.
Дополнительные сведения о соглашениях о синтаксисе см. в статье Соглашения о синтаксисе в Transact-SQL.
Выберите продукт
В следующей строке выберите название нужного продукта, и отобразится информация только об этом продукте.
* SQL Server *
Синтаксис
Аргументы
Указывает файл, который будет добавлен, удален или изменен.
database_name — имя изменяемой базы данных.
ADD FILE — добавляет файл к базе данных.
TO FILEGROUP < filegroup_name > — задает файловую группу, к которой необходимо добавить указанный файл. Чтобы отобразить текущую файловую группу и узнать, какая файловая группа в данный момент установлена по умолчанию, используйте представление каталога sys.filegroups.
ADD LOG FILE — добавляет файл журнала в указанную базу данных.
REMOVE FILE logical_file_name — удаляет логическое описание файла из экземпляра SQL Server и физический файл. Файл не может быть удален, если он не пуст.
logical_file_name — логическое имя, используемое в SQL Server при обращении к файлу.
При перемещении полнотекстового каталога укажите только новый путь в предложении FILENAME. Не указывайте имя файла в операционной системе.
Дополнительные сведения см. в статье Перемещение файлов базы данных.
Для файловой группы FILESTREAM значение NAME можно изменять в режиме в сети. Значение FILENAME можно изменять в режиме в сети, но внесенное изменение вступает в силу лишь после того, как будет выполнено физическое перемещение контейнера, а также остановка и последующий перезапуск сервера.
Можно задать значение параметра файла FILESTREAM, равное OFFLINE. Если файл FILESTREAM определен как вне сети, его родительская файловая группа отмечается внутри как вне сети, поэтому любая попытка доступа к данным FILESTREAM в пределах этой файловой группы окончится неудачей.
Управляет свойствами файла.
NAME logical_file_name — задает логическое имя файла.
logical_file_name — логическое имя, используемое в экземпляре SQL Server при ссылке на файл.
NEWNAME new_logical_file_name — задает новое логическое имя файла.
new_logical_file_name — имя, которым будет заменено текущее логическое имя файла. Имя должно быть уникальным в базе данных и соответствовать правилам для идентификаторов. Имя может быть символьной константой или константой Юникода, обычным идентификатором или идентификатором с разделителем.
FILENAME < ‘ os_file_name ‘ | ‘ filestream_path ‘ | ‘ memory_optimized_data_path ‘ > — задает имя (физического) файла в операционной системе.
‘os_file_name‘ — для стандартной файловой группы (ROWS) этот параметр представляет собой путь и имя файла, которые использовались операционной системой при создании файла. Файл должен постоянно храниться на сервере, на котором установлен SQL Server. Указанный путь должен существовать до выполнения инструкции ALTER DATABASE.
Системные базы данных не могут размещаться в общих каталогах UNC.
Файлы данных не должны располагаться в сжатой файловой системе, кроме случаев, когда файлы являются вторичными файлами только для чтения или база данных находится в режиме только для чтения. Файлы журналов ни в коем случае не должны размещаться в сжатых файловых системах.
Если файл находится в необработанной секции, аргумент os_file_name должен указывать только букву диска существующей необработанной секции. В каждый необработанный раздел может быть помещен только один файл.
Свойства SIZE и FILEGROWTH к файловой группе FILESTREAM неприменимы.
Файловую группу и файл ( ) необходимо создавать в одной инструкции.
Свойства SIZE и FILEGROWTH не относятся к файловой группе MEMORY_OPTIMIZED_DATA.
Дополнительные сведения об оптимизированных для памяти файловых группах см. в статье Оптимизированная для памяти файловая группа.
SIZE size — указывает размер файла. Параметр SIZE не применяется к файловым группам FILESTREAM.
size — размер файла.
При использовании в инструкции ADD FILE аргумент size является начальным размером файла. При использовании в инструкции MODIFY FILE аргумент size является новым размером файла и должен превышать текущий размер файла.
Если для первичного файла не задан аргумент size, компонент SQL Serverиспользует размер первичного файла, указанный в базе данных model. Когда указан вторичный файл данных или журнала, но для этого файла не указан аргумент size, компонент Компонент Database Engine задает размер файла равным 1 МБ.
Суффиксы KB, MB, GB и TB могут использоваться для указания килобайтов, мегабайтов, гигабайтов или терабайтов. По умолчанию — MБ. Укажите целое число без десятичного разделителя. Для указания долей мегабайта преобразуйте значение в килобайты, умножив число на 1024. Например, укажите «1536 KB» вместо «1,5 MB» (1,5 x 1024 = 1536).
SIZE невозможно задать:
MAXSIZE < max_size| UNLIMITED > — задает максимальное значение, до которого может увеличиваться размер файла.
max_size — максимальный размер файла. Суффиксы KB, MB, GB и TB могут использоваться для указания килобайтов, мегабайтов, гигабайтов или терабайтов. По умолчанию — MБ. Укажите целое число без десятичного разделителя. Если аргумент max_size не указан, то размер файла может увеличиваться до тех пор, пока диск не будет заполнен.
UNLIMITED — указывает, что размер файла может увеличиваться вплоть до заполнения диска. В SQL Server файл журнала, для которого задано неограниченное увеличение размера, имеет максимальный размер 2 ТБ, а файл данных — 16 ТБ. Ограничения размера отсутствуют, если этот параметр указан для контейнера FILESTREAM. Размер продолжает увеличиваться до полного заполнения диска.
MAXSIZE невозможно задать, если указан UNC-путь к файлу.
FILEGROWTH growth_increment — задает шаг автоматического приращения при увеличении размера файла. Значение параметра FILEGROWTH для файла не может превосходить значение параметра MAXSIZE. Параметр FILEGROWTH не применяется к файловым группам FILESTREAM.
growth_increment — объем пространства, добавляемого к файлу каждый раз, когда требуется увеличить пространство.
Значение может быть указано в килобайтах, мегабайтах, гигабайтах, терабайтах или процентах (%). Если указано число без суффикса MB, KB или %, то по умолчанию используется MB. Если размер указан в процентах (%), то шаг роста — это заданная часть в процентах от размера файла во время этого файла. Указанный размер округляется до ближайших 64 КБ.
Значение 0 указывает, что автоматическое приращение выключено и дополнительное пространство для файла не разрешено.
Если параметр FILEGROWTH не задан, доступны следующие значения по умолчанию.
Версия | Значения по умолчанию |
---|---|
Начиная с SQL Server 2016 (13.x); | Данные — 64 МБ. Файлы журналов — 64 МБ. |
Начиная с SQL Server 2005 (9.x) | Данные — 1 МБ. Файлы журналов — 10 %. |
До SQL Server 2005 (9.x) | Данные — 10 %. Файлы журналов — 10 %. |
FILEGROWTH невозможно задать:
OFFLINE — переводит файл в режим «вне сети» и делает все объекты в файловой группе недоступными.
Используйте этот параметр только в том случае, когда файл поврежден и может быть восстановлен. Файл, переведенный в режим OFFLINE, может быть заново включен в режиме в сети только при восстановлении из резервной копии. Дополнительные сведения о восстановлении отдельного файла см. в статье Инструкции RESTORE (Transact-SQL).
Параметры недоступны в автономной базе данных.
Добавить, изменить или удалить файловую группу из базы данных.
ADD FILEGROUP filegroup_name — добавляет в базу данных файловую группу.
CONTAINS FILESTREAM — указывает, что файловая группа хранит большие двоичные объекты (BLOB-объекты) FILESTREAM в файловой системе.
Применимо к: SQL Server (SQL Server 2014 (12.x) и выше)
REMOVE FILEGROUP filegroup_name — удаляет файловую группу из базы данных. Файловая группа не может быть удалена, пока она не пустая. Вначале удалите из файловой группы все файлы. Дополнительные сведения см. выше в разделе «REMOVE FILE logical_file_name«.
Если сборщик мусора FILESTREAM не удалил все файлы из контейнера FILESTREAM, операция ALTER DATABASE REMOVE FILE по удалению контейнера FILESTREAM завершится неудачей и возвратит ошибку. См. раздел Удаление контейнера FILESTREAM далее в этой статье.
MODIFY FILEGROUP filegroup_name < | DEFAULT | NAME = new_filegroup_name > — изменяет файловую группу, меняя ее состояние на READ_ONLY или READ_WRITE, делая ее файловой группой по умолчанию для базы данных или изменяя имя файловой группы.
— устанавливает свойство «только для чтения» или «чтение и запись» для файловой группы.
DEFAULT — изменяет стандартную файловую группу базы данных на filegroup_name. Только одна файловая группа в базе данных может быть файловой группой по умолчанию. Дополнительные сведения см. в статье Файлы и группы файлов базы данных.
NAME = new_filegroup_name — изменяет имя файловой группы на new_filegroup_name.
AUTOGROW_SINGLE_FILE — применимо кSQL Server (SQL Server 2016 (13.x); и выше)
Если файл в файловой группе удовлетворяет требованиям порога автоматического увеличения, увеличивается только этот файл. Это значение по умолчанию.
Применимо к: SQL Server (SQL Server 2016 (13.x); и выше)
Если файл в файловой группе удовлетворяет требованиям порога автоматического увеличения, все файлы в файловой группе увеличиваются.
Это значение по умолчанию для tempdb.
Устанавливает свойство «только для чтения» или «чтение и запись» для файловой группы.
READ_ONLY | READONLY — определяет, что файловая группа доступна только для чтения. Изменение ее объектов запрещено. Первичную файловую группу перевести в состояние только для чтения нельзя. Чтобы изменить это состояние, необходимо обладать монопольным доступом к базе данных. Дополнительные сведения см. в описании предложения SINGLE_USER.
Поскольку база данных находится в состоянии только для чтения, невозможно производить изменения данных:
READ_WRITE | READWRITE — определяет, что файловая группа доступна для чтения и записи. Разрешено изменять объекты в файловой группе. Чтобы изменить это состояние, необходимо обладать монопольным доступом к базе данных. Дополнительные сведения см. в описании предложения SINGLE_USER.
Remarks
Чтобы уменьшить размер базы данных, используйте предложение DBCC SHRINKDATABASE.
Добавить или удалить файл во время выполнения инструкции BACKUP невозможно.
Для каждой базы данных может указываться не более 32 767 файлов и 32 767 файловых групп.
Начиная с SQL Server 2005 (9.x) и в более поздних версиях состояние файла базы данных (например, в сети или вне сети) поддерживается независимо от состояния базы данных. Дополнительные сведения см. в разделе Состояния файлов.
Параметры SIZE, MAXSIZE и FILEGROWTH недоступны, если путь к файлу указан в формате UNC.
Параметры SIZE и FILEGROWTH невозможно задать для файловых групп, оптимизированных для памяти.
Перемещение файлов
Системные или определенные пользователем данные и файлы журналов можно перемещать, указывая новое местоположение в параметре FILENAME. Это может быть полезным в следующих случаях:
Дополнительные сведения см. в статье Перемещение файлов базы данных.
Инициализация файлов
По умолчанию файлы данных и журналов инициализируются, заполняясь нулями, при выполнении одной из следующих операций:
Файлы данных могут быть инициализированы мгновенно. Это разрешено для быстрого выполнения этих файловых операций. Дополнительные сведения см. в разделе Инициализация файлов базы данных.
Удаление контейнера FILESTREAM
Даже если контейнер FILESTREAM был очищен с использованием операции «DBCC SHRINKFILE», базе данных по-прежнему могут быть необходимы ссылки на удаленные файлы по различным причинам, связанным с обслуживанием системы. Хранимая процедура sp_filestream_force_garbage_collection запустит сборщик мусора FILESTREAM, чтобы удалить эти файлы, когда это будет безопасно. Если сборщик мусора FILESTREAM не удалил все файлы из контейнера FILESTREAM, операция ALTER DATABASE REMOVE FILE по удалению контейнера FILESTREAM завершится неудачей и вернет ошибку. Для удаления контейнера FILESTREAM рекомендуется следующий процесс.
Примеры
A. Добавление файла к базе данных
В следующем примере к базе данных AdventureWorks2012 добавляется файл данных размером 5 МБ.
Б. Добавление файловой группы с двумя файлами к базе данных
В следующем примере в базе данных AdventureWorks2012 создается файловая группа Test1FG1 и добавляется два файла по 5 МБ в эту файловую группу.
В. Добавление двух файлов журнала к базе данных
В следующем примере к базе данных AdventureWorks2012 добавляется два файла журнала размером 5 МБ каждый.
Г. Удаление файла из базы данных
В следующем примере удаляется один из файлов, добавленных в примере Б.
Д. Изменение файла
В следующем примере увеличивается размер одного из файлов, добавленных в примере Б. Инструкция ALTER DATABASE с командой MODIFY FILE может только увеличить размер файла, поэтому, если нужно уменьшить размер файла, следует использовать DBCC SHRINKFILE.
В этом примере показано уменьшение размера файла данных до 100 МБ и определение размера при этом объеме.
Е. Перемещение файла в новое расположение
Перед выполнением этого примера необходимо физически переместить файл в новый каталог. После выполнения остановите и запустите экземпляр SQL Server или переведите базу данных AdventureWorks2012 в состояние OFFLINE, а затем назад в ONLINE, чтобы осуществить изменения.
Ж. Перемещение базы данных tempdb в новое расположение
В следующем примере база данных tempdb перемещается из ее текущего расположения на диске в другое расположение. Так как база данных tempdb повторно создается при каждом запуске службы MSSQLSERVER, нет необходимости физически переносить файлы данных и журнала. Эти файлы создаются при запуске службы на шаге 3. Пока служба не будет запущена повторно, база данных tempdb продолжает функционировать на прежнем месте.
Определите логические имена файлов базы данных tempdb и их текущее расположение на диске.
Остановите и перезапустите экземпляр SQL Server.
Проверьте изменение файла.
Удалите файлы tempdb.mdf и templog.ldf из их исходного расположения.
З. Назначение файловой группы по умолчанию
И. Добавление файловой группы с помощью инструкции ALTER DATABASE
К. Изменение файловой группы таким образом, что если файл в файловой группе удовлетворяет требованиям порога автоматического увеличения, увеличиваются все файлы в файловой группе
См. также:
* Управляемый экземпляр SQL *
Управляемый экземпляр SQL Azure
Используйте эту инструкцию с базой данных в Управляемом экземпляре SQL Azure.
Синтаксис для Управляемого экземпляра SQL Azure
Аргументы
Указывает файл, который будет добавлен, удален или изменен.
database_name — имя изменяемой базы данных.
ADD FILE — добавляет файл к базе данных.
TO FILEGROUP < filegroup_name > — задает файловую группу, к которой необходимо добавить указанный файл. Чтобы отобразить текущую файловую группу и узнать, какая файловая группа в данный момент установлена по умолчанию, используйте представление каталога sys.filegroups.
REMOVE FILE logical_file_name — удаляет логическое описание файла из экземпляра SQL Server и физический файл. Файл не может быть удален, если он не пуст.
logical_file_name — логическое имя, используемое в SQL Server при обращении к файлу.
Управляет свойствами файла.
NAME logical_file_name — задает логическое имя файла.
logical_file_name — логическое имя, используемое в экземпляре SQL Server при ссылке на файл.
NEWNAME new_logical_file_name — задает новое логическое имя файла.
new_logical_file_name — имя, которым будет заменено текущее логическое имя файла. Имя должно быть уникальным в базе данных и соответствовать правилам для идентификаторов. Имя может быть символьной константой или константой Юникода, обычным идентификатором или идентификатором с разделителем.
SIZE size — указывает размер файла.
size — размер файла.
При использовании в инструкции ADD FILE аргумент size является начальным размером файла. При использовании в инструкции MODIFY FILE аргумент size является новым размером файла и должен превышать текущий размер файла.
Если для первичного файла не задан аргумент size, компонент SQL Serverиспользует размер первичного файла, указанный в базе данных model. Когда указан вторичный файл данных или журнала, но для этого файла не указан аргумент size, компонент Компонент Database Engine задает размер файла равным 1 МБ.
Суффиксы KB, MB, GB и TB могут использоваться для указания килобайтов, мегабайтов, гигабайтов или терабайтов. По умолчанию — MБ. Укажите целое число без десятичного разделителя. Для указания долей мегабайта преобразуйте значение в килобайты, умножив число на 1024. Например, укажите «1536 KB» вместо «1,5 MB» (1,5 x 1024 = 1536).
MAXSIZE < max_size| UNLIMITED > — задает максимальное значение, до которого может увеличиваться размер файла.
max_size — максимальный размер файла. Суффиксы KB, MB, GB и TB могут использоваться для указания килобайтов, мегабайтов, гигабайтов или терабайтов. По умолчанию — MБ. Укажите целое число без десятичного разделителя. Если аргумент max_size не указан, то размер файла может увеличиваться до тех пор, пока диск не будет заполнен.
UNLIMITED — указывает, что размер файла может увеличиваться вплоть до заполнения диска. В SQL Server файл журнала, для которого задано неограниченное увеличение размера, имеет максимальный размер 2 ТБ, а файл данных — 16 ТБ.
FILEGROWTH growth_increment — задает шаг автоматического приращения при увеличении размера файла. Значение параметра FILEGROWTH для файла не может превосходить значение параметра MAXSIZE.
growth_increment — объем пространства, добавляемого к файлу каждый раз, когда требуется увеличить пространство.
Значение может быть указано в килобайтах, мегабайтах, гигабайтах, терабайтах или процентах (%). Если указано число без суффикса MB, KB или %, то по умолчанию используется MB. Если размер указан в процентах (%), то шаг роста — это заданная часть в процентах от размера файла во время этого файла. Указанный размер округляется до ближайших 64 КБ.
Значение 0 указывает, что автоматическое приращение выключено и дополнительное пространство для файла не разрешено.
Если параметр FILEGROWTH не задан, доступны следующие значения по умолчанию.
Добавить, изменить или удалить файловую группу из базы данных.
ADD FILEGROUP filegroup_name — добавляет в базу данных файловую группу.
В следующем примере создается файловая группа, которая добавляется в базу данных с именем sql_db_mi, и в эту файловую группу добавляется файл.
REMOVE FILEGROUP filegroup_name — удаляет файловую группу из базы данных. Файловая группа не может быть удалена, пока она не пустая. Вначале удалите из файловой группы все файлы. Дополнительные сведения см. выше в разделе «REMOVE FILE logical_file_name«.
MODIFY FILEGROUP filegroup_name < | DEFAULT | NAME = new_filegroup_name > — изменяет файловую группу, меняя ее состояние на READ_ONLY или READ_WRITE, делая ее файловой группой по умолчанию для базы данных или изменяя имя файловой группы.
— устанавливает свойство «только для чтения» или «чтение и запись» для файловой группы.
DEFAULT — изменяет стандартную файловую группу базы данных на filegroup_name. Только одна файловая группа в базе данных может быть файловой группой по умолчанию. Дополнительные сведения см. в статье Файлы и группы файлов базы данных.
NAME = new_filegroup_name — изменяет имя файловой группы на new_filegroup_name.
Если файл в файловой группе удовлетворяет требованиям порога автоматического увеличения, увеличивается только этот файл. Это значение по умолчанию.
Если файл в файловой группе удовлетворяет требованиям порога автоматического увеличения, все файлы в файловой группе увеличиваются.
Устанавливает свойство «только для чтения» или «чтение и запись» для файловой группы.
READ_ONLY | READONLY — определяет, что файловая группа доступна только для чтения. Изменение ее объектов запрещено. Первичную файловую группу перевести в состояние только для чтения нельзя. Чтобы изменить это состояние, необходимо обладать монопольным доступом к базе данных. Дополнительные сведения см. в описании предложения SINGLE_USER.
Поскольку база данных находится в состоянии только для чтения, невозможно производить изменения данных:
Ключевое слово READONLY будет удалено в будущей версии MicrosoftSQL Server. Избегайте использования ключевого слова READONLY в новых разработках и запланируйте изменение приложений, которые сейчас его используют. Вместо него используйте READ_ONLY.
READ_WRITE | READWRITE — определяет, что файловая группа доступна для чтения и записи. Разрешено изменять объекты в файловой группе. Чтобы изменить это состояние, необходимо обладать монопольным доступом к базе данных. Дополнительные сведения см. в описании предложения SINGLE_USER.
Remarks
Чтобы уменьшить размер базы данных, используйте предложение DBCC SHRINKDATABASE.
Добавить или удалить файл во время выполнения инструкции BACKUP невозможно.
Для каждой базы данных может указываться не более 32 767 файлов и 32 767 файловых групп.
Примеры
A. Добавление файла к базе данных
В следующем примере к базе данных AdventureWorks2012 добавляется файл данных размером 5 МБ.
Б. Добавление файловой группы с двумя файлами к базе данных
В следующем примере в базе данных AdventureWorks2012 создается файловая группа Test1FG1 и добавляется два файла по 5 МБ в эту файловую группу.
В. Удаление файла из базы данных
В следующем примере удаляется один из файлов, добавленных в примере Б.
Г. Изменение файла
В следующем примере увеличивается размер одного из файлов, добавленных в примере Б. Инструкция ALTER DATABASE с командой MODIFY FILE может только увеличить размер файла, поэтому, если нужно уменьшить размер файла, следует использовать DBCC SHRINKFILE.
В этом примере показано уменьшение размера файла данных до 100 МБ и определение размера при этом объеме.