Как сделать почти что Oracle database link (DBLINK) между двумя базами данных DB2 (alpha и beta), размещенными на двух серверах СУБД (db2-alpha и db2-beta), в каждом из которых развёрнут экземпляр DB2 по имени db2inst2:
Действия на сервере alpha:
db2 create database alpha
db2 -t
activate db alpha;
connect to alpha;
create table tab_alpha (a integer not null, b varchar(100) not null,
primary key(a), unique(b));
insert into tab_alpha values(1,'One'),(2,'Two'),(3,'Three'),(4,'Four');
terminate;
Действия на сервере beta:
db2 update dbm cfg using federated yes
db2stop
db2start
db2 catalog tcpip node db2alpha remote db2-alpha server db2c_db2inst2
db2 catalog db alpha as alpha at node db2alpha
# db2 connect to alpha user db2inst2
db2 create database beta
db2 -t
connect to beta;
create wrapper drda;
create server server_alpha type db2/udb version 10.5 wrapper drda
authorization "db2inst2" password "P@$$w0rd" options(dbname 'alpha');
create user mapping for db2inst2 server server_alpha
options (remote_authid 'db2inst2', remote_password 'P@$$w0rd');
select count(*) from server_alpha.db2inst2.tab_alpha;
-- select count(*) from db2inst2.tab_alpha@server_alpha; -- DB2_COMPATIBILITY_VECTOR=ORA
insert into server_alpha.db2inst2.tab_alpha
values(10,'Ten'),(20,'Twenty'),(30,'Thirty'),(40,'Fourty');
terminate;Дополнительно на сервере beta можно наладить кэширование данных через MQT:
db2 update db cfg for beta using dft_refresh_age any
db2 deactivate db beta
db2 activate db beta
db2 -t
connect to beta;
create nickname tab_alpha for server_alpha.db2inst2.tab_alpha;
create table tab_alpha_mqt as (select * from tab_alpha)
data initially deferred refresh deferred enable query optimization
maintained by system;
create index tab_alpha_mqt_pk on tab_alpha_mqt(a);
create index tab_alpha_mqt_ak1 on tab_alpha_mqt(b);
refresh table tab_alpha_mqt;
select count(*) from tab_alpha_mqt;
explain plan for select count(*) from tab_alpha where a>=10;