更改tempdb"查询"

时间:2016-12-18 04:35:26

标签: sybase tempdb

美好的一天,

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

我喜欢以下内容:

use tempdb <tempdbname>

<query>

use tempdb <normaltempdb>

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

提前致谢, ZIV。

3 个答案:

答案 0 :(得分:1)

在Sybase ASE中,您无法在运行中更改tempdb;您的tempdb在登录时自动分配。

您有几个选择:

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

2(不推荐) - 不是创建#temp表,而是使用&#39; desired_tempdb_name创建永久表。&#39;字首;如果您在完成任务后忘记手动删除表格,那么您可能会惹恼您的DBA

3(好吧,如果你有足够的磁盘空间) - 正如Rich建议的那样,确保所有tempdb的大小足以支持你的进程

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

答案 1 :(得分:0)

如果您的主要问题是对tempdb和其他用户的影响,您可以考虑创建具有相同大小和结构的多个默认tempdbs。将这些添加到默认组,并将会话分配给连接上的tempdb,从而减少一个大型查询影响整个数据服务器的风险

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

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

虽然在连接时设置了tempdb绑定,但我无法在飞行中更改会话tempdb。

答案 2 :(得分:0)

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

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

markp在tempdbs中提到了永久表格,并且表示&#34;不推荐&#34;。这可能是一个很好的技术。你需要注意它们有多大以及什么时候被丢弃。您可能不需要或者想要立即删除它们,例如,如果您需要从它们bcp和/或将它们显示为支持目的,但您需要清楚空间使用情况,何时删除以及如何使用。