다음을 통해 공유


CREATE DATABASE(Transact-SQL)

새 데이터베이스 및 데이터베이스 저장에 사용되는 파일을 만들고 데이터베이스 스냅숏을 만들거나 이전에 만든 데이터베이스의 분리된 파일에서 데이터베이스를 연결합니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

CREATE DATABASE database_name 
    [ ON 
        { [ PRIMARY ] [ <filespec> [ ,...n ] 
        [ , <filegroup> [ ,...n ] ] 
    [ LOG ON { <filespec> [ ,...n ] } ] }
    ] 
    [ COLLATE collation_name ]
    [ WITH <external_access_option> ]
]
[;]

To attach a database
CREATE DATABASE database_name 
    ON <filespec> [ ,...n ] 
    FOR { ATTACH [ WITH <service_broker_option> ]
        | ATTACH_REBUILD_LOG }
[;]

<filespec> ::= 
{
(
    NAME =logical_file_name,
    FILENAME = { 'os_file_name' | 'filestream_path' } 
        [ , SIZE =size [ KB | MB | GB | TB ] ] 
        [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] 
        [ , FILEGROWTH =growth_increment [ KB | MB | GB | TB | % ] ]
) [ ,...n ]
}

<filegroup> ::= 
{
FILEGROUP filegroup_name [ CONTAINS FILESTREAM ] [ DEFAULT ]
    <filespec> [ ,...n ]
}

<external_access_option> ::=
{
  [ DB_CHAINING { ON | OFF } ]
  [ , TRUSTWORTHY { ON | OFF } ]
}
<service_broker_option> ::=
{
    ENABLE_BROKER
  | NEW_BROKER
  | ERROR_BROKER_CONVERSATIONS
}

Create a database snapshot
CREATE DATABASE database_snapshot_name 
    ON 
    (
        NAME = logical_file_name,
        FILENAME ='os_file_name' 
    ) [ ,...n ] 
    AS SNAPSHOT OF source_database_name
[;]

인수

  • database_name
    새 데이터베이스의 이름입니다. 데이터베이스 이름은 SQL Server 인스턴스 내에서 고유해야 하고 식별자 규칙에 따라야 합니다.

    로그 파일에 논리적 이름을 지정하는 경우 database_name은 최대 128자가 될 수 있습니다. 논리적 로그 파일 이름을 지정하지 않으면 SQL Server에서 database_name에 접미사를 추가하여 로그의 logical_file_name과 os_file_name을 생성합니다. 생성할 논리적 파일 이름이 128자를 넘지 않도록 database_name은 123자로 제한됩니다.

    데이터 파일 이름을 지정하지 않으면 SQL Server에서는 database_name을 logical_file_name과 os_file_name으로 사용합니다. 기본 경로는 레지스트리에서 가져옵니다. 기본 경로는 Management Studio에서 서버 속성(데이터베이스 설정 페이지)을 사용하여 변경할 수 있습니다. 기본 경로를 변경하려면 SQL Server를 다시 시작해야 합니다.

  • ON
    데이터베이스의 데이터 섹션을 저장하는 데 사용하는 디스크 파일인 데이터 파일을 명시적으로 정의하도록 지정합니다. 주 파일 그룹의 데이터 파일을 정의하는 <filespec> 항목의 쉼표로 구분된 목록을 나열할 때는 ON이 필요합니다. 주 파일 그룹의 파일 목록 다음에는 필요에 따라 사용자 파일 그룹과 해당 파일을 정의하는 쉼표로 구분된 <filegroup> 항목의 목록이 올 수 있습니다.

  • PRIMARY
    연결된 <filespec> 목록이 주 파일을 정의하도록 지정합니다. 주 파일 그룹의 <filespec> 항목에서 지정한 첫 번째 파일이 주 파일이 됩니다. 데이터베이스에는 주 파일이 하나만 있을 수 있습니다. 자세한 내용은 파일 및 파일 그룹 아키텍처을 참조하십시오.

    PRIMARY를 지정하지 않으면 CREATE DATABASE 문에 나열된 첫 번째 파일이 주 파일이 됩니다.

  • LOG ON
    데이터베이스 로그를 저장하는 데 사용하는 디스크 파일인 로그 파일을 명시적으로 정의하도록 지정합니다. LOG ON 다음에는 로그 파일을 정의하는 쉼표로 구분된 <filespec> 항목의 목록이 옵니다. LOG ON을 지정하지 않은 경우에는 데이터베이스의 모든 데이터 파일 크기를 합한 값의 25% 또는 512KB 중에서 더 큰 값을 갖는 로그 파일 하나가 자동으로 만들어집니다. 이 파일은 기본 로그 파일 위치에 저장됩니다. 이 위치에 대한 자세한 내용은 방법: 데이터 및 로그 파일의 기본 위치 보기 또는 변경(SQL Server Management Studio)을 참조하십시오.

    데이터베이스 스냅숏에는 LOG ON을 지정할 수 없습니다.

  • COLLATE collation_name
    데이터베이스의 기본 데이터 정렬을 지정합니다. 데이터 정렬 이름으로는 Windows 데이터 정렬 이름 또는 SQL 데이터 정렬 이름을 사용할 수 있습니다. 이 인수를 지정하지 않으면 데이터베이스에 SQL Server 인스턴스의 기본 데이터 정렬이 할당됩니다. 데이터베이스 스냅숏에는 데이터 정렬 이름을 지정할 수 없습니다.

    FOR ATTACH 또는 FOR ATTACH_REBUILD_LOG 절을 사용하여 데이터 정렬 이름을 지정할 수 없습니다. 연결된 데이터베이스의 데이터 정렬을 변경하는 방법은 Microsoft 웹 사이트를 참조하십시오.

    Windows 데이터 정렬 이름 및 SQL 데이터 정렬 이름에 대한 자세한 내용은 COLLATE(Transact-SQL)를 참조하십시오.

  • FOR ATTACH [ WITH <service_broker_option> ]
    기존 운영 체제 파일 집합을 연결하여 데이터베이스를 만들도록 지정합니다. 여기에는 주 파일을 지정하는 <filespec> 항목이 반드시 필요하며 이 밖에 데이터베이스를 처음 만들었거나 마지막으로 연결했을 때 경로가 다른 파일에 대한 <filespec> 항목이 필요합니다. 이러한 파일에는 반드시 <filespec> 항목을 지정해야 합니다.

    FOR ATTACH를 사용하려면 다음과 같은 조건을 충족해야 합니다.

    • 모든 데이터 파일(MDF 및 NDF)을 사용할 수 있어야 합니다.

    • 로그 파일이 여러 개 있는 경우 해당 파일을 모두 사용할 수 있어야 합니다.

    읽기/쓰기 데이터베이스에 현재 사용할 수 없는 로그 파일이 하나 있고 연결 작업 이전에 사용자 또는 열린 트랜잭션 없이 데이터베이스가 종료된 경우 FOR ATTACH를 사용하면 자동으로 로그 파일이 다시 작성되고 주 파일이 업데이트됩니다. 반면에 읽기 전용 데이터베이스의 경우에는 주 파일을 업데이트할 수 없으므로 로그를 다시 작성할 수 없습니다. 따라서 로그를 사용할 수 없는 읽기 전용 데이터베이스를 연결할 때는 로그 파일 또는 FOR ATTACH 절 내의 파일을 제공해야 합니다.

    [!참고]

    최신 버전의 SQL Server에서 만든 데이터베이스를 이전 버전에서 연결할 수 없습니다. SQL Server 2008에 연결하려면 원본 데이터베이스의 버전이 80(SQL Server 2000) 이상이어야 합니다. 호환성 수준이 80 미만인 SQL Server 2000 또는 SQL Server 2005 데이터베이스를 연결하면 호환성이 80으로 설정됩니다.

    SQL Server에서는 연결 중인 데이터베이스에 속한 모든 전체 텍스트 파일이 데이터베이스에 연결됩니다. 전체 텍스트 카탈로그의 새 경로를 지정하려면 전체 텍스트 운영 체제 파일 이름을 제외한 새 위치를 지정합니다. 자세한 내용은 예 섹션을 참조하십시오.

    데이터베이스 스냅숏에는 FOR ATTACH를 지정할 수 없습니다.

    데이터베이스에서 Service Broker를 사용하는 경우 다음과 같이 FOR ATTACH 절에 WITH <service_broker_option>을 사용합니다.

    • <service_broker_option>
      데이터베이스에 대해 Service Broker 메시지 배달 및 Service Broker 식별자를 제어해야 합니다. Service Broker 옵션은 FOR ATTACH 절을 사용할 때만 지정할 수 있습니다.

      • ENABLE_BROKER
        지정된 데이터베이스에 대해 Service Broker를 사용할 수 있도록 지정합니다. 즉, 메시지 배달이 시작되고 sys.databases 카탈로그 뷰에서 is_broker_enabled가 True로 설정됩니다. 데이터베이스에 기존 Service Broker 식별자가 유지됩니다.

      • NEW_BROKER
        sys.databases 와 복원된 데이터베이스 둘 다에서 새 service_broker_guid 값을 만들고 정리 작업을 통해 모든 대화 끝점을 끝냅니다. 이때 Service Broker가 설정되지만 원격 대화 끝점에 메시지가 전송되지 않습니다. 이전 Service Broker 식별자를 참조하는 경로는 새 식별자로 다시 만들어야 합니다.

      • ERROR_BROKER_CONVERSATIONS
        데이터베이스가 연결 또는 복원되었음을 나타내는 오류 메시지와 함께 모든 대화를 끝냅니다. Service Broker는 이 작업이 완료될 때까지 해제된 후 설정됩니다. 데이터베이스에 기존 Service Broker 식별자가 유지됩니다.

      자세한 내용은 Service Broker ID 관리를 참조하십시오.

    데이터베이스를 분리하거나 연결할 때마다 설정되는 파일 사용 권한에 대한 자세한 내용은 데이터 및 로그 파일 보안을 참조하십시오.

    분리되지 않고 복사된 복제 데이터베이스를 연결하는 경우에는 다음 사항을 고려합니다.

    • 데이터베이스를 원래 데이터베이스와 동일한 서버 인스턴스 및 버전에 연결하는 경우에는 추가 작업이 필요하지 않습니다.

    • 데이터베이스를 동일한 서버 인스턴스의 업그레이드된 버전에 연결하는 경우에는 연결 작업이 완료된 다음 sp_vupgrade_replication을 실행하여 복제를 업그레이드해야 합니다.

    • 데이터베이스를 버전에 관계없이 다른 서버 인스턴스에 연결하는 경우에는 연결 작업이 완료된 다음 sp_removedbreplication을 실행하여 복제를 제거해야 합니다.

      [!참고]

      vardecimal 저장소 형식으로 연결 작업을 수행할 수는 있지만 SQL Server 데이터베이스 엔진을 SQL Server 2005 서비스 팩 2 이상으로 업그레이드해야 합니다. Vardecimal 저장소 형식을 사용하는 데이터베이스를 이전 버전의 SQL Server에 연결할 수 없습니다. vardecimal 저장소 형식에 대한 자세한 내용은 Decimal 데이터를 가변 길이로 저장을 참조하십시오.

    연결을 사용하여 데이터베이스를 업그레이드하는 방법은 방법: 분리 및 연결을 사용하여 데이터베이스 업그레이드(Transact-SQL)를 참조하십시오.

    보안 정보보안 정보

    출처를 알 수 없거나 신뢰할 수 없는 데이터베이스는 연결하지 않는 것이 좋습니다. 이러한 데이터베이스에 포함된 악성 코드가 의도하지 않은 Transact-SQL 코드를 실행하거나 스키마 또는 물리적 데이터베이스 구조를 수정하여 오류가 발생할 수 있습니다. 출처를 알 수 없거나 신뢰할 수 없는 데이터베이스를 사용하기 전에 프로덕션 서버가 아닌 서버에서 해당 데이터베이스에 대해 DBCC CHECKDB를 실행하고 저장 프로시저 또는 다른 사용자 정의 코드 같은 데이터베이스의 코드도 검사하십시오.

  • FOR ATTACH_REBUILD_LOG
    기존 운영 체제 파일 집합을 연결하여 데이터베이스를 만들도록 지정합니다. 이 옵션은 읽기/쓰기 데이터베이스로 제한됩니다. 여기에는 주 파일을 지정하는 <filespec> 항목이 필요합니다. 하나 이상의 트랜잭션 로그 파일이 없으면 로그 파일이 다시 작성됩니다. ATTACH_REBUILD_LOG는 1MB의 새 로그 파일을 자동으로 만들어 이 파일은 기본 로그 파일 위치에 저장됩니다. 이 위치에 대한 자세한 내용은 방법: 데이터 및 로그 파일의 기본 위치 보기 또는 변경(SQL Server Management Studio)을 참조하십시오.

    [!참고]

    로그 파일이 있으면 데이터베이스 엔진은 로그 파일을 다시 작성하지 않고 해당 파일을 사용합니다.

    FOR ATTACH_REBUILD_LOG를 사용하려면 다음과 같은 조건을 충족해야 합니다.

    • 데이터베이스가 완전하게 종료된 상태여야 합니다.

    • 모든 데이터 파일(MDF 및 NDF)을 사용할 수 있어야 합니다.

    중요 정보중요

    이 작업을 실행하면 로그 백업 체인이 끊어집니다. 따라서 작업이 완료된 후 전체 데이터베이스 백업을 수행하는 것이 좋습니다. 자세한 내용은 BACKUP(Transact-SQL)을 참조하십시오.

    일반적으로 FOR ATTACH_REBUILD_LOG는 로그 크기가 큰 읽기/쓰기 데이터베이스를 복사본이 주로 읽기 작업에만 사용되어 원본 데이터베이스에 비해 로그 공간이 덜 필요한 다른 서버에 복사할 때 사용됩니다.

    데이터베이스 스냅숏에는 FOR ATTACH_REBUILD_LOG를 지정할 수 없습니다.

    데이터베이스를 연결 및 분리하는 방법은 데이터베이스 분리 및 연결을 참조하십시오.

  • <filespec>
    파일 속성을 제어합니다.

  • NAME logical_file_name
    파일의 논리적 이름을 지정합니다. FOR ATTACH 절 중 하나를 지정하는 경우가 아니면 FILENAME이 지정될 때 NAME이 필요합니다. FILESTREAM 파일 그룹 이름은 PRIMARY로 지정할 수 없습니다.

    • logical_file_name
      파일을 참조할 때 SQL Server에서 사용하는 논리적 이름입니다. Logical_file_name은 데이터베이스 내에서 고유해야 하고 식별자 규칙에 따라야 합니다. 이 이름은 문자 상수, 유니코드 상수, 일반 식별자 또는 구분 식별자가 될 수 있습니다.
  • FILENAME { 'os_file_name' | 'filestream_path' }
    운영 체제(물리적) 파일 이름을 지정합니다.

    • 'os_file_name'
      파일을 만들 때 운영 체제에서 사용한 경로와 파일 이름입니다. 파일은 SQL Server가 설치된 로컬 서버, SAN(저장 영역 네트워크) 또는 iSCSI 기반 네트워크 중 하나의 장치에 있어야 합니다. 지정한 경로는 CREATE DATABASE 문을 실행하기 전에 반드시 존재해야 합니다. 자세한 내용은 주의 섹션의 "데이터베이스 파일 및 파일 그룹"을 참조하십시오.

      파일에 UNC 경로가 지정되면 SIZE, MAXSIZE 및 FILEGROWTH 매개 변수를 설정할 수 없습니다.

      파일이 원시 파티션에 있을 경우에는 os_file_name에 기존 원시 파티션의 드라이브 문자만 지정해야 합니다. 각 원시 파티션에는 데이터 파일을 하나만 만들 수 있습니다.

      파일이 읽기 전용 보조 파일이 아니거나 데이터베이스가 읽기 전용이 아니면 데이터 파일을 압축 파일 시스템에 저장하지 마십시오. 로그 파일은 절대로 압축 파일 시스템에 저장하지 마십시오. 자세한 내용은 읽기 전용 파일 그룹 및 압축을 참조하십시오.

    • 'filestream_path'
      FILENAME 파일 그룹의 경우 FILENAME은 FILESTREAM 데이터가 저장될 경로를 참조합니다. 따라서 마지막 폴더 바로 위의 경로까지 있어야 하고 마지막 폴더 자체는 있으면 안 됩니다. 예를 들어 C:\MyFiles\MyFilestreamData 경로를 지정하는 경우 ALTER DATABASE를 실행하기 전에 C:\MyFiles 경로가 있어야 하지만 MyFilestreamData 폴더는 있으면 안 됩니다.

      파일 그룹과 파일(<filespec>)은 같은 문으로 만들어야 합니다. FILESTREAM 파일 그룹에 <filespec>, 파일 하나만 있을 수도 있습니다.

      SIZE, MAXSIZE 및 FILEGROWTH 속성은 FILESTREAM 그룹에 적용되지 않습니다.

  • SIZE size
    파일의 크기를 지정합니다.

    os_file_name이 UNC 경로로 지정된 경우에는 SIZE를 지정할 수 없습니다. SIZE는 FILESTREAM 파일 그룹에 적용되지 않습니다.

    • size
      파일의 처음 크기입니다.

      주 파일의 size를 지정하지 않으면 데이터베이스 엔진에서는 model 데이터베이스에 있는 주 파일의 크기를 사용합니다. 보조 데이터 파일 또는 로그 파일을 지정하고 해당 파일의 size 를 지정하지 않으면 데이터베이스 엔진에서는 파일 크기를 1MB로 지정합니다. 주 파일에 지정된 크기는 최소한 model 데이터베이스의 주 파일 크기와 같아야 합니다.

      KB(킬로바이트), MB(메가바이트), GB(기가바이트) 또는 TB(테라바이트) 접미사를 사용할 수 있습니다. 기본값은 MB입니다. 소수점을 포함하지 않은 정수를 지정하십시오. Size는 정수 값입니다. 2147483647보다 큰 값에는 더 큰 단위를 사용합니다.

  • MAXSIZE max_size
    파일이 증가할 수 있는 최대 크기를 지정합니다. os_file_name이 UNC 경로로 지정된 경우에는 MAXSIZE를 지정할 수 없습니다. MAXSIZE는 FILESTREAM 파일 그룹에 적용되지 않습니다.

    • max_size
      최대 파일 크기입니다. KB, MB, GB 및 TB 접미사를 사용할 수 있습니다. 기본값은 MB입니다. 소수점을 포함하지 않은 정수를 지정하십시오. max_size를 지정하지 않으면 디스크가 꽉 찰 때까지 파일이 커집니다. Max_size는 정수 값입니다. 2147483647보다 큰 값에는 더 큰 단위를 사용합니다.
  • UNLIMITED
    디스크가 꽉 찰 때까지 파일 크기가 증가하도록 지정합니다. SQL Server에서 무제한 증가로 지정된 로그 파일의 최대 크기는 2TB이고 데이터 파일의 최대 크기는 16TB입니다.

  • FILEGROWTH growth_increment
    파일의 자동 증분을 지정합니다. 파일의 FILEGROWTH 설정은 MAXSIZE 설정을 초과할 수 없습니다. os_file_name이 UNC 경로로 지정된 경우에는 FILEGROWTH를 지정할 수 없습니다. FILEGROWTH는 FILESTREAM 파일 그룹에 적용되지 않습니다.

    • growth_increment
      공간이 새로 필요할 때마다 파일에 추가되는 공간 크기입니다.

      이 값은 MB, KB, GB, TB 또는 %(퍼센트) 단위로 지정할 수 있습니다. MB, KB 또는 % 접미사를 붙이지 않고 숫자를 지정하면 MB가 기본값이 됩니다. %가 지정되면 증분 크기는 파일 크기 증가가 발생하는 시점에서 해당 파일 크기에 대한 특정 비율입니다. 지정한 크기는 64KB 근사값으로 반올림됩니다.

      값이 0이면 자동 증가가 해제되어 있고 추가 공간이 허용되지 않음을 나타냅니다.

      FILEGROWTH를 지정하지 않는 경우 데이터 파일과 로그 파일의 기본값은 각각 1MB와 10%이며 최소값은 64KB입니다.

      [!참고]

      SQL Server에서는 데이터 파일의 기본 증분이 10%에서 1MB로 변경되었습니다. 로그 파일 기본값 10%는 변경되지 않고 그대로 유지됩니다.

  • <filegroup>
    파일 그룹 속성을 제어합니다. 데이터베이스 스냅숏에는 파일 그룹을 지정할 수 없습니다.

  • FILEGROUP filegroup_name
    파일 그룹의 논리적 이름입니다.

    • filegroup_name
      filegroup_name은 데이터베이스 내에서 고유해야 하고 시스템에서 제공한 이름인 PRIMARY 및 PRIMARY_LOG일 수 없습니다. 이 이름은 문자 상수, 유니코드 상수, 일반 식별자 또는 구분 식별자가 될 수 있습니다. 이 이름은 식별자에 대한 규칙을 따라야 합니다.

    • CONTAINS FILESTREAM
      파일 그룹이 FILESTREAM BLOB(Binary Large Object)를 파일 시스템에 저장하도록 지정합니다.

    • DEFAULT
      명명한 파일 그룹이 데이터베이스의 기본 파일 그룹임을 지정합니다.

  • <external_access_option>
    데이터베이스로 들어오고 나가는 외부 액세스를 제어합니다.

    • DB_CHAINING { ON | OFF }
      ON이 지정되면 데이터베이스가 데이터베이스 간 소유권 체인의 원본 또는 대상이 될 수 있습니다.

      OFF가 지정되면 데이터베이스가 데이터베이스 간 소유권 체인에 참여할 수 없습니다. 기본값은 OFF입니다.

      중요 정보중요

      SQL Server 인스턴스는 cross db ownership chaining 서버 옵션이 0(OFF)일 때 이 설정을 인식합니다. cross db ownership chaining이 1(ON)이면 모든 사용자 데이터베이스가 이 옵션의 값에 관계없이 데이터베이스 간 소유권 체인에 참여할 수 있습니다. 이 옵션은 sp_configure를 사용하여 설정됩니다.

      이 옵션을 설정하려면 sysadmin 고정 서버 역할의 멤버 자격이 필요합니다. DB_CHAINING 옵션은 다음 시스템 데이터베이스에서는 설정할 수 없습니다. master, model, tempdb.

      자세한 내용은 소유권 체인을 참조하십시오.

    • TRUSTWORTHY { ON | OFF }
      ON이 지정되면 뷰, 사용자 정의 함수 또는 저장 프로시저와 같이 가장 컨텍스트를 사용하는 데이터베이스 모듈이 데이터베이스 외부 리소스에 액세스할 수 있습니다.

      OFF가 지정되면 가장 컨텍스트의 데이터베이스 모듈이 데이터베이스 외부의 리소스에 액세스할 수 없습니다. 기본값은 OFF입니다.

      TRUSTWORTHY는 데이터베이스가 연결될 때마다 OFF로 설정됩니다.

      기본적으로 msdb 데이터베이스를 제외한 모든 시스템 데이터베이스는 TRUSTWORTHY가 OFF로 설정되어 있습니다. model 및 tempdb 데이터베이스의 경우 이 값을 변경할 수 있습니다. master 데이터베이스의 경우 TRUSTWORTHY 옵션을 ON으로 설정하지 않는 것이 좋습니다.

      이 옵션을 설정하려면 sysadmin 고정 서버 역할의 멤버 자격이 필요합니다.

  • database_snapshot_name
    새 데이터베이스 스냅숏의 이름입니다. 데이터베이스 스냅숏 이름은 SQL Server 인스턴스 내에서 고유해야 하며 식별자에 대한 규칙을 따라야 합니다. database_snapshot_name에는 최대 128자를 사용할 수 있습니다.

  • ON ( NAME =logical_file_name, FILENAME = 'os_file_name') [ ,... n ]
    데이터베이스 스냅숏을 만들기 위해 원본 데이터베이스의 파일 목록을 지정합니다. 스냅숏이 동작하려면 모든 데이터 파일을 개별적으로 지정해야 합니다. 그러나 데이터베이스 스냅숏에는 로그 파일이 허용되지 않습니다. 또한 FILESTREAM 파일 그룹은 데이터베이스 스냅숏에서 지원되지 않습니다. FILESTREAM 데이터 파일이 CREATE DATABASE ON 절에 포함되어 있으면 문이 실패하고 오류가 발생합니다.

    NAME, FILENAME 및 각 값에 대한 내용은 해당하는 <filespec> 값의 설명을 참조하십시오.

    [!참고]

    데이터베이스 스냅숏을 만들 때는 다른 <filespec> 옵션 및 PRIMARY 키워드를 사용할 수 없습니다.

  • AS SNAPSHOT OF source_database_name
    만들고 있는 데이터베이스가 source_database_name에 지정된 원본 데이터베이스의 데이터베이스 스냅숏임을 지정합니다. 스냅숏 및 원본 데이터베이스는 같은 인스턴스에 있어야 합니다.

    자세한 내용은 주의 섹션의 "데이터베이스 스냅숏"을 참조하십시오.

주의

사용자 데이터베이스를 생성, 수정 또는 삭제할 때마다 master 데이터베이스를 백업해야 합니다.

CREATE DATABASE 문은 기본 트랜잭션 관리 모드인 자동 커밋 모드에서 실행해야 하며 명시적 또는 암시적 트랜잭션에서는 허용되지 않습니다. 자세한 내용은 자동 커밋 트랜잭션을 참조하십시오.

CREATE DATABASE 문 하나를 사용하여 데이터베이스 및 해당 데이터베이스를 저장하는 파일을 만들 수 있습니다. SQL Server에서는 다음과 같은 단계로 CREATE DATABASE 문을 구현합니다.

  1. SQL Server에서 model 데이터베이스의 복사본을 사용하여 데이터베이스 및 해당 메타데이터를 초기화합니다.

  2. 데이터베이스에 Service Broker GUID가 할당됩니다.

  3. 데이터베이스 엔진에서 데이터베이스 내의 공간 사용 방법을 기록하는 내부 데이터가 포함된 페이지를 제외하고 데이터베이스의 나머지 부분을 빈 페이지로 채웁니다. 자세한 내용은 데이터베이스 파일 초기화를 참조하십시오.

하나의 SQL Server 인스턴스당 최대 32,767개의 데이터베이스를 지정할 수 있습니다.

각 데이터베이스에는 해당 데이터베이스에서 특수한 작업을 수행할 수 있는 소유자가 있습니다. 소유자는 데이터베이스를 만든 사용자입니다. sp_changedbowner를 사용하여 데이터베이스 소유자를 변경할 수 있습니다.

데이터베이스 파일 및 파일 그룹

모든 데이터베이스에는 주 파일과 트랜잭션 로그 파일이라는 2개의 파일과 하나의 파일 그룹이 있으며 각 데이터베이스에 최대 32,767개의 파일과 32,767개의 파일 그룹을 지정할 수 있습니다. 자세한 내용은 파일 및 파일 그룹 아키텍처을 참조하십시오.

데이터베이스를 만들 때는 데이터베이스에서 예상되는 최대 데이터 크기를 고려하여 데이터 파일을 가능한 한 크게 만드는 것이 좋습니다. 자세한 내용은 파일 및 파일 그룹을 사용하여 데이터베이스 증가 관리를 참조하십시오.

SQL Server의 성능과 안정성을 최적화하는 구성을 위해 SAN(저장 영역 네트워크), iSCSI 기반 네트워크 또는 로컬로 연결된 디스크에 SQL Server 데이터베이스 파일을 저장하는 것이 좋습니다.

데이터베이스 스냅숏

CREATE DATABASE 문을 사용하여 기존 데이터베이스, 즉 원본 데이터베이스의 읽기 전용 정적 뷰인 데이터베이스 스냅숏을 만들 수 있습니다. 데이터베이스 스냅숏은 스냅숏을 만들었을 당시의 원본 데이터베이스와 트랜잭션 측면에서 일관성을 가집니다. 원본 데이터베이스 하나에 스냅숏이 여러 개 있을 수 있습니다.

[!참고]

데이터베이스 스냅숏을 만드는 경우 CREATE DATABASE 문은 로그 파일, 오프라인 파일, 복원 파일 및 존재하지 않는 파일을 참조할 수 없습니다.

데이터베이스 스냅숏 만들기에 실패한 경우 해당 스냅숏은 주의 대상이 되며 삭제해야 합니다. 자세한 내용은 DROP DATABASE(Transact-SQL)를 참조하십시오.

각 스냅숏은 DROP DATABASE를 사용하여 삭제할 때까지 유지됩니다.

자세한 내용은 데이터베이스 스냅숏데이터베이스 스냅숏 제한 사항 및 요구 사항을 참조하십시오.

데이터베이스 옵션

데이터베이스를 만들 때마다 몇 가지 데이터베이스 옵션이 자동으로 설정됩니다. 이러한 옵션 및 기본 설정 목록을 보려면 데이터베이스 옵션 설정을 참조하십시오. ALTER DATABASE 문을 사용하여 이러한 옵션을 수정할 수 있습니다.

새 데이터베이스 만들기 및 model 데이터베이스

model 데이터베이스에 있는 모든 사용자 정의 개체는 새로 만든 데이터베이스에 복사됩니다. 테이블, 뷰, 저장 프로시저, 데이터 형식 등의 모든 개체를 model 데이터베이스에 추가하여 새로 만든 모든 데이터베이스에 포함할 수 있습니다.

크기 매개 변수를 추가하지 않고 CREATE DATABASE database_name 문을 지정하면 model 데이터베이스의 주 파일과 크기가 같은 주 데이터 파일이 만들어집니다.

FOR ATTACH를 지정하지 않은 경우 모든 새 데이터베이스는 model 데이터베이스에서 데이터베이스 옵션 설정을 상속합니다. 예를 들어 auto shrink와 같은 데이터베이스 옵션은 model 데이터베이스와 새로 만드는 모든 데이터베이스에서 true로 설정됩니다. model 데이터베이스에서 옵션을 변경하면 새로 만드는 모든 데이터베이스에 이러한 새 옵션 설정이 사용됩니다. 기존 데이터베이스는 model 데이터베이스 변경 작업에 영향을 받지 않습니다. CREATE DATABASE 문에 FOR ATTACH를 지정하는 경우 새 데이터베이스는 원본 데이터베이스의 데이터베이스 옵션 설정을 상속합니다.

데이터베이스 정보 보기

카탈로그 뷰, 시스템 함수 및 시스템 저장 프로시저를 사용하여 데이터베이스, 파일 및 파일 그룹에 대한 정보를 반환할 수 있습니다. 자세한 내용은 데이터베이스 메타데이터 보기를 참조하십시오.

사용 권한

CREATE DATABASE, CREATE ANY DATABASE 또는 ALTER ANY DATABASE 권한이 필요합니다.

SQL Server 인스턴스의 디스크 사용을 제어하기 위해 일반적으로 데이터베이스를 만들 수 있는 사용 권한은 일부 로그인 계정으로 제한됩니다.

데이터 및 로그 파일에 대한 사용 권한

SQL Server에서는 각 데이터베이스의 데이터 및 로그 파일에 특정 사용 권한이 설정됩니다. 데이터베이스에 다음 작업이 적용될 때마다 다음과 같은 사용 권한이 설정됩니다.

만들기

새 파일을 추가하기 위해 수정됨

연결

백업

분리

복원

이러한 사용 권한을 설정하면 누구나 액세스할 수 있는 디렉터리에 있는 파일이 실수로 변경되는 것을 방지할 수 있습니다. 자세한 내용은 데이터 및 로그 파일 보안을 참조하십시오.

[!참고]

Microsoft SQL Server 2005 Express Edition에서는 데이터 및 로그 파일 사용 권한을 설정하지 않습니다.

1. 파일을 지정하지 않고 데이터베이스 만들기

다음 예에서는 mytest 데이터베이스를 만들고 해당 주 파일 및 트랜잭션 로그 파일을 만듭니다. 문에 <filespec> 항목이 없으므로 주 데이터베이스 파일의 크기는 model 데이터베이스 주 파일의 크기와 같습니다. 트랜잭션 로그는 주 데이터 파일의 25% 크기 또는 512KB 중 큰 값으로 설정됩니다. MAXSIZE를 지정하지 않았으므로 사용 가능한 디스크 공간을 모두 채울 때까지 파일 크기가 증가할 수 있습니다. 이 예에서는 mytest 데이터베이스를 만들기 전에 mytest라는 데이터베이스(있는 경우)를 삭제하는 방법도 보여 줍니다.

USE master;
GO
CREATE DATABASE mytest;
GO
-- Verify the database files and sizes
SELECT name, size, size*1.0/128 AS [Size in MBs] 
FROM sys.master_files
WHERE name = N'mytest';
GO

2. 데이터 파일 및 트랜잭션 로그 파일을 지정하는 데이터베이스 만들기

다음 예에서는 Sales 데이터베이스를 만듭니다. PRIMARY 키워드를 사용하지 않았으므로 첫 번째 파일(Sales_dat)이 주 파일이 됩니다. Sales_dat 파일의 SIZE 매개 변수에 MB 또는 KB를 지정하지 않았으므로 기본값 MB를 사용하여 할당됩니다. Sales_log 파일은 SIZE 매개 변수에 명시적으로 MB 접미사를 지정했으므로 메가바이트(MB)로 공간이 할당됩니다.

USE master;
GO
CREATE DATABASE Sales
ON 
( NAME = Sales_dat,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\saledat.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\salelog.ldf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB ) ;
GO

3. 데이터 파일 및 트랜잭션 로그 파일을 여러 개 지정하여 데이터베이스 만들기

다음 예에서는 3개의 100-MB 데이터 파일과 2개의 100-MB 트랜잭션 로그 파일을 가진 Archive 데이터베이스를 만듭니다. 주 파일은 목록의 첫 번째 파일이며 PRIMARY 키워드로 명시적으로 지정되어 있습니다. 트랜잭션 로그 파일은 LOG ON 키워드 다음에 지정됩니다. FILENAME 옵션에서 파일에 사용된 확장명에 유의하십시오. 주 데이터 파일에는 .mdf, 보조 데이터 파일에는 .ndf, 트랜잭션 로그 파일에는 .ldf가 각각 사용됩니다. 이 예에서는 데이터베이스를 master 데이터베이스와 함께 배치하는 대신 D 드라이브에 배치합니다.

USE master;
GO
CREATE DATABASE Archive 
ON
PRIMARY  
    (NAME = Arch1,
    FILENAME = 'D:\SalesData\archdat1.mdf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch2,
    FILENAME = 'D:\SalesData\archdat2.ndf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch3,
    FILENAME = 'D:\SalesData\archdat3.ndf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20)
LOG ON 
   (NAME = Archlog1,
    FILENAME = 'D:\SalesData\archlog1.ldf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
   (NAME = Archlog2,
    FILENAME = 'D:\SalesData\archlog2.ldf',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20) ;
GO

4. 파일 그룹이 있는 데이터베이스 만들기

다음 예에서는 아래에 나열된 파일 그룹을 포함하는 Sales 데이터베이스를 만듭니다.

  • Spri1_dat 및 Spri2_dat 파일을 포함하는 주 파일 그룹. 이러한 파일의 FILEGROWTH 증가분은 15%로 지정됩니다.

  • SGrp1Fi1 및 SGrp1Fi2 파일을 포함하는 SalesGroup1 파일 그룹

  • SGrp2Fi1 및 SGrp2Fi2 파일을 포함하는 SalesGroup2 파일 그룹

이 예에서는 성능을 향상시키기 위해 데이터 파일과 로그 파일을 서로 다른 디스크에 배치합니다.

USE master;
GO
CREATE DATABASE Sales
ON PRIMARY
( NAME = SPri1_dat,
    FILENAME = 'D:\SalesData\SPri1dat.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
( NAME = SPri2_dat,
    FILENAME = 'D:\SalesData\SPri2dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
FILEGROUP SalesGroup1
( NAME = SGrp1Fi1_dat,
    FILENAME = 'D:\SalesData\SG1Fi1dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp1Fi2_dat,
    FILENAME = 'D:\SalesData\SG1Fi2dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
FILEGROUP SalesGroup2
( NAME = SGrp2Fi1_dat,
    FILENAME = 'D:\SalesData\SG2Fi1dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp2Fi2_dat,
    FILENAME = 'D:\SalesData\SG2Fi2dt.ndf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = 'E:\SalesLog\salelog.ldf',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB ) ;
GO

5. 데이터베이스 연결

다음 예에서는 예 4에서 만든 Archive 데이터베이스를 분리한 다음, FOR ATTACH 절을 사용하여 데이터베이스를 연결합니다. Archive는 데이터 파일과 로그 파일을 여러 개 포함하도록 정의되었습니다. 그러나 파일을 만든 후 위치를 변경하지 않았으므로 FOR ATTACH 절에 주 파일만 지정해야 합니다. SQL Server 2005부터는 연결 중인 데이터베이스에 속한 모든 전체 텍스트 파일이 데이터베이스에 연결됩니다.

USE master;
GO
sp_detach_db Archive;
GO
CREATE DATABASE Archive
      ON (FILENAME = 'D:\SalesData\archdat1.mdf') 
      FOR ATTACH ;
GO

6. 데이터베이스 스냅숏 만들기

다음 예에서는 sales_snapshot0600 데이터베이스 스냅숏을 만듭니다. 데이터베이스 스냅숏은 읽기 전용이므로 로그 파일을 지정할 수 없습니다. 구문에 맞게 원본 데이터베이스의 모든 파일을 지정하며 파일 그룹은 지정하지 않습니다.

이 예의 원본 데이터베이스는 예 4에서 만든 Sales 데이터베이스입니다.

USE master;
GO
CREATE DATABASE sales_snapshot0600 ON
    ( NAME = SPri1_dat, FILENAME = 'D:\SalesData\SPri1dat_0600.ss'),
    ( NAME = SPri2_dat, FILENAME = 'D:\SalesData\SPri2dt_0600.ss'),
    ( NAME = SGrp1Fi1_dat, FILENAME = 'D:\SalesData\SG1Fi1dt_0600.ss'),
    ( NAME = SGrp1Fi2_dat, FILENAME = 'D:\SalesData\SG1Fi2dt_0600.ss'),
    ( NAME = SGrp2Fi1_dat, FILENAME = 'D:\SalesData\SG2Fi1dt_0600.ss'),
    ( NAME = SGrp2Fi2_dat, FILENAME = 'D:\SalesData\SG2Fi2dt_0600.ss')
AS SNAPSHOT OF Sales ;
GO

7. 데이터베이스 만들기 및 데이터 정렬 이름과 옵션 지정

다음 예에서는 MyOptionsTest 데이터베이스를 만듭니다. 데이터 정렬 이름을 지정하고 TRUSTYWORTHY 및 DB_CHAINING 옵션을 ON으로 설정합니다.

USE master;
GO
IF DB_ID (N'MyOptionsTest') IS NOT NULL
DROP DATABASE MyOptionsTest;
GO
CREATE DATABASE MyOptionsTest
COLLATE French_CI_AI
WITH TRUSTWORTHY ON, DB_CHAINING ON;
GO
--Verifying collation and option settings.
SELECT name, collation_name, is_trustworthy_on, is_db_chaining_on
FROM sys.databases
WHERE name = N'MyOptionsTest';
GO

8. 이동된 전체 텍스트 카탈로그 연결

다음 예에서는 AdvWksFtCat 전체 텍스트 카탈로그를 AdventureWorks2008R2 데이터 및 로그 파일과 연결합니다. 이 예에서는 전체 텍스트 카탈로그를 기본 위치에서 새 위치 c:\myFTCatalogs로 옮깁니다. 데이터 및 로그 파일은 기본 위치에 그대로 남아 있습니다.

USE master;
GO
--Detach the AdventureWorks2008R2 database
sp_detach_db AdventureWorks2008R2;
GO
-- Physically move the full text catalog to the new location.
--Attach the AdventureWorks2008R2 database and specify the new location of the full-text catalog.
CREATE DATABASE AdventureWorks2008R2 ON 
    (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_Data.mdf'), 
    (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_log.ldf'),
    (FILENAME = 'c:\myFTCatalogs\AdvWksFtCat')
FOR ATTACH;
GO

9. 행 파일 그룹 하나와 FILESTREAM 파일 그룹 두 개를 지정하는 데이터베이스 만들기

다음 예에서는 FileStreamDB 데이터베이스를 만듭니다. 이 데이터베이스에는 행 파일 그룹 하나와 FILESTREAM 파일 그룹 두 개가 있습니다. 각 파일 그룹에는 다음과 같이 하나의 파일이 포함됩니다.

  • FileStreamDB_data는 행 데이터를 포함합니다. 여기에는 기본 경로가 지정된 FileStreamDB_data.mdf 파일 하나가 포함됩니다.

  • FileStreamPhotos는 FILESTREAM 데이터를 포함합니다. 여기에는 C:\MyFSfolder\Photos에 있는 FILESTREAM 데이터 컨테이너 FSPhotos가 포함됩니다. 이 그룹은 기본 FILESTREAM 파일 그룹으로 표시됩니다.

  • FileStreamResumes는 FILESTREAM 데이터를 포함합니다. 여기에는 C:\MyFSfolder\Resumes에 있는 FILESTREAM 데이터 컨테이너 FSResumes가 포함됩니다.

USE master;
GO
IF DB_ID (N'FileStreamDB') IS NOT NULL
DROP DATABASE FileStreamDB;
GO
-- Get the SQL Server data path.
DECLARE @data_path nvarchar(256);
SET @data_path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
                  FROM master.sys.master_files
                  WHERE database_id = 1 AND file_id = 1);

 -- Execute the CREATE DATABASE statement.
EXECUTE ('CREATE DATABASE FileStreamDB
ON PRIMARY 
    (
    NAME = FileStreamDB_data 
    ,FILENAME = ''' + @data_path + 'FileStreamDB_data.mdf''
    ,SIZE = 10MB
    ,MAXSIZE = 50MB
    ,FILEGROWTH = 15%
    ),
FILEGROUP FileStreamPhotos CONTAINS FILESTREAM DEFAULT
    (
    NAME = FSPhotos
    ,FILENAME = ''C:\MyFSfolder\Photos''
-- SIZE, MAXSIZE, FILEGROWTH should not be specified here.
-- If they are specified an error will be raised.
    ),
FILEGROUP FileStreamResumes CONTAINS FILESTREAM
    (
    NAME = FileStreamResumes
    ,FILENAME = ''C:\MyFSfolder\Resumes''
    ) 
LOG ON
    (
    NAME = FileStream_log
    ,FILENAME = ''' + @data_path + 'FileStreamDB_log.ldf''
    ,SIZE = 5MB
    ,MAXSIZE = 25MB
    ,FILEGROWTH = 5MB
    )'
);
GO