powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перемещение базы на новый сервер.
16 сообщений из 41, страница 2 из 2
Перемещение базы на новый сервер.
    #39898464
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>alexeyvg, вчера, 16:26 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1319935&msg=22032255][22032255]
>Официально указано, что "‎Для перемещения базы данных на другой экземпляр сервера S'L или на другой сервер используйте резервную и восстановительную работу.‎"
<Уже несколько лет переношу базы данных с одного сервера на другой с использованием ног и флешки, не "используя резервную и восстановительную работу"
...
Рейтинг: 0 / 0
Перемещение базы на новый сервер.
    #39898738
Alexander Us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alHaos,

Лучше не слушать иех, кто советует переносить деаттачем.
Такой способ хорош для разработчиков с тестовыми базами.
С продакшином лучше использовать классическое резервное копирование и восстановление на новом сервере.
...
Рейтинг: 0 / 0
Перемещение базы на новый сервер.
    #39917324
alHaos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня.

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

пока была только одна особенность, master key пришлось принудительно перегенерировать, в моем случае он повлиял на работу linked server c sql авторизацией. Линка не работала, новые линки не создавались.

Код: plaintext
ALTER SERVICE MASTER KEY FORCE REGENERATE
...
Рейтинг: 0 / 0
Перемещение базы на новый сервер.
    #39917331
alHaos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас сценарий другой, для оптимизации времени перенос предварительно full backup norecovery и в момент перехода diff.

17 баз sharepoint, есть возможность генерации скриптов backup/resotre не для одной базы а сразу для всех?
...
Рейтинг: 0 / 0
Перемещение базы на новый сервер.
    #39917337
alHaos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad
alHaos
ВМоисеев,

Комрад мне не базу мне экзепляр надо пренести

возьмите dbatools и оно вам перенесет практически всё за один раз

https://docs.dbatools.io/#Start-DbaMigration


Есть боевой опыт у кого? надежно?
...
Рейтинг: 0 / 0
Перемещение базы на новый сервер.
    #39917394
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alHaos,

скрипты для 17 баз как-то не выглядят серьезной работой.
...
Рейтинг: 0 / 0
Перемещение базы на новый сервер.
    #39917405
alHaos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

) сколько баз по вашему стоит работы ))))

у меня есть сервера, где под полтинник баз для мне это много, не знаю как для других, после какого количества баз это не будет считаться проявлением лени )
...
Рейтинг: 0 / 0
Перемещение базы на новый сервер.
    #39917451
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alHaos
Владислав Колосов,

) сколько баз по вашему стоит работы ))))

у меня есть сервера, где под полтинник баз для мне это много, не знаю как для других, после какого количества баз это не будет считаться проявлением лени )
17 баз - скрипт в 17 строчек, который делается копированием одной строки, а потом заменой в каждой строке 2х имён.

А если 50, ок, можно сделать скрипт запросом наподобие:
Код: sql
1.
2.
SELECT 'BACKUP DATABASE ' + name + '...'
FROM sys.databases
...
Рейтинг: 0 / 0
Перемещение базы на новый сервер.
    #39917508
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alHaos,

достаточно создать скрипт-шаблон, собрать названия папок, баз и подставить в шаблон.

sp_exeutesql и так далее.

Параметрами можно заполнить таблицу и выполнить цикл. Час-полтора займут все действия.
...
Рейтинг: 0 / 0
Перемещение базы на новый сервер.
    #39917637
alHaos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg, Владислав Колосов

Благодарю как то так и планировал.
...
Рейтинг: 0 / 0
Перемещение базы на новый сервер.
    #39917638
alHaos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
USE [master]
RESTORE DATABASE [databasename] 
	FROM DISK = N'F:\sql_backup\databasename.bak' 
	WITH  MOVE N'dataFileName' TO N'D:\sql_data\DataFileName.mdf',
		  MOVE N'logFileName_log' TO N'F:\sql_log\logFileName_log.LDF',
		  NORECOVERY
GO

RESTORE DATABASE [databasename]
	FROM DISK = N'F:\sql_backup\databasename.bak'
GO



мне не часто приходится писать на t-sql
Подскажите пожалуйста, для генерации подобных скриптов нужно использовать курсоры? учитывая, что нет гарантии того, что рукоблудые разработчики не могли поменять названия файлов.
...
Рейтинг: 0 / 0
Перемещение базы на новый сервер.
    #39917646
alHaos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
SET NOCOUNT ON;  

DECLARE @dbID int,
		@dbName VARCHAR(100),
		@dataFileName VARCHAR(100),
		@dataFilePhysicalfileName VARCHAR(100),
		@logFileName VARCHAR(100),
		@logFilePhysicalfileName VARCHAR(100)
  
DECLARE dbCur CURSOR FOR
SELECT database_id, name FROM sys.databases where database_id > 4
print 'USE [master]'  
OPEN dbCur
FETCH NEXT FROM dbCur INTO @dbID, @dbName  
WHILE @@FETCH_STATUS = 0  
BEGIN  
    SELECT @dataFileName = name, @dataFilePhysicalfileName = physical_name from sys.master_files where database_id = @dbID and type = 0
	SELECT @logFileName = name, @logFilePhysicalfileName = physical_name from sys.master_files where database_id = @dbID and type = 1
    
	print 'RESTORE DATABASE [' + @dbName +  ']'
	print '	FROM DISK = N''F:\sql_backup\' + @dbName + '.bak'''
	print '	WITH  MOVE N''' + @dataFileName + ''' TO N'''+ @dataFilePhysicalfileName + ''','
	print '	      MOVE N''' + @logFileName + ''' TO N'''+ @logFilePhysicalfileName + ''','
	print '		  NORECOVERY'
	print 'GO'
	print 'RESTORE DATABASE [' + @dbName +  ']'
	print '	FROM DISK = N''F:\sql_backup\diff\' + @dbName + '.bak'''
	print 'GO'

	FETCH NEXT FROM dbCur INTO @dbID, @dbName  
END   
CLOSE dbCur;  
DEALLOCATE dbCur;



как то так? учитывая, что каждая база состоит из одного датафайла и логфайла?
...
Рейтинг: 0 / 0
Перемещение базы на новый сервер.
    #39917656
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alHaos
как то так?
Зачем курсор, выводите всё одним запросом, типа того:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT '--	RESTORE ' + d.name + '
RESTORE DATABASE [' + d.name +  ']
FROM DISK = N''F:\sql_backup\' + d.name + '.bak''
WITH MOVE N''' + f.name + ''' TO N'''+ f.physical_name + ''',
	MOVE N''' + l.name  + ''' TO N'''+ l.physical_name + ''',
	NORECOVERY
GO
RESTORE DATABASE [' + d.name +  ']
FROM DISK = N''F:\sql_backup\diff\' + d.name + '.bak''
GO
'
FROM sys.databases as d
	--	Выбираем top 1, учитывая, что каждая база состоит из одного датафайла и логфайла
	CROSS APPLY (SELECT top 1 name, physical_name from sys.master_files as m where m.database_id = d.database_id and m.type = 0) as f
	CROSS APPLY (SELECT top 1 name, physical_name from sys.master_files as m where m.database_id = d.database_id and m.type = 1) as l
where d,database_id > 4
...
Рейтинг: 0 / 0
Перемещение базы на новый сервер.
    #39917812
alHaos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Благодарю, что то новое для меня.
Точно не нужен, не знал про cross apply, но и без него можно было обойтись

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT '
RESTORE ' + d.name + '
RESTORE DATABASE [' + d.name +  ']
FROM DISK = N''F:\sql_backup\' + d.name + '.bak''
WITH MOVE N''' + (SELECT top 1 name from sys.master_files as m where m.database_id = d.database_id and m.type = 0) + ''' TO N'''+ (SELECT top 1 physical_name from sys.master_files as m where m.database_id = d.database_id and m.type = 0) + ''',
	MOVE N''' + (SELECT top 1 name from sys.master_files as m where m.database_id = d.database_id and m.type = 1)  + ''' TO N'''+ (SELECT top 1 physical_name from sys.master_files as m where m.database_id = d.database_id and m.type = 1) + ''',
	NORECOVERY
GO
RESTORE DATABASE [' + d.name +  ']
FROM DISK = N''F:\sql_backup\diff\' + d.name + '.bak''
GO
'
FROM sys.databases as d where d.database_id > 4
...
Рейтинг: 0 / 0
Перемещение базы на новый сервер.
    #39918066
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alHaos
не знал про cross apply, но и без него можно было обойтись
Да, можно подзапросами, но после появления cross apply пользуюсь им, т.к. это более универсально - можно вернуть несколько полей).
Вот, тут вам понадобилось 2 поля, и вы делаете 2 одинаковых запроса, для каждого из полей.
А вдруг оптимизатор не преобразует их в один? Получится неэффективно.
...
Рейтинг: 0 / 0
Перемещение базы на новый сервер.
    #39919097
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot alexeyvg#22064574]
alHaos
Владислав Колосов,
А если 50, ок, можно сделать скрипт...


Переходилось переносить сервера более чем с 250 базами. Простым скриптом там трудно отделаться - дисков много и базы надо распределять между ними (размеры баз были от 8 MB до 600 GB). Потому пришлось набросать утилитку, которая занимается переносом, ну и заодно в ней можно указать переносить базу аттачем или бэкапом, шринкануть ли перед этим, ну еще ряд параметров... Под перенос системных быз я, правда, утилиту не затачивал...
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перемещение базы на новый сервер.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]