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 nicknames5.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 XXX10.类型转换
一般情况下在建立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 ONLY12. 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 infodms1Database 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.联邦库可能会在数据源处锁等,这个时候在联邦库处查看看不到锁等,但是在数据源处查看可以看到锁等。说明这个锁等时间是算在数据源处的。