Sono in procinto di creare un ambiente TEST per il nostro personale di sviluppo di SQL Server.
In produzione abbiamo 3 server SQL, SQL01
contiene diversi database su cui è stato eseguito il mirroring SQL02
. SQL03
funge da testimone in "alta sicurezza con failover automatico" o configurazione sincrona.
Ho usato VMWare P2V per virtualizzare tutte e tre le macchine su hardware separato, ho riconfigurato i SID delle macchine e ho oscurato gli indirizzi IP dei nostri server di produzione da queste nuove macchine.
Inizialmente avevo dimenticato di bucare la macchina testimone di produzione, quindi i database sulle macchine TEST stavano ancora usando la SQL03
macchina come testimone. Notando il problema, ho deciso di riconfigurare i database su TEST per puntare al testimone TEST appena virtualizzato, chiamarlo TEST03
.
Per riconfigurare il database per utilizzare il nuovo testimone, ho inserito il seguente comando sul server primario TEST01
:
ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';
La risposta è stata inaspettata:
The ALTER DATABASE command could not be sent to the remote server instance
'TCP://TEST03.domain.inet:5022'. The database mirroring configuration was
not changed. Verify that the server is connected, and try again.
Sono rimasto molto perplesso da questo messaggio di errore poiché la configurazione funziona sulle macchine di produzione e non è stata modificata in alcun modo sulle macchine di prova.
Per farlo funzionare ho dovuto creare un LOGIN
testimone sul test:
CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR WINDOWS WITH DEFAULT_DATABASE [Master];
e GRANT
IT CONNECT
diritti sull'endpoint in questione:
GRANT CONNECT ON ENDPOINT::Mirroring TO [DOMAIN\SQLServiceAccount];
Sono stato quindi in grado di indirizzare con successo i database con mirroring sull'ambiente TEST al nuovo testimone del test.
Come posso controllare l'endpoint del testimone di produzione per vedere quale sicurezza è associata ad esso?
Presumo che ci debba essere un catalogo di sistema che posso ispezionare, tuttavia Books-on-Line non sembra avere nulla di specifico per gli endpoint e Bing sta bene, Bingless ...
Informazioni addizionali:
SELECT ep.endpoint_id, p.class_desc, p.permission_name, ep.name, sp.name
FROM sys.server_permissions p
INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
INNER JOIN sys.server_principals sp ON p.grantee_principal_id = sp.principal_id
WHERE class = '105';
ritorna:
endpoint_id class_desc permission_name endpoint_name principal_name
2 ENDPOINT CONNECT TSQL Local Machine public
3 ENDPOINT CONNECT TSQL Named Pipes public
4 ENDPOINT CONNECT TSQL Default TCP public
5 ENDPOINT CONNECT TSQL Default VIA public
E:
SELECT name, endpoint_id, protocol_desc, type_desc, role_desc
FROM sys.database_mirroring_endpoints;
Ritorna:
name endpoint_id protocol_desc type_desc role_desc
Mirroring 65536 TCP DATABASE_MIRRORING WITNESS
Non sembra esserci alcuna voce sys.server_permissions
per l'oggetto endpoint del mirroring. No major_id
e nessuna minor_id
corrispondenza 65536. Inoltre, nessuno dei database di sistema contiene alcun riferimento all'endpoint.
Sono in perdita.