Esta semana surgiu a dúvida em um grupo do DBA Brasil. Seria possível utilizar o Log shipping com diferentes versões? A resposta curta e direta, é sim. Basicamente o funcionamento do Log shipping é backup de log e restore, mas para confirmar o meu pensamento, configurei um Log shipping e efetuei os testes para comprovar a minha teoria.
Arquitetura:
Pré-requisitos para utilizar o Log shipping entre diferentes versões:
1 – É importante verificar se alguma feature da edição enterprise está habilitada e desativar, dessa forma garante a compatibilidade de features entre as edições.
SELECT feature_name
FROM sys.dm_db_persisted_sku_features;
GO
2 – Não é possível fazer a leitura no database em standby mode.
3 – A versão de origem do Log shipping deve ser menor do que a versão de destino, por exemplo, 2012 para 2017, o inverso não é possível.
Agora irei realizar os testes e demonstrar que é possível utilizar o Log shipping com diferentes versões, para este exemplo estou usando o SQL Server 2012 com SQL Server 2017.
Versão e edição do SQL Server 2012 de origem com Log shipping:
select serverproperty('machinename') as [machinename],
serverproperty('servername') as [servername],
@@version version,
serverproperty('edition') as [edition],
serverproperty('productlevel') as [productlevel],
serverproperty('productupdatelevel') as [productupdatelevel],
serverproperty('productversion') as [productversion],
serverproperty('productupdatereference') as [productupdatereference],
convert (varchar(256), serverproperty('collation')) collation
Versão e edição do SQL Server 2017 de destino com Log shipping:
Irei criar um database com uma tabela na versão com 2012, adicionei este database no Log shipping e realizei algumas cargas de dados para testes:
create database db_teste
go
use db_teste
go
create table tb_dados([id] [int] identity(1,1) not null, descricao varchar(max));
declare @i int = 0
while @i < 500
begin
set @i = @i + 1
insert into tb_dados (descricao) values ('please note: refer to your license terms for microsoft sql server 2014 software (the software)
to identify the entity licensing this supplement to you and for support information. you may use a copy of this supplement with each validly licensed copy of the software. you may not use the supplement if you do not have a license for the software. the license terms for the software apply to your use of this supplement.
canada. you may stop receiving updates by turning off the automatic update feature or by turning off internet access. refer to the product documentation to learn how to turn off updates for your specific device or software.')
end
Verificando backups de logs aplicados pelo Log shipping no destino na versão do SQL Server 2017:
Status do Log shipping:
Para os curiosos assim como eu, o que aconteceria se fosse habilitado o standby mode, habilitei e fiz o teste, abaixo podemos ver o ocorrido:
Erro ao aplicar o backup de log no Log shipping:
Date 25/10/2023 16:59:33
Log Job History (LSRestore_WIN-6PF17Q3PBGA\SQL2012_db_teste)
Step ID 1
Server WIN-6PF17Q3PBGA\SQL2017
Job Name LSRestore_WIN-6PF17Q3PBGA\SQL2012_db_teste
Step Name Log shipping restore log job step.
Duration 00:00:01
Sql Severity 0
Sql Message ID 0
Operator Emailed
Operator Net sent
Operator Paged
Retries Attempted 0
Message
2023-10-25 16:59:34.35 *** Error: Could not apply log backup file 'C:\backups\2012_2014\2014\db_teste_20231025195000.trn' to secondary database 'db_teste'.(Microsoft.SqlServer.Management.LogShipping) ***
2023-10-25 16:59:34.35 *** Error: This backup cannot be restored using WITH STANDBY because a database upgrade is needed. Reissue the RESTORE without WITH STANDBY.
RESTORE LOG is terminating abnormally.(.Net SqlClient Data Provider) ***
O erro é bem claro, ao disponibilizar o database para realizar a leitura no standby, foi feito o upgrade automaticamente pelo SQL Server da versão 2012 para 2017, desta forma não é compativel a funcionalidade do standby mode entre diferente versões.
Criei esse post devido a dúvida levantada e ao pouco material que encontrei sobre as versões diferentes envolvidas em um ambiente com Log shipping.