Как переименовать базу данных SQL Server?

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

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

Создание базы данных:

Выберите любую базу данных в вашей системе управления SQL Server (SSMS) . Если у вас его нет, вы можете создать его, выполнив эту процедуру.

  1. Щелкните правой кнопкой мыши « База данных » в «Обозревателе объектов» и выберите «Новая база данных».
  2. На левой панели появится окно.
  3. выберите имя базы данных типа «Общие» в правой панели и нажмите «ОК» . База данных будет создана

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

Метод 1. Использование параметра переименования SSMS для переименования базы данных SQL Server.

Это самый простой способ переименовать базу данных. Для этого нужно поступить следующим образом.

  1. Щелкните правой кнопкой мыши имя базы данных в проводнике объектов.
  2. Выберите «переименовать» , введите имя базы данных и нажмите «Ввод».

Метод 2: использование SSMS для переименования базы данных SQL Server

Еще один простейший способ переименовать базу данных точно так же, как переименование любой папки в Windows. Для этого вам нужно продолжать так же. Щелкните базу данных, чтобы переименовать ее, как при переименовании папок Windows.

Метод 3: использование T-SQL для переименования базы данных SQL Server

Для SQL Server 2005, 2008, 2008R2, 2012, 2014, 2016 и 2017 эта команда работает. Выполните следующую инструкцию.

ALTER DATABASE [test] ИЗМЕНИТЬ ИМЯ = [test_cases]

Результатом будет «Установлено имя базы данных test_cases». Как видно на рисунке ниже.

Вы можете использовать команду T-SQL ниже, чтобы изменить имя базы данных, если вы используете SQL Server 2000. С SQL 2005, 2008, 2008R2, 2012, 2014, 2016 и 2017 это все еще работает, но на некотором этапе Microsoft утверждает, что он будет прекращен.

Метод 4: с помощью отсоединения и присоединения переименуйте SQL Server

С помощью функции отсоединения и присоединения SQL Server можно сначала удалить базу данных и присвоить базе данных другое имя при повторном подключении базы данных. Для этого можно использовать следующие команды T-SQL.

Отсоединение базы данных путем выполнения следующего кода:

Процедура EXEC sp_detach_db 'test', 'true'

Результат будет таким

Прикрепление базы данных.

EXEC sp_attach_db @dbname = N'test ', @ filename1 = N'C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ DATA \ test.mdf', @ filename2 = N'C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ DATA \ test_log.ldf ';

Результат будет:

Использование SSMS для отключения и повторного подключения баз данных

Этого также можно достичь с помощью SSMS, выполнив следующие действия.

  1. Щелкните правой кнопкой мыши базу данных, выберите «задача», затем нажмите «Отсоединить».
  2. Теперь нажмите «ОК»
  3. Теперь, чтобы присоединить базу данных, щелкните правой кнопкой мыши «Базы данных» в «Обозревателе объектов» и нажмите «Присоединить» . Появится экран, нажмите Добавить. Другое окно появится с именами баз данных в нем, как показано ниже, выберите «тест».
  4. Но мы хотим добавить его как измененное имя базы данных «test_cases», поэтому введите «test_case» в поле «Присоединить как» . Теперь вот так. Это переименует вашу базу данных.

Кроме того, мы обсудим ошибки, которые могут возникнуть при переименовании базы данных. Вам понадобится монопольный доступ к базе данных для переименования базы данных, что гарантирует, что база данных не имеет других подключений к базе данных. Но если это не так, это может привести к ошибкам, как показано ниже. Ошибка может возникнуть даже тогда, когда мы случайно откроем другое окно с тем же именем базы данных, которое необходимо переименовать.

Ошибки, возникающие при переименовании базы данных через SSMS и при выполнении запроса:

Эти нижеупомянутые две ошибки имеют два разных представления, потому что они возникают при переименовании базы данных с использованием двух разных методов. Ошибка 1 возникает при переименовании базы данных с помощью SSMS, а вторая ошибка возникает при переименовании базы данных с помощью запроса. Обе ошибки показывают одно и то же сообщение  «База данных не может быть заблокирована исключительно для выполнения операции», что означает, что ошибка возникает из-за того, что пользователю не предоставляется монопольный доступ к базе данных для переименования базы данных. Итак, чтобы переименовать базу данных, нам нужно установить базу данных в « однопользовательский режим ».

Ошибка 1: ошибка возникает при переименовании базы данных через SSMS

«Невозможно переименовать тест. (ObjectExplorer)

Дополнительная информация:

Ошибка переименования для теста базы данных (Microsoft.SqlServer.Smo)

Исключение при выполнении инструкции или пакета Transact-SQL.

(Microsoft.SqlServer.ConnectionInfo)

The database could not be exclusively locked to perform the operation. (Microsoft SQL Server, Error: 5030)”

Error 2: Error arises while renaming the database using query

 “Msg 5030, Level 16, State 2, Line 2. The database could not be exclusively locked to perform the operation.”

First of all, we will reproduce the above-mentioned error messages for understanding that in which scenario they arise and how to fix them.

  1. Right-click database name from “Object Explorer”
  2. Select rename and type database name and press “enter” if it works its fine but if it does not work and results in an error like this “Unable to rename (ObjectExplorer). The database could not be exclusively locked to perform the operation. (Microsoft SQL Server, Error: 5030)” as seen in the figure below, then you don’t have exclusive access to the database to rename a database.
  3. This error means that the SQL Server will not allow the database to be renamed until unless it is in “single-user mode”.
  4. So you will need exclusive access to the database to rename a database, to understand this open another query window and select database “test”
  5. Now in the first window try to execute the following code.
  6. ALTER DATABASE [test] MODIFY NAME = [test_cases]
  7. But this will prone to an error message like this: “Msg 5030, Level 16, State 2, Line 2. The database could not be exclusively locked to perform the operation.”

Solution:

This will configure the database to roll back any pending transactions and set it in “single user mode” and then back into “multi-user mode”.

  1. To fix this we need to close all other windows in which the same database name is being used or to set the database in “single user mode” by using the following commands.
  2. Alter database test set single_user with rollback immediate go EXEC sp_renamedb 'test', 'test_cases' go alter database test_cases set multi_user go
  3. The output will be like this: “Nonqualified transactions are being rolled back. Estimated rollback completion: 0%. Nonqualified transactions are being rolled back. Estimated rollback completion: 100%. The database name ‘test_cases’ has been set.”

Conclusion:

These are multiple ways to rename the database. If one way is not working for you. You can go to another one. One thing that should be kept in mind that changing database names using these ways just rename the database. The “physical files” still have the same names. As we can see in the figure below we have changed the database name from “test” to “test_cases” but in the physical location, it remained the same.

Итак, самый простой подход - использовать решение 4, если вы также хотите изменить имя файла. Вы должны сначала изменить имена физических файлов перед повторным подключением файлов, а затем указать переименованные файлы при повторном подключении.

Более того, помимо изменения имен баз данных, вам также необходимо проверить, есть ли в коде вашего приложения ссылки на имя базы данных. Это может быть как внутри SQL Server, так и вне SQL Server.