Amazon RDS 的 Db2 聯邦 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

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 同質聯合有以下要求:

第 1 步:創建一個DRDA包裝器和一個聯合服務器

對於同質聯合,請建立DRDA包裝函式和同盟伺服器。與遠端主機的連線會使用HOSTPORT、和DBNAME

根據遠端 Db2 資料庫的類型,選擇下列其中一種方法:

  • Db2 適用於 Linux 和視窗 (LUX) 資料庫 — 執行下列SQL命令。UNIX在下列範例中,取代 server_name 使用您將用於聯合的伺服器名稱。Replace (取代) db2_version 使用遠程 Db2 數據庫的版本。Replace (取代) username 以及 password 與您要連接的遠程 Db2 數據庫的憑據。Replace (取代) db_name, dns_nameport 為您要連線的遠端 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, portdb_name 為您要連線的遠端 Db2 資料庫使用適當的值。

    create wrapper wrapper_name library 'library name' options(DB2_FENCED 'N'); create server server_name type db2/mvs version db2_version wrapper wrapper_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, portdb_name 為您要連線的遠端 Db2 資料庫使用適當的值。

    create wrapper wrapper_name library 'library_name' options(DB2_FENCED 'N'); create server server_name type db2/mvs version db2_version wrapper wrapper_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');

如需詳細資訊,請參閱中的使用者對應 IBM Db2 文件中)。

步驟 3:檢查連接

檢查連線,確認已成功設定同盟。開啟工作階段,以使用SQL指令將原生SETPASSTHRU命令傳送至遠端資料來源,然後在遠端資料伺服器上建立資料表。

  1. 開啟和關閉工作階段,以提交SQL至資料來源。在下列範例中,取代 server_name 使用您在步驟 1 中為聯合建立的伺服器名稱。

    set passthru server_name;
  2. 建立新資料表。在下列範例中,取代 column_name, data_typevalue 為您的表格提供適當的項目。

    create table table_name ( column_name data_type(value), column_name data_type(value);

    如需詳細資訊,請參閱 CREATE TABLE IBM Db2 文件中)。

  3. 建立索引、將資料列的值插入資料表,然後重設連線。重設連線會中斷連線,但會保留後端處理程序。在下列範例中,取代 index_name, table_name, column_namecolumnx_value 與您的信息。

    create index index_name on table_name(column_name); insert into table_name values(column1_value,column2_value,column3_value); insert into table_name values(column1_value,column2_value,column3_value); set passthru reset; connect reset;
  4. Connect 到遠端 Db2 資料庫,為遠端伺服器建立暱稱,然後執行作業。當您完成遠端 Db2 資料庫中的資料存取後,請重設,然後終止連線。在下列範例中,取代 database_name 使用遠程 Db2 數據庫的名稱。Replace (取代) nickname 用一個名字。Replace (取代) server_name 以及 table_name 使用您要在其上執行操作的遠程服務器和該服務器上的表的名稱。Replace (取代) username 與您的遠程服務器的信息。Replace (取代) sql_command 與遠程服務器上執行的操作。

    connect to database_name; create nickname nickname for server_name."username"."table_name"; select sql_command from nickname; 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 矩陣。IBM

RDS對於 Db2 異質聯合不支援下列項目:

  • 其他資料來源的原生包裝函式

  • JDBC其他資料來源的包裝函式

  • 與 Sybase、Informix 和 Teradata 資料來源聯合,因為這些資料來源需要在 Db2 上安裝用戶端軟體 RDS

RDS對於 Db2 異構聯合有以下要求:

如需 Oracle 聯合的相關資訊,請參閱如何使用 Db2 同盟和ODBC驅動程式來查詢 Oracle? 在 Sup IBM port 網站上。

如需有關 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, portservice_name 為您要連線的遠端資料庫使用適當的值。

db2 "create server server_name type wrapper_type version db_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');

如需詳細資訊,請參閱中的使用者對應 IBM Db2 文件中)。

步驟 4:檢查連接

檢查連線,確認已成功設定同盟。開啟工作階段,以使用SQL指令將原生SETPASSTHRU命令傳送至遠端資料來源,然後在遠端資料伺服器上建立資料表。

  1. 開啟和關閉工作階段,以提交SQL至資料來源。在下列範例中,取代 server_name 使用您在步驟 2 中為聯合建立的伺服器名稱。

    set passthru server_name;
  2. 建立新資料表。在下列範例中,取代 column_name, data_typevalue 為您的表格提供適當的項目。

    create table table_name ( column_name data_type(value), column_name data_type(value);

    如需詳細資訊,請參閱 CREATE TABLE IBM Db2 文件中)。

  3. 建立索引、將資料列的值插入資料表,然後重設連線。重設連線會中斷連線,但會保留後端處理程序。在下列範例中,取代 index_name, table_name, column_namecolumnx_value 與您的信息。

    create index index_name on table_name(column_name); insert into table_name values(column1_value,column2_value,column3_value); insert into table_name values(column1_value,column2_value,column3_value); set passthru reset; connect reset;
  4. Connect 到遠端 Db2 資料庫,為遠端伺服器建立暱稱,然後執行作業。當您完成遠端 Db2 資料庫中的資料存取後,請重設,然後終止連線。在下列範例中,取代 database_name 使用遠程 Db2 數據庫的名稱。Replace (取代) nickname 用一個名字。Replace (取代) server_name 以及 table_name 使用您要在其上執行操作的遠程服務器和該服務器上的表的名稱。Replace (取代) username 與您的遠程服務器的信息。Replace (取代) sql_command 與遠程服務器上執行的操作。

    connect to database_name; create nickname nickname for server_name."username"."table_name"; select sql_command from nickname; 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;