一、環境說明
本例配置一個兩節點 MPP。兩個節點都配置兩塊網卡,一塊接入內部網絡交換模塊,一
塊接入到外部交換機。
兩節點實例名分別爲 EP01 和 EP02,相關的 IP、端口等規劃見下表。
實例名 | MAL_INST_HOST | MAL_INST_PORT | MAL_HOST | MAL 端口 | MPP_SEQNO |
EP01 | dmmpp1 | 5236 | dmmpp1-priv | 5269 | 0 |
EP02 | dmmpp2 | 5237 | dmmpp2-priv | 5270 | 1 |
[root@dmmpp1 network-scripts]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.31.158 dmmpp1
192.168.31.159 dmmpp2
19.21.68.158 dmmpp1-priv
19.21.68.159 dmmpp2-priv
二、安裝mpp
2.1、在dmmpp1與dmmpp2創建實例,分別是EP01,EP02
2.2、分別對兩臺實例的 dm.ini 進行配置。
修改 EP01 的 dm.ini 的以下幾個參數如下:
INSTANCE_NAME = EP01
PORT_NUM = 5236
MAL_INI = 1
MPP_INI = 1
修改 EP02 的 dm.ini 的以下幾個參數如下:
INSTANCE_NAME = EP02
PORT_NUM = 5237
MAL_INI = 1
MPP_INI = 1
2.3、分別對兩臺實例的 dmmal.ini 進行配置。
爲兩個 EP 配置 dmmal.ini 如下,配置完全一樣,EP 間可互相拷貝。dmmal.ini 與
dm.ini 放在相同的目錄下。
[root@dmmpp2 EP02]# cat dmmal.ini
[MAL_INST1]
MAL_INST_NAME = EP01
MAL_HOST = dmmpp1-priv
MAL_PORT = 5269
MAL_INST_HOST = dmmpp1
MAL_INST_PORT = 5236
[MAL_INST2]
MAL_INST_NAME = EP02
MAL_HOST = dmmpp2-priv
MAL_PORT = 5270
MAL_INST_HOST = dmmpp2
MAL_INST_PORT = 5237
2.4、配置兩臺 dmmpp.ini。
dmmpp.ctl 是一個二進制文件,用戶不能直接配置,需要先配置 dmmpp.ini。
配置 dmmpp.ini 如下:
[root@dmmpp1 EP01]# cat dmmpp.ini
[SERVICE_NAME1]
MPP_SEQ_NO = 0
MPP_INST_NAME = EP01
[SERVICE_NAME2]
MPP_SEQ_NO = 1
MPP_INST_NAME = EP02
2.5、轉換兩臺dmmpp.ctl
轉換生成的 dmmpp.ctl 需要放在與 dm.ini 同一個目錄。下面的命令將 dmmpp.ini 轉換爲 dmmpp.ctl,命令中的“TYPE=2”參數表示將文本文件轉換成控制文件,也可以使用“TYPE=1”參數進行逆向轉換。
[dmdba@dmmpp2 EP02]$ dmctlcvt TYPE=2 SRC=/dm/dmdbms/data/EP02/dmmpp.ini DEST=/dm/dmdbms/data/EP02/dmmpp.ctl
DMCTLCVT V8
convert txt to ctl success!
3、分別重啓服務
經過前面四個步驟,DM MPP 環境已經配置完成了。分別啓動 EP01 和 EP02 的 DM 數據庫實例(順序不分先後),DM MPP 系統即能正常運行,用戶就可以登錄任一 EP 進行數據庫操作了。
[root@dmmpp1 EP01]# systemctl restart DmServiceEP01.service
systemctl restart DmAPService.service
[root@dmmpp1 EP01]# systemctl restart DmAPService.service
[root@dmmpp2 EP02]# systemctl restart DmServiceEP02.service
systemctl restart DmAPService.service
[root@dmmpp2 EP02]# systemctl restart DmAPService.service
4、建立分佈表
DM MPP 支持表數據的哈希分佈、隨機分佈、複製分佈、範圍分佈、LIST 分佈類型,用戶可根據實際情況選擇合適的分佈類型,MPP 的數據分佈類型和具體設置在建表時指定,語法如下,建表的其他語法分支可參見
《DM8_SQL 語言使用手冊》。
CREATE [[GLOBAL] TEMPORARY] TABLE <表名定義> <表結構定義>;
<表結構定義>::=<表結構定義 1> | <表結構定義 2>
<表結構定義 1>::= (<列定義> {,<列定義>} [,<表級約束定義>{,<表級約束定義>}]) [ON COMMIT
<DELETE | PRESERVE> ROWS] [<PARTITION 子句>][<空間限制子句>] [<STORAGE 子句>][<
壓縮子句>] [<ROW MOVEMENT 子句>][<DISTRIBUTE 子句>]
<表結構定義 2>::= [ON COMMIT <DELETE | PRESERVE> ROWS] [<空間限制子句>] [<STORAGE
子句>] [<壓縮子句>]AS <不帶 INTO 的 SELECT 語句>[<DISTRIBUTE 子句>];
<DISTRIBUTE 子句>::=DISTRIBUTED[<RANDOMLY>|<FULLY>]
|DISTRIBUTED BY [<HASH>](<列名> {,<列名>})
|DISTRIBUTED BY RANGE (<列名> {,<列名>})(<範圍分佈項> {,<範圍分佈項>})
|DISTRIBUTED BY LIST (<<列名> {,<列名>}>)(<LIST 分佈項> {,<LIST 分佈項>})
<範圍分佈項>::= VALUES LESS THAN (<表達式>{,<表達式>}) ON <實例名>
|VALUES EQU OR LESS THAN (<表達式>{,<表達式>}) ON <實例名>
<LIST 分佈項>::= VALUES (<表達式>{,<表達式>}) ON <實例名>
4.1、創建示例
例 1:創建哈希分佈表 T_HASH,分佈列爲 C1。
CREATE TABLE T_HASH(C1 INT, C2 CHAR(10))DISTRIBUTED BY HASH (C1);
例 2:創建隨機分佈表 T_RANDOM。
CREATE TABLE T_RANDOM(C1 INT, C2 CHAR(10))DISTRIBUTED RANDOMLY;
例 3:創建複製分佈表 T_FULLY。
CREATE TABLE T_FULLY(C1 INT, C2 CHAR(10))DISTRIBUTED FULLY;
例 4:創建範圍分佈表 T_RANGE,分佈列爲 C1。
CREATE TABLE T_RANGE (C1 INT, C2 CHAR(10))
DISTRIBUTED BY RANGE (C1) (VALUES EQU OR LESS THAN (100) ON EP01, VALUES LESS
THAN(MAXVALUE) ON EP02);
例 5:創建 LIST 分佈表 T_LIST,分佈列爲 C1。
CREATE TABLE T_LIST(C1 INT, C2 CHAR(10))
DISTRIBUTED BY LIST (C1) (VALUES(3) ON EP01,VALUES(4) ON EP02);
例 6:創建哈希分佈表的範圍水平分區表。
CREATE TABLE T_HASH_RANGE_PARTITION
(C1 INT, C2 CHAR(10), C3 CHAR(10))
PARTITION BY RANGE(C1)
(
PARTITION PART_1 VALUES LESS THAN(0) ,
PARTITION PART_2 VALUES LESS THAN(10) ,
PARTITION PART_3 VALUES LESS THAN(100) ,
PARTITION PART_4 VALUES LESS THAN(MAXVALUE)
)
DISTRIBUTED BY HASH (C1);
在創建分佈表時,用戶應注意以下一些使用限制:
單機模式下建的分佈表和普通表一樣,但是不能創建指定實例名的分佈表(如範圍
分佈表和 LIST 分佈表);
在 MPP 模式下創建分佈表,如果未指定列則默認爲 RANDOMLY(隨機)分佈表;
分佈列類型不支持 BLOB、CLOB、IMAGE、TEXT、LONGVARCHAR、BIT、BINARY、
VARBINARY、LONGVARBINARY、BFILE、時間間隔類型、虛擬列和用戶自定義類
型;
HASH 分佈、RANGE 分佈、LIST 分佈允許更新分佈列,並支持包含大字段列的表
的分佈列更新,但包含 INSTEAD OF 觸發器的表、堆表不允許更新分佈列;
對於 FULLY(複製)分佈表,只支持單表查詢的更新和刪除操作,並且查詢項或者
條件表達式中都不能包含 ROWID 僞列表達式;
RANGE(範圍)分佈表和 LIST(列表)分佈表,分佈列與分佈列值列表必須一致,
並且指定的實例名不能重複;
引用約束的引用列和被引用列都必需包含分佈列,且分佈情況完全相同;
隨機分佈表不支持 UNIQUE 索引。
4.2、在dmmpp1主機上創建表
[dmdba@dmmpp1 dm]$ disql sysdba/dmdba1234
Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 4.043(ms)
disql V8
SQL> create tablespace jisen datafile '/dm/dmdbms/data/EP01/JISEN01.DBF' size 64;
executed successfully
used time: 91.153(ms). Execute id is 106.
SQL> create user jisen identified by jisen1234 default tablespace JISEN;
executed successfully
used time: 18.665(ms). Execute id is 107.
SQL> grant resource to JISEN;
executed successfully
used time: 10.955(ms). Execute id is 108.
SQL> conn jisen/jisen1234
Server[LOCALHOST:5236]:mode is normal, state is open
login used time: 3.775(ms)
SQL> create table t_hash(id int,sdate char(20)) distributed by hash (id);
executed successfully
used time: 15.394(ms). Execute id is 109.
SQL> create table t_random(c1 int, c2 char(10)) distributed randomly;
executed successfully
used time: 9.347(ms). Execute id is 110.
SQL> create table t_fully(c1 int, c2 char(10)) distributed fully;
executed successfully
used time: 14.855(ms). Execute id is 111.
SQL> create table t_range (c1 int, c2 char(10)) distributed by range(c1) (values equ or less than (100) on EP01, values less than(maxvalue) on EP02);
executed successfully
used time: 15.254(ms). Execute id is 112.
SQL> SQL> create table t_list(c1 int, c2 char(10)) distributed by list (c1) (values(3) on EP01,values(4) on EP02);
executed successfully
used time: 12.801(ms). Execute id is 113.
SQL> create table t_hash_range_partition
2 (c1 int, c2 char(10), c3 char(10))
3 partition by range(c1)
4 (
5 partition part_1 values less than(0) ,
6 partition part_2 values less than(10) ,
7 partition part_3 values less than(100) ,
8 partition part_4 values less than(maxvalue)
9 )
10 distributed by hash (c1);
executed successfully
used time: 18.577(ms). Execute id is 114.
SQL>
4.3、在dmmpp2上查看創建的內容
[dmdba@dmmpp2 ~]$ disql sysdba/dmdba1234:5237
Server[LOCALHOST:5237]:mode is normal, state is open
login used time: 4.165(ms)
disql V8
SQL> select username from dba_users;
LINEID USERNAME
---------- ----------
1 SYSSSO
2 JISEN
3 SYSDBA
4 SYS
5 SYSAUDITOR
used time: 10.847(ms). Execute id is 662509.
SQL>
[dmdba@dmmpp2 ~]$ disql sysdba/dmdba1234:5237
Server[LOCALHOST:5237]:mode is normal, state is open
login used time: 4.165(ms)
disql V8
SQL> select username from dba_users;
LINEID USERNAME
---------- ----------
1 SYSSSO
2 JISEN
3 SYSDBA
4 SYS
5 SYSAUDITOR
used time: 10.847(ms). Execute id is 662509.
SQL> conn jisen/jisen1234:5237
Server[LOCALHOST:5237]:mode is normal, state is open
login used time: 4.014(ms)
SQL> desc user_tables;
LINEID NAME TYPE$ NULLABLE
---------- --------------- ------------ --------
1 TABLE_NAME VARCHAR(128) N
2 TABLESPACE_NAME VARCHAR(128) Y
3 CLUSTER_NAME VARCHAR(1) Y
4 IOT_NAME VARCHAR(128) N
5 STATUS VARCHAR(8) Y
6 PCT_FREE NUMBER Y
7 PCT_USED NUMBER Y
8 INI_TRANS NUMBER Y
9 MAX_TRANS NUMBER Y
10 INITIAL_EXTENT NUMBER Y
11 NEXT_EXTENT NUMBER Y
LINEID NAME TYPE$ NULLABLE
---------- --------------- ---------- --------
12 MIN_EXTENTS NUMBER Y
13 MAX_EXTENTS NUMBER Y
14 PCT_INCREASE NUMBER Y
15 FREELISTS NUMBER Y
16 FREELIST_GROUPS NUMBER Y
17 LOGGING VARCHAR(1) Y
18 BACKED_UP VARCHAR(1) Y
19 NUM_ROWS NUMBER Y
20 BLOCKS NUMBER Y
21 EMPTY_BLOCKS NUMBER Y
22 AVG_SPACE NUMBER Y
LINEID NAME TYPE$ NULLABLE
---------- ------------------------- ---------- --------
23 CHAIN_CNT NUMBER Y
24 AVG_ROW_LEN NUMBER Y
25 AVG_SPACE_FREELIST_BLOCKS NUMBER Y
26 NUM_FREELIST_BLOCKS NUMBER Y
27 DEGREE VARCHAR(1) Y
28 INSTANCES VARCHAR(1) Y
29 CACHE VARCHAR(1) Y
30 TABLE_LOCK VARCHAR(7) Y
31 SAMPLE_SIZE NUMBER Y
32 LAST_ANALYZED DATE Y
33 PARTITIONED VARCHAR(3) Y
LINEID NAME TYPE$ NULLABLE
---------- ---------------- ----------- --------
34 IOT_TYPE VARCHAR(4) Y
35 TEMPORARY VARCHAR(1) Y
36 SECONDARY VARCHAR(1) Y
37 NESTED VARCHAR(1) Y
38 BUFFER_POOL VARCHAR(1) Y
39 FLASH_CACHE VARCHAR(7) Y
40 CELL_FLASH_CACHE VARCHAR(7) Y
41 ROW_MOVEMENT VARCHAR(7) Y
42 GLOBAL_STATS VARCHAR(3) Y
43 USER_STATS VARCHAR(2) Y
44 DURATION VARCHAR(15) Y
LINEID NAME TYPE$ NULLABLE
---------- --------------- ---------- --------
45 SKIP_CORRUPT VARCHAR(1) Y
46 MONITORING VARCHAR(1) Y
47 CLUSTER_OWNER VARCHAR(1) Y
48 DEPENDENCIES VARCHAR(1) Y
49 COMPRESSION VARCHAR(8) Y
50 COMPRESS_FOR VARCHAR(1) Y
51 DROPPED VARCHAR(1) Y
52 READ_ONLY VARCHAR(1) Y
53 SEGMENT_CREATED VARCHAR(3) Y
54 RESULT_CACHE VARCHAR(7) Y
54 rows got
used time: 308.531(ms). Execute id is 891935.
SQL> select TABLE_NAME from user_tables;
LINEID TABLE_NAME
---------- ----------------------
1 T_HASH
2 T_RANDOM
3 T_FULLY
4 T_RANGE
5 T_LIST
6 T_HASH_RANGE_PARTITION
6 rows got
used time: 55.583(ms). Execute id is 892289.
SQL>
SQL> begin
2 for i in 1 .. 10000
3 loop
4 insert into t_hash values (i, 'test');
5 commit;
6 end loop;
7 end;
8 /
DMSQL executed successfully
used time: 00:00:20.673. Execute id is 902329.
SQL>
如果其中一臺主機宕機,則會引發Mpp不可用。
[dmdba@dmmpp1 ~]$ disql sysdba/dmdba1234
[-6024]:Remote node global login failed.
disql V8