您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

sp_logdevice

语法


sp_logdevice <dbname>, <devname>

参数

<dbname>

是其 syslogs 表(包含事务日志)要放置于特定逻辑设备上的数据库的名称。

<devname>

是将 syslogs 表放置于其上的设备的逻辑名。该设备必须是与某一数据库关联的数据库设备(在 create database 或 alter database 中指定)。运行 sp_helpdb 可以获得有关数据库的设备的报告。

示例

示例 1

创建数据库 products 并将表 products.syslogs 放置于数据库设备 logs 上:


create database products on default = "10M", logs = "2M" 
go
sp_logdevice products, logs 
go

示例 2

对于日志和数据位于同一设备上的数据库 test,将 test 的日志放置于日志设备 logdev 上:


alter database test log on logdev
go
sp_logdevice test, logdev
go

用法

使用 sp_logdevice 时,还存在一些其它注意事项:

  • 只有在单用户模式下才能执行 sp_logdevice。

  • sp_logdevice 过程只影响syslogs 将来的空间分配。这造成一个脆弱时间范围,在此时间范围中您的日志的第一页与您的数据保留在同一设备上。因此,把事务日志放置在单独设备上的首选方法是使用 create database 的 log on 选项,它会立即将整个事务日志放置在单独设备上。

  • 无论是出于恢复原因还是性能原因,都应将事务日志放置于单独的数据库设备上。

  • 非常小的不重要数据库可以将其日志与数据库的其余部分一起保存。此类数据库使用 dump database 备份数据库和日志并使用 dump transaction with truncate_only 截断日志。

  • dbcccheckalloc 和 sp_helplog 显示直到下一个 dump transaction 为止仍分配于数据库设备上的 syslogs 的某些页。之后,事务日志被完全移交给在执行 sp_logdevice 时指定的设备。

  • 事务日志所需的设备大小因更新活动量和事务日志转储频率不同而有所不同。通常,为日志设备分配的空间是为数据库本身分配的空间的 10% 到 25%。

  • 只将 sp_logdevice 用于日志和数据位于同一设备上的数据库。不要将 sp_logdevice 用于日志和数据位于不同设备上的数据库。

  • 若要增加分配给事务日志的存储量,请使用 alter database。如果使用了 create database 的 log on 选项将事务日志放置于单独设备上,则使用以下方法增加日志段的大小。如果您没有使用 log on,则执行 sp_logdevice:

    
    sp_extendsegment <segname>, <devname>
    

    将 syslogs 放置于其上的设备或段仅用于 syslogs。要增加为其余数据库分配的存储空间量,请在发出 alter database 时,指定非日志设备的其它任何设备。

  • 使用 disk init 为数据库或事务日志设置新数据库设备的格式。