Перенос sql базы на другой диск: Перемещение пользовательских баз данных — SQL Server

Перенос WSUS на другой диск — TechExperts.ru. Системная интеграция, обслуживание ИТ-инфраструктуры, слаботочные и инженерные системы.

Перенос WSUS на другой диск — TechExperts.ru. Системная интеграция, обслуживание ИТ-инфраструктуры, слаботочные и инженерные системы. | TechExperts.ru. Системная интеграция, обслуживание ИТ-инфраструктуры, слаботочные и инженерные системы.
15.04.2014

Если на диске с данными WSUS кончилось свободное место, или он вышел из строя, возникает необходимость перенести данные на другой диск или раздел

Задача решается в два этапа: перенос файлов обновлений и перенос базы данных.

Часть 1. Перенос файлов и папок WSUS

Для решения этой задачи мы воспользуемся утилитой командной строки для управления WSUS — WSUSutil.exe.

  1. Создаем на новом диске/разделе папку для контента WSUS
  2. Открываем командную строку от имени администратора
  3. Переходим в каталог C:\Program Files\Update Services\Tools
  4. В нашем примере мы перенесем контент WSUS на диск W: в папку WSUS, лог процесса положим в файл log. txt на том же диске.
  5. Выполняем команду: wsusutil.exe movecontent W:\WSUS W:\log.txt

    В зависимости от размера папки WSUS, выполнение команды может занять продолжительное время (несколько часов). По результатам получаем сообщение «Content move has successfully finished.«:

  6. После этого мы можем удалить папки с контентом 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

  1. Если у вас не установлены средства управления сервером MS SQL, скачиваем MS SQL Server 2008 Management Studio Express (отсюда: http://www.microsoft.com/en-us/download/details.aspx?id=7593)
  2. Установливаем его. Следует заметить, что 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:

    Дальше процесс сводится к нажатию кнопки «Далее» и «Финиш».

  3. Открываем SQL Server Management Studio:

  4. Подключаемся к серверу \\.\pipe\mssql$microsoft##ssee\sql\query

  5. Находим в списке базу WSUS, выполняем Detach:

  6. В процессе отсоединения базы сбрасываем соединения, для чего проставляем галку Drop Connections:

  7. После отсоединения, переносим базу в новое место. У нас это, как упоминалось, диск W:, папка WSUS:
  8. И присоединяем базу обратно к серверу:

  9. Файлы указываем уже в новом расположении:

  10. По окончании процедуры база получит новое расположение.








Перенос базы 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. Я выполнил следующие шаги, описанные в этом вопросе и ответе:

  1. ИЗМЕНИТЬ БАЗУ ДАННЫХ MyDB SET SINGLE_USER С НЕМЕДЛЕННЫМ ОТКАТОМ

  2. ИЗМЕНИТЬ БАЗУ ДАННЫХ MyDB SET OFFLINE

  3. ИЗМЕНИТЬ ФАЙЛ ИЗМЕНЕНИЯ БАЗЫ ДАННЫХ MyDB (имя = MyDB, имя файла = 'N:\DATA\MyDB. MDF')

  4. ИЗМЕНЕНИЕ БАЗЫ ДАННЫХ MyDB SET ONLINE

  5. ИЗМЕНИТЬ БАЗУ ДАННЫХ 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 не будет иметь привилегий для новых файлов.