Cheat sheet по настройке связи между двумя базами данных DB2 LUW
Как сделать почти что 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;