更改临时数据库 "in-query"

Changing tempdb "in-query"

美好的一天,

是否可以更改我当前会话正在使用的 tempdb? 我有一个非常繁重的查询,用于高清使用。 理想情况下,我希望查询是 运行 使用我们专门为这些繁重的事情准备的 tempdb。 (主要问题是查询创建了一个非常大的临时文件 table)

我想要以下内容:

use tempdb <tempdbname>

<query>

use tempdb <normaltempdb>

如果这是可能的,即使通过其他方式,也请告诉我。 现在,我知道的唯一方法是将用户绑定到不同的 tempdb,然后使用该用户而不是普通用户进行 HD 登录。

提前致谢, ziv.

如果您主要担心对 tempdb 和其他用户的影响,您可以考虑创建多个相同大小和结构的默认 tempdb。将这些添加到默认组,会话在连接时分配给临时数据库,从而降低一个大型查询影响整个数据服务器的风险

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc00841.1502/html/phys_tune/phys_tune213.htm

您还可以考虑对特定登录使用登录触发器,并检查正在连接的程序名称以决定使用哪个临时数据库(例如,Business Objects 可以转到更大的 DSS 临时数据库或类似数据库)。

我知道无法更改正在运行的会话 tempdb,因为 tempdb 绑定是在连接时设置的。

在 Sybase ASE 中,您不能更改正在运行的 tempdb;您的 tempdb 是在登录时自动分配的。

您有几个选择:

1(推荐)- 让 DBA 专门为此过程创建一个登录名,并将所述登录名绑定到所需的 tempdb(例如,sp_tempdb 'bind',...);让您的进程使用这个新登录

2(不推荐)——不创建#temp 表,而是创建带有 'desired_tempdb_name..' 前缀的永久表;如果你忘记在完成后手动删除所述表,你可能会激怒你的 DBA

3(好的,如果您有磁盘 space)- 正如 Rich 所建议的,确保所有 tempdb 的大小足以支持您的进程

注意:如果您使用的是 Sybase 的 SQLAnywhere、IQ 或 Advantage RDBMS...抱歉,我不知道如何为这些产品分配临时数据库。

听起来您至少有一个由 DBA 创建的其他 tempdb。您可以通过应用程序名称和登录 ID 绑定到它。在您的客户端会话中设置应用程序名称(取决于您如何执行此操作的客户端。)使用 sp_tempdb(仅限 dba)将该应用程序名称绑定到备用 tempdb,并且您的 # table 将在那个 tempdb 中。具有该应用程序名称的任何会话都将使用该 tempdb。

tempdbs 不必具有相同的大小或结构,您可以拥有单独的日志和数据(一个好主意),根据您正在做的事情,更多的日志和更少的数据。

markp 在 tempdbs 中提到永久 tables,并说 "not recommended"。不过,这可能是一项很好的技术。您确实需要注意它们有多大以及何时掉落。您可能不需要或不想立即删除它们,例如,如果您需要从它们进行 bcp and/or 出于支持目的让它们可见,但您确实需要清楚 space 用法,何时删除以及如何。