Windows 2022, SQL Server 2022, cluster FCI com 2 nós físicos. 5 instâncias do SQL Server em execução no cluster FCI. Preciso ter certificação TLS em execução em todas as 5 instâncias do SQL Server. Um único certificado TLS (instalado nos servidores) pode ser usado para todas as 5 instâncias ou é necessário um único certificado para cada instância?
SQL_Hacker's questions
Estou trabalhando em um pacote SSIS que atualizará os bancos de dados dev dos backups de produção. O pacote está em vigor há anos, mas estamos implantando grupos de disponibilidade na instância dev, portanto, as tarefas precisam ser alteradas para funcionar com as réplicas primárias e secundárias. Background: todas as instâncias são SQL Server 2014 SP2. Uma instância de produção (PD1), duas instâncias dev (DV3 e DV7) e uma instância de utilitário (DV1), onde o pacote SSIS é implantado no SSISDB e onde o trabalho do SQL Agent é executado. No pacote SSIS, depois que os backups completos são obtidos e colocados em um compartilhamento de rede da produção, o próximo conjunto de tarefas (em um pacote SSIS separado) precisa descobrir qual nó hospeda a réplica primária. Estou seguindo os passos listados aquipara fazer esse trabalho, e tudo funciona muito bem se for codificado (o que, é claro, não funcionará se/quando ocorrer um failover). A única maneira que consegui pensar em abordar isso é, em tempo de execução, avaliar qual instância é primária e prosseguir com as tarefas (que, a propósito, são todos objetos "Execute SQL Task" - exigindo sua própria definição de conexão ). Vi alguns exemplos de como usar expressões em ConnectionStrings e variáveis, mas não consigo descobrir como definir o valor retornado da consulta abaixo no SQL Server para retornar a instância correta para definir a string de conexão no pacote.
select cs.replica_server_name
from sys.dm_hadr_availability_replica_states rs
join sys.dm_hadr_availability_replica_cluster_states cs
on rs.replica_id = cs.replica_id
join sys.dm_hadr_name_id_map n
on rs.group_id = n.ag_id
where rs.role = 2
and n.ag_name = 'DVAG001'
Idealmente, haveria dois desses gerenciadores de conexões, um para o primário e outro para o secundário, que eu poderia usar nos objetos "Execute SQL Task". Então tudo funcionaria perfeitamente. Pode muito bem haver outras maneiras de fazer isso, mas não tenho muita experiência em SSIS ou desenvolvimento fora do TSQL.
ATUALIZAÇÃO: O processo acima é feito todos os dias... e é por isso que estou usando um pacote SSIS e SQL Agent. Assim, todo o processo tem que ser automatizado e ter todos os valores necessários - principalmente a determinação dos estados das réplicas (primário e secundário) - dentro do pacote para que nenhuma intervenção manual seja necessária.
Versões : SQL Server 2008 R2 - 2014
Estou usando uma auditoria de servidor para localizar alterações nos logons em minhas instâncias do SQL Server e gravá-las no caminho do diretório ERRORLOG. Infelizmente, nem todas as instâncias usam o mesmo caminho para o diretório ERRORLOG. Eu posso pegar o caminho usando SELECT SERVERPROPERTY('ErrorLogFileName')
, mas preciso "inserir" o valor de retorno dessa declaração em dois outros lugares. A primeira é quando estou criando a Auditoria do Servidor:
CREATE SERVER AUDIT [ServerAuditName]
TO FILE
( FILEPATH = N'C:\Program Files\Microsoft SQL Server\MSSQL\Log'
,MAXSIZE = 0 MB
,MAX_ROLLOVER_FILES = 2147483647
,RESERVE_DISK_SPACE = OFF
)
Então, eu preciso "inserir" os resultados da consulta SERVERPROPERTY em uma variável ou... algo, para que eu possa usá-lo no valor FILEPATH acima. Secundariamente, eu também preciso encontrar o caminho do diretório ERRORLOG ao ler os arquivos *.sqlaudit que o Server Audit cria. Posso usar facilmente o seguinte para obter arquivos, mas aqui também preciso "inserir" o valor do caminho do arquivo com o resultado da consulta SERVERPROPERTY:
SELECT *
FROM sys.fn_get_audit_file('Filepath\*.sqlaudit',DEFAULT, DEFAULT)
Eu tentei alguns "google-fu" e olhei para algumas funções de string, como substituir e "trim-family" ... o que não era muito relevante. Se alguém puder me ajudar ou me indicar um bom artigo ou dois sobre como conseguir isso, eu agradeceria muito.
Acabei de iniciar um novo show e descobri que duas instâncias do SQL 2012 (SP2), instaladas no Core Server 2012 R2, têm um nome diferente do servidor em que está sendo executado. Ambos são servidores virtuais. Por exemplo, o nome do servidor é Server2 e Server3 (pode ser RDP para ele e pode se conectar a ele de várias maneiras usando esse nome) e pode até se conectar ao SSMS de outras máquinas. No entanto, quando executo @@Servername, ele retorna "CO-SQLTEMPLATE" - em ambos os servidores. O motivo disso ser problemático é porque essas duas instâncias participam da replicação AlwaysOn e há vários problemas... o mais evidente é que os backups automatizados não funcionarão. Usando as systables e funções do HADR, ele mostra que nenhuma das réplicas é "primária" ou todas são (!!!). Além disso, não está claro se a replicação está realmente funcionando.
Estive procurando no Google e não consigo encontrar uma fonte que indique de onde o SQL Server obtém seu nome de instância durante a instalação. Eu nunca vi esse problema antes, e é realmente bizarro.
Este é o meu último esforço para tentar encontrar uma solução antes de limpar os 2 servidores e começar do zero (o que, obviamente, prefiro não fazer).
Estou usando sp_BlitzCache
version 4.1 (20161210)
e executando em um 2008R2 instance (10.5.4042)
.
Se eu executar o sp sem o @OutputDatabaseName, @OutputSchemaName, and @OutputTableName
, funciona bem. No entanto, quando defino esses valores, ele percorre seu processo e no final, e aparece o erro:
"A lista de seleção para a instrução INSERT contém mais itens do que a lista de inserção. O número de valores SELECT deve corresponder ao número de colunas INSERT."
A declaração específica que estou executando é:
EXEC [dbo].[sp_BlitzCache] @OutputDatabaseName = 'Maintenance_Stats'
,@OutputSchemaName = 'dbo'
,@OutputTableName = 'BlitzCacheResults'
O banco de dados, o esquema e a tabela já existem, mas não possuem registros. Então... em algum lugar no código sp, ele criou a tabela, mas está tentando colocar muitos valores na tabela.
Estou usando isso para tentar solucionar um problema de travamento do aplicativo (SCCM) e, conforme recomendado, criei um trabalho do SQL Agent que o suporte técnico pode executar quando encontrar o problema (é intermitente), mas tentei executá-lo sozinho e falhou com o erro acima.