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
mcsov
Asked: 2024-01-25 01:44:10 +0800 CST

SQL Server usando a chave primária da tabela como parte da chave estrangeira

  • 5

A situação é que tenho uma tabela de inquilino e uma tabela de pesquisa de status baseada em inquilino. Cada um com suas próprias chaves primárias de numeração automática.

Agora quero adicionar uma coluna à tabela Tenant para um Status padrão que faça referência à tabela de pesquisa, o inquilino só deve poder padronizar para um status que esteja nesse inquilino e, por algum motivo, a estrutura exata do FK está bagunçada com a cabeça, então pensei em perguntar caso estivesse enlouquecendo haha.

ex Tabelas:

Inquilino:

ID do inquilino Nome ID de status padrão
1 Adão 1
2 Matt 7

Status:

ID do inquilino statusID Nome
1 1 Novo
1 2 Fechado
1 3 Cancelado
1 4 Feito
2 5 Futuro
2 6 Removido
2 7 Abrir

Então, eu ia adicionar a chave estrangeira CONSTRAINT [FK_Tenant_Status] FOREIGN KEY ([defaultStatusID]) REFERENCES [dbo].[Status] ([statusID]), mas percebi que adoraria alguma maneira de garantir que o defaultStatusID seja de um status no locatário correto e não tenho certeza de qual é o melhor método para isso.

Adicionar inquilinoID ao FK parece errado porque inquilinoID não é estrangeiro para essa tabela e se tornaria circular? A menos que seja realmente tão fácil?CONSTRAINT [FK_Tenant_Status] FOREIGN KEY ([tenantID], [defaultStatusID]) REFERENCES [dbo].[Status] ([tenantID],[statusID])

Imagino que talvez algum tipo de restrição seja o caminho a seguir, mas não tenho certeza.

Obrigado por qualquer ajuda/comentários!

sql-server
  • 1 respostas
  • 60 Views
Martin Hope
kamazee
Asked: 2024-01-24 21:31:30 +0800 CST

Replicação MySQL/MariaDB/Percona para tabelas sem chave primária

  • 6

Embora criar tabelas sem chaves primárias seja definitivamente uma má prática, existem aplicativos de terceiros com seus próprios esquemas, e alterar o esquema de terceiros adicionando uma chave primária pode ser ainda pior do que a decisão de usar tal aplicativo foi ( porque não podemos prever se e como isso quebra o aplicativo cujo esquema foi alterado e isso pode trazer uma carga de manutenção que mal pode ser conhecida antecipadamente).

No entanto, preciso hospedar tal aplicativo e ter um banco de dados altamente disponível para ele; o aplicativo requer um MySQL moderno, então MySQL, MariaDB e Percona estão disponíveis. Preciso configurar a replicação mestre-mestre dentro de um datacenter e entre datacenters com um único mestre ativo e outros apenas aguardando. Pelo que consegui reunir até agora, a replicação de grupo no MySQL e o Galera, do qual MariaDB e Persona dependem, exigem que as tabelas tenham uma chave primária.

Existe uma maneira de desembaraçar esse nó? Existe uma maneira de configurar um banco de dados semelhante ao MySQL altamente disponível que não exija as chaves primárias para casos em que a alteração do esquema é altamente indesejável ou isso é impossível?

mysql
  • 1 respostas
  • 37 Views
Martin Hope
Shivkumar Mallesappa
Asked: 2024-01-24 18:09:37 +0800 CST

Replicação Transacional - Problema no Grupo de Disponibilidade

  • 5
Esta questão foi migrada do Stack Overflow porque pode ser respondida no Stack Exchange dos Administradores de Banco de Dados. Migraram ontem .

Temos cluster do SQL Server de 3 nós (grupo de disponibilidade Always On).

Eu queria implementar a replicação transacional no terceiro nó, que está configurado como assíncrono.

Quando tentei criar o Publisher, inicialmente recebi um erro: 

This database is not enabled for publication.
Unable to execute procedure. The database is not published. Execute the procedure in a database that is published for replication.
Changed database context to 'prod'. (.Net SqlClient Data Provider)

Então tentei adicionar o banco de dados para publicação usando o seguinte comando.

USE prod
EXEC sp_replicationdboption @dbname = 'prod',
@optname = 'publish',
@value = 'true'
GO

Recebi outro erro:

Msg 3906, Level 16, State 2, Procedure sys.sp_MSdrop_pub_tables, Line 6 [Batch Start Line 0]
Failed to update database "prod" because the database is read-only.

O erro acima foi surpreendente, pois posso ver nas opções do Banco de Dados que a opção Somente Leitura é Falsa.

insira a descrição da imagem aqui

Então tentei corrigir o problema de atualização usando os seguintes comandos:

USE prod GO
ALTER DATABASE [prod] SET READ_WRITE WITH NO_WAIT
GO

e agora estou enfrentando um erro:

Msg 1468, Level 16, State 3, Line 9
The operation cannot be performed on database "prod" because it is involved in a database mirroring session or an availability group. Some operations are not allowed on a database that is participating in a database mirroring session or in an availability group.
Msg 5069, Level 16, State 1, Line 9
ALTER DATABASE statement failed.

Tentei no Nó 2 para publicação de banco de dados 'prod' e recebi o seguinte erro:

Msg 976, Level 14, State 1, Line 1
The target database, 'prod', is participating in an availability group and is currently not accessible for queries.
Either data movement is suspended or the availability replica is not enabled for read access. 
To allow read-only access to this and other databases in the availability group, enable read access to one or more secondary availability replicas in the group.  
For more information, see the ALTER AVAILABILITY GROUP statement in SQL Server Books Online.

A seguir está a configuração do meu cluster: insira a descrição da imagem aqui

Quais etapas ou configurações terei que realizar para habilitar a Replicação Transacional no Nó 3 ou Nó 2?

O que estou fazendo de errado ou faltando aqui?

sql-server
  • 1 respostas
  • 27 Views
Martin Hope
Simon
Asked: 2024-01-24 19:24:41 +0800 CST

SELLECT * FROM Tabela WHERE nome=$variável não funciona

  • 5

Estou tentando configurar um código SQL simples para coletar detalhes de um usuário quando eles fazem login em um novo site que estou escrevendo, mas sempre gera um erro. Alguma ideia de quê. Estou fazendo errado?

$sql = "SELECT * FROM Users WHERE uname = '".$uname."'";

if ($conn->query($sql) === TRUE) {
  echo "Returned rows are: " . $result -> num_rows;
  // Free result set
  $result -> free_result();
} else {
  echo "<hr>Error: " . $sql . "<br>" . $conn->error;
}

A resposta que recebo do servidor é:

Error: SELECT * FROM Users WHERE uname = 'XYZ'
mysql
  • 1 respostas
  • 26 Views
Martin Hope
ahron
Asked: 2024-01-24 19:22:31 +0800 CST

Não é possível usar INSERT no CTE

  • 5

Estou tentando usar um CTE para inserir alguns dados aleatórios em uma tabela -

create table foo (id integer)

with x as (select random())
  insert into foo (id)
  select x from x

Isso dá um erro: ERROR: column "id" is of type integer but expression is of type record

Apenas o CTE com selectfunciona:

with x as (select random())
--   insert into foo (id)
  select x from x

Também não consigo digitar:

with x as (select random())
  insert into foo (id)
  select x::integer from x

Isso dá um erro: ERROR: cannot cast type record to integer.

O que está errado e como posso corrigir isso?

postgresql
  • 1 respostas
  • 30 Views
Martin Hope
Justas
Asked: 2024-01-24 19:20:27 +0800 CST

Como devo fazer corretamente a modelagem com esses dados?

  • 6

Eu criei o modelo de dados conceituais e o modelo de dados físicos com estas informações:
Modelo de dados conceituais:

Modelo de dados físicos:

quero que 'Compra' tenha muitos 'Ticket'. Por exemplo, algo assim:
(PurchaseID, TicketID)
( 1 1 )
( 1 1 )
( 1 2 )
( 1 2 )
Isso pode corresponder a 'Uma compra com 4 ingressos, 2 ingressos de um tipo e 2 ingressos de outro tipo )
Como posso modelar corretamente?

database-design
  • 1 respostas
  • 33 Views
Martin Hope
J. Mini
Asked: 2024-01-24 19:01:21 +0800 CST

Uma consulta que executei ontem não está no cache do plano, mas as mais antigas e as mais recentes estão. Por que?

  • 5

Ontem, executei uma grande consulta ad hoc que não salvei. Hoje quero ver de novo. Pensei em procurar no cache do plano. Para minha surpresa, posso encontrar consultas mais antigas e mais recentes, mas não aquela que executei. Por que isso pode acontecer?

Eu sei que deveria ter ativado o Query Store, mas ainda não fiz isso.

sql-server
  • 2 respostas
  • 98 Views
Martin Hope
Dryadwoods
Asked: 2024-01-24 17:48:13 +0800 CST

MS SQL Server - Tabela com lógica de fila - Como posso ter certeza de que tarefas paralelas não recuperarão o mesmo ID?

  • 8

Eu tenho uma tabela sys_QueueJobque armazena dados lógicos da fila.

Achei que bastaria ter uma atualização com retorno... Porém, agora não tenho certeza se isso é 100% seguro.

Como posso ter certeza de que, independentemente de muitas solicitações paralelas, não retornarão o mesmo ID?

UPDATE sys_QueueJob
SET ExecutionStartedOn = GETDATE()
OUTPUT DELETED.Id as Result
WHERE Id = (select top 1 x.Id
            from sys_QueueJob x with (rowlock, updlock, readpast)
                        where x.ExecutionFinishedOn is null
                            AND (
                                x.ExecutionStartedOn is null
                                OR x.ExecutionStartedOn < DATEADD(HOUR, -1, GETDATE())
                               )
                        order by x.CreatedOn asc)
sql-server
  • 2 respostas
  • 631 Views
Martin Hope
Andrei Hristov
Asked: 2024-01-24 16:38:14 +0800 CST

Status de replicação MySQL não reportando parâmetros mysqld.cnf

  • 5

Estou executando uma replicação multimestre de 3 servidores mestres para 1 escravo. Cada um dos mestres possui 2 bancos de dados, mas estou replicando apenas 1 dos bancos de dados.

Versão do servidor: 8.0.35-0ubuntu0.20.04.1 (Ubuntu)

A replicação está funcionando bem, mas minha pergunta é: por que quando executo o

show replica status \G

Não vejo os parâmetros que defini para Replicate_Do_DB ou replicate-wild-do-table por canal no relatório de status. Se eu defini-los como globais (sem especificar um canal), eles aparecem no relatório, mas não quando definidos por canal, alguma ideia do porquê disso?

Isto é extraído do arquivo de configuração do MySQL ( /etc/mysql/mysql.conf.d/mysqld.cnf ):

master-info-repository=table
relay-log-info-repository=table

replicate-wild-do-table='src3_s#####':s#####v.%
replicate-wild-do-table='src2_b#####':b#####v.%
replicate-wild-do-table='src1_d#####':d#####v.%

e este é o resultado do 'show replication status \G':

mysql> show replica status \G
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: 101.114.110.113
                  Source_User: slave_user
                  Source_Port: 3306
                Connect_Retry: 60
              Source_Log_File: mysql###-bin.001307
          Read_Source_Log_Pos: 85496
               Relay_Log_File: plfamily-replication-slave-relay-bin-src1_#####.000086
                Relay_Log_Pos: 323
        Relay_Source_Log_File: mysql###-bin.001307
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB: 
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Source_Log_Pos: 85496
              Relay_Log_Space: 86304
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Source_SSL_Allowed: No
           Source_SSL_CA_File:
           Source_SSL_CA_Path:
              Source_SSL_Cert:
            Source_SSL_Cipher:
               Source_SSL_Key:
        Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Source_Server_Id: 1
                  Source_UUID: a604d2af-ed30-11ea-a99d-8657a156e939
             Source_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
    Replica_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Source_Retry_Count: 86400
                  Source_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Source_SSL_Crl:
           Source_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name: src1_d######
           Source_TLS_Version:
       Source_public_key_path:
        Get_Source_public_key: 0
            Network_Namespace:
*************************** 2. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: 237.239.251.262
                  Source_User: slave_user
                  Source_Port: 3306
                Connect_Retry: 60
              Source_Log_File: mysql###-bin.000002
          Read_Source_Log_Pos: 45872
               Relay_Log_File: plfamily-replication-slave-relay-bin-src2_#####.000029
                Relay_Log_Pos: 326
        Relay_Source_Log_File: mysql###-bin.000002
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB: 
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Source_Log_Pos: 45872
              Relay_Log_Space: 921
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Source_SSL_Allowed: No
           Source_SSL_CA_File:
           Source_SSL_CA_Path:
              Source_SSL_Cert:
            Source_SSL_Cipher:
               Source_SSL_Key:
        Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Source_Server_Id: 3
                  Source_UUID: ab801adf-ddb3-11eb-96b2-a27c967973a1
             Source_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
    Replica_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Source_Retry_Count: 86400
                  Source_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Source_SSL_Crl:
           Source_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name: src2_b#####
           Source_TLS_Version:
       Source_public_key_path:
        Get_Source_public_key: 0
            Network_Namespace:
*************************** 3. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: 134.148.228.213
                  Source_User: slave_user
                  Source_Port: 3306
                Connect_Retry: 60
              Source_Log_File: mysql####-bin.000002
          Read_Source_Log_Pos: 47931
               Relay_Log_File: plfamily-replication-slave-relay-bin-src3_s####.000025
                Relay_Log_Pos: 328
        Relay_Source_Log_File: mysql####-bin.000002
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB: 
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Source_Log_Pos: 47931
              Relay_Log_Space: 925
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Source_SSL_Allowed: No
           Source_SSL_CA_File:
           Source_SSL_CA_Path:
              Source_SSL_Cert:
            Source_SSL_Cipher:
               Source_SSL_Key:
        Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Source_Server_Id: 4
                  Source_UUID: ab801adf-ddb3-11eb-96b2-a27c967973a1
             Source_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
    Replica_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Source_Retry_Count: 86400
                  Source_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Source_SSL_Crl:
           Source_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name: src3_s######
           Source_TLS_Version:
       Source_public_key_path:
        Get_Source_public_key: 0
            Network_Namespace:
3 rows in set (0.00 sec)


replication
  • 1 respostas
  • 8 Views
Martin Hope
Jagapathibabu
Asked: 2024-01-23 16:45:32 +0800 CST

A função EVENTDATA() está fornecendo apenas valores nulos no sql server

  • 5

Estou tentando capturar o tempo de login com um gatilho usando EVENTDATA()a função. Mas está fornecendo valores nulos apenas para todos os tipos de eventos. Alguém pode me ajudar nisto por favor? Este é o meu gatilho

CREATE TRIGGER trgBlockIP
    ON ALL SERVER
    FOR LOGON
    AS
    BEGIN
       DECLARE @clientip NVARCHAR(15);
       SET @clientip = (
                          SELECT
                             EVENTDATA().value(
                                                 '(/EVENT_INSTANCE/Clienthost)[1]',
                                                 'NVARCHAR(15)'
                                              )
                       );
       IF EXISTS (
                    SELECT ip
                    FROM   master.dbo.BLockedIPAddresses
                    WHERE  ip = @clientip
                 )
       BEGIN
          PRINT 'Your IP Address is blocked';
          ROLLBACK;
       END;
       ELSE
       BEGIN
          DECLARE @Range VARCHAR(15);
          SELECT
             @Range = SUBSTRING(
                                  @clientip,
                                  1,
                                  LEN(@clientip)
                                  - CHARINDEX('.', REVERSE(@clientip))
                               ) + '.*';
          IF EXISTS (
                       SELECT ip
                       FROM   master.dbo.BLockedIPAddresses
                       WHERE  ip = @Range
                    )
          BEGIN
             PRINT 'Your IP Address Range is blocked';
             ROLLBACK;
          END;
       END;
    END;
    GO
sql-server
  • 1 respostas
  • 67 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