Por que usar o mestre para criar um banco de dados?

12

Eu tenho uma pergunta curta, por que eu uso use master;para criar um banco de dados? Aqui está o exemplo da documentação da Microsoft

USE master ;
GO
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
    FILENAME = 'C:\Program Files\...\saledat.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,  
    FILENAME = 'C:\Program Files\...\salelog.ldf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB ) ;
S Nell
fonte

Respostas:

22

Não é absolutamente um requisito neste caso muito específico, mas é um requisito em muitos outros cenários. Se você estiver criando um banco de dados chamado Salese já tiver um banco de dados chamado Sales, precisará alterar o contexto do banco de dados antes de:

  • Restaurar com substituir; ou,
  • Solte o banco de dados atual e, em seguida:
    • Crie do zero; ou,
    • Crie para anexar.

Existem muitos outros cenários fora da criação do banco de dados que também exigem: (a) não estar no contexto do banco de dados atual ou (b) estar no contexto de masterespecificamente (ou pelo menos não um banco de dados específico ), e muitos as seguintes ações que você pode fazer durante a criação de bancos de dados:

  • Definir um banco de dados para um estado diferente, como single_user
  • Evitando erros quando um script possui um USEcomando, mas o banco de dados do usuário pode estar offline ou inacessível
  • Conceder permissões no nível do servidor, como CREATE DATABASE
  • Concedendo Associação à Função no Nível do Servidor
  • Marcando um módulo como um objeto do sistema ( sp_MS_marksystemobject) ou como um procedimento de inicialização
  • Certos tipos de operações de certificado, auditoria de servidor e grupo de disponibilidade

Provavelmente uma série de outras coisas. USE master;nem sempre é necessário, mas às vezes é, e não custa sempre executar comandos no nível do servidor desse banco de dados.

Aaron Bertrand
fonte
17

Eu acredito que não é um requisito que você use o masterbanco de dados para criar um banco de dados. Como o comando create database deve ser executado em um contexto de banco de dados, a documentação sempre usa um banco de dados padrão que é mastere é um banco de dados do sistema que estará sempre lá, não importa o que o script não falhe!

Biju jose
fonte
4

Eu acredito que nós, há muito, muito tempo, tivemos que estar no mestre ao executar o comando CREATE DATABASE. Estou com preguiça de iniciar uma versão de 20 anos para verificar. Então, provavelmente, uma combinação disso e que "parece natural" estar no mestre. Como se você fosse criar uma pasta (imagine que haja apenas um nível de pastas), você provavelmente se sentirá "melhor" ao dizer CD \ first (comparando a raiz aqui com o banco de dados mestre).

Tibor Karaszi
fonte