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

Перенос базы на другой жёсткий диск — документация Staffcop Enterprise 5.1

/.. _linux_faq_chande_db_hdd:

Жёсткий диск/раздел должен существовать в системе и быть подключен физически. Перенос базы данных выглядит так:

Внимание

Нельзя использовать одну и ту же точку монтирования для файлов и БД.

Если на диске есть требуемые разделы, переходим к п. 2.

Если разделов нет — размечаем диск своей любимой программой разметки, например так:

sudo cfdisk /dev/sdX

и создаём на нём файловую систему командой

sudo mkfs.ext4 /dev/sdX

где Х — это завершение имени диска.

  1. Останавливаем сервисы командами:

sudo service postgresql stop
sudo staffcop stop
  1. Редактируем файл /etc/fstab

sudo nano -w /etc/fstab

Прописываем туда следующую строку:

/dev/sdX  /var/lib/postgresql/ ext4 rw,noatime 0 2

Где /dev/sdX — ваш жёсткий диск, /var/lib/postgresql/ — каталог, в котором будет отображаться содержимое диска, ext4 — тип файловой системы (если вы используете другую фс — jfs/xfs/reiser и т. д. эта опция меняется.) rw — означает разрешение на чтение-запись на диск. Также можно прописывать диск по UUID. Получить UUID диска можно командой:

sudo blkid

В этом случае первая часть записи примет вид UUID= , где в кавычки нужно вписать резальтат вывод вышеуказанной команды.

Предупреждение

Разделы с GPT-форматированием можно примонтировать только по UUID-диска!

  1. Создаём папку для резервного копирования, и перемещаем данные из каталога базы данных туда.

mkdir /home/user/rezerv && sudo mv /var/lib/postgresql/* /home/user/rezerv

Где user — это домашний каталог пользователя, скорее всего, у вас он отличается. Узнать домашний каталог пользователя можно командой

env | grep -E "home|HOME"

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

  1. Проверяем корректность монтирования командой

sudo mount -a

эта команда монтирует диск, который уже прописан в fstab, но еще не примонтирован.

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

Также можно проверить, что данный раздел доступен на запись. Например, создадим текстовый файл и проверим его наличие командами

touch /var/lib/postgresql/11/main/test_write.txt && ls -l /var/lib/postgresql/11/main/

Либо просто выполнив команду mount без параметров: ее результатом станет вывод всех монтированных систем;
наше новое устройство должно быть монтировано rw.

  1. Копируем всё на жд,

sudo cp -R  /home/user/rezerv/* /var/lib/postgresql/

В случае, если вы перемещали данные в другой каталог, произведите изменения в соответствии с реальным расположением файлов.

  1. Меняем владельца на postgres.

sudo chown -R postgres:postgres /var/lib/postgresql/11/main
  1. Выставляем ему права доступа на 700.

sudo chmod -R 700 /var/lib/postgresql/11/main
  1. Запускаем сервисы postgresql, staffcop и nginx.

sudo service postgresql start
sudo staffcop start

Выполняем команду

sudo staffcop sql

в появившемся приглашении пишем analyze; ждём.

ошибки типа «ПРЕДУПРЕЖДЕНИЕ: «pg_shdescription» пропускается — только суперпользователь может анализировать этот объект» не критичны, т.к. говорят о том, что команда, запущенная с данными правами, не смогла проанализировать служебные таблицы БД. Это и не требуется.

  1. Заходим в веб-интерфейс, проверяем что всё работает, все отчёты видны и тд. Если всё в порядке, можно удалять резервные файлы

rm -R /home/user/rezerv

Как и любой rm следует применять с осторожностью.

Attach и Detach базы в MS SQL

Богдан Кухар | 19 февраля 2020 | Статьи, Статьи по 1С | Комментариев нет

Как присоединить или отсоединить базу данных в MS SQL, другими словами выполнить Attach и Detach.

Если Вы уже какое-то время администрируете MS SQL, то скорее всего слышали такой термин как «Приаттачить» базу или сделать ее «Деттач» / «Аттач»

Конечно, данная тема также подымается и на курсе: Администратор 1С!

Операция действительно используется довольно часто для переноса базы, к примеру, на другой сервер или экземпляр MS SQL.

И действительно, ведь чтоб перенести базу, достаточно ее просто отсоединить (выполнить Detach) и затем на новом сервере СУБД присоединить (выполнив Attach). Быстро и удобно!

Конечно, Attach и Detach базы можно использовать и в ряде других случаев, к примеру,  мы хотим просто перенести лог (*ldf файл журнала транзакций) на другой диск, или вместе с базой, и здесь нам также поможет команда «Деттач» и «Аттач». Иногда даже для бэкапа файлов *ldf и *mdf ее используют, конечно, это не есть  хорошо, но также верный способ позволяющий скопировать файлы.

К слову если сервер СУБД работает, плюс  база «Онлайн» тогда если предварительно не сделать Detach, или не перевести базу в offline (так называемый автономный режим), скопировать лог или базу мы не сможем, получим ошибку что файл используется!

В теории разобрались, приступим к практике.

Давайте представим ситуацию, что место на диске, где у нас лежит лог файл *ldf закончилось, и возникла задача по его переносу на другой диск.

Собственно чем мы сейчас и займемся!

И так все действия мы будем проводить в Management Studio.

Находим интересующую базу, затем правый клик мышкой – «Задачи» — «Отсоединить»

(В eng версии вместо  «Отсоединить» будет «Detach»).

Затем в окне отсоединения базы следует поставить птичку «Удалить соединения».

ВАЖНО! Если с базой работают пользователи (к примеру в 1С Предприятии), есть активные соединения, тогда Вы без их завершения не сможете выполнить отсоединение базы!

Как видно на скрине выше, активных соединений нет, но птичку тем не менее поставить нужно, вдруг в момент отсоединения кто-то вздумает запустить 1С Предприятие.

Конечно в любом случаи при выполнении «Detach» базы, пользователей предварительно нужно уведомить о том что база будет недоступна кокой-то промежуток времени (Если с ней работают).

 

Ставить птичку возле «Обновить статистику» не рекомендую, иначе могут возникнуть на этом этапе различные ошибки, такие как перевод базы в «single user», бывает что даже зависает Management Studio (.

После успешного отсоединения базы она исчезает из списка «Обозревателя объектов» (Но не из диска, там все файлы будут на месте и mdf и ldf) как на рисунке ниже.

Вот мы и смогли выполнить первую часть работы, отсоединили базу, сделали ее «Detach».

Теперь мы уже можем скопировать наш лог файл на другой диск (Рис. ниже):

 

И приступаем ко второму шагу по присоединению базы или как его еще называют «Приаттачим» базу используя все тот же Managmant Studio.

На «базах» правый клик мышкой и выбираем «Присоединить» / Attach.

Затем в окне «Присоединения базы» клик по кнопке «Добавить»

Сперва укажем расположение файла mdf (база). У меня это диск E:\DATA\BUHG1C.mdf

После того как мы кликнем по кнопке «ОК» увидим в окне ниже что MS SQL предполагает, что расположение файла лога соответствует расположению базы mdf, но конечно, лога по указанному месту уже нет, мы его переместили на другой диск, и теперь его следует указать вручную!

 

Укажем новое расположение лога кликнув по кнопке «…»

Диск H:\LOGSSD\BUHG1C_log. ldf

Убедившись что новое расположение лога указанно верно, можно кликнуть по кнопке «ОК».

ВНИМАНИЕ! Если получили ошибку (рис. ниже)

Тогда скорее всего Вы пытаетесь выполнить данную операцию под пользователем (рутом) «SA».

Все что нужно сделать, так это выполнить данную операцию от Администратора Windows (Если установили смешанный режим проверки подлинности, еще на этапе установки самого MS SQL). 

Просто выбираем «Проверка подлинности Windows» при старте Managmant Studio.

И повторим действия с присоединением базы.

В случаи успеха, база вновь появится в списке баз обозревателя объектов! (Как на рисунке ниже).

 

 

 

Если Вы хотите больше узнать о технической стороне 1С, тогда регистрируйтесь на первый бесплатный модуль курса: Администратор 1С >>>

Успехов Коллега!

С уважением, Богдан.

Метки:MS SQL и 1С, Windows server 2016, Администрирование, Администрирование в 1С, Базы в 1С Предприятии, информационные базы в 1С, Настройка 1С, Оптимизация в 1С

Sql-сервер перемещает файлы базы данных на другой диск — данные и журнал

Иногда нам нужно на SQL Server перемещать файлы базы данных на другой диск . В этой статье мы попытаемся объяснить 3 простых способа выполнить эту задачу. Первый метод объясняет перемещение файлов базы данных с помощью интерфейса SQL Server Management Studio. Идем шаг за шагом без какого-либо сценария. Два других метода основаны на сценарии. Первый использует метод «ALTER DATABASE». Второй использует метод «Отсоединить/Присоединить».

Зачем нужно переносить базы данных sql на другой диск?

Первый сценарий: все ваши базы данных расположены в разделе D:, а в разделе заканчивается место. Вы собираетесь создать новый раздел E: и вам необходимо выделить некоторые файлы данных и журналов для нового раздела.

Второй сценарий: Создатель базы данных использовал некоторый сценарий T-SQL для создания баз данных. Сценарий T-SQL создал базу данных в расположении по умолчанию, которое было указано в экземпляре SQL Server и, скорее всего, находится на диске C:. Microsoft рекомендовала использовать раздел, отличный от того, на котором установлена ​​ОС, для повышения производительности. Также разные разделы для файла журнала (LDF) и файла данных (MDF).

Прочтите также другие сообщения справки по SQL Server:

  1. Как исправить ошибку SQL Server 18456
  2. Исправить ошибку SQL Server 26 и ошибку 40
  3. Как отключить все задания SQL одновременно.
  4. Как исправить ошибку SQL 17002
  • Использование интерфейса SQL Server Management Studio для перемещения файлов базы данных.
  • Скрипт для перемещения файлов базы данных методом «ALTER DATABASE».
  • Перемещение файлов базы данных методом «Отсоединить/присоединить» с помощью T-SQL Script

 

Использование интерфейса SQL Server Management Studio для перемещения файлов базы данных.

Перед тем, как вы сможете начать с  сервером sql, переместите файлы базы данных в другое место, необходимо проверить:

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

Найдите путь к файлам данных и журналов, которые будут перемещены.

  1. Вы можете использовать свойства базы данных, чтобы определить путь:

Имя базы данных — Свойства — Файлы (Под «путь» — Путь к файлам)

Найдите путь к файлам данных и журналов

  1. Или используйте следующий сценарий T-SQL:
  ВЫБЕРИТЕ имя, физическое_имя КАК текущее_расположение_файла 
  ИЗ sys.master_files 
 , где Имя в ('test','test_log')  

Измените имя базы данных или удалите «где Имя в (‘test’,’test_log’)», чтобы получить путь ко всем файлам базы данных.

 

Найдите путь к файлам данных и журналов

По умолчанию файлы данных и журналов расположены следующим образом:

C:\Program Files\Microsoft SQL Server\MSSQL11. SGALDW\MSSQL\DATA\Test.mdf

Начало перемещения базы данных:

Перейдите в SQL Server Management Studio и найдите базу данных, в которую вы будете перемещать данные и файлы журналов.

Щелкните правой кнопкой мыши — Задача — Отсоединить

Отключить базу данных sql server

Появится следующее представление:

Отключить соединение

Необходимо установить флажок Отбросить соединение, чтобы убедиться, что у нас не было никакого соединения во время отсоединения базы данных. По умолчанию команда Detach не будет выполняться, если существует какое-либо соединение. После нажатия OK база данных будет отсоединена и исчезнет из представления баз данных в Management Studio.

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

Скопировать файлы базы данных

После завершения копирования вернитесь в Management Studio и щелкните правой кнопкой мыши базу данных, а затем щелкните Присоединить…

Sql Server Присоединить базу данных

Найдите файл данных в новом месте назначения, и после добавления данные будут заполняться автоматически.

Переместить базу данных sql на другой диск

Нажмите «ОК», и новая база данных появится в Management Studio. Сделайте какой-нибудь выбор из таблиц, чтобы убедиться, что все в порядке.

 

Сервер Sql перемещает файлы базы данных с помощью метода «Изменить базу данных».

Вы можете использовать команды T-SQL для перемещения данных и файла журнала базы данных sql на другой диск.

Выполните шаги, чтобы переместить базу данных в новое место.

  1. Найдите путь к файлу данных и журналу, объясните ранее:
Использовать мастер
ВЫБЕРИТЕ имя, физическое_имя КАК текущее_местоположение_файла
ИЗ sys.master_files
где Имя в ('test','test_log')
 
  1. Измените базу данных, которую вы хотите перевести в автономный режим, с помощью команды:
ALTER DATABASE test SET OFFLINE WITH ROLLBACK IMMEDIATE;
 

Внимание! Чтобы исключить всех и откатить все текущие открытые транзакции, необходимо использовать «WITH ROLLBACK IMMEDIATE»

  1. Переместите файлы в новое место с помощью следующей команды:
-- ms sql переместить базу данных на другой диск
ИЗМЕНИТЬ БАЗУ ДАННЫХ test ИЗМЕНИТЬ ФАЙЛ ( ИМЯ = test, FILENAME = " C:\Program Files\Microsoft SQL Server\MSSQL11. SGALDW\MSSQL\DATA\Test.mdf") GO
ИЗМЕНИТЬ БАЗУ ДАННЫХ test ИЗМЕНИТЬ ФАЙЛ ( ИМЯ = test_log, FILENAME = " C:\Program Files\Microsoft SQL Server\MSSQL11.SGALDW\MSSQL\DATA\Test_log.ldf") GO
 
  1. Изменить статус базы данных на Online:
ALTER DATABASE test SET онлайн GO
 

На самом деле этот метод самый быстрый, чем с использованием интерфейса Management Studio.

 

SQL Server перемещает файлы базы данных с помощью метода отсоединения/присоединения с использованием T-SQL

Последний метод использует отсоединение/присоединение к для перемещения файла базы данных SQL Server . Мы собираемся объяснить это шаг за шагом.

Наша цель — переместить файлы базы данных из источника «C:\Program Files\Microsoft SQL Server\MSSQL11.SGALDW\MSSQL\DATA\Test.mdf» в место назначения «D:\New_Destination\»

  1. Команда отключения базы данных
--  переместить базу данных sql на другой диск 
ИСПОЛЬЗОВАТЬ МАСТЕР;
ИДТИ
-- Взять целевую базу данных в однопользовательском режиме. 
-- Это может отключить ваши активные транзакции для целевой базы данных
ИЗМЕНИТЬ БАЗУ ДАННЫХ
УСТАНОВИТЬ ОДНОГО_ПОЛЬЗОВАТЕЛЯ
С НЕМЕДЛЕННЫМ ОБРАТОМ;
ИДТИ
-- Отсоединить целевую БД
EXEC MASTER.dbo.sp_detach_db @dbname = N'test'
ИДТИ
 
  1. На этом шаге переместите файлы данных и журналов целевой базы данных из исходной папки в новое место назначения.

Переместить файлы базы данных sql на другой диск

  1. Прикрепить целевую базу данных с новой папкой местоположения
-- Сервер Sql Переместить файлы данных и журналов из источника в новую папку назначения.
-- Повторно подключенная БД
СОЗДАТЬ БАЗУ ДАННЫХ [тест] ВКЛ.
(FILENAME = N'D:\New_Destination\test.mdf'),
(FILENAME = N'D:\New_Destination\test_log.ldf')
ДЛЯ ПРИСОЕДИНЕНИЯ
ИДТИ
 
  1. После этого база данных будет подключена, и вы сможете проверить базы данных Management Studio. Сделайте какой-нибудь выбор из таблиц, чтобы убедиться, что все в порядке.

Внимание! Выполняйте команду «ROLLBACK IMMEDIATE» только в том случае, если вы уверены, что не собираетесь разрывать какое-либо важное соединение.

Массовое перемещение всей базы данных SQL и файлов журналов — SQL Undercover

Как всегда, сценарий из этого поста также можно найти в нашем репозитории GitHub, ЗДЕСЬ

У вас есть SQL Server с несколькими сотнями базы данных на нем (если честно, их даже не должно быть так много), и вам нужно переместить все данные и файлы журналов в новое место. Возможно, вы собираетесь перейти на новую, блестящую SAN, или, может быть, ваши диски почти заполнены, и вам нужно переместить кучу файлов куда-то еще.

Первое, что вам нужно сделать, это изменить пути к файлам в SQL. Это достаточно легко сделать с помощью оператора ALTER DATABASE.

ИЗМЕНИТЬ БАЗА ДАННЫХ SQLUndercover ИЗМЕНИТЬ ФАЙЛ (ИМЯ SQLUndercover_Log, FILENAME = 'F:\SQLLogs\SQLUndercover_Log.ldf'
 

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

/********************************************************* *****************
 
Автор: Дэвид Фаулер
Дата редакции: 22.04.2020
Версия: 1.1
 
© www.sqlundercover.com
 
 
 
Этот сценарий предназначен для личных, образовательных и внутренних целей.
корпоративных целях, при условии сохранения этого заголовка. Перераспределение или продажа
данного скрипта, полностью или частично, запрещены без явного согласия автора
письменное согласие.
 
Программное обеспечение предоставляется «как есть», без каких-либо гарантий, явных или
подразумевается, включая, но не ограничиваясь гарантиями товарного состояния,
пригодность для конкретной цели и ненарушение прав. ни в коем случае
авторы или владельцы авторских прав несут ответственность за любые претензии, убытки или другие
ответственность, будь то в силу договора, деликта или иным образом, возникающая из,
из или в связи с программным обеспечением или использованием или другими сделками в
программного обеспечения. 
 
******************************************************* ****************/
 
--config переменные
DECLARE @logpath NVARCHAR(260) = 'G:\SQLLogs'
DECLARE @datapath NVARCHAR(260) = 'E:\SQLData'
ОБЪЯВИТЬ @movelogs BIT = 1
ОБЪЯВИТЬ @moveddata BIT = 0
 
--переменные времени выполнения
ОБЪЯВИТЬ @STMT NVARCHAR(4000)
 
--раскомментируйте предикаты, чтобы включить или исключить базы данных по мере необходимости
DECLARE Files CURSOR STATIC FORWARD_ONLY
ЗА
ВЫБЕРИТЕ DB_NAME(database_id)
    ,тип
    ,имя
    ,REVERSE(SUBSTRING(REVERSE(физическое_имя), 0, CHARINDEX('\', REVERSE(физическое_имя))))
ИЗ sys.master_files
ГДЕ введите В (0,1)
--AND DB_NAME(database_id) IN ('sqlundercover') --раскомментируйте, чтобы включить базы данных
--AND DB_NAME(database_id) NOT IN ('master','tempdb','msdb','model') --раскомментируйте, чтобы исключить базы данных
 
ОБЪЯВИТЬ @DBName SYSNAME
ОБЪЯВИТЬ @type TINYINT
DECLARE @logicalname SYSNAME
ОБЪЯВИТЬ @физическое имя NVARCHAR(260)
 
--check пути к файлам заканчиваются на \ и добавляются, если они не заканчиваются
ЕСЛИ (SUBSTRING(@datapath, LEN(@datapath), 1) != '\')
    SET @datapath += N'\'
 
ЕСЛИ (SUBSTRING(@logpath, LEN(@logpath), 1) != '\')
    SET @logpath += N'\'
 
ОТКРЫТЫЕ файлы
 
ПОЛУЧИТЬ СЛЕДУЮЩИЙ
ИЗ файлов
INTO @DBName
    ,@тип
    , @логическое имя
    , @физическое имя
 
ПОКА @@FETCH_STATUS = 0
НАЧИНАТЬ
    SET @STMT = N'ALTER DATABASE ' + QUOTENAME(@DBName) + N' MODIFY FILE (NAME = ' + QUOTENAME(@logicalname) + N', FILENAME = '''
    УСТАНОВИТЬ @STMT += СЛУЧАЙ
            КОГДА @type = 0 И @moveddata = 1
                ТО @datapath + @физическое имя + ''')'
            КОГДА @type = 1 И @movelogs = 1
                ТО @logpath + @физическое имя + ''')'
            КОНЕЦ
 
    ПЕЧАТЬ @STMT
 
    ПОЛУЧИТЬ СЛЕДУЮЩИЙ
    ИЗ файлов
    INTO @DBName
        ,@тип
        , @логическое имя
        , @физическое имя
КОНЕЦ
 
ЗАКРЫТЬ файлы
 
УДАЛИТЬ Файлы
 

Есть несколько переменных, которые вы хотите изменить, @logpath и @datapath должны соответствовать вашим новым путям журнала и данных соответственно, а @movelogs и @movedata, если установлено значение 0, заставит сценарий игнорировать журнал или Дата файлы.

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

Запустите это, и он сгенерирует все команды ALTER DATABASE, чтобы перенаправить SQL на новые пути.

До сих пор вы только перенаправляли SQL на новые пути к файлам, сами файлы по-прежнему будут там, где они всегда были.

Прежде чем вы сможете что-либо переместить, вам необходимо остановить службу SQL.

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

Я предпочитаю использовать Robocopy из PowerShell, вы можете сделать то же самое в командной строке, если хотите. В любом случае, используя переключатель /COPYALL, вы также перенесете все атрибуты файла, включая ACL (разрешения).