将文本文件导入到SQL Server 2008数据库实时时间

问题描述:

我有一台机器,它在一天的开始时(上午12点)创建一个新的日志文件,并在每天结束时更新日志文件。将文本文件导入到SQL Server 2008数据库实时时间

  1. 如何将数据实时导入到我的SQL服务器数据库(30秒,1分钟或任何时候有变化)?
  2. SQL Server 2008能够访问活动日志文件吗?如果不让我的机器在有任何更新时创建新的日志文件,会不会更容易?但如果是这样,我如何实时导入具有不同名称的如此多的日志文件。 (我必须能够扩展解决方案达到多台机器)

THX很多

您可以登录使用反时间戳每个新行。

由于您只需要在文件更改时进行登录,就可以实现内存队列 ,该队列从文件读取并存储数据。 然后实现一个生产者消费者模型,其中一个线程从队列读取数据并将消费者日志载入数据库。 然后,Windows服务可以继续读取队列并登录到SQL Server。 (因为它是一个生产者消费者,在队列为空的情况下不会有任何忙碌的等待)

不知何故,每当你做出每个日志时,你也必须通知生产者线程。这可以通过套接字/或其他方式来完成,以防您可以访问正在进行日志记录的代码。

+0

如果我没有访问正在进行日志记录的代码,该怎么办?机器由第三方维护 – user1179728 2012-01-31 08:07:46

怎么样的SSIS包由SQL Server的预定作业被称为?

如果您无法控制生成该文件的应用程序,那么您除了轮询文件外别无选择。编写定期轮询文件并将增量写入数据库的应用程序。应用程序需要记录上次读取的高水位标记。

另一个问题是,如果应用程序在写入之间没有关闭文件,那么上次访问的时间戳可能不会更新,因此检查文件的年龄可能不可靠。在这种情况下,你需要实现这样的过程:

  • 打开日志文件
  • 寻找到你的最后记录的EOF位置
  • 尝试阅读
  • 如果成功的话,处理新的数据,直到你到新的EOF。
  • 更新你的执着EOF位置
  • 关闭文件

您需要确保的字节数读取文件对齐寻求位置。如果日志文件是unicode,那么在字节和字符之间可能没有1:1映射。您可能需要以二进制模式读取文件的块,并从缓冲区转换为字符。

解析日志文件条目后,您可以插入数据,或者对较大的数据卷使用SQLBulkCopy。

如果您可以放松延迟限制并且日志文件足够小,那么您可能只需实现一个将日志文件复制到暂存区域并定期重新加载整个事件的进程。