PyODBC:/tmp/odbc.log 文件超过 90GB 并停止从数据仓库获取数据

Posted

技术标签:

【中文标题】PyODBC:/tmp/odbc.log 文件超过 90GB 并停止从数据仓库获取数据【英文标题】:PyODBC: /tmp/odbc.log file exceeds more than 90GB and stops data fetching from Data Warehouse 【发布时间】:2016-10-26 14:46:29 【问题描述】:

我正在尝试将 1.5 亿行的消息数据从数据仓库提取到我的 EC2 实例中。我的磁盘上有 90GB 可用空间。当我将查询运行时,以下是我得到的错误:

Traceback (most recent call last):
  File "/usr/local/anaconda/lib/python3.5/site-packages/sqlalchemy/engine/result.py", line 964, in fetchall
    l = self.process_rows(self._fetchall_impl())
  File "/usr/local/anaconda/lib/python3.5/site-packages/sqlalchemy/engine/result.py", line 915, in _fetchall_impl
    return self.cursor.fetchall()
pyodbc.Error: ('08S01', '[08S01] [FreeTDS][SQL Server]Read from the server failed (20004) (SQLFetch)')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "en_str.py", line 45, in <module>
    INNER JOIN notified.Message m ON c.MessageID = m.MessageID where c.CreateDate>'2016-01-01 00:00:00.0';''',db007_cnxn)
  File "/usr/local/anaconda/lib/python3.5/site-packages/pandas/io/sql.py", line 331, in read_sql_query
    parse_dates=parse_dates, chunksize=chunksize)
  File "/usr/local/anaconda/lib/python3.5/site-packages/pandas/io/sql.py", line 1092, in read_query
    data = result.fetchall()
  File "/usr/local/anaconda/lib/python3.5/site-packages/sqlalchemy/engine/result.py", line 970, in fetchall
    self.cursor, self.context)
  File "/usr/local/anaconda/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1341, in _handle_dbapi_exception
    exc_info
  File "/usr/local/anaconda/lib/python3.5/site-packages/sqlalchemy/util/compat.py", line 202, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/usr/local/anaconda/lib/python3.5/site-packages/sqlalchemy/util/compat.py", line 185, in reraise
    raise value.with_traceback(tb)
  File "/usr/local/anaconda/lib/python3.5/site-packages/sqlalchemy/engine/result.py", line 964, in fetchall
    l = self.process_rows(self._fetchall_impl())
  File "/usr/local/anaconda/lib/python3.5/site-packages/sqlalchemy/engine/result.py", line 915, in _fetchall_impl
    return self.cursor.fetchall()
sqlalchemy.exc.DBAPIError: (pyodbc.Error) ('08S01', '[08S01] [FreeTDS][SQL Server]Read from the server failed (20004) (SQLFetch)')

我的磁盘空间已满,tmp 文件夹中的 odbc.log 文件占用了 90GB 空间。我有另一个 100TB 空间的已安装磁盘,但 odbc.log 仅在 tmp 文件夹中生成。解决方案是什么?关于如何解决这个问题的任何想法?或者,如何将 odbc.log 文件位置从 100 GB 空间磁盘更改为具有 100 TB 空间的磁盘?

另外,如果我给出 s3 存储桶位置,而不是给出 ec2 实例位置,那会避免这个 odbc.log 文件吗?

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

看起来您可能有详细的 FreeTDS 登录。大多数时候,配置文件位于/etc/freetds.conf/etc/freetds/freetds.conf

您需要在 FreeTDS 日志中查找 dump file。另外,请检查odbcinst.ini,因为那里可以打开日志记录。

您可能会发现各种日志工具之一指向/tmp/odbc.log,这将是您的罪魁祸首。祝你好运!

【讨论】:

以上是关于PyODBC:/tmp/odbc.log 文件超过 90GB 并停止从数据仓库获取数据的主要内容,如果未能解决你的问题,请参考以下文章

如何将 pyodbc 连接到 Access (.mdb) 数据库文件

循环遍历文本文件中的 SQL 查询并执行 - pyodbc

使用 Pyodbc 连接到具有用户定义函数的 MS Access 文件

使用 pyodbc 批量插入 SQL Server 表:找不到文件

使用 pyodbc 在 accdb 文件中写入列注释

M1 Mac 上的 Pyodbc