Stored procedures AS400/SQL Server 2008 R2数据传输性能改进

Stored procedures AS400/SQL Server 2008 R2数据传输性能改进,stored-procedures,reporting-services,sql-server-2008-r2,ibm-midrange,linked-server,Stored Procedures,Reporting Services,Sql Server 2008 R2,Ibm Midrange,Linked Server,我们最近将JD Edwards EnterpriseOne系统从和AS400/DB2平台转换为Windows&SQL Server。在旧系统中,我们有一个RPG/CL程序,可以将数据从AS400库传输到会计系统进行进一步处理。最终用户需要启动此过程,以便通过菜单命令执行 为了在转换后复制此行为,我在SQL Server 2008 R2中创建了一个存储过程,该过程通过链接服务器将记录从as400插入SQL Server数据库,然后更新as400上的记录,以指示记录已被处理。为了让最终用户能够执行这

我们最近将JD Edwards EnterpriseOne系统从和AS400/DB2平台转换为Windows&SQL Server。在旧系统中,我们有一个RPG/CL程序,可以将数据从AS400库传输到会计系统进行进一步处理。最终用户需要启动此过程,以便通过菜单命令执行

为了在转换后复制此行为,我在SQL Server 2008 R2中创建了一个存储过程,该过程通过链接服务器将记录从as400插入SQL Server数据库,然后更新as400上的记录,以指示记录已被处理。为了让最终用户能够执行这个过程,我创建了一个执行存储过程的SSRS2005报告

当以交互方式执行SSRS报告时,我们会间歇性地得到一个错误“因为安全问题,此XML文档中禁止使用DTD”,根据我的研究,这是由SSRS内存不足引起的

有人知道传输数据的另一种/更好的方法吗

存储过程的传输/更新本质上是

INSERT INTO [SQL DEST TABLE] 
    SELECT * 
    FROM [AS400 Linked Server/Table]

UPDATE OPENQUERY (AS400_LINK, 'MY SELECT QUERY')
SET FLAG = PROCESSED;

您应该获得更好的数据库性能,以便允许服务器在可能的情况下使用自己的数据执行工作,而不必来回传输数据

我会对情况做一些猜测,如果你纠正我的话,我会很乐意调整答案以适应你的情况。这听起来像是从DB2中的会计事务表中提取数据,完成后,您希望更新这些记录中的标志。这可能意味着记录可能永远留在该表中,或者可能是其他进程将其清除。在您的选择中没有位置,因此我假设它们确实被删除。我假设我们不知道是否会在任何时候向事务表添加更多记录,包括提取信息和更新标志之间的任何时间段

我想知道,在SQL Server实际处理标记之前,是否可以在提取后立即更新标记?这在后勤上是否允许,并且在您的业务需求范围内

假设你

将DB2未处理的事务数据提取到工作文件中, 将工作文件传输到SQL Server, 执行您想在SQL Server中执行的任何处理 告诉DB2根据工作文件更新事务表 所以在DB2中,1可能看起来像

INSERT INTO workfile
  SELECT * 
    FROM transactions
    WHERE flag = unprocessed
在步骤3中,对于SQL Server无法正确处理的任何记录,SQL Server作业可能会将工作文件中的标志更新为错误状态

DB2上的第4步可能是

UPDATE transactions
  SET flag = processed
  WHERE transid IN (SELECT transid
                      FROM workfile
                      WHERE flag <> error
                   )

希望在SQL Server上处理错误的情况会非常少。如果该进程仅在出现错误时更新工作文件中的事务,则这应该比每次成功发送更新更快。上面的UPDATE语句应该能够在DB2上运行得更快,因为它是由同一服务器上的工作文件驱动的,而不是将数据传输回DB2。

SSRS报告似乎是一个非常奇怪的地方,用来放置更新数据库的逻辑!我会使用一个SQL Server Integration Services SSIS包,甚至只是一个SQL Server代理作业,根据用户的意愿运行一些基本的T-SQL语句。SSRS是一个黑客,SSIS是我的第一选择。我还可以如何让最终用户在没有直接访问的情况下执行SSIS包?您应该能够在服务器上存储SSIS包,将其安排在SQL server代理作业中,这样的作业可以从ASP.NET网站或其他地方执行。什么版本的OS/400、i5/OS,或者IBM i don’您需要传输/更新多少记录,与DB2的交互需要多长时间?我们正在运行OS400 v5r2。每个进程的记录都不同,但它总是少于100条记录,当通过SSMS手动运行事务时,大约需要15-30秒。这基本上就是我们现在所做的。源程序将记录添加到db2上的通用工作文件中,我通过存储过程将记录传输到SQL Server,然后更新工作文件中的已处理标志。