我想将数据从MySQL数据库传输到MySQL数据库。因此,我向MySQL添加了一个链接服务器,以便可以使用Openquery将数据插入到MySQL数据库中。我希望优化数据传输的性能,并找到了在MySQL中提高数据加载性能的指导方针。
一种优化包括禁用AUTOCOMMIT模式,但是我无法使用Openquery完成它。
我两种方法都试过:
SELECT * from openquery(MYSQL,'SET autocommit=0')
exec openquery(MYSQL,'SET autocommit=0') 我得到了:
无法处理对象“设置autocommit=0”。用于链接服务器"MYSQL“的OLE DB提供程序"MSDASQL”表示对象没有列,或者当前用户对该对象没有权限。
是否可以通过openquery执行这样的语句?
谢谢你,Mickael
发布于 2014-01-19 19:07:25
OPENDATASOURCE()和OPENROWSET()允许add服务器连接。您不需要提前定义链接服务器。
OPENQUERY()依赖于提前定义静态链接服务器。
这是MSDN引用。
http://technet.microsoft.com/en-us/library/ms188427.aspx
大多数示例使用OPENQUERY()作为命令的源或目标来显示DML (SELECT、UPDATE、DELETE、INSERT)。您要做的是执行会话命令。因此,它将失败。此外,您可能甚至不知道会话是否在下一次调用中保持开放状态。
为什么不将MYSQL服务器上的逻辑打包为一个存储过程。存储过程可以通过使用四部分的名称在链接服务器上执行吗?
例如:
插入#结果EXEC服务器.数据库.存储-proc
这假设MYSQL具有与ORACLE相同的对象结构。因为我不是MYSQL的人,所以我不能评论。我允许你研究这个小项目。
但这应该管用。它将允许您在MYSQL数据库中打包任何类型的逻辑。
发布于 2014-01-21 13:39:27
如果要使用SSIS将数据从Server传输到MYSQL。
要使ADO.NET目标正常工作,MySQL数据库需要启用ANSI_QUOTES SQL_MODE选项。此选项可以是全局启用的,也可以是针对特定会话的。要使它能够进行一次单独的会议:
1 - Create an ADO.NET Connection Manager which uses the ODBC driver
2 - Set the connection manager’s RetainSameConnection property to True
3 - Add an Execute SQL Task before your data flow to set the SQL_MODE – Ex. set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES'
4 - Make sure that your Execute SQL Task and your ADO.NET Destination are using the same connection manager.马特·梅森是在回复时这么做的。关键是第2项,使用相同的连接。
http://blogs.msdn.com/b/mattm/archive/2009/01/07/writing-to-a-mysql-database-from-ssis.aspx#comments
另外,CozyRoc有一个定制的ODBC驱动程序,它可能比MYSQL的免费驱动程序更快/更可靠。
http://cozyroc.com/ssis/odbc-destination
https://stackoverflow.com/questions/21217477
复制相似问题