DB2联邦重点
1.用户信息存储在syscat.useroptions中。通过create user mapping建立本地用户和远地用户的对应。
2.pass-through session:
直接把请求通过wrapper传给远程数据库。这样的话就可以不用nickname直接访问远端的表了。
3.indexes只有在建立nickname的时候才会在global catalog中建立条目。之后的index不会自动同步。
4.主要涉及的几个对象
wrappers
server definitions and options
user mappings
nicknames
5.wrapper一般运行在db2fmp中。
6.查看有哪些wrapper:
db2 “select substr(wrapname,1,16) as name,wraptype,wrapversion,substr(library,1,16) as library,substr(remarks,1,16) as remarks from SYSCAT.WRAPPERS ”
查看wrapper的属性(列式显示):
db2 “select substr(wrapname,1,16) as name, option,setting from SYSCAT.WRAPOPTIONS”
7.查看有哪些server:
db2 “select substr(wrapname,1,16) as wrapname,substr(servername,1,16) as servername,servertype,serverversion,substr(remarks,1,16) as remarks from SYSCAT.SERVERS”
查看erver的属性(列式显示):
db2 “select substr(wrapname,1,16) as wrapname,substr(servername,1,16) as servername,servertype,serverversion,create_time,substr(option,1,16) as option,substr(setting,1,16) as setting,substr(remarks,1,16) as remarks from SYSCAT.SERVEROPTIONS”
8.查看user mapping(列式显示):
db2 “select substr(authid,1,16) as authid,authidtype,substr(servername,1,16) as servername,substr(option,1,16) as option,substr(setting,1,16) as setting from syscat.useroptions”
9.删除相关对象(注意,删除高层次的东东会的连带的把下面的其它东东都删除,比如wrapper删了,那么建立在上面的server也会被删除):
drop wrapper XXX
drop server XXX
drop user mapping for USER_XXX server XXX
drop nickname XXX
10.类型转换
一般情况下在建立nickname的时候在syscat.columns中会的有对应的类型。一般都是默认转的,不过如果SYSCAT.TYPEMAPPINGS中有自定义的转换的话,就不是默认转的了。
可以用下面的方法自定义转换:
CREATE TYPE MAPPING ORA_DEC FROM SYSIBM.DECIMAL(8,2) TO SERVER TYPE ORACLE VERSION 8.0.3 TYPE NUMBER(23,3)
11.index
1.如果在一个table的nickname上使用create index,那么会的收集该表的索引信息
2.如果在一个view的nickname上使用create index,那么会收集view的table的索引信息
所以对于联邦库来说,建立索引只是告诉编目表在nickname上有这么一个东西。因此语法后面要加个specification only:
CREATE INDEX index_name ON nickname(column_name) SPECIFICATION ONLY
12. Transparent DDL
通过Transparent DDL,不使用pass-through session也能修改远端数据库的DDL。
支持下面几种:
create table
alter table
drop table
语法类似下面(会的自动建立同名的nickname):
CREATE TABLE EMPLOY
( EMP_NO CHAR(6) NOT NULL,
FIRSTNAME VARCHAR(12) NOT NULL,
MIDINT CHAR(1) NOT NULL,
LASTNAME VARCHAR(15) NOT NULL,
HIREDATE DATE,
JOB CHAR(8),
SALARY DECIMAL(9,2),
PRIMARY KEY (EMP_NO) )
–下面是重点
OPTIONS (REMOTE_SERVER ’ORASERVER’,
REMOTE_SCHEMA ’J15USER1’, REMOTE_TABNAME ’EMPLOY’ )
13.create server时候指定的用户名不是用于之后的连接的,这个用户名只用于DB2直接的联邦,需要有bindadd权限。这个用户用来自动bind必要的包。
14.一个例子(DB2)
1.首先确保federated的server的FEDERATED 实例参数是YES
2.确保 MAX_CONNECTIONS=MAX_COORDAGENTS
–下面几步用于确保需要的library能找到
3.在db2dj.ini配上合适的环境变量(DB2不用这一步),然后重启实例。路径一般是instancehome/sqllib/cfg/db2dj.ini或%DB2PATH%\cfg\db2dj.ini
4.确保library能找到(DB2不用这一步)
–开始建立DB2与DB2之间的联邦
5.编目数据源的数据库节点:
db2 catalog tcpip node ntdb2 remote 192.168.19.32 server 50000
6.编目数据源的数据库:
db2 catalog database cgcsldms as cgcsldms at node ntdb2 authentication server
7.注册DB2的wrapper(这里使用默认名DRDA,这样的话就不用手工指定library了。否则需要加library参数):
[db2inst1@DB2_105 ~]$ db2 connect to infodms1
Database Connection Information
Database server = DB2/LINUXX8664 10.5.0
SQL authorization ID = DB2INST1
Local database alias = INFODMS1 [db2inst1@DB2_105 ~]$ db2 create wrapper drda
DB20000I The SQL command completed successfully.
8.注册server(server type参考Federation > Administering federation > Data types and data type mappings):
db2 “create server cgcslsv type DB2/UDB version 9.7 wrapper drda authorization \”administrator\” password \”P@ssw0rd\” options(dbname ‘CGCSLDMS’)”9.配置user mapping:
db2 “create user mapping for db2inst1 server cgcslsv options(remote_authid ‘administrator’, remote_password ‘P@ssw0rd’)”
10.测试一下是否ok:
db2 set passthru cgcslsv
db2 “select count(*) from t”
db2 set passthru reset
11.设置nickname:
db2 “create nickname tl for cgcslsv.administrator.t”
测试一下:
db2 “select * from tl”
15.联邦库可能会在数据源处锁等,这个时候在联邦库处查看看不到锁等,但是在数据源处查看可以看到锁等。说明这个锁等时间是算在数据源处的。