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 / user-6793

Daniel James Bryars's questions

Martin Hope
Daniel James Bryars
Asked: 2019-09-26 12:32:56 +0800 CST

Qual é a solução idiomática no SQL Server para reservar um bloco de IDs para uso em uma inserção em massa?

  • 9

Eu tenho uma tabela com uma coluna de identidade e quero reservar um bloco de ids que posso usar para inserção em massa, permitindo que as inserções ainda aconteçam nessa tabela.

Observe que isso faz parte de uma inserção em massa de várias tabelas, onde essas outras tabelas se relacionam a esses ids por meio de um FK. Portanto, eu preciso bloqueá-los para que eu possa preparar os relacionamentos de antemão.

Eu encontrei uma solução que funciona travando a mesa em uma transação e depois faz a nova propagação (que é bem rápida). Mas parece um pouco hacky para mim - existe um padrão geralmente aceito para fazer isso?

create table dbo.test
(
    id bigint not null primary key identity(1,1),
    SomeColumn nvarchar(100) not null
)

Aqui está o código para bloquear (abrir espaço para) alguns ids:

declare @numRowsToMakeRoomFor int = 100

BEGIN TRANSACTION;

        SELECT  MAX(Id) FROM dbo.test WITH (  XLOCK, TABLOCK ) -- will exclusively lock the table whilst this tran is in progress, 
        --another instance of this query will not be able to pass this line until this instance commits

        --get the next id in the block to reserve
        DECLARE @firstId BIGINT = (SELECT IDENT_CURRENT( 'dbo.test' )  +1);

        --calculate the block range
        DECLARE @lastId BIGINT = @firstId + (@numRowsToMakeRoomFor -1);

        --reseed the table
        DBCC CHECKIDENT ('dbo.test',RESEED, @lastId);

COMMIT TRANSACTION;    

select @firstId;

Meu código está processando em lote blocos de dados em pedaços de cerca de 1.000. Tenho cerca de um bilhão de linhas para inserir no total. Tudo está funcionando bem - o banco de dados não é o gargalo, o processamento em lote em si é computacionalmente caro e exige que eu adicione alguns servidores para serem executados em paralelo, então preciso acomodar mais de um processo de "inserção em lote" no mesmo tempo.

sql-server sql-server-2016
  • 1 respostas
  • 1290 Views
Martin Hope
Daniel James Bryars
Asked: 2014-08-14 10:08:31 +0800 CST

Por que preciso fazer backup da chave mestra do banco de dados?

  • 8

Quando crio uma chave mestra de banco de dados para um banco de dados:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Some Long Password'

Esta página da Microsoft recomenda que eu faça backup externo:

http://msdn.microsoft.com/en-us/library/ms174382.aspx

Confirmei por meio de testes que a chave mestra é armazenada quando você faz backup do banco de dados. Já estou fazendo backup do banco de dados, e já estou armazenando a senha com segurança. Então, por que preciso fazer backup da chave mestra também?

(Além disso, já estou fazendo backup da Chave Mestra de Serviço e armazenando fora do local).

sql-server-2008-r2 encryption
  • 2 respostas
  • 1953 Views
Martin Hope
Daniel James Bryars
Asked: 2014-08-13 07:41:48 +0800 CST

Certificado de backup do SQL Server e bytes de retorno com uma instrução Select

  • 1

Eu tenho um certificado em um banco de dados no Microsoft SQL Server 2008 R2. Desejo obter uma cópia do certificado para gravá-lo em um dispositivo USB e colocá-lo em um cofre. Não quero ter que ir para a própria máquina do servidor sql, quero fazer tudo isso a partir do meu aplicativo cliente que escrevi.

Eu sei como fazer backup de um certificado usando BACKUP CERTIFICATE ( http://msdn.microsoft.com/en-us/library/ms178578.aspx ), mas isso só tem opções para salvar em um ARQUIVO.

Existe outra técnica (talvez usando sys.certificates) que eu possa usar?

Estamos planejando uma atualização para 2014, portanto, se houver uma funcionalidade específica para essa versão, posso usá-la, mas, idealmente, a solução deve funcionar com 2008R2.

sql-server sql-server-2008-r2
  • 1 respostas
  • 317 Views
Martin Hope
Daniel James Bryars
Asked: 2012-02-29 06:57:56 +0800 CST

Este procedimento para Failover para Logshipped secundário e Failback novamente está correto?

  • 4

Tenho um banco de dados primário em Amsterdã (AMDB) e um secundário em Londres (LNDB). Quero fazer o failover de AMDB para LNDB e vice-versa, sem precisar fazer outro backup completo (porque o banco de dados é muito grande).

De acordo com Alteração de funções entre servidores primários e secundários e Failover para um secundário de envio de logs, tudo isso parece possível. Eu nunca fiz isso antes e vou fazê-lo na produção neste fim de semana. (Farei alguns testes em bancos de dados não prod antes.)

Minha pergunta: devo fazer mais alguma coisa além da documentação da Microsoft para garantir o sucesso? (Gostaria de saber se mais alguém tem alguns truques ou etapas extras que eles executam.) Espero uma resposta tranquilizadora, como "Sim, isso funciona sempre que fazemos isso na produção e é legal", mas também ficarei muito feliz com "Não, não faça isso, certifique-se de fazer x/y/ e z."

Editar: não recomendo que eu use o espelhamento como resposta a esta pergunta - sim, é uma ótima ideia, mas não funciona para nós devido aos custos de licenciamento. Usamos a edição padrão (e isso suporta apenas espelhamento no modo síncrono ). Gostaria de saber se alguém seguiu as etapas da documentação do MS em prod ou se existe uma alternativa melhor que um dba "experiente" usaria.

sql-server-2008-r2 transaction-log
  • 2 respostas
  • 1565 Views
Martin Hope
Daniel James Bryars
Asked: 2012-02-21 15:11:14 +0800 CST

Existe uma maneira de forçar a resolução de nome adiada, mesmo que a tabela exista ao criar um procedimento armazenado?

  • 10

Ao criar um procedimento armazenado no SQL Server, você pode se referir a tabelas que não existem. Mas, se a tabela existir, qualquer coluna à qual você fizer referência no procedimento deverá existir nessa tabela ( Resolução de Nome Adiada ).

É possível instruir o SQL Server a adiar a resolução de nomes de todas as tabelas referenciadas em um procedimento, independentemente de existirem ou não? Eu quero manter a verificação geral da sintaxe, portanto, mesmo que fosse possível, hackear a definição do procedimento armazenado em uma tabela do sistema não é uma opção.

Espero que minha solicitação para fazer isso possa parecer um pouco estranha , então aqui está um histórico: Eu gero automaticamente definições de tabela e procedimentos armazenados de um aplicativo escrito em C# e é muito difícil para mim alterar o código para ordenar as alterações conforme as necessidades do SQL eles. Meu código "garante" que o esquema é consistente em uma transação, mas atualmente não posso garantir que as colunas da tabela sejam definidas antes de eu definir o procedimento armazenado que as referencia.

Abaixo está um exemplo canônico do SQL criado pelo C# que "ilustra" o problema que estou tentando resolver.

--Say this table already exists.
CREATE TABLE myTable
(
    a NVARCHAR(MAX)
)
GO

--My C# code creates something like this
BEGIN TRAN 
GO

--the stored procedure gets generated first.
CREATE PROCEDURE mySproc
AS
BEGIN
    SELECT a,b FROM myTable
END

--then the table update
ALTER TABLE myTable
    ADD b nvarchar(MAX)

COMMIT TRAN 

É possível corrigir isso no código C #, mas espero um simples ajuste "mágico" que possa fazer no SQL. Isso vai economizar muito tempo para mim.

t-sql sql-server-2008-r2
  • 2 respostas
  • 3618 Views
Martin Hope
Daniel James Bryars
Asked: 2012-02-14 07:31:35 +0800 CST

Existe uma maneira abreviada de 'Auto_Fix' todos os usuários órfãos em um banco de dados SQL Server 2008 R2?

  • 17

É bastante simples corrigir um único usuário SQL órfão para um login usando:

EXEC sp_change_users_login 'Auto_Fix', 'usuário'

Eu poderia fazer um script disso, mas existe um procedimento armazenado existente que tenta automaticamente corrigir todos os usuários órfãos em um determinado banco de dados?

sql-server-2008-r2
  • 6 respostas
  • 64558 Views

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