linux - 甲骨文查询 - ORA-01652 : unable to extend temp segment but only in some versions of sql*plus

标签 linux oracle client sqlplus ora-01652

这个让我很困惑。我编写了一个查询,它在我的开发客户端上运行良好,但在生产客户端上失败,出现错误“ORA-01652:无法通过...扩展临时段”。在这两种情况下,数据库和用户都是相同的。在我的开发机器 (MS Windows) 上,我有 SQL*PLUS(9.0.1.4.0 版)和 Toad 9.0(都使用 oci.dll 的 9.0.4.0.1 版)。两者都运行代码而没有错误。

但是,当我在另一台机器上使用相同的用户名/密码针对相同的数据库运行相同的文件时,这次是版本 10.2.0.4.0(来自 10.2.0.4-1 Oracle 即时客户端),我得到了错误。

它确实可重复发生。

不幸的是,我只能有限地访问设置为只读的数据库中的字典 View (甚至无法获得解释计划!)。

我已经尝试通过调整查询来解决这个问题(我怀疑有一个很大的中间结果集随后被削减)但是没有设法改变任何一个客户端的行为。

可能会在导致问题的机器上部署不同版本的客户端 - 但目前看起来像是降级到以前的版本。

有什么想法吗?

TIA

更新

根据下面 Gary 的回答,我查看了 glogin.sql 脚本——唯一的区别是“SET SQLPLUSCOMPATIBILITY 8.1.7”出现在工作客户端上,但没有出现在失败的客户端上——但添加它并没有解决问题。

我也试过

alter session set workarea_size_policy=manual;
alter session set hash_area_size=1048576000;

alter session set sort_area_size=1048576000;

没用:(

更新2

我设法找到了相同的行为,这次是与 Oracle 8i 后端对话。在这种情况下,数据库是 RW。这使我能够确认,正如我所怀疑的那样,不同的客户正在制定不同的计划。但是为什么????

查看“SHOW PARAMETERS”的输出,两个客户端报告完全相同的设置!

最佳答案

几年前,我在一个完全只读的 DR 数据库上工作,甚至 TEMP 表空间也是不可写的。任何试图溢出到临时空间的查询都会失败(即使要使用的临时空间非常小)。

如果情况相同,如果有一个 login.sql(或 glogin.sql 或登录触发器)执行 ALTER SESSION 为 session 设置更大的 PGA 内存值,我不会感到惊讶,和/或将优化器目标更改为 FIRST_ROWS。

如果可以,请比较两个客户端的以下结果:

从 v$ 参数中选择 * 哪里被修改了!='FALSE';

同样从每个客户的问题 SQL,尝试 EXPLAIN PLAN FOR SELECT... 和 SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

看看它是否提出了不同的查询计划。

关于linux - 甲骨文查询 - ORA-01652 : unable to extend temp segment but only in some versions of sql*plus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3976184/

相关文章:

c - DLL:在 Linux for Windows 上使用 MinGW 编译 C 时无法识别文件格式

linux - 通过 while 比较循环遍历数组

SQL不等于或为null

java - 错误 - 从 Java 调用 Oracle 函数

Powershell AcceptTcpClient() 不能被 Ctrl-C 中断

error-handling - 在客户端和服务器之间同步变量

java.net.ConnectException : failed to connect to/192. 168.10.110 连接失败:ECONNREFUSED(连接被拒绝

linux - 如何使用 imagemagick convert 合并 5 个以上的 PDF?

linux - 将 swf 渲染为 png 或其他图像格式

Oracle:ORA_ROWSCN 的数据类型是什么?