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

sp_unbindcache

语法


sp_unbindcache <dbname>[,[<owner>.]<tablename> 
	[, <indexname> | "text only"]] 

参数

<dbname>

是要解除绑定的数据库的名称,或包含要解除绑定的对象的数据库的名称。

<owner>

是表所有者的名称。如果表属于数据库所有者,则所有者名称是可选的。

<tablename>

是要解除与高速缓存的绑定的表的名称,或要解除其索引、text 对象或 image 对象与高速缓存的绑定的表的名称。

<indexname>

是要解除与高速缓存的绑定的索引的名称。

text only

解除 text 或 image 对象与高速缓存的绑定。

示例

示例 1

解除 titles 绑定:


sp_unbindcache pubs2, titles

示例 2

解除 titleidind


sp_unbindcache pubs2, titles, titleidind

示例 3

解除 au_pix 表的 text 或 image 对象与它绑定到的高速缓存的绑定:


sp_unbindcache pubs2, au_pix, "text only"

示例 4

解除事务日志 syslogs 与其高速缓存的绑定:


sp_unbindcache pubs2, syslogs

用法

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

  • 解除了数据库或数据库对象与高速缓存的绑定后,该高速缓存的所有后续 I/O 都将在缺省数据高速缓存中执行。解除绑定的高速缓存中的所有脏页都将被写入磁盘,而所有干净页都将被从该高速缓存中清除。

  • 如果您尝试使用 sp_unbindcache 解除正在使用的数据库的绑定,SAP ASE 服务器将发出错误编号 857。

  • 解除高速缓存绑定的操作会立即生效,而不需要重新启动服务器,但与其绑定的高速缓存的系统索引除外:tempdb。

  • 尽管仍可以使用系统 tempdb 中的高速缓存的 sp_unbindcache 索引,但现在,系统 tempdb 的绑定是非动态的。在重新启动服务器之前:

    - 所做的更改不会生效。

    - 除非将系统 tempdb 显式绑定到缺省数据高速缓存,否则 sp_helpcache 报告状态“P”(表示挂起),显式绑定到缺省数据高速缓存后,状态显示为“V”(表示有效),这是因为缺省情况下,系统 tempdb 已被绑定到缺省数据高速缓存。

  • 删除数据库、表或索引时,将自动删除其高速缓存绑定。

  • 若要解除数据库绑定,您必须使用 master 数据库。对于表、索引、text 对象或 image 对象,必须在使用存储这些对象的数据库。

  • 要解除数据库中任何系统表的绑定,您必须正在使用该数据库,而且该数据库必须处于单用户模式。请使用以下命令:

    
    sp_dboption <db_name>, "single user", true
    

    有关详细信息,请参见 sp_dboption。

  • 以下过程提供有关各自对象的绑定的信息:sp_helpdb 用于数据库,sp_help 用于表,sp_helpindex 用于索引。

  • sp_helpcache 输出绑定到高速缓存的对象的名称。

  • 解除表或其索引与高速缓存的绑定时,sp_unbindcache 需要获取一个排它表锁。在解除绑定期间,不能读取任何页。如果用户在某个表上持有锁,而您又对该对象发出了 sp_unbindcache 命令,则 sp_unbindcache 任务将等到锁被释放才开始执行。

  • 使用 sp_bindcache 或 sp_unbindcache 更改了某个对象的高速缓存绑定后,下次执行引用该对象的存储过程时,将重新对其进行编译。更改了某个数据库的绑定后,下次执行引用该数据库中的对象的存储过程时,将重新对其进行编译。

  • 若要解除所有对象与某个高速缓存的绑定,请使用系统过程 sp_unbindcache_all。