Petit fond sur le système. C'est SQL Server 2012 GROUPE DE DISPONIBILITÉ AUSSI AVEC 1 PRIMAIRE ET 1 SECONDAIRE.
Je suis suivi cet article ( SSIS avec TautMonon ) pour faire fonctionner les SSIS avec toujours. J'ai une table qui enregistre le rôle actuel du serveur et un travail qui fonctionne toutes les deux minutes en vérification si elle a récemment échoué. Le problème que je suis en cours d'exécution est que le secondaire accepte uniquement les connexions réadonnées pour le SSISDB et mon script n'exécutera pas à cause de cela.
Voici le script:
USE master;
DECLARE @last_role TINYINT;
SET @last_role = (
SELECT TOP 1 [replica_role]
FROM [dbo].[replica_role]
);
DECLARE @current_role TINYINT;
SET @current_role = (
SELECT ROLE
FROM sys.dm_hadr_availability_replica_states
WHERE is_local = 1
);
IF (@last_role = 2 AND @current_role = 1)
BEGIN
USE SSISDB;
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'x'
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
END
USE master;
UPDATE dbo.[replica_role] SET [replica_role] = @current_role;
Je suis confus sur la raison pour laquelle l'erreur se passe parce que l'instruction IF
_ est évaluée à FALSE, de sorte que l'utilisation SSISDB ne soit pas exécutée. Je pourrais transformer les déclarations en chaînes et utiliser EXEC, mais je préférerais ne pas si possible. Lorsque j'exécute le script, c'est l'erreur que je reçois:
The target database ('SSISDB') is in an availability group and is currently accessible
for connections when the application intent is set to read only. For more information
about application intent, see SQL Server Books Online.
Le rôle de connexion client pour les répliques secondaires Détermine si votre base de données est toujours disponible ou uniquement disponible pour lire uniquement les connexions, ou non disponibles du tout. Si vous définissez la base de données sur les connexions en lecture seule, votre chaîne de connexion doit inclure le paramètre ApplicationIntent = Readonly tel que défini dans la page Livres en ligne.
Lorsque vous essayez de vous connecter à cette base de données sans spécifier ApplicationIntent = Readonly, votre requête échouera.