Удаление базы данных-получателя из группы доступности — SQL Server Always On
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
- Чтение занимает 2 мин
Область применения: SQL Server (все поддерживаемые версии)
В этом разделе описывается удаление базы данных-получателя из группы доступности AlwaysOn с помощью среды SQL Server Management Studio, Transact-SQL или PowerShell в SQL Server.
Требования и ограничения
- Эта задача поддерживается только на вторичных репликах. Необходимо подключиться к экземпляру сервера, размещающему вторичную реплику, из которой удаляется база данных.
Разрешения
Необходимо разрешение ALTER на базу данных.
Использование среды SQL Server Management Studio
Удаление базы данных-получателя из группы доступности
В обозревателе объектов подключитесь к экземпляру сервера, размещающему вторичную реплику, из которой требуется удалить одну или несколько баз данных-получателей, и разверните дерево сервера.
Разверните узел Высокий уровень доступности AlwaysOn и узел Группы доступности .
Выберите группу доступности и разверните узел Базы данных доступности .
Этот шаг зависит от того, удаляется несколько баз данных или только одна база данных.
Чтобы удалить несколько баз данных, используйте панель Подробности обозревателя объектов , чтобы просмотреть и выбрать базы данных, которые требуется удалить. Дополнительные сведения см. в разделе Использование раздела «Подробности обозревателя объектов» для мониторинга групп доступности (среда SQL Server Management Studio).
Чтобы удалить одну базу данных, выберите ее в обозревателе объектов или на панели Подробности обозревателя объектов .
Щелкните правой кнопкой мыши выбранную базу данных или базы данных и выберите в контекстном меню команду Удалить базу данных-получателя .
В диалоговом окне Удаление базы данных из группы доступности нажмите кнопку ОК, чтобы удалить все выбранные базы данных. Если все перечисленные базы данных удалять не нужно, нажмите кнопку Отмена.
Использование Transact-SQL
Удаление базы данных-получателя из группы доступности
Подключитесь к экземпляру сервера, на котором находится дополнительная реплика.
Используйте предложение SET HADR в инструкции ALTER DATABASE следующим образом:
ALTER DATABASE имя_базы_данных SET HADR OFF
где имя_базы_данных ― имя базы данных-получателя, удаляемой из группы доступности, к которой она относится.
В следующем примере локальная база данных-получатель MyDb2 удаляется из соответствующей группы доступности.
ALTER DATABASE MyDb2 SET HADR OFF; GO
Использование PowerShell
Удаление базы данных-получателя из группы доступности
Перейдите в каталог (cd) экземпляра сервера, на котором размещается вторичная реплика.
Используйте командлет Remove-SqlAvailabilityDatabase , указав имя базы данных доступности, которую требуется удалить из группы доступности. Когда установлено подключение к экземпляру сервера, на котором находится вторичная реплика, из группы доступности удаляется только локальная база данных-получатель.
Например, следующая команда удаляет базу данных-получатель
MyDb8
из вторичной реплики, размещенной на экземпляре сервераSecondaryComputer\Instance
. Синхронизация данных для удаленных баз данных-получателей прекращается. Эта команда не влияет на базу данных-источник и на любые другие базы данных-получатели.Remove-SqlAvailabilityDatabase ` -Path SQLSERVER:\Sql\SecondaryComputer\InstanceName\AvailabilityGroups\MyAg\AvailabilityDatabases\MyDb8
Примечание
Чтобы просмотреть синтаксис командлета, воспользуйтесь командлетом Get-Help в среде PowerShell SQL Server . Дополнительные сведения см. в разделе Get Help SQL Server PowerShell.
Настройка и использование поставщика SQL Server PowerShell
- Поставщик SQL Server PowerShell
Дальнейшие действия. После удаления базы данных-получателя из группы доступности
После удаления базы данных-получателя она перестает входить в группу доступности, кроме того, из группы доступности удаляются все сведения об этой базе данных-получателе. Удаленная база данных-получатель переводится в состояние RESTORING.
Совет
В течение некоторого времени после удаления базы данных-получателя можно перезапустить синхронизацию данных AlwaysOn в базе данных, повторно присоединив ее к группе доступности. Дополнительные сведения см. в статье Присоединение базы данных-получателя к группе доступности (SQL Server).
В этот момент поступить с удаленной базой данных-получателем можно следующим образом.
Если эта база данных-получатель больше не нужна, ее можно удалить.
Дополнительные сведения см. в разделе DROP DATABASE (Transact-SQL) или Удаление базы данных.
Если после удаления базы данных-получателя из группы доступности она еще может понадобиться, ее можно восстановить. Однако при восстановлении удаленной базы данных-получателя в режиме «в сети» окажутся две разные базы данных с одним именем. Необходимо обеспечить, чтобы клиенты могли получить доступ только к текущей базе данных-источнику.
Дополнительные сведения см. в разделе Восстановление базы данных без восстановления данных (Transact-SQL).
См. также:
Обзор групп доступности AlwaysOn SQL Server)
Удаление базы данных-источника из группы доступности (SQL Server)
Подготовка к работе | Основы реляционных баз данных
Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером
Если PostgreSQL запустить без аргументов, то она пытается подключиться к локальной базе данных, которая находится на той же машине. При этом программа подключается с именем, которое совпадает с именем текущего пользователя. Делает она это с помощью роли с этим же именем. Если PostgreSQL установили верно, то запуск в Linux, например, Ubuntu, негативно реагирует на отсутствие соответствующей роли:
psql psql: FATAL: role "tirion" does not exist
Эту проблему можно решить с помощью конструкции sudo -u postgres psql
, которую используют в терминале при подключении PostgreSQL.
У пользователя postgres есть максимальные права в СУБД. Если завладеть ими, можно все уничтожить. Поэтому приложения или пользователи никогда не создают базы данных от имени postgres и никогда не работают из-под этого пользователя
Придется постоянно использовать эту конструкцию
sudo -u postgres
для любых команд, которые связаны с СУБД. Если у вас MacOS, частьsudo -u postgres
использовать не нужно. После установки PostgreSQL автоматически конфигурируется для работы с вашим пользователем
В этом уроке разберем, как создать пользователя и базу данных в СУБД, чтобы psql
не выдавал ошибку и все данные были в безопасности. Так мы подготовим PostgreSQL к работе.
Создание пользователя в СУБД
Чтобы упростить работу по ходу курса, создадим роль с таким же именем, как и пользователь, из-под которого вы работаете. Выполните следующие действия:
Посмотрите имя вашего текущего пользователя:
whoami tirion
Создайте роль с таким же именем внутри PostgreSQL с помощью команды
createuser
. Ее нужно запускать от пользователяpostgres
, иначе она попробует соединиться с СУБД от имени текущего пользователя, которого там нет:# Флаг --createdb добавляет нашей роли возможность создавать базы данных # По умолчанию этой возможности нет sudo -u postgres createuser --createdb tirion # Чтобы удалить пользователя, можно воспользоваться командой: dropuser tirion
Теперь у нас есть роль в СУБД. Попробуем с ее помощью соединиться с PostgreSQL:
psql psql: FATAL: database "tirion" does not exist
Снова ошибка. Теперь psql
«ругается», что не выбрана база данных. Невозможно соединиться с СУБД, если не указать конкретную базу данных. Ее можно указать самостоятельно — передать один аргумент в psql
.
Мы уже знаем, что внутри PostgreSQL создана база postgres. Попробуем подключиться к ней:
psql postgres postgres=>
Соединение удалось. Теперь посмотрим список ролей. Для этого подходит команда \du
(Describe Users), которую нужно выполнить внутри REPL:
postgres=> \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} tirion | Create DB | {}
В СУБД создалось две роли: postgres
Создание базы данных в СУБД
Для экспериментов нам понадобится база данных и, возможно, даже не одна. Создадим базу с именем hexlet. Сделать это можно из командной строки командой createdb
:
# Опция --owner позволяет указать владельца создаваемой базы данных sudo -u postgres createdb --owner=tirion hexlet # Если запустить эту команду без аргументов, # то она попытается создать базу данных, # которая совпадает с именем вашего пользователя в системе createdb hexlet
Имя для базы данных выбирается произвольно и обычно совпадает с названием проекта, для которого она создается. Имена баз уникальны в рамках одной СУБД. Это значит, что повторный вызов createdb
с тем же именем приведет к ошибке.
После установки PostgreSQL создает несколько служебных баз данных, которые нужны для работы самой СУБД. Посмотрим их список:
# Посмотреть список баз данных psql -l # Неполный вывод List of databases Name | Owner | Encoding | Collate | Ctype | -----------+----------+----------+-------------+-------------+ pgadmin | pgadmin | UTF8 | en_US. UTF-8 | en_US.UTF-8 | tirion | tirion | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
Теперь у нас есть роль и база данных для экспериментов. Подключимся к этой базе данных:
psql hexlet hexlet=>
Созданную базу данных можно удалить командой dropdb
:
dropdb hexlet
Если удалили, не забудьте ее снова создать, так как она понадобится нам в дальнейшем.
Запускать команду dropdb
нужно с осторожностью. Удаление базы данных — необратимый процесс, так как базы невозможно восстановить без резервных копий. Чтобы избежать проблем: команда dropdb
не работает без аргументов — ей всегда нужно передавать имя базы.
Удалить базу данных можно только в том случае, если к ней никто не подключен — за исключением того, кто удаляет. Если есть другие клиенты, например psql или pgadmin4, то СУБД предупредит о невозможности выполнить команду.
dropdb hexlet dropdb: error: database removal failed: ERROR: database "hexlet" is being accessed by other users DETAIL: There is 1 other session using the database.
Как удалить базу данных в PostgreSQL
Когда база данных PostgreSQL больше не нужна, мы можем удалить/удалить ее с помощью SQL SHELL, командной строки, и pgAdmin . Для этого PostgreSQL предоставляет пару команд/операторов, таких как DROP DATABASE и dropdb . Итак, давайте узнаем, как удалить/удалить конкретную базу данных в PostgreSQL.
Как удалить/удалить базу данных PostgreSQL с помощью SQL SHELL?
Команда DROP DATABASE может быть выполнена из SQL SHELL для удаления/удаления базы данных PostgreSQL . Оператор DROP DATABASE удаляет каталоги и каталоги, связанные с этой базой данных. Вот основной синтаксис оператора DROP DATABASE :
DROP DATABASE [IF EXISTS] dbname;
Давайте разберем приведенную выше команду шаг за шагом:
— DROP DATABASE — это команда для удаления определенной База данных PostgreSQL .
— если указанная база данных не существует, параметр IF EXISTS выдаст уведомление, а не ошибку.
— dbname — удаляемая база данных.
Давайте выполним команду «\l» , чтобы проверить список всех доступных баз данных:
Предположим, нам нужно удалить базу данных с именем «example» с помощью psql. Для этого мы выполним следующую команду:
УДАЛИТЬ БАЗУ ДАННЫХ, ЕСЛИ СУЩЕСТВУЕТ пример;
Приведенная выше команда будет выполнять следующие функции:
— testdb — имя базы данных.
— ЕСЛИ СУЩЕСТВУЕТ проверит существование примера.
— DROP DATABASE удалит данную базу данных, например.
Приведенный выше фрагмент подтвердил, что база данных с именем «пример» была успешно удалена.
Выполним команду DROP DATABASE еще раз, чтобы удалить ту же базу данных, например:
УДАЛИТЬ БАЗУ ДАННЫХ, ЕСЛИ СУЩЕСТВУЕТ пример;
На этот раз команда DROP DATABASE выдала уведомление о том, что база данных «example» не существует.
Как удалить/удалить базу данных PostgreSQL с помощью командной строки?
В Postgres команду dropdb можно выполнить из командной строки (cmd), чтобы удалить любую конкретную базу данных. Команда dropdb будет иметь следующий синтаксис:
dropdb [параметр/опция] имя_базы_данных
Вот подробное объяснение приведенного выше фрагмента:
— dropdb — это команда, которая удаляет/удаляет базу данных.
— параметры/параметры — это аргументы командной строки, которые может принимать команда dropdb .
— dbname — имя удаляемой базы данных.
Ниже приведен список параметров, которые может принимать команда dropdb :
–help
Используется для получения справки по команде dropdb.
-if exists
Выдает уведомление, а не выдает ошибку, если данная база данных не существует.
-e
Используется для отображения команд, которые должны быть отправлены на сервер
-i
Перед удалением отображается запрос на проверку.
-V
Показывает версию dropdb.
-h
Используется для указания имени хоста для машины сервера.
-U
Используется для указания имени пользователя для подключения.
-p
Используется для указания порта, на котором сервер прослушивает соединения.
обслуживание db-=dbname
Для удаления этой конкретной базы данных требуется имя подключенной базы данных.
-w
Используйте параметр -w, если вы не хотите запрашивать пароль для dropdb .
-Ш
Используется для запроса пароля для команды dropdb.
Давайте выполним следующие шаги, чтобы удалить базу данных с именем «exampledb» с помощью команды dropdb :
Шаг 1: Доступ к Postgres
команда cd, за которой следует полный путь:
C:\Program Files\PostgreSQL\14\bin
Шаг 2: Выполните команду dropdb
Давайте выполним команду dropdb из командной строки, чтобы удалить базу данных с именем «exampledb»:
dropdb -U postgres exampledb
Когда вы выполните вышеупомянутую команду, она попросит вас ввести пароль. После того, как вы укажете соответствующий пароль, команда dropdb удалит базу данных с именем «exampledb», подключенную к пользователю с именем postgres.
Как удалить/удалить базу данных PostgreSQL с помощью pgAdmin?
Вы можете удалить базу данных PostgreSQL с помощью графического интерфейса, например pgAdmin. Выполните приведенные ниже шаги, чтобы узнать, как удалить базу данных Postgres с помощью pgAdmin:
Шаг 1: выберите базу данных
Откройте pgAdmin и выберите базу данных, которую вы хотите удалить:
Шаг 2: удалите базу данных
Щелкните правой кнопкой мыши нужную базу данных и выберите опцию «Удалить/удалить», чтобы удалить конкретную базу данных:
Шаг 3: Подтверждение
Уведомление о подтверждении появится после того, как вы нажмете на опцию «Удалить/удалить»:
Нажатие на кнопку «Да» приведет к удалению выбранной базы данных.
Заключение
В PostgreSQL , DROP DATABASE и dropdb команды используются для удаления определенной базы данных. Вы можете выполнить команду DROP DATABASE из psql, а команду dropdb из командной строки, чтобы удалить/удалить базу данных. Более того, базу данных PostgreSQL можно удалить с помощью пгАдмин . В этой статье объяснялись различные способы удаления базы данных PostgreSQL.
Как удалить базу данных postgresql в Linux
спросил
Изменено 2 года, 8 месяцев назад
Просмотрено 19 тысяч раз
Я пытаюсь изучить postgresql в Linux, используя интерфейс командной строки.
Некоторое время назад я добавил несколько баз данных, следуя некоторым руководствам (с тех пор я забыл все, чему научился).
Теперь я хочу удалить эти базы данных.
Я предположил, что должен делать это с помощью psql, интерфейса командной строки для postgresql.
В следующем выводе командной строки вы можете увидеть, что я пытался сделать, и что ничего из этого не увенчалось успехом.
psql (9.5.6) Введите "помощь" для помощи. postgres=#\список Список баз данных Имя | Владелец | Кодирование | Разобрать | Тип | Права доступа -----------+----------+-----------+-------------+-- --------------------------+----------------------- постгрес | постгрес | UTF8 | en_CA.UTF-8 | en_CA.UTF-8 | шаблон0 | постгрес | UTF8 | en_CA.UTF-8 | en_CA.UTF-8 | =с/постгрес + | | | | | postgres=CTc/postgres шаблон1 | постгрес | UTF8 | en_CA.UTF-8 | en_CA.UTF-8 | =с/постгрес + | | | | | postgres=CTc/postgres тестовая база данных | постгрес | UTF8 | en_CA.UTF-8 | en_CA.UTF-8 | (4 ряда) postgres=# dropdb template1 postgres-#\список Список баз данных Имя | Владелец | Кодирование | Разобрать | Тип | Права доступа -----------+----------+-----------+-------------+-- --------------------------+----------------------- постгрес | постгрес | UTF8 | en_CA. UTF-8 | en_CA.UTF-8 | шаблон0 | постгрес | UTF8 | en_CA.UTF-8 | en_CA.UTF-8 | =с/постгрес + | | | | | postgres=CTc/postgres шаблон1 | постгрес | UTF8 | en_CA.UTF-8 | en_CA.UTF-8 | =с/постгрес + | | | | | postgres=CTc/postgres тестовая база данных | постгрес | UTF8 | en_CA.UTF-8 | en_CA.UTF-8 | (4 ряда) postgres-# УДАЛИТЬ БАЗУ ДАННЫХ шаблон1 postgres-#\список Список баз данных Имя | Владелец | Кодирование | Разобрать | Тип | Права доступа -----------+----------+-----------+-------------+-- --------------------------+----------------------- постгрес | постгрес | UTF8 | en_CA.UTF-8 | en_CA.UTF-8 | шаблон0 | постгрес | UTF8 | en_CA.UTF-8 | en_CA.UTF-8 | =с/постгрес + | | | | | postgres=CTc/postgres шаблон1 | постгрес | UTF8 | en_CA.UTF-8 | en_CA.UTF-8 | =с/постгрес + | | | | | postgres=CTc/postgres тестовая база данных | постгрес | UTF8 | en_CA.UTF-8 | en_CA.UTF-8 | (4 ряда)
- Linux
- база данных
- postgresql
- psql
1
Да,
DROP DATABASE template1;
и не забудьте сделать резервную копию вашей базы данных:
.