适用于:SQL Server
本主题介绍如何使用 Transact-SQL 在 SQL Server 2016 (13.x) 及更高版本中向数据库添加和删除永久性日志缓冲区。
权限
ALTER需要对数据库具有权限。
配置永久内存设备 (Linux)
在 Linux 中配置永久内存设备。
配置永久内存设备 (Windows)
在 Windows 中配置永久内存设备。
将持久日志缓冲区添加到数据库
新日志文件的卷或挂载点必须使用已启用 DAX 的 NTFS 格式进行格式化,或使用 DAX 选项挂载(XFS/EXT4)。
使用以下语法将永久性日志缓冲区添加到现有数据库。 语法因 SQL Server 版本而异。
在 SQL Server 2017(14.x)及更高版本中添加永久性日志缓冲区
ALTER DATABASE [DB] SET PERSISTENT_LOG_BUFFER = ON (DIRECTORY_NAME = 'path-to-directory-on-a-DAX-volume');
例如:
ALTER DATABASE WideWorldImporters SET PERSISTENT_LOG_BUFFER = ON (DIRECTORY_NAME = 'F:\SQLTLog');
自动生成永久性日志文件缓冲区的名称。 文件的大小始终为 20 MB。
在 SQL Server 2016 中添加永久性日志缓冲区(13.x)
ALTER DATABASE [DB] ADD LOG FILE
(
NAME = [DAXlogLogicalName],
FILENAME = 'path-to-log-file-on-a-DAX-volume',
SIZE = 20 MB
);
例如:
ALTER DATABASE WideWorldImporters ADD LOG FILE
(
NAME = wwi_log2,
FILENAME = 'F:\SQLTLog\wwi_log2.pldf',
SIZE = 20 MB
);
无论使用命令指定 ALTER DATABASE ADD LOG FILE 的大小如何,DAX 卷上的日志缓冲区文件的大小都将大小为 20 MB。
从数据库中删除永久性日志缓冲区
若要安全地删除永久性日志缓冲区,必须将数据库置于单用户模式下才能清空永久性日志缓冲区。
删除永久性日志缓冲区时,将删除磁盘上的日志缓冲区文件。
语法因 SQL Server 版本而异。
在 SQL Server 2017(14.x)及更高版本中删除永久性日志缓冲区
ALTER DATABASE [DB] SET PERSISTENT_LOG_BUFFER = OFF;
例如:
ALTER DATABASE WideWorldImporters SET PERSISTENT_LOG_BUFFER = OFF;
在 SQL Server 2016 中删除永久性日志缓冲区(13.x)
ALTER DATABASE [DB] SET SINGLE_USER;
ALTER DATABASE [DB] REMOVE FILE [DAXlogLogicalName];
ALTER DATABASE [DB] SET MULTI_USER;
例如:
ALTER DATABASE WideWorldImporters SET SINGLE_USER;
ALTER DATABASE WideWorldImporters REMOVE FILE wwi_log2;
ALTER DATABASE WideWorldImporters SET MULTI_USER;
限制
透明数据加密(TDE) 与永久性日志缓冲区不兼容。
可用性组只能在次要副本上使用此功能,因为在主副本上日志读取器代理需要使用标准日志编写语义。 所有节点上都必须创建一个小型日志文件(最好是在 DAX 卷或挂载点上)。 发生故障转移时,必须存在永久性日志缓冲区路径,以便故障转移成功。
注意
如果在可用性组故障转移事件或数据库启动期间不存在永久性日志缓冲区路径或文件,则数据库进入 RECOVERY PENDING 状态,直到问题得到解决。
与其他 PMEM 功能的互操作性
启用永久性日志缓冲区和 混合缓冲池 以及启动 跟踪标志 809 时,混合缓冲池将在所谓的 直接写入 模式下运行。
备份和还原操作
适用正常还原条件。 如果将持久日志缓冲区还原到 DAX 卷或挂载,它将继续正常运行。 如果日志还原到非 DAX 磁盘卷,则可以使用 ALTER DATABASE REMOVE FILE 命令安全地删除该日志。