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 / dba / 问题

All perguntas(dba)

Martin Hope
fackman
Asked: 2023-08-25 11:43:01 +0800 CST

Como aumentar a sequência por condição no Oracle Database 19.x?

  • 5

Temos a tabela abaixo.

CREATE TABLE "STYLES" (
    "STYLE_CODE" CHAR(8) GENERATED ALWAYS AS
        ("COLOR"||"FEATURE"||"SIZE"||"YEAR") 
        VIRTUAL NOT NULL ENABLE, 
    "COLOR" CHAR(2), 
    "FEATURE" CHAR(2), 
    "SIZE" CHAR(2), 
    "YEAR" CHAR(2),
    "SEQ" CHAR(2), 
    CONSTRAINT "STYLE_CODE_PK" PRIMARY KEY 
        ("STYLE_CODE") USING INDEX ENABLE
    ) ;

Caso o valor de STYLE_CODE PK não esteja duplicado na tabela acima, o valor SEQ é sempre gerado como 00

Se o valor de STYLE_CODE PK for duplicado, queremos que o valor SEQ seja aumentado na ordem de 01, 02.

Eu quero encontrar uma solução. Obrigado.

oracle
  • 1 respostas
  • 23 Views
Martin Hope
snappymcsnap
Asked: 2023-08-25 04:28:22 +0800 CST

GROUP BY com múltiplas contagens

  • 5

Estou consultando uma tabela Invoice em um banco de dados MySQL 8.0.28 que é filho da tabela Customer (FK = CustomerId) e quero poder obter várias contagens com base em critérios diferentes nos últimos 30 dias, onde agrupo por o cliente e a origem da fatura. Então, se eu escrevesse como duas consultas separadas, seria assim:

/* this is just the count of all invoices in last 30 days */
SELECT i.CustomerId, i.InvoiceSource, COUNT(*) AS TotalInvoices
FROM Invoice i
WHERE i.CreatedDate BETWEEN (CURDATE() - INTERVAL 1 MONTH ) and CURDATE() 
GROUP BY i.CustomerId, i.InvoiceSource;

e

/* count of all invoices in last 30 days where the total amount exceeds 1000 */
SELECT i.CustomerId, i.InvoiceSource, COUNT(*) AS LargeInvoices
FROM Invoice i
WHERE i.CreatedDate BETWEEN (CURDATE() - INTERVAL 1 MONTH) and CURDATE() AND i.Amount > 1000
GROUP BY i.CustomerId, i.InvoiceSource;

Você entendeu, provavelmente haverá mais 2 ou 3 com critérios específicos também.

Então minhas perguntas são:

  1. em primeiro lugar, qual é a melhor abordagem e SQL para escrever isso como uma única consulta?
  2. isso começará a atrapalhar a consulta à medida que adiciono mais contagens para diferentes condições? em caso afirmativo, qual é o excesso/falta disso?
  3. O GROUP BY é o mesmo para todos. Posso movê-lo de cada subconsulta e torná-lo um group by para tudo? Não tem certeza se isso seria mais eficiente ou não?

Muito grato

mysql
  • 1 respostas
  • 18 Views
Martin Hope
Brian Estrada
Asked: 2023-08-25 01:07:54 +0800 CST

Como atualizar colunas somente na réplica

  • 6

Estou usando o MySQL 8.0.26 e tenho uma configuração de réplica primária. Meu objetivo é atualizar automaticamente uma coluna em uma réplica para o carimbo de data/hora atual quando uma nova linha é inserida ou uma linha é atualizada na tabela.

Este é o meu esquema:

CREATE TABLE `t1` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `cus_id` int unsigned NOT NULL DEFAULT '0',
  `created_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

Depois, na réplica, adicionei esta coluna e criei estes gatilhos:

ALTER TABLE t1 ADD COLUMN updated_at timestamp;

CREATE TRIGGER t1__before_insert
BEFORE INSERT ON t1
FOR EACH ROW SET NEW.updated_at = NOW();

CREATE TRIGGER t1__before_update
BEFORE UPDATE ON t1
FOR EACH ROW SET NEW.updated_at = NOW();

Mas quando tentei inserir novos dados ou atualizar uma linha existente no primário, o gatilho não foi invocado na réplica. Isso significa que a coluna atualizada_at na réplica permanece nula. Alguma idéia de como posso dizer à réplica para executar esses gatilhos ou atualizar esta coluna quando ocorre uma inserção/atualização nesta tabela?

Nota: o binlog_format é "ROW".

mysql
  • 1 respostas
  • 30 Views
Martin Hope
Artashes Khachatryan
Asked: 2023-08-24 21:02:51 +0800 CST

Compilação SQL\seg

  • 8

Eu tento carregar o teste de um procedimento armazenado de inserção simples

CREATE TABLE _test(ID BIGINT)

CREATE OR alter PROCEDURE dbo.test_sp
AS
BEGIN
    SET NOCOUNT ON;
    BEGIN
        INSERT INTO _test
        SELECT CAST(RAND() * 10000 AS BIGINT)
    END
END

Não quando executo este sp com a ferramenta SQLStress fico SQL Compilation\secigual aBatch Request\sec.

O fato interessante é que SQL Re-Compilations\secé 0.Contadores de desempenho

Ambos optimized for ad-hoce Forced parametrizationestão habilitados. A mesma imagem é mesmo se eu mudar meu sp para um simples SELECT 1. Qualquer ajuda será apreciada. Eu uso o Microsoft SQL Server 2016 (SP3) (KB5003279).

sql-server-2016
  • 1 respostas
  • 97 Views
Martin Hope
Ela
Asked: 2023-08-24 19:44:38 +0800 CST

Configuração do servidor MariaDB para migração MyISAM para InnoDB

  • 5

Por favor, ajude com a configuração do servidor MariaDB. Vejo que o buffer pool tem apenas 38% de RAM e acho que precisa ser alterado. Quero migrar todas as tabelas Aria e MyISAM para o mecanismo InnoDB. Terei RAM suficiente e o servidor MariaDB funcionará corretamente e sem travamentos? Se eu aumentar o buffer pool para 10 GB, isso será suficiente?

BATER:

free -h
             total       used       free     shared    buffers     cached
Mem:           15G        15G       607M         4K       138M       7.5G
-/+ buffers/cache:       7.5G       8.2G
Swap:         1.0G       135M       888M

Configuração do InnoDB:

> SELECT VARIABLE_NAME, SESSION_VALUE, GLOBAL_VALUE FROM   INFORMATION_SCHEMA.SYSTEM_VARIABLES WHERE   VARIABLE_NAME IN ('innodb_buffer_pool_size','innodb_additional_mem_pool_size','innodb_log_buffer_size','tmp_table_size','max_connections','sort_buffer_size','read_buffer_size','join_buffer_size','binlog_cache_size');
+-------------------------+---------------+--------------+
| VARIABLE_NAME           | SESSION_VALUE | GLOBAL_VALUE |
+-------------------------+---------------+--------------+
| BINLOG_CACHE_SIZE       | NULL          | 32768        |
| MAX_CONNECTIONS         | NULL          | 300          |
| JOIN_BUFFER_SIZE        | 262144        | 262144       |
| SORT_BUFFER_SIZE        | 2097152       | 2097152      |
| READ_BUFFER_SIZE        | 131072        | 131072       |
| TMP_TABLE_SIZE          | 16777216      | 16777216     |
| INNODB_LOG_BUFFER_SIZE  | NULL          | 16777216     |
| INNODB_BUFFER_POOL_SIZE | NULL          | 6442450944   |
+-------------------------+---------------+--------------+
8 rows in set (0,16 sec)

Dados com índices:

+--------+---------+----------+----------+------------+
| ENGINE | Data GB | Index GB | Total GB | Num Tables |
+--------+---------+----------+----------+------------+
| NULL   |    NULL |     NULL |     NULL |          8 |
| Aria   |    14.3 |      3.9 |     18.3 |          7 |
| InnoDB |    67.1 |     50.6 |    117.7 |        141 |
| MyISAM |    65.2 |     21.0 |     86.3 |         16 |
+--------+---------+----------+----------+------------+
4 rows in set (0,40 sec)
mariadb
  • 1 respostas
  • 12 Views
Martin Hope
AA.SC
Asked: 2023-08-24 17:23:52 +0800 CST

Pesquisa de texto em várias colunas sem ativar a pesquisa de texto completo

  • 5

Tenho um cenário em que precisamos ativar uma pesquisa com várias palavras-chave em um campo de texto. Esta pesquisa deve envolver a verificação das palavras-chave em várias colunas (aproximadamente 4-6) em várias tabelas (atualmente 2 tabelas).

Problema, posso construir a consulta com operadores simples "AND" "OR"

  1. Consulta na tentativa 1: retornar mais saída do que o necessário

  2. Consulta na tentativa 2: retornar registro zero na saída

  3. SAÍDA obrigatória: é a única primeira linha da saída da tentativa 1

     -- truncate table #Customer
    
     -- truncate table #FaxDocs    
    

    -- Criação de Tabela

     CREATE tABLE #FaxDocs ( [FaxDocID] INT , CustID INT,  RemoteCSID VARCHAR(20),  CSFileName VARCHAR(200))
    
     INSERT INTO #FaxDocs
    
     SELECT 1,1,'123ag','257831.PDF'
    
     UNION ALL 
    
     SELECT 2,1,'123yg','257837.PDF'
    
     UNION ALL 
    
     SELECT 3,2,'123g','257838.PDF'
    
     UNION ALL 
    
     SELECT 4,3,'123lg','257839.PDF'
    
     UNION ALL 
    
     SELECT 5,4,'123CK','257840.PDF'
    
    
    
     CREATE TABLE #Customer ( CustID INT , CFNAME VARCHAR(20),  CLNAME VARCHAR(200))
    
     insert into #Customer
    
     SELECT 1,'ABCNJSGHK', 'CDE'
    
     UNION ALL 
    
     SELECT 2,'CNJSGHK', 'CDE'
    
     UNION ALL 
    
     SELECT 3,'FGH', 'IJK'
    
     UNION ALL 
    
     SELECT 4,'LMN', 'OPQ'
    

    --- Palavra-chave da barra de pesquisa

     DECLARE @Search VARCHAR(MAX) =  'NJSGHK 257831.PDF'     
    
    
    
         --CREATE TABLE #WordsToLookUp (Item VARCHAR(257), Location INT, Sequence INT PRIMARY KEY)
    
    
    
             INSERT INTO #WordsToLookUp(Item,[Location],[Sequence])
    
             SELECT 'NJSGHK',0,1
    
             UNION ALL 
    
             SELECT '257831.PDF',8,2
    
    
    
         ----------------------------------------------------------
    
    
    
              SELECT * FROM #WordsToLookUp
    
             --truncate table  #WordsToLookUp
    
    
    
     --- Attempt 1
    
              SELECT  [FaxDocID], Customer.CustID ,ISNULL(Customer.CFNAME,'') AS [FName], ISNULL(Customer.CLNAME,'') AS [LName] ,
    
                 Faxes.CSFileName
    
                 FROM #FaxDocs Faxes
    
                 LEFT JOIN #Customer Customer ON Faxes.CustID = Customer.CustID 
    
                 left join #WordsToLookUp B on Customer.CFNAME  like '%'+ b.item+'%'
    
                 left join #WordsToLookUp c on Customer.CLNAME  like '%'+ c.item+'%'
    
                 left join #WordsToLookUp d on Faxes.RemoteCSID  like '%'+ d.item+'%'
    
                 left join #WordsToLookUp e on Faxes.CSFileName  like '%'+ e.item+'%'
    
                 WHERE Faxes.[FaxDocID] in (1,2,3,4)
    
    
    
     -- Attempt 2
    
                 SELECT  [FaxDocID], Customer.CustID ,ISNULL(Customer.CFNAME,'') AS [FName], ISNULL(Customer.CLNAME,'') AS [LName] ,
    
                 Faxes.CSFileName
    
                 FROM #FaxDocs Faxes
    
                 LEFT JOIN #Customer Customer ON Faxes.CustID = Customer.CustID 
    
                 WHERE Faxes.[FaxDocID] in (1,2,3,4)
    
                 and exists (select 1 from #WordsToLookUp b where Customer.CFNAME  like '%'+ b.item+'%')
    
                 and exists (select 1 from #WordsToLookUp c where Customer.CLNAME  like '%'+ c.item+'%')
    
                 and exists (select 1 from #WordsToLookUp d where Faxes.RemoteCSID  like '%'+ d.item+'%')
    
                 and exists (select 1 from #WordsToLookUp e where Faxes.CSFileName  like '%'+ e.item+'%')
    
sql-server
  • 1 respostas
  • 29 Views
Martin Hope
Isaac PM
Asked: 2023-08-24 13:04:15 +0800 CST

Como saber quanta memória é usada por cada usuário do banco de dados no buffer de cache?

  • 7

Usando esta consulta:

SELECT
        A.CACHE_BUFFER_TOTAL,
        B.CACHE_BUFFER_USED,
        A.CACHE_BUFFER_TOTAL - B.CACHE_BUFFER_USED AS CACHE_BUFFER_FREE
    FROM
        (SELECT BYTES / 1024 / 1024 AS CACHE_BUFFER_TOTAL FROM V$SGAINFO WHERE NAME = 'Buffer Cache Size') A,
        (SELECT (SELECT COUNT(*) FROM V$BH) * (SELECT BLOCK_SIZE FROM V$BUFFER_POOL) / 1024 / 1024 AS CACHE_BUFFER_USED FROM DUAL) B;

... posso determinar o tamanho total do cache do buffer e o total utilizado; entretanto, gostaria de saber para cada usuário quanto as consultas do usuário estão ocupando o cache do buffer.

Existe uma maneira simples de conseguir isso no Oracle 21C?

oracle
  • 1 respostas
  • 136 Views
Martin Hope
VirtualVoid
Asked: 2023-08-23 05:16:20 +0800 CST

Restaurando backup bruto antigo no MariaDB 10.8.1+ sem ib_logfile0

  • 5
Esta questão foi migrada do Stack Overflow porque pode ser respondida no Stack Exchange dos Administradores de Banco de Dados. Migrado há 4 dias .

Tentei restaurar um antigo backup bruto de bancos de dados (datadir inteiro) no MariaDB 10.11.5, mas ele não inicializou. Depois disso, encontrei as seguintes linhas no log:

[ERROR] InnoDB: File ./ib_logfile0 was not found
[ERROR] InnoDB: Plugin initialization aborted with error Generic error
[Note] InnoDB: Starting shutdown...
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[Note] Plugin 'FEEDBACK' is disabled.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

Por mais de uma década, tenho excluído arquivos de log em servidores MySQL e MariaDB para ajustar innodb-log-file-sizeou fazer backups brutos e economizar espaço. Na próxima vez que o servidor foi reiniciado, eles foram recriados automaticamente. Mas de repente, não desta vez. E tudo porque a partir da versão MariaDB 10.8.1, a presença de um ib_logfile0tornou-se obrigatória devido a múltiplas alterações ( MDEV-27199 ) e ( MDEV-14425 ). Não é mais criado automaticamente, mas estritamente necessário.

Tentei criar um arquivo de log vazio, mas aparentemente não funcionou e resultou em um erro:

[ERROR] InnoDB: ib_logfile0 is empty, and LSN is unknown.
[ERROR] InnoDB: Plugin initialization aborted with error Data structure corruption

Depois de estudar as tarefas do jira, tive a forte sensação de que não havia como "regenerar" o arquivo de log como antes. Então, minha pergunta principal é: existe alguma outra saída além de restaurar backups em uma versão mais antiga do MariaDB e fazer backup deles corretamente para versões mais recentes?

E quanto à criação desses backups "brutos" nas versões mais recentes? Eu li que em vez de excluir o log, agora você deve reduzir o tamanho do log para economizar espaço em disco. Provavelmente, agora é a única maneira?

PS É importante notar que a partir da versão 10.8.1 o tamanho do arquivo de log muda automaticamente quando você o altera na configuração. E a partir da versão 10.9.0 - mesmo em tempo de execução ( MDEV-27812 ).

mariadb
  • 1 respostas
  • 15 Views
Martin Hope
zemaj
Asked: 2023-08-24 03:10:32 +0800 CST

Maneira eficiente de determinar registros modificados desde um determinado momento

  • 5

Cenário

Eu tenho um pipeline de dados que está transmitindo para um cluster postgres. Não tenho controle sobre a fonte de dados de streaming, mas sim propriedade total do destino. Pretendo ter processos que pesquisem o banco de dados em busca de quaisquer dados pertinentes que tenham sido alterados desde a última execução e sincronizem outros sistemas (variantes, não bancos de dados).

Emitir

Infelizmente, o pipeline que grava esses registros não fornece um carimbo de data/hora preciso para a data de modificação ou qualquer tipo de nonce que possa rastrear quais registros foram alterados desde o último processo de pesquisa sincronizado.

Algumas notas extras:

  • Exclusão reversível de registros
  • O pipeline está replicando um data lake, portanto há um grande volume de dados e mudanças acontecendo o tempo todo
  • É fundamental que os processos de sincronização de votação não percam nenhuma alteração

O que eu tentei

Eu criei algumas abordagens para resolver isso, mas não tenho certeza de qual é a melhor abordagem para este caso de uso.

Abordagem 1 : adicione uma date_modifiedcoluna a cada uma das tabelas de destino e um gatilho para atualizar o carimbo de data/hora sempre que ocorrer uma atualização. Isso parece leve e simples.

Abordagem 2: a replicação lógica era atraente, mas não parecia haver uma maneira de adicionar qualquer tipo de metadado que pudesse ajudar (como o tempo de replicação).

Abordagem 3: usar uma tabela de auditoria e gatilhos que capturariam e atribuiriam um ID de evento funcionaria, mas a compensação com o desempenho é preocupante e não consigo ver diferença no uso da Abordagem 1 para este caso de uso específico.

O que espero ter respondido

Com base no exposto, parece que a resposta é simplesmente usar a Abordagem 1 . Posso então rastrear o último carimbo de data/hora que foi sincronizado usando os processos de pesquisa e simplesmente extrair registros que possuem um carimbo de data/hora posterior das tabelas.

Existem desvantagens na Abordagem 1 que não estou vendo? Ou existem outros caminhos melhores para conseguir isso?

postgresql
  • 1 respostas
  • 20 Views
Martin Hope
itsec80
Asked: 2023-08-23 16:52:27 +0800 CST

Restringindo alterações diretas nos dados do banco de dados

  • 5

É possível que o administrador do banco de dados Oracle faça alterações diretas nos dados contidos em uma linha, por exemplo, alterando uma quantidade de 50 para 500 digitando na célula do banco de dados ou executando uma consulta de atualização? Em caso afirmativo, como poderia ser restringido para que as alterações de dados só pudessem ser introduzidas através da aplicação ERP?

oracle
  • 1 respostas
  • 30 Views
Prev
Próximo

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