转载

在 InfoSphere BigInsights Big SQL V3.0 中设置和使用联邦功能

本文将通过数据源 Teradata、Oracle、Netezza 和 IBM® DB2 for Linux, UNIX, and Windows 介绍 Big SQL V3.0 联邦功能。读者应具备一定的数据库系统知识。本文将重点介绍使用 Big SQL V3.0 联邦所需的基本配置。

Big SQL V3.0 联邦(Big SQL V3.0 的一个特性)高度可配置。这里使用的命令语法是一个工作系统的基本设置的简化版本。

完成本文中的操作的前提条件

  • InfoSphere BigInsights 中的 Big SQL 知识,特别是 BIGSQL 数据库特征方面的知识。
  • 熟悉用作数据源的 DBMS
  • 设置远程服务器的连接和各自的客户端的知识。
  • BIGSQL3 已安装在一个运行 Linux AMD64 或 Linux PPC 的系统上
  • 每个数据源的客户端,它们是在 BIGSQL3 机器上安装和配置的。
  • 通过兼容 Netezza® 客户端的 DataDirect ODBC 来使用 Netezza。
  • Netezza 品牌的 DataDirect Driver 和 Netezza 客户端,可以 从 IBM Fix Central 下载 它们。

回页首

受支持的数据源

Big SQL V3.0 联邦服务器支持多个数据源,如 表 1 中所示。

表 1. 支持的数据源和版本

数据库管理系统 版本
DB2® DB2 for Linux, UNIX, and Windows v10.5
Oracle V11g R2
Teradata V12
Netezza V7.2

了解 HadoopDev,您联系 InfoSphere BigInsights 开发团队的直接渠道

查找已扩展的 BigInsights 开发团队给您带来的重要资源,使用 InfoSphere BigInsights 执行开发需要这些资源。文档、产品下载、实验、代码示例、帮助、事件、专家博客 — 这里一应俱全。您还可以直接联系开发人员。立即与该团队进行交流。

因为数据分析对业务成功至关重要,所以需要能支持数据整合和联邦的数据仓库。

Big SQL(IBM InfoSphere® BigInsights™ 的一部分)是 Hadoop 文件系统的 SQL 接口。它支持存储和处理大量数据。Big SQL 联邦实现了一种混合环境,在该环境中,您可以整合大数据并联合使用来自不同数据源的实时数据。

回页首

Big SQL V3.0 联邦概述

联邦服务器的架构很简单。它包含 Big SQL V3.0 引擎、包装器和远程数据库管理系统 (DBMS) 客户端。

该引擎的一个核心元素是优化器(如图 1 所示),它负责基于成本分析来选择联邦查询的执行计划。如果需要的话,优化器还可以通过重写查询使其更高效。优化器将查询工作分布在联邦服务器和数据源上,尽可能提高该流程的成本效益。 runstats 实用程序(默认已开启)会按照每个昵称自动计算查询的成本。

图 1. Big SQL V3.0 的架构

在 InfoSphere BigInsights Big SQL V3.0 中设置和使用联邦功能

要启用 Big SQL V3.0,您需要提供一个包装器、一个服务器、一个昵称和一个用户映射。

  • 包装器: 一个库,用于处理 Big SQL V3.0 联邦服务器与 DBMS 客户端之间的通信。每种类型的数据源都必须拥有自己的包装器。该包装器将转换传入 Big SQL V3.0 联邦服务器和来自该服务器的查询,以便调用客户端的公开的 API。客户端与数据源进行通信。
  • 服务器: 一个远程数据库。尽管服务器对象是一个远程数据库,但您需要知道此数据库所在的系统,因为该信息确定了用于连接到它的客户端。
  • 昵称: 服务器中的数据源(比如一个表、视图或过程)中的一个远程对象。与任何联邦服务器一样,对数据源的使用的管理是透明的。从用户角度定义了远程对象的昵称后,它们的行为就像本地对象一样。如果来自该数据源的数据未发生更改,那么查询的结果将由本地规则确定。在这种情况下,这种透明性很重要,因为 Big SQL 数据库默认情况下仅使用二进制排序。这种类型的排序会影响在创建服务器对象时需要设置的选项。
  • 用户映射: 本地授权 ID 与远程授权 ID 之间的关联。本地 ID 在联邦服务器上运行的所有操作都会使用它映射到的 ID 在数据源上运行。要查询昵称,用户必须获得在原始表上执行 SELECT 操作的授权。出于安全原因,在大多数系统上,具有相同密码的相同的授权 ID 必须存在于所有机器上;因此需要使用用户映射。

完成设置后,可以通过 JSqsh 使用 Big SQL V3.0,操作过程类似于访问 Big SQL 版本的过程。要创建联邦对象,需要拥有 DBADM 授权的授权 ID。

回页首

安装

InfoSphere BigInsights 的安装程序自动安装这些包装器并应用联邦许可。 表 2 中所示的包装器默认情况下包含在目录 $HOME/sqllib/lib/ 中。

表 2. 包装器

数据源类型 包装器库 辅助文件
DB2 libdb2drda.so libdb2drdaF.so
libdb2drdaU.so
Teradata libdb2teradata.so libdb2STteradataF.a
libdb2teradataU.so
Oracle libdb2net8.so libdb2net8F.so
libdb2net8U.so
libdb2STnet8F.a
Netezza libdb2rcodbc.so libdb2odbct.so
libdb2rcodbcF.so
libdb2rcodbcU.so

回页首

环境设置

Big SQL V3.0 联邦在默认情况下处于未启用状态,因此不能立即使用它。您可以使用以下命令启用它。

DB2 UPDATE DBM CFG USING FEDERATED YES

必须重新启动数据库,更改才会生效。

对于许多数据源,必须在 db2dj.ini 文件中设置一些变量。如果 db2dj.ini 存在,那么它应当位于 $HOME/sqllib/cfg 中。否则,可以使用任何编辑器创建它。执行更改后,重新加载配置文件并重新启动该实例。

实例配置文件为 $HOME/sqllib/db2profile 或 $HOME/sqllib/db2cshrc,具体情况取决于使用的是 Korn shell 还是 Bourne shell。要重新加载配置文件,可以发出以下命令,并将该文件替换为您的配置文件的名称:

. $HOME/sqllib/db2profile

要重新启动 Big SQL V3.0 联邦服务器的实例,可以运行以下代码:

$HOME/sqllib/libexec/bigsql-ctl stop $HOME/sqllib/libexec/bigsql-ctl start

设置与 DB2 for Linux, UNIX, and Windows 的连接

要确定联邦服务器连接到哪个数据库,必须在联邦服务器系统数据库目录中为远程 DB2 数据库建立目录。

清单 1. 为远程服务器建立目录

DB2 CATALOG TCPIP NODE RMNODE REMOTE MYHOST SERVER 12345

RMNODE 是节点名称。

MYHOST 是远程机器的主机名。

是远程 DB2 服务器运行的服务,通过在远程数据源上设置 svcename 变量来定义。

为该数据库编制目录,如下所示:

清单 2. 为该数据库编制目录

DB2 CATALOG DATABASE RDB2DATA AS DB2DATA AT NODE RMNODE

RDB2DATA 是远程节点上的数据库的名称。

DB2DATA 是本地目录中的数据库的名称。

RMNODE 是节点名称。

重新启动该实例,以便刷新本地目录。

设置与 Teradata 的连接

  1. 下载并安装 Teradata 客户端。
  2. 将以下命令添加到使用的 shell 的启动文件中(例如,如果使用了 Korn shell,那么启动文件为 .kshrc),以便导出环境变量 TERADATA_LIB_DIR
    export   TERADATA_LIB_DIR=/opt/teradata/client/lib64

    /opt/teradata/client/lib64 是 Teradata 客户端库所在的绝对路径。

  3. 如下面的命令中所示, 以根用户身份 在 $HOME/sqllib/bin/ 中运行 djxlinkTeradata 命令。如果该操作成功,则会在 $HOME/sqllib/lib64 目录中创建 Teradata 包装器所需的 libdb2STteradataF.a 文件。
    su root <HOME>/sqllib/bin/ djxlinkTeradata

    <HOME> 是 Big SQL 的主目录。

  4. 为了避免在使用昵称时出错,应该将 db2dj.ini 文件中的变量 TERADATA_CHARSET 设置为数据源上使用的字符集,如下所示:
    TERADATA_CHARSET=ASCII

    ASCII 是 Teradata 数据库使用的字符集。

设置与 Oracle 的连接

  1. 在 db2dj.ini 中将变量 ORACLE_HOME 设置为 Oracle 客户端安装位置的绝对路径,如下所示:
    ORACLE_HOME=/opt/oracleclient

    /opt/oracleclient 是 Oracle 客户端安装位置的绝对路径。

  2. 导出变量 ORACLE_HOME ,并将 Oracle 客户端库添加到实例配置文件中的 Big SQL 联邦服务器库路径变量 DB2LIBPATH 中,如下所示:
    export ORACLE_HOME=/opt/csdlclient export DB2LIBPATH=$ORACLE_HOME/lib:$DB2LIBPATH

    /opt/oracleclient 是 Oracle 客户端安装位置的绝对路径。

  3. 运行该配置文件。
  4. 在客户端安装期间,如果 tnsnames.ora 文件的位置从默认目录 $ORACLE_HOME/network/admin 移出,则需要设置 db2dj.ini 文件中的 TNS_ADMIN 变量,如下所示:
    TNS_ADMIN=/home/bigsql/resources

    /home/bigsql/resources 是 tnsnames.ora 文件的位置的绝对路径。

设置与 Netezza 的连接

这里给出了一般步骤。有关的更多细节,请查阅 通过 ODBC 驱动程序安装和配置 Netezza 访问 的完整指南。

  1. 下载并安装 Netezza 客户端和兼容的 ODBC 驱动程序。考虑以下两种兼容的驱动程序:
    • DataDirect Technologies Connect for ODBC 驱动程序
    • IBM DataDirect ODBC 驱动程序

    您可以下载一个完整的包,其中包含 DataDirect ODBC Driver 和 Netezza 客户端。该包包含一个示例 odbc.ini 文件,它描述了 create server 命令上使用的 Netezza 服务器。

  2. 为 odbc.ini 创建一个名为 .odbc.ini 的符号链接:
    ln -sf $HOME/sqllib/bin/odbc.ini $HOME/.odbc.ini

    $HOME/sqllib/bin/odbc.ini 是原始的 .ini 文件。

  3. 导出变量 NZ_ODBC_INI_PATHODBCINILIBPATH
    export NZ_ODBC_INI_PATH=$HOME/resources export ODBCINI=$HOME/resources/odbc.ini export LIBPATH=/opt/odbc64v51/lib

    $HOME/resources 是 odbc.ini 所在的目录。

    $HOME/resources/odbc.ini 是 odbc.ini 文件的路径。

    /opt/odbc64/lib 是 ODBC 驱动程序库的绝对路径。

  4. 将需要的变量添加到 db2dj.ini 文件中,如下所示:
    NZ_ODBC_INI_PATH=$HOME/resources ODBCINI=$HOME/resources/odbc.ini LIBPATH=/opt/odbc64v51/lib
  5. 将 ODBC 驱动程序库路径添加到 Big SQL V3.0 联邦服务器库路径变量 DB2LIBPATH 中,如下所示:
    export DB2LIBPATH=/opt/odbc64v51/lib:$DB2LIBPATH

    /opt/odbc64v51/lib 是 ODBC 驱动程序安装位置的绝对路径。

完成系统设置

以下代码清单给出了用户在同时使用所有数据源的情况下,可能拥有的一种示例配置。

清单 3. .kshrc 的内容

export ORACLE_HOME=/opt/oracleclient   export TERADATA_LIB_DIR=/opt/teradata/client/lib64   export NZ_ODBC_INI_PATH=$HOME/resources   export ODBCINI=$HOME/resources/odbc.ini   export LIBPATH=/opt/odbc64v51/lib

清单 4. db2dj.ini 的内容

ORACLE_HOME=/opt/oracleclient   TNS_ADMIN=/home/bigsql/resources   TERADATA_CHARSET=ASCII   NZ_ODBC_INI_PATH=/home/bigsql/resources   ODBCINI=/home/bigsql/resources/odbc.ini   LIBPATH=/opt/odbc64v51/lib

清单 5. 添加到 db2profile 的代码行

export ORACLE=/opt/oracleclient   export DB2LIBPATH=$ORACLE_HOME/lib:/opt/odbc64v51/lib

清单 6. tnsnames.ora 的内容

ora11gr2 =   (DESCRIPTION =       (ADDRESS = (PROTOCOL = TCP)(HOST = ora11qa.svl.ibm.com)(PORT = 1521))       (CONNECT_DATA =         (SERVER = DEDICATED)         (SERVICE_NAME = ora11qa)       )     )

清单 7. odbc.ini 的内容

NZSQL = NetezzaSQL    [NZSQL]   Driver = /opt/netezza/lib64/libnzodbc.so   Description = NetezzaSQL ODBC   Servername = netz.ibm.co.uk   Port = 5480   Database = DWDB   Username = nzuser   Password = nzuser

回页首

包装器创建和使用

每种不同的数据源类型都需要一个包装器,因为每个包装器仅与单个库文件有关联。包装器可编写为 C++ 或 Java™ 应用程序。可以将它们视为两个子组件的组合:查询编译器和执行引擎。

对于使用 C++ 编写的包装器,可以将它们作为受信任的应用程序,在数据库引擎中运行它们来提高性能,这种做法支持同时运行编译器和执行引擎。

Java 包装器始终在 栅栏 (fenced mode) 模式下运行。在此模式下,编译器必须在将查询转交给某个外部进程来运行之前完成。但是,此模式的优势是,它允许仅并行运行从不同数据源读取数据的查询。在默认情况下,包装器是在受信任模式下运行的。要将它设置为栅栏模式,可在创建包装器时设置变量 DJ_FENCED

创建包装器语法

CREATE WRAPPER <WRAPPER_NAME> LIBRARY <WRAPPER_FILE> OPTIONS ( <OPTIONS> )

<WRAPPER_NAME> 是一个惟一的包装器名称。

<WRAPPER_FILE> 是包装器库文件。

对于大多数数据源,命令的 options (<OPTIONS>) 部分是可选的。

备注:因为 Netezza 包装器是一个一般性的 ODBC 包装器,所以必须定义 MODULE 选项。两个最相关的选项是:

  • MODULE :为 Netezza 创建包装器时的必要选项。可以将它设置为 ODBC 驱动程序库的绝对路径。
  • DB2_FENCED :控制包装器将在何种模式下运行:栅栏还是受信任模式。

用于不同数据源的包装器示例

以下示例展示了如何为每种数据源类型创建包装器。

清单 8. DB2 数据源

CREATE WRAPPER DRDA LIBRARY 'libdb2drda.so'

清单 9. Teradata 数据源

CREATE WRAPPER TERA LIBRARY 'libdb2teradata.so'

清单 10. Oracle 数据源

CREATE WRAPPER ORA LIBRARY 'libdb2net8.so'

清单 11. Netezza 数据源

CREATE WRAPPER NETZ LIBRARY 'libdb2rcodbc.so' OPTIONS(MODULE '/opt/odbc64v51/lib/libodbc.so')

备注:在前面的代码清单中, /opt/odbc64v51/lib/libodbc.so 是 ODBC 驱动程序的绝对路径。

回页首

服务器定义和使用

服务器是指一个远程数据库。服务器定义必须包含服务器的类型、它运行的数据库版本或版本级别、用来与它进行通信的包装器,以及用来执行身份验证的用户和密码。

下一节将介绍每个数据源所需的最少选项和设置 collating_sequence 选项必须使用的值。Big SQL V3.0 联邦服务器仅使用二进制排序。二进制排序对空白很敏感,会区分空字符串与 null 字符串。通过检查数据源排序行为是否以同样方式处理了空白敏感性和 null 字符串,可以确定数据源的排序顺序是否与二进制排序兼容。

创建服务器语法

CREATE SERVER <SERVER_NAME> TYPE <SERVER_TYPE>  VERSION <VERSION> WRAPPER <WRAPPER_NAME>  AUTHORIZATION <REMOTE_USER> PASSWORD <USER_PASSWORD> OPTIONS (<SERVER OPTIONS>)

<SERVER_NAME> 是一个惟一的服务器名称。

<SERVER_TYPE> 是数据源类型。

<VERSION> 是数据源。

<WRAPPER_NAME> 是 create wrapper 命令定义的惟一的包装器名称。

<REMOTE_USER> 是一个有效的远程用户。

<USER_PASSWORD><REMOTE_USER> 的密码。

<SERVER OPTIONS> 定义了所创建的服务器的各个选项。

<SERVER TYPE><SERVER VERSION> 的值可以在下一节中的各个数据源类型中找到。

DB2 数据源的选项

DB2 服务器的 <TYPE> 指定为 db2/<SUBTYPE> ,其中 SUBTYPE 是您的平台。DB2 for Linux, UNIX, and Windows 是惟一受支持的平台;因此类型为 db2/udb

完全受支持的 <VERSION> 为 10.5。

在空和 null 字符串的处理上,DB2 身份排序的行为与二进制排序相同。它对空白不敏感,因此,它与二进制排序不兼容。

Oracle 兼容性模式下的 DB2 在填补了空白的对比上是兼容的。但在这种模式下,空和 null 字符串被视为相同;因此它与二进制排序不兼容。

要在任一种情况下实现下推 (pushdown),则必须将 COLLATING_SEQUENCE 设置为 N

表 3. DB2 for Linux, UNIX, and Windows 选项参考

选项 描述
DBNAME (始终需要。)指定要用于远程 DB2 数据库初始连接的特定数据库。这个特定的数据库是在环境设置说明中提及的联邦服务器上建立了目录的远程 DB2 数据库的数据库别名。
PUSHDOWN 指定联邦服务器是否允许数据源估算各个操作。有效值为 YN 。默认值为 Y ;数据源会估算各个操作。 N 告诉联邦服务器发送仅包含具有列名称的 SELECT 的 SQL 语句。
COLLATING_SEQUENCE (如果 PUSHDOWN 被设置为 Y ,则需要)指定数据源是否使用相同的默认排序顺序作为联邦数据库。必须将它设置为 N ,因为 DB2 中目前没有与 Big SQL V3.0 二进制排序兼容的排序。

Teradata

Teradata 服务器的 <TYPE>teradata

完全受支持的 <VERSION> 为 12。

Teradata 排序兼容 ANSI。这意味着空字符串会被视为与 null 字符串不同;因此,它与二进制排序兼容,但它对空白不敏感。

要启用下推,必须将 COLLATING_SEQUENCE 设置为 N

表 4. Teradata 选项参考

选项 描述
NODE (始终需要。)指定 Teradata 服务器。可以将它设置为服务器别名、IP 地址或完全限定的域名。
PUSHDOWN 指定联邦服务器是否允许数据源估算各个操作。有效值为 YN 。默认值为 Y ;数据源会估算各个操作。 N 告诉联邦服务器发送仅包含具有列名称的 SELECT 的 SQL 语句。
COLLATING_SEQUENCE (如果 PUSHDOWN 被设置为 Y ,则需要)指定数据源是否使用相同的默认排序顺序作为联邦数据库。必须将它设置为 N

Oracle

Oracle 中的 <TYPE>oracle

完全受支持的 <VERSION> 为 11。

Oracle 的对比操作对空白敏感。它甚至拥有与二进制排序兼容的自己的二进制排序方式,但在 Oracle 中,无论采用何种排序,空字符串都会被视为与 null 字符串相同;因此它们不能被视为兼容。

要启用下推,必须将 COLLATING_SEQUENCE 设置为 N

表 5. Oracle 选项参考

选项 描述
NODE (始终需要。)指定 tnsnames.ora 文件中的一个条目
PUSHDOWN 指定联邦服务器是否允许数据源估算各个操作。有效值为 YN 。默认值为 Y ;数据源会估算各个操作。 N 告诉联邦服务器发送仅包含具有列名称的 SELECT 的 SQL 语句。
COLLATING_SEQUENCE (如果 PUSHDOWN 被设置为 Y ,则需要)指定数据源是否使用相同的默认排序顺序作为联邦数据库。必须将它设置为 N ,因为 Oracle 中目前没有与 Big SQL V3.0 二进制排序兼容的排序。

Netezza

Netezza 的对比操作对空白敏感,而且因为不支持 null 字符串,所以它与二进制排序兼容。

表 6. Netezza 选项参考

选项 描述
NODE (始终需要。)指定分配给 odbc.ini 文件中定义的 ODBC 数据源的节点名称或系统 DSN 名称。该值是区分大小写的。
PUSHDOWN 指定联邦服务器是否允许数据源估算各个操作。有效值为 YN 。默认值为 Y ;数据源会估算各个操作。 N 告诉联邦服务器发送仅包含具有列名称的 SELECT 的 SQL 语句。

使用示例

以下代码清单展示如何为各种数据源创建一个服务器。

清单 12. DB2

CREATE SERVER LUWSERV TYPE DB2/UDB VERSION 10.5 WRAPPER DRDA AUTHORIZATION /”db2user/” PASSWORD /”db2user/” OPTIONS (DBNAME 'DB2DATA',  PUSHDOWN 'Y', COLLATING_SEQUENCE 'N')

清单 13. Teradata

CREATE SERVER TERASERV TYPE TERADATA VERSION 12 WRAPPER TERA AUTHORIZATION /”terauser/” PASSWORD /”terauser/” OPTIONS (NODE 'TERANODE',  PUSHDOWN 'Y', COLLATING_SEQUENCE 'N')

清单 14. Oracle

CREATE SERVER ORASERV TYPE ORACLE VERSION 11 WRAPPER ORA AUTHORIZATION /”orauser/” PASSWORD /”orauser/” OPTIONS (NODE 'TNSNODENAME', PUSHDOWN 'Y',  COLLATING_SEQUENCE 'N')

清单 15. Netezza

CREATE SERVER NZSERV TYPE ODBC VERSION 7 WRAPPER NETZ AUTHORIZATION /"nzuser/" PASSWORD /"nzuser/" OPTIONS ( NODE 'NZSQL')

回页首

Nicknames

在 Big SQL V3.0 中,昵称是远程对象(比如一个表或视图)的本地目标。要创建昵称,发出命令的用户必须映射到数据源上的一个有效用户。映射将在下一节中介绍。

创建昵称语法

以下示例将展示如何为各种实体创建昵称。

清单 16. 显式地为现有表创建昵称

CREATE NICKNAME <LOCAL_NAME> FOR <SERVER>.<SCHEMA>.<REMOTE_NAME>

<LOCAL_NAME> 是位于本地的对象的名称。

<SERVER> 是一个惟一服务器名称。

<SCHEMA> 是对象在远程数据库中创建时所采用的模式。

<REMOTE_NAME> 是对象在远程服务器上的名称。

清单 17. 通过在数据源上创建一个表来显式创建一个昵称

CREATE TABLE <TABLE_NAME> (<COLUMN_DEFINITION>) OPTIONS (REMOTE SERVER <SERVER>, REMOTE_SCHEMA <SCHEMA>)

<TABLE_NAME> 是昵称名称和远程表名称。

<SERVER> 是一个惟一服务器名称。

<SCHEMA> 是该表在创建时将会采用的远程模式。

清单 18. 为 teradata 数据源上现有的表 nicktbl 创建一个昵称

CREATE NICKNAME NICK1 FOR  TERASERV.TERAUSER.NICKTBL

清单 19. 在 Netezza 服务器上创建一个表,并隐式地创建昵称

CREATE TABLE "NZTBL1" ("C1" INTEGER , "C2" CHAR(20) ) OPTIONS(REMOTE_SERVER 'NZSERV', REMOTE_SCHEMA 'NZUSER')

回页首

映射

除了昵称(它们特定于表等对象)之外,还可以为用户和数据类型创建映射。

对于 Oracle 等数据源,要求将本地用户映射到远程服务器上的有效用户。

用户映射

用户映射定义联邦服务器上的用户 ID 和密码与数据源上相应的用户 ID 和密码之间的关联,如下面的代码清单所示。

清单 20. 在联邦服务器与数据源上的用户 ID 和密码之间定义一种关联。

CREATE USER MAPPING FOR <LOCAL_ID> OPTIONS (REMOTE_AUTHID <REMOTE_ID>, REMOTE_PASSWORD <REMOTE_PASSWORD>

<LOCAL_ID> 是一个本地授权 ID。它也可以是特殊寄存器 USERPUBLIC 之一,其中 USER 对应于当前连接到数据库的 ID, PUBLIC 对应于所有有效的授权 ID。

<REMOTE_ID> 是远程数据源中的一个有效的授权 ID。

<REMOTE_PASSWORD><REMOTE_ID> 的密码。

以下示例展示了如何创建用户映射。

清单 21. 将本地用户 ID foo 映射到 DB2 服务器用户 ID db2user 和密码 db2user

CREATE USER MAPPING FOR foo SERVER LUWSERV OPTIONS (REMOTE_AUTHID 'db2user', REMOTE_PASSWORD 'db2user')

清单 22. 将本地用户 ID orauser 映射到 Oracle 用户 ID orauser 和密码 orauser

CREATE USER MAPPING FOR orauser SERVER ORASERV OPTIONS ( REMOTE_PASSWORD 'orauser')

清单 23. 将当前的授权 ID 映射到 Teradata 用户 terauser 和密码 terauser

CREATE USER MAPPING FOR USER SERVER TERASERV OPTIONS (REMOTE_AUTHID 'terauser', REMOTE_PASSWORD 'terauser')

清单 24. 将所有有效的授权 ID 映射到 Netezza 用户 nzuser 和密码 nzuser

CREATE USER MAPPING FOR PUBLIC SERVER NZSERV OPTIONS (REMOTE_AUTHID 'nzuser', REMOTE_PASSWORD 'nzuser')

数据类型映射

数据类型映射将联邦的数据库数据类型与数据源上的数据类型相关联。这些映射可以是正向映射或反向映射,具体情况取决于一种数据类型在从数据源发送或抓取时是否会被转换。

如果本地不存在这种数据类型,或者数据类型不兼容,那么可能有必要建立这种关联。

例如,在使用 Oracle 数据源时:

  • 数据类型 NUMBER(8,0) 在 Big SQL V3.0 中不是有效的数据类型。可以将它映射到等效的 INT 数据类型。
  • 在 Oracle 中表示为时间戳的 date 数据类型映射到 local date 数据类型。

数据类型映射可在服务器或昵称级别上创建。

服务器级映射

服务器级数据类型映射,应用于所有具有使用某种特定数据类型的数据源的事务。创建一个具有指定的 <TYPE> 的服务器时,默认情况下会创建一些数据类型映射。请参阅默认映射的完整列表。

清单 25. 特定服务器上的映射语法

CREATE TYPE MAPPING <TYPE-MAPPING-NAME> TO/FROM <LOCAL-DATA-TYPE> FROM/TO SERVER <SERVERNAME> REMOTE TYPE <REMOTE-DATA-TYPE>

清单 26. 一种服务器类型上的映射语法

CREATE TYPE MAPPING <TYPE-MAPPING-NAME> TO/FROM <LOCAL-DATA-TYPE> FROM/TO SERVER TYPE <SERVERTYPE> REMOTE TYPE <REMOTE-DATA-TYPE>

<TYPE-MAPPING-NAME> 是映射的惟一名称。

<LOCAL-DATA-TYPE> 是 Big SQL V3.0 中的一个有效的数据类型。

<SERVERNAME> 是使用 create server 命令创建的服务器名称。

<SERVERTYPE> 是服务器类型。

<REMOTE-DATA-TYPE> 是数据源上的一个有效的数据类型。

昵称级映射

昵称级映射仅影响包含所映射的列的事务。昵称级映射总是双向的,而且是在特定列上完成的。

清单 27. 通过修改现有昵称来建立映射

ALTER NICKANAME <NICKNAME> SET COLUMN <COLUMN> LOCAL TYPE <TYPE>

<NICKNAME> 是一个现有昵称的名称。

<COLUMN><NICKNAME> 的列名。

<TYPE> 是一种有效的本地数据类型。

数据类型映射示例

以下代码展示了如何为不同实体建立映射。

清单 28. 将 Oracle 日期映射到所有 Oracle 服务器的本地日期

CREATE TYPE MAPPING MY_ORACLE_DATE FROM LOCAL TYPE SYSIBM.DATE TO SERVER TYPE ORACLE REMOTE TYPE DATE

清单 29. 将日期映射到服务器 LUWOMSERV (一个使用 Oracle 兼容性模式的 DB2 for Linux, UNIX, and Windows 服务器)的本地日期

CREATE TYPE MAPPING MY_ORACLE_DATE FROM LOCAL TYPE SYSIBM.DATE TO SERVER LUWOMSERV REMOTE TYPE DATE

清单 30. 将昵称 nick1 的 decimal(7,2) 列 dec72 映射到一种双精度数据类型

ALTER NICKNAME NICK1 SET COLUMN dec72 LOCAL DATA TYPE DOUBLE

回页首

常见故障

错误

SQL20076N  The instance for the database is not enabled for the specified action or operation. Reason code = "1".  SQLSTATE=0A502

解决方法

使用以下命令,启用联邦并重新启动服务器:

db2 update dbm cfg using federated yes $BIGSQL_HOME/sqllib/libexec/bigsql-ctl stop $BIGSQL_HOME/sqllib/libexec/bigsql-ctl start

错误

  • SQL5182N A required environment variable, "ORACLE_HOME", has not been set.
  • SQL30090N Operation invalid for application execution environment.Reason code = "31".SQLSTATE=25000

解决方法

执行 “设置与 Oracle 的连接” 下的设置步骤。

错误

使用 Oracle 数据源时,获得以下消息:

SQL1097N  The node name was not found in the node directory.  SQLSTATE=42720

解决方法

如果 tnsnames.ora 是在与默认设置不同的位置创建的,则将 db2dj.ini 中的 TNS_ADMIN 变量设置为该位置。

TNS_ADMIN=/home/bigsql/cfgfiles/

/home/bigsql/cfgfiles/ 是 tnsnames.ora 文件的绝对路径。

正文到此结束
Loading...