Создает новую базу данных и файлы, используемые для ее хранения, создает моментальный снимок базы данных или присоединяет базу данных, составленную из отсоединенных файлов ранее созданной базы данных.
Резервную копию базы данных master необходимо создавать каждый раз при создании, изменении или удалении пользовательской базы данных.
Инструкция CREATE DATABASE должна выполняться в режиме автоматической фиксации (режим управления транзакциями по умолчанию) и не может применяться в явной или неявной транзакции. Дополнительные сведения см. в разделе Автоматическая фиксация транзакций.
Одной инструкцией CREATE DATABASE можно создать базу данных и файлы, в которых хранится база данных. Инструкция CREATE DATABASE реализуется в SQL Server с помощью следующих шагов.
-
Компонент SQL Server использует копию базы данных model для инициализации базы данных и ее метаданных.
-
Базе данных назначается идентификатор GUID компонента Service Broker.
-
Затем компонент Database Engine заполняет остальную часть базы данных пустыми страницами, за исключением страниц, содержащих внутренние данные с описанием способа использования пространства в базе данных. Дополнительные сведения см. в разделе Инициализация файлов базы данных.
В экземпляре SQL Server может быть не более 32 767 баз данных.
У каждой базы данных есть владелец, который может выполнять специальные действия в базе данных. Владельцем является пользователь, создавший базу данных. Владельца базы данных можно изменить с помощью процедуры sp_changedbowner.
Файлы и файловые группы базы данных
В каждой базе данных имеется по крайней мере 2 файла (первичный файл и файл журнала транзакций) и по крайней мере одна файловая группа. Для каждой базы данных может указываться не более 32 767 файлов и 32 767 файловых групп. Дополнительные сведения см. в разделе Архитектура файлов и файловых групп.
При создании базы данных файлы данных следует делать как можно большего размера, в соответствии с максимальным предполагаемым объемом данных в базе данных. Дополнительные сведения см. в разделе Использование файлов и файловых групп для контроля роста базы данных.
Рекомендуется использовать для хранения файлов базы данных SQL Server сеть хранения данных (SAN), сеть на основе iSCSI или локально подключенный диск, так как в этой конфигурации достигаются оптимальные производительность и надежность SQL Server. По умолчанию в SQL Server не используются сетевые файлы базы данных (хранимые на сетевом сервере или в хранилище, подключенном к сети). Однако можно создать базу данных с сетевыми файлами, используя флаг трассировки 1807. Дополнительные сведения об этом флаге трассировки и важные рекомендации по повышению производительности и обслуживанию см. на веб-сайте Майкрософт.
Моментальные снимки базы данных
С помощью инструкции 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 имеет значение true в базе данных model и во всех вновь создаваемых базах данных. Если изменить параметры в базе данных model, то эти новые параметры будут использоваться во вновь создаваемых базах данных. Операции, вносящие изменения в базу данных model, не влияют на существующие базы данных. Если параметр FOR ATTACH задан в инструкции CREATE DATABASE, то новая база данных наследует значения параметров исходной базы данных.
Просмотр сведений о базе данных
Для возврата сведений о базах данных, файлах и файловых группах можно использовать представления каталогов, системные функции и системные хранимые процедуры. Дополнительные сведения см. в разделе Просмотр метаданных базы данных.
А. Создание базы данных без указания файлов
В следующем примере создается база данных mytest и соответствующие первичный файл и файл журнала транзакций. В инструкции нет элементов <filespec>, поэтому файл базы данных-источника имеет тот же размер, что и первичный файл базы данных model. Журнал транзакций устанавливается в соответствии с большим из следующих значений: 512 КБ или 25% от размера первичного файла данных. Поскольку параметр MAXSIZE не задан, файлы могут увеличиваться до заполнения всего свободного места на диске. В этом примере также демонстрируется, как удалить базу данных mytest, если она существует, перед созданием базы данных mytest.
Б. Создание базы данных, в которой заданы файлы данных и журнала транзакций
В следующем примере создается база данных Sales. Ключевое слово PRIMARY не использовано, поэтому первый файл (Sales_dat) становится первичным файлом. Поскольку в параметре SIZE для файла Sales_dat не заданы суффиксы MB и KB, используется значение MB и пространство выделяется в мегабайтах. Место для файла Sales_log выделено в мегабайтах, потому что суффикс MB явно указан в параметре SIZE.
USE master;
GO
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\saledat.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\salelog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB ) ;
GO
В. Создание базы данных, в которой указаны несколько файлов данных и журналов транзакций
В следующем примере создается база данных Archive, имеющая 3 файла с данными объемом по 100-MB каждый, и два файла журнала транзакций по 100-MB. Первичный файл является первым файлом в списке и явно задан ключевым словом PRIMARY. Файлы журналов транзакций заданы следующими ключевыми словами LOG ON. Обратите внимание на расширения, используемые для файлов в параметре FILENAME: .mdf используется для первичных файлов данных, .ndf — для вторичных файлов данных, а .ldf — для файлов журналов транзакций. В этом примере база данных размещается на диске D, а не вместе с базой данных master.
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
Г. Создание базы данных с файловыми группами
В следующем примере создается база данных Sales, содержащая следующие файловые группы.
-
Первичная файловая группа с файлами
Spri1_dat и Spri2_dat. Для этих файлов задана величина приращения FILEGROWTH 15%.
-
Файловая группа с именем
SalesGroup1 и файлами SGrp1Fi1 и SGrp1Fi2.
-
Файловая группа с именем
SalesGroup2 и файлами SGrp2Fi1 и SGrp2Fi2.
В этом примере файлы данных и журналов размещаются на различных дисках с целью повышения производительности.
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
Д. Присоединение базы данных
В следующем примере база данных 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
Е. Создание моментального снимка базы данных
В следующем примере создается моментальный снимок базы данных sales_snapshot0600. Моментальный снимок базы данных предназначен только для чтения, поэтому нельзя задать файл журнала. В соответствии с синтаксисом задается каждый файл базы данных-источника, а файловые группы не указываются.
База данных-источник для этого примера — база данных 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
Ж. Создание базы данных и назначение имени и параметров сортировки
В следующем примере создается база данных MyOptionsTest. Указано имя параметров сортировки, а параметрам TRUSTYWORTHY и DB_CHAINING присвоено значение ON.
З. Присоединение перемещенного полнотекстового каталога
В следующем примере присоединяется полнотекстовый каталог 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
И. Создание базы данных, имеющей файловую группу строк и две файловые группы FILESTREAM
В следующем примере создается база данных FileStreamDB. Эта база данных создается с одной файловой группой строк и двумя файловыми группами FILESTREAM. Каждая файловая группа содержит один файл.
-
Группа
FileStreamDB_data содержит данные строк. Она содержит один файл — FileStreamDB_data.mdf, расположенный в месте по умолчанию.
-
Группа
FileStreamPhotos содержит данные FILESTREAM. Она содержит один контейнер данных FILESTREAM — FSPhotos, расположенный в папке C:\MyFSfolder\Photos. Она отмечена как файловая группа FILESTREAM по умолчанию.
-
Группа
FileStreamResumes содержит данные FILESTREAM. Она включает один контейнер данных FILESTREAM — FSResumes, расположенный в папке C:\MyFSfolder\Resumes.
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