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

sp_thresholdaction

语法

达到阈值时,SAP ASE 服务器会按照位置将以下参数传递到阈值过程:


sp_thresholdaction @<dbname>,
	@<segment_name>,
	@<space_left>,
	@<status>

参数

@<dbname>

是达到该阈值的数据库的名称。

@<segment_name>

是达到该阈值的段的名称。

@<space_left>

是阈值大小,以逻辑页为单位。

@<status>

对于最后机会阈值,其值为 1;对于所有其它阈值,其值为 0。

示例

####示例 1

为最后机会阈值创建一个阈值过程,用以将事务日志转储到磁带设备:


create procedure sp_thresholdaction 
        @dbname varchar(30),
        @segmentname varchar(30),
        @space_left int,
        @status int
as
        dump transaction @dbname to tapedump1

用法

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

  • sp_thresholdaction 必须由数据库所有者(在用户数据库中)创建,或由系统管理员(在 sybsystemprocs 数据库中)创建,或由具有 create procedure 权限的用户创建。

  • 可以为数据库中的任何段添加阈值并创建阈值过程。

  • 达到最后机会阈值时,SAP ASE 服务器将在发生阈值事件的数据库中搜索 sp_thresholdaction 过程。如果该数据库中没有,SAP ASE 服务器将在 sybsystemprocs 中搜索。如果 sybsystemprocs 中也没有,它将在 master 中搜索。如果 SAP ASE 服务器找不到该过程,它会将一条错误消息发送到错误日志。

  • sp_thresholdaction 应包含一个 命令来截断事务日志。

  • 按照设计,最后机会阈值将留出足够的可用空间来记录 dump transaction 命令。但可能没有足够的空间来记录对数据库执行的其它用户事务。仅可以执行事务日志中未记录的命令(转储事务 select、快速 bcp、readtext 和 writetext)和释放额外日志空间可能需要的命令(dump transaction、dump database 和 alter database)。缺省情况下,会将其它命令挂起并将一条消息发送到错误日志。若要中止这些命令而不是将其挂起,请使用 sp_dboption 的 dumpabort tran on log full 选项,然后使用 checkpoint 命令。

    唤醒挂起的进程:

  • 在 dump transaction 命令释放了足够的日志空间后,系统会自动唤醒并完成挂起的进程。

  • 如果快速 bcp、writetext 或 select into 导致未记录自上次备份以来对数据库所做的更改,则最后机会阈值过程不能执行 dump transaction 命令。出现这种情况时,请使用 dump database 复制该数据库,然后使用 dump transaction 截断事务日志。

  • 如果这没有释放足够的空间以唤醒挂起的进程,则可能需要增大事务日志的大小。使用 alter database 命令的 log on 选项可以分配额外的日志空间。

  • 不得已时,系统管理员可以使用 sp_who 来确定哪些进程处于挂起状态,然后使用 kill 命令将其注销。