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
Sergey Zolotarev
Asked: 2025-02-26 20:04:41 +0800 CST

Nenhuma conversão de tipo implícita com WHEN

  • 8

Nosso aplicativo às vezes precisa criar consultas SQL dinamicamente, incluindo ORDER BYcláusulas semelhantes a esta:

ORDER BY CASE t.ID
    WHEN 895 THEN 1
    WHEN 643 THEN 2
END

O problema t.IDgeralmente se refere a NUMBERcolunas — mas raramente se refere a VARCHARcolunas (dependendo da tabela, que é, para lembrar, dinâmica).

Quando isso acontece, recebemos um erro como este (abaixo está a versão localizada, mas é fácil de descobrir):

Erro SQL [932] [42000]: ORA-00932: Não há tipos de dados: ожидается CHAR, получено NUMBER

Embora nosso RDBMS possa executar conversão implícita de tipo , aparentemente não funciona com WHEN(por algum motivo). Não encontrei nenhuma menção a isso nos documentos (você é bem-vindo para fornecer tal referência).

Aqui estão os scripts de reprodução (o exemplo é reconhecidamente rebuscado):

create table "user"(
  id VARCHAR(50),
  name VARCHAR(50)
);
insert into "user"
values ('1', 'John Doe'),
  ('2', 'John Roe'),
('3', 'Jane Doe');
select * from "user"
order by case id
  when 1 then 1
  when 2 then 2
end;

Substitua o último script por este para que funcione

select * from "user"
order by case id
  when '1' then 1
  when '2' then 2
end;

Qual é a sua recomendação¹?

Oracle DB, Postgres (usamos ambos).

¹ Além de "nunca confie na conversão implícita de tipos"

postgresql
  • 3 respostas
  • 275 Views
Martin Hope
Amal Jesudas
Asked: 2025-02-26 19:56:35 +0800 CST

Forçar criptografia estrita

  • 6

Estou usando o Standard Editoin do SQL Server 2022. Ele tem uma opção adicional de configuração Force Strict Encryption. Eu configurei o mesmo no lado do servidor.

Na máquina cliente, usando SSMS, consigo conectar e acessar a tabela de usuários do banco de dados. Mas não estou conseguindo fazer o mesmo em um aplicativo C++. Abaixo está o código de exemplo do que estou tentando:

auto pDatabase = new CDatabase();
CString connString = L"DRIVER={ODBC Driver 18 for SQL Server};Network=DBMSSOCN;DATABASE=TESTTDE;Encrypt=strict;TrustServerCertificate=no;HostNameInCertificate=10.100.200.300;Mars_Connection=yes;SERVER=10.100.200.300\\TDE,2144;UID=Supervisor;PWD=password;";
auto reply = pDatabase->OpenEx(connString, CDatabase::noOdbcDialog);
CStringArray userNameList;
CString strUserName;
CStringW strUserNameW;
CString SQLString = L"select * from TESTTDE.dbo.UserTable;";
CRecordset userRecords(pDatabase);
userRecords.Open(CRecordset::forwardOnly, SQLString, CRecordset::readOnly);
while (!userRecords.IsEOF())
{
    userRecords.GetFieldValue(L"Name", strUserNameW);
    strUserName = CW2A(strUserNameW.Trim());
    userNameList.Add(strUserName.Trim());
    userRecords.MoveNext();
}
userRecords.Close();

userRecords.Opengera uma exceção e não consigo acessar o banco de dados. Alguém pode me dar uma luz sobre isso? O que eu poderia tentar para fazer isso funcionar?


Estou usando um certificado autoassinado. Ele funciona se eu usar Force Encryption sem habilitar Force Strict Encryption no servidor.

Exceção no lado do cliente:

O fluxo do protocolo de fluxo de dados tabulares (TDS) de entrada está incorreto. O fluxo terminou inesperadamente. Estado:28000,Nativo:4002,Origem:[Microsoft][Driver ODBC 18 para SQL Server][SQL Server]

Log do servidor:

O SQL Server ou o endpoint está configurado para aceitar somente conexões estritas (TDS 8.0 e acima). A conexão foi fechada.

Existe algo que impeça o uso de certificado autoassinado com criptografia Strict? Para a mesma configuração no lado do servidor, consigo executar consulta no lado do cliente do SSMS e recuperar dados da tabela. Somente de um aplicativo de amostra consigo conectar, mas não executar consulta.

Algumas observações adicionais: Usando APIs SQL de baixo nível de um aplicativo de exemplo, consegui buscar dados do servidor mesmo quando Force Strict Encryption estava habilitado. O código para o mesmo é adicionado abaixo:

SQLHANDLE env;
SQLHANDLE dbc;
SQLHANDLE stmt;
SQLRETURN ret;

SQLWCHAR* connStr = (SQLWCHAR*)L"Driver={ODBC Driver 18 for SQL Server};Server=10.100.200.300\\TDE;Database=TESTTDE;Uid=Supervisor;Pwd=password;Encrypt=strict;";

// Allocate environment handle
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
if (ret == SQL_ERROR) {
    std::wcerr << L"Error allocating environment handle." << std::endl;
    return;
}

// Set the ODBC version environment attribute
ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
if (ret == SQL_ERROR) {
    checkDiagnostic(env, SQL_HANDLE_ENV);
    SQLFreeHandle(SQL_HANDLE_ENV, env);
    return;
}

// Allocate connection handle
ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
if (ret == SQL_ERROR) {
    checkDiagnostic(env, SQL_HANDLE_ENV);
    SQLFreeHandle(SQL_HANDLE_ENV, env);
    return;
}

// Connect to the data source
ret = SQLDriverConnectW(dbc, NULL, connStr, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
if (ret == SQL_ERROR) {
    checkDiagnostic(dbc, SQL_HANDLE_DBC);
    SQLFreeHandle(SQL_HANDLE_DBC, dbc);
    SQLFreeHandle(SQL_HANDLE_ENV, env);
    return;
}

// Allocate statement handle
ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
if (ret == SQL_ERROR) {
    checkDiagnostic(dbc, SQL_HANDLE_DBC);
    SQLDisconnect(dbc);
    SQLFreeHandle(SQL_HANDLE_DBC, dbc);
    SQLFreeHandle(SQL_HANDLE_ENV, env);
    return;
}

// Execute a query
SQLWCHAR* query = (SQLWCHAR*)L"SELECT * FROM UserTable";
ret = SQLExecDirectW(stmt, query, SQL_NTS);
if (ret == SQL_ERROR) {
    checkDiagnostic(stmt, SQL_HANDLE_STMT);
}
else
{
    SQLWCHAR name[256];
    while (SQLFetch(stmt) == SQL_SUCCESS) {
        ret = SQLGetData(stmt, 1, SQL_C_WCHAR, name, sizeof(name), NULL);
        if (SQL_SUCCEEDED(ret)) {
            AfxMessageBox((LPCTSTR)name);
        }
    }
}

// Clean up
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLDisconnect(dbc);
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);

Suspeito que a API da classe MFC CRecordset::Open() tenha algum problema no suporte ao TDS 8.0.

sql-server
  • 3 respostas
  • 154 Views
Martin Hope
Starbody
Asked: 2025-02-26 05:13:37 +0800 CST

Erro de inicialização do trabalhador paralelo

  • 5

Minha instância do postgresql continua gerando esse erro e ele desaparece temporariamente depois que reinicio o banco de dados.

Aqui estão os registros:

ERROR:  parallel worker failed to initialize

2025-02-25 21:00:51.586 UTC [668] HINT:  More details may be available in the server log.

2025-02-25 21:00:51.586 UTC [668] STATEMENT:  ...some sql query

2025-02-25 21:00:51.663 UTC [5] LOG:  could not fork worker process: Resource temporarily

Aqui está minha configuração:

shared_buffers = '8GB'
work_mem = '512MB'
maintenance_work_mem = '2GB'
effective_cache_size = '16GB'
max_parallel_workers_per_gather = 8
max_parallel_workers = 32
autovacuum_work_mem = '1GB'
vacuum_cost_limit = 1000
autovacuum = on

Tenho 32 GB de RAM, 32 vCPU e 10 GB de armazenamento. Tentei ajustar essas configurações, mas não tive esperança. Há algo errado aqui?

postgresql
  • 2 respostas
  • 19 Views
Martin Hope
eckstein151
Asked: 2025-02-25 19:08:28 +0800 CST

Como posso corrigir: IllegalArgumentException: e9311530-b596-11e8-b635-dd45db3e561g já está vinculado em reverseMap a (demo,airports)

  • 5

Temos um cluster Cassandra com três nós instalados no RedHat. No passado, o cluster podia ser parado e iniciado sem problemas. Após reinicializar o cluster, o Cassandra não inicia mais. Ocorre o seguinte erro

ERROR [main] 2025-02-25 11:25:58,771 CassandraDaemon.java:708 - Exception encountered during startup

java.lang.IllegalArgumentException: e9311530-b596-11e8-b635-dd45db3e561g is already bound in reverseMap to (demo,airports)

at org.apache.cassandra.utils.ConcurrentBiMap.put(ConcurrentBiMap.java:97) ~[apache-cassandra-3.11.2.jar:3.11.2]

Como esse problema pode ser resolvido?

Há uma discussão mais antiga em https://issues.apache.org/jira/browse/CASSANDRA-15166 , mas nenhuma solução proposta.

cassandra
  • 1 respostas
  • 17 Views
Martin Hope
nam
Asked: 2025-02-25 10:01:28 +0800 CST

Por que a função SUM retorna 4 casas decimais, mas a função AVG retorna 6 casas decimais

  • 17

Pergunta : Por que SUMo retorno é com 4 casas decimais (como esperado), mas o Avgretorno é com 6 casas decimais?

CREATE TABLE #t(Col DECIMAL(19,4))
INSERT #t VALUES (123456.1200),(654321.3400)
SELECT SUM(Col), AVG(Col) FROM #t
SomaQuantia Valor médio
777777.4600 388888.730000

Observações : Observe que a questão NÃO é sobre como podemos exibir AverageAmountcom 4 decimais, mas por que AverageAmountestá retornando com 6 casas decimais. Isso é um bug ou há algum motivo válido por trás disso? Estou usando a versão mais recente do SQL Server 2022 no Windows 11

sql-server
  • 2 respostas
  • 840 Views
Martin Hope
user3681452
Asked: 2025-02-24 14:20:15 +0800 CST

qual é o significado do estado do processo "idle" e ao mesmo tempo ele está mostrando SELECT como consulta no postgresql?

  • 5
Esta pergunta foi migrada do Stack Overflow porque pode ser respondida no Database Administrators Stack Exchange. Migrada há 2 dias .

Quando eu verifico pg_stat_activity no Postgresql, notei que um processo estava em SELECT e estava em estado ocioso. Qual é o significado desse estado de processo? Ele concluiu a operação SELECT e agora está em estado ocioso? Se sim, qual é o significado do processo que está em estado ocioso, mas não havia nenhuma consulta associada a ele?

Gostaria de saber as diferenças nos estados dos processos.

postgresql
  • 1 respostas
  • 17 Views
Martin Hope
Hasan Can Saral
Asked: 2025-02-24 13:12:05 +0800 CST

Índice de expressão com função definida pelo usuário não usada na consulta

  • 7

Tenho a seguinte tabela:

CREATE TABLE users (
 first_name VARCHAR(256)  DEFAULT NULL NULL,
 last_name  VARCHAR(256)  DEFAULT NULL NULL,
 full_name  VARCHAR(1024) GENERATED ALWAYS AS
        (CASE
             WHEN first_name IS NULL AND
                  last_name IS NULL THEN NULL
             ELSE
                 (TRIM(COALESCE(first_name, '') || ' ' || COALESCE(last_name, ''))) END) STORED;
);

E tenho a seguinte função para "normalizar":

CREATE OR REPLACE FUNCTION NORMALIZE_FUNC(IN source VARCHAR)
    RETURNS VARCHAR
    LANGUAGE PLPGSQL
AS
$$
BEGIN

    source := (SELECT COALESCE(source, ''));

    source := (SELECT REPLACE(
                      REPLACE(
                      REPLACE(
                      REPLACE(
                      REPLACE(
                      REPLACE(
                      LOWER(source),
                      'ş', 's'),
                      'ç', 'c'),
                      'ı', 'i'),
                      'ü', 'u'),
                      'ö', 'o'),
                      'ğ', 'g'))::VARCHAR;

    RETURN source;

END
$$
IMMUTABLE;

e o seguinte índice e consulta, soundex()de onde é a fuzzystrmatchextensão:

CREATE INDEX users_full_name_soundex_idx ON users (SOUNDEX(NORMALIZE_FUNC(full_name))) WHERE full_name IS NOT NULL;

SELECT *
FROM users
WHERE SOUNDEX(NORMALIZE_FUNC(full_name)) = SOUNDEX(NORMALIZE_FUNC('name surname'))

e eu obtenho uma varredura sequencial na tabela users.

Quando tento sem o definido pelo usuário NORMALIZE_FUNC:

CREATE INDEX users_full_name_soundex_idx ON users (SOUNDEX(full_name)) WHERE full_name IS NOT NULL;

SELECT *
FROM users
WHERE SOUNDEX(full_name) = SOUNDEX('name surname')

Vejo que o users_full_name_soundex_idxíndice é usado e a consulta é rápida.

O que estou perdendo?

postgresql
  • 1 respostas
  • 101 Views
Martin Hope
Raj Kadhi
Asked: 2025-02-22 17:26:34 +0800 CST

Como manter logins e senhas de usuários ao migrar o banco de dados do Azure SQL Server via BACPAC

  • 5
Esta pergunta foi migrada do Stack Overflow porque pode ser respondida no Database Administrators Stack Exchange. Migrada há 10 dias .

Tenho um aplicativo de produção em execução no Azure com um Azure SQL Server e um banco de dados SQL dentro dele. No meu aplicativo, todos os usuários são criados no nível do banco de dados com suas senhas.

Preciso migrar esse banco de dados para outro locatário do Azure exportando e importando um arquivo BACPAC. Após a importação, posso ver que os usuários são transferidos, mas não consigo fazer login por meio de uma senha existente. Suspeito que isso seja devido a alterações de SID, que causam uma incompatibilidade entre os logins e os usuários.

Como posso garantir que todos os usuários permaneçam funcionais após a migração sem exigir que eles redefinam ou alterem suas senhas?

azure
  • 2 respostas
  • 39 Views
Martin Hope
Sнаđошƒаӽ
Asked: 2025-02-22 18:44:49 +0800 CST

Não é possível fazer o SQL Server escutar na porta 1433 [duplicado]

  • 6
Esta pergunta já tem respostas aqui :
O serviço MSSQLSERVER *não* inicia, porta 1433 em uso (4 respostas)
Fechado há 3 dias .

Tentei tudo o que pude encontrar para fazer minha instância padrão do SQL Server escutar na porta 1433, mas nada parece funcionar.

Aqui está tudo o que eu fiz:

SQL Server Configuration Manager , em Protocolos para MSSQLSERVER

  1. TCP/IP habilitado
  2. Defina Ouvir tudo como Não
  3. Na aba Endereços IP , defina o campo Portas Dinâmicas TCP como em branco em IPALL
  4. Na aba Endereços IP , defina a Porta TCP como 1433 em IPALL
  5. Reiniciou o serviço

Então verifiquei a porta em que ele está escutando usando:

netstat -ano | findstr <sqlservr.exe PID>

e os resultados que obtive foram:

  TCP    0.0.0.0:9822           0.0.0.0:0              LISTENING       11608
  TCP    [::]:9822              [::]:0                 LISTENING       11608

Desinstalei e reinstalei o SQL Server (edição para desenvolvedores) várias vezes, cada vez recebo uma porta diferente, mas nunca é 1433, e todas as vezes, não importa o que eu faça, não consigo fazer com que ele escute 1433.

Resultado da consulta:

EXEC xp_readerrorlog 0, 1, N'listening on';

é o seguinte:

LogDate                 ProcessInfo  Text
----------------------- ------------ -------------------------------------------------------------
2025-02-22 15:40:56.670 Server       Server is listening on [ 'any' <ipv6> 9822] accept sockets 1.
2025-02-22 15:40:56.670 Server       Server is listening on [ 'any' <ipv4> 9822] accept sockets 1.

Eu também tentei definir o Listen All como yes, mas ele falha ao iniciar o serviço do SQL Server. E eu encontrei os seguintes erros no visualizador de eventos (cada linha é de uma entrada separada, em ordem cronológica reversa)

Server TCP provider failed to listen on [ 'any' <ipv6> 1433]. Tcp port is already in use.

TDSSNIClient initialization failed with error 0x271d, status code 0xa. Reason: Unable to initialize the TCP/IP listener. An attempt was made to access a socket in a way forbidden by its access permissions. 

TDSSNIClient initialization failed with error 0x271d, status code 0x1. Reason: Initialization failed with an infrastructure error. Check for previous errors. An attempt was made to access a socket in a way forbidden by its access permissions. 

Could not start the network library because of an internal error in the network library. To determine the cause, review the errors immediately preceding this one in the error log.

SQL Server could not spawn FRunCommunicationsManager thread. Check the SQL Server error log and the operating system error log for information about possible related problems.

Mais informações:

  1. Permitir conexões remotas a este servidor está marcado em SSMS -> caixa de diálogo de propriedades do servidor de banco de dados -> guia Conexões

  2. A porta 1433 é aberta no firewall conforme descrito aqui

    New-NetFirewallRule -DisplayName "SQLServer default instance" -Direction Inbound -LocalPort 1433 -Protocol TCP -Action Allow
    New-NetFirewallRule -DisplayName "SQLServer Browser service" -Direction Inbound -LocalPort 1434 -Protocol UDP -Action Allow
    
  3. Resultado do comandonetsh int ipv6 show excludedportrange protocol=tcp

    > netsh int ipv6 show excludedportrange protocol=tcp
    
    Protocol tcp Port Exclusion Ranges
    
    Start Port    End Port
    ----------    --------
            80          80
           443         443
          1025        1124
          1225        1324
          1325        1424
          1425        1524
          1526        1625
          1640        1739
          1834        1933
         12428       12527
         50000       50059     *
    
    * - Administered port exclusions.
    
PS: Estou tendo todo esse trabalho porque estou tentando usar o DBeaver para conectar ao SQL Server.
sql-server
  • 1 respostas
  • 120 Views
Martin Hope
Rohit Gupta
Asked: 2025-02-22 00:11:17 +0800 CST

Como registrar consultas em uma tabela selecionada no MySql

  • 6

Quero registrar consultas em apenas uma tabela.

Eu encontrei estes

SET GLOBAL log_output = "FILE"; which is set by default.
SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';

No entanto, isso registra todas as consultas.

Há perguntas no SO, mas elas são para registro total.

Como mostrar as últimas consultas executadas no MySQL?

Registre todas as consultas no mysql

mysql
  • 2 respostas
  • 39 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