在RAW分区上创建数据库不再有效?


16

我正在尝试使用两个原始分区(即未格式化的分区)创建数据库。

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

但是,以上示例显示了SIZEMAXSIZEFILEGROWTH参数,这些参数显然对于RAW分区上存储的SQL Server数据文件不是必需的。

SQL Server 2000文档中的更多详细信息,特别是有关原始驱动器的信息:

使用原始分区
Microsoft®SQL Server™2000支持使用原始分区来创建数据库文件。原始分区是未使用Microsoft WindowsNT®文件系统格式化的磁盘分区,例如FAT和NTFS。在某些情况下,使用在原始分区上创建的数据库可能会比NTFS或FAT产生轻微的性能提升。但是,对于大多数安装,首选方法是使用在NTFS或FAT分区上创建的文件。在原始分区上创建数据库文件时,无需指定组成数据库的文件的物理名称;您仅指定应在其上创建数据库文件的磁盘的驱动器号。如果使用的是MicrosoftWindows®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的帖子启发的,该帖子确实支持原始分区。


3
您需要使用RPaaS-原始分区即服务或ARPL-Azure原始分区湖,才能与SS 2017一起使用;-)
SQLRaptor

Answers:


3

我可以确认原始分区能够按预期与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:'
);

结果:

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行
CREATE DATABASE失败。列出的某些文件名无法创建。检查相关错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.