暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【干货攻略】达梦数据库到SQL Server的DBLINK创建

达梦E学 2021-08-19
3998

-----正文-----




本文介绍如何搭建达梦数据库到SQL Server的DBLINK。本次搭建的DBLINK为Linux端达梦数据库访问Win端的SQL Server数据库,通过配置ODBC连接SQL Server数据库,DM创建ODBC的DBLINK连接,来实现DM和SQL Server的DBLINK。以下为具体的操作步骤。


DBLINK(Database LINK)顾名思义就是数据库的链接,就像电话线一样,是一个通道。当我们要跨本地数据库,访问另外一个数据表中的数据时,本地数据库就必须要创建远程数据库的DBLINK。通过DBLINK,本地数据库可以像访问自己本身存储的表的数据一样,访问远程数据库表中的数据。


本章内容已在如下环境上测试:

①DM数据库环境概述:

操作系统:Centos 7.4.1708

数据库版本: 8.1-2-2-21

数据库模式:单实例

IP地址:192.168.6.63

 

SQL Server环境概述:

操作系统:Windows 10企业版

数据库版本:10.50.1600

IP地址:192.168.6.41

 

③DBLINK所使用的安装包概述:

unixODBC-2.3.0.tar.gz

freetds-1.2.21.tar.gz

 

备注:DM数据库和SQL Server数据库已安装完毕,Dblink所需的相关安装包已上传至DM数据库所在主机完成。


✦ 一、解压和编译ODBC和Freetds ✦ 

解压安装包,解压命令如下,解压过程省略

    [root@centos7 tmp]# cd tmp
    [root@centos7 tmp]# tar -zxvf unixODBC-2.3.0.tar.gz
    [root@centos7 tmp]# tar -zxvf freetds-1.2.21.tar.gz

    编译解压的安装包,编译命令如下,编译过程省略

      [root@centos7 tmp]# cd unixODBC-2.3.0/
      [root@centos7 unixODBC-2.3.0]# ./configure
      [root@centos7 unixODBC-2.3.0]# make && make install
      [root@centos7 unixODBC-2.3.0]# cd ..
      [root@centos7 tmp]# cd freetds-1.2.21/
      [root@centos7 freetds-1.2.21]# ./configure
      [root@centos7 freetds-1.2.21]# make && make install


      ✦ 二、测试连接 ✦ 

      Win10防火墙已关闭,两主机之间网络端口开放,数据库SQL Server已启动,如图:


      DM数据库所在Linux主机进行测试连接;

      查看安装版本具体信息:

        /usr/local/bin/tsql -C

        连接数据库:

          /usr/local/bin/tsql -H 192.168.6.41 -p 1433 -U sa -P 123456789 -D master

          -H:IP地址

          -p:数据库端口

          -U:用户名

          -P:密码

          -D:系统数据库名

          -S:在freetds.conf中指定要连接的服务器条目

          查看版本信息:

            [root@centos7 ~]# usr/local/bin/tsql -C
            Compile-time settings (established with the "configure" script)
            Version: freetds v1.2.21
            freetds.conf directory: usr/local/etc
            MS db-lib source compatibility: no
            Sybase binary compatibility: no
            Thread safety: yes
            iconv library: yes
            TDS version: auto
            iODBC: no
            unixodbc: yes
            SSPI "trusted" logins: no
            Kerberos: no
            OpenSSL: no
            GnuTLS: no
            MARS: yes

            ④ 测试连接,配置正确信息,测试连接成功如下显示:

              [root@centos7 ~]# usr/local/bin/tsql -H 192.168.6.41 -p 1433 -U sa -P 123456789  -D master
              locale is "zh_CN.UTF-8"
              locale charset is "UTF-8"
              using default charset "UTF-8"
              Setting master as default database in login packet


              ✦ 三、编写配置文件 ✦ 

              Freetds驱动编写

              freetds.conf内容如下:

                [root@centos7 ~]# vi usr/local/etc/freetds.conf
                [mssqlserver]
                host = 192.168.6.41
                port = 1433
                tds version = 7.3
                client charset = UTF-8

                测试通过服务器条目进行连接,测试连接成功:

                  [root@centos7 ~]# usr/local/bin/tsql -S mssqlserver   -U sa -P 123456789
                  locale is "zh_CN.UTF-8"
                  locale charset is "UTF-8"
                  using default charset "UTF-8"
                  1>

                  ODBC驱动编写

                  odbcinst.ini内容如下:

                    [root@centos7 ~]# vi usr/local/etc/odbcinst.ini
                    [FreeTDS] # unixodbc驱动名称
                    Description=ODBC of FreeTDS for MS SQL 2008 # 简介
                    Driver=/usr/local/lib/libtdsodbc.so # 驱动所在位置 

                    odbc.ini内容如下:

                      [root@centos7 ~]# vi usr/local/etc/odbc.ini
                      [ODBC Data Sources]
                      TEST2dsn= My First Test DSN

                      [TEST2dsn]
                      Driver = /usr/local/lib/libtdsodbc.so
                      Description = My Second Test DSN
                      Trace = No
                      Server = 192.168.6.41
                      Database = master
                      Port = 1433
                      TDS_Version = 7.3


                      ✦ 四、ODBC连接SQL Server数据库  

                      ①root用户测试连接,指定连接名,具体的用户名/密码 

                        [root@centos7 ~]# isql -v TEST2dsn sa 123456789
                        +---------------------------------------+
                        | Connected! |
                        | |
                        | sql-statement |
                        | help [tablename] |
                        | quit |
                        | |
                        +---------------------------------------+
                        SQL>


                        ②dmdba用户测试,指定连接名,具体的用户名/密码;

                          [dmdba@centos7 ~]$ isql -v TEST2dsn sa 123456789
                          +---------------------------------------+
                          | Connected! |
                          | |
                          | sql-statement |
                          | help [tablename] |
                          | quit |
                          | |
                          +---------------------------------------+
                          SQL>



                          ✦ 五、SQL Server创建测试表  

                          测试表SQL如下:

                          创建表格,并插入测试数据

                            CREATE TABLE authors
                            (
                            au_id CHAR(3) NOT NULL,
                            au_fname VARCHAR(15) NOT NULL,
                            au_lname VARCHAR(15) NOT NULL,
                            phone VARCHAR(12) ,
                            address VARCHAR(20) ,
                            city VARCHAR(15) ,
                            state CHAR(2) ,
                            zip CHAR(5) ,
                            CONSTRAINT pk_authors PRIMARY KEY (au_id)
                            );

                            INSERT INTO authors VALUES('A01','Sarah','Buchman','718-496-7223','75 West 205 St','Bronx','NY','10468');
                            INSERT INTO authors VALUES('A02','Wendy','Heydemark','303-986-7020','2922 Baseline Rd','Boulder','CO','80303');
                            INSERT INTO authors VALUES('A03','Hallie','Hull','415-549-4278','3800 Waldo Ave, #14F','San Francisco','CA','94123');
                            INSERT INTO authors VALUES('A04','Klee','Hull','415-549-4278','3800 Waldo Ave, #14F','San Francisco','CA','94123');
                            INSERT INTO authors VALUES('A05','Christian','Kells','212-771-4680','114 Horatio St','New York','NY','10014');
                            INSERT INTO authors VALUES('A06','','Kellsey','650-836-7128','390 Serra Mall','Palo Alto','CA','94305');
                            INSERT INTO authors VALUES('A07','Paddy','O''Furniture','941-925-0752','1442 Main St','Sarasota','FL','34236');

                            数据库查询内容如下:


                            ✦ 六、达梦数据库创建DBLINK  

                            连接数据库,通过ODBC方式,创建DBLINK数据库。

                              [dmdba@centos7 bin]$ ./disql SYSDBA/DM01SYSDBA:5236

                              服务器[LOCALHOST:5236]:处于普通打开状态
                              登录使用时间 : 2.808(ms)
                              disql V8
                              SQL> create link "SYSDBA"."TEST" connect 'ODBC' with "sa" identified by "123456789" using 'TEST2dsn';
                              操作已执行
                              已用时间: 52.437(毫秒). 执行号:300.
                              SQL>

                              ✦ 七、拷贝驱动  

                              将驱动拷贝至达梦的bin目录 

                                [dmdba@centos7 bin]$ cp -r /usr/local/lib/*  /dm8/dmdbms/bin


                                ✦ 八、查询测试  

                                连接数据库,DM数据库通过ODBC的DBLINK查询SQL Server的AUTHORS表内容。

                                  [dmdba@centos7 bin]$ ./disql SYSDBA/DM01SYSDBA:5236

                                  服务器[LOCALHOST:5236]:处于普通打开状态
                                  登录使用时间 : 0.954(ms)
                                  disql V8
                                  SQL> select * from AUTHORS@TEST;

                                  行号 au_id au_fname au_lname phone address city state zip
                                  ----- ----- --------- ----------- ------------ -------------------- ------------- ----- -----
                                  1 A01 Sarah Buchman 18-496-7223 75 West 205 St Bronx NY 10468
                                  2 A02 Wendy Heydemark 303-986-7020 2922 Baseline Rd Boulder CO 80303
                                  3 A03 Hallie Hull 415-549-4278 3800 Waldo Ave, #14F San Francisco CA 94123
                                  4 A04 Klee Hull 415-549-4278 3800 Waldo Ave, #14F San Francisco CA 94123
                                  5 A05 Christian Kells 212-771-4680 114 Horatio St New York NY 10014
                                  6 A06 Kellsey 650-836-7128 390 Serra Mall Palo Alto CA 94305
                                  7 A07 Paddy O'Furniture 941-925-0752 1442 Main St Sarasota FL 34236

                                  7 rows got

                                  已用时间: 181.113(毫秒). 执行号:300.
                                  SQL>

                                  查询成功,至此达梦数据库访问SQL Server数据库的DBLINK创建成功。


                                  ✦ 九、问题解决  

                                  创建完成DBLINk后,通过DBLINK查询操作报错,加载库文件失败。

                                    [dmdba@centos7 bin]$ ./disql SYSDBA/DM01SYSDBA:5236

                                    服务器[LOCALHOST:5236]:处于普通打开状态
                                    登录使用时间 : 0.979(ms)
                                    disql V8
                                    SQL> select * from AUTHORS@TEST;
                                    select * from AUTHORS@TEST;
                                    1 行附近出现错误[-2245]:DBLINK加载库文件失败.
                                    已用时间: 1.739(毫秒). 执行号:0.
                                    SQL>

                                    解决方式为:7节,ODBC驱动程序的lib目录下的驱动拷贝到达梦的bin目录下,无需重启数据库实例,拷贝完成后可进行正常查询。


                                    >>> THE END <<<

                                    好,以上是本期干货分享内容,希望能给大家带来帮助。



                                     
                                     


                                    相关推荐

                                    干货 | 从Oracle迁移空间数据至DM的方法

                                    干货 | Oracle通过ODBC创建DBLINK连接DM

                                    干货使用ODBC创建DBLINK实现DM数据库间的跨平台访问

                                    动态IT打工人!今天我们的身份终于被“官方正名”啦!


                                    内容丨赵岩
                                    编辑丨hh
                                    审核林夕
                                    文章转载自达梦E学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                    评论