外部链接DBLINK

  • 达梦の外部链接(dblink)
    • 1.1 概述
    • 1.2 语法讲解
    • 1.3 案例演示
      • 1.3.1 同构数据库:DM -> DM之间LINK
      • 1.3.2 异构数据库: DM -> Oracle之间的LINK
        • 方法一:odbc驱动连接
        • 方法二:oracle客户端oci接口
      • 1.3.3 异构数据库:Oracle -> DM之间的DBLINK

DM技术交流QQ群:940124259

达梦の外部链接(dblink)

1.1 概述

外部链接对象(LINK)是达梦中一种’特殊’的数据库实体对象,记录着远程数据库的连接和路径信息,用于建立与远程数据的连接。
如果多台数据库主库间要相互通讯,透明地操作远程数据库中的数据,就应用程序角度视作在一个大型数据库当中。
用户远程请求数据库的数据,都会被自动转换为网络请求,并在相应节点上实现相应的操作。
建立一个数据库链接(实质是指定一个对远程数据库的访问路径)。
外部链接可以是公用的"数据库中所有用户使用",也可以是私有的"只能被某个用户使用"
用户可以通过外部链接对远程数据库的表进行查询和增删改操作,以及本地调用远程的存储过程。

外部链接限制:

  1. DM-DM的同构外部链接不支持MPP环境,DM与异构数据库的外部链接支持MPP环境;
  2. 增删改不支持INTO语句;
  3. 不支持使用游标进行增删改操作;
  4. 不支持操作远程表的复合类型列;
  5. DBLINK 理论上不支持 LOB 类型列的操作,但支持简单的增删改语句中使用常量来对 LOB 类型列进行操作。

DM 连接异构数据库的外部链接,如下使用限制:

  1. 数据类型以DM为基础,不支持DM没有的数据类型;
  2. 语法以DM的语法为标准,不支持DM不兼容的语法;
  3. 主键更新,如果是涉及到多个服务器的语句,不能保证更新操作一定成功;
  4. 例如使用CREATE VIEW view_name(view_col_name) AS SELECT ITEM FROM T@LINK 方式来创建查询远程对象的本地视图,对于异构库,不能保证操作一定成功。
    对于查询异构库远程对象的本地视图,最好采用 CREATE VIEW AS SELECT ITEM AS alias_name FROM T@LINK方式创建。

删除外部链接:

DROP [PUBLIC] LINK [<模式名>.]<外部链接名>;

查询外部链接视图:

  v$dblinkdba_db_links

1.2 语法讲解

CREATE [OR REPLACE] [PUBLIC] LINK <外部链接名> CONNECT ['<连接库类型>'] WITH <登录用户名> IDENTIFIED BY <登录口令> USING '<外部连接串>';

连接库类型: <DAMENG | ORACLE | ODBC>
外部链接串:
[连接类型;] <达梦外部链接串 | Oracle外部链接串> | odbc外部链接串>
连接类型:
[PRIMARY FIRST | STANDBY FIRST | PRIMARY ONLY |
STANDBY ONLY ;] 服务器列表: <服务器地址1 [, 服务器地址2 [, …]]>
服务器地址:> <mal_host/mal_port | mal_inst_host/mal_inst_port > mal_inst_name>
Oracle外部链接串:<TNSNAME配置 | DESCRIPTION描述符 | IP地址/服务名>
odbc外部链接串: <ODBC 数据源 DSN>




使用说明:

1. 创建达梦数据的外部链接须先配置dmmal.ini文件,dm.ini打开MAL_INI=1。
2. 达梦数据库的外部链接中提及的连接串有两种使用形式:远程数据库的实例名和IP地址/端口号。
3. 创建到Oracle数据库的外部链接,可以使用TNSNAME本地别名或连接描述字符串(description或ip地址/服务名)。
4. 创建到Oracle数据库的外部链接,需在发起请求连接的一端安装ORACLE OCI接口,并且保证OCI接口与达梦版本在32/64位一致。
5. 只支持普通用户,不支持SSL和Kerberos认证。
6. 达梦不支持连接自身实例的外部链接(LINK)。
7. 通过LINK对远程服务器所作的修改,由用户在本地服务器通过commit提交或rollback回滚。
8. 只有在具有DBA和Create LINK权限的用户才能创建外部链接。
9. 当DBLINK外部链接到多机系统(服务器地址列表),若正在所连接的服务器发生宕机等意外情况导致无法对外提供服务时,DBLINK会根据之前设定连接类型,在剩余的服务器列表中挑选舒适的服务器进行连接。
10.支持在CREATE SCHEMA子句中CREATE LINK,但是不支持CREATE PUBLIC LINK。

1.3 案例演示

1.3.1 同构数据库:DM -> DM之间LINK

# 本机有两个达梦数据库实例5236/5238
#### 步骤1. 打通MAL通信链路:本地端/远程端:配置mal本地实例和远程实例,配置内容项须保持一致
### dmmal.ini
## 注意:源库与目标库的MAL配置项要一致
MAL_LOGIN_TIMEOUT = 10   #MPP/DBLINK等实例之间登录超时的检测间隔时间。
[MAL_INST1]
MAL_INST_NAME = DEM
MAL_HOST      = 192.168.0.120
MAL_PORT      = 15238
MAL_INST_HOST = 192.168.0.120
MAL_INST_PORT = 5238#### 步骤2. 本地端/远程端: dm.ini 打开MAL通信子系统
#配置项
MAL_INI = 1
# 函数执行修改
SQL> SF_SET_SYSTEM_PARA_VALUE('MAL_INI',1,0,2);
# 由于MAL_INI属于静态参数需重启数据库生效。
SQL> select SF_GET_PARA_VALUE(1,'MAL_INI'),SF_GET_PARA_VALUE(2,'MAL_INI');
行号     SF_GET_PARA_VALUE(1,'MAL_INI') SF_GET_PARA_VALUE(2,'MAL_INI')
---------- ------------------------------ ------------------------------
1          1(文件值)                              1 (内存值)
已用时间: 12.165(毫秒). 执行号:232.SQL> select * from v$parameter where name like 'MAL_INI';
SQL> select * from v$dm_mal_ini;行号     MAL_NAME  MAL_INST_NAME MAL_HOST      MAL_PORT    MAL_INST_HOST MAL_INST_PORT MAL_DW_PORT MAL_LINK_MAGIC MAL_INST_DW_PORT
---------- --------- ------------- ------------- ----------- ------------- ------------- ----------- -------------- ----------------
1          MAL_INST1 DEM           192.168.0.120 15238       192.168.0.120 5238          0           0              0
2          MAL_INST2 DCA           192.168.0.120 15236       192.168.0.120 5236          0           0              0#### 步骤3. 确认MAL子系统通信端口已开启
[dmdba@dca01 ~]$ ss -lnp |grep dmserver
tcp    LISTEN     0      128    192.168.0.120:15238                 *:*                   users:(("dmserver",pid=18613,fd=7))
tcp    LISTEN     0      128    192.168.0.120:15236                 *:*                   users:(("dmserver",pid=18311,fd=7))
tcp    LISTEN     0      128    [::]:5236               [::]:*                   users:(("dmserver",pid=18311,fd=4))
tcp    LISTEN     0      128    [::]:5238               [::]:*                   users:(("dmserver",pid=18613,fd=4))#### 步骤4. 创建外部链接link
## 连接串形式1:mal_inst_host/mal_inst_port
SQL> CREATE LINK demlink CONNECT 'DAMENG' WITH "SYSDBA" IDENTIFIED BY "SYSDBA" USING '192.168.0.120/5238';# 查看当前数据库已经存在的dblink
SQL> select * from dba_db_links;
行号     OWNER  DB_LINK USERNAME HOST
---------- ------ ------- -------- ------------------CREATED                                                                                             ----------------------------------------------------------------
1          SYSDBA DEMLINK SYSDBA   192.168.0.120/52382021-04-08 22:46:02.650610
已用时间: 4.427(毫秒). 执行号:211.# 尝试访问远端数据库DEM 模式SYSDBA下T1表
SQL> select * from t1@demlink;
行号     A
---------- -----------
1          1
2          2
3          3
4          4
5          5
已用时间: 21.952(毫秒). 执行号:213.# 远程访问数据库后,缓存dblink链接信息
SQL> select * from v$dblink;
行号     LINK_CONN            LINK_ID     LINK_NAME SCH_ID      OWNER_ID    IS_PUBLIC LOGIN_NAME HOST_NAME     PORT_NUM    LOGGED_ON
---------- -------------------- ----------- --------- ----------- ----------- --------- ---------- ------------- ----------- ---------HETEROGENEOUS PROTOCOL IN_USE------------- -------- ------
1          111381824            201326595   DEMLINK   150994945   50331649    NO        SYSDBA     192.168.0.120 5238        YESYES           TCP/IP   YES
已用时间: 1.473(毫秒). 执行号:214.
SQL> ## 连接串形式2:实例名instance_name->mal_inst_name
SQL> CREATE LINK demlink2 CONNECT 'DAMENG' WITH "SYSDBA" IDENTIFIED BY "SYSDBA" USING 'DEM';
操作已执行
已用时间: 10.784(毫秒). 执行号:215.
SQL> select * from t1@demlink2;
行号     A
---------- -----------
1          1
2          2
3          3
4          4
5          5已用时间: 32.419(毫秒). 执行号:216.
SQL> ## 连接串形式3:mal_host/mal_port
SQL> CREATE LINK demlink3 CONNECT 'DAMENG' WITH "SYSDBA" IDENTIFIED BY "SYSDBA" USING '192.168.0.120/15238';
操作已执行
已用时间: 17.793(毫秒). 执行号:217.
SQL> select * from t1@demlink3;
行号     A
---------- -----------
1          1
2          2
3          3
4          4
5          5已用时间: 16.746(毫秒). 执行号:218.
SQL> #### 步骤5. 建议使用同义词(隐藏细节:可选)
SQL> CREATE SYNONYM dem_t1 FOR t1@demlink3;# 查询含dblink的同义词
SQL> SELECT * FROM DBA_SYNONYMS WHERE DB_LINK='DEMLINK3';
行号     OWNER  SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK
---------- ------ ------------ ----------- ---------- --------
1          SYSDBA DEM_T1                   T1         DEMLINK3已用时间: 8.655(毫秒). 执行号:223.
SQL> select * from DEM_T1;
行号     A
---------- -----------
1          1
2          2
3          3
4          4
5          5已用时间: 11.394(毫秒). 执行号:224.///////////////////////////////////////////////////////////
### 验证在本地数据库内部创建自身的link  ###
SQL> drop table cqsoft;
操作已执行
已用时间: 60.191(毫秒). 执行号:227.
SQL> create table cqsoft (id int);
操作已执行
已用时间: 10.302(毫秒). 执行号:228.
SQL> insert into cqsoft values(1),(2),(3),(4);
影响行数 4
已用时间: 5.788(毫秒). 执行号:229.
SQL> commit;
操作已执行
已用时间: 5.671(毫秒). 执行号:230.
SQL> select * from cqsoft;
行号     ID
---------- -----------
1          1
2          2
3          3
4          4
已用时间: 6.054(毫秒). 执行号:231.SQL> create link testlink connect 'DAMENG' with "SYSDBA" identified by "SYSDBA" using '192.168.0.120/5236';
create link testlink connect 'DAMENG' with "SYSDBA" identified by "SYSDBA" using '192.168.0.120/5236';
第1 行附近出现错误[-2235]:不支持DBLINK连接自身实例.
已用时间: 0.657(毫秒). 执行号:0.
SQL>

1.3.2 异构数据库: DM -> Oracle之间的LINK

方法一:odbc驱动连接

##安装和配置odbc(略) 参考我其他博客
#### 步骤1:达梦本地端安装odbc客户端连接工具
安装过程参考链接:  (略)
[dmdba@dca01 ~]$ odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /dm8/dmdba/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
[dmdba@dca01 ~]$ #### 步骤2:达梦本地端安装odbc驱动
[root@dca01 ~]# unzip instantclient-odbc-linuxx64.zip
[root@dca01 instantclient_21_1]# ls -l
总用量 1084
drwxr-xr-x. 4 root root      26 10月 31 17:34 help
-rwxr-xr-x. 1 root root 1082576 10月 31 17:34 libsqora.so.21.1
-rw-r--r--. 1 root root    5780 10月 31 17:34 ODBC_LICENSE
-rw-r--r--. 1 root root    7648 10月 31 17:34 ODBC_README
-rwxr-xr-x. 1 root root    5011 10月 31 17:34 odbc_update_ini.sh# 拷贝libsqora.so.21.1到达梦安装主目录bin下
[root@dca01 instantclient_21_1]# cp -v libsqora.so.21.1 /dm8/dmdba/dmdbms/bin
"libsqora.so.21.1" -> "/dm8/dmdba/dmdbms/bin/libsqora.so.21.1"
[root@dca01 instantclient_21_1]# chown -v dmdba:dinstall /dm8/dmdba/dmdbms/bin/libsqora.so.21.1
changed ownership of "/dm8/dmdba/dmdbms/bin/libsqora.so.21.1" from root:root to dmdba:dinstall
[root@dca01 instantclient_21_1]# #### 步骤3:达梦本地端配置Oracle odbc驱动加载
# 配置驱动加载位置
[root@dca01 ~]# vim /etc/odbcinst.ini
[Oracle ODBC Driver]
Description=ODBC driver for Oracle
Driver=/dm8/dmdba/dmdbms/bin/libsqora.so.21.1[dmdba@dca01 ~]$ isql ora -v
[01000][unixODBC][Driver Manager]Can't open lib '/dm8/dmdba/dmdbms/bin/libsqora.so.21.1' : file not found
[ISQL]ERROR: Could not SQLConnect
[dmdba@dca01 ~]$ ldd /dm8/dmdba/dmdbms/bin/libsqora.so.21.1linux-vdso.so.1 =>  (0x00007ffe4b6bd000)libdl.so.2 => /lib64/libdl.so.2 (0x00007fa1e2323000)libm.so.6 => /lib64/libm.so.6 (0x00007fa1e2021000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa1e1e05000)librt.so.1 => /lib64/librt.so.1 (0x00007fa1e1bfd000)libaio.so.1 => /lib64/libaio.so.1 (0x00007fa1e19fb000)libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fa1e17e1000)libclntsh.so.21.1 => not found     ****** 缺什么补什么libclntshcore.so.21.1 => not found  ****** 缺什么补什么libodbcinst.so.2 => /lib64/libodbcinst.so.2 (0x00007fa1e15cf000)libc.so.6 => /lib64/libc.so.6 (0x00007fa1e1201000)/lib64/ld-linux-x86-64.so.2 (0x00007fa1e27e2000)libltdl.so.7 => /lib64/libltdl.so.7 (0x00007fa1e0ff7000)
[dmdba@dca01 ~]$ # 申明:以上思路是对的,但驱动太新,后改用Oracle 11.2.0.4服务器版本安装目录$ORACLE_HOME/lib/libsqora.so.11.1
# 处理过程如下:
[root@dca01 bin]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dm8/dmdba/dmdbms/bin:/usr/local/unixODBC/lib
[root@dca01 bin]# isql ora -v
[01000][unixODBC][Driver Manager]Can't open lib '/dm8/dmdba/dmdbms/bin/libsqora.so.11.1' : file not found
[ISQL]ERROR: Could not SQLConnect
[root@dca01 bin]# ldd /dm8/dmdba/dmdbms/bin/libsqora.so.11.1
ldd: 警告: 你没有执行权限  `/dm8/dmdba/dmdbms/bin/libsqora.so.11.1'linux-vdso.so.1 =>  (0x00007fff4d7f0000)libdl.so.2 => /lib64/libdl.so.2 (0x00007fe932d48000)libm.so.6 => /lib64/libm.so.6 (0x00007fe932a46000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe93282a000)libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fe932610000)libclntsh.so.11.1 (0x00007fe92fca1000)libodbcinst.so.1 => not found   -- 缺什么补什么libc.so.6 => /lib64/libc.so.6 (0x00007fe92f8d3000)/lib64/ld-linux-x86-64.so.2 (0x00007fe932f4c000)libnnz11.so (0x00007fe92f506000)libaio.so.1 => /lib64/libaio.so.1 (0x00007fe92f304000)
[root@dca01 bin]# find / -name libodbcinst.so*
/usr/lib64/libodbcinst.so
/usr/lib64/libodbcinst.so.2
/usr/lib64/libodbcinst.so.2.0.0
/usr/local/unixODBC/lib/libodbcinst.so.2.0.0
/usr/local/unixODBC/lib/libodbcinst.so.2
/usr/local/unixODBC/lib/libodbcinst.so
# 符号链接文件
[root@dca01 bin]# ln -sfv /usr/lib64/libodbcinst.so /usr/lib64/libodbcinst.so.1
"/usr/lib64/libodbcinst.so.1" -> "/usr/lib64/libodbcinst.so"[root@dca01 bin]# ldd /dm8/dmdba/dmdbms/bin/libsqora.so.11.1
ldd: 警告: 你没有执行权限  `/dm8/dmdba/dmdbms/bin/libsqora.so.11.1'linux-vdso.so.1 =>  (0x00007fff431e4000)libdl.so.2 => /lib64/libdl.so.2 (0x00007f61d28cf000)libm.so.6 => /lib64/libm.so.6 (0x00007f61d25cd000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f61d23b1000)libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f61d2197000)libclntsh.so.11.1 (0x00007f61cf828000)libodbcinst.so.1 => /lib64/libodbcinst.so.1 (0x00007f61cf616000)libc.so.6 => /lib64/libc.so.6 (0x00007f61cf248000)/lib64/ld-linux-x86-64.so.2 (0x00007f61d2ad3000)libnnz11.so (0x00007f61cee7b000)libaio.so.1 => /lib64/libaio.so.1 (0x00007f61cec79000)libltdl.so.7 => /lib64/libltdl.so.7 (0x00007f61cea6f000)# 配置DSN
[root@dca01 bin]# vim /etc/odbc.ini
[ora]
Description=Oracle ODBC DSN
Driver=Oracle ODBC Driver
Database=erpdb
ServerName=192.168.0.207:1521/erpdb
USER_ID=SCOTT
Password=scott
Port=1521# 测试odbc连接
[dmdba@dca01 ~]$ isql ora scott scott
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select * from v$version;
+---------------------------------------------------------------------------------+
| BANNER                                                                          |
+---------------------------------------------------------------------------------+
| Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production    |
| PL/SQL Release 11.2.0.4.0 - Production                                          |
| CORE  11.2.0.4.0      Production                                                      |
| TNS for Linux: Version 11.2.0.4.0 - Production                                  |
| NLSRTL Version 11.2.0.4.0 - Production                                          |
+---------------------------------------------------------------------------------+
SQLRowCount returns -1
5 rows fetched#### 步骤4:创建dblink
# 连接串:DSN源名
SQL>  CREATE OR REPLACE LINK odbc1 CONNECT 'ODBC' WITH SCOTT IDENTIFIED BY "scott" USING 'ora';
SQL> select * from emp@ODBC1;
EMPNO   ENAME   JOB MGR HIREDATE    SAL COMM    DEPTNO
7369    SMITH   CLERK   7902    1980-12-17 00:00:00 800.00  NULL    20
7499    ALLEN   SALESMAN    7698    1981-02-20 00:00:00 1600.00 300.00  30
7521    WARD    SALESMAN    7698    1981-02-22 00:00:00 1250.00 500.00  30
7566    JONES   MANAGER 7839    1981-04-02 00:00:00 2975.00 NULL    20
7654    MARTIN  SALESMAN    7698    1981-09-28 00:00:00 1250.00 1400.00 30
7698    BLAKE   MANAGER 7839    1981-05-01 00:00:00 2850.00 NULL    30
7782    CLARK   MANAGER 7839    1981-06-09 00:00:00 2450.00 NULL    10
7788    SCOTT   ANALYST 7566    1987-04-19 00:00:00 3000.00 NULL    20
7839    KING    PRESIDENT   NULL    1981-11-17 00:00:00 5000.00 NULL    10
7844    TURNER  SALESMAN    7698    1981-09-08 00:00:00 1500.00 0   30
7876    ADAMS   CLERK   7788    1987-05-23 00:00:00 1100.00 NULL    20
7900    JAMES   CLERK   7698    1981-12-03 00:00:00 950.00  NULL    30
7902    FORD    ANALYST 7566    1981-12-03 00:00:00 3000.00 NULL    20
7934    MILLER  CLERK   7782    1982-01-23 00:00:00 1300.00 NULL    10SQL> select * from v$dblink;
行号     LINK_CONN            LINK_ID     LINK_NAME SCH_ID      OWNER_ID    IS_PUBLIC LOGIN_NAME HOST_NAME PORT_NUM    LOGGED_ON
---------- -------------------- ----------- --------- ----------- ----------- --------- ---------- --------- ----------- ---------HETEROGENEOUS PROTOCOL IN_USE------------- -------- ------
1          117787968            201326603   ODBC1     150994945   50331649    NO        SCOTT      ora       NULL        YESYES           TCP/IP   YES已用时间: 3.753(毫秒). 执行号:105.
SQL>

方法二:oracle客户端oci接口

#### 步骤1. Oracle官网下载OCI客户端
下载链接:
https://www.oracle.com/database/technologies/instant-client.html
https://www.oracle.com/database/technologies/instant-client/downloads.html



### 步骤1:解压zip包
[root@dca01 ~]# ls
anaconda-ks.cfg  dm6C039119.key                                percent.sh  test2.sh  traffic_mon.sh   模板  文档  桌面
a.sed            initial-setup-ks.cfg                          perl5       test.log  ystemctl status  视频  下载
b.sed            instantclient-basic-linux.x64-11.2.0.4.0.zip  rpmbuild    test.sh   公共             图片  音乐
[root@dca01 ~]# unzip -q instantclient-basic-linux.x64-11.2.0.4.0.zip
[root@dca01 ~]# ls -l
总用量 59340
-rw-------. 1 root root     2200 1月  11 14:17 anaconda-ks.cfg
-rw-r--r--. 1 root root       47 2月  21 09:51 a.sed
-rw-r--r--. 1 root root      433 2月  21 09:53 b.sed
-rw-r--r--. 1 root root      648 9月  23 2020 dm6C039119.key
-rw-r--r--. 1 root root     2231 1月  11 14:25 initial-setup-ks.cfg
drwxr-xr-x. 2 root root      233 4月  12 09:40 instantclient_11_2
-rw-r--r--. 1 root root 60704657 4月  12 09:28 instantclient-basic-linux.x64-11.2.0.4.0.zip
-rw-r--r--. 1 root root      239 2月   1 15:50 percent.sh
drwxr-xr-x. 2 root root        6 1月  11 17:51 perl5
drwxr-xr-x. 7 root root       72 2月  20 12:10 rpmbuild
-rw-r--r--. 1 root root      202 2月   1 12:40 test2.sh
-rw-r--r--. 1 root root     2718 2月   1 15:30 test.log
-rw-r--r--. 1 root root      177 2月   1 15:15 test.sh
-rwxr-xr-x. 1 root root     1451 3月   5 22:06 traffic_mon.sh
-rw-r--r--. 1 root root    16279 2月  20 17:01 ystemctl status
drwxr-xr-x. 2 root root        6 1月  26 09:22 公共
drwxr-xr-x. 2 root root        6 1月  26 09:22 模板
drwxr-xr-x. 2 root root        6 1月  26 09:22 视频
drwxr-xr-x. 2 root root        6 1月  26 09:22 图片
drwxr-xr-x. 2 root root        6 1月  26 09:22 文档
drwxr-xr-x. 2 root root        6 1月  26 09:22 下载
drwxr-xr-x. 2 root root        6 1月  26 09:22 音乐
drwxr-xr-x. 2 root root        6 1月  26 09:22 桌面
[root@dca01 ~]# cd instantclient_11_2/
## 可观察到带so关键字眼的文件
[root@dca01 instantclient_11_2]# ls -l
总用量 183520
-rwxrwxr-x. 1 root root     25420 8月  25 2013 adrci
-rw-rw-r--. 1 root root       439 8月  25 2013 BASIC_README
-rwxrwxr-x. 1 root root     47860 8月  25 2013 genezi
-rwxrwxr-x. 1 root root  53865194 8月  25 2013 libclntsh.so.11.1
-r-xr-xr-x. 1 root root   7996693 8月  25 2013 libnnz11.so
-rwxrwxr-x. 1 root root   1973074 8月  25 2013 libocci.so.11.1
-rwxrwxr-x. 1 root root 118738042 8月  25 2013 libociei.so
-r-xr-xr-x. 1 root root    164942 8月  25 2013 libocijdbc11.so
-r--r--r--. 1 root root   2091135 8月  25 2013 ojdbc5.jar
-r--r--r--. 1 root root   2739616 8月  25 2013 ojdbc6.jar
-rwxrwxr-x. 1 root root    192365 8月  25 2013 uidrvci
-rw-rw-r--. 1 root root     66779 8月  25 2013 xstreams.jar### 步骤2: 拷贝so文件到达梦安装目录bin路径下
[root@dca01 instantclient_11_2]# cp -v *.so* /dm8/dmdba/dmdbms/bin
"libclntsh.so.11.1" -> "/dm8/dmdba/dmdbms/bin/libclntsh.so.11.1"
"libnnz11.so" -> "/dm8/dmdba/dmdbms/bin/libnnz11.so"
"libocci.so.11.1" -> "/dm8/dmdba/dmdbms/bin/libocci.so.11.1"
"libociei.so" -> "/dm8/dmdba/dmdbms/bin/libociei.so"
"libocijdbc11.so" -> "/dm8/dmdba/dmdbms/bin/libocijdbc11.so"
[root@dca01 instantclient_11_2]# chown dmdba:dinstall /dm8/dmdba/dmdbms/bin/*
[root@dca01 instantclient_11_2]# ls -ltr /dm8/dmdba/dmdbms/bin/ | head
总用量 444040
-rwxr-xr-x. 1 dmdba dinstall   3057257 1月  31 20:17 SYSWORD.UTF8.LIB
drwxr-xr-x. 8 dmdba dinstall        93 1月  31 20:17 client_ssl
-rwxr-xr-x. 1 dmdba dinstall   3371068 1月  31 20:17 libcrypto.so
-rwxr-xr-x. 1 dmdba dinstall     38172 1月  31 20:17 libacdct.so
-rwxr-xr-x. 1 dmdba dinstall     91087 1月  31 20:17 libcyt_java.so
-rwxr-xr-x. 1 dmdba dinstall    310687 1月  31 20:17 libdisql_dll.so
-rwxr-xr-x. 1 dmdba dinstall     73084 1月  31 20:17 libdmamon.so
-rwxr-xr-x. 1 dmdba dinstall    191778 1月  31 20:17 libdmasm.so
-rwxr-xr-x. 1 dmdba dinstall     92310 1月  31 20:17 libdmapx.so### 步骤3:建立符号链接
[root@dca01 instantclient_11_2]# ln -sfv libclntsh.so.11.1 libclntsh.so
"libclntsh.so" -> "libclntsh.so.11.1"[root@dca01 bin]# ls -ltr
......
-rw-r--r--. 1 dmdba dinstall   1003582 4月   9 10:15 libsqora.so.11.1
-rwxr-xr-x. 1 dmdba dinstall  53865194 4月  22 20:23 libclntsh.so.11.1
-r-xr-xr-x. 1 dmdba dinstall   7996693 4月  22 20:23 libnnz11.so
-rwxr-xr-x. 1 dmdba dinstall   1973074 4月  22 20:23 libocci.so.11.1
-rwxr-xr-x. 1 dmdba dinstall 118738042 4月  22 20:23 libociei.so
-r-xr-xr-x. 1 dmdba dinstall    164942 4月  22 20:23 libocijdbc11.so
lrwxrwxrwx. 1 root  root            17 4月  22 20:28 libclntsh.so -> libclntsh.so.11.1### 步骤4:重启数据库,重新自动加载so文件
[dmdba@dca01 bin]$ service DmServiceDEM restart### 步骤5:创建外部链接
# 连接串形式1:DESCRIPTION描述符信息
SQL> CREATE OR REPLACE PUBLIC LINK dm2ora CONNECT 'ORACLE' WITH SCOTT IDENTIFIED BY "scott" USING '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.207)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SID=erpdb)))'; # 连接串形式2:IP地址:端口号/服务名
SQL> CREATE OR REPLACE LINK DM2ORA2 CONNECT 'ORACLE' WITH SCOTT IDENTIFIED BY "scott" USING '192.168.0.207:1521/erpdb';    SQL>  select * from dept@DM2ORA; 行号     DEPTNO DNAME      LOC
---------- ------ ---------- --------
1          10     ACCOUNTING NEW YORK
2          20     RESEARCH   DALLAS
3          30     SALES      CHICAGO
4          40     OPERATIONS BOSTON已用时间: 78.746(毫秒). 执行号:504.SQL> select * from v$version@dm2ora;BANNER
---------- ----------------------------------------------------------------------------
1          Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
2          PL/SQL Release 11.2.0.4.0 - Production
3          CORE 11.2.0.4.0 Production
4          TNS for Linux: Version 11.2.0.4.0 - Production
5          NLSRTL Version 11.2.0.4.0 - Production已用时间: 10.801(毫秒). 执行号:505.
SQL>

1.3.3 异构数据库:Oracle -> DM之间的DBLINK

# odbc连接方式
#### 步骤1:oracle本地端安装odbc
[root@erp207 ~]# tar -zxvf unixODBC-2.3.0.tar.gz
[root@erp207 ~]# cd unixODBC-2.3.0
[root@erp207 unixODBC-2.3.0]# ./configure --prefix=/usr/local/unixODBC-2.3.0 --includedir=/usr/include --libdir=/usr/lib --bindir=/usr/bin --sysconfdir=/etc
[root@erp207 unixODBC-2.3.0]# make && make install
参考链接: (略)#### 步骤2:上传达梦odbc驱动链接文件
# ** 注意:最简单方式直接将达梦bin目录拷贝过来 **
## 先在达梦数据库服务器端,查找libdodbc.so所依赖的库
## 切记:最后从适配相应操作系统的达梦版本中拷贝而来。
[root@dca01 bin]# ldd libdodbc.so | awk '/\.\//{print $1}'
libdmdpi.so
libdmfldr.so
libdmelog.so
libdmutl.so
libdmclientlex.so
libdmos.so
libdmcvt.so
libdmstrt.so
libdmmem.so
libdmcalc.so## Oracle数据库端建立专用文件夹存放达梦so文件
[root@erp207 ld.so.conf.d]# mkdir -p /usr/lib64/dm8
[root@erp207 ld.so.conf.d]# echo "/usr/lib64/dm8" >> /etc/ld.so.conf.d/dmdb-x86_64.conf## 达梦数据库端开始依赖so拷贝
#scp 192.168.0.120:/dm8/dmdba/dmdbms/bin/{`ldd /lib64/libdodbc.so | grep 'not found' | awk '{print $1}' | sed ':a;$!N;s/\n/,/;ta'`} /lib64/
[root@dca01 bin]#  scp `ldd libdodbc.so | awk '/\.\//{print $1}' | sed ':a;$!N;s/\n/ /;ta'` libdodbc.so  root@192.168.0.207:/usr/lib64/dm8/
root@192.168.0.207's password:
libdmdpi.so                                                                                         100% 9366KB  38.1MB/s   00:00
libdmfldr.so                                                                                        100% 9160KB  42.5MB/s   00:00
libdmelog.so                                                                                        100%   28KB   9.1MB/s   00:00
libdmutl.so                                                                                         100%   79KB  12.8MB/s   00:00
libdmclientlex.so                                                                                   100%  336KB  29.6MB/s   00:00
libdmos.so                                                                                          100%  198KB  21.9MB/s   00:00
libdmcvt.so                                                                                         100% 4995KB  43.6MB/s   00:00
libdmstrt.so                                                                                        100%   91KB  14.5MB/s   00:00
libdmmem.so                                                                                         100%   56KB   7.1MB/s   00:00
libdmcalc.so                                                                                        100%  482KB  28.2MB/s   00:00
libdodbc.so                                                                                         100%  186KB  18.3MB/s   00:00
[root@dca01 bin]# ## Oracle数据库端手工加载动态链接库
[root@erp207 ~]# ls -l /usr/lib64/dm8
total 25000
-rwxr-xr-x 1 root root  493768 Apr 23 21:27 libdmcalc.so
-rwxr-xr-x 1 root root  344083 Apr 23 21:27 libdmclientlex.so
-rwxr-xr-x 1 root root 5114569 Apr 23 21:27 libdmcvt.so
-rwxr-xr-x 1 root root 9590746 Apr 23 21:27 libdmdpi.so
-rwxr-xr-x 1 root root   28897 Apr 23 21:27 libdmelog.so
-rwxr-xr-x 1 root root 9380242 Apr 23 21:27 libdmfldr.so
-rwxr-xr-x 1 root root   56968 Apr 23 21:27 libdmmem.so
-rwxr-xr-x 1 root root  203240 Apr 23 21:27 libdmos.so
-rwxr-xr-x 1 root root   92922 Apr 23 21:27 libdmstrt.so
-rwxr-xr-x 1 root root   81200 Apr 23 21:27 libdmutl.so
-rwxr-xr-x 1 root root  190045 Apr 23 21:27 libdodbc.so
[root@erp207 ~]#
[root@erp207 ~]# ls -l /usr/lib64/dm8
total 25000
-rwxr-xr-x 1 root root  493768 Apr 23 21:27 libdmcalc.so
-rwxr-xr-x 1 root root  344083 Apr 23 21:27 libdmclientlex.so
-rwxr-xr-x 1 root root 5114569 Apr 23 21:27 libdmcvt.so
-rwxr-xr-x 1 root root 9590746 Apr 23 21:27 libdmdpi.so
-rwxr-xr-x 1 root root   28897 Apr 23 21:27 libdmelog.so
-rwxr-xr-x 1 root root 9380242 Apr 23 21:27 libdmfldr.so
-rwxr-xr-x 1 root root   56968 Apr 23 21:27 libdmmem.so
-rwxr-xr-x 1 root root  203240 Apr 23 21:27 libdmos.so
-rwxr-xr-x 1 root root   92922 Apr 23 21:27 libdmstrt.so
-rwxr-xr-x 1 root root   81200 Apr 23 21:27 libdmutl.so
-rwxr-xr-x 1 root root  190045 Apr 23 21:27 libdodbc.so
[root@erp207 ~]# ldconfig
[root@erp207 ~]# ldd /usr/lib64/dm8/libdodbc.so     linux-vdso.so.1 =>  (0x00007ffda6dd5000)libdmdpi.so => /usr/lib64/dm8/libdmdpi.so (0x00007f46eb1b6000)libdmfldr.so => /usr/lib64/dm8/libdmfldr.so (0x00007f46ea59e000)libdmelog.so => /usr/lib64/dm8/libdmelog.so (0x00007f46ea398000)libdmutl.so => /usr/lib64/dm8/libdmutl.so (0x00007f46ea186000)libdmclientlex.so => /usr/lib64/dm8/libdmclientlex.so (0x00007f46e9f33000)libdmos.so => /usr/lib64/dm8/libdmos.so (0x00007f46e9d07000)libdmcvt.so => /usr/lib64/dm8/libdmcvt.so (0x00007f46e9627000)libdmstrt.so => /usr/lib64/dm8/libdmstrt.so (0x00007f46e9413000)librt.so.1 => /lib64/librt.so.1 (0x00007f46e920b000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f46e8fef000)libdl.so.2 => /lib64/libdl.so.2 (0x00007f46e8deb000)libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f46e8ae4000)libm.so.6 => /lib64/libm.so.6 (0x00007f46e87e2000)libc.so.6 => /lib64/libc.so.6 (0x00007f46e8415000)libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f46e81ff000)libdmmem.so => /usr/lib64/dm8/libdmmem.so (0x00007f46e7ff3000)libdmcalc.so => /usr/lib64/dm8/libdmcalc.so (0x00007f46e7d82000)/lib64/ld-linux-x86-64.so.2 (0x00007f46ec02d000)
[root@erp207 ~]# #### 步骤3:配置odbc
[root@erp207 ~]# cat /etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description     = ODBC for DM8
Driver          = /usr/lib64/dm8/libdodbc.so[root@erp207 ~]# cat /etc/odbc.ini
[DM8]
Driver       = DM8 ODBC DRIVER
Description  = DM8 ODBC DSN
SERVER       = 192.168.0.120
UID          = SYSDBA
PWD          = SYSDBA
TCP_PORT     = 5238#### 步骤4:测试连接
[root@erp207 bin]# isql dm8 -v
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select name from v$instance;
+---------------------------------------------------------------------------------------------------------------------------------+
| NAME                                                                                                                            |
+---------------------------------------------------------------------------------------------------------------------------------+
| DEM                                                                                                                             |
+---------------------------------------------------------------------------------------------------------------------------------+
SQLRowCount returns 1
1 rows fetched
SQL> select sf_get_para_value(1,'PORT_NUM');
+--------------------------------+
| SF_GET_PARA_VALUE(1,'PORT_NUM')|
+--------------------------------+
| 5238                           |
+--------------------------------+
SQLRowCount returns 1
1 rows fetched
SQL> select id_code();
+---------------------------------------------------------------------------------------------------------------------------------+
| ID_CODE()                                                                                                                       |
+---------------------------------------------------------------------------------------------------------------------------------+
| 1-1-126-20.09.04-126608-ENT                                                                                                     |
+---------------------------------------------------------------------------------------------------------------------------------+
SQLRowCount returns 1
1 rows fetched
SQL> #### 步骤5:Oracle数据库端配置透明网关
# 参考链接:https://www.cnblogs.com/xqzt/p/5688659.html
[oracle@erp207 admin]$ cd $ORACLE_HOME/hs/admin
[oracle@erp207 admin]$ ls
extproc.ora  initdg4odbc.ora  listener.ora.sample  tnsnames.ora.sample
[oracle@erp207 admin]$ cp -v initdg4odbc.ora initdm8.ora
‘initdg4odbc.ora’ -> ‘initDMLINK.ora’## init<SID>.ora
[oracle@erp207 admin]$ cat initDMLINK.ora
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = DM8  #达梦数据库源DSN,关键参数
HS_FDS_TRACE_LEVEL = OFF  #debug等级,OFF为关闭
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so  #unixODBC驱动
HS_LANGUAGE = American_America.ZHS16GBK  #unixODBC数据源配置文件
#
# ODBC specific environment variables
#
set ODBCINI=/etc/odbc.ini
[oracle@erp207 admin]$ #### 步骤6:配置监听服务和网络服务名
[oracle@erp207 admin]$ cd $ORACLE_HOME/network/admin
[oracle@erp207 admin]$ ls
samples  shrept.lst
[oracle@erp207 admin]$ cp samples/listener.ora .
[oracle@erp207 admin]$ cp samples/tnsnames.ora .
[oracle@erp207 admin]$ ls
listener.ora  samples  shrept.lst  tnsnames.ora
[oracle@erp207 admin]$ cat listener.ora
LISTENER =(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.207)(PORT=1521))(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(PROGRAM = dg4odbc)(SID_NAME = DMLINK)   # DSN(ORACLE_HOME=/oracle/app/oracle/product/11.2.0/db_1)))ADR_BASE_HOME = =/oracle/app/oracle[oracle@erp207 admin]$ cat tnsnames.ora
dm8link = (DESCRIPTION =(ADDRESS = (PROTOCOL=TCP)(HOST=192.168.0.207)(PORT=1521))(CONNECT_DATA = (SERVICE_NAME = DMLINK))(HS = ok))#### 步骤7:测试网络链接
[oracle@erp207 admin]$ lsnrctl reload
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 23-APR-2021 22:39:42
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.207)(PORT=1521))
The command completed successfully
[oracle@erp207 admin]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 23-APR-2021 22:39:49
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.207)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                23-APR-2021 22:26:29
Uptime                    0 days 0 hr. 13 min. 19 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /oracle/app/oracle/diag/tnslsnr/erp207/listener/alert/log.xml
Listening Endpoints Summary...(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.207)(PORT=1521)))(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "DMLINK" has 1 instance(s).Instance "DMLINK", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@erp207 admin]$ tnsping dm8link
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 23-APR-2021 22:39:51
Copyright (c) 1997, 2013, Oracle.  All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL=TCP)(HOST=192.168.0.207)(PORT=1521)) (CONNECT_DATA = (SERVICE_NAME = DMLINK)) (HS = ok))
OK (10 msec)
[oracle@erp207 admin]$ #### 8. Oracle端创建dblink到达梦数据库
[oracle@erp207 admin]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Fri Apr 23 22:40:54 2021
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 1043886080 bytes
Fixed Size                  2259840 bytes
Variable Size             331351168 bytes
Database Buffers          704643072 bytes
Redo Buffers                5632000 bytes
Database mounted.
Database opened.
SQL> select status from v$instance;
STATUS
------------
OPENSQL> create database link ora2dm connect to "SYSDBA" identified by "SYSDBA" using 'dm8link';
Database link created.SQL> select * from v$version@ora2dm;
BANNER
--------------------------------------------------------------------------------
DM Database Server 64 V8
DB Version: 0x7000bSQL> select * from test@ora2dm;
C1
--------------------------------------------------------------------------------
a
B
c
ASQL>  insert into test@ora2dm values ('X');
1 row created.
SQL> insert into test@ora2dm(c1) values ('Y');
1 row created.
SQL> commit;
Commit complete.SQL> select * from test@ora2dm;
C1
--------------------------------------------------------------------------------
a
B
c
A
X
Y
6 rows selected.SQL> 

达梦の外部链接(dblink)相关推荐

  1. 达梦中创建dblink链接oracle

    1.需要配置oracle oci客户端 先从oracle官网下载oracle的client instantclient-basic-linux.x64-12.2.0.1.0 下载过后解压完将会是以下的 ...

  2. 达梦数据库通过DBLINK访问ORACLE (从DM到ORACLE)

    一.环境 ORACLE: IP 100.111.8.9 操作系统版本 Linux CentOS 7.0 数据库版本 oracle 11g SELINUX DISABLED 防火墙 关闭 达梦: IP ...

  3. oracle数据库dblink创建语句_「运维实验」——达梦数据库间DBlink配置

    作为一名运维工程师一定会专注于日常运维实验分享,即时分享即时阅读,希望能帮助同行在运维路上一路前(tuo)行(fa). 下面是详细实验: 实验环境说明 达梦数据库1:192.168.80.40 DMS ...

  4. 达梦数据库创建dblink

    1.dblink(Database Link)数据库链接:当我们跨本地数据库,访问另一个数据库中的数据时,需创建远程数据库的链接来访问. 2.dblink的分类: (1)普通dblink:只有创建语句 ...

  5. oracle数据库dblink创建语句_「运维实验」——达梦数据库DBlink连接Oracle配置

    经过昨天达梦数据库间DBlink配置(具体操作可回看上一篇文章),今天做延伸实验. 实验环境说明 Oracle数据库1:192.168.80.40 ora11g RHEL 6.5 64位 达梦数据库1 ...

  6. 达梦数据库(DM8)DCA培训及认证考试有感--附ODBC使用新场景

    随着国产化进程的进一步开展,国产数据库的应用将日益广泛.达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,在国产化数据库中适配性良好,随着不断发展,达梦数据库在不断壮大,在 ...

  7. JeecgBoot 连接达梦数据库

    JeecgBoot连接达梦数据库 一.达梦数据库官网下载地址 http://www.dameng.com/down.aspx?TypeId=11&FId=t14:11:14 项目采用DMB8开 ...

  8. DM(达梦)数据库简介

    前言: 达梦数据库作为已商业化的国产数据库代表,在政府及事业单位应用还是比较广泛.最近工作中有使用到达梦数据库,这里对已学习的相关内容作个简单记录,方便以后查阅.另外,网络上有关达梦数据库的资料甚少, ...

  9. 达梦DBLINK(外部链接)

     文章目录 一.创建外部链接(DM到DM) 二.删除外部链接 三.外部链接使用 四.ODBC方式 外部链接对象(LINK)是 DM 中的一种特殊的数据库实体对象,它记录了远程数据库的连接和路径信息,用 ...

最新文章

  1. OpenCV 笔记(05)— opencv.hpp 头文件作用(是其它所有头文件的全集)
  2. 开源——需要分享共享的无私精神
  3. vant 下拉框样式_使用 Vue 的 Vant.js List 列表组件实现无限下拉
  4. HarmonyOS之深入解析WLAN的功能和使用
  5. Python基础之window常见操作
  6. 数字图像处理 空间域锐化 MATLAB实验
  7. Linux 命令(77)—— killall 命令
  8. 超链接显示网站 A,访问后进入网站 B
  9. cad直线和圆弧倒角不相切_建议收藏:史上最全CAD快捷键大全
  10. 国内主流的ERP软件大盘点
  11. 松下弧焊机器人 调电压_松下焊接机器人-基本操作篇.pdf
  12. DPSK+PM调制解调
  13. 华氏温度和摄氏温度的转换-C语言
  14. html中超链接使用_html超链接有哪些类型 html中,超链接用的是什么标签
  15. Bit-M Accelerator全新上线
  16. 七牛云 CDN 调用
  17. Github建个人静态网页
  18. FPGA——SPI总线控制flash(3)含代码
  19. 轻松查询多个韵达快运最后物流中含有某个地方的单号
  20. 学习Linux的几点忠告(转贴)

热门文章

  1. 【Redis6】Redis6笔记
  2. 用2片74LS85实现2个8位二进制数比大小
  3. 免费的安卓手机投屏工具盘点:手机声音传输到电脑竟然如此简单?
  4. IBM HACMP 系列 -- 安装和配置一
  5. Java源码——使用BigInteger计算组合数(彩票中奖概率计算示例)
  6. IOS 之 NSArray 数组方法详解(4)
  7. 电机与运动控制笔记整理(二)——直流调速系统
  8. 常用的正则表达式校验
  9. 围观一个无限循环的奇葩代码,把电脑弄死机了
  10. USB 之二 USB2.0 规范详解 第二部分