从MySQL到MSSQL的表传输失败

时间:2009-12-11 15:05:44

标签: mysql sql-server

我正在尝试使用MS SQL Management Studio中的数据迁移工具将表从MySQL传输到MSSQL。我正在为odbc使用.net提供程序并选择tabel并尝试转移。但是在数据库中获取总表数,但是当我尝试传输它时会出错。 即使我尝试预览数据,它也会说,

the preview data could not be retrieved.
Additional Information:
Error [42000].... there is an error near line 1 ( myodbc5.dll).

有什么不对吗?

我从MySQL网站下载了驱动程序,我尝试重新安装它们超过10次。

我错过了什么?

请帮帮我。

1 个答案:

答案 0 :(得分:1)

根据您的帖子可能会出现一些问题。我建议将故障排除分解为以下步骤:

  1. 尝试使用Management Studio和SSIS以外的工具连接到服务器,以查看ODBC连接是否正常工作。我建议使用Toad for MySQL by Quest Software。它是免费的,具有与Management Studio类似的UI。

  2. 正确连接服务器后,请尝试查询数据以验证您是否拥有足够的权限。

  3. 登录到需要连接MySQL数据库的服务器时,执行步骤1和2。您可能会在服务器上遇到与桌面上不同的连接问题。例如,服务器可能在域上以不同方式受到保护,或者您可能在桌面上不存在的服务器上存在驱动程序兼容性问题。

  4. 尝试使用ODBC连接设置链接服务器连接。在一台服务器上,我们发现我们可以成功地使用它,但我们无法使用ODBC连接正确地播放SSIS。在更糟糕的情况下,您可以使用SSIS执行链接服务器查询以通过存储过程调用来引入数据。以下是在此实例中为我们工作的示例链接服务器连接。

    EXEC master.dbo.sp_addlinkedserver @server = N'Some_MySQL_Server_Name',@ srvproduct = N'MySQLDatabase',@ provider = N'MSDASQL',@ datasrc = N'Some_ODBC_Name'

    EXEC master.dbo.sp_addlinkedsrvlogin @ rmtsrvname = N'Some_MySQL_Server_Name',@ useself = N'False',@ locallogin = NULL,@ rmtuser = NULL,@ rmtpassword = NULL

    GO

    EXEC master.dbo.sp_serveroption @ server = N'Some_MySQL_Server_Name',@ optname = N'collat​​ion compatible',@ optvalue = N'false' GO

    EXEC master.dbo.sp_serveroption @ server = N'Some_MySQL_Server_Name',@ optname = N'data access',@ optvalue = N'true' GO

    EXEC master.dbo.sp_serveroption @ server = N'Some_MySQL_Server_Name',@ optname = N'dist',@ optvalue = N'false' GO

    EXEC master.dbo.sp_serveroption @ server = N'Some_MySQL_Server_Name',@ optname = N'pub',@ optvalue = N'false' GO

    EXEC master.dbo.sp_serveroption @ server = N'Some_MySQL_Server_Name',@ optname = N'rpc',@ optvalue = N'false' GO

    EXEC master.dbo.sp_serveroption @ server = N'Some_MySQL_Server_Name',@ optname = N'rpc out',@ optvalue = N'false' GO

    EXEC master.dbo.sp_serveroption @ server = N'Some_MySQL_Server_Name',@ optname = N'sub',@ optvalue = N'false' GO

    EXEC master.dbo.sp_serveroption @ server = N'Some_MySQL_Server_Name',@ optname = N'connect timeout',@ optvalue = N'0' GO

    EXEC master.dbo.sp_serveroption @ server = N'Some_MySQL_Server_Name',@ optname = N'collat​​ion name',@ optvalue = null GO

    EXEC master.dbo.sp_serveroption @ server = N'Some_MySQL_Server_Name',@ optname = N'lazy schema validation',@ optvalue = N'false' GO

    EXEC master.dbo.sp_serveroption @ server = N'Some_MySQL_Server_Name',@ optname = N'query timeout',@ optvalue = N'0' GO

    EXEC master.dbo.sp_serveroption @ server = N'Some_MySQL_Server_Name',@ optname = N'use remote collat​​ion',@ optvalue = N'true' GO

    EXEC master.dbo.sp_serveroption @ server = N'Some_MySQL_Server_Name',@ optname = N'remote proc transaction promotion',@ optvalue = N'true' GO

  5. SSIS数据流应使用ADO.NET源。不要依赖“表或视图”数据访问模式。而是使用SQL命令。我注意到SSIS有时无法正确读取元数据,您可能需要CAST一些字段才能解决此问题。有时会使色谱柱变长或变短。注意源上的数据类型,以了解SSIS如何填补长度。我不记得是什么导致这种情况,但如果我的记忆是正确的话,它似乎与可空性和字符串数据类型有关。我建议将其发送到数据读取器目的地,并使用数据查看器查看数据以查看它是否正确。您可能还需要在源和目标之间添加数据转换步骤,以便从unicode转换为非unicode。

  6. 如果确定问题与ODBC连接有关,那么您可能需要尝试以下设置:

    1. 标志1:返回匹配的行而不是受影响的行;允许大结果集;使用压缩;将BIGINT列视为INT列。

    2. 标志2:连接时不要提示。

    3. 标志3:在SQLDescribeCol()中包含表名;禁用事务支持。 调试:将查询记录到myodbc.sql。

    4. SSL设置:如果尚未结束,请将其留空 SSL

    5. 单击“测试”应返回“连接成功”。如果这样可行,那么你应该能够让Toad for MySQL使用它。

      如果您使用链接服务器路由,请确保ODBC名称与定义的数据源完全匹配。我相信我们发现这是区分大小写的,但我不再完全确定了。