本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon RDS 的 Db2 聯邦
您可以使用 Amazon RDS for Db2 資料庫作為聯合資料庫。為 Db2 設定聯盟後,您將能夠從您的 RDS for Db2 資料庫存取和查詢多個資料庫中RDS的資料。您RDS無需將資料移轉至 For Db2 資料庫,或將資料合併到單一資料庫中,就不需要同盟。
通過使用 RDS for Db2 數據庫作為聯合數據庫,您可以繼續訪問 Db2 功能的所有RDS功能,並可以利用各種優勢 AWS 服務,同時將您的數據保存在不同的數據庫中。您可以設定連接相同類型之不同資料庫的同質聯合,也可以設定連接不同類型之不同資料庫的異質聯合。
您首先將 Db2 中RDS的 Db2 資料庫連接到遠端資料庫。然後,您可以對所有連接的數據庫運行查詢。例如,您可以執行SQLJOIN陳述式,將 RDS for Db2 資料庫中的資料表與 z/OS 資料庫上遠端 Db2 中的表結合在一起。
同質联邦
您可以在 for Db2 資料庫與下列 Db2 產品系列之間設定同質聯合:RDS
-
DB2 為 Linux,UNIX, 視窗 () LUW
-
DB2 iSeries
-
適用於 z/OS 的 Db2
RDS對於 Db2 同質聯合不支援下列動作:
-
執行
CATALOG
指令以在 Db2 主機資料庫上設定節點目錄和遠端資料庫 RDS -
在與 z/OS 上的 Db2 聯合時設定工作負載平衡 (WLB)
-
設定資IBM料伺服器驅動程式組態檔案 (
db2dsdriver.cfg
)
RDS對於 Db2 同質聯合有以下要求:
-
您必須在
UNFENCED
模式中建立DRDA包裝函式。如果你不這樣做,那麼聯合將無法在 Db2 中RDS工作。 -
您必須允許從 For Db2 主機資RDS料庫傳入和傳出流量傳送至遠端主機資料庫。如需詳細資訊,請參閱VPC透過建立安全群組,提供對資料庫執行個體的存取。
第 1 步:創建一個DRDA包裝器和一個聯合服務器
對於同質聯合,請建立DRDA包裝函式和同盟伺服器。與遠端主機的連線會使用HOST
PORT
、和DBNAME
。
根據遠端 Db2 資料庫的類型,選擇下列其中一種方法:
-
Db2 適用於 Linux 和視窗 (LUX) 資料庫 — 執行下列SQL命令。UNIX在下列範例中,取代
server_name
使用您將用於聯合的伺服器名稱。Replace (取代)db2_version
使用遠程 Db2 數據庫的版本。Replace (取代)username
以及password
與您要連接的遠程 Db2 數據庫的憑據。Replace (取代)db_name
,dns_name
和port
為您要連線的遠端 Db2 資料庫使用適當的值。create wrapper drda options(DB2_FENCED 'N'); create server
server_name
type DB2/LUW wrapper drda version 'db2_version
' authorization "master_username
" password "master_password
" options (add DBNAME 'db_name
',add HOST 'dns_name
',add PORT 'port
');範例
create wrapper drda options(DB2_FENCED 'N'); create server SERVER1 type DB2/LUW wrapper drda version '11.5' authorization "sysuser" password "******" options (add DBNAME 'TESTDB2',add HOST 'ip-123-45-67-899.us-west-1.compute.internal',add PORT '25010');
-
Db2 iSeries — 執行下列SQL命令。在下列範例中,取代
wrapper_name
以及library_name
用你的DRDA包裝和包裝庫文件的名稱。Replace (取代) server_name
使用您將用於聯合的伺服器名稱。Replace (取代)db2_version
使用遠程 Db2 數據庫的版本。Replace (取代)username
以及password
與您要連接的遠程 Db2 數據庫的憑據。Replace (取代)dns_name
,port
和db_name
為您要連線的遠端 Db2 資料庫使用適當的值。create wrapper
wrapper_name
library 'library name
' options(DB2_FENCED 'N'); create serverserver_name
type db2/mvs versiondb2_version
wrapperwrapper_name
authorization "sername
" password "password
" options (HOST 'dns_name
', PORT 'port
', DBNAME 'db_name
');範例
create wrapper WRAPPER1 library 'libdb2drda.so' options(DB2_FENCED 'N'); create server SERVER1 type db2/mvs version 11 wrapper WRAPPER1 authorization "sysuser" password "******" options (HOST 'test1.123.com', PORT '446', DBNAME 'STLEC1');
-
適用於 z/OS 的 Db2 — 執行下列SQL命令。在下列範例中,取代
wrapper_name
以及library_name
用你的DRDA包裝和包裝庫文件的名稱。Replace (取代) server_name
使用您將用於聯合的伺服器名稱。Replace (取代)db2_version
使用遠程 Db2 數據庫的版本。Replace (取代)username
以及password
與您要連接的遠程 Db2 數據庫的憑據。Replace (取代)dns_name
,port
和db_name
為您要連線的遠端 Db2 資料庫使用適當的值。create wrapper
wrapper_name
library 'library_name
' options(DB2_FENCED 'N'); create serverserver_name
type db2/mvs versiondb2_version
wrapperwrapper_name
authorization "username
" password "password
" options (HOST 'dns_name
', PORT 'port
', DBNAME 'db_name
');範例
create wrapper WRAPPER1 library 'libdb2drda.so' OPTIONS(DB2_FENCED 'N'); create server SERVER1 type db2/mvs version 11 wrapper WRAPPER1 authorization "sysuser" password "******" options (HOST 'test1.123.com', PORT '446', DBNAME 'STLEC1');
步驟 2:建立使用者對應
透過執行下列SQL命令,建立使用者對應,將您的聯合伺服器與資料來源伺服器建立關聯。在下列範例中,取代 server_name
使用遠端伺服器的名稱,而不是您要對其執行作業的名稱。這是您在步驟 1 中建立的伺服器。Replace (取代) username
以及 password
與您的這個遠程服務器的憑據。
create user mapping for user server
server_name
options (REMOTE_AUTHID 'username
', REMOTE_PASSWORD 'password
');
如需詳細資訊,請參閱中的使用者對應
步驟 3:檢查連接
檢查連線,確認已成功設定同盟。開啟工作階段,以使用SQL指令將原生SETPASSTHRU命令傳送至遠端資料來源,然後在遠端資料伺服器上建立資料表。
-
開啟和關閉工作階段,以提交SQL至資料來源。在下列範例中,取代
server_name
使用您在步驟 1 中為聯合建立的伺服器名稱。set passthru
server_name
; -
建立新資料表。在下列範例中,取代
column_name
,data_type
和value
為您的表格提供適當的項目。create table
table_name
(column_name
data_type
(value
),column_name
data_type
(value
);如需詳細資訊,請參閱 CREATE TABLE
IBM Db2 文件中)。 -
建立索引、將資料列的值插入資料表,然後重設連線。重設連線會中斷連線,但會保留後端處理程序。在下列範例中,取代
index_name
,table_name
,column_name
和columnx_value
與您的信息。create index
index_name
ontable_name
(column_name
); insert intotable_name
values(column1_value
,column2_value
,column3_value
); insert intotable_name
values(column1_value
,column2_value
,column3_value
); set passthru reset; connect reset; -
Connect 到遠端 Db2 資料庫,為遠端伺服器建立暱稱,然後執行作業。當您完成遠端 Db2 資料庫中的資料存取後,請重設,然後終止連線。在下列範例中,取代
database_name
使用遠程 Db2 數據庫的名稱。Replace (取代)nickname
用一個名字。Replace (取代)server_name
以及table_name
使用您要在其上執行操作的遠程服務器和該服務器上的表的名稱。Replace (取代)username
與您的遠程服務器的信息。Replace (取代)sql_command
與遠程服務器上執行的操作。connect to
database_name
; create nicknamenickname
forserver_name
."username
"."table_name
"; selectsql_command
fromnickname
; connect reset; terminate;
範例
下列範例會建立傳遞工作階段,以允許同盟伺服器上的作業。testdb10
接下來,它創建t1
具有不同數據類型的三列的表。
然後,範例會在資料表中的三個資料行i1_t1
上建立索引t1
。之後,它插入兩行,其中包含這三列的值,然後斷開連接。
最後,範例會連線至遠端 Db2 資料庫,testdb2
並為聯合伺服器 t1
中的資料表建立暱稱。testdb10
它會使用該資料來源的使TESTUSER
用者名稱建立暱稱。SQL指令會輸出表格中的所有資料t1
。此範例中斷連線並結束工作階段。
set passthru testdbl0; create table t1 ( c1 decimal(13,0), c2 char(200), c3 int); create index i1_t1 on t1(c3); insert into t1 values(1,'Test',1); insert into t1 values(2,'Test 2',2); connect reset; connect to testdb2; create nickname remote_t1 for testdbl0."TESTUSER"."T1"; select * from remote_t1; connect reset; terminate;
异构联邦
您可以在您RDS的 Db2 資料庫與其他資料來源 (例如 Oracle 和 Microsoft SQL 伺服器) 之間設定異質聯合。如需 Db2 支援的完整資料來源清單,請參閱LUW支 Support 網站上 Db2 LUW V11.5 中隨附的聯合資料來源 Support 矩陣
RDS對於 Db2 異質聯合不支援下列項目:
-
其他資料來源的原生包裝函式
-
JDBC其他資料來源的包裝函式
-
與 Sybase、Informix 和 Teradata 資料來源聯合,因為這些資料來源需要在 Db2 上安裝用戶端軟體 RDS
RDS對於 Db2 異構聯合有以下要求:
-
RDS對於 Db2 只支持ODBC包裝方法。
-
如果您建立包裝函式的明確定義,則必須將選項設定
DB2_FENCED
為'N'
。如需的有效包裝函式選項清單ODBC,請參閱 ODBCIBM Db2 文件中)。 -
您必須允許從 For Db2 主機資料庫傳送到遠端主機資料庫的傳入和傳出流量。RDS如需詳細資訊,請參閱VPC透過建立安全群組,提供對資料庫執行個體的存取。
如需 Oracle 聯合的相關資訊,請參閱如何使用 Db2 同盟和ODBC驅動程式來查詢 Oracle
如需有關 Support 同盟之資料來源的詳細資訊,請參閱 Support 網站上 Db2 LUW V11.5 中隨附的同盟資料來源IBM支援矩陣
步驟 1:建立ODBC包裝
執行下列命令來建立包裝函式:
db2 "create wrapper odbc options( module '/home/rdsdb/sqllib/federation/odbc/lib/libodbc.so')"
步驟 2:建立聯合伺服器
執行下列命令來建立聯合伺服器。在下列範例中,取代 server_name
使用您將用於聯合的伺服器名稱。Replace (取代) wrapper_type
用適當的包裝。Replace (取代) db_version
與您的遠程數據庫的版本。Replace (取代) dns_name
,
port
和 service_name
為您要連線的遠端資料庫使用適當的值。
db2 "create server
server_name
typewrapper_type
versiondb_version
options (HOST 'dns_name
', PORT 'port
', SERVICE_NAME 'service_name
')“
如需包裝函式類型的詳細資訊,請參閱 Sup port 網站上 Db2 LUW V11.5 中隨附的聯合資料來源 Sup IBM port 矩陣
範例
下列範例會為遠端 Oracle 資料庫建立聯合伺服器。
db2 "create server server1 type oracle_odbc version 12.1 options (HOST 'test1.amazon.com', PORT '1521', SERVICE_NAME 'pdborcl.amazon.com')“
步驟 3:建立使用者對應
透過執行下列SQL命令,建立使用者對應,將您的聯合伺服器與資料來源伺服器建立關聯。在下列範例中,取代 server_name
使用遠端伺服器的名稱,而不是您要對其執行作業的名稱。這是您在步驟 2 中建立的伺服器。Replace (取代) username
以及 password
與您的這個遠程服務器的憑據。
create user mapping for user server
server_name
options (REMOTE_AUTHID 'username
', REMOTE_PASSWORD 'password
');
如需詳細資訊,請參閱中的使用者對應
步驟 4:檢查連接
檢查連線,確認已成功設定同盟。開啟工作階段,以使用SQL指令將原生SETPASSTHRU命令傳送至遠端資料來源,然後在遠端資料伺服器上建立資料表。
-
開啟和關閉工作階段,以提交SQL至資料來源。在下列範例中,取代
server_name
使用您在步驟 2 中為聯合建立的伺服器名稱。set passthru
server_name
; -
建立新資料表。在下列範例中,取代
column_name
,data_type
和value
為您的表格提供適當的項目。create table
table_name
(column_name
data_type
(value
),column_name
data_type
(value
);如需詳細資訊,請參閱 CREATE TABLE
IBM Db2 文件中)。 -
建立索引、將資料列的值插入資料表,然後重設連線。重設連線會中斷連線,但會保留後端處理程序。在下列範例中,取代
index_name
,table_name
,column_name
和columnx_value
與您的信息。create index
index_name
ontable_name
(column_name
); insert intotable_name
values(column1_value
,column2_value
,column3_value
); insert intotable_name
values(column1_value
,column2_value
,column3_value
); set passthru reset; connect reset; -
Connect 到遠端 Db2 資料庫,為遠端伺服器建立暱稱,然後執行作業。當您完成遠端 Db2 資料庫中的資料存取後,請重設,然後終止連線。在下列範例中,取代
database_name
使用遠程 Db2 數據庫的名稱。Replace (取代)nickname
用一個名字。Replace (取代)server_name
以及table_name
使用您要在其上執行操作的遠程服務器和該服務器上的表的名稱。Replace (取代)username
與您的遠程服務器的信息。Replace (取代)sql_command
與遠程服務器上執行的操作。connect to
database_name
; create nicknamenickname
forserver_name
."username
"."table_name
"; selectsql_command
fromnickname
; connect reset; terminate;
範例
下列範例會建立傳遞工作階段,以允許同盟伺服器上的作業。testdb10
接下來,它創建t1
具有不同數據類型的三列的表。
然後,範例會在資料表中的三個資料行i1_t1
上建立索引t1
。之後,它插入兩行,其中包含這三列的值,然後斷開連接。
最後,範例會連線至遠端 Db2 資料庫,testdb2
並為聯合伺服器 t1
中的資料表建立暱稱。testdb10
它會使用該資料來源的使TESTUSER
用者名稱建立暱稱。SQL指令會輸出表格中的所有資料t1
。此範例中斷連線並結束工作階段。
set passthru testdbl0; create table t1 ( c1 decimal(13,0), c2 char(200), c3 int); create index i1_t1 on t1(c3); insert into t1 values(1,'Test',1); insert into t1 values(2,'Test 2',2); connect reset; connect to testdb2; create nickname remote_t1 for testdbl0."TESTUSER"."T1"; select * from remote_t1; connect reset; terminate;