USE (Transact-SQL)
Изменяет контекст базы данных на указанный моментальный снимок базы данных или базы данных.
Синтаксис
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Аргументы
database_name
Имя базы данных или моментального снимка базы данных, на который переключается контекст пользователя. Имена баз данных и моментальных снимков базы данных должны соответствовать правилам построения идентификаторов.
В База данных SQL Azure параметр базы данных может ссылаться только на текущую базу данных. Если указана база данных, отличная от текущей, инструкция USE не переключается между базами данных и возвращается код ошибки 40508. Для смены базы данных следует непосредственно подключиться к базе данных. В верхней части этой страницы инструкция USE помечена как неприменимая к базе данных SQL, поскольку даже если инструкция USE входит в состав пакета, она не выполняет никаких действий.
Замечания
При подключении имени входа SQL Server к SQL Server имя входа автоматически подключается к базе данных по умолчанию и получает контекст безопасности пользователя базы данных. Если для входа в SQL Server не создан пользователь базы данных, имя входа подключается как гостевой. Если пользователь базы данных не имеет разрешения CONNECT на базу данных, инструкция USE завершится ошибкой. Если с именем входа не была связана никакая база данных по умолчанию, то для него базой данных по умолчанию будет установлена база данных master.
Инструкция USE выполняется как на стадии компиляции, так и на стадии выполнения и вступает в силу немедленно. Иными словами, инструкции, которые содержатся в пакете после инструкции USE, будут выполнены в контексте указанной базы данных.
Разрешения
Необходимо разрешение CONNECT на целевую базу данных.
Примеры
В следующем примере выполняется смена контекста на базу данных AdventureWorks2022 .
USE AdventureWorks2022; GO
Руководство по тех. обслуживанию
В большинстве случаев база данных «Первой Формы» имеет название «D10task», но может называться и по-другому (информацию о названии базы данных можно уточнить в тех. поддержке).
В данном разделе представлено описание структуры файла create_crl.sql.
1. Процедура включения доверия к БД. Нужно, чтобы процедуры вообще работали, это «доверие» сервера к БД
alter database [ D10Task ] set trustworthy on
2. Проверка наличия пользователя D10TaskOwner в БД.
if not exists ( SELECT name FROM master . dbo . syslogins WHERE name = N ‘D10TaskOwner’) —
begin
create login D10TaskOwner with password = ‘sg4fdsviavFDxcCHFSD$@’, cHECK_EXPIRATION = OFF , cHECK_POLICY = OFF
end
EXEC dbo . sp_changedbowner @loginame = N ‘D10TaskOwner’, @map = false — если пользователя «D10TaskOwner» нет , то система назначает его владельцем БД .
go
3. Пользователю, назначенному владельцем БД, выдаются права на использование исполняемых файлов *.dll
use [master]
go
GRANT EXTERNAL ACCESS ASSEMBLY TO D10TaskOwner
4. Создается привязка объектов ASSEMBLY к сборкам StoredProcedures.dll и StoredProcedures.XmlSerializers.dll
use [ D10Task ]
go
create ASSEMBLY StoredProcedures — генерируется сборка с именем StoredProcedures . dll ( параметр assembly_name ). В данном наименование сборки StoredProcedures . Обратите внимание , что данное имя должно быть уникальным в БД .
FROM ‘C:\Program Files (x86)\TCSQL\StoredProcedures.dll’ — локальный путь сборки исполняемых файлов *. dll . Путь нужно указывать тот , куда были загружены *. dll файлы .
WITH PERMISSION_SET = EXTERNAL_ACCESS ; — сборка StoredProceduress . dll получает доступ к внешним ресурсам
GO
create ASSEMBLY [ StoredProcedures . XmlSerializers ] — генерируется сборка с именем StoredProcedures . dll ( параметр assembly_name ). В данном наименование сборки StoredProcedures . Обратите внимание , что данное имя должно быть уникальным в БД .
FROM ‘C:\Program Files (x86)\TCSQL\StoredProcedures.XmlSerializers.dll’
WITH PERMISSION_SET = SAFE ; — генерируется сборка с именем StoredProcedures . XmlSerializers . dll ограниченный доступ к внешним ресурсам . Путь нужно указывать тот , куда были загружены *. dll файлы .
GO
На данном шаге производится проверка наличия хранимой процедуры для отправки почты почты пользователя «D10TaskOwner».
use [ master ]
go
if not exists ( select id from sysobjects where name = ‘xp_smtp_sendmail’) — проверяем существует ли хранимая процедура для отправки почты «xp_smtp_sendmail»
begin
exec sp_addextendedproc ‘xp_smtp_sendmail’, ‘C:\Program Files (x86)\TCSQL\xpsmtp80.dll’ — в случае , если необходимая хранимая процедура («xp_smtp_sendmail») не обнаружена , то система регистрирует в Microsoft SQL server даннуюд хранимую процедуру для последующего использования
grant execute on xp_smtp_sendmail to public — вызов хранимой процедуры «xp_smtp_sendmail»
end
go
5. Вызов хранимых процедур, описанных в разделе Хранимые процедуры «Первой Формы» . При этом источником указываются объекты ASSEMBLY, описанные в пункте 4.
use [ D10Task ]
go
CREATE PROCEDURE tc_ws_newTask (
@UserID int , @Task nvarchar (4000), @OrderedTime datetime = NULL ,
@Category int , @Comment nvarchar (4000) = », @extParamStr nvarchar (4000) = »,
@perfID int = NULL , @priorityID int = 1, @D3TaskID int = 0, @ParentID int = 0,
@UserNick nvarchar (20) = », @remind bit = 0, @PropagateSubscribers bit = 1)
AS
EXTERNAL NAME StoredProcedures . StoredProcedures . NewTask
В данном разделе хранимая процедура tc_ws_newTask представлена для примера, файл create_crl.sql содержит полный список процедур. С назначением и описанием параметров хранимых процедур более подробно можно ознакомиться в разделе Хранимые процедуры «Первой Формы» .
База данных master
База данных master записывает все сведения на уровне системы SQL Server. в том числе общие для всего экземпляра метаданные, такие как сведения об учетных записях входа, конечных точках и связанных серверах, а также параметры конфигурации системы. В SQL Server системные объекты больше не хранятся в базе данных master . Вместо этого они хранятся в базе данных ресурсов. Кроме того, главной базой данных является база данных, которая записывает существование всех других баз данных и расположение этих файлов базы данных и записывает сведения об инициализации для SQL Server. Поэтому SQL Server не может запускаться, если база данных master недоступна.
Для отдельных баз данных и эластичных пулов Базы данных SQL Azure используются только базы данных master и tempdb. Дополнительные сведения см. в разделе Что являет собою сервер Базы данных SQL Azure?. Описание базы данных tempdb в контексте Базы данных SQL Azure см. в разделе База данных tempdb в базе данных SQL. Для Управляемого экземпляра SQL Azure применяются все системные базы данных. См. дополнительные сведения об Управляемом экземпляре Базы данных SQL Azure.
Физические свойства базы данных master
Исходные конфигурационные значения файлов данных и файлов журнала базы данных master для SQL Server и Управляемого экземпляра SQL Azure приведены в следующей таблице. Размеры этих файлов могут немного отличаться для разных выпусков SQL Server.
Файл | Логическое имя | Физическое имя | Увеличение размера файлов |
---|---|---|---|
Первичные данные | master | master.mdf | Автоувеличение на 10 % до заполнения диска. |
Журнал | mastlog | mastlog.ldf | Автоувеличение на 10 % до максимального размера в 2 ТБ. |
Сведения о перемещении файлов данных и журнала базы данных master см. в разделе Перемещение системных баз данных.
При работе с сервером Базы данных SQL Azure пользователь не может управлять размером базы данных master.
Параметры базы данных
Значения по умолчанию для всех параметров базы данных master для SQL Server и Управляемого экземпляра SQL Azure и сведения о том, можно ли их изменять, приведены в следующей таблице. Чтобы просмотреть текущие настройки этих параметров, используйте представление каталога sys.databases .
При работе с отдельными базами данных и эластичными пулами Базы данных SQL Azure пользователь не может управлять этими параметрами базы данных.
Параметр базы данных | Значение по умолчанию | Можно ли изменить |
---|---|---|
ALLOW_SNAPSHOT_ISOLATION | DNS | No |
ANSI_NULL_DEFAULT | ВЫКЛ. | Да |
ANSI_NULLS | ВЫКЛ. | Да |
ANSI_PADDING | ВЫКЛ. | Да |
ANSI_WARNINGS | ВЫКЛ. | Да |
ARITHABORT | ВЫКЛ. | Да |
AUTO_CLOSE | ВЫКЛ. | No |
AUTO_CREATE_STATISTICS | DNS | Да |
AUTO_SHRINK | ВЫКЛ. | No |
AUTO_UPDATE_STATISTICS | DNS | Да |
AUTO_UPDATE_STATISTICS_ASYNC | ВЫКЛ. | Да |
CHANGE_TRACKING | ВЫКЛ. | No |
CONCAT_NULL_YIELDS_NULL | ВЫКЛ. | Да |
CURSOR_CLOSE_ON_COMMIT | ВЫКЛ. | Да |
CURSOR_DEFAULT | Глобальные | Да |
Параметры доступности базы данных | ONLINE |
Описание этих параметров базы данных см. в разделе ALTER DATABASE (Transact-SQL).
Ограничения
База данных master не поддерживает следующие операции:
- добавление файлов или файловых групп;
- Резервное копирование, для базы данных master может быть выполнено только полное резервное копирование.
- Изменение параметров сортировки. Параметрами сортировки по умолчанию являются параметры сортировки сервера.
- Изменение владельца базы данных. Владельцемmaster является sa.
- создание полнотекстового каталога или полнотекстового индекса;
- создание триггеров для системных таблиц базы данных;
- Удаление базы данных.
- Удаление пользователя guest из базы данных.
- Включение системы отслеживания измененных данных.
- Участие в зеркальном отображении базы данных.
- Удаление первичной файловой группы, первичного файла данных или файла журнала.
- Переименование базы данных или первичной файловой группы.
- Перевод базы данных в режим «вне сети» (OFFLINE).
- Перевод базы данных или первичной файловой группы в режим READ_ONLY.
Рекомендации
При работе с базой данных master учитывайте следующие рекомендации:
- всегда имейте в наличии актуальную резервную копию базы данных master ;
- после выполнения следующих операций как можно быстрее создавайте резервную копию базы данных master :
- создание, изменение или удаление базы данных;
- изменение значений параметров конфигурации сервера или базы данных;
- изменение или удаление учетных записей входа;
Что делать, если база данных master становится непригодна к использованию
Если база данных master непригодна к использованию, ее можно вернуть в нормальное состояние следующими способами.
- Восстановить базу данных master на основе актуальной резервной копии. Если экземпляр сервера удалось запустить, базу данных master можно восстановить из полной резервной копии. Дополнительные сведения см. в разделе «Восстановление базы данных master » (Transact-SQL)».
- Перестроить базу данных master с нуля. Если серьезный ущерб главного сервера не позволяет запускать SQL Server, необходимо перестроить главный образец. Дополнительные сведения см. в разделе Перестроение системных баз данных.
Внимание При перестроении базы данных master все системные базы данных также перестраиваются.
См. также
- Перестроение системных баз данных
- Системные базы данных
- sys.databases (Transact-SQL)
- sys.master_files (Transact-SQL)
- Перемещение файлов базы данных
SQL-Ex blog
Присоединение базы данных без файла журнала транзакций
Добавил Sergey Moiseenko on Суббота, 25 декабря. 2021
Что если вы перемещаете базу данных на новый сервер, отсоединяя (detach) и снова присоединяя файлы базы данных, и кто-то (конечно, не вы) потерял файл журнала? Что если требуется перевести старую базу данных в режим онлайн, но к вам пришел человек, у которого имеется только mdf файл? Можно все же присоединить базу данных в подобных случаях? Давайте это выясним.
Сейчас у нас имеются файлы mdf и ldf для базы данных ExampleDB.
Чтобы перейти к нашему тесту, давайте отсоединим базу данных в SSMS:
USE [master]
GO
EXEC master.dbo.sp_detach_db @dbname = N'ExampleDB'
GOТеперь мы можем выбрать наш файл ExampleDB_log.ldf в проводнике Windows и удалить его. Останется только mdf.
Давайте вернемся в SSMS, выполним щелчок правой кнопкой на папке Databases в браузере объектов и выберем “Attach…”:
Щелкнем кнопку Add в районе середины окна и выберем наш файл ExampleDB.mdf:
Присоединить здесь
Тут становится интересно. В нижней половине окна мы можем увидеть добавление файла ExampleDB_log.ldf. Можно отрегулировать ширину столбца, чтобы увидеть сообщение:
Звучит просто. Давайте нажмем ОК и посмотрим, сделает ли SQL Server то, что обещает:
Нет. Щелкнем ОК, чтобы вернуться к окну присоединения. Прокрутим вправо ниже “Databases to attach” и щелкнем Message, чтобы увидеть подробную информацию:
Щелкнем еще раз ОК, чтобы вернуться к окну Attach. Давайте заглянем под капот. Чтобы выяснить, что пытается выполнить SQL Server, щелкнем “Script” и выберем Script Action to New Query Window (вывести действие скрипта в новое окно запроса):
Это приведет нас к окну со следующим скриптом, который SQL Server использует для присоединения базы данных. Если выполнить скрипт, то мы получим ошибку того же типа, что и прежде:
USE [master]
GO
CREATE DATABASE [ExampleDB] ON
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\ExampleDB.mdf' ),
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\ExampleDB_log.ldf' )
FOR ATTACH
GO
Msg 5120, Level 16, State 101, Line 3
Невозможно открыть физический файл “C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\ExampleDB_log.ldf”. Ошибка операционной системы 2: “2 (Система не может найти указанный файл.)”.
Msg 1802, Level 16, State 7, Line 3
Операция CREATE DATABASE не удалась. Некоторые файлы с перечисленными именами не были созданы. Проверьте связанные ошибки.SQL Server пытается помочь, добавляя этот файл журнала. Что если мы удалим эту строку, и просто попытаемся создать базу с одним mdf:
USE [master]
GO
CREATE DATABASE [ExampleDB] ON
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\ExampleDB.mdf' )
FOR ATTACH
GOСбой активации файла. Возможно, имя физического файла “C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\ExampleDB_log.ldf” указано неверно.
Был создан новый файл журнала “C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\ExampleDB_log.ldf”.База данных присоединена успешно, и мы снова в деле. Вместо изменения скрипта мы могли также выполнить это с помощью GUI, удалив ldf ниже деталей базы данных и щелкнув ОК:
Вводящее в заблуждение сообщение?
SQL Server’у просто следовало бы сказать «Не найден» вместо сообщения «Будет создан новый пустой файл журнала». Процесс удаления строки файла журнала и присоединения также сработал. Я еще не уверен, что сообщение «Будет создан новый пустой файл журнала» является вводящим в заблуждение багом, и нет ли другого трюка, чтобы это сработало. Сообщите мне, если вы получили другой результат.
Обратные ссылки
Нет обратных ссылок
Комментарии
Показывать комментарии Как список | Древовидной структурой