powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / AlwaysOn backups
10 сообщений из 10, страница 1 из 1
AlwaysOn backups
    #40057817
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день
Возник вопрос как восстанавливать бд из AlwaysOn Группы.
В реальности любой бакап из нужной цепочки (full, diffи несколько логов) может находиться на хосте любой реплики.
Не смог понять есть ли простой способ получить список файлов для восстановления.
Или нужно конектится по очереди на все реплики и смотреть в msdb какой бакап и где был сделан.

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

автор любой бакап из нужной цепочки (full, diffи несколько логов) может находиться на хосте любой реплики
Вы же их рассовываете по какому-то принципу по серверам? Ведите журнал копирования, это несложно сделать путем вывода stdout в файл.
...
Рейтинг: 0 / 0
AlwaysOn backups
    #40057837
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,
Бакапы рассовывает Always On в зависимости от того где находиться Primary и все ли secondary были онлайн во время бакапа.
...
Рейтинг: 0 / 0
AlwaysOn backups
    #40057851
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей08
Добрый день
Возник вопрос как восстанавливать бд из AlwaysOn Группы.
В реальности любой бакап из нужной цепочки (full, diffи несколько логов) может находиться на хосте любой реплики.
Не смог понять есть ли простой способ получить список файлов для восстановления.
Или нужно конектится по очереди на все реплики и смотреть в msdb какой бакап и где был сделан.

сделайте линкед серверы на вторичные ноды, во view соберите данные из msdb..backupset & msdb..backupmediafamily
...
Рейтинг: 0 / 0
AlwaysOn backups
    #40057852
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей08,

не совсем понятно, использование длительное время вспомогательного сервера в качестве первичного не рекомендуется. Т.е. при аварии вы должны как можно быстрее вернуться на первичную реплику. В этом случае бэкапы где попало не будут созданы.
...
Рейтинг: 0 / 0
AlwaysOn backups
    #40057854
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Сергей08,

не совсем понятно, использование длительное время вспомогательного сервера в качестве первичного не рекомендуется. Т.е. при аварии вы должны как можно быстрее вернуться на первичную реплику. В этом случае бэкапы где попало не будут созданы.
Откуда такая рекомендация? Если у вас железо одинаковое, то делать какждый раз один фейловер вместо двух гораздо лучше во всех отношениях, не?

А бэкапы дейтвительно лучше искать по msdb. Или поставить системц централизованного бэкапирования, чтобы исключить шаг поиска бэкапа вовсе.
...
Рейтинг: 0 / 0
AlwaysOn backups
    #40057858
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

как ни странно, рекомендация из справки. Не так давно изучал. Но ссылку не покажу, нет под рукой.
...
Рейтинг: 0 / 0
AlwaysOn backups
    #40057859
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,
Спасибо
Так себе и представлял. Сервера все чужие и наверное надо писать скрипт с уровня OS .
Хотя в глубине души надеялся , что если сделали 'Backup preferences', то и общая история вроде как должна быть.
Думал, что не нашёл в документации.
...
Рейтинг: 0 / 0
AlwaysOn backups
    #40057868
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей08
komrad,
Спасибо
Так себе и представлял. Сервера все чужие и наверное надо писать скрипт с уровня OS .
Хотя в глубине души надеялся , что если сделали 'Backup preferences', то и общая история вроде как должна быть.
Думал, что не нашёл в документации.


можно и с сиквела пробежаться по репликам и собрать информацию

я таким проверяю
Код: 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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
use master 
set nocount on;
declare @replicas table (rname varchar(128))
declare @backups table (srv varchar(128),database_name nvarchar(256),[recovery] varchar(30),[status] varchar(30),type char(1),last_backup datetime, first_backup datetime)
declare @name varchar(128)
declare @cmd varchar(8000)
declare @flag tinyint = 0
declare @remote_failed tinyint = 0

if object_id('sys.availability_replicas') is not null /*compatibility with SQL2008x*/
	begin
		set @cmd='select distinct replica_server_name from sys.availability_replicas where replica_server_name <>@@SERVERNAME'
		insert into @replicas(rname)
		exec (@cmd)
	end
 
if @@ROWCOUNT>0 and (select value_in_use from sys.configurations where name='Ad Hoc Distributed Queries' ) = 0
	begin
		set @cmd='exec sp_configure ''Ad Hoc Distributed Queries'',1; reconfigure with override;'

		select @cmd=isnull('exec sp_configure ''show advanced options'',1; reconfigure with override; ','')+@cmd
		from sys.configurations
		where name='show advanced options'
		and value_in_use=0

		exec(@cmd)

		set @flag=1
	end

while exists (select top 1 1 from @replicas)
	begin
		select top 1 @name=rname
		from @replicas
		
		set @cmd='select * FROM OPENROWSET(''SQLNCLI'', ''Server='+@name+';Trusted_Connection=yes;'',  
					''select @@servername [srv],database_name,convert(varchar(30),DATABASEPROPERTYEX(database_name,''''Recovery'''')) [recovery],convert(varchar(30),DATABASEPROPERTYEX(database_name,''''Status'''')) [status],[type],max(backup_start_date) [last], min(backup_start_date) [first] from msdb..backupset where database_name in (select db_name(database_id) from sys.dm_hadr_database_replica_states where is_local=1) group by database_name,type'' ) AS a;'  


BEGIN TRY  
		insert into @backups ([srv],[database_name],[recovery],[status],[type],[last_backup],[first_backup])
		exec(@cmd)
END TRY  

BEGIN CATCH  
		set @remote_failed=1
END CATCH  

		delete @replicas 
		where rname=@name
	end

if @flag=1
	begin
		set @cmd='exec sp_configure ''Ad Hoc Distributed Queries'',0; reconfigure with override;'
		exec (@cmd)
	end;


with  
------------
data as 
(
	select [srv],[database_name],[recovery],[status],[type],[last_backup],[first_backup]
	from @backups
	union all
	select 
		@@servername [srv]
		,d.name
		,d.recovery_model_desc collate SQL_Latin1_General_CP1_CI_AI
		,d.state_desc collate SQL_Latin1_General_CP1_CI_AI
		,isnull(type,'A')
		,isnull(max(backup_start_date),0) [last]
		,isnull(min(b.backup_start_date),0) [first]
	from sys.databases d
	left join msdb..backupset b on d.name=b.database_name collate SQL_Latin1_General_CP1_CI_AI
	where d.database_id<>2
		and b.server_name=@@SERVERNAME  /*check local backups; exclude imported backup info (!) from restore command*/
		
	group by d.name,b.type,d.recovery_model_desc,d.state_desc
)--------------------------
,data2 as 
(
	select 
		d.name [database_name]
		,d.state_desc
		,d.recovery_model_desc
		,isnull(b.type,'A') [BackupType]   /*if there were no backups at all made on the server OR backupset table is empty, then 'A' */
		,isnull(max(b.last_backup),0) [LastBackup]
		,isnull(datediff(dd,max(b.last_backup),getdate()),-1) [Days]
	from data b
	right join sys.databases d on b.database_name=d.name and not (d.recovery_model_desc = N'SIMPLE' and b.type='L') /*b.type='L'  -- log backup*/
	where 
		d.database_id<>2
		and d.source_database_id is null
		-- and not (d.recovery_model_desc = N'SIMPLE' and b.type='L') 
	group by 	
		d.name
		,d.state_desc
		,d.recovery_model_desc
		,b.[type]
	having isnull(max(b.last_backup),0)<=dateadd(dd,case 
														when b.[type]='L' then -1 
														when b.[type]='D' then -7 
														else -3 /*for all other types of backups*/
													end
												,convert(date,getdate())
												)
) 
 
select 
	case 
		when [BackupType]='D' then 'FULL' 
		when [BackupType]='L' then 'LOG'  
		when [BackupType]='A' then '*** ALL ***' 
		when [BackupType]='I' then 'DIFF'
		when [BackupType]='F' then 'File/Filegroup'
		when [BackupType]='G' then 'DIFF File'
		when [BackupType]='P' then 'Partial'
		when [BackupType]='Q' then 'Differential partial'
		when [BackupType] is NULL then 'NULL'
		else [BackupType]
	end [MissingBackups]
	,t1.state_desc [DBState]
	,count(1) [databases]
	,case 
		when min(t1.days)=max(t1.days) then convert(varchar(10),min(t1.days))
		else convert(varchar(10),min(t1.days))+' - '+convert(varchar(10),max(t1.days)) 
	end [DaysDelay]
	,(reverse(stuff(reverse((select quotename([database_name]) + char(10) as 'data()' from data2 t2 where t1.[BackupType]=t2.[BackupType] and t1.state_desc=t2.state_desc for xml path('') )),1,1,''))) [dbs]
from data2 t1 
group by [BackupType], t1.state_desc 

union all 

select 
	'Remote FAILED!'
	,'SPN/Timeout/etc'
	,NULL
	,NULL
	,'Unable to check backups on remote replica!'
where @remote_failed=1



Если идти со стороны OS, то можно посмотреть на такую штуку:
https://docs.dbatools.io/#Get-DbaDbBackupHistory
...
Рейтинг: 0 / 0
AlwaysOn backups
    #40057882
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,

Через OPENROWSET идеально :)
Спасибо огромное.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / AlwaysOn backups
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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