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

sp_modifythreshold

语法


sp_modifythreshold <dbname>, <segname>, <free_space>
	[,< new_proc_name>][, <new_free_space>][, <new_segname>]

参数

<dbname>

是要更改其阈值的数据库。它必须是当前数据库的名称。

<segname>

是监控其可用空间的段。指定“default”段时要使用引号。

<free_space>

是达到阈值时的可用页数。当段中的可用空间低于此水平时,SAP ASE 服务器执行关联的存储过程。

<new_proc_name>

是超出阈值时要执行的新存储过程。该过程可以位于当前 SAP ASE 服务器或某个 Open Server 上的任何数据库中。阈值不能在远程 SAP ASE 服务器上执行过程。

<new_free_space>

是要与阈值相关联的新可用页数。当段中的可用空间低于此水平时,SAP ASE 服务器执行关联的存储过程。

<new_segname>

是为其监控可用空间的新段。指定“default”段时要使用引号。

示例

示例 1

将 mydb 数据库的“default”段的阈值修改为在该段上的可用空间低于 175 页时执行,而不是低于 200 页时执行。NULL 是一个占位符,指示不更改过程名:


sp_modifythreshold mydb, "default", 200, NULL, 175

示例 2

修改 mydb 的 data_seg 段的阈值,以使它执行 new_proc 过程:


sp_modifythreshold mydb, data_seg, 250, new_proc

用法

  • 不能使用 sp_modifythreshold 更改最后机会阈值的可用空间量或段名。

  • 使用 sp_helpthreshold 可以获得有关现有阈值的信息。

  • 使用 sp_dropthreshold 可以从段中删除阈值。

  • 每个数据库最多可以有 256 个阈值,其中包括最后机会阈值。

  • 每个阈值距下一个最接近的阈值必须至少为 2 乘以 @@thresh_hysteresis 页数。

    达到阈值

    达到阈值时,SAP ASE 服务器执行关联的存储过程。SAP ASE 服务器对阈值过程使用以下搜索路径:

  • 如果过程名称不指定数据库,SAP ASE 服务器将在达到阈值的数据库中查找。

  • 如果在该数据库中未找到该过程,并且过程名称以“sp_”开头,SAP ASE 服务器将在 sybsystemprocs 数据库中查找。

  • 如果在两个数据库中都没有找到该过程,则 SAP ASE 服务器向错误日志发送一条错误消息。

    SAP ASE 服务器使用一个停滞值(即全局变量 @@thresh_hysteresis)来确定阈值对可用空间变化的敏感程度。一旦阈值执行其过程,阈值将失效。在段中的可用空间量超过阈值的页数达到 @@thresh_hysteresis 之前,该阈值保持不活动状态。这样可防止因响应可用空间的微小波动而使阈值重复执行其过程。

    最后机会阈值

    缺省情况下,SAP ASE 服务器监控日志所在的段上的可用空间并在可用空间量少于允许成功转储事务日志所必需的空间时执行 sp_thresholdaction。这一可用空间量(称为最后机会阈值)是 SAP ASE 服务器计算出来的,用户不能对其进行更改。

    如果在记录某个事务前达到了最后机会阈值,SAP ASE 服务器将挂起该事务直到日志空间被释放。使用 sp_dboption 为特定数据库更改此行为。通过将 abort tran on log full 选项设置为 true,可使 SAP ASE 服务器回退在达到最后机会阈值时尚未记录的所有事务。

    无法使用 sp_modifythreshold 更改与最后机会阈值关联的可用空间值或段名。

    只有将其日志存储在单独的段上的数据库才可具有最后机会阈值。使用 sp_logdevice 可以将事务日志移动到单独的设备上。

    创建阈值过程

    具有 create procedure 权限的任何用户都可以在数据库中创建阈值过程。通常,系统管理员在 master 数据库中创建 sp_thresholdaction,数据库所有者在用户数据库中创建阈值过程。

    sp_modifythreshold 不验证指定的过程是否存在。可以将某一阈值与尚不存在的过程相关联。

    sp_modifythreshold 检查以确保修改阈值过程的用户已被授予“sa_role”。创建阈值过程时,所有活动的系统角色都将在 systhresholds 中作为写入该过程的用户的有效角色修改。

    SAP ASE 服务器向阈值过程传递四个参数:

  • @dbname,varchar(30),用于标识数据库

  • @segment_name,varchar(30),用于标识段

  • @space_left,int,用于指示与阈值关联的可用页数

  • @status,int,对于最后机会阈值,此参数的值为 1;对于其它阈值,此参数的值为 0

    这些参数按位置传递,而不是按名称传递;您的阈值过程可以为它们使用其它名称,但该过程必须按所示顺序以及用正确的数据类型声明它们。

    没有必要为每个阈值创建一个不同的过程。为将维护开销降至最低,应在可由所有阈值执行的 sybsystemprocs 数据库中创建单个阈值过程。

    在阈值过程中包括 print 和 raiserror语句,可将输出发送到错误日志。

    执行阈值过程

    在达到阈值时启动的任务作为后台任务执行。这些任务没有关联的终端会话或用户会话。如果您在这些任务运行时执行 sp_who,status 列将显示“background”。

    SAP ASE 服务器用修改了阈值的用户的以下权限执行阈值过程:该用户执行 sp_modifythreshold 时的权限减去执行该命令后已撤消的所有权限。

    每个阈值过程都使用一个用户连接,这样它会一直占用该连接以执行过程。

    禁用可用空间计数

    使用 sp_dboption 的 no free space acctg 选项可以禁用对非日志段的可用空间计数。

    不能禁用对日志段的可用空间计数。

    > 警告

    > 如果禁用可用空间计数,系统过程将无法提供有关空间分配的准确信息。