다음을 통해 공유


CREATE DATABASE(Transact-SQL)

업데이트: 2006년 12월 12일

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

항목 링크 아이콘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' 
        [ , 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 [ 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_nameos_file_name을 생성합니다. 생성할 논리적 파일 이름이 128자를 넘지 않도록 database_name은 123자로 제한됩니다.

    데이터 파일 이름을 지정하지 않으면 SQL Server에서 logical_file_nameos_file_name으로 database_name을 사용합니다.

  • ON
    데이터베이스의 데이터 부분을 저장하는 데 사용하는 디스크 파일인 데이터 파일을 명시적으로 정의하도록 지정합니다. 주 파일 그룹의 데이터 파일을 정의하는 <filespec> 항목의 쉼표로 구분된 목록을 나열할 때는 ON이 필요합니다. 주 파일 그룹의 파일 목록 다음에는 필요에 따라 사용자 파일 그룹과 해당 파일을 정의하는 쉼표로 구분된 <filegroup> 항목의 목록이 올 수 있습니다.
  • PRIMARY
    연관된 <filespec> 목록이 주 파일을 정의하도록 지정합니다. 주 파일 그룹의 <filespec> 항목에서 지정한 첫 번째 파일이 주 파일이 됩니다. 데이터베이스는 하나의 주 파일을 가질 수 있습니다. 자세한 내용은 물리적 데이터베이스 파일 및 파일 그룹을 참조하십시오.

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

  • LOG ON
    데이터베이스 로그를 저장하는 데 사용하는 디스크 파일인 로그 파일을 명시적으로 정의하도록 지정합니다. LOG ON 다음에는 로그 파일을 정의하는 쉼표로 구분된 <filespec> 항목의 목록이 이어집니다. LOG ON을 지정하지 않은 경우에는 데이터베이스의 모든 데이터 파일 크기를 합한 값의 25% 크기(최소 512KB)로 하나의 로그 파일을 자동으로 생성합니다. 데이터베이스 스냅숏에는 LOG ON을 지정할 수 없습니다.
  • COLLATE collation_name
    데이터베이스의 기본 데이터 정렬을 지정합니다. 데이터 정렬 이름으로는 Windows 데이터 정렬 이름 또는 SQL 데이터 정렬 이름을 사용할 수 있습니다. 이를 지정하지 않으면 데이터베이스에 SQL Server 인스턴스의 기본 데이터 정렬이 할당됩니다. 데이터베이스 스냅숏에는 데이터 정렬 이름을 지정할 수 없습니다.

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

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

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

    FOR ATTACH의 요구 사항은 다음과 같습니다.

    • 모든 데이터 파일(MDF 및 NDF)을 사용할 수 있어야 합니다.
    • 여러 로그 파일이 존재하는 경우 모든 파일을 사용할 수 있어야 합니다.

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

    [!참고] 최신 버전의 SQL Server에서 만든 데이터베이스를 이전 버전에서 연결할 수 없습니다.

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

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

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

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

    [!참고] 데이터베이스에서 Service Broker를 사용하는 경우에는 <service_broker_option>도 참조하십시오.

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

    분리되는 대신 복사된 복제 데이터베이스를 연결할 때는 다음 사항을 고려하십시오.

    • 원래 데이터베이스와 인스턴스 및 버전이 동일한 서버에 데이터베이스를 연결하는 경우에는 추가 단계를 수행할 필요가 없습니다.
    • 인스턴스는 동일하지만 버전은 업그레이드된 서버에 데이터베이스를 연결하는 경우에는 연결 작업 완료 후 sp_vupgrade_replication을 실행하여 복제를 업그레이드해야 합니다.
    • 버전에 관계없이 다른 서버 인스턴스에 데이터베이스를 연결하는 경우에는 연결 작업 완료 후 sp_removedbreplication을 실행하여 복제를 제거해야 합니다.

    [!참고] vardecimal 저장소 형식으로 연결 작업을 수행하지만 SQL Server 데이터베이스 엔진이 적어도 SQL Server 2005 서비스 팩 2로 업그레이드되어야 합니다. 압축된 SQL Server 2005 서비스 팩 2 데이터베이스를 이전 버전의 SQL Server와 연결할 수 없습니다. vardecimal 저장소 형식에 대한 자세한 내용은 Decimal 데이터를 가변 길이로 저장을 참조하십시오.

  • FOR ATTACH_REBUILD_LOG
    기존 운영 체제 파일 집합을 연결하여 데이터베이스를 만들도록 지정합니다. 이 옵션은 읽기/쓰기 데이터베이스로 제한됩니다. 하나 이상의 트랜잭션 로그 파일이 누락되어 있으면 로그 파일이 다시 작성됩니다. 주 파일을 지정하는 하나의 <filespec> 항목이 필요합니다.

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

    FOR ATTACH_REBUILD_LOG 요구 사항은 다음과 같습니다.

    • 데이터베이스가 올바르게 종료되어야 합니다.
    • 모든 데이터 파일(MDF 및 NDF)을 사용할 수 있어야 합니다.
    ms176061.note(ko-kr,SQL.90).gif중요:
    이 작업으로 인해 로그 백업 체인이 끊어집니다. 작업을 완료한 다음 전체 데이터베이스 백업을 수행하는 것이 좋습니다. 자세한 내용은 BACKUP(Transact-SQL)을 참조하십시오.

    FOR ATTACH_REBUILD_LOG는 일반적으로 큰 로그를 가진 읽기/쓰기 데이터베이스를 다른 서버로 복사하고 복사본을 거의 또는 완전히 읽기 작업에만 사용하여 원본 데이터베이스에 비해 적은 로그 공간을 요구하는 경우에 사용됩니다.

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

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

  • <filespec>
    파일 속성을 제어합니다.
  • NAME logical_file_name
    파일의 논리적 이름을 지정합니다. FILENAME을 지정한 경우에는 FOR ATTACH 절을 지정한 경우를 제외하고 NAME이 필요합니다.

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

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

      파일에 대해 UNC 경로가 지정되었을 때는 SIZE, MAXSIZE 및 FILEGROWTH 매개 변수를 설정할 수 없습니다.

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

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

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

    os_file_name을 UNC 경로로 지정할 때는 SIZE를 지정할 수 없습니다.

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

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

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

  • MAXSIZE max_size
    파일이 증가할 수 있는 최대 크기를 지정합니다. os_file_name을 UNC 경로로 지정할 때는 MAXSIZE를 지정할 수 없습니다.

    • max_size
      파일의 최대 크기입니다. KB, MB, GB 및 TB 접미사를 사용할 수 있습니다. 기본값은 MB입니다. 소수점을 포함하지 않은 정수를 지정하십시오. max_size를 지정하지 않으면 디스크가 꽉 찰 때까지 파일 크기가 늘어납니다. max_size는 정수 값입니다. 2147483647보다 큰 값에는 보다 큰 단위를 사용합니다.
  • UNLIMITED
    디스크가 꽉 찰 때까지 파일 크기가 늘어나도록 지정합니다. SQL Server 2005에서 무제한 증가가 허용된 로그 파일의 최대 크기는 2TB이고 데이터 파일의 최대 크기는 16TB입니다.
  • FILEGROWTH growth_increment
    파일의 자동 증가분을 지정합니다. FILEGROWTH는 MAXSIZE 설정을 초과할 수 없습니다. os_file_name을 UNC 경로로 지정할 때는 FILEGROWTH를 지정할 수 없습니다.

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

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

      0 값은 자동 증가가 해제되어 있으며 추가로 공간을 허용되지 않음을 나타냅니다.

      FILEGROWTH를 지정하지 않으면 데이터 파일에는 1MB, 로그 파일에는 10%의 기본값이 적용되며 최소값은 64KB입니다.

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

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

    • filegroup_name
      filegroup_name은 데이터베이스 내에서 고유해야 하며 시스템에서 제공한 이름인 PRIMARY 및 PRIMARY_LOG일 수 없습니다. 이 이름은 문자 상수, 유니코드 상수, 일반 식별자 또는 구분 식별자일 수 있습니다. 이 이름은 식별자에 대한 규칙을 따라야 합니다.
    • DEFAULT
      명명한 파일 그룹이 데이터베이스의 기본 파일 그룹임을 지정합니다.
  • <external_access_option>
    데이터베이스로 들어오고 나가는 외부 액세스를 제어합니다.

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

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

      ms176061.note(ko-kr,SQL.90).gif중요:
      SQL Server 인스턴스는 cross db ownership chaining 서버 옵션이 0(OFF)일 때 이 설정을 인식할 수 있습니다. cross db ownership chaining이 1(ON)이면 모든 사용자 데이터베이스는 이 옵션 값에 관계없이 데이터베이스 간 소유권 체인에 참여할 수 있습니다. sp_configure를 사용하여 이 옵션을 설정할 수 있습니다.

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

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

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

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

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

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

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

  • <service_broker_option>
    데이터베이스에 대한 Service Broker 옵션을 제어합니다.

    Service Broker 옵션은 FOR ATTACH 절을 사용할 때만 지정할 수 있습니다.

    • ENABLE_BROKER
      지정된 데이터베이스에 대해 Service Broker가 설정되도록 지정합니다. 즉, sys.databases 카탈로그 뷰의 is_broker_enabled가 True로 설정되고 메시지 배달이 시작됩니다.
    • NEW_BROKER
      sys.databases 및 복원된 데이터베이스에서 새 service_broker_guid를 만들고 모든 대화 끝점을 정리하여 끝냅니다. Service Broker가 설정되지만 원격 대화 끝점으로 메시지가 전송되지 않습니다.
    • ERROR_BROKER_CONVERSATIONS
      데이터베이스가 연결 또는 복원되었다는 오류 메시지를 표시하고 모든 대화를 끝냅니다. Service Broker는 이 작업이 완료될 때까지 해제된 후 설정됩니다.
  • database_snapshot_name
    새 데이터베이스 스냅숏의 이름입니다. 데이터베이스 스냅숏 이름은 SQL Server 인스턴스 내에서 고유해야 하며 식별자에 대한 규칙을 따라야 합니다. database_snapshot_name에는 최대 128자를 사용할 수 있습니다.
  • ON ( NAME =logical_file_name, FILENAME ='os_file_name') [ ,... n ]
    데이터베이스 스냅숏을 만들기 위해 원본 데이터베이스 내의 파일 목록을 지정합니다. 스냅숏이 작동하려면 모든 데이터 파일을 개별적으로 지정해야 합니다. 그러나 데이터베이스 스냅숏에는 로그 파일이 허용되지 않습니다.

    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 2005 데이터베이스 엔진이 model 데이터베이스의 복사본을 사용하여 데이터베이스와 해당 메타데이터를 초기화합니다.
  2. 데이터베이스에 Service Broker GUID를 할당합니다.
  3. 데이터베이스 엔진이 데이터베이스의 공간 사용 방법이 기록된 내부 데이터를 가진 페이지를 제외한 나머지 데이터베이스를 빈 페이지로 채웁니다. 자세한 내용은 데이터베이스 파일 초기화를 참조하십시오.

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

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

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

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

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

SQL Server의 성능과 안정성을 최적화하는 구성을 위해 SQL Server SAN(저장 영역 네트워크), iSCSI 기반 네트워크 또는 로컬로 연결된 디스크에 데이터베이스 파일을 저장하는 것이 좋습니다. 기본적으로 SQL Server는 네트워크 데이터베이스 파일(네트워크로 연결된 서버 또는 네트워크로 연결된 저장소에 저장된 파일)을 사용할 수 없습니다. 그러나 추적 플래그 1807을 사용하면 네트워크 기반 데이터베이스 파일을 가진 데이터베이스를 만들 수 있습니다. 이 추적 플래그와 중요한 성능 및 유지 관리에 대한 자세한 내용은 Microsoft 웹 사이트를 참조하십시오.

데이터베이스 스냅숏

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

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

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

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

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

데이터베이스 옵션

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

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

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

부가적인 크기 매개 변수를 지정하지 않고 CREATE DATABASE database_name 문을 실행하면 model 데이터베이스의 주 파일과 같은 크기의 주 데이터 파일이 생성됩니다.

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

데이터베이스 정보 보기

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

사용 권한

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

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

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

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

생성

새 파일 추가를 위해 수정됨

연결

백업

분리

복원

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

[!참고] Microsoft SQL Server 2005 Express Edition은 데이터 및 로그 파일 권한을 설정하지 않습니다.

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

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

USE master;
GO
IF DB_ID (N'mytest') IS NOT NULL
DROP DATABASE mytest;
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
IF DB_ID (N'Sales') IS NOT NULL
DROP DATABASE Sales;
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 Sales
ON 
( NAME = Sales_dat,
    FILENAME = '''+ @data_path + 'saledat.mdf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = '''+ @data_path + 'salelog.ldf'',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB )'
);
GO

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

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

USE master;
GO
IF DB_ID (N'Archive') IS NOT NULL
DROP DATABASE Archive;
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 Archive 
ON
PRIMARY  
    (NAME = Arch1,
    FILENAME = '''+ @data_path + 'archdat1.mdf'',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch2,
    FILENAME = '''+ @data_path + 'archdat2.ndf'',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
    ( NAME = Arch3,
    FILENAME = '''+ @data_path + 'archdat3.ndf'',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20)
LOG ON 
   (NAME = Archlog1,
    FILENAME = '''+ @data_path + 'archlog1.ldf'',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20),
   (NAME = Archlog2,
    FILENAME = '''+ @data_path + 'archlog2.ldf'',
    SIZE = 100MB,
    MAXSIZE = 200,
    FILEGROWTH = 20)'
);
GO

4. 파일 그룹을 가진 데이터베이스 만들기

다음 예에서는 나열한 파일 그룹을 가진 Sales 데이터베이스를 만드는 방법을 보여 줍니다.

  • Spri1_datSpri2_dat 파일을 포함하는 주 파일 그룹. 이들 파일의 FILEGROWTH 증가분은 15%로 지정됩니다.
  • SGrp1Fi1SGrp1Fi2 파일을 포함하는 SalesGroup1 파일 그룹
  • SGrp2Fi1SGrp2Fi2 파일을 포함하는 SalesGroup2 파일 그룹
USE master;
GO
IF DB_ID (N'Sales') IS NOT NULL
DROP DATABASE Sales;
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  Sales
ON PRIMARY
( NAME = SPri1_dat,
    FILENAME = '''+ @data_path + 'SPri1dat.mdf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
( NAME = SPri2_dat,
    FILENAME = '''+ @data_path + 'SPri2dt.ndf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 15% ),
FILEGROUP SalesGroup1
( NAME = SGrp1Fi1_dat,
    FILENAME = '''+ @data_path + 'SG1Fi1dt.ndf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp1Fi2_dat,
    FILENAME = '''+ @data_path + 'SG1Fi2dt.ndf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
FILEGROUP SalesGroup2
( NAME = SGrp2Fi1_dat,
    FILENAME = '''+ @data_path + 'SG2Fi1dt.ndf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 ),
( NAME = SGrp2Fi2_dat,
    FILENAME = '''+ @data_path + 'SG2Fi2dt.ndf'',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
    FILENAME = '''+ @data_path + 'salelog.ldf'',
    SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB )'
);
GO

5. 데이터베이스 연결

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

USE master;
GO
sp_detach_db Archive;
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 CREATE DATABASE FOR ATTACH statement
EXEC ('CREATE DATABASE Archive
      ON (FILENAME = '''+ @data_path + 'archdat1.mdf'')
      FOR ATTACH');
GO

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

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

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

USE master;
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 sales_snapshot0600 ON
    ( NAME = SPri1_dat, FILENAME = '''+ @data_path + 'SPri1dat_0600.ss''),
    ( NAME = SPri2_dat, FILENAME = '''+ @data_path + 'SPri2dt_0600.ss''),
    ( NAME = SGrp1Fi1_dat, FILENAME = '''+ @data_path + 'SG1Fi1dt_0600.ss''),
    ( NAME = SGrp1Fi2_dat, FILENAME = '''+ @data_path + 'SG1Fi2dt_0600.ss''),
    ( NAME = SGrp2Fi1_dat, FILENAME = '''+ @data_path + 'SG2Fi1dt_0600.ss''),
    ( NAME = SGrp2Fi2_dat, FILENAME = '''+ @data_path + 'SG2Fi2dt_0600.ss'')
AS SNAPSHOT OF Sales');
GO

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

다음 예에서는 MyOptionsTest 데이터베이스를 만드는 방법을 보여 줍니다. 데이터 정렬 이름을 지정하고 TRUSTYWORTHYDB_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 전체 텍스트 카탈로그를 AdventureWorks 데이터 및 로그 파일과 연결하는 방법을 보여 줍니다. 이 예에서는 전체 텍스트 카탈로그를 기본 위치에서 새 위치 c:\myFTCatalogs로 옮깁니다. 데이터 및 로그 파일은 기본 위치에 그대로 남습니다.

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

참고 항목

참조

ALTER DATABASE(Transact-SQL)
DROP DATABASE(Transact-SQL)
EVENTDATA(Transact-SQL)
sp_changedbowner(Transact-SQL)
sp_detach_db(Transact-SQL)
sp_removedbreplication(Transact-SQL)

관련 자료

데이터베이스 분리 및 연결
데이터베이스 이해
데이터베이스 스냅숏
데이터베이스 파일 이동

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 12월 12일

새로운 내용
  • FOR ATTACH 설명에 vardecimal 저장소 형식에 사용할 수 있는 SQL Server 2005 서비스 팩 2 데이터베이스 연결에 대한 참고를 추가했습니다.
  • 최신 버전의 SQL Server에서 만든 데이터베이스를 이전 버전에서 연결할 수 없다고 설명하는 참고를 FOR ATTACH 설명에 추가했습니다.

2005년 12월 5일

새로운 내용
  • FOR ATTACH 정의에 보안 정보를 추가했습니다.
변경된 내용
  • 시스템 데이터베이스의 TRUSTWORTHY 옵션에 대한 정보를 수정했습니다.