Переименование базы данных
В этой статье описывается переименование пользовательской базы данных в SQL Server, Базе данных SQL Azure или Управляемом экземпляре SQL Azure с помощью SQL Server Management Studio (SSMS) или Transact-SQL (T-SQL). Имя базы данных может содержать все символы, соответствующие правилам для идентификаторов.
Чтобы переименовать базу данных в Azure Synapse Analytics или Parallel Data Warehouse, используйте инструкцию RENAME (Transact-SQL).
ограничения
- Системные базы данных нельзя переименовать.
- Имя базы данных нельзя изменить, пока другие пользователи обращаются к базе данных.
- Используйте Монитор активности SQL Server Management Studio, чтобы найти другие подключения к базе данных, и закройте их. Дополнительные сведения см. в разделе Открытие Монитора активности в SQL Server Management Studio (SSMS).
- В SQL Server можно установить для базы данных однопользовательский режим, чтобы закрыть все открытые соединения. Дополнительные сведения см. в разделе Установка однопользовательского режима базы данных.
- В базе данных SQL Azure необходимо убедиться, что отсутствуют открытые подключения других пользователей к базе данных, которую требуется переименовать.
Разрешения
Необходимо разрешение ALTER в базе данных.
Использование среды SQL Server Management Studio
Чтобы переименовать базу данных SQL Server или SQL Azure с помощью SQL Server Management Studio, выполните следующие действия.
- В среде SQL Server Management Studio выберите элемент Обозреватель объектов. Чтобы открыть обозреватель объектов, нажмите клавишу F8. Либо в главном меню щелкните Вид и выберите пункт Обозреватель объектов:
- В обозревателе объектов подключитесь к экземпляру SQL Server и разверните его.
- Убедитесь, что отсутствуют открытые подключения к базе данных. Если вы используете SQL Server, вы можете задать для базы данных однопользовательский режим , чтобы закрыть все открытые подключения и запретить другим пользователям подключаться во время изменения имени базы данных.
- В обозревателе объектов разверните узел Базы данных, щелкните правой кнопкой мыши базу данных, которую необходимо переименовать, а затем выберите Переименовать.
- Введите новое имя базы данных и нажмите кнопку ОК.
- Если эта база данных была базой данных по умолчанию, см. раздел Сброс базы данных по умолчанию после переименования.
- Обновите список баз данных в обозревателе объектов.
Использование Transact-SQL
Переименование базы данных SQL Server путем перевода ее в однопользовательский режим
Выполните следующие действия, чтобы переименовать базу данных SQL Server с помощью T-SQL в SQL Server Management Studio, включая действия по переводу базы данных в однопользовательский режим и возврат ее в многопользовательский режим после переименования.
- Подключитесь к базе данных master для своего экземпляра.
- Откройте окно запроса.
- Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В этом примере имя базы данных MyTestDatabase изменяется на MyTestDatabaseCopy .
Чтобы быстро получить монопольный доступ, в примере кода используется параметр завершения WITH ROLLBACK IMMEDIATE . Произойдет откат всех незавершенных транзакций, а любые другие соединения с базой данных MyTestDatabase будут немедленно разорваны.
USE master; GO ALTER DATABASE MyTestDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO ALTER DATABASE MyTestDatabase MODIFY NAME = MyTestDatabaseCopy; GO ALTER DATABASE MyTestDatabaseCopy SET MULTI_USER; GO- Кроме того, если эта база данных была базой данных по умолчанию, см. раздел Сброс базы данных по умолчанию после переименования.
Переименование базы данных SQL Azure
Выполните следующие действия, чтобы переименовать базу данных SQL Azure с помощью T-SQL в SQL Server Management Studio.
- Подключитесь к базе данных master для своего экземпляра.
- Откройте окно запроса.
- Убедитесь, что больше никто не использует эту базу данных.
- Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В этом примере имя базы данных MyTestDatabase изменяется на MyTestDatabaseCopy .
ALTER DATABASE MyTestDatabase MODIFY NAME = MyTestDatabaseCopy;Резервное копирование после переименования базы данных
После переименования базы данных в SQL Server выполните резервное копирование базы данных master . В Базе данных SQL Azure это не требуется при автоматическом резервном копировании.
Сброс базы данных по умолчанию после переименования
Если вы переименовываете базу данных, которая была задана в качестве базы данных по умолчанию для имени входа SQL Server, может возникнуть ошибка 4064, Cannot open user default database . Используйте следующую команду, чтобы установить переименованную базу данных в качестве базы данных по умолчанию:
USE [master] GO ALTER LOGIN [login] WITH DEFAULT_DATABASE=[new-database-name]; GOДалее
- ALTER DATABASE (Transact-SQL)
- Идентификаторы баз данных
Как переименовать базу данных sql
MS SQL Server
В СУБД MS SQL для переименования объектов текущей базы данных (таблицы, индекса, столбца) используется оператор sp_rename. Для изменения имени таблицы используется следующий синтаксис оператора sp_rename:sp_rename ‘old_table_name’, ‘new_table_name’
MySQL Server
СУБД MySQL для переименования таблиц используется оператор ALTER TABLE. Синтаксис оператора в данном случае имеет вид:Переименовать таблицу tbl_product в tbl_prod
MS SQL:
sp_rename ‘tbl_product’, ‘tbl_prod’;MySQL:
ALTER TABLE tbl_product RENAME bl_prod;RENAME (Transact-SQL)
Переименовывает созданную пользователем таблицу в Azure Synapse Analytics. Переименовывает созданную пользователем таблицу, столбец в созданной пользователем таблице или базе данных в Система платформы аналитики (PDW).
Сведения в этой статье относятся только к Azure Synapse Analytics и Analytics Platform System (PDW):
- Чтобы переименовать базу данных в SQL Server, используйте хранимую процедуру sp_renamedb.
- Чтобы переименовать базу данных в службе базы данных SQL Azure, используйте инструкцию ALTER DATABASE (база данных SQL Azure).
- Поддерживается переименование изолированных выделенных пулов SQL (прежнее название — хранилище данных SQL). Переименование выделенного пула SQL в рабочих областях Azure Synapse Analytics в настоящее время не поддерживается.
- Этот синтаксис не поддерживается бессерверным пулом SQL в Azure Synapse Analytics.
Синтаксис
-- Syntax for Azure Synapse Analytics -- Rename a table. RENAME OBJECT [::] [ [ database_name . [schema_name ] ] . ] | [schema_name . ] ] table_name TO new_table_name [;]-- Syntax for Analytics Platform System (PDW) -- Rename a table RENAME OBJECT [::] [ [ database_name . [ schema_name ] . ] | [ schema_name . ] ] table_name TO new_table_name [;] -- Rename a database RENAME DATABASE [::] database_name TO new_database_name [;] -- Rename a column RENAME OBJECT [::] [ [ database_name . [schema_name ] ] . ] | [schema_name . ] ] table_name COLUMN column_name TO new_column_name [;]Аргументы
RENAME OBJECT [::] [ [database_name . [ schema_name ] . ] | [ schema_name . ] ] table_name TO new_table_name
Область применения: Azure Synapse Analytics, Analytics Platform System (PDW)
Изменение имени определяемой пользователем таблицы. Указание таблицы для переименования с именем, состоящим из одной, двух или трех частей. Указание имени_новой_таблицы, состоящего из одной части.
RENAME DATABASE [::] [ database_name TO new_database_name
Область применения: Analytics Platform System (PDW)
Измените имя пользовательской базы данных с имени_базы_данных на новое_имя_базы_данных. Недопустимо переименование базы данных в следующие зарезервированные имена Analytics Platform System (PDW):
- master
- model
- msdb
- tempdb
- pdwtempdb1
- pdwtempdb2
- DWConfiguration
- DWDiagnostics
- DWQueue
RENAME OBJECT [::] [ [database_name . [ schema_name ] . ] | [ schema_name . ] ]table_name COLUMN column_name TO new_column_name
Область применения: Analytics Platform System (PDW)
Изменение имени столбца в таблице.
Разрешения
Для выполнения этой команды требуется следующее разрешение:
Ограничения
Невозможно переименовать внешние таблицы, индексы и представления
Вы не можете переименовать внешние таблицы, индексы и представления. Вместо переименования можно удалить внешнюю таблицу, индекс или представление и затем создать этот объект повторно с новым именем.
Невозможно переименовать используемую таблицу
Вы не можете переименовать таблицу или базу данных во время использования. Для переименования таблицы требуется монопольная блокировка таблицы. Если таблица используется, может потребоваться завершить сеансы, которые используют таблицу. Для завершения сеанса можно использовать команду KILL. Используйте инструкцию KILL осторожно, так как при завершении сеанса для всей незафиксированной работы будет выполнен откат. Сеансы в Azure Synapse Analytics имеют префикс «SID». Префикс «SID» и номер сеанса необходимо указать при вызове команды KILL. В этом примере мы получаем список активных или неактивных сеансов и затем завершаем сеанс «SID1234».
Ограничения переименования столбцов
Вы не можете переименовать столбец, используемый для распределения таблицы. Кроме того, невозможно переименовывать столбцы во внешней или временной таблице.
Представления не обновляются
При переименовании базы данных все представления, в которых используется предыдущее имя базы данных, станут недействительными. Это поведение относится к представлениям как внутри, так и вне базы данных. Например, при переименовании базы данных Sales представления, содержащие SELECT * FROM Sales.dbo.table1 , станут недействительными. Чтобы устранить эту проблему, старайтесь не использовать имена из трех частей в представлениях или обновите представления так, чтобы в них использовалось новое имя базы данных.
При переименовании таблицы обновления имени таблицы в представлениях не происходит. Все представления внутри или вне базы данных, которые ссылаются на предыдущее имя таблицы, станут недействительными. Чтобы устранить эту проблему, обновите представления так, чтобы в них использовалось новое имя базы данных.
При переименовании столбца обновление представлений для их ссылки на это новое имя столбца не выполняется. Представления продолжат отображать старое имя столбца до выполнения инструкции ALTER VIEW. В некоторых случаях представления могут стать недействительными, в результате чего потребуется удалить их и создать заново.
Блокировка
Для переименования таблицы необходима совмещаемая блокировка для объекта базы данных, совмещаемая блокировка для объекта СХЕМЫ и монопольная блокировка таблицы.
Примеры
A. Переименование базы данных
Область применения: только Analytics Platform System (PDW)
В этом примере мы переименовываем пользовательскую базу данных AdWorks в AdWorks2.
-- Rename the user defined database AdWorks RENAME DATABASE AdWorks to AdWorks2;При переименовании таблицы все объекты и свойства, связанные с этой таблицей, обновляются, так чтобы в них использовалось новое имя таблицы. Например, обновляются определения таблиц, индексы, ограничения и разрешения. Представления не обновляются.
Б. Переименование таблицы
Область применения: Azure Synapse Analytics, Analytics Platform System (PDW)
В этом примере мы переименовываем таблицу Customer в Customer1.
-- Rename the customer table RENAME OBJECT Customer TO Customer1; RENAME OBJECT mydb.dbo.Customer TO Customer1;При переименовании таблицы все объекты и свойства, связанные с этой таблицей, обновляются, так чтобы в них использовалось новое имя таблицы. Например, обновляются определения таблиц, индексы, ограничения и разрешения. Представления не обновляются.
В. Перемещение таблицы в другую схему
Область применения: Azure Synapse Analytics, Analytics Platform System (PDW)
Если вы хотите переместить объект в другую схему, используйте инструкцию ALTER SCHEMA. Например, следующая инструкция перемещает элемент таблицы из схемы product в схему dbo.
ALTER SCHEMA dbo TRANSFER OBJECT::product.item;Г. Завершение сеансов перед переименованием таблицы
Область применения: Azure Synapse Analytics, Analytics Platform System (PDW)
Переименовать таблицу, которая сейчас используется, невозможно. Для переименования таблицы требуется монопольная блокировка таблицы. Если таблица используется, может потребоваться завершить сеансы, которые используют таблицу. Для завершения сеанса можно использовать команду KILL. Используйте инструкцию KILL осторожно, так как при завершении сеанса для всей незафиксированной работы будет выполнен откат. Сеансы в Azure Synapse Analytics имеют префикс «SID». Префикс SID и номер сеанса потребуется указать при вызове команды KILL. В этом примере мы получаем список активных или неактивных сеансов и затем завершаем сеанс «SID1234».
-- View a list of the current sessions SELECT session_id, login_name, status FROM sys.dm_pdw_exec_sessions WHERE status='Active' OR status='Idle'; -- Terminate a session using the session_id. KILL 'SID1234';Д. Переименование столбца
Область применения: Analytics Platform System (PDW)
В этом примере столбец FName таблицы Customer переименовывается в FirstName.
-- Rename the Fname column of the customer table RENAME OBJECT::Customer COLUMN FName TO FirstName; RENAME OBJECT mydb.dbo.Customer COLUMN FName TO FirstName;Дальнейшие действия
- sp_renamedb
- CREATE DATABASE (база данных SQL Azure)
Форум пользователей MySQL
This statement was added in MySQL 5.1.7 but was found to be dangerous and was removed in MySQL 5.1.23.
И как теперь базы переименовывать?
#2 16.03.2011 13:33:07
rgbeast Администратор Откуда: Москва Зарегистрирован: 21.01.2007 Сообщений: 3877
Re: как переименовать базу данных?
Остановить MySQL переименовать каталог, запустить MySQL. Лучше не переимновывать, а сохранить старое название и создать символическую ссылку.
#3 16.03.2011 19:29:47
LazY _cмельчак Зарегистрирован: 02.04.2007 Сообщений: 845
Re: как переименовать базу данных?
Понятно..
Я так и не понял, почему они эту возможность убрали. Что за идиотизм..#4 17.03.2011 01:26:05
paulus Администратор Зарегистрирован: 22.01.2007 Сообщений: 6756
Re: как переименовать базу данных?
Каталоги переименовывать опасно. Например, с innodb_file_per_table это
гарантирует, что таблички не подцепятся. И именно поэтому rename database
выкинули — это опасная операция.#5 17.03.2011 16:43:41
LazY _cмельчак Зарегистрирован: 02.04.2007 Сообщений: 845
Re: как переименовать базу данных?
Я бы понял, если бы они именно поэтому RENAME DATABASE исправили, а не выкинули
#6 17.03.2011 21:40:02
paulus Администратор Зарегистрирован: 22.01.2007 Сообщений: 6756
Re: как переименовать базу данных?
Ммм.. Миш, ну как тут объяснить. Пусть у тебя в руках есть циркулярная пила
большого диаметра. Она большая, тяжелая и крутится быстро. Аналогом RENAME
DATABASE в этом примере будет тяжелый маховик, который приделывается к
лезвию для того, чтобы снизить нагрузку на двигатель, когда ты вдруг начинаешь
пилить толстый бетонный столб. Но, если ты когда-нибудь держал маховик в ру-
ках, ты знаешь, что один неудачный поворот — и эта штука движется совсем не
туда, куда ты хочешь. А если это насажено на циркулярную пилу, оно тебе в
лучшем случае обрезает ноги, а в худшем — голову. И правильное решение тут
не доработать конструкцию маховика, а оторвать его совсем#7 18.03.2011 13:38:10
LazY _cмельчак Зарегистрирован: 02.04.2007 Сообщений: 845
Re: как переименовать базу данных?
Зато бетонные столбы теперь не спилить, а только выкапывать
В общем, как я понял, порядок действий такой:
1) Каталог переименовать
2) UPDATE mysql.db SET Db = ‘newname’ WHERE Db = ‘oldname’;
Что еще? Ничего не забыл?
Да, это для муисамной базы. А как быть с InnoDB?
#8 18.03.2011 21:06:19
paulus Администратор Зарегистрирован: 22.01.2007 Сообщений: 6756
Re: как переименовать базу данных?
Брр, зачем же ты раскручиваешь циркулярку веревкой? Второй пункт — дикое
непотребное зло, срочно сотри егоmysqldump | mysql — единственный правильный способ переименовывать базы,
содержащие innodb. И mysqlhotcopy — если все таблички MyISAM.#9 18.03.2011 22:55:43
LazY _cмельчак Зарегистрирован: 02.04.2007 Сообщений: 845
Re: как переименовать базу данных?
Э, погоди. Мы щас именно о переименовании говорим.
mysqldump | mysql — это копирование.
Копирование отличается от переименования тем, что:1. Все выданные на старую базу права придется выдавать заново на новую
2. Если база больших размеров, то это займет дофига системных ресурсов вообще.
Так что, выходит, именно переименовать вообще никак нельзя?
