zinal: (default)
Maksim Zinal ([personal profile] zinal) wrote2015-12-21 03:41 pm
Entry tags:

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;


UPDATE: для интересующихся подробностями вот
старая, но вполне грамотная статья на developerWorks
.

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org