1.環境
作業系統:redhat 6
資料庫:GBase8a MPP Cluster 資料庫
2. 配置透明網關
1)安裝透明網關
解壓 tar 包:tar -xvf [安裝包]
修改透明網關相應權限:chmod -R +x [安裝目錄名]
2)配置透明網關
系統引陣列態檔:[安裝目錄]/conf/conf,properties
內容如下:
$ cat conf.properties
gbase.gt.port=9898
gbase.gt.encode=utf-8
gbase.gt.pagesize=10000
gbase.gt.load.data.type=0
gbase.gt.gc.paging.query=1
gbase.gt.wait.timeout=7200
資料源組態檔:[安裝目錄]/conf/datedource/gc_link.properties
內容如下:
$ cat dataSource/gc_link1.properties
[gbase8a cluster]
dataSource_IP=[資料源 IP]
dataSource_port=5258
dataSource_dbname=[資料源的庫名]
dataSource_dbtype=gcluster
dataSource_user=*******
dataSource_pwd=*******
3)啟動透明網關
$ sh gt.sh
4)透明網關關閉方式
如果透明網關配置失敗需要手動 kill 對應的行程號,然后重新啟動
ps -ef|grep GBaseGateway
kill [行程號]
3. 配置目標資料庫 GBase8a MPP Cluster A
gbase_8a_gcluster.cnf 中必須配置的引數:
gbase_dblink_gateway_ip = [透明網關 IP,如 192.18.16.11]
gbase_dblink_gateway_port = [透明網關的服務埠,如 9898]
gbase_8a_gcluster.cnf 中選配的引數:
gcluster_dblink_direct_data_exchange:
默認值為 1
值為 1 表示:資料從資料源集群的計算節點直接發送給目標集群。
值為 0 表示:資料從資料源集群發送給網關,然后由網關轉發給目標集 群。
注:僅當資料源集群和目標集群的節點間在網路上不可直接連接時,調整 此引數為 0。
4. 使用 db-link
創建 db-link:
CREATE DATABASE LINK dblink_name connect to ''identified by '' using 'gc_link ';
注:其中 dblink_name 是自定義的 db-link 的名字,后面的查詢中,使用
該名字進行 db-link 查詢。connect to ‘’ identified by ‘’是固定語法。
using 后面是資料源的名字。例如資料源組態檔名為 gc_link.properties, 則這里填 using ‘gc_link’。
洗掉 db-link:
DROP DATABASE LINK dblink_name;
注:當前不支持 IF EXISTS 語法。
使用 db-link:
SELECT * FROM 表名@ dblink_name
5. db-link 查詢的語法約束
本節介紹 db-link 查詢的語法約束。
注:如果僅僅是簡單使用,如 insert into local_table select * from 同
源 dblink 表,則可以忽略本節的約束。當查詢存在 db-link 表與本地表混用(例
如 db-link 表 JOIN 本地表),或與非同源 db-link 表混用時,則需要遵守如下
語法約束,否則查詢會報語法錯誤。
注:同源 db-link 指 db-link 的名字相同,名字不同的 db-link 成為非同源 db-link。例如 t1@gc_link 和 t2@gc_link 被認為是同源 db-link 的兩個表。
t1@gc_link 和 x1@gc_link2,被認為是非同源 db-link 表,即使 gc_link 和gc_link2 在創建時,using 的是同一個資料源,由于其 db-link 名字不同,仍然認為是非同源的。
db-link 查詢語法約束如下:
1. db-link 表只能出現在頂層查詢,或同源 dblink 的子查詢中。出現在本地表的子查詢中時,必須放在 relation 子查詢中。
例如:如下陳述句會報語法錯誤,因為 db-link 出現在本地表的子查詢中時,必須用 relation 子查詢包圍。
select * from t1 where exists (select 1 from t2@gc_link as t2 where t2.id = t1.id);
該陳述句可以修改為如下形式,以保證符合語法規則:
select * from t1 where exists (select 1 from (select 1 from t2@gc_link) as t2 where t2.id = t1.id);
2. 同源的 db-link 表可以直接 JOIN。dblink 表禁止與 local table, relation subquery,非同源 dblink 表,產生直接 JOIN 關系。
例如:t1@gc_link JOIN t2@gc_link 是允許的;但 t1@gc_link JOIN t2 是不允許的,因為 db-link 表禁止與本地表直接 JOIN,可以改寫 SQL 陳述句為如 下形式:
… (select * from t1@gc_link) t, t2 …
3. db-link 表的子查詢中,禁止出現本地表,非同源 dblink 表。
例如:select * from t1@gc_link where exists (select 1 from t2);
是不允許的,因為 db-link 表 t1@gc_link 的子查詢中出現了本地表 t2。可以 改寫為如下形式:
select * from (select * from t1@gc_link) t where exists (select 1 from t2);
4. group by 或 order by 中的相關子查詢,禁止出現 db-link 表。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/284567.html
標籤:其他數據庫
