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
SeanGaff
Asked: 2023-08-10 19:27:36 +0800 CST

Banco de dados Oracle: como alterar o comprimento do varchar da mesma coluna em várias tabelas de uma só vez?

  • 7

Minha empresa usa o Oracle 19 e temos muitos milhares de tabelas que possuem duas colunas chamadas CRBY e MODBY, que são varchar2(200). Essas colunas são preenchidas por um script chamado em um gatilho INSERT, UPDATE ou DELETE. O script registra as informações do client_identifier para que possamos relacionar as alterações de linha individuais aos usuários.

Recentemente, comecei a trabalhar no aprimoramento do script, pois agora temos mais requisitos para informações de sessão do que o client_identifier sozinho nos fornece. O resultado disso é que as sequências de texto geradas pelo script agora, em certos casos, excedem 200 caracteres.

Portanto, preciso de uma maneira de alterar o varchar (200) nas muitas tabelas que possuem as colunas para que se tornem varchar2 (255).

Gostaria de obter algumas recomendações sobre qual é a melhor abordagem para isso, por favor? Eu li que fazer isso dinamicamente pode ser uma má ideia, mas como tenho 4.500 tabelas para trabalhar, não tenho certeza de como posso fazer isso.

Obrigado

oracle
  • 1 respostas
  • 88 Views
Martin Hope
Starscream512
Asked: 2023-08-10 18:58:41 +0800 CST

(PostgreSQL pgcrypto) Como gerar hash de blowfish sem sal?

  • 5

No PostgreSQL, usando o pgcryptomódulo, posso gerar um hash lento com blowfish (ou qualquer algoritmo compatível) assim:

crypt('SomeTextHere', gen_salt('bf'));

No entanto, ele gera automaticamente um sal (com gen_salt) e o requer. Não quero usar sal. Também não estou interessado em usar uma função hash normal (como sha256). Como posso gerar um hash lento sem sal?

postgresql
  • 1 respostas
  • 16 Views
Martin Hope
dukanuwdn
Asked: 2023-08-10 17:54:02 +0800 CST

Devo colocar o atributo em cada tabela mesmo que estejam vinculados para aumentar o desempenho?

  • 5

Criando um esquema para um aplicativo de treino, atualmente construindo os logs para sessões de treino concluídas.

Aqui está a parte que eu estou querendo saber:

insira a descrição da imagem aqui

Querendo saber se devo colocar data em cada tabela. O motivo é que eu quero ter uma página para o histórico de exercícios até o momento, um exercício até o momento para estatísticas e, em seguida, repetir até o momento para cálculos de peso nos próximos exercícios.

Seria uma má prática colocar uma data em cada tabela mesmo que sejam iguais? Colocar a data apenas em "Rep Log" não prejudicaria o desempenho?

mysql
  • 1 respostas
  • 33 Views
Martin Hope
user960567
Asked: 2023-08-10 14:44:01 +0800 CST

Consultas EF usando leitura confirmada, embora snapshot_isolation_state e is_read_committed_snapshot_on estejam ativados

  • 5

Estou executando esta consulta,

SELECT name
, snapshot_isolation_state
, is_read_committed_snapshot_on
FROM sys.databases s

name        snapshot_isolation_state    is_read_committed_snapshot_on
master        1                               0
tempdb        0                               0
model         0                               0
msdb          1                               0
MyDB1         1                               1
MyDB2         1                               1

MyDB1 e MyDB2 estão habilitados para instantâneo, mas ainda todas as minhas consultas do Entity Framework estão usando,

select transaction_isolation_level from sys.dm_exec_requests

Todos os valores das sessões são transaction_isolation_level=2o que significa Read Committed. O que posso fazer?

sql-server
  • 1 respostas
  • 27 Views
Martin Hope
Camila326
Asked: 2023-08-10 09:13:54 +0800 CST

Uma string longa com restrição "única" ocupa muito espaço?

  • 5

Eu criei uma tabela "global_settings" para armazenar diferentes configurações de aplicativos da web - aquelas que desejo poder editar na página html:

global_settings:
  id primary key,
  key varchar(100),
  value varchar(1000),
  extra_data jsonb

onde keyfoi dada UNIQUEa restrição.

Haverá, digamos, 100 configurações no máximo.

Porém, como já percebi, keyàs vezes pode chegar a 100 caracteres ou mais. É porque quero deixar isso explicitamente claro.

Quanto espaço em disco adicional esses tipos de índices de chaves UNIQUE longosVARCHAR adicionam a um banco de dados, em média? O tamanho int64é de 8 bytes, mas keyserá ... mais de 10 vezes maior. Conseqüentemente, mais de 10 vezes mais espaço em disco. Correto?

Se eu tivesse milhares deles, o tamanho do banco de dados seria 10 vezes maior em comparação com uma situação em que havia keyum int64?

postgresql
  • 1 respostas
  • 30 Views
Martin Hope
CB_Ron
Asked: 2023-08-10 07:55:45 +0800 CST

É possível adicionar uma dica de consulta a todo um procedimento armazenado no SQL Server 2022?

  • 6

O SQL Server 2022 tem um novo recurso chamado Otimização de Plano Sensível a Parâmetros. Não quero ativá-lo para todo o meu banco de dados, mas tenho quatro procedimentos armazenados que acredito que se beneficiariam com esse recurso. De acordo com este artigo do SQL Server Central, é possível ativá-lo para consultas ou procedimentos armazenados específicos:

Para habilitar a otimização do PSP no nível da consulta, adicione a dica de consulta OPTION (USE HINT('ENABLE_PARAMETER_SENSITIVITY_OPTIMIZATION')) logo antes do ponto e vírgula no final da consulta ou procedimento armazenado. Execute o procedimento armazenado ou consulta. Este procedimento armazenado ou consulta agora tem o recurso habilitado.

No entanto, não está claro como ativá-lo para um SP. Eles significam ponto e vírgula na EXEClinha (tempo de execução) ou no próprio código SP? Já fiz pesquisas no Google mas não encontrei nada que mostrasse um exemplo, o que me leva a crer que na verdade não é possível. Caso contrário, terei que adicioná-lo ao final de cada consulta nos SPs - o que não é uma tarefa impossível (já fiz isso antes), mas o artigo me deixou com alguma esperança de que isso poderia ser realizado com mais facilidade. Como talvez um novo recurso de 2022.

sql-server
  • 1 respostas
  • 54 Views
Martin Hope
Putnik
Asked: 2023-08-10 00:51:24 +0800 CST

Como acelerar o SELECT da coluna não exclusiva?

  • 5

Eu tenho uma consulta simples em um banco de dados Postgres 15. Sem junções ou outras coisas sofisticadas:

selecione * da minha_tabela onde col='val'

O objetivo é agilizar a consulta. Eu diria que preciso de um índice, mas os valores colnão são únicos. Existe alguma maneira de especificar algo como índice não exclusivo ou qualquer outra maneira de acelerá-lo usando apenas a estrutura da tabela ?

Presumo que todos os ajustes de memória/cache/hardware já tenham sido feitos.

postgresql
  • 1 respostas
  • 41 Views
Martin Hope
Joysn
Asked: 2023-08-10 00:14:48 +0800 CST

Como conectar/autenticar usuários ao banco de dados conectável Oracle usando o desenvolvedor SQL

  • 5

Estou lutando para me conectar a um banco de dados conectável para o qual criei usuários locais.

Eu tenho um Oracle 21c XE na minha máquina. O CDB é XE. Eu loguei no SID=XE com sys como sysdba. Lá criei um PDB da seguinte forma:

create pluggable database GRE
    admin user manager identified by manager
    roles = (dba)
    file_name_convert = ('C:\ORADATA\XE\PDBSEED', 'C:\ORADATA\XE\GRE')
;

ALTER PLUGGABLE DATABASE GRE OPEN;

Então mudei para o banco de dados conectável:

alter session set container = GRE;
select sys_context('USERENV', 'CON_NAME') from dual;

SYS_CONTEXT('USERENV','CON_NAME')
GRE

Em seguida, criei um usuário e atribuí funções e privilégios:

-- USER SQL
CREATE USER "user1" IDENTIFIED BY "user1"  
DEFAULT TABLESPACE "DATA"
TEMPORARY TABLESPACE "TEMP" container=current;

-- QUOTAS
ALTER USER "user1" QUOTA UNLIMITED ON "DATA";

-- ROLES
GRANT "CONNECT" TO "user1" ;
GRANT "RESOURCE" TO "user1" ;
ALTER USER "user1" DEFAULT ROLE "CONNECT","RESOURCE";

-- SYSTEM PRIVILEGES
GRANT DROP ANY MATERIALIZED VIEW TO "user1" ;
GRANT CREATE ANY SYNONYM TO "user1" ;
GRANT DROP ANY SYNONYM TO "user1" ;
GRANT DROP ANY VIEW TO "user1" ;
GRANT CREATE ANY VIEW TO "user1" ;
GRANT CREATE ANY MATERIALIZED VIEW TO "user1" ;

Esta é a saída de lsnrctl status:

Services Übersicht...
Dienst "541e76d5c7264140b887e5606a1a0486" hat 1 Instanzen.
  Instanz "xe", Status READY, hat 2 Handler für diesen Dienst...
Dienst "CLRExtProc" hat 1 Instanzen.
  Instanz "CLRExtProc", Status UNKNOWN, hat 1 Handler für diesen Dienst...
Dienst "XE" hat 1 Instanzen.
  Instanz "xe", Status READY, hat 2 Handler für diesen Dienst...
Dienst "XEXDB" hat 1 Instanzen.
  Instanz "xe", Status READY, hat 1 Handler für diesen Dienst...
Dienst "gre" hat 1 Instanzen.
  Instanz "xe", Status READY, hat 2 Handler für diesen Dienst...
Der Befehl wurde erfolgreich ausgeführt.

Pode-se ver que o PDB greestá disponível.

Quando tento conectar ao PDB usando o usuário local, o login é negado com ORA-01017.

Detalhes de login no SQL Developer

Tentei descobrir como lidar com PDBs e usuários locais, mas não consigo entender como fazer isso funcionar. Talvez eu tenha entendido errado o conceito e precise usar usuários comuns e conectar-se ao CDB primeiro e, a partir daí, alternar para o PDB?

oracle
  • 1 respostas
  • 17 Views
Martin Hope
pwaring
Asked: 2023-08-09 22:26:44 +0800 CST

ALTER TABLE dry run com antes e depois

  • 5

Eu tenho um aplicativo legado executando o MariaDB 10.5 com algumas opções de design de banco de dados ruins (por exemplo, valores financeiros armazenados como VARCHAR(50)) que estou tentando melhorar.

Por exemplo, posso alterar uma coluna total_amount VARCHAR(50) para um DECIMAL mais sensato com:

ALTER TABLE orders MODIFY total_amount DECIMAL(12, 2);

No entanto, quando faço isso, às vezes recebo avisos como o seguinte:

Data truncated for column 'total_amount' at row 120058

Como eles não aparecem até depois de executar a consulta ALTER TABLE, não posso verificar se o truncamento é importante ou não. Por exemplo, se houver um espaço em branco à direita que foi removido, tudo bem, mas se o valor numérico foi alterado, esse é um problema importante. A grande maioria das linhas são modificadas sem problemas, mas preciso verificar todas as linhas que geram um aviso.

Existe uma maneira de perguntar ao MariaDB: 'se eu executasse este comando ALTER TABLE, quais linhas mudariam e quais seriam os valores antes e depois nessas linhas'? Muitos outros softwares têm uma opção de 'dry run' que me permite fazer isso, por exemplo, posso executar o rsync com --dry-run e ele me dirá quais arquivos ele transferiria, mas não os transferiria.

Sei que poderia criar um clone da tabela, ALTER o clone, comparar com o original e excluir o clone, mas se houver uma maneira mais fácil de fazer isso, economizaria muito esforço.

mariadb
  • 1 respostas
  • 15 Views
Martin Hope
Alex F
Asked: 2023-08-09 20:34:53 +0800 CST

INSERTs simultâneos que bloqueiam a tabela de destino dentro de um gatilho antes da inserção resultam em um impasse

  • 5

Estou trabalhando em um aplicativo da web que usa um banco de dados PostgreSQL para armazenamento. Existem muitas entidades lógicas neste aplicativo que estão relacionadas entre si hotel --> hotel_floor --> hotel_room(o exemplo de hotéis usado ao longo da pergunta é puramente hipotético). Cada tabela armazena os IDs de todos os seus pais na hierarquia junto com seu próprio ID que é único no escopo de seus pais . A estrutura do banco de dados é mais ou menos assim:

table hotel (
    hotel_id int,
    ...

    CONSTRAINT hotel_pk PRIMARY KEY (hotel_id)
)


table floor (
    hotel_id int,
    floor_id int,
    ...

    CONSTRAINT floor_pk PRIMARY KEY (hotel_id, floor_id),
    CONSTRAINT floor_hotel_fk FOREIGN KEY (hotel_id) REFERENCES hotel (hotel_id)
)


table room (
    hotel_id int,
    floor_id int,
    room_id int,
    ...

    CONSTRAINT room_pk PRIMARY KEY (hotel_id, floor_id, room_id),
    CONSTRAINT room_hotel_fk FOREIGN KEY (hotel_id) REFERENCES hotel (hotel_id),
    CONSTRAINT room_floor_fk FOREIGN KEY (hotel_id, floor_id) REFERENCES floor (hotel_id, floor_id),
)

E os registros armazenados lá têm IDs que se parecem com isso:

  hotel
--------
hotel_id
--------
   1
   2
   3


        floor
-------------------
hotel_id | floor_id
-------------------
    1    |    1
    1    |    2
         |
    2    |    1
    2    |    2


             room
-----------------------------
hotel_id | floor_id | room_id
-----------------------------
    1    |    1     |    1
    1    |    1     |    2
    1    |    1     |    3

    1    |    2     |    1
    1    |    2     |    2
    1    |    2     |    3
    1    |    2     |    4

Obviamente, por causa dessa estrutura de banco de dados (que foi herdada por nossa equipe e não é fácil de refatorar), todos os IDs precisam ser gerados manualmente. Por esse motivo, temos um gatilho de inserção anterior em cada tabela, que se resume a algo semelhante a isto:

CREATE OR REPLACE FUNCTION room_set_new_id() RETURNS trigger LANGUAGE plpgsql AS $
BEGIN
    LOCK TABLE room IN SHARE ROW EXCLUSIVE MODE;

    NEW.room_id = (
        SELECT COALESCE(MAX(room_id), 0) + 1
        FROM room
        WHERE hotel_id = NEW.hotel_id AND floor_id = NEW.floor_id
    );

    RETURN NEW;
END
$;

CREATE TRIGGER room_set_new_id
BEFORE INSERT ON room
FOR EACH ROW EXECUTE PROCEDURE room_set_new_id();

O problema está na LOCK TABLEdeclaração. Até recentemente, não havia nenhum, mas começamos a receber erros de chave duplicada quando 2 operações de inserção eram executadas ao mesmo tempo, então decidi adicionar esses bloqueios na esperança de corrigir o problema. Infelizmente, isso levou a um novo problema: as inserções simultâneas agora resultam em um impasse. Eu experimentei com o código do servidor e descobri que o problema reside exclusivamente nos próprios 's, por exemplo , INSERTduas ou mais INSERT INTO room (hotel_id, floor_id) VALUES (1, 1)consultas emitidas ao mesmo tempo - não há outras operações de leitura/gravação acontecendo com o hotel//floorroomtabelas naquele momento (na verdade, cada solicitação ao servidor web vem de um usuário logado, e há uma conexão entre a tabela de usuários e a tabela de hotéis que é usada para fins de autenticação, mas não acho que um simultâneo "verifique se o usuário atual está relacionado ao hotel em questão" a consulta deve afetar a operação de inserção).

Eu tenho tentado descobrir como consertar isso, mas sem sucesso. É claro que posso adicionar tratamento de erro de bloqueio no servidor da Web, detectando o erro e tentando novamente a execução da consulta, mas prefiro fazer isso apenas se não houver realmente nenhuma maneira de resolver esse problema no nível do banco de dados, ou seja, se o bloqueio da minha tabela estratégia está errada e há uma maneira diferente de evitar a geração de IDs duplicados, gostaria de fazer isso. (Lembre-se, estou preso a essa estrutura de banco de dados e levará muito tempo e esforço para reescrever toda a lógica do banco de dados e do servidor da Web para usar colunas geradas automaticamente apropriadas).

postgresql
  • 1 respostas
  • 20 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