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
The Betpet
Asked: 2025-01-16 16:47:50 +0800 CST

Converter variáveis ​​numeradas em uma linha de tabela

  • 6

Estou trabalhando com um sistema legado onde um procedimento armazenado é chamado e dezenas (literalmente) de variáveis ​​são passadas. Os dados precisam ser processados ​​da mesma maneira, mas atualmente tenho que copiar/colar o código com uma alteração numérica dezenas de vezes.

O que quero fazer é colocar os dados em uma variável de tabela e usá-la para criar um loop que execute o mesmo código, mas com uma linha diferente da tabela.

Então, em resumo, eu tenho variáveis

TipoA1,
TipoB1,
TipoC1,
TipoD1,
etc.

Que eu quero armazenar temporariamente como

Índice Tipo A Tipo B Tipo C TipoD
1 TipoA1 TipoB1 TipoC1 TipoD1
2 TipoA2 TipoB2 TipoC2 TipoD2

Isso deve me permitir fazer um loop, extrair uma linha para variáveis ​​genéricas e executar o processo repetido.


Você quer dizer que você processaria os valores (1, 'TypeA1'), (1, 'TypeB1'), (2, 'TypeA1') ... no loop executado?

Não, mais processe como (1, TypeA, TypeB, SomeValue, AnotherThing). Tenho uma centena desses para processar, mas obtenho os valores separadamente e apenas o valor numérico da variável me diz qual é.

Tenho muitas variáveis ​​que são agrupadas apenas por número. Preciso ser capaz de fazer a mesma tarefa para cada grupo numerado de variáveis, ou seja,

insert into X 
values (1, TypeA, TypeB, TypeC, TypeD, Something, AnotherThing)

O aplicativo de chamada não consegue fazer o loop porque é antigo e uma caixa preta. Não consigo entrar no capô.

sql-server
  • 1 respostas
  • 83 Views
Martin Hope
FromLake
Asked: 2025-01-16 11:42:00 +0800 CST

Instância extra do MariaDB ou mysql no Debian Linux não funciona quando altero um nome durante a configuração

  • 5

-- EDITAR -- Conclua a configuração na resposta abaixo. -- EDITAR --

Quando sigo um artigo (link abaixo) sobre como configurar um MariaDB ou Mysql extra no Linux, e funciona. No entanto, não gosto dos nomes "mysql1" e "mysql2" para nomes de instância. Mas quando altero apenas esse aspecto do código, o servidor não instala quando executo o comando start.

Eu escrevi ambas as configurações aqui abaixo para facilitar a comparação: A que funciona onde 2 instâncias estão sendo feitas, e a que no final das contas não funciona. Eu adoraria muito descobrir como fazer a que não funciona, funcionar. Sua ajuda é muito apreciada!

- 1) Datadir (configuração que funciona):

sudo mkdir -p -v /var/lib/mysql{1..2}
sudo chown mysql:mysql -v /var/lib/mysql{1..2}

- 1) Datadir (configuração que não funciona):

sudo mkdir -p -v /var/lib/mysqlTest
sudo chown mysql:mysql -v /var/lib/mysqlTest

- 2) Diretório de soquetes (configuração que funciona):

sudo mkdir -p -v /usr/local/mysql/mdb{1..2}
sudo chown -v -R mysql:mysql /usr/local/mysql/mdb{1..2}

- 2) Diretório de soquete (configuração que não funciona):

sudo mkdir -p -v /usr/local/mysql/mdbTest
sudo chown -v -R mysql:mysql /usr/local/mysql/mdbTest

- 3) Diretório de log (configuração que funciona):

sudo mkdir -p -v /var/log/mysql{1..2}
sudo chown -v -R mysql:mysql /var/log/mysql{1..2}

- 3) Diretório de log (configuração que não funciona):

sudo mkdir -p -v /var/log/mysqlTest
sudo chown -v -R mysql:mysql /var/log/mysqlTest

- 4) Eu crio o seguinte arquivo

"mysqld_multi_cls.cnf"

Localizado em: /etc/mysql/

- 5) conteúdo (configuração que funciona):

# Configuration Settings for mysqld_multi , as well as separate instances. 
#
[mysqld_multi]
mysqld       = /usr/bin/mysqld_safe
mysqladmin   = /usr/bin/mysqladmin

[mysqld1]
socket          = /tmp/mysql.sock1
port            = 3307
pid-file        = /usr/local/mysql/mdb1/ansible-host1.pid1
datadir         = /var/lib/mysql1
log-error       = /var/log/mysql1/error.log
log_bin         = /var/lib/mysql1/mdb1-mysql-bin.log
server-id       = 1
expire_logs_days = 72
sync_binlog     = 1
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT      
binlog_format       = mixed
gtid_strict_mode    = 1

[mysqld2]
socket          = /tmp/mysql.sock2
port            = 3308
pid-file        = /usr/local/mysql/mdb2/ansible-host1.pid2
datadir         = /var/lib/mysql2
log-error       = /var/log/mysql2/error.log
log-bin         = /var/lib/mysql2/mdb2-mysql-bin.log
server-id       = 2
expire_logs_days = 64
sync_binlog     = 1
innodb_flush_log_at_trx_commit  = 1
innodb_flush_method             = O_DIRECT  
binlog_format                   = mixed
gtid_strict_mode                = 1

- 5) conteúdo (configuração que, no final das contas, não funciona):

# Configuration Settings for mysqld_multi , as well as separate instances. 
#
[mysqld_multi]
mysqld       = /usr/bin/mysqld_safe
mysqladmin   = /usr/bin/mysqladmin

[mysqlTest]
socket          = /tmp/mysql.sock3
port            = 3309
pid-file        = /usr/local/mysql/mdbTest/ansible-host1.pid3
datadir         = /var/lib/mysqlTest
log-error       = /var/log/mysqlTest/error.log
log_bin         = /var/lib/mysqlTest/mdbTest-mysql-bin.log
server-id       = 3
expire_logs_days = 72
sync_binlog     = 1
innodb_flush_log_at_trx_commit  = 1
innodb_flush_method             = O_DIRECT      
binlog_format                   = mixed
gtid_strict_mode                = 1

-6) E agora iniciamos o servidor:

sudo mysqld_multi --defaults-file=/etc/mysql/mysqld_multi_cls.cnf --log=/etc/mysql/multi_ins.log start      
  • Se feito da primeira vez, o banco de dados agora está sendo instalado e todos ficam felizes.
  • Mas se feito no 2º solar, onde eu apenas alterei o nome e criei uma única instância (extra), nada acontece.

O que estou perdendo?

Abraços e muito obrigado!

Aqui está o artigo no Linkedin por Michael Amadi: https://www.linkedin.com/pulse/running-multiple-instances-mariadb-single-server-different-amadi

mysql
  • 1 respostas
  • 32 Views
Martin Hope
Mike
Asked: 2025-01-16 07:47:52 +0800 CST

Por que o PostgreSQL v10 e v16 têm comportamento ligeiramente diferente para pg_dump, e o dump SQL do v10 apresenta um erro no v16?

  • 7

Temos um arquivo SQL despejado do PostgreSQL v10 pelo seguinte comando localmente no host:

pg_dump \
  "postgres://db_user:db_pass@localhost:5432/database" \
  --file "pgsql-dump-v10.sql" \
  --format=p --no-owner --no-privileges

Copiamos o arquivo de despejo para outro PostgreSQL da v16 e importamos os dados chamando o seguinte comando localmente:

psql \
  "postgresql://db_user:db_pass@localhost/database" \
  --file pgsql-dump-v10.sql

E, aparece a seguinte mensagem de erro:

psql:/xxx/pgsql-dump-v10.sql:30: ERRO: deve ser o proprietário da extensão plpgsql

E o culpado é a Linha 30, pssql-dump-v10.sqlcomo segue:

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';

O erro não parece ser crítico, então chamamos o mesmo pg_dumpcomando na instância do PostgreSQL v16 e comparamos os dois dumps como na captura de tela abaixo.

Além disso, ao executar pgsql-dump-v16.sqlno PostgreSQL v16, não há nenhum erro.

Nossa pergunta:

Embora não seja crítico, queremos resolver o erro na configuração do comentário da extensão. E agradecemos muito quaisquer dicas e sugestões.

Além disso, se o erro realmente tiver mais impacto do que vimos, por favor, nos lembre também. Estamos nos preparando para uma operação de produção.

Obrigado.

Detalhes:

Diferença dos arquivos SQL despejados pelo PostgreSQL v10 e v16

postgresql
  • 2 respostas
  • 189 Views
Martin Hope
J. Mini
Asked: 2025-01-16 03:53:20 +0800 CST

Quais são as desvantagens da Recuperação Acelerada de Banco de Dados, supondo que o Isolamento de Snapshot de Leitura Confirmada esteja habilitado?

  • 6

Quando olho a documentação para Accelerated Database Recovery e Read Committed Snapshot Isolation, parece que todas as desvantagens do Accelerated Database Recovery são compartilhadas pelo Read Committed Snapshot Isolation. Então, supondo que eu já tenha o Read Committed Snapshot Isolation habilitado, quais são as desvantagens do Accelerated Database Recovery?

Suspeito que não seja coincidência que tanto o Accelerated Database Recovery quanto o Read Committed Snapshot Isolation estejam habilitados por padrão no Azure. Suponha que seja o SQL Server 2019 ou o SQL Server 2022.

sql-server
  • 1 respostas
  • 44 Views
Martin Hope
Alex
Asked: 2025-01-15 23:54:27 +0800 CST

Como usar índice duplo (composto) para duas tabelas?

  • 5

Tenho uma dúvida sobre o uso de índices compostos em uma tabela. Tenho duas tabelas:

CREATE TABLE `test_table` (
  `user_id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY `user_id` (`user_id`)
);

CREATE TABLE `test_table_2` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `id_user` int unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_user` (`id_user`,`dt`)
);

Estou tentando usar um índice composto em junções e também em subconsultas, no entanto, não consigo descobrir uma coisa. Por que, não importa o quanto eu tente, apenas o lado esquerdo do índice é obtido? Entendo que uma correspondência exata é importante para uma junção, mas não entendo o fato de que em uma amostra em uma tabela com um índice, ao usar WHERE de dois campos, mesmo usando um intervalo, o índice completo é obtido.

EXPLAIN SELECT 
*
FROM test_table_2 t
WHERE t.id_user = 1 AND t.dt >= GREATEST('2024-09-10','2024-09-20');

primeiro explique

EXPLAIN 
SELECT 
    t.user_id, 
    t.dt, 
    MIN(tt2.id) AS mn_id
FROM test_table t
    JOIN test_table_2 tt2 ON t.user_id= tt2.id_user
WHERE tt2.id_user = t.user_id 
    AND tt2.dt >= GREATEST(t.dt, '2024-01-01')
GROUP BY 1,2;

segundo explicar

mysql
  • 1 respostas
  • 40 Views
Martin Hope
Toriqul Mahal
Asked: 2025-01-15 19:09:47 +0800 CST

Como posso fazer a sincronização em tempo real entre o servidor principal e o servidor de destino?

  • 4

Eu tive um problema sério, eu tinha inserido alguns dados na tabela do servidor principal para o servidor local através da técnica SSIS ETL. Tudo está perfeito até o agendamento. Mas o problema principal é, se na tabela do servidor principal se excluirmos ou atualizarmos uma linha contra qualquer id, esses dados não serão excluídos ou atualizados no servidor local. Como podemos resolver esse problema? Quero dizer, o que acontece no servidor principal, a mesma coisa deve acontecer no servidor local após o agendamento ocorrer no servidor local. Como posso conseguir isso? Por favor, desculpe pelos erros gramaticais e sou novato aqui

sql-server
  • 1 respostas
  • 42 Views
Martin Hope
MAW74656
Asked: 2025-01-15 01:58:19 +0800 CST

Como alterar o tipo de licença do SQL Server do Software Assurance?

  • 9

Quando instalei o SQL Server, me disseram para usar a primeira opção ("...com Software Assurance..."). Agora estou sendo solicitado a mudar isso. Sei como mudar a chave do produto mais tarde, mas não essa opção. Qual é o efeito dessas caixas de seleção e como posso mudar isso sem reinstalar do zero?

insira a descrição da imagem aqui

sql-server
  • 1 respostas
  • 61 Views
Martin Hope
ttugates
Asked: 2025-01-15 01:00:21 +0800 CST

Melhorias de desempenho para banco de dados SQL somente leitura que só é restaurado a partir de backup

  • 5

Recebo um .bakarquivo de terceiros mensalmente e crio 1 banco de dados para cada recibo.

O tamanho do arquivo .bak é ~1Gb.

Esses dados são apenas para consulta e eu nunca escrevo neles. Há alguma medida que eu possa tomar para melhorar o desempenho para esse cenário?

Estou considerando:

ALTER DATABASE [TESTDB] SET READ_ONLY WITH NO_WAIT

Devo considerar:

  • Encolher arquivo de log ou qualquer operação de arquivo de log?
  • Faça qualquer coisa com índices como reorganize-an-index

Estou usando a versão atual do SQL Express.

sql-server
  • 3 respostas
  • 70 Views
Martin Hope
Suleyman Essa
Asked: 2025-01-14 22:41:23 +0800 CST

Quando uma subconsulta escolhe uma junção como operador lógico?

  • 7

então a simplificação no algebrizador deve converter algumas das subconsultas em junções internas ou externas. por exemplo, eu tentei isso

DBCC TRACEON(3604)
USE ContosoRetailDW
BEGIN TRAN 
SELECT ProductKey
FROM DimProduct 
WHERE ProductKey IN (SELECT ProductKey 
                     FROM FactSales
                     WHERE SALESKEY <2) 
OPTION(RECOMPILE,QUERYTRACEON 8605)
COMMIT TRAN 

a saída foi

*** Converted Tree: ***
    LogOp_Project QCOL: [ContosoRetailDW].[dbo].[DimProduct].ProductKey

        LogOp_Select

            LogOp_Get TBL: DimProduct DimProduct TableID=117575457 TableReferenceID=0 IsRow: COL: IsBaseRow1000 

            ScaOp_SomeComp 2

                ScaOp_Identifier QCOL: [ContosoRetailDW].[dbo].[DimProduct].ProductKey

                LogOp_Project

                    LogOp_Select

                        LogOp_Get TBL: FactSales FactSales TableID=1602104748 TableReferenceID=0 IsRow: COL: IsBaseRow1002 

                        ScaOp_Comp x_cmpLt

                            ScaOp_Identifier QCOL: [ContosoRetailDW].[dbo].[FactSales].SalesKey

                            ScaOp_Const TI(int,ML=4) XVAR(int,Not Owned,Value=2)

                    AncOp_PrjList 

        AncOp_PrjList 

*******************

se eu reescrever assim

BEGIN TRAN;
SELECT DISTINCT dp.ProductKey
FROM DimProduct dp
JOIN FactSales fs ON dp.ProductKey = fs.ProductKey
WHERE fs.SalesKey < 2
OPTION (RECOMPILE, QUERYTRACEON 8605);
COMMIT TRAN;

Eu entendo

*** Converted Tree: ***
    LogOp_GbAgg OUT(QCOL: [dp].ProductKey,) BY(QCOL: [dp].ProductKey,)

        LogOp_Project

            LogOp_Project QCOL: [dp].ProductKey

                LogOp_Select

                    **LogOp_Join**

                        LogOp_Get TBL: DimProduct(alias TBL: dp) DimProduct TableID=117575457 TableReferenceID=0 IsRow: COL: IsBaseRow1000 

                        LogOp_Get TBL: FactSales(alias TBL: fs) FactSales TableID=1602104748 TableReferenceID=0 IsRow: COL: IsBaseRow1001 

                        ScaOp_Comp x_cmpEq

                            ScaOp_Identifier QCOL: [dp].ProductKey

                            ScaOp_Identifier QCOL: [fs].ProductKey

                    ScaOp_Comp x_cmpLt

                        ScaOp_Identifier QCOL: [fs].SalesKey

                        ScaOp_Const TI(int,ML=4) XVAR(int,Not Owned,Value=2)

                AncOp_PrjList 

            AncOp_PrjList 

        AncOp_PrjList 

*******************

Então, a questão é: Como posso obter o LogOp_Join na primeira consulta?

Tentei criar uma tabela similar com 50 milhões de linhas, mas ainda não aconteceu. Quais são as condições que fazem isso acontecer?

sql-server
  • 1 respostas
  • 331 Views
Martin Hope
folow
Asked: 2025-01-14 18:55:01 +0800 CST

Como atribuir SELECT no esquema, mas DENY em uma tabela específica no esquema?

  • 5

No Db2 v11.5 no Linux, tenho vários bancos de dados com centenas de tabelas no esquema MYSCHEMA.

EXIGÊNCIA

a) Preciso atribuir permissão SELECT a todas as tabelas no esquema MYSCHEMA, exceto para uma tabela específica MYSCHEMA.NO_ACCESS à qual os usuários não devem ter acesso.

b) Se uma nova tabela for criada no esquema MYSCHEMA, preciso adicionar manualmente GRANT SELECT na nova tabela. Gostaria de evitar qualquer tipo de administração de segurança quando uma nova tabela for criada.

c) Quando temos auditoria de uma empresa de auditoria, precisa ser simples fornecer informações sobre qual acesso algum usuário tem e qual não tem. Ter centenas de concessões é difícil de mostrar que os usuários realmente têm apenas o acesso de que precisam.

SOLUÇÃO ATUAL

Atualmente, concedemos seleção em todas as tabelas, exceto na tabela MYCHEMA.NO_ACCESS, assim:

GRANT SELECT ON TABLE MYSCHEMA.TAB1 TO GROUP GROUP1
GRANT SELECT ON TABLE MYSCHEMA.TAB2 TO GROUP GROUP1
...
GRANT SELECT ON TABLE MYSCHEMA.TAB5000 TO GROUP GROUP1 
(make sure there is no MYSCHEMA.NO_ACCESS on grant list)

A abordagem acima tem limitações: sempre que uma nova tabela é criada no esquema MYSCHEMA, preciso definir GRANT SELECT na nova tabela.

Além disso, na auditoria, devido às inúmeras permissões, é difícil provar que os usuários realmente têm apenas as permissões que deveriam ter.

NOVA ABORDAGEM, SE POSSÍVEL

O Db2 v11.5 tem o privilégio GRANT SELECTIN no esquema.

Existe algo parecido como:

GRANT SELECTIN ON SCHEMA MYSCHEMA TO GROUP GRUP1
DENY SELECT ON TABLE MYSCHEMA.NO_ACCESS TO GROUP GROUP1

Onde negar tem maior importância que conceder.

Ou existe alguma outra abordagem?

permissions
  • 2 respostas
  • 86 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