• 不同数据库之间的相互链接


    MSSQL链接MYSQL数据库方法

    前提条件(系统安装MYODBC,这个可以到MYSQL官网上去下载)

    1.使用TSQL建立(建立成功不代表可以查询)
    直接使用连接字符串
    EXEC master.dbo.sp_addlinkedserver @server = N'MYSQL1', @srvproduct=N'MySQL', @provider=N'MSDASQL', @provstr=N'DRIVER={MySQL ODBC 3.51 Driver}; SERVER=127.0.0.1; DATABASE=test; USER=root; PASSWORD=root; OPTION=3'
    EXEC master.dbo.sp_addlinkedserver @server = N'MYSQL2', @srvproduct=N'MySQL', @provider=N'MSDASQL', @provstr=N'DRIVER={MySQL ODBC 5.3 UNICODE Driver}; SERVER=127.0.0.1; DATABASE=test; USER=root; PASSWORD=root; OPTION=3'
    其中 MySQL ODBC 3.51 Driver MySQL ODBC 5.3 UNICODE Driver ,这个需要到“管理”--“ODBC”中查看具体机器上装的MYODBC的版本

    在ODBC数据源管理器中--系统DNS建立一个MYSQL的连接
    EXEC master.dbo.sp_addlinkedserver @server = N'MYSQL3', @srvproduct=N'MySQL', @provider=N'MSDASQL', @datasrc=N'odbc2mysql3', @catalog=N'test'

    2.在MSSQL管理器UI中建立
    注意(数据源和连接字符串只能用一个,两者是冲突的,这个要特别注意)


    链接完成后,对数据的操作方式(现在MYSQL不支持four-part names)

    网络上说MYODBC不支持
    sql链接服务器链接mysql http://bbs.csdn.net/topics/380106204
    OLE DB Providers Tested with SQL Server http://msdn.microsoft.com/en-us/library/ms187072.aspx

    -- 把SQL SERVER里的TT表的记录插入到MYSQL的T1表里,这这里也可以插入具体值。
    INSERT OPENQUERY(MySQLTest,'select * from t1') select * from TT;
    INSERT OPENQUERY(MySQLTest,'select * from t1') values (99,99,99);

    -- 对T1表进行UPDATE操作
    UPDATE OPENQUERY(MySQLTest,'select value from t1') set value=value +100;

    -- 对T1表进行DELETE 操作,不明白为什么一次只能删除一条,
    DELETE OPENQUERY (MySQLTest, 'SELECT * FROM t1 WHERE hour = 99');
    DELETE OPENQUERY (MySQLTest, 'SELECT * FROM t1 ');

    -- DELETE OPENQUERY (MySQLTest, 'SELECT * FROM t1 WHERE hour > 2'); --这样是不行的,报错
    /*
    链接服务器"MySQLTest"的 OLE DB 访问接口 "MSDASQL" 返回了消息 "键列信息不足或不正确。更新影响到多行。"。
    消息 7345,级别 16,状态 1,第 1 行
    链接服务器 "MySQLTest" 的 OLE DB 访问接口 "MSDASQL" 无法从表 "SELECT * FROM t1 WHERE hour > 2" 删除数据。更新操作不满足架构要求。
    */
    -- 对T1表进行查询操作
    select * from openquery(MySQLTest,'select * from t1');

    -- 把MYSQL的T1表的记录写回到MSSQL

    insert into TT select * from openquery(MySQLTest,'select * from t1');

    http://www.jb51.net/article/30903.htm

    MSSQL连接ORACLE

    在MSSQL中,导出导入 Oracle数据库的时候

    1.Microsoft OLE DB Provider for Oracle     可以使用    TNS 或   IP/服务名  或 机器名/服务名

    2.Oracle Provider for OLE DB           可以使用    TNS 或   IP/服务名  或 机器名/服务名

    这里的   TNS    (必须是和MSSQL32或64位对应的的ODAC相关版本 NetworkAdmin nsnames.ora 中定义的)

    如果连接的时候提示    error while trying to retrieve text for error ora-01019     可能是

    安装的Oracle Client连接库是否和原来在系统里的库有冲突. 有时会出现, 之前安装了其他数据库服务器, 有相同的库, 但是是老版本, 所以要在使用Oracle之前, 把环境变量设置好,增加ORACLE_HOME这个环境变量,指向ORACLE的安装目录.你可能装过几次ORACLE 客户端  http://bbs.csdn.net/topics/390677745

    这个时候必须设置环境变量  ORACLE_HOME ,如果是64位的,则这样设置后则VS中服务资源管理器就不能连Oracle了。

    还好这种情况不常出现,出现的时候变通处理一下,毕竟MSSQL导入导出用的比较少。

    不能连接可能问题:

    i.如果同时安装了32位和64位的oracle client,则必须在path环境变量中将32的路径写在前面

    ii.如果只安装ORACLE数据库和MSSQL数据库安装在同一台服务器上,可以不安装oracle client。

      打开注册表-->HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL ServerMSSQL????????????Providers

      新建 OraOLEDB.Oracle 项,并在此项下面建立名AllowInProcess,类型为DWORD Value,值为00000001,保存后立即生效

  • 相关阅读:
    重温spark基本原理
    hive拉链表以及退链例子笔记
    org.apache.hadoop.hive.ql.exec.DDLTask. MetaException错误问题
    skywalking部署
    【机器学习实战】第5章 Logistic回归
    【机器学习实战】第4章 基于概率论的分类方法:朴素贝叶斯
    【机器学习实战】第3章 决策树
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
    Apache Spark 2.2.0 中文文档
  • 原文地址:https://www.cnblogs.com/gameshan/p/5027058.html
Copyright © 2020-2023  润新知