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

sp_tempdb

说明

sp_tempdb 允许用户:

创建和管理临时数据库组。

将用户或应用程序绑定到 default 或其它临时数据库组,或绑定到特定的本地临时数据库。

管理到本地临时数据库和临时数据库组的绑定。

这些绑定存储在 master 数据库的 sysattributes 表中。

sp_tempdb 提供用于维护 sysattributes 中与多个临时数据库相关的绑定的绑定接口。

语法


sp_tempdb [
	[{"create" | "drop"}, "<groupname>"] | 
	[{"add" | "remove"}, "<tempdbname>", "<groupname>"] | 
	[{"bind", "<objtype>", "<objname>", "<bindtype>", "<bindobj>" 
		[, "<scope>", "<hardness>"]} | 
		{"unbind", "<objtype>", "<objname>"[, "<scope>"] "<instance_name>"}] | 
	["unbindall_db", "<tempdbname>"] | 
	[show[, "all" | "gr" | "db" | "login" | "app"[, "<name>"]] | 
	[who, "<dbname>"] 
	[help]]

参数

create

创建 default 临时数据库组。

drop

删除临时数据库组。

<groupname>

是临时数据库组的名称。

add

将临时数据库添加到 default 临时数据库组中。

remove

从 default 临时数据库组中删除临时数据库。

<tempdbname>

是要添加或删除的临时数据库的名称。对于 Cluster Edition,<tempdbname> 必须为本地用户临时数据库。

bind

将登录名和应用程序绑定到临时数据库或 default 临时数据库组。

unbind

解除登录名和应用程序与临时数据库或 default 临时数据库组之间的绑定。

<objtype>

是对象类型。有效值包括:

  • login_name(或 LG)

  • application_name(或 AP)

    值不区分大小写。

    <objname>

    是要绑定或解除绑定的对象的名称。

    <bindtype>

    是绑定类型。有效值包括:

  • group(或 GR)

  • database(或 DB)

    值不区分大小写。

    <bindobj>

    是要绑定的对象的名称。视 <bindtype> 而定,该对象为一个组或一个数据库。

    <scope>

    NULL。

    <instance_name>

    在集群环境中 – 是拥有要解除绑定的本地临时数据库的实例的名称。此选项仅适用于 Cluster Edition。

    <hardness>

    hardness – 为 hard、soft 或 NULL。缺省值为 soft。将 <hardness> 的值设置为 hard 时,如果未能按照绑定指派临时数据库,将导致登录失败。

    将其值设置为 soft 时,此类故障会导致从缺省组中指派临时数据库或指派本地系统临时数据库。

    unbindall_db

    删除给定的临时数据库的所有登录名绑定和应用程序绑定。它不会删除任何“数据库到组”成员关系。使用此选项时,需要指定 <tempdbname> 变量。

    此操作不会影响活动会话的现有指派。

    show

    显示 sysattributes 表中存储的有关现有组、组成员、登录帐户和应用程序绑定和指派到给定数据库的活动会话的信息。其值包括:

  • all 或不带参数 – 显示 default 临时数据库组,所有“数据库与组”的成员关系,以及所有登录名和应用程序绑定。

  • gr – 显示 default 临时数据库组。无论是否将 <name> 选项指定为“default”,sp_tempdb show 都会显示所有绑定到 default 临时数据库组的临时数据库。

  • db – 显示所有“数据库和临时数据库与组”的成员关系。如果提供了 <name>,则只会输出数据库 <name> 的“数据库与组”的成员关系。

  • login – 显示登录名不为 NULL 的所有登录名绑定。如果提供了 <name>,则只会输出登录名 <name> 的绑定。

  • app – 显示所有应用程序不为 NULL 的绑定。如果提供了 <name>,则只会输出应用程序 <name> 的绑定。

    > 注意

    tempdb 始终属于 default 数据库组。

    who

    显示所有指派到给定临时数据库的活动会话。使用 who 参数时,必须使用以下参数:

    <dbname> – 是临时数据库的名称。如果为 <dbname> 提供的值不是临时数据库名称,则 sp_tempdb who 虽然会执行,但不会报告任何绑定到该数据库的活动会话。

    如果 system_view 设置为 cluster,则会检查集群的所有活动会话。如果 system_view 设置为 instance,则会检查当前实例上处于活动状态的会话

    可以从集群中的任何实例上执行此命令。

    help

    显示用法信息。执行 sp_tempdb 而不指定命令与执行 sp_tempdb "help" 是等效的。

    示例

    示例 1

    将 mytempdb1 添加到 default 组:

    
    sp_tempdb "add", "mytempdb1", "default"
    

    示例 2

    从 default 组中删除 mytempdb1:

    
    sp_tempdb "remove", "mytempdb1", "default"
    

    示例 3

    将登录名“sa”绑定到 default 组:

    
    sp_tempdb "bind", "lg", "sa", "GR", "default"
    

    在此示例中,objtype 的值为 login_name。可用 lg 或 LG 替代 login_name。

    在此示例中,bindtype 的值为 group。可用 gr 或 GR 替代 group。

    示例 4

    将上例中登录名“sa”的绑定从 default 组更改为 mytempdb1:

    
    sp_tempdb "bind", "lg", "sa", "DB", "mytempdb1"
    

    在此示例中,bindtype 的值为 database。可用 db 或 DB 替代 database。

    示例 5

    将 isql 绑定到 mytempdb1:

    
    sp_tempdb "bind", "ap", "isql", "DB", "mytempdb1"
    

    在此示例中,objtype 的值为 application_name。可用 ap 或 AP 替代 application_name。

    示例 6

    将上例中 isql 的绑定从 mytempdb1 更改为 default 组:

    
    sp_tempdb "bind", "ap", "isql", "GR", "default"
    

    示例 7

    删除登录名“sa”和应用程序“isql”的绑定。

    
    sp_tempdb "unbind", "lg", "sa"
    
    
    sp_tempdb "unbind", "ap", "isql"
    

    示例 8

    删除 mytempdb1 数据库的所有登录名和应用程序绑定:

    
    sp_tempdb "unbindall_db", "mytempdb1"
    

    示例 9

    演示 sp_temp show 命令。我们选择了该命令的一些不同用法,并显示了经删节的示例输出。

    
    sp_tempdb show
    
    
    Temporary Database Groups 
    ------------------------------- 
    default 
    
    Database                        GroupName 
    ------------------------------- ----------------
    tempdb                          default 
    mytempdb                        default 
    mytempdb1                       default 
    mytempdb2                       default 
    mytempdb3                       default 
    
    Login   Application  Group    Database    Hardness
    ------- ------------- -------- ----------- -------- 
    NULL   isql          default  NULL        SOFT 
    sa      NULL          NULL     mytempdb3   HARD 
    

    示例 10

    显示 default 临时数据库组:

    
    sp_tempdb show, "gr"
    
    
    <h2>Temporary Database Groups</h2>
    default
    

    示例 11

    显示绑定到 default 组的所有临时数据库组的名称:

    
    sp_tempdb show, "gr", "default"Member Databases
    ------------------------------- 
    tempdb
    mytempdb
    mytempdb1
    mytempdb2
    mytempdb3
    

    示例 12

    显示所有“数据库与组”的成员关系:

    
    sp_tempdb show, "db"
    
    
    Database              Group
    --------------------- ----------------
    tempdb                default
    mytempdb              default
    mytempdb1             default
    mytempdb2             default
    mytempdb3             default
    

    示例 13

    显示 mytempdb1 数据库的所有“数据库与组”的成员关系。

    
    sp_tempdb show, "db", "mytempdb1"
    
    
    Database              Group
    --------------------- ----------------
    mytempdb1             default
    

    示例 14

    显示登录名不为 NULL 的所有登录名绑定:

    
    sp_tempdb show, "login"
    
    
    Login   Application   Group   Database    Hardness
    ------- ------------- ------- ----------- --------
    
    sa      NULL          NULL    mytempdb3   HARD
    

    示例 15

    显示指派到系统 tempdb 的所有活动会话:

    
    sp_tempdb who, "tempdb"
    
    
    spid   loginame
    ------ ------------------------------
    2      NULL
    3      NULL
    4      NULL
    5      NULL
    6      NULL
    7      NULL
    8      NULL
    

    示例 16

    显示指派到用户创建的临时数据库 mytempdb3 的所有活动会话:

    
    sp_tempdb who, "mytempdb3"
    
    
    spid   loginame
    ------ ------------------------------ 
    17      sa
    

    示例 17

    显示用法信息:

    
    sp_tempdb help
    
    
    Usage: 
    sp_tempdb 'help' 
    sp_tempdb 'create', <groupname> 
    sp_tempdb 'drop', <groupname> 
    sp_tempdb 'add', <tempdbname>, <groupname> 
    sp_tempdb 'remove', <tempdbname>, <groupname> 
    sp_tempdb 'bind', <objtype>, <objname>, <bindtype>, <bindobj>, <scope>, 
              <hardness> 
    sp_tempdb 'unbind', <objtype>, <objname>, <scope> 
    sp_tempdb 'unbindall_db', <tempdbname> 
    sp_tempdb 'show', <command>, <name> 
    sp_tempdb 'who', <dbname> 
    
    <objtype> = ['LG' ('login_name') | 'AP' ('application_name')]; 
    <bindtype> =['GR' ('group') | 'DB' ('database')] 
    <hardness> = ['hard' | 'soft'] 
    <command> = ['all' | 'gr' | 'db' | 'login' | 'app'] 
    

    示例 18

    显示所有临时数据库以及这些临时数据库所属的组的名称:

    
    <h2>create temporary database mytempdb</h2>
    CREATE DATABASE: allocating 1536 logical pages (3.0 megabytes) on disk 'master'.|
    
    <h2>create temporary database mytempdb1</h2>
    CREATE DATABASE: allocating 1536 logical pages (3.0 megabytes) on disk 'master'.
    
    <h2>sp_tempdb 'add', mytempdb,'default'</h2>
    (return status = 0
    
    <h2>sp_tempdb show, db</h2>
    <h2>Database Group</h2>
    tempdb default
    mytempdb default
    mytempdb1
    (3 rows affected)
    (return status = 0)
    

    用法

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

  • 要显示所有临时数据库的用户分布情况,请同时使用 show 和 who 这两个选项:

    - 要获得所有临时数据库的名称,请执行 sp_tempdb 'show'

    - 将每个临时数据库名称传递给:sp_tempdb 'who', <tempdbname>

    在 SAP ASE 15.0 版及更高版本中,可以通过执行 sp_who 获得相同的输出。

  • 使用 sp_tempdb create 存储过程时,<groupname> 变量:

    - 必须是有效的标识符

    - 不能已经存在

    default 组是系统生成的组,tempdb 始终属于该组。如果执行了以下操作,则 default 组已经存在:

    - 使用包含此功能的 SAP ASE 服务器进行了升级,或

    - 创建了新的主设备。

    如果 default 组不存在,可以使用以下命令创建该组:

    
    sp_tempdb create, "default"
    

    如果 default 组已经存在,尝试创建该组时将出现一条错误消息。

  • 如果将某个临时数据库添加到 default 临时数据库组,该临时数据库和该组名必须已经存在。使用 sp_tempdb add 将 <tempdbname> 添加到属于 default 临时数据库组的数据库的集合中后,<tempdbname> 将可用于该组内的循环指派。

    > 注意

    如果 <tempdbname> 尚不在 SAP ASE 服务器中可用临时数据库的全局列表内,sp_tempdb add 将失败

    用户创建的临时数据库无需属于 default 临时数据库组。系统 tempdb 隐式属于 default 组。

    如果尝试将某个已经属于 default 临时数据库组的临时数据库添加到该组,将出现一条错误消息,而且 sysattributes 中不会发生任何更改。