我在工作中继承了这个 Frankenstein 应用程序,该应用程序利用 Access 2007 DB 前端和 Oracle 10g DB 的链接表。
用户已经开始报告许多查询都失败了,并出现错误 3183 out of temporal space。这些相同的查询在几周前运行良好。
我验证了 Access 正在创建一个 2GB 的临时文件,这是系统临时目录中允许的最大数量。
即使我使用不会返回数据的参数运行查询,我仍然会收到错误消息。执行 SQL 跟踪表明,一些查询正在尝试运行一个查询集,该查询集将返回大约 1400 万行。我知道有些查询设计得很糟糕,但这并不是一件容易改变的事情。
我让 Oracle DBA 将临时空间加倍,但仍然没有解决问题。
我想我的问题是,如果没有可用的 Oracle 临时表空间,Access DB 是否首先使用链接的 ODBC 数据库上可用的临时空间,然后使用临时文件?任何想法为什么会开始发生这种情况,或者仅仅是 Oracle 数据库中的数据量超过了 Access 的能力?创建应用程序的方式一直有效,直到几周前左右。
了解重新设计此应用程序并非易事。我更想知道为什么这之前会起作用并且最近开始发生。
这是 Access RAW SQL.. 明白我没有写这个.. Oracle 表至少没有空格和 & 符号。:)
SELECT DISTINCT [Event: Overhaul & Repair].BASE_PART_NUMBER,
[Event: Overhaul & Repair].PERIOD,
[Event: Overhaul & Repair].RECEIVED_BY_FACILITY_DATE,
[Event: Overhaul & Repair].PART_NUMBER,
[Event: Overhaul & Repair].CONFIGURATION_RECEIVED,
[Event: Overhaul & Repair].PART_SERIAL_NBR,
[Findings: Feature Findings Detail].SUBASSEMBLY_NAME,
[Findings: Feature Findings Detail].COMPONENT_NAME,
[Findings: Feature Findings Detail].FEATURE_NAME,
[Findings: Feature Findings Detail].FAILURE_DESCRIPTION,
[Findings: Feature Findings Detail].PRIMARY_FAILURE_IND,
[Event: Overhaul & Repair].REMOVAL_JUSTIFIED_FLAG_ON_OR,
[Event: Overhaul & Repair].CUSTOMER_NAME_SUBMITTING,
[Findings: Feature Findings Detail].AIRCRAFT_TYPE,
[Event: Overhaul & Repair].AIRCRAFT_REG_NUMBER,
[Event: Overhaul & Repair Text].NOTE_TEXT,
[Event: Overhaul & Repair].TIME_SINCE_NEW_ON_OR,
[Event: Overhaul & Repair].TIME_SINCE_INSTALL,
[Event: Overhaul & Repair].TIME_SINCE_OVERHAUL_ON_OR,
[Event: Overhaul & Repair].FACILITY_NAME,
[Event: Overhaul & Repair].EVENT_SEQNO
FROM ([Event: Overhaul & REPAIR]
LEFT JOIN [Event: Overhaul & REPAIR Text]
ON [Event: Overhaul & REPAIR].EVENT_SEQNO=[Event: Overhaul & REPAIR Text].EVENT_SEQNO)
LEFT JOIN [Findings: Feature Findings Detail]
ON [Event: Overhaul & REPAIR].EVENT_SEQNO=[Findings: Feature Findings Detail].EVENT_SEQUENCE_NUMBER
WHERE ((([Event: Overhaul & Repair].BASE_PART_NUMBER)=[PART NUMBER])
AND (([Event: Overhaul & Repair].PERIOD) BETWEEN [START DATE YYYYMM] AND [END DATE YYYYMM])
AND (([Findings: Feature Findings Detail].PRIMARY_FAILURE_IND)="PF"
OR ([Findings: Feature Findings Detail].PRIMARY_FAILURE_IND) IS NULL)
AND (([Event: Overhaul & Repair Text].NOTE_TEXT)="R"));