今天在使用unixodbc时,发现可执行程序运行就崩溃,然后使用isql看一下数据库发现提示File size limit exceeded。提示如下:
[root@localhost tmp]# isql -v MY_ORACLE
File size limit exceeded
File size limit exceeded
重启机器,问题依旧。。
经过慎密思考和网络帮助
问题解决了,
解决思路:
1. 该提示说明isql需要打开的一个文件超过系统限制了,我用的是32位操作系统,最大的文件是2G,所以查看和isql相关的文件即可,
2. 使用strace查看isql都做了什么
:strace isql -v MY_ORACLE
open("/root/.odbcinst.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
time(NULL) = 1270104166
time(NULL) = 1270104166
time(NULL) = 1270104166
open("/etc/odbcinst.ini", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=322, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f8c000
read(3, "[Oracle_test]\nDescription\t\t= odb"..., 4096) = 322
read(3, "", 4096) = 0
close(3) = 0
munmap(0xb7f8c000, 4096) = 0
open("/root/.odbcinst.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
time(NULL) = 1270104166
time(NULL) = 1270104166
time(NULL) = 1270104166
open("/etc/odbcinst.ini", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=322, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f8c000
read(3, "[Oracle_test]\nDescription\t\t= odb"..., 4096) = 322
read(3, "", 4096) = 0
close(3) = 0
munmap(0xb7f8c000, 4096) = 0
open("/root/.odbcinst.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
time(NULL) = 1270104166
time(NULL) = 1270104166
open("/tmp/sql.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=2147483647, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f8c000
fstat64(3, {st_mode=S_IFREG|0644, st_size=2147483647, ...}) = 0
_llseek(3, 2147483647, [2147483647], SEEK_SET) = 0
gettimeofday({1270104166, 490623}, {4294966816, 0}) = 0
write(3, "[ODBC][4533][1270104166.490623]["..., 98) = -1 EFBIG (File too large)
--- SIGXFSZ (File size limit exceeded) @ 0 (0) ---
+++ killed by SIGXFSZ +++
问题出在/tmp/sql.log, 文件太大了,ll一下/tmp/sql.log,果然是2G!
3. 删除sql.log,执行isql,OK!
3. 那到底为什么会产生/tmp/sql.log呢? 原来是odbc产生的,因为我在/etc/odbcinst.ini 中增加了
[ODBC]
Trace=1
Debug=1
Pooling=No
产生了日志,把他们关掉后,就不会产生sql.log日志了。
至此,问题解决!