Han*_*non 16 sql-server storage
我正在尝试使用两个原始(即未格式化)分区创建数据库。
Microsoft Docs 声明您可以执行此操作,您只需指定原始分区的驱动器号,如下所示:
CREATE DATABASE DirectDevice
ON (NAME = DirectDevice_system, FILENAME = 'S:')
LOG ON (NAME = DirectDevice_log, FILENAME = 'T:')
Run Code Online (Sandbox Code Playgroud)
但是,SQL Server 2017 返回此错误:
消息 5170,级别 16,状态 4,第 1 行
无法创建文件“S:”,因为它已经存在。更改文件路径或文件名,然后重试该操作。
消息 1802,级别 16,状态 4,第 1 行
创建数据库失败。无法创建列出的某些文件名。检查相关错误。
文档的相关部分指出:
如果文件位于原始分区上,则 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 行
创建数据库失败。无法创建列出的某些文件名。检查相关错误。
SQL Server 2000 文档在以下CREATE DATABASE部分显示了以下示例:
H. 使用原始分区
此示例使用原始分区创建名为“雇员”的数据库。执行语句时,原始分区必须存在,并且每个原始分区上只能存在一个文件。
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
Run Code Online (Sandbox Code Playgroud)
但是,以上示例显示的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
ON PRIMARY
(
NAME = t_primary
, FILENAME = 'E:'
)
LOG ON
(
NAME = t_log
, FILENAME = 'F:'
);
Run Code Online (Sandbox Code Playgroud)
结果:
CREATE DATABASE 进程正在磁盘“t_primary”上分配 0.64 MB。
CREATE DATABASE 进程正在磁盘“t_log”上分配 1.00 MB。
上面的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 相同的行为;即,它返回此错误消息:
消息 5170,级别 16,状态 4,第 1 行
无法创建文件“E:”,因为它已存在。更改文件路径或文件名,然后重试该操作。
消息 1802,级别 16,状态 4,第 1 行
创建数据库失败。无法创建列出的某些文件名。检查相关错误。
| 归档时间: |
|
| 查看次数: |
842 次 |
| 最近记录: |