達夢7同構(DM-DM)DBLINK

eric0435發表於2020-04-20

外部連結物件(LINK)是DM中的一種特殊的資料庫實體物件,它記錄了遠端資料庫的連線和路徑資訊,用於建立與遠端資料的聯絡。透過多臺資料庫主庫間的相互通訊,使用者可以透明地操作遠端資料庫的資料,使應用程式看起來只有一個大型資料庫。使用者遠端資料庫中的資料請求,都被自動轉換為網路請求,並在相應結點上實現相應的操作。使用者可以建立一個資料庫連結,以說明一個物件在遠端資料庫中的訪問路徑。這個連結可以是公用的(資料庫中所有使用者使用),也可以是私有的(只能被某個使用者使用)。

使用者可以透過外部連結對遠端資料庫的表進行查詢和增刪改操作,以及本地呼叫遠端的儲存過程。

語法格式
CREATE [OR REPLACE] [PUBLIC] LINK < 外部連結名> CONNECT ['< 連線庫型別>'] WITH < 登入名> IDENTIFIED BY < 登入口令> USING '< 連線串> ';
< 連線庫型別> ::= DAMENG | ORACLE | ODBC
< 連線串> ::=< 外部連結串>
< 外部連結串>::=< DAMENG外部連結串>| < ORACLE外部連結串> |
< DAMENG外部連結串>::=< 例項IP地址>/< 例項埠號> |
/ |

< ORACLE外部連結串>::= ||/< 服務名>
::=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=< 埠號>)))(CONNECT_DATA=(SERVICE_NAME=< 服務名>)))
::=

引數
1. OR REPLACE 使用OR REPLACE選項的好處是,如果系統中已經有同名的資料庫連結名,伺服器會自動用新的程式碼覆蓋原來的程式碼。如果不使用OR REPLACE選項,當建立的新外部連結名稱與系統中已有的外部連結名稱同名時,伺服器會報錯。
2. PUBLIC 此連結物件是否能夠被建立者之外的使用者引用;
3. < 外部連結名> 資料庫連結的名稱;
4. < 連線庫型別> 目前只支援DAMENG、ORACLE或ODBC,預設為DAMENG;
5. < 登入名> 登入使用者名稱稱;
6. < 登入口令> 登入使用者口令;
7. 支援三種格式,分別對應目標節點在dmmal.ini中的配置項,具體如下:
l mal_inst_host/mal_inst_port
l mal_host/mal_port
l mal_inst_name
8. 可以使用配置的網路服務名tsn_name(網路服務名需要配置),或者連線描述符description(連線描述符是網路連線目標特殊格式的描述,它包括網路協議、主庫IP地址、埠號和服務名),或者/< 服務名>;
9. DSN需要使用者手動配置。

語句功能
建立一個外部連結。
使用說明
1.要建立到DM資料庫的外部連結,必須首先配置dmmal.ini,才能使用LINK。DM的連線串有兩種格式:
INSTANCE_NAME:直接使用遠端庫的例項名(該例項名必須配置到dmmal.ini中);
/< 埠號>:其中埠號為DM外部連結伺服器的dmmal.ini配置中的MAL_PORT埠號。
dmmal.ini的詳細配置可參考《DM7系統管理員手冊》的2.1節,需要注意同時將dm.ini中的MAL_INI引數置為1以開啟MAL系統。
2. 要建立到ORACLE的外部連結,可以使用配置的網路服務名;如果沒有配置tsn_name,可以使用連線描述符或者/< 服務名>作為連線串。
3.透過LINK對遠端伺服器所作的修改,由使用者在本地伺服器透過commit或rollback進行提交或回滾。
4.只支援普通使用者,不支援SSL和Kerberos認證。
5.DM7不支援連線自身例項的LINK。
6.支援在CREATE SCHEMA中CREATE LINK,但是不支援CREATE PUBLIC LINK。
7.只有DBA和具有CREATE LINK許可權的使用者可以建立外部連結。

舉例說明 例1 使用DM資料庫,建立一個連線到IP地址為10.10.10.186,MAL_PORT埠號為5336的MAL站點的外部連結,登入到此站點使用的使用者名稱為sysdba,密碼為dameng123,例項名為:dmks。
先對遠端DM資料庫設定dmmai.in檔案,並設定MAL_INI引數為1,然後重啟dmks資料庫

[dmdba@dmks dmks]$ vi dmmal.ini
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_dmks]
MAL_INST_NAME = dmks
MAL_HOST = 10.10.10.187
MAL_PORT = 5337
MAL_INST_PORT = 5236
MAL_INST_HOST = 10.10.10.187
[MAL_jydm]
MAL_INST_NAME = jydm
MAL_HOST = 10.10.10.180
MAL_PORT = 5336
MAL_INST_PORT = 5236
MAL_INST_HOST = 10.10.10.180
SQL> select sf_get_para_value(1,'MAL_INI');
LINEID     SF_GET_PARA_VALUE(1,'MAL_INI')
---------- ------------------------------
1          0
used time: 7.852(ms). Execute id is 1609.
SQL> select * from v$dm_ini where para_name='MAL_INI';
LINEID     PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE
---------- --------- ---------- --------- --------- ------- ---------- ---------- ----------- ---------
1          MAL_INI   0          0         1         N       0          0          dmmal.ini   IN FILE
used time: 8.395(ms). Execute id is 1610.
SQL> alter system set 'MAL_INI'=1 spfile;
DMSQL executed successfully
used time: 8.209(ms). Execute id is 1611.
SQL> select sf_get_para_value(1,'MAL_INI');
LINEID     SF_GET_PARA_VALUE(1,'MAL_INI')
---------- ------------------------------
1          1
used time: 5.533(ms). Execute id is 1612.
SQL>  select * from v$dm_ini where para_name='MAL_INI';
LINEID     PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE
---------- --------- ---------- --------- --------- ------- ---------- ---------- ----------- ---------
1          MAL_INI   0          0         1         N       0          1          dmmal.ini   IN FILE
used time: 7.583(ms). Execute id is 1613.
[root@dmks ~]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:5901                0.0.0.0:*                   LISTEN      24268/Xvnc
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1738/rpcbind
tcp        0      0 0.0.0.0:39792               0.0.0.0:*                   LISTEN      1964/rpc.statd
tcp        0      0 0.0.0.0:6001                0.0.0.0:*                   LISTEN      24268/Xvnc
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      2191/sshd
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      2027/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2290/master
tcp        0      0 :::38955                    :::*                        LISTEN      1964/rpc.statd
tcp        0      0 :::111                      :::*                        LISTEN      1738/rpcbind
tcp        0      0 :::6001                     :::*                        LISTEN      24268/Xvnc
tcp        0      0 :::5236                     :::*                        LISTEN      21657/dmserver
tcp        0      0 :::22                       :::*                        LISTEN      2191/sshd
tcp        0      0 ::1:631                     :::*                        LISTEN      2027/cupsd
tcp        0      0 ::1:25                      :::*                        LISTEN      2290/master
[root@dmks ~]# service DmServicedmks restart
Stopping DmServicedmks: [ OK ]
Starting DmServicedmks: [ OK ]
[root@dmks ~]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:5901                0.0.0.0:*                   LISTEN      24268/Xvnc
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1738/rpcbind
tcp        0      0 0.0.0.0:39792               0.0.0.0:*                   LISTEN      1964/rpc.statd
tcp        0      0 0.0.0.0:6001                0.0.0.0:*                   LISTEN      24268/Xvnc
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      2191/sshd
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      2027/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2290/master
tcp        0      0 :::38955                    :::*                        LISTEN      1964/rpc.statd
tcp        0      0 :::111                      :::*                        LISTEN      1738/rpcbind
tcp        0      0 :::6001                     :::*                        LISTEN      24268/Xvnc
tcp        0      0 :::5236                     :::*                        LISTEN      840/dmserver
tcp        0      0 :::22                       :::*                        LISTEN      2191/sshd
tcp        0      0 ::1:631                     :::*                        LISTEN      2027/cupsd
tcp        0      0 :::5337                     :::*                        LISTEN      840/dmserver
tcp        0      0 ::1:25                      :::*                        LISTEN      2290/master

從上面的輸出可以看到埠5336實戰啟用了

SQL> select * from v$dm_ini where para_name='MAL_INI';
LINEID     PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE
---------- --------- ---------- --------- --------- ------- ---------- ---------- ----------- ---------
1          MAL_INI   1          0         1         N       1          1          dmmal.ini   IN FILE
used time: 12.648(ms). Execute id is 3.
SQL>  select sf_get_para_value(2,'MAL_INI');
LINEID     SF_GET_PARA_VALUE(2,'MAL_INI')
---------- ------------------------------
1          1
used time: 1.191(ms). Execute id is 4.

對本地DM資料庫配置dmmal.ini,注意這裡還要新增遠端資料庫的資訊,否則在建立外部link時會提示例項不存在

[dmdba@shard1 jydm]$ cat  dmmal.ini
MAL_CHECK_INTERVAL = 5
MAL_CONN_FAIL_INTERVAL = 5
[MAL_dmks]
MAL_INST_NAME = dmks
MAL_HOST = 10.10.10.187
MAL_PORT = 5337
MAL_INST_PORT = 5236
MAL_INST_HOST = 10.10.10.187
[MAL_jydm]
MAL_INST_NAME = jydm
MAL_HOST = 10.10.10.180
MAL_PORT = 5336
MAL_INST_PORT = 5236
MAL_INST_HOST = 10.10.10.180
SQL> select * from v$dm_ini where para_name='MAL_INI';
LINEID     PARA_NAME PARA_VALUE MIN_VALUE MAX_VALUE MPP_CHK SESS_VALUE FILE_VALUE DESCRIPTION PARA_TYPE
---------- --------- ---------- --------- --------- ------- ---------- ---------- ----------- ---------
1          MAL_INI   1          0         1         N       1          1          dmmal.ini   IN FILE
used time: 8.629(ms). Execute id is 6.
SQL> select sf_get_para_value(2,'MAL_INI');
LINEID     SF_GET_PARA_VALUE(2,'MAL_INI')
---------- ------------------------------
1          1
used time: 1.302(ms). Execute id is 8.
SQL>

重啟本地資料庫

[root@shard1 tmp]# systemctl start DmServicejydm.service
SQL> create public link link1 connect 'dameng' with sysdba identified by "dameng123" using '10.10.10.180/5336';
executed successfully
used time: 19.417(ms). Execute id is 9.

或者

SQL> create or replace public link link2 connect 'dameng' with sysdba identified by "dameng123" using 'jydm';
executed successfully
used time: 35.346(ms). Execute id is 12.

在遠端資料庫中建立jy.t1表

SQL> insert into jy.t1 values(1,'JY');
affect rows 1
used time: 1.019(ms). Execute id is 2809.
SQL> commit;
executed successfully
used time: 13.274(ms). Execute id is 2810.

在本地資料庫中透過外部link來查詢遠端資料庫的sysdba.t1表

SQL> select * from jy.t1@link1;
LINEID     C1          C2
---------- ----------- --
1          1           JY
used time: 5.955(ms). Execute id is 134.
SQL> select * from jy.t1@link2;
LINEID     C1          C2
---------- ----------- --
1          1           JY
used time: 2.538(ms). Execute id is 135.

在本地資料庫中透過外部link向遠端資料庫的jy.t1表插入資料

SQL> insert into jy.t1@link1 values(2,'HY');
affect rows 1
used time: 2.611(ms). Execute id is 136.
SQL> commit;
executed successfully
used time: 13.105(ms). Execute id is 137.

在遠端資料庫中使用sysdba來查詢t1表的記錄來驗證記錄是否被插入

SQL>  select * from jy.t1;
LINEID     C1          C2
---------- ----------- --
1          1           JY
2          2           HY
used time: 0.906(ms). Execute id is 2819.

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2687105/,如需轉載,請註明出處,否則將追究法律責任。

相關文章