AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-99868

Francesco Mantovani's questions

Martin Hope
Francesco Mantovani
Asked: 2023-08-28 19:20:46 +0800 CST

Calcule total_worker_time em minutos

  • 2

Eu tenho uma consulta fácil que pode me mostrar os 10 principais tempos decorridos por query_plan_hash e query_hash :

PRINT '-- top 10 elapsed time  by query_plan_hash and query_hash --'

SELECT TOP 10 query_plan_hash
    ,query_hash
    ,sum(execution_count) AS 'execution_count'
    ,sum(total_worker_time) AS 'total_worker_time'
    ,SUM(total_elapsed_time) AS 'total_elapsed_time'
    ,SUM(total_logical_reads) AS 'total_logical_reads'
    ,max(REPLACE(REPLACE(REPLACE(SUBSTRING(CONVERT(NVARCHAR(4000), st.[text]), qs.statement_start_offset / 2 + 1, CASE 
                            WHEN qs.statement_end_offset = - 1
                                THEN LEN(st.[text])
                            ELSE qs.statement_end_offset / 2 - qs.statement_start_offset / 2 + 1
                            END), CHAR(13), ' '), CHAR(10), ' '), CHAR(09), ' ')) AS sample_statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
GROUP BY query_plan_hash
    ,query_hash
ORDER BY sum(total_elapsed_time) DESC;
GO

Como posso calcular:

  • total_worker_time
  • total_tempo_decorrido
  • leituras_lógicas_totais

em minutos em vez de milissegundos?

query-performance
  • 2 respostas
  • 60 Views
Martin Hope
Francesco Mantovani
Asked: 2023-06-07 04:26:14 +0800 CST

Banco de Dados SQL do Azure :: SHRINKDATABASE aumenta o espaço não alocado

  • 4

Estou tentando espremer o máximo possível de bancos de dados SQL do Azure para torná-los aptos dentro de um SQL Elastic Pool.

Estou usando esta consulta que me permite comparar o espaço não alocado antes e depois da operação:

EXEC sp_spaceused @oneresultset = 1
GO

DECLARE @dbName VARCHAR(50)
SELECT @dbName = DB_NAME()
DBCC SHRINKDATABASE(@dbName, TRUNCATEONLY) 
GO

EXEC sp_spaceused @oneresultset = 1
GO

Percebi que às vezes o espaço não alocado está aumentando em vez de diminuir:

insira a descrição da imagem aqui

Isso aconteceu mais de uma vez. Eu li online que após o uso dos SHRINKDATABASEíndices pode estar em todo lugar, mas aqui parece que index_sizerealmente não mudou. E o unusedque está ao lado tem apenas 50 MB, então esse não pode ser o problema:

insira a descrição da imagem aqui

Como isso é possível?

E como fazer corretamente SHRINKDATABASEno banco de dados SQL do Azure?

Você não deve encolher bancos de dados não é uma resposta válida porque neste cenário, sim, tenho que ganhar espaço.

azure-sql-database
  • 1 respostas
  • 21 Views
Martin Hope
Francesco Mantovani
Asked: 2023-06-07 04:07:25 +0800 CST

SQL Elastic Pools: "O período de tempo limite do semáforo expirou" enquanto o índice REBUILD

  • 4

Estou reduzindo os bancos de dados que já estão em um SQL Elastic Pool.

O objetivo é encaixar o máximo possível de bancos de dados em um Elastic Pool exclusivo.

Para fazer isso, encontrei um blog que sugere executar esta consulta que basicamente faz 3 coisas:

  1. -- Etapa 1: reconstruir todos os índices
  2. -- Etapa 2: reduzir o banco de dados
  3. -- Etapa 3: reconstruir todos os índices

Aí vem a consulta:

create or alter procedure [#ForEachTable](@inputStmt nvarchar(max))
as
begin
    set nocount, xact_abort on;
    drop table if exists [#Tables];

    select concat(quotename([S].[name]), N'.', quotename([T].[name])) as [table]
    into [#Tables]
    from [sys].[schemas] as [S]
        inner join [sys].[tables] as [T]
            on [S].[schema_id] = [T].[schema_id]
    where [T].[is_ms_shipped] = 0;

    declare tables cursor local fast_forward for select [table] from [#Tables];
    open tables;

    declare @table nvarchar(max);
    fetch next from tables into @table;

    declare @total integer = (select count(*) from [#Tables]);
    declare @space integer = len(cast(@total as nvarchar(max)));
    declare @current integer = 1;
    while @@fetch_status = 0
    begin
        declare @stmt nvarchar(max) = replace(@inputStmt, N'?', @table);
        
        declare @msg nvarchar(max) = concat(
            sysutcdatetime(), N' - ',
            N'[', right(concat(N'000', @current), @space), N'/', @total, N']: ',
            N'Executing command: "', @stmt, N'".'
        );
        raiserror(@msg, 10, 1) with nowait;

        execute [sys].[sp_executesql] @stmt = @stmt;
    
        fetch next from tables into @table;
        set @current += 1;
    end;

    close tables;
    deallocate tables;
end;
go

-- Step 1: Rebuild all the indexes
raiserror(N'First rebuild...', 10, 1) with nowait;
execute [#ForEachTable] N'alter index all on ? rebuild with (online = on);';
go

-- Step 2: Shrink the database
raiserror(N'Shrink...', 10, 1) with nowait;
declare @stmt nvarchar(max) = concat(N'dbcc shrinkdatabase (', db_id(), N')');
execute [sys].[sp_executesql] @stmt = @stmt;
go

-- Step 3: Rebuild all the indexes
raiserror(N'Final rebuild...', 10, 1) with nowait;
execute [#ForEachTable] N'alter index all on ? rebuild with (online = on);';

Mas depois de várias horas, recebo esta mensagem de aviso e, em seguida, o SSMS é desligado:

First rebuild...
2023-06-06 07:39:50.2128129 - [0001/1467]: Executing command: "alter index all on [dbo].[xhisto_2018] rebuild with (online = on);".
2023-06-06 07:39:50.2440440 - [0002/1467]: Executing command: "alter index all on [dbo].[Affiliate] rebuild with (online = on);".
2023-06-06 07:39:50.2596849 - [0003/1467]: Executing command: "alter index all on [dbo].[template_step] rebuild with (online = on);".
2023-06-06 07:39:50.2753131 - [0004/1467]: Executing command: "alter index all on [dbo].[mapping_monthly] rebuild with (online = on);".
2023-06-06 07:39:50.7596876 - [0005/1467]: Executing command: "alter index all on [dbo].[statement] rebuild with (online = on);".
2023-06-06 07:39:50.7753120 - [0006/1467]: Executing command: "alter index all on [dbo].[history] rebuild with (online = on);".
2023-06-06 07:39:50.7753120 - [0007/1467]: Executing command: "alter index all on [dbo].[formula_items] rebuild with (online = on);".
2023-06-06 07:39:50.7909373 - [0008/1467]: Executing command: "alter index all on [dbo].[monthly_staging] rebuild with (online = on);".
2023-06-06 07:39:50.8221873 - [0009/1467]: Executing command: "alter index all on [dbo].[sales] rebuild with (online = on);".
Msg 121, Level 20, State 0, Line 82
A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - The semaphore timeout period has expired.)

Completion time: 2023-06-06T15:21:35.2092836+02:00

Estou executando a consulta do SSMS instalado em uma VM no Azure. Certeza que não pode ser problemas de conectividade. Isso acontece 1 vez em 2.

azure-sql-database
  • 1 respostas
  • 37 Views
Martin Hope
Francesco Mantovani
Asked: 2023-06-02 21:56:38 +0800 CST

Como reduzir os bancos de dados e reivindicar mais armazenamento

  • 5
A recompensa expira em 4 dias . As respostas a esta pergunta são elegíveis para uma recompensa de reputação de +50 . Francesco Mantovani quer chamar mais atenção para esta questão:
Tenho certeza de que não sou o primeiro a enfrentar esse problema. Como encaixar mais bancos de dados em um SQL Elastic Pool sem precisar aumentar o tier?
Esses bancos de dados não são usados ​​em sua maioria e foram esvaziados há muitos meses. Encolher não parece funcionar.
Esta pergunta foi migrada do Stack Overflow porque pode ser respondida no Database Administrators Stack Exchange. Migrado há 4 dias .

Eu criei um pool elástico SQL, mas não tenho mais armazenamento:

insira a descrição da imagem aqui

Eu corro DBCC SHRINKDATABASE (N'db1')em cada banco de dados para reivindicar espaço seguindo este guia: Reduza o tamanho do banco de dados SQL do Azure , mas parece que não ganhei nenhum espaço.

Devo usar DBCC SHRINKFILE (log, 0)?

Estou considerando o encolhimento automático, mas se a lógica por trás for a mesma do SHRINKDATABASE, não há sentido em colocá-lo no lugar.

Então, como reivindicar espaço não utilizado no SQL Elastic Pool?

azure
  • 2 respostas
  • 45 Views
Martin Hope
Francesco Mantovani
Asked: 2022-07-13 02:28:37 +0800 CST

Atualização de manutenção para SQL Server 2019 RTM GDR (KB4517790) - Erro de instalação - 0x80070643

  • 1

O SQL Server ainda está funcionando sem problemas, mas notei que tenho um alerta no Windows Update que diz:

Servicing Update for SQL Server 2019 RTM GDR (KB4517790) 
Install error - 0x80070643

insira a descrição da imagem aqui

Tentei reiniciar e atualizar várias vezes, mas ainda não está instalando.

Então baixei o KB4517790 mas quando tento instalar o serviço para com o erro:

There are no SQL Server instances or shared features that can be updated on this computer.

insira a descrição da imagem aqui

Estranho.

Clico de volta duas vezes e verifico o relatório Ver detalhado e está tudo bem:

Microsoft SQL Server 2019 - System Configuration Check Report
Nome da regra Descrição da regra Resultado Mensagem/Ação Corretiva
PatchGlobalRules: Verificações de configuração de instalação do SQL Server 2019 para o grupo de regras 'PatchGlobalRules'
# Engine_ResourceDLLUpdateRestartCheck Verifica se as DLLs de recursos compartilhados serão atualizadas, causando reinicializações para instâncias do SQL Server em cluster ativas neste nó. Não aplicável Esta regra não se aplica à configuração do seu sistema.
# AclPermissionsFacet Verifica se as chaves de registro do SQL Server são consistentes. Passado As chaves de registro do SQL Server são consistentes e podem dar suporte à instalação ou atualização do SQL Server.
# Cluster_IsLocalNodeGroupOwner Verifica se o computador local é proprietário de um grupo de cluster online para uma instância de cluster de failover que contém o serviço SQL Server, serviço Analysis Services ou um serviço genérico. Passado O computador local não é proprietário de um grupo de cluster online para uma instância de cluster de failover que contém o serviço SQL Server, serviço Analysis Services ou um serviço genérico. As instâncias do SQL Server não precisam ser colocadas offline.
# Cluster_IsOnlineIfClustered Verifica se o computador não está em cluster ou se o computador está em cluster e se o serviço de cluster está online. Passado O computador não está em cluster ou o cluster está ativo e online.
# RebootRequiredCheck Verifica se uma reinicialização pendente do computador é necessária. Uma reinicialização pendente pode fazer com que a instalação falhe. Passado O computador não requer uma reinicialização.
# ThreadHasAdminPrivilegeCheck Verifica se a conta que executa a Instalação do SQL Server tem direitos de administrador no computador. Passado A conta que executa a Instalação do SQL Server tem direitos de administrador no computador.
# WmiServiceStateCheck Verifica se o serviço WMI está iniciado e em execução no computador. Passado O serviço Windows Management Instrumentation (WMI) está em execução.

Então encontrei um comando fantástico no PowerShell que me permite recuperar todos os logs do Windows Update.

Eu digito Get-WindowsUpdateLoge um arquivo chamado WindowsUpdate.log está agora na minha área de trabalho.

Ao abri-lo, encontro:

2022/07/12 11:35:06.5502777 14516 14848 ComApi          Byte length of the input buffer for deserialization: 36024
2022/07/12 11:35:06.5518950 14516 14848 ComApi          Deserialized installable update Servicing Update for SQL Server 2019 RTM GDR (KB4517790), UpdateID = {CA10020A-BECD-4535-B06D-E30E92F01AD6.200}
2022/07/12 11:35:06.5521232 14516 14848 Test            AUTest.cab validation: Test keys are not allowed
2022/07/12 11:35:06.6192658 14516 8864  ComApi          Serializing CUpdate CA10020A-BECD-4535-B06D-E30E92F01AD6.200, Last modified time 2022-07-12T09:25:10Z
2022/07/12 11:35:06.6198416 14516 8864  ComApi          Update serialization complete. BSTR byte length = 36024
2022/07/12 11:35:21.4414511 21868 24160 Agent           Earliest future timer found: 
2022/07/12 11:35:21.4414806 21868 24160 Agent               Timer: 29A863E7-8609-4D1E-B7CD-5668F857F1DB, Expires 2022-07-12 12:48:15, not idle-only, not network-only
2022/07/12 11:35:22.4513120 21868 25304 Shared          UninitializeSUS
2022/07/12 11:35:22.4513184 21868 25304 Misc            CSusClientGlobal::DoServicePreShutdown
2022/07/12 11:35:22.4517025 21868 25304 IdleTimer       Idle timer disabled in preparation for service shutdown
2022/07/12 11:35:22.4517139 21868 25304 Misc            WUTaskManager uninit
2022/07/12 11:35:22.4517196 21868 25304 Agent           Earliest future timer found: 
2022/07/12 11:35:22.4517386 21868 25304 Agent               Timer: 7971F918-A847-4430-9279-4A52D1EFE18D, Expires 2022-07-12 10:37:14, not idle-only, network-only
2022/07/12 11:35:22.4683034 21868 25304 Misc            CreateSessionStateChangeTrigger, TYPE:2, Enable:No
2022/07/12 11:35:22.4683300 21868 25304 Misc            CreateSessionStateChangeTrigger, TYPE:4, Enable:No
2022/07/12 11:35:22.4916515 21868 25304 Misc            Agent uninit
2022/07/12 11:35:22.4916711 21868 25304 Agent           *FAILED* [8007139F] file = onecore\enduser\windowsupdate\client\engine\handler\cbs\lib\uhcbs.cpp, line = 4848
2022/07/12 11:35:22.4916832 21868 25304 DownloadManager Exiting CDownloadHandlerCallbackHandler::Uninit within timeout bounds
2022/07/12 11:35:22.4925943 21868 18656 Agent           Deployment session (host process 21868) signalled to exit...
2022/07/12 11:35:22.4926590 21868 18656 Deployment      Deployment job Id 3A2949A0-E56C-4FA1-AB01-8282F1D469DA : Destructor invoked for deployment job.
2022/07/12 11:35:22.4926639 21868 18656 Deployment      Deployment job Id 3A2949A0-E56C-4FA1-AB01-8282F1D469DA : WaitForEnd invoked for deployment job. Beginning the wait now!
2022/07/12 11:35:22.4926702 21868 18656 Deployment      Deployment job Id 3A2949A0-E56C-4FA1-AB01-8282F1D469DA : WaitForEnd for deployment job completed. Job state = Complete
2022/07/12 11:35:22.4942066 21868 25304 Misc            Reporter uninit
2022/07/12 11:35:22.4943410 21868 25304 Misc            network cost manager uninit
2022/07/12 11:35:22.4943651 21868 25304 Misc            Eventer uninit
2022/07/12 11:35:23.5095262 21868 25304 Misc            ServiceManager uninit
2022/07/12 11:35:23.5098089 21868 25304 Misc            PersistentTimeoutScheduler uninit
2022/07/12 11:35:23.5098136 21868 25304 Misc            datastore uninit
2022/07/12 11:35:23.5630608 21868 25304 Misc            setting cache uninit
2022/07/12 11:35:23.5630619 21868 25304 Misc            security checker uninit
2022/07/12 11:35:23.5630660 21868 25304 Misc            Test Hook uninit
2022/07/12 11:35:23.5630667 21868 25304 Misc            IdleTimer uninit
2022/07/12 11:35:23.5635012 21868 25304 Shared          * END * Service exit Exit code = 0x240001

Vejo que algo está caindo, mas não sei como me mover.

Já tentei reparar o SQL Server e não adiantou.

Estou na versão mais recente:

Microsoft SQL Server 2019 (RTM-CU16-GDR) (KB5014353) - 15.0.4236.7 (X64)   May 29 2022 15:55:47   Copyright (C) 2019 Microsoft Corporation  Developer Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 22000: ) (Hypervisor) 
sql-server update
  • 1 respostas
  • 404 Views
Martin Hope
Francesco Mantovani
Asked: 2022-06-18 03:23:37 +0800 CST

PolyBase :: Alterado o contexto do banco de dados para 'DWQueue'

  • 0

Estou instalando o PolyBase no SQL Server 2019 mais recente.

Durante a instalação estou ocorrendo este erro: https://www.youtube.com/watch?v=Oxd8yeiBfig (desculpem a qualidade do vídeo)

The proposed new database owner is already a user or aliased in the database. 
Changed database context to 'DWQueue'.

Sim, este erro já foi resolvido aqui:

Erro de instalação do SQL Server 2019 Polybase "O novo proprietário do banco de dados proposto já é um usuário ou um alias no banco de dados"

Isso significa para mim que os administradores não podem instalar o PolyBase.

Existe alguma saída sem deixar cair o meu Administrator?

sql-server polybase
  • 1 respostas
  • 34 Views
Martin Hope
Francesco Mantovani
Asked: 2022-06-03 01:44:18 +0800 CST

DB2 no Docker :: IBM Data Studio avisa erro ao criar novo banco de dados

  • 0

Segui este guia simples e consegui instalar o DB2 no Docker.

Agora eu gostaria de importar um banco de dados de exemplo para brincar.

Então abro o IBM Data Studio, clico com o botão direito do mouse na instância > Novo banco de dados... , preencho com meu nome de usuário e senha mas aparece um erro:

O sistema não pode verificar a instância que você especificou. Insira um nome de instância válido ou clique no botão ao lado do campo Nome da instância e selecione um da lista. com.ibm.datatools.adm.explorer.ui.model.InstanceException: Ocorreu um erro interno durante: "Verificando a instância db2inst1 no sistema 192.168.1.44.".

insira a descrição da imagem aqui

Se eu expandir o erro para obter mais detalhes, vejo:

'Verificando instância db2inst1 no sistema 192.168.1.44.' encontrou um problema.

Ocorreu um erro interno durante: "Verificando a instância db2inst1 no sistema 192.168.1.44.".

Ocorreu um erro interno durante: "Verificando a instância db2inst1 no sistema 192.168.1.44.".

com.ibm.db2.das.core.DasMessageIdentifier (falha de inicialização)

insira a descrição da imagem aqui

Um mergulho na documentação oficial me leva a essa solução, mas não acho que esse possa ser o problema.

O que me intriga é o 'ponto' ( .) após o endereço IP. Pode ser este o erro?

insira a descrição da imagem aqui

Ou existe alguma outra maneira de importar um banco de dados de amostra do IBM Data Studio?

db2 db2-luw
  • 1 respostas
  • 71 Views
Martin Hope
Francesco Mantovani
Asked: 2022-02-09 05:20:51 +0800 CST

SQL Server :: Quantas páginas de 8K são tomadas por este registro?

  • 3

Eu gostaria de ver quantas páginas de 8K são tomadas por um registro específico.

Se você executar esta consulta no AdventureWorks2019:

SELECT ProductID
    ,Name
    ,DATALENGTH(Name) AS SizeInBytes
    ,LEN(Name) AS NumberOfCharacters
FROM Production.Product
ORDER BY 1

Você pode ter uma lista de mordidas feitas por cada registro:

ID do produto Nome SizeInBytes Número De Caracteres
1 Corrida Ajustável 30 15
2 Esfera de rolamento 24 12
3 Rolamento de esferas BB 30 15
4 Rolamentos de fone de ouvido 42 21
316 Lâmina 10 5

Como posso adicionar uma coluna com o número de páginas ocupadas por esse registro?

Claro que posso fazer, DATALENGTH(Name) / 8 AS PagesTakenmas gostaria de saber se existe algum comando que me permita encontrar o número de páginas através de um arquivo SELECT.

sql-server t-sql
  • 1 respostas
  • 902 Views
Martin Hope
Francesco Mantovani
Asked: 2021-08-17 07:00:53 +0800 CST

Quais são os arquivos .BCP dentro de um arquivo .bacpak?

  • 4

Mergulhando em dba.stackexchange.com encontrei uma boa resposta que me ensina como abrir um .bacpacarquivo com o File Explorer.

Eu tentei com o banco de dados AdventureWorks2008R2e tudo o que fiz foi:

  1. Salve o banco de dados como .bacpacarquivo
  2. Renomeie a extensão do arquivo para.zip
  3. Descompacte-o

E pronto, você pode ver as tabelas do banco de dados como pastas e dentro de cada pasta você pode ver os dados brutos.

insira a descrição da imagem aqui

Mas quando abro a pasta Person.Address, vejo que há 38 arquivos nela com extensão .BCP.

insira a descrição da imagem aqui

No início eu ensinei que eram as páginas em que os dados são divididos. Mas essas não podem ser páginas porque pesam cerca de 67KB. As páginas devem pesar 8KB.

Então eu verifiquei o número de páginas com esta consulta:

-- Total # of pages, used_pages, and data_pages for a given heap/clustered index
SELECT 
    t.NAME AS TableName,
    p.rows AS RowCounts,
    SUM(a.total_pages) AS TotalPages, 
    SUM(a.used_pages) AS UsedPages, 
    (SUM(a.total_pages) - SUM(a.used_pages)) AS UnusedPages
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
WHERE 
    t.NAME NOT LIKE 'dt%' 
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255 
GROUP BY 
    t.Name, p.Rows
ORDER BY 
    t.Name

E descobri que a Person.Addresstabela tem 689páginas.

Então, quais são esses 38 .BCParquivos?

sql-server t-sql
  • 1 respostas
  • 643 Views
Martin Hope
Francesco Mantovani
Asked: 2021-02-13 14:12:18 +0800 CST

O design de banco de dados Star/Snowflake é bom para aplicativos? Qual é a alternativa?

  • 0

Preciso resolver um exercício para uma empresa farmacêutica, eles me pedem para criar uma estrutura de banco de dados do zero a partir de algumas informações.

Porque quero que seja escalável e "à prova de futuro" decidi seguir a star/snowflakeestrutura. Por enquanto parece mais estrela do que floco de neve mas a ideia está aí. Tenho uma dúvida em particular sobre a tabela de fatos principal ( estudo ) e como representar o status da tabela de dimensões .

Cheguei a 2 opções:

  • OPÇÃO 1: Estudo da Tabela de Fatos > Chave Estrangeira > Contrato da Tabela de Dimensões > Chaves Estrangeiras > Status da Tabela de Dimensões .

Assim, passamos por duas Tabelas de Dimensões para representar o Status na Tabela de Fatos. Eu vou fazer isso através de um JOINem um viewou qualquer outra coisa...

insira a descrição da imagem aqui

  • OPÇÃO 2: Estudo da Tabela de Fatos > Chave Estrangeira > Status da Tabela de Dimensões .

Desta forma, vinculamos diretamente a Tabela de Fatos ( Estudo ) ao Status da Tabela de Dimensões .

insira a descrição da imagem aqui

Devo optar pela Opção 1 ou Opção 2 ?

Tenho medo de vincular muitas tabelas de dimensões à tabela de fatos. Esta é a primeira vez que tento criar uma estrutura de banco de dados.

Qualquer conselho é bem-vindo, qualquer sugestão é bem-vinda, especialmente de arquitetos de banco de dados experientes, mas também de amadores.

obrigada

EDIT: adicionando mais algumas informações

Obrigado @AntC por sua pergunta. Na verdade, este não é um cenário de Data Warehouse, o cenário é o de uma empresa farmacêutica que precisa de um novo software para rastrear seu ensaio clínico.

Mas é claro que os esquemas mais conhecidos são Star/Snowflake e não quero usar nenhum esquema hierárquico. Ao mesmo tempo, quero evitar formas como triângulo, diamante, círculo, porque mesmo que agora existam apenas 100 usuários que saibam como será esse banco de dados em 10 anos. A ideia é moldar algo para o longo prazo e na minha opinião a forma Estrela/Floco de Neve é ​​escolhida também para aplicação normal até onde eu sei.

relational-theory architecture
  • 1 respostas
  • 106 Views
Martin Hope
Francesco Mantovani
Asked: 2020-08-07 02:10:12 +0800 CST

SQL Server :: como mover a coluna de código do país para outra tabela?

  • 0

Tenho 2 tabelas:

  • tbl_Countries: 250 valores, com colunas como CountryName(Afeganistão), TwoCharCountryCode(AF), ThreeCharCountryCode(AFG).

Assim:

CountryName    TwoCharCountryCode ThreeCharCountryCode 
Afghanistan    AF                 AFG
Aland Islands  AX                 ALA
Albania        AL                 ALB
Algeria        DZ                 DZA
American Samoa AS                 ASM
Andorra        AD                 AND
Angola         AO                 AGO

e

  • population_by_country_2020: 235 valores que tem a coluna Country_or_dependency(Afeganistão), mas falta o CHARcódigo do país 2 e 3.

Assim:

CountryName    TwoCharCountryCode ThreeCharCountryCode 
Afghanistan    NULL               NULL
Albania        NULL               NULL
Algeria        NULL               NULL
American Samoa NULL               NULL
Andorra        NULL               NULL
Angola         NULL               NULL
Anguilla       NULL               NULL

...sim, porque eles têm valores diferentes eles nunca vão combinar perfeitamente, mas eu posso fazer aqueles que errarem com as mãos.

O que eu quero fazer no geral é passar para AFa AFGlinha 'Afeganistão'.tbl_Countriespopulation_by_country_2020

insira a descrição da imagem aqui

Como arquivar isso?

sql-server t-sql
  • 1 respostas
  • 81 Views
Martin Hope
Francesco Mantovani
Asked: 2019-11-30 05:39:05 +0800 CST

Como manter uma consulta que é executada para sempre?

  • -1

Eu gostaria de executar uma consulta que encontra números primos e gostaria de executá-la para sempre.

@Solomon Rutzky nesta página Números primos em um determinado intervalo , nos dão um bom exemplo da peneira de Eratóstenes .

DECLARE  @RangeStart INT = 1,
         @RangeEnd INT = 100000;
DECLARE  @HowMany INT = CEILING((@RangeEnd - @RangeStart + 1) / 2.0);

;WITH frst AS
(
    SELECT  tmp.thing1
    FROM        (VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0), (0)) tmp(thing1)
), scnd AS
(
    SELECT  0 AS [thing2]
    FROM        frst t1
    CROSS JOIN frst t2
    CROSS JOIN frst t3
), base AS
(
    SELECT  TOP( CONVERT( INT, CEILING(SQRT(@RangeEnd)) ) )
            ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS [num]
    FROM        scnd s1
    CROSS JOIN  scnd s2
), nums AS
(
    SELECT  TOP (@HowMany)
            (ROW_NUMBER() OVER (ORDER BY (SELECT 1)) * 2) + 
                (@RangeStart - 1 - (@RangeStart%2)) AS [num]
    FROM        base b1
    CROSS JOIN  base b2
), divs AS
(
    SELECT  [num]
    FROM        base b3
    WHERE   b3.[num] > 4
    AND     b3.[num] % 2 <> 0
    AND     b3.[num] % 3 <> 0
)
SELECT  given.[num] AS [Prime]
FROM        (VALUES (2), (3)) given(num)
WHERE   given.[num] >= @RangeStart
UNION ALL
SELECT  n.[num] AS [Prime]
FROM        nums n
WHERE   n.[num] BETWEEN 5 AND @RangeEnd
AND     n.[num] % 3 <> 0
AND     NOT EXISTS (SELECT *
                    FROM divs d
                    WHERE d.[num] <> n.[num]
                    AND n.[num] % d.[num] = 0
                    );

Assim, podemos facilmente gerar uma lista de todos os números primos de 0 a 100.

Mas digamos que eu queira que a consulta seja executada pelos próximos 20 anos, então defino como limite um número muito grande:

DECLARE  @RangeStart INT = 1,
         @RangeEnd INT = 100000000000000000000000000000000000000000000000000;

E é aí que vem o problema: como manter essa consulta pelos próximos 20 anos?

Porque a Peneira de Eratóstenes tem uma peculiaridade:

Se for interrompido, você deve reiniciar desde o início.

Então minhas dúvidas começam aqui:

  • Como posso mudar a CPU, atualizar a RAM, mudar o disco rígido, etc...
  • Como posso gerenciar um cenário de desastre de failover para evitar que esse script pare?
  • O failover garantirá que a consulta não será interrompida?
  • Redundância de nuvem e failover para diferentes provedores (Azure / AWS / GCE) isso garantirá que o script não pare?
  • E se o failover for do Azure para AWS em 2 partes diferentes do globo? Esse failover manterá o procedimento armazenado em execução?

E agora a parte de recuperação de desastres:

  • Posso fazer um backup, digamos, todo mês, do status desse procedimento armazenado e, eventualmente, retomar a partir dessa imagem?
  • Se eu executar o procedimento armazenado em uma máquina virtual e tirar instantâneos, posso retomar o procedimento armazenado?

Sei com certeza que alguém está fazendo isso: este banco de dados online de números primos fatorados http://factordb.com/status.php conseguiu aumentar de 200 MB (em 2014) para quase 800 MB hoje (2019).

insira a descrição da imagem aqui

t-sql failover
  • 3 respostas
  • 237 Views
Martin Hope
Francesco Mantovani
Asked: 2018-09-25 12:49:03 +0800 CST

T-SQL: como usar SUM() com GROUP BY

  • -3

Tenho uma dúvida muito básica:

Eu tenho este código que funciona e me retorna 23 linhas :

select 
Issue_ID
,sum(HoursSpent) as TimeSpent
--,DateClosed 
from SixMonthsReview
where StaffAssigned = 'Teddy Bear'
and DateClosed between '2018-07-01 06:36:26.790' and '2018-08-01 06:36:26.790'
group by Issue_ID

Mas se eu descomentar a linha 4, recebo um erro:

Msg 8120, Level 16, State 1, Line 4
Column 'SixMonthsReview.DateClosed' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

então eu adiciono DateClosed, GROUP BYmas agora 40 linhas são retornadas e posso ver duplas.

Onde estou errado?

sql-server t-sql
  • 1 respostas
  • 1445 Views
Martin Hope
Francesco Mantovani
Asked: 2018-03-13 00:34:23 +0800 CST

T-SQL: Como criar um trabalho que é executado mensalmente

  • 0

Já sei como agendar trabalhos mensais usando SQL Server Agent > Jobs, agora gostaria de aprender como agendar esse trabalho usando T-SQL.

Eu sei como agendar um trabalho diariamente em um horário específico:

CREATE PROCEDURE MyTask
 AS
BEGIN  
    SET NOCOUNT ON;
    -- Now is set to run evry day at 23:00
    -- But I need to run it every 1th of the month 
    declare @delayTime nvarchar(50)
    set @delayTime = '23:00'

    while 1 = 1
    begin
        waitfor time @delayTime 
        begin
            -- Here the query I want to run every month
            select * from AdventureWorks2012.dbo.AWBuildVersion;
        end
    end
END

-- Sets stored procedure for automatic execution.
sp_procoption    @ProcName = 'MyTask',
                @OptionName = 'startup',
                @OptionValue = 'on' 

Neste guia da Microsoft vejo que posso usar @freq_type = 16, mas não sei como configurá-lo e um exemplo seria muito apreciado

sql-server stored-procedures
  • 2 respostas
  • 7263 Views
Martin Hope
Francesco Mantovani
Asked: 2018-03-12 23:49:24 +0800 CST

Encontre um valor específico de tabela e coluna em todos os bancos de dados

  • 1

Esta é uma pergunta sobre lógica que pode me ajudar a entender mais como iterar em meus bancos de dados.

No meu servidor tenho vários bancos de dados AdventureWorks*:

insira a descrição da imagem aqui

Eu tenho uma consulta que me ajuda a percorrer todos os meus bancos de dados, AdventureWorks * e não:

CREATE TABLE #LIst_DB (name nvarchar(128))

INSERT INTO #LIst_DB 

select name from  sys.databases
WHERE database_id > 4
AND state = 0;

select * from #LIst_DB

DROP TABLE #LIst_DB

Para cada banco de dados AdventureWorks* que desejo listar AWBuildVersionao lado de cada banco de dados:

insira a descrição da imagem aqui

Neste ponto, estou intrigado porque há 2 problemas que não sei como resolver:

  1. Como executar um select [Database Version] from AWBuildVersionpara cada banco de dados?
  2. O que fazer se um banco de dados não tiver AWBuildVersiontabela?

Aqui encontrei esta consulta:

DECLARE @SQL NVARCHAR(max)

SET @SQL = stuff((
            SELECT '
UNION
SELECT ' + quotename(NAME, '''') + ' as Db_Name, Name collate SQL_Latin1_General_CP1_CI_AS as Table_Name
FROM ' + quotename(NAME) + '.sys.tables WHERE NAME =  @TableName '
            FROM sys.databases
            ORDER BY NAME
            FOR XML PATH('')
                ,type
            ).value('.', 'nvarchar(max)'), 1, 8, '')

--PRINT @SQL;

EXECUTE sp_executeSQL @SQL
    ,N'@TableName varchar(30)'
    ,@TableName = 'AWBuildVersion'

Isso me aproxima do meu objetivo, mas me mostra o nome da tabela AWBuildVersionenquanto preciso da coluna Versão do banco de dados = 11.0.2100.60

insira a descrição da imagem aqui

sql-server system-tables
  • 3 respostas
  • 2993 Views
Martin Hope
Francesco Mantovani
Asked: 2018-03-12 18:46:17 +0800 CST

INSERT MASTER.sys.sysdatabases resultam em uma tabela temporária

  • 2

Eu tenho essa consulta que itera todos os bancos de dados no meu SQL Server

DECLARE @DB_Name varchar(100) 
DECLARE @Command nvarchar(200)
DECLARE database_cursor CURSOR FOR 

SELECT name 
FROM MASTER.sys.sysdatabases

where name not in ('master','tempdb','model','msdb')

OPEN database_cursor

FETCH NEXT FROM database_cursor INTO @DB_Name

WHILE @@FETCH_STATUS = 0 
BEGIN 
     SELECT @Command = 'SELECT ' + '''' + @DB_Name + '''' + 'as DB_name, SF.filename, SF.size FROM sys.sysfiles SF'
     EXEC sp_executesql @Command

     FETCH NEXT FROM database_cursor INTO @DB_Name 
END

CLOSE database_cursor 
DEALLOCATE database_cursor

Mas como posso armazenar o resultado em uma tabela temporária?

sql-server temporary-tables
  • 1 respostas
  • 247 Views
Martin Hope
Francesco Mantovani
Asked: 2018-03-09 00:12:16 +0800 CST

A criação do Database Mail com T-SQL retorna "o nome principal não é válido"

  • 0

A configuração do Database Mail é muito longa.

Então eu quero criar um script que crie automaticamente para mim

DECLARE @YourEmail NVARCHAR(50) SET @YourEmail = 'MyEmail@mydomain.com' --Put here your E-mail
DECLARE @YourPassword NVARCHAR(50) SET @YourPassword = 'MyPassword' --Put here your E-mail
DECLARE @YourSMTPSserver NVARCHAR(50) SET @YourSMTPSserver = 'MySMTPserver' --Put here your SMTP Server
DECLARE @YourPort int SET @YourPort = '25' --Put here your SMTP port

-- Create a Database Mail account  
EXECUTE msdb.dbo.sysmail_add_account_sp  
    @account_name = 'SQL_Spring_Cleaning_Account',  
    @description = 'Mail account for SQL_Spring_Cleaning.',  
    @email_address = @YourEmail,  
    @replyto_address = @YourEmail,
    @display_name = 'SQL_Spring_Cleaning Mailer',  
    @mailserver_name = @YourSMTPSserver, 
    @port = @YourPort,
    @use_default_credentials = 0,
    @username = @YourEmail,
    @password = @YourPassword;


-- Create a Database Mail profile  
EXECUTE msdb.dbo.sysmail_add_profile_sp  
    @profile_name = 'SQL_Spring_Cleaning_Profile',  
    @description = 'Profile used for SQL_Spring_Cleaning mail.' ; 

-- Add the account to the profile  
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp  
    @profile_name = 'SQL_Spring_Cleaning_Profile',  
    @account_name = 'SQL_Spring_Cleaning_Account',  
    @sequence_number =1 ; 

-- Grant access to the profile to the DBMailUsers role  
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp  
    @profile_name = 'SQL_Spring_Cleaning_Profile',  
    @principal_name = 'ASPIRES3\franc',  
    @is_default = 0 ; 

Mas infelizmente o SSMS me retorna:

Msg 14607, Level 16, State 1, Procedure sysmail_verify_principal_sp, Line 49 [Batch Start Line 0]
principal name is not valid

O erro está obviamente online

@principal_name = 'ASPIRES3\franc', 

mas eu não entendo o que há de errado com isso

sql-server t-sql
  • 1 respostas
  • 1073 Views
Martin Hope
Francesco Mantovani
Asked: 2018-02-26 22:32:19 +0800 CST

SSRS: http://localhost/ReportServer acessível, mas nenhum relatório listado

  • 0

Implantei o SSRS no Windows 10 da maneira correta, acho que, pelo menos, http://localhost/ReportServer é acessível no Internet Explorer.

Como você pode ver na imagem abaixo:

  • Criei um relatório usando o SQL Server Data Tools
  • O relatório está lá, também posso ver a visualização
  • A URL do servidor de destino é http://localhost/ReportServer
  • Mas se visitar http://localhost/ReportServer não há relatório

Como isso é possível?

insira a descrição da imagem aqui

sql-server ssrs
  • 1 respostas
  • 675 Views
Martin Hope
Francesco Mantovani
Asked: 2018-02-20 13:51:26 +0800 CST

sp_helpdb: como CONVERT criou DATETIME

  • -1

Eu gosto sp_helpdb, isso me dá a chance de ter uma visão geral.

Encontrei um blog que mostra como editá-lo facilmente .

BTW, gostaria de ordenar os resultados por data de criação. Para fazer isso, tenho que CONVERTER a coluna "criada" de Apr 7 2017para 2017-04-07 00:00:00.

Então eu insiro sp_helpdbem uma tabela temporária mas minha conversão ( CONVERT(VARCHAR(10),created,120)) não está funcionando:

CREATE TABLE #db_details (name nvarchar(128), db_size nvarchar(50),owner nvarchar(128),db_id int,created varchar(128),status nvarchar(2000),compatibility_level int)

INSERT INTO #db_details EXEC sp_helpdb
SELECT *
FROM #db_details
ORDER BY  CONVERT(VARCHAR(10),created,120) asc

DROP TABLE #db_details

Estou seguindo um guia que é tão fácil! Onde estou errado?

sql-server datetime
  • 2 respostas
  • 200 Views
Martin Hope
Francesco Mantovani
Asked: 2017-09-14 16:26:47 +0800 CST

SQL Server: Como definir a hora em um formato legível por humanos

  • -3

Encontrei esta consulta útil aqui e a uso para monitorar trabalhos do SQL Server.

SELECT
sJobHis.[server],
sJobStep.database_name,
SJob.name,
SJob.enabled,
CASE WHEN SJob.enabled = 0 THEN '0'
WHEN sJobStep.subsystem = 'TSQL' AND sJobStep.command LIKE '%--%' 
AND AVG(CAST(SUBSTRING(STUFF(
            STUFF(RIGHT('000000' + CAST([sJobHis].[run_duration] AS VARCHAR(6)),  6)
                , 3, 0, ':')
            , 6, 0, ':') ,7,2) AS INT)) < 1 THEN '0'
WHEN sJobStep.subsystem = 'TSQL' AND sJobStep.command LIKE '%*/%'
AND AVG(CAST(SUBSTRING(STUFF(
            STUFF(RIGHT('000000' + CAST([sJobHis].[run_duration] AS VARCHAR(6)),  6)
                , 3, 0, ':')
            , 6, 0, ':') ,7,2) AS INT)) < 1
 THEN '0'
ELSE '1' END AS  [ActiveStep],
sLogin.name [JobOwner],
sJobHis.step_id,
sJobHis.step_name,
sJobStep.subsystem AS [CommandType],
sJobStep.command AS [Command],
sJobHis.run_date,
[sJobSch].next_run_time AS [Scheduled_Time],
--sJobHis.run_time,
--sJobHis.run_duration,
AVG( CAST( SUBSTRING(STUFF(
            STUFF(RIGHT('000000' + CAST([sJobHis].[run_duration] AS VARCHAR(6)),  6)
                , 3, 0, ':')
            , 6, 0, ':') ,4,2)AS INT))
       AS [AvgRunDuration_In_Min], 
AVG(CAST(SUBSTRING(STUFF(
            STUFF(RIGHT('000000' + CAST([sJobHis].[run_duration] AS VARCHAR(6)),  6)
                , 3, 0, ':')
            , 6, 0, ':') ,7,2) AS INT))
       AS [AvgRunDuration_In_Sec],
COUNT(*) AS [PerDay]
FROM sysjobs AS [SJob] 
LEFT JOIN sysjobhistory AS [sJobHis] ON SJob.job_id = sJobHis.job_id
LEFT JOIN sysjobsteps AS [sJobStep] ON sJobHis.job_id = sJobStep.job_id AND sJobHis.step_id = sJobStep.step_id
INNER JOIN master.dbo.syslogins [sLogin] ON SJob.owner_sid = sLogin.sid
INNER JOIN dbo.sysjobschedules [sJobSch] ON SJob.job_id = [sJobSch].job_id
WHERE  SJob.[enabled]=0 OR ( sJobHis.step_id > 0  AND (sJobHis.run_date > 20131002 AND sJobHis.run_date < 20131005)) 
GROUP BY sJobHis.[server],
sJobStep.database_name,
SJob.name,
SJob.enabled,
sLogin.name ,
sJobHis.step_id,
sJobHis.step_name,
sJobStep.subsystem ,
sJobStep.command ,
sJobHis.run_date,
[sJobSch].next_run_time
ORDER BY SJob.enabled DESC, SJob.name, sJobHis.run_date DESC

Eu gosto de ter uma visão geral do que está acontecendo no meu servidor, compre duas colunas que não significam nada para mim:

insira a descrição da imagem aqui

Eu gostaria de ter as colunas Scheduled_Timee Running_Timemais "legíveis para humanos", pois às vezes não consigo descobrir o que eles estão dizendo.

Às vezes eu vejo Scheduled_Timecomo 92000ou 121200e não tenho ideia do que isso significa.

Mesmo problema com o Running_Timequal às vezes mostra 120700ou 20000.

Não tenho ideia do que isso significa.

Eu não preciso ver os trabalhos com falha

A consulta que já tenho está perfeita, só quero formatar essas duas colunas em uma saída mais legível

sql-server jobs
  • 2 respostas
  • 775 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve