Изменить свойства файла в котором хранится база данных можно с помощью процедуры

Обновлено: 06.07.2024

При перестроении системных баз данных master, model, msdb и tempdb эти базы данных удаляются и создаются повторно в исходном расположении. Если в инструкции перестроения заданы новые параметры сортировки, системные базы данных создаются с этими параметрами. Все пользовательские изменения этих баз данных будут потеряны. Например, в базе данных master могут содержаться пользовательские объекты, в базе данных msdb — запланированные задания, а в базе данных model — изменения исходных параметров баз данных.

Предварительные требования

Перед перестроением системных баз данных выполните следующие задачи, чтобы иметь возможность восстановить текущие параметры системных баз данных.

  • Зарегистрируйте все значения конфигурации на уровне сервера.КопироватьSELECT * FROM sys.configurations;
  • Зарегистрируйте все пакеты обновления и исправления, примененные к экземпляру SQL Server , и текущие параметры сортировки. Эти обновления необходимо применить после перестроения системных баз данных.

Перестроение системных баз данных

Следующая процедура перестраивает системные базы данных master, model, msdb и tempdb. Нельзя выбрать, какие системные базы данных будут перестраиваться. Для кластеризованных экземпляров эту процедуру необходимо выполнить на активном узле, а ресурс SQL Server в соответствующей группе приложений кластера перед ее выполнением должен быть переведен в состояние «вне сети».

Эта процедура не перестраивает базу данных resource. См. раздел «Процедура перестроения базы данных resource» ниже.

Перестроение системных баз данных для экземпляра SQL Server:

Задачи, выполняемые после перестроения

После перестроения базы данных, возможно, придется выполнить следующие дополнительные задачи.

  • Восстановить наиболее поздние полные резервные копии баз данных master, model и msdb. Дополнительные сведения см. в статье Резервное копирование и восстановление системных баз данных (SQL Server) .Important
    Если изменены параметры сортировки сервера, не следует восстанавливать системные базы данных. В противном случае новые параметры сортировки будут заменены старыми.Если резервная копия недоступна или не является копией текущей базы данных, повторно создайте все отсутствующие записи.Например, повторно создайте все недостающие записи для пользовательских баз данных, устройств резервного копирования, имен входа SQL Server , конечных точек и так далее. Лучшим способом повторного создания записей является запуск создавшего их исходного скрипта.

Рекомендуется защитить применяемые скрипты, чтобы предотвратить их изменение неавторизированными пользователями.

Перестроение базы данных Resource

Приведенная ниже процедура перестраивает системную базу данных resource. После перестроения базы данных resource все исправления и пакеты обновления теряются, поэтому их следует применить заново.

Перестроение базы данных resource

Создание новой базы данных msdb

Если база данных msdb повреждена и нет резервной копии базы данных msdb , можно создать новую базу данных msdb с помощью скрипта instmsdb .

Когда база данных msdb создается заново скриптом instmsdb , удаляется вся информация, которая хранилась в msdb , то есть задания, оповещения, операторы, планы обслуживания, журналы резервных копий, параметры системы управления на основе политик, компоненты Database Mail, хранилище данных о производительности и т. д.

  • Остановите все службы, подключающиеся к компоненту Компонент Database Engine, включая агент SQL Server , службы Службы SSRS, службы Службы SSISи все приложения, использующие SQL Server как хранилище данных.
  • Запустите SQL Server из командной строки с помощью команды: NET START MSSQLSERVER /T3608Дополнительные сведения см. в статье Запуск, остановка, приостановка, возобновление и перезапуск ядра СУБД, агента SQL Server и обозревателя SQL Server .
  • В другом окне командной строки отключите базу данных msdb , выполнив следующую команду, которая заменяет <имя_сервера> экземпляром SQL Server: SQLCMD -E -S<servername> -dmaster -Q"EXEC sp_detach_db msdb"
  • С помощью проводника Windows переименуйте файлы базы данных msdb . По умолчанию они находятся в папке DATA соответствующего экземпляра SQL Server .
  • С помощью диспетчера конфигурации SQL Server остановите и перезапустите службу компонента Компонент Database Engine , как обычно.
  • В окне командной строки подключитесь к серверу SQL Server и выполните следующую команду: SQLCMD -E -S<servername> -i"C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Install\instmsdb.sql" -o"C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Install\instmsdb.out"Замените <имя_сервера> экземпляром компонента Компонент Database Engine. Укажите путь к экземпляру SQL Serverв файловой системе.
  • Откройте в Блокноте файл instmsdb.out и проверьте выходные данные на наличие ошибок.
  • Примените заново все пакеты обновления и пакеты исправлений, которые были установлены на экземпляре.
  • Создайте заново пользовательское содержимое базы данных msdb , в том числе задания, оповещения и т. д.
  • Создайте резервную копию базы данных msdb .

Устранение ошибок перестроения

Ошибки синтаксиса и ошибки времени выполнения отображаются в окне командной строки. Проверьте инструкцию установки на наличие следующих синтаксических ошибок:

При создании файлов данных и файлов журнала их можно сконфигурировать с помощью инструкции Transact-SQL CREATE DATABASE, а чтобы изменить их конфигурацию используется инструкция ALTER DATABASE. Эти файлы также можно сконфигурировать на странице Свойства базы данных (Database Properties) в SSMS (вызывается из контекстного меню при щелчке ПКМ по имени БД).





Параметры конфигурирования файлов приведены в таблице:

Логическое имя файла.

Полный путь к файлу и имя файла.

Размер файла. Если размер первичного файла не указан, ядро БД будет использовать размер первичного файла эталонной БД (model). Если же не указан размер вторичного файла или файла журнала, то ядро БД создаст файлы размером 1 Мб.

Максимальный размер файла. Если максимальный размер не указан или выбран параметр Неограниченный рост размера файла (UNLIMITED), то максимальный размер ограничен лишь объемом жесткого диска. В SQL Server 2005 максимальный размер файла журнала равен 2 терабайтам, а максимальный размер файла данных - 16 терабайт.

Определяет величину автоматического увеличения размера файла (в кило-, мега-, гига- или терабайтах либо в процентах от фактического размера файла). Если указано значение 0, файл не будет увеличиваться.

Рекомендуется создавать файлы БД настолько большими, насколько это возможно, исходя из максимального объема данных, которые будут храниться в БД. Это позволяет предусмотреть возможность роста БД при ее эксплуатации. Создание больших файлов позволяет избежать фрагментации файлов и повышает производительность БД. Чаще всего можно разрешить автоматическое увеличение размера файла данных. Нужно лишь ограничить его максимальным значением, чтобы оставить свободное дисковое пространство. Размещение файловых групп на разных дисках также помогает избежать физической фрагментации файлов по мере их роста.

Пример 1. Создание БД с несколькими файлами и файловыми группами с явным указанием значений для всех свойств файла.


Добавить, удалить и изменить свойства файла можно с помощью инструкции ALTER DATABASE.

Пример 2. Добавление в БД с именем Projects нового файла.


Общие рекомендации для обеспечения максимальной производительности файлов данных и файлов журнала:

· Во избежание конфликтов доступа к диску не размещать файлы данных на одном диске с файлами операционной системы.

· Размещать файлы журнала транзакций и файлы данных на разных дисках. Это обеспечивает максимальную производительность за счет уменьшения конфликтов доступа к дискам между файлами данных и файлами транзакций.

· По возможности размещать БД tempdb на отдельном диске (для промышленных приложений рекомендуется использовать несколько дисков, соответствующих системе RAID 10 или RAID 5). В средах с интенсивным использованием БД tempdb при размещении этой БД на отдельном диске повышается производительность, так как тогда операции с tempdb выполняются параллельно с операциями БД.

1.4. Выполнение некоторых служебных операций с БД

1.4.1. Увеличение размера базы данных


1.4.2. Уменьшение размера базы данных





Примечание. В большинстве случаев настройку автоматического уменьшения БД при помощи параметра AUTO_SHRINK использовать не рекомендуется.

1.4.3. Перенос файлов БД


1.4.4. Переименование БД



1.4.5. Удаление БД



1.5. Технологии шифрования информации в таблицах БД

Пример.







Примечание 1. В этом примере для простоты все данные возвращаются с типом данных nvarchar(100). В реальных ситуациях может потребоваться выполнить дополнительные преобразования типов данных, чтобы вернуть расшифрованную информацию в виде значений с типами данных int, money и т. п. Для этого используются функции преобразования типов данных CAST, CONVERT (см. конспект лекций по дисциплине «Базы данных» за 5 семестр).

Примечание 2. По вопросам использования технологий шифрования данных см. также с. 880-885 книги П. Нильсена (имеется в электронном виде).

1.6. Использование DDL-триггеров для решения административных задач

(См. также конспект лекций по дисциплине «Базы данных» за 5 семестр).

MS SQL Server имеет большой набор средств администрирования (например, Activity Monitor, системные хранимые процедуры), требующих от администратора БД постоянно просматривать результаты работы этих средств. Однако часто у администратора БД имеются другие виды работ, и он не может непрерывно выполнять мониторинг работы сервера. В этой ситуации удобно иметь средства администрирования, которые бы «сами» оповещали администратора о выполнении на сервере определенных действий.

Хранимая процедура MySQL представляет собой подпрограмму, хранящуюся в базе данных. Она содержит имя, список параметров и операторы SQL . Все популярные системы управления базами данных поддерживают хранимые процедуры. Они были введены в MySQL 5 .

Существует два вида подпрограмм: хранимые процедуры и функции, возвращающие значения, которые используются в других операторах SQL ( например, pi() ).

Основное отличие заключается в том, что функции могут использоваться, как любое другое выражение в операторах SQL , а хранимые процедуры должны вызываться с помощью оператора CALL .

Хранимые процедуры MySQL-основные преимущества

  • Хранимые процедуры MySQL работают быстро. Преимущество сервера MySQL заключается в том, что он использует кэширование, а также заранее заданные операторы. Основной прирост скорости дает сокращение сетевого трафика. Если есть повторяющиеся задачи, которые требуют проверки, обработки циклов, нескольких операторов, и при этом не требуют взаимодействия с пользователем, это можно реализовать с помощью одного вызова процедуры, которая хранится на сервере;
  • MySQL хранимые процедуры являются универсальными. При написании хранимой процедуры на SQL она будет работать на любой платформе, которая использует MySQL . В этом преимущество SQL над другими языками, такими как Java , C или PHP ;
  • Исходный код хранимых процедур всегда доступен в базе данных. Это эффективная практика связать данные с процессами, которые их обрабатывают.

Создание процедуры в MySQL

По умолчанию процедура связана с базой данных, используемой в данный момент. Чтобы связать процедуру с конкретной базой данных, укажите ее создании хранимой процедуры: имя_базы_данных.имя_хранимой_процедуры . Полный синтаксис:

Перед тем, как осуществить MySQL вызов хранимой процедуры , необходимо получить определенную информацию.

Проверка версии MySQL

Следующая команда выводит версию MySQL :

Проверка привилегий текущего пользователя

Для команд CREATE PROCEDURE и CREATE FUNCTION требуются привилегия пользователя CREATE ROUTINE . Также может потребоваться привилегия SUPER , это зависит от значения DEFINER , которое будет описано далее. Если включен бинарный лог для CREATE FUNCTION , то может потребоваться привилегия SUPER . По умолчанию MySQL автоматически предоставляет для создателя подпрограммы привилегии ALTER ROUTINE и EXECUTE . Такое поведение можно изменить, отключив системную переменную automatic_sp_privileges :

Выбор базы данных

Перед тем создать процедуру MySQL , нужно выбрать базу данных. Давайте просмотрим список баз данных и выберем одну из них:

Выбор разделителя

Пример процедуры в MySQL

Инструменты для создания процедур в MySQL

Можно написать процедуру с помощью инструмента командной строки MySQL или с помощью MySQL Workbench .

Инструмент командной строки MySQL

Выберите из меню « Пуск » « Клиент командной строки MySQL »:

Инструмент командной строки MySQL

Вы увидите на экране следующее окно:

Инструмент командной строки MySQL - 2

После авторизации можно будет получить доступ к командной строке MySQL :


Теперь можно писать и запускать собственные процедуры, смотрите следующий пример:

MySQL Workbench (5.3 CE)

Выберите в меню « Пуск » « MySQL Workbench »:

MySQL Workbench (5.3 CE) - 2

После этого вы увидите на экране следующее окно:


Введите свои учетные данные:


После авторизации на экране появится новое окно, и с помощью панели просмотра объектов можно будет выбрать базу данных:


После этого кликните правой кнопкой мыши по пункту « Routines » и на экране появится новое всплывающее окно:


После этого на экране появится следующее окно, в котором можно создать собственную процедуру MySQL :


После того, как напишете процедуру в MySQL , нажмите кнопку « Apply » и на экране появится следующее окно:


В этом окне можно просмотреть скрипт и применить его в базе данных:


Теперь нажмите на кнопку « Finish » и запустите процедуру:


Вызов процедуры в MySQL

Оператор CALL используется для вызова процедуры, которая хранится в базе данных. Синтаксис следующий:

Хранимые процедуры MySQL , которые не принимают аргументов, могут вызываться без скобок. Поэтому CALL job_data() равносильно CALL job_data .

Давайте выполним процедуру:

SHOW CREATE PROCEDURE

Этот оператор является расширением MySQL . Он возвращает точную строку, которая может быть использована, чтобы воссоздать указанную хранимую процедуру. Синтаксис следующий:

Давайте осуществим MySQL вызов хранимой процедуры:

MySQL: блоки характеристик

В синтаксисе оператора CREATE PROCEDURE допустимо использование блоков, которые описывают характеристики процедуры. Блоки указываются после скобок, но перед телом процедуры. Эти блоки являются необязательными.

COMMENT

LANGUAGE

Характеристика LANGUAGE указывает на то, что тело процедуры написано на SQL .

NOT DETERMINISTIC

CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA

NO SQL означает, что процедура не содержит операторов SQL .

MODIFIES SQL DATA-означает , что подпрограмма содержит операторы, которые могут записывать данные ( например, INSERT или DELETE ).

Значение SQL SECURITY может быть определено либо как SQL SECURITY DEFINER , либо как SQL SECURITY INVOKER . Оно указывает, выполняется ли подпрограмма с использованием привилегий аккаунта, указанного в условии DEFINER , или аккаунта пользователя, который осуществляют MySQL вызов хранимой процедуры. Этот аккаунт должен иметь разрешение на доступ к базе данных, с которой связана подпрограмма. Значение по умолчанию DEFINER . Пользователь, который запускает процедуру, должен иметь привилегию EXECUTE , если процедура выполняется в контексте безопасности DEFINER .

Все перечисленные блоки характеристик имеют значения по умолчанию. Следующие два оператора дают одинаковый результат:

то же самое, что:

Прежде, чем перейти к параметрам MySQL , рассмотрим несколько составных операторов MySQL .

MySQL: составные операторы

Составной оператор представляет собой блок, который может содержать другие блоки: объявления переменных, обработчиков состояний и курсоров, конструкции управления потоками данных, циклы и условные тесты. В версии MySQL 5.6 существуют следующие составные операторы:

В этом разделе мы рассмотрим первые четыре оператора, связанные с параметрами оператора CREATE PROCEDURE .

Он используется, когда нужно разместить в пределах подпрограммы ( например, хранимой процедуры MySQL , функции, триггера или события ) более одного оператора. Синтаксис следующий:

список_операторов: один или несколько операторов, завершающихся точкой с запятой ( ; ). Сам по себе список операторов не является обязательным, поэтому пустой оператор BEGIN END является действительным.

Метки операторов

При применении меток применяются следующие правила:

  • метка_начала должна закрываться двоеточием;
  • метка_начала может использоваться без метки_конца. Если метка_конца присутствует, она должна принадлежать тому же блоку, что и метка_начала;
  • метка_конца не может использоваться без метки_начала;
  • метки, принадлежащие к одному вложенному уровню, должны быть разделены;
  • метки могут иметь длину не более 16 символов.

Оператор DECLARE

Для объявлений существуют следующие правила:

  • Объявления курсоров должны размещаться перед объявлениями обработчиков;
  • Объявления переменных и условий должны размещаться перед объявлениями курсоров или обработчиков.

Переменные в хранимых программах

Хранимые программы используют оператор DECLARE для определения локальных переменных. Процедуры и функции могут при объявлении принимать параметры, которые обмениваются значениями между подпрограммой и вызывающим ее агентом.

Чтобы предоставить значение для переменной по умолчанию, используется блок DEFAULT . Значение может быть задано как выражение; это не обязательно должна быть константа. Если блок DEFAULT отсутствует, начальное значение равно NULL .

Пример: Локальные переменные

Теперь выполните процедуру:

Пример: пользовательские переменные

В хранимых процедурах MySQL обращение к пользовательским переменным происходит через символ амперсанда (@) перед именем пользовательской переменной ( например, @x и @y ). В следующем примере показано использование пользовательских переменных внутри хранимой процедуры:

MySQL: параметры процедуры

Ниже приводится синтаксис CREATE PROCEDURE для параметров:

В процедуре каждый параметр по умолчанию является параметром IN . Чтобы изменить, это используйте перед именем параметра ключевое слово OUT или INOUT .

Процедура MySQL: пример параметра IN

Процедура MySQL: пример параметра OUT

Процедура MySQL: Пример параметра INOUT

Теперь проверяем количество сотрудников мужского и женского пола в указанной таблице:

MySQL: Операторы управления потоком

MySQL поддерживает конструкции для управления потоком данных в хранимых программах IF , CASE , ITERATE , LEAVE , LOOP , WHILE и REPEAT . Также поддерживается RETURN внутри хранимых процедур MySQL .

MySQL: Оператор IF

Оператор IF реализует базовую конструкцию условия, он должен заканчиваться точкой с запятой. Существует также функция IF(), которая отличается от оператора IF . Вот синтаксис оператора IF :

Если условие выполняется, выполняются операторы соответствующих блоков THEN или ELSE IF .

Если условие не удовлетворяется, выполняются операторы блока ELSE . Каждый оператор состоит из одного или нескольких операторов SQL ; пустые операторы не допускается.

В следующем примере мы передаем через параметр IN user_id , чтобы получить имя пользователя. В рамках процедуры мы использовали операторы IF ELSE IF и ELSE , чтобы получить имя пользователя из множества идентификаторов пользователей. Имя пользователя будет храниться в параметре user_name INOUT :

Осуществите MySQL вызов хранимой процедуры:

MySQL: Оператор CASE

Оператор CASE используется для создания внутри хранимой процедуры MySQL сложной условной конструкции. Оператор CASE не может содержать блок ELSE NULL и должен закрываться END CASE , а не END . Синтаксис:

Пояснение: первый синтаксис

Если значения не равны, тогда выполняется список_операторов блока ELSE , ( если таковой имеется ).

Пояснение: второй синтаксис

Каждое выражение блока условие_поиска оценивается , пока одно из них не будет истинно. В этот момент выполняется список_операторов соответствующего блока THEN .

Если ни одно из выражений условие_поиска не истинно, тогда выполняется список_операторов блока ELSE , если таковой имеется. Каждый список_операторов состоит из одного или нескольких операторов SQL ; пустой список_операторов не допускается.

Подсчитаем количество сотрудников, удовлетворяющих следующим условиям:

  • MIN_SALARY > 10000
  • MIN_SALARY < 10000
  • MIN_SALARY = 10000

Для этого мы используем следующую процедуру ( MySQL хранимой процедуры пример создан в MySQL Workbench 5.2 CE ):

В приведенной выше процедуре мы передаем переменную salary через параметр IN . Есть оператор CASE с двумя блоками WHEN и ELSE , который проверяет условия и возвращает значение счетчика в no_employees. Выполним процедуру через командную строку MySQL .

Количество сотрудников, чья зарплата превышает 10000:

Количество сотрудников, чья зарплата меньше, чем 10000:

Количество сотрудников, чья зарплата равна 10000:

MySQL: оператор ITERATE

MySQL: оператор LEAVE

Используется для выхода из конструкции управления потоком, который имеет заданную метку. Если метка задана для самого последнего блока хранимой процедуры MySQL , LEAVE выходит из программы.

MySQL: оператор LOOP

Используется, чтобы задать повторное выполнение списка операторов. Синтаксис следующий:

список_операторов состоит из одного или нескольких операторов, каждый из которых заканчивается точкой с запятой ( ; ). Операторы внутри цикла повторяются до тех пор, пока цикл не будет завершен. Обычно для выхода из конструкции цикла используется LEAVE .

Также может использоваться оператор RETURN . Оператор LOOP может иметь метки.

Теперь выполните MySQL хранимую процедуру:

MySQL: оператор REPEAT

REPEAT исполняет операторы до тех пор, пока выполняется условие. Условие проверяется каждый раз, когда достигается конец оператора:

Оператор REPEAT может иметь метки.

Теперь выполните хранимую процедуру MySQL :

MySQL: оператор RETURN

Оператор RETURN завершает выполнение хранимой процедуры MySQL и возвращает агенту, вызвавшему функцию, значение expr . В хранимой функции должен содержаться, по крайней мере, один оператор RETURN . Если функция имеет несколько точек выхода, она может содержать больше одного RETURN . Синтаксис следующий:

Этот оператор не используется в хранимых процедурах или триггерах. Вместо него применяется оператор LEAVE .

MySQL: оператор WHILE

Оператор WHILE выполняет операторы до тех пор, пока выполняется условие. Условие проверяется каждый раз, когда достигается конец цикла. Каждый оператор заканчивается точкой с запятой ( ; ). Синтаксис следующий:

Оператор WHILE может иметь метки.

Теперь выполните MySQL хранимую процедуру:

MySQL: ALTER PROCEDURE

Используется для изменения характеристик хранимой процедуры MySQL . В операторе ALTER PROCEDURE может быть указано более одного значения для изменения. Но с его помощью нельзя изменить параметры или тело хранимой процедуры. Чтобы внести такие изменения, необходимо удалить и заново создать процедуру с помощью операторов DROP PROCEDURE и CREATE PROCEDURE . Синтаксис следующий:

Можно проверить результат с помощью команды SHOW CREATE PROCEDURE , которую мы рассматривали ранее.

MySQL: DROP PROCEDURE

Используется для сброса в MySQL вызванной хранимой процедуры или функции. После чего указанная подпрограмма удаляется с сервера. Для этого нужно иметь привилегию ALTER ROUTINE . Если системная переменная automatic_sp_privileges включена, эта привилегия и привилегия EXECUTE автоматически предоставляются во время создания подпрограммы и сбрасываются во время удаления подпрограммы:

Можно проверить результат с помощью команды SHOW CREATE PROCEDURE , которую мы рассматривали ранее.

MySQL: курсоры

Курсор представляет собой структуру управления, которая позволяет обрабатывать записи в базе данных. Курсоры используются для обработки отдельных строк, возвращаемых в ответ на запросы системой базы данных. Курсор включает строки в набор результатов, чтобы последовательно их обработать.

В процедурах SQL курсор позволяет определить результирующий набор ( набор строк данных ) и выполнить сложную логику построчно. Используя те же механизмы, процедура SQL также может определить набор результатов и вернуть его непосредственно вызывающему агенту или в клиентское приложение.

MySQL хранимые процедуры поддерживают курсоры. Синтаксис тот же, что и для встроенного SQL . Курсоры имеют следующие свойства:

  • Asensitive: сервер может или не может создавать копию таблицы результатов;
  • Read only: не обновляемые;
  • Nonscrollable: обработка может производиться только в одном направлении, при этом пропуск строк не допускается.

Чтобы использовать курсор в процедурах MySQL , нужно сделать следующее:

  • Объявить курсор;
  • Открыть курсор;
  • Извлечь данные в переменные;
  • Закрыть курсор.

Объявление курсора

Следующий оператор объявляет курсор и связывает его с оператором SELECT . Он извлекает строки, которые будут перемещаться с помощью курсора:

Открытие курсора

После объявления мы открываем объявленный курсор:

Выборка данных в переменные

FETCH выбирает строки для оператора SELECT , связанного с указанным курсором ( который должен быть открыт ), и перемещает указатель курсора. Если строка существует, то выбранные столбцы сохраняются в указанных переменных. Число столбцов извлекаемых SELECT должно соответствовать количеству выходных переменных, указанных в FETCH :

Закрытие курсора

Этот оператор закрывает ранее открытый курсор. Если курсор не открыт, возникает ошибка:

Теперь выполните процедуру:

Управление доступом для встроенных программ

Для хранимых процедур MySQL и представлений с помощью привилегий задаются правила использования и выполнения. Эти привилегии управляются атрибутом DEFINER , и, если таковая имеется, характеристикой SQL SECURITY .

Все процедуры, функции, триггеры и представления могут иметь атрибут DEFINER , который указывает на аккаунт MySQL . Если атрибут DEFINER в определении отсутствует, учетной записью по умолчанию является пользователь, который создает объект.

MySQL использует следующие правила для управления атрибутом объекта DEFINER :

Пожалуйста, оставляйте ваши отзывы по текущей теме статьи. Мы крайне благодарны вам за ваши комментарии, подписки, лайки, отклики, дизлайки!

Дайте знать, что вы думаете по этой теме в комментариях. Мы очень благодарим вас за ваши комментарии, лайки, подписки, отклики, дизлайки!

Мне нужно переименовать файл базы данных. Возможно ли это через среду SQL Server Management Studio?

FYI, у меня нет разрешений на базовое поле.

Edit: мне также нужно изменить местоположение файла.

Да, вы можете сделать это, если у вас есть право отсоединить и повторно присоединить базу данных, и если вы найдете способ физически переименовать файлы на диске:

1) выдает эти команды

(как DGGenuine указал в комментарии: ваш-новый-файл-на диске.МДФ должно быть полное имя файла, включая путь на диске)

2) отсоединить базу данных

3) переименуйте файлы на диске

4) повторно подключите базу данных еще раз

  1. возьмите полную резервную копию базы данных.
  2. брось его.
  3. восстановить его, указав разные имена файлов и пути в диалоговом окне восстановления.

вы можете сделать это без разрешений на базовую файловую систему, поскольку вы не перемещаете физический файл, вы просите SQL Server создать новый файл от вашего имени и скопировать данные в него из резервной копии.

чтобы задать новые имена файлов и пути, перейдите на вкладку Параметры диалог восстановления. Вы даже получаете диалоговое окно просмотра папок, в котором отображается представление SQL Server о файловой системе, а не ваше.

минимальные разрешения, необходимые для этой процедуры:

  • db_backupoperator роль в базе данных
  • dbcreator роль сервера

это изменит только внутреннее определение имени файла SQL Server, оно не изменит фактическое имя файла в файловой системе ОС.

вы можете использовать sp_detach_db, чтобы отключить базу данных. найдите файлы и переименуйте их, переместите их. затем используйте sp_attach_db для их повторного подключения из нового места. вот как я это делаю.

с наилучшими пожеланиями, Дон!--1-->

да и нет. Вы можете изменить имя файла объекта базы данных:

это обновит Главный каталог, так что при первом следующем событии открытия базы данных будет просмотрено новое имя файла. Но в Transact-SQL нет прямого способа переименования/перемещения файла.

вы можете использовать xp_cmdshell для переименования файла или развернуть сборку CLR с включенным EXTERNAL_ACCESS, которая может выполнять операцию переименования/перемещения файла.

запустите это в SSMS в текстовом режиме, чтобы получить скрипт T-SQL и команды DOS, которые переименуют все ваши.файлы ndf. Предполагается, что вы хотите, чтобы ваши файлы назывались так же, как ваши файловые группы минус префикс 'FG_', который мне нравится использовать в моих файловых группах.

будьте осторожны при использовании опции переименовать из контекстного меню которые появляются при щелчке правой кнопкой мыши по базе данных в Management Studio. Этот параметр не изменяет имена файлов базы данных. Изменение логических имен файлов для файлов данных и журналов вы также можете использовать интерфейс Management Studio, но, к сожалению, иногда он не работает.

давайте сделаем это правильно. он должен работать всегда.

enter image description here

  1. отключить база данных: Используя Management Studio, щелкните правой кнопкой мыши базу данных > перейдите в "задачи" > "отсоединить", нажмите кнопку ОК, чтобы отсоединить базу данных (Примечание: БД не может быть использован для отсоединения)
  2. переименовать физические файлы: после отсоединения базы данных Физические файлы разблокированы, и вы можете переименовать их с помощью Проводника Windows:

присоединение базы данных с новым именем: для этого используйте T SQL:

использовать [master] СОЗДАННАЯ БАЗА ДАННЫХ [SqlAndMe] ON (FILENAME = N’C:\. \NewName - . МДФ’), (FILENAME = N’C:\. \NewName_log - . ЛДФ’) ДЛЯ ATTACH

переименовать логические имена файлов: выполните этот T SQL:

использовать [NewName] Изменить базу данных [NewName] Изменить файл (NAME=N'Oldname’, NEWNAME=N'Newname’) Изменить базу данных [NewName] Изменить файл (NAME=N'Oldname_log’, NEWNAME=N'Newname_log’) Выберите имя, параметр physical_name Из [NewName].системный.database_files

Это должно сработать!

вот пример кода для ответа marc_s:

после переименования моего теста базы данных, чтобы TestSimple, я хотел переименовать его файлы. Для файла журнала работало следующее. (Для основного файла имя = часть стало Test, и Я заменил путь, который я хотел для этого файла.)

вышеизложенное изменило, какие файлы ищет SSMS, но на самом деле не переименовывает файлы. Поэтому мне пришлось сделать это через Windows.

после переименования базы данных, если мы хотим изменить данные и имя файла журнала также, мы могли бы использовать следующий шаг:

Читайте также: