web-dev-qa-db-ja.com

masterを使用してデータベースを作成する理由

短い質問があります。なぜuse master;データベースを作成するには?これは、Microsoftのドキュメントの example です。

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 ) ;
12
S Nell

これは、この非常に特殊なケースでは絶対に必須ではありませんが、他の多くのシナリオでは必須です。 Salesというデータベースを作成していて、Salesというデータベースを持っている場合は、次のことを行う前にデータベースコンテキストを変更する必要があります。

  • 置換して復元します。または、
  • 現在のデータベースを削除してから、
    • ゼロから作成。または、
    • アタッチ用に作成します。

データベース作成以外にも、(a)現在のデータベースのコンテキスト内にない、または(b)masterのコンテキスト内にある(または少なくとも- 特定のデータベース)、およびデータベースの作成中または作成中に行う可能性があるこれらの多くのこと:

  • データベースをsingle_userなどの別の状態に設定する
  • スクリプトにUSEコマンドが含まれているが、そのユーザーデータベースがオフラインであるかアクセスできない場合のエラーの防止
  • CREATE DATABASEのようなサーバーレベルのアクセス許可を付与する
  • サーバーレベルのロールメンバーシップの付与
  • モジュールをシステムオブジェクト(sp_MS_marksystemobject)またはスタートアッププロシージャとしてマークする
  • 特定の種類の証明書、サーバー監査、および可用性グループの操作

おそらく他にもたくさんあります。 USE master;は常に必要なわけではありませんが、必要な場合もあり、そのデータベースからサーバーレベルのコマンドを常に実行する必要はありませんhurt

22
Aaron Bertrand

masterデータベースを使用してデータベースを作成する必要はありません。 create databaseコマンドはデータベースコンテキストで実行する必要があるため、ドキュメンテーションは常にmasterであるデフォルトデータベースを使用します。これはシステムデータベースであり、常に存在するため、スクリプトは失敗しません。

17
Biju jose

私たちは、非常に昔に、CREATE DATABASEコマンドを実行するときにhadがマスターになると信じています。 20年前のバージョンを起動して確認するのが面倒です。おそらく、それとマスターになることは「自然に感じる」ことの組み合わせでしょう。フォルダーを作成する場合(フォルダーのレベルが1つしかないことを想像してください)のように、最初にCD \と言う方がいいと思います(ルートをマスターデータベースと比較して)。

4
Tibor Karaszi