Перенос sql базы на другой диск: Перемещение пользовательских баз данных — SQL Server
Содержание
Перенос WSUS на другой диск — TechExperts.ru. Системная интеграция, обслуживание ИТ-инфраструктуры, слаботочные и инженерные системы.
Перенос WSUS на другой диск — TechExperts.ru. Системная интеграция, обслуживание ИТ-инфраструктуры, слаботочные и инженерные системы. | TechExperts.ru. Системная интеграция, обслуживание ИТ-инфраструктуры, слаботочные и инженерные системы.
15.04.2014
Если на диске с данными WSUS кончилось свободное место, или он вышел из строя, возникает необходимость перенести данные на другой диск или раздел.
Задача решается в два этапа: перенос файлов обновлений и перенос базы данных.
Часть 1. Перенос файлов и папок WSUS
Для решения этой задачи мы воспользуемся утилитой командной строки для управления WSUS — WSUSutil.exe.
- Создаем на новом диске/разделе папку для контента WSUS
- Открываем командную строку от имени администратора
- Переходим в каталог C:\Program Files\Update Services\Tools
- В нашем примере мы перенесем контент WSUS на диск W: в папку WSUS, лог процесса положим в файл log. txt на том же диске.
Выполняем команду: wsusutil.exe movecontent W:\WSUS W:\log.txt
В зависимости от размера папки WSUS, выполнение команды может занять продолжительное время (несколько часов). По результатам получаем сообщение «Content move has successfully finished.«:
- После этого мы можем удалить папки с контентом WSUS из прежнего размещения.
Если в вашем случае старый диск недоступен (вышел из строя), то команду следует выполнять с ключом -skipcopy, в нашем случае она выглядела бы вот так:
wsusutil.exe movecontent W:\WSUS W:\log.txt -skipcopy
Тогда WSUSutil только перепропишет пути хранения данных WSUS, и по окончанию выполнения команды скачает все необходимые обновления.
Что еще следует знать:
- диск, на который вы будете переносить данные, должен быть отформатирован в NTFS;
- WSUSutil не будет копировать те данные, которые уже есть в новом размещении;
- WSUSutil при переносе данных устанавливает те же NTFS-права, что были в источнике.
Подробнее об утилите управления WSUSutil вы можете почитать в статье Managing WSUS from the Command Line.
Часть 2. Перенос базы данных WSUS
- Если у вас не установлены средства управления сервером MS SQL, скачиваем MS SQL Server 2008 Management Studio Express (отсюда: http://www.microsoft.com/en-us/download/details.aspx?id=7593)
- Установливаем его. Следует заметить, что Microsoft унифицировала установку всех продуктов, связанных с MS SQL, поэтому инсталлятор консоли управления выглядит как инсталлятор полноценного сервера, и он отпугивает. Так что приведем небольшую шпаргалку, как поставить консоль управления:
На первом экране инсталлятора выбираем в меню слева Installation, справа — New SQL Server stand-alone installation or add features to an existing installation:
Доходим до этапа Installation Type, выбираем Perform a new installation of SQL Server 2008:
На этапе Feature Selection выбираем Management Tools — Basic:
Дальше процесс сводится к нажатию кнопки «Далее» и «Финиш».
- Открываем SQL Server Management Studio:
- Подключаемся к серверу \\.\pipe\mssql$microsoft##ssee\sql\query
- Находим в списке базу WSUS, выполняем Detach:
- В процессе отсоединения базы сбрасываем соединения, для чего проставляем галку Drop Connections:
- После отсоединения, переносим базу в новое место. У нас это, как упоминалось, диск W:, папка WSUS:
- И присоединяем базу обратно к серверу:
- Файлы указываем уже в новом расположении:
По окончании процедуры база получит новое расположение.
Перенос базы Postgresql на другой диск
Жил был сервис, и была у него база, и жила она в /var/lib/postgresql
на основном диске. И стала база занимать почти весь диск.
Ну и мы не лыком шиты, перенесем ее на отдельный диск.
План такой:
- Добавляем новый диск
- Монтируем его в какую-то папку
- Переносим туда БД
- Тут, возможно, мы захотим жить в новой директории — тогда поменяем конфиг.
- Прячем текущую папку
/var/lib/postgresql
- Монтируем наш диск вместо старой папки
Погнали 🚀
Готовим диск
Представим, что мы уже добавили диск в гипервизоре и видим его в выводе lsblk
:
[email protected]:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 99.2M 1 loop /snap/core/10908 loop1 7:1 0 99.2M 1 loop /snap/core/10859 sda 8:0 0 550G 0 disk ├─sda1 8:1 0 1M 0 part └─sda2 8:2 0 550G 0 part / sdb 8:16 0 1000G 0 disk <<<<------- THIS
Теперь разметим его с помощью parted
:
parted /dev/sdb mklabel gpt unit s mkpart primary ext4 0% 100% quit
Отформатируем раздел в ext4:
mkfs.ext /dev/sdb1
Монтируем диск
Сначала создадим левую папку, куда мы примонтируем новый раздел и будем перекидывать базу mkdir /tempdb
.
☝️ Хорошим тоном считается добавлять в /etc/fstab записи с UUID диска, а не /dev/sdb1.
Дальше посмотрим UUID нашего раздела. Даем команду blkid
:
/dev/sda2: UUID="b651b0ae-ef1d-11e9-be07-005056926860" TYPE="ext4" PARTUUID="1cd39f87-c0cd-f24d-baff-a39ff152be09" /dev/loop0: TYPE="squashfs" /dev/loop1: TYPE="squashfs" /dev/sdb1: UUID="fe561baa-f4de-4c52-bdff-cc496353a0a9" TYPE="ext4" PARTLABEL="primary" PARTUUID="4d0987b3-0010-434c-aac4-b42ba2a75582"
Вот же он: /dev/sdb1: UUID="fe561baa-f4de-4c52-bdff-cc496353a0a9"
Теперь добавляем строку в файл /etc/fstab
, можно руками через vi/nano, можно echo-м:
echo 'UUID=fe561baa-f4de-4c52-bdff-cc496353a0a9 /tempdb ext4 defaults 0 0' >> /etc/fstab
После этого делаем mount -a
. Раздел примонтирован в новую папку.
Перенос базы
Сначала остановим сервис systemctl stop postgresql
, чтобы во время копирования не записывались свежие данные.
Начинаем копировать данные:
rsync -arv /var/lib/postgres/ /tempdb
и ждем. У меня база на 500Гб копировалась два часа, но всё зависит от железа, самой базы, фазы луны и дня недели.
На этом этапе мы можем изменить путь к базе в конфигурационном файле postgresql и запустить сервис, всё будет работать. Для этого редактируем файл /etc/postgres/10/main/postgresql.conf
и меняем пусть к директории в строке:
data_directory = '/tempdb/10/main'
Но если мы не хотим менять папку в конфиге Постгреса, то нужно спрятать старую базу, ведь мы не хотим ее сразу удалять, вдруг понадобится.
mkdir /var/oldpostgres && mv /var/lib/postgres/ /var/oldpostgres
Теперь проверим, что мы не напутали с папками и /var/lib/postgresql на месте. Если нет — mkdir /var/lib/postgresql
.
Размонтируем диск umount /tembdb
, а затем заходим в nano /etc/fstab
и редактируем строку с подключением. Нам нужно изменить точку монтирования. Должно получиться так:
UUID=fe561baa-f4de-4c52-bdff-cc496353a0a9 /var/lib/postgresql ext4 defaults 0 0
☝️ Не забудь, что UUID у тебя будет свой уникальный
Делаем mount -a
и пробуем запустить сервис systemctl start postgresql
.
Проверяем
Как проверить? Ну например netstat -tulpn | grep 5432
, и если у вас постгрес на стандартном порту, должен быть вывод, вроде:
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 225199/postgres tcp6 0 0 :::5432 :::* LISTEN 225199/postgres
Можно попробовать зайди в базу sudo -u postgres psql
:
psql (10.16 (Ubuntu 10.16-0ubuntu0.18.04.1)) Type "help" for help. postgres=#
Если всё ок, можно удалить старую базу, чтобы освободить место в корне.
💡 Если вам нравятся мои посты, то подписывайтесь также:
- Новостной канал 📺
- Чат 🤘🏼
sql server — перемещение файлов SQL MDF и LDF
спросил
Изменено
2 года, 2 месяца назад
Просмотрено
498 раз
Есть ли способ переместить файл MDF и LDF с диска C на диск D? Я пытался запустить
ИЗМЕНИТЬ БАЗУ ДАННЫХ myDb SET SINGLE_USER С НЕМЕДЛЕННЫМ ОТКАТОМ
ИЗМЕНИТЬ БАЗУ ДАННЫХ myDb SET OFFLINE
ИЗМЕНИТЬ ФАЙЛ ИЗМЕНЕНИЯ БАЗЫ ДАННЫХ myDb (имя = myDb, имя файла = ‘D:\SQL Data Files\myDb. MDF’)
ИЗМЕНЕНИЕ БАЗЫ ДАННЫХ myDb SET ONLINE
ИЗМЕНИТЬ БАЗУ ДАННЫХ myDb SET MULTI_USER
, но мне приходится вручную перемещать файлы с диска C на D:\SQL Data Files
, что нормально, но есть ли способ перемещать файлы с помощью самого SQL-запроса, я не пытаюсь перемещать какие-либо системные базы данных, только базы данных что у меня на сервере.
- sql-сервер
- ssms
4
Есть ли способ перемещать файлы с помощью самого SQL-запроса
Да. Используйте BACKUP/RESTORE WITH MOVE вместо OFFLINE/ALTER/File Copy/ONLINE.
например,
использовать мастер идти использовать фу изменить базу данных foo set single_user с немедленным откатом резервное копирование базы данных foo на disk='c:\temp\foo.bak' с инициализацией --restore filelistonly from disk='c:\temp\foo.bak' использовать мастер восстановить базу данных foo с disk='c:\temp\foo. bak' с перемещением «foo» в «d:\mssql\data\foo.mdf», переместите «foo_log» в «d:\mssql\data\foo_log.ldf»
Обратите внимание, что при ВОССТАНОВЛЕНИИ базы данных SQL Server удаляет старые файлы базы данных.
4
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie
.
t sql — Перемещение файлов базы данных SQL Server в новое место — Почему возникает ошибка разрешения?
спросил
Изменено
3 года, 5 месяцев назад
Просмотрено
4к раз
Я пытался переместить базу данных (файлы .mdf
и .ldf
) в другой каталог на том же сервере, на котором размещен сервер SQL. Я выполнил следующие шаги, описанные в этом вопросе и ответе:
ИЗМЕНИТЬ БАЗУ ДАННЫХ MyDB SET SINGLE_USER С НЕМЕДЛЕННЫМ ОТКАТОМ
ИЗМЕНИТЬ БАЗУ ДАННЫХ MyDB SET OFFLINE
ИЗМЕНИТЬ ФАЙЛ ИЗМЕНЕНИЯ БАЗЫ ДАННЫХ MyDB (имя = MyDB, имя файла = 'N:\DATA\MyDB. MDF')
ИЗМЕНЕНИЕ БАЗЫ ДАННЫХ MyDB SET ONLINE
ИЗМЕНИТЬ БАЗУ ДАННЫХ MyDB SET MULTI_USER
Когда я дошел до шага 4, я получил сообщение «Отказано в доступе». К сожалению, мои окна обслуживания были очень короткими, и у меня не было времени на устранение неполадок. Поэтому я решил удалить базу данных и восстановить ее с помощью Предложение WITH MOVE
для размещения файлов БД в правильном каталоге. Нет проблем.
Мой вопрос: почему я получил сообщение «Отказано в доступе»? Я не менял учетную запись службы MSSQL. Это та же учетная запись, которая запускала RESTORE
.
- sql-сервер
- t-sql
4
Оператор ALTER DATABASE MyDB MODIFY FILE (Name = MyDB, Filename = 'N:\DATA\MyDB.MDF')
фактически не перемещает файлы. Он просто перемещает определение того, где находятся файлы. Прежде чем перейти к шагу 4, вам нужно будет переместить файлы вручную.
При перемещении файлов до шага 4 вы должны убедиться, что целевой каталог имеет правильные разрешения для учетной записи службы SQL Server. В этом документе подробно описаны требования.
0
Ключевым моментом здесь является то, переместили ли вы или скопировали файлы базы данных. И если вы «переместили» файлы между двумя разными дисками, вы на самом деле скопировал их (нет такой вещи, как перемещение файла между двумя дисками, даже если команды/графический интерфейс позволяют вам в это поверить).
При перемещении файла сохраняются владелец и права доступа к файлу.
При копировании на тот же диск сохраняются разрешения, но владельцем нового файла будет тот, кто сделал копию.
Копирование или перемещение файла на другой диск приводит к тому, что лицо, выполняющее копирование/перемещение, становится владельцем нового файла. Старые разрешения , а не сохранены.
Что вы видите, если вы «перемещаете» файл между дисками, и впоследствии SQL Server не будет иметь привилегий для новых файлов.