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 / Perguntas / 154591
Accepted
Andy Neillans
Andy Neillans
Asked: 2016-11-09 05:12:55 +0800 CST2016-11-09 05:12:55 +0800 CST 2016-11-09 05:12:55 +0800 CST

Os desenvolvedores devem ter permissão para usar o LocalDB em vez de uma instância de "desenvolvimento"?

  • 772

Muito parecido com a pergunta que foi postada aqui anteriormente sobre " Os desenvolvedores devem ser capazes de consultar bancos de dados de produção? " Eu queria saber sua opinião sobre outro tópico particularmente irritante!

Muitas empresas impedem que os desenvolvedores instalem o SQL Server Express e similares em máquinas de desenvolvimento, em vez disso, promovem o uso de SQL Servers de desenvolvimento centralizado.

Especificamente, isso é feito para garantir:

  • Consistência de nível de patch entre servidores de desenvolvimento e produção
  • Capacidade de provar e validar quaisquer patches acima
  • Segurança de dados; apenas os dados nos servidores de desenvolvimento são usados ​​para desenvolvimento
  • Recuperabilidade; os dados são recuperáveis ​​e ainda têm backup
  • Diferenças de agrupamento que podem causar problemas quando movidas para produção

Para mim, todos esses argumentos são particularmente inválidos, talvez com exceção dos remendos; mas se um banco de dados em uma máquina local for usado exclusivamente para atividades de desenvolvimento, e não para teste, o patch será comprovado quando um aplicativo progredir de Teste / UAT, etc., para Produção.

O agrupamento não parece ser um motivo válido, pois se isso fosse uma preocupação para o banco de dados, ele deveria ser definido ao ser criado de qualquer maneira. Até onde eu sei, apenas o SharePoint e o SCCM têm problemas com isso;)

Agora, assumindo que é APENAS para desenvolvimento, e o banco de dados não será "movido" para produção e as únicas movimentações seriam:

  • Scripts que criaram o banco de dados sendo gerado para implantação na produção
  • Backups de sistemas de "produção" de terceiros sendo restaurados e truncados quando apropriado para validação e desenvolvimento

Alguém pode ver algum problema? Estou esquecendo de algo?

Acho que uma das maiores preocupações seria a capacidade de instâncias de banco de dados locais desatualizadas, mas isso é um problema de gerenciamento de software, não um DBA um IMO.

sql-server security
  • 3 3 respostas
  • 3348 Views

3 respostas

  • Voted
  1. Cody Konior
    2016-11-09T05:53:55+08:002016-11-09T05:53:55+08:00

    Para mim, todos esses argumentos são particularmente inválidos

    OK. Mas eles não são para o resto de nós. Por quê?

    Consistência de nível de patch entre servidores de desenvolvimento e produção

    o patch seria comprovado quando um aplicativo avançasse no teste

    O patching pode corrigir problemas de estabilidade e corrupção de dados que, de outra forma, afetariam os desenvolvedores. Deve ser feito em máquinas de desenvolvimento independentemente.

    Segurança de dados; apenas os dados nos servidores de desenvolvimento são usados ​​para desenvolvimento

    É útil separar "o que deveria ser" de "o que é". Os desenvolvedores acabam com dados confidenciais (não necessariamente PII, mas também não gratuitos) em seus bancos de dados. Acontece.

    Recuperabilidade; os dados são recuperáveis ​​e ainda têm backup

    Super importante.

    Diferenças de agrupamento que podem causar problemas quando movidas para produção

    Somente o SharePoint e o SCCM têm problemas com isso

    Qualquer coisa que use uma tabela temporária terá esse problema. É extremamente comum. Você nunca percebe isso porque a maioria das pessoas prefere um agrupamento padrão em primeiro lugar.

    assumindo que é APENAS para desenvolvimento, e o banco de dados não será "movido" para produção

    Por que assumiríamos isso? As coisas geralmente vão do desenvolvimento à produção. De que outra forma você obtém a produção preenchida pela primeira vez? roteiros puros? Não necessariamente quando o aplicativo está em pré-produção há algum tempo.

    Acho que uma das maiores preocupações seria a capacidade de instâncias de banco de dados locais desatualizadas, mas isso é um problema de gerenciamento de software, não um DBA um IMO.

    Você simplesmente precisa emitir uma declaração sobre o que você faz e não apóia e por quê.

    LocalDB é uma parte essencial do SSDT agora e inevitável. No entanto, não é acessível remotamente e não possui um componente de agendamento (o Express tem problemas semelhantes). Portanto, geralmente não é suportado por DBAs em relação a backups, manutenção e verificações de integridade.

    Mas a consolidação em servidores de desenvolvimento centralizados ainda faz sentido. E agora que a Developer Edition é gratuita, é ainda mais fácil justificar ter mais deles.

    • 6
  2. Solomon Rutzky
    2016-11-09T07:46:10+08:002016-11-09T07:46:10+08:00

    Conceitualmente falando, você está no caminho certo. Para uma organização que possui um processo de desenvolvimento / ciclo de vida de desenvolvimento de software (SDLC) maduro que inclui controle de código-fonte, integração contínua (CI), testes automatizados e um grupo de TI que sabe como gerenciar vários ambientes e estações de trabalho para mantê-los sincronizados em relação aos níveis de software e patch, e desenvolvedores disciplinados que a) seguem o processo, b) trabalham juntos e c) trabalham com TI, então ter 50 (ou quantos) bancos de dados de desenvolvimento pode funcionar:

    • Sim, software consistente e níveis de patch podem ser mantidos em qualquer número de estações de trabalho.
    • Sim, qualquer "problema" pode surgir em testes automatizados e/ou ambientes QA/UAT.
    • Muitos bancos de dados de desenvolvimento não são tão fáceis de fazer backup, mas também não são impossíveis. Se estiver usando Perfis de roaming, os arquivos de dados que estão na pasta "Configurações locais" de cada usuário do Windows podem ser mais fáceis de fazer backup. Ou, pelo menos, pode ser programado pelo TI para obter arquivos de todas as estações de trabalho de desenvolvimento, semelhante a como eles garantiriam que todos fossem corrigidos corretamente.

    MAS, como quase tudo, tudo se resume ao contexto da situação.

    Um benefício de ter bancos de dados de desenvolvimento separados é que vários projetos podem ser trabalhados simultaneamente sem afetar uns aos outros. (Claro, esse pode ser o único benefício.)

    NO ENTANTO, há várias questões a considerar:

    • Qual é o tamanho da equipe e quantas pessoas estão trabalhando em um determinado projeto? Quanto mais pessoas você tiver trabalhando em um projeto, mais você precisará de um servidor de desenvolvimento compartilhado/centralizado para que todos recebam todas as alterações.

    • Em termos de agrupamento, o SQL Server Express LocalDB tem uma nuance/restrição/limitação particularmente irritante:

      O agrupamento de instância para LocalDB é definido como SQL_Latin1_General_CP1_CI_AS e não pode ser alterado. Collations em nível de banco de dados, nível de coluna e nível de expressão são suportados normalmente. Os bancos de dados independentes seguem as regras de agrupamentos de metadados e tempdb definidos por agrupamentos de bancos de dados independentes .

      O agrupamento em nível de instância afeta não apenas tempdb(ou seja, resolução de nome de objeto com escopo definido no banco de dados e agrupamento padrão para tabelas temporárias, mas não variáveis ​​de tabela), mas também nomes de variáveis ​​locais, nomes de cursores/nomes de parâmetros e gotonomes de rótulos. Portanto, se seus servidores de produção tiverem um Collation em nível de instância diferente de SQL_Latin1_General_CP1_CI_AS, o LocalDB não será uma boa escolha.

    • Você está usando os recursos da Enterprise Edition? Se for apenas uma questão de fazer reconstruções de índice ONLINE, isso provavelmente não importa. Mas se você estiver usando algo como Table Partitioning, o LocalDB não é uma boa escolha.

    • Talvez o maior problema seja o aumento geral do escopo de possíveis problemas decorrentes de quaisquer disparidades ambientais (nível de sistema operacional, nível de patch de software, configuração de instância, configuração de banco de dados etc.) que podem levar a um bug. Embora já tenhamos aceitado (em um sentido geral) que testes automatizados/QA/UAT encontrariam esses problemas, isso não é garantido ! Dado que os humanos cometem erros e que precisam criar todos os testes que verifiquem todos os caminhos de código e todas as variações de dados (tipos, tamanho, etc.), é altamente provável que qualquer número de cenários nãoser testado e que um bug pode passar e não ser notado até que um cliente o encontre na produção. Isso acontece de qualquer maneira, mas as chances aumentam ao usar o LocalDB para que cada desenvolvedor possa ter seu próprio banco de dados privado.

    O que realmente importa é: qual é o motivo convincente para usá-lo em um ambiente de equipe? Em vários trabalhos, sempre trabalhei em grupos onde havia desenvolvedores de aplicativos e engenheiros de banco de dados e, embora os desenvolvedores de aplicativos às vezes simulassem um procedimento armazenado apenas para fazê-lo mais rapidamente (não havia o suficiente de nós, DBEs), os DBEs faziam a maior parte do Programação de banco de dados, incluindo verificação (ou seja, correção) de qualquer código que os desenvolvedores de aplicativos tenham escrito. O uso do LocalDB tornaria muito mais difícil trabalhar em grupo. E ao usar o SQL Server Express (ou mesmo o Developer Edition) para ter instâncias pessoais em cada estação de trabalho de desenvolvimento acessível remotamente - facilitando a colaboração - nunca houve necessidade de ter esse nível de isolamento, pois era raro as alterações no banco de dados de um projeto impactam negativamente outro.

    Claro, aqueles de nós que eram engenheiros de banco de dados (DBEs) tinham instalações locais da Express Edition e/ou Developer Edition. Mas isso era para fazer testes que exigiam mais controle sobre a configuração/segurança no nível da instância, etc., do que poderia ser permitido em um servidor compartilhado. E usei as instâncias locais ocasionalmente, mas não com muita frequência. Mas para meus projetos pessoais, adoro o LocalDB e o uso com bastante frequência.

    • 5
  3. Best Answer
    Troy Witthoeft
    2017-02-06T14:06:15+08:002017-02-06T14:06:15+08:00

    Sim. Todos os desenvolvedores devem ter uma instância local do SQL Server E uma instância compartilhada do SQL Server. Eles existem para propósitos diferentes. Ambos são necessários.


    Talvez seu ambiente atual seja assim?

    Desenvolvimento legado do SQL Server compartilhado

    Acima, vários desenvolvedores estão criando alterações e implantando-as em um banco de dados SQL Developer comum. Isto é mau. Microsoft MVP Troy Hunt documenta alguns dos pontos problemáticos dessa abordagem antiquada, aqui . Os primários são...

    1. Incapacidade de controlar adequadamente a origem. GRANDE!
    2. Incapacidade de ajustar o desempenho sem direitos no nível do servidor.
    3. Incapacidade de experimentar sem impactar os outros.

    Esse padrão causa conflito de desenvolvedor. Um sintoma do conflito é a expansão do banco de dados. Muitos bancos de dados são criados à medida que os desenvolvedores buscam um espaço seguro e isolado para fazer seu trabalho. Existem várias razões pelas quais a organização se apega a esse padrão. A primeira é que eles não investiram em um sistema de controle de origem adequado . Outra é que eles simplesmente herdaram esse padrão de design e não podem se incomodar em alterá-lo. A Microsoft tem se distanciado constantemente desse padrão e em direção a algo mais parecido com isso...

    insira a descrição da imagem aqui

    No diagrama acima, cada desenvolvedor usa o Visual Studio para gravar e salvar suas alterações no banco de dados em uma instância local do SQL Server. Essas alterações locais são então sincronizadas em um sistema de controle de origem apropriado. Aqui, cada desenvolvedor pode projetar e experimentar em um ambiente onde suas alterações não afetarão ninguém até o check-in. E nessa hora os conflitos serão resolvidos.

    O banco de dados local usado acima pode ser as edições LocalDB, Express ou Developer. Simple-Talk faz um ótimo trabalho pesando os prós e contras de cada um aqui . Há uma razão pela qual a Microsoft criou tantas opções para bancos de dados de desenvolvimento local: LocalDB, Express, Developer... deveríamos usá-los!

    Se você precisar escolher, é difícil não argumentar que todo desenvolvedor tem uma versão local do SQL Server Developer Edition instalada. É totalmente gratuito e tem paridade de recursos com a edição Enterprise. Ele permitirá que toda a sua equipe explore e projete toda a pilha de BI da Microsoft (SQL Server, SSIS, SSRS e SSAS) de maneira segura.

    Ainda podemos manter o banco de dados comum, mas não deve ser para desenvolvimento, deve ser para teste. É um servidor onde as configurações de nível de sistema estão sincronizadas com a produção. Hardware, SO, patches, etc.

    • 5

relate perguntas

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Protegendo senhas de banco de dados

  • Como determinar se um Índice é necessário ou necessário

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