我正在尝试使用两个原始的(即未格式化的)分区创建一个数据库。
Microsoft Docs 指出你可以这样做,你只需要指定原始分区的驱动器号,如下所示:
CREATE DATABASE DirectDevice
ON (NAME = DirectDevice_system, FILENAME = 'S:')
LOG ON (NAME = DirectDevice_log, FILENAME = 'T:')
但是,SQL Server 2017 返回此错误:
消息 5170,级别 16,状态 4,第 1 行
无法创建文件“S:”,因为它已经存在。更改文件路径或文件名,然后重试该操作。
消息 1802,级别 16,状态 4,第 1 行
CREATE DATABASE 失败。无法创建列出的某些文件名。检查相关错误。
文档的相关部分指出:
如果文件位于原始分区上,则 os_file_name 必须仅指定现有原始分区的驱动器号。每个原始分区上只能创建一个数据文件。
是的,驱动器 S: 和 T: 都是我系统中确实存在的未格式化原始分区:
DISKPART> 详细分区 分区 4 类型:ebd0a0a2-b9e5-4433-87c0-68b6b72699c7 隐藏:无 要求:否 属性:0000000000000000 以字节为单位的偏移量:999934656512 卷 ### Ltr 标签 Fs 类型大小状态信息 ---------- ---- ---------- ----- ---------- ------ ---- ----- -------- * 第 6 卷 T RAW 分区 127 MB 健康 DISKPART> 选择分区 3 分区 3 现在是选定的分区。 DISKPART> 详细分区 分区 3 类型:ebd0a0a2-b9e5-4433-87c0-68b6b72699c7 隐藏:无 要求:否 属性:0000000000000000 以字节为单位的偏移量:1000067825664 卷 ### Ltr 标签 Fs 类型大小状态信息 ---------- ---- ---------- ----- ---------- ------ ---- ----- -------- * 第 7 卷 S RAW 分区 129 MB 健康
从驱动器号中删除冒号,如FILENAME = 'S'
和FILENAME = 'T'
,结果是:
消息 5105,级别 16,状态 2,第 1 行
发生文件激活错误。物理文件名“S”可能不正确。诊断并更正其他错误,然后重试该操作。
消息 1802,级别 16,状态 1,第 1 行
CREATE DATABASE 失败。无法创建列出的某些文件名。检查相关错误。
SQL Server 2000 文档在该部分下显示了以下示例CREATE DATABASE
:
H. 使用原始分区
这个例子使用原始分区创建了一个名为 Employees 的数据库。语句执行时,原始分区必须存在,每个原始分区上只能有一个文件。
USE master
GO
CREATE DATABASE Employees
ON
( NAME = Empl_dat,
FILENAME = 'f:',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = 'Sales_log',
FILENAME = 'g:',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )
GO
但是,上面的示例显示了SIZE
、MAXSIZE
和FILEGROWTH
参数,这些参数显然不是存储在 RAW 分区上的 SQL Server 数据文件所必需的。
SQL Server 2000 文档中的更多详细信息,特别是关于原始驱动器的信息:
使用原始分区
Microsoft® SQL Server™ 2000 支持使用原始分区创建数据库文件。原始分区是尚未使用 Microsoft Windows NT® 文件系统(例如 FAT 和 NTFS)格式化的磁盘分区。在某些情况下,使用在原始分区上创建的数据库可以比 NTFS 或 FAT 产生轻微的性能提升。但是,对于大多数安装,首选方法是使用在 NTFS 或 FAT 分区上创建的文件。在原始分区上创建数据库文件时,不指定组成数据库的文件的物理名称;您只需指定应在其上创建数据库文件的磁盘的驱动器号。如果您使用的是 Microsoft Windows® 2000 Server,您可以创建已安装的驱动器以指向原始分区。当您在空文件夹中安装本地驱动器时,Windows 2000 为驱动器分配驱动器路径而不是驱动器号。安装的驱动器不受驱动器号强加的 26 个驱动器的限制;因此,您可以使用无限数量的原始分区。在安装的驱动器上创建数据库文件时,必须以文件名结尾的驱动器路径结尾反斜杠 (),例如 E:\Sample name。有关创建已安装驱动器的信息,请参阅 Windows 2000 Server 文档。使用原始分区时需要考虑几个限制:
每个原始分区上只能创建一个数据库文件。逻辑分区必须配置为单个数据库文件,因为原始分区上没有文件系统。复制、移动和删除等标准文件系统操作不能用于原始分区。
无法使用 Windows NT 备份实用程序备份位于原始分区上的数据库文件。但是,仍然可以创建 SQL Server 数据库或事务日志备份。
原始分区上的数据库文件不能自动扩展。最初以完整大小创建数据库,或手动扩展数据库文件。有关详细信息,请参阅扩展数据库。
只能使用带字母的分区,例如 E:,或挂载的驱动器,例如 E:\Sample name\。不能使用带编号的设备。
原始分区不提供坏块替换等文件系统服务。
这是受Brent Ozar 关于 SQL Server 6.5 的帖子的启发,该帖子确实支持原始分区
我可以确认原始分区按预期在 Windows XP x64 上使用 SQL Server 2000 SP4 工作。
我刚刚通过查询分析器(不寒而栗)针对 SQL Server 2000 SP4 运行了以下命令:
结果:
上面的
CREATE DATABASE t
代码适用于 Windows XP x64 上的 SQL Server 2005;唯一的输出是Command(s) completed successfully.
当您查看数据库文件时,SSMS 会显示以下内容:
这不是和一桶螺栓一样酷吗?
Windows Server 2012 Standard 上的 SQL Server 2012 SP1,SQL Server Management Studio 服务帐户设置为“本地系统”:
在 Windows Server 2012 上作为“本地系统”运行的 SQL Server 2014 (12.0.5000.0) 表现出与 SQL Server 2017 相同的行为;即,它返回此错误消息: