【故障描述】
客户遇到一个问题,在hpunix环境下部署了连接sqlserver的透明网关,但在/var/tmp总生成文件 需要隔一段时间清理一下空间。截图如下
而生成的这些文件也都是二进制的文件
相关进程截图如下:
【故障分析】
再遇到复杂查询时,ODBC会生成临时文件,如果没有用于指定tmp文件位置的连接参数。这些文件的位置由OS环境变量控制。
在Windows上,ODBC驱动程序将使用 GetTempPath() 来获取文件的目录。
连接:
http://msdn.microsoft.com/zh-CN/library/aa364992(v=VS.85).aspx
GetTempPath函数按以下顺序检查是否存在环境变量,并使用找到的第一个路径:
1. TMP环境变量指定的路径。
2. TEMP环境变量指定的路径。
3. USERPROFILE环境变量指定的路径。
4. Windows目录。
GetTempFileName用于创建前缀为“ qe”的文件名
在UNIX上,ODBC驱动程序将使用 tempnam() 创建前缀为'qe'的临时文件。如果设置了环境变量QE_TMPDIR,则将在此目录中创建文件(如果适用)。否则,该功能将选择放置文件的位置。
链接:
Linux上的手册页
tempnam() 函数允许用户控制目录的选择。 dir参数指向要在其中创建文件的目录的名称。如果dir是空指针或指向不是适当目录名称的字符串,则应使用在<stdio.h>标头中定义为P_tmpdir的路径前缀。如果该目录不可访问,则可以使用实现定义的目录。
例如该目录可以是/ usr / var或/ tmp ...
【故障解决】
Oracle发布了一个Patch来解决这个BUG,Patch 15842952: HEAVY USAGE OF /TMP FILES RUNNING COMPLEX QUERIES,针对 12.1.0.1.0
【参考文档】
Oracle Database Gateway For SQL Server Writing To /tmp (Doc ID 2318917.1)
Heavy Usage of /TMP Space with DG4MQL 11.2 (Doc ID 1606928.1)
https://knowledgebase.progress.com/articles/Article/000024815?q=%2Ftmp&l=en_US&c=Product_Group%3ADataDirect&type=Article__kav,Critical_Alert__kav,Product_Alert__kav,Support_Information__kav&fs=Search&pn=1