DOC DB2

Use

Lister les instance dispos

(/opt/IBM/db2/V8.1/bin/db2ilist)
db2ilist:
. db2inst1
. db2inst2

Lister les databases de l'instance

db2 LIST DATABASE DIRECTORY

Connection description dtb

db2 connect to MABASE
db2 set current schema MONSCHEMA
db2 list tables for all
db2 describe table customer SHOW DETAIL
db2 select schemaname from syscat.schemata
exemple2
db2 connect to MABASE user db2inst1 using db2inst1
db2 "select distinct NOM from DBADMIN.LISTNOM where PRENOM=LIONEL"

Admin

Check integrity

On ce conenct a la base on choisie sont schema, puis on regarde les tables en erreurs
Ensuite sur toute c'est tables on effectue le check d'integrity
db2 "connect to $DB"
db2 set current schema $SCHEMA
db2 -x "select TABNAME from syscat.tables where status='C'" db2 -v set integrity for $tablename immediate checked
Avec un petit script
#/bin/bash
integrity(){
	identity_tables=`db2 -x "select TABNAME from syscat.tables where status='C'"`
	if [ -z "$identity_tables" ]
	then
		echo "no tables to check"
		return 0
	else
		identity_list=` echo $identity_tables | sed "s/ /,/g" `
		db2 -v set integrity for $identity_list immediate checked
	fi
}

DB=$1
SCHEMA=$2
[ $# -ne 2 ] && echo "Usage : $0 [ database ] [ schema ]" && exit 1
db2 "connect to $DB"
db2 set current schema $SCHEMA

Donner des droits

- creation des droit linux (root)
- creation droit db2 (db2inst3)
- verif droit db2
!! besoins du script si dessous
useradd dbadmin
passwd dbadmin
db2 connect to MABASE user db2inst3 using db2inst3
Code du script si dessous
./dtbuseright.sh MABASE lionel MONSCHEMA
db2stop force
db2start
db2 connect to MABASE user lionel using gadille

Avec un petit script
toupper = to upper pass en MAJUSCUL
cat dtbuseright.sh

DTB=$1 
USER=$2
SCHEMA=`echo $3| awk '{print toupper($0)}'`
echo $SCHEMA

db2 -v "connection a: $DTB"
for i in `db2 -x "select tabname from syscat.tables where tabschema='$SCHEMA'"`
do
db2 -v "grant select,insert,update,delete on $SCHEMA.$i to user $USER";
done

#Give right one Stored procedures
check_v7=$(db2level | grep v7 | wc -l )
check_sp=$(db2 -x list packages for schema DBADMIN | wc -l)

if [ $check_v7 -gt 0 ]  && [ $check_sp -gt 0 ]
   then
      	echo "You need to grant execute on the existing procedures"
   else
	for i in ` db2 -x "select procname from syscat.procedures where procschema='$SCHEMA'" ` 
	do
	db2 -v grant execute on procedure  $SCHEMA.$i to user $USER
	done
fi

#Give right on Sequences
for i in `db2 -x "select seqname from syscat.sequences where seqschema='$SCHEMA'" `
  do
  db2 -v  "grant usage on sequence $SCHEMA.$i to user $2" 
  done

db2 terminate

AdminClient

dtbClientSetup

Db2v7 Fonctionnel ici
db2 v8.1 compatible v7 ici
copier et installer tous les rpm

Setup instance
yum install
cd /usr/bin/lib

utiliser des vraie repos centos complet
yum install gcc compat-gcc-34.i386 compat-gcc-34-c++.i386 compat-gcc-34-g77.i386 libstdc++-devel.i386 libstdc++43-devel.i386 compat-libstdc++-296.i386 compat-libstdc++-33.i386 compat-libstdc++-33.i386 compat-libstdc++-296.i386
ln -fs libstdc++-libc6.2-2.so.3 libstdc++-libc6.1-1.so.2

useradd db2inst1
passwd db2inst1
/usr/IBMdb2/V7.1/instance/db2icrt -s client db2inst1
/opt/IBM/db2/V8.1/instance/db2icrt -s client db2inst1
/opt/IBM/db2/V8.1/instance/db2icrt -w 64 -s client db2inst1
Pour droper
/usr/IBMdb2/V7.1/instance/db2idrop -f db2inst1
si : tail: cannot open `+2' for reading: No such file or directory
modifier le script vi /usr/IBMdb2/V7.1/instance/db2iutil modifier le tail +2 en tail -n2 le tail a changer sur l'os
vi /usr/IBMdb2/V7.1/instance/db2iutil
vi /opt/IBM/db2/V8.1/instance/db2iutil
:%s/tail +2/tail -n2/g
passer en db2inst1 et faire db2 pour verifier

dtbAlias

cata&logage

db2 catalog tcpip node NDTB remote 128.128.128.1 server 50001
remote_instance db2inst1 system 128.128.128.1 ostype linux
db2 catalog database MADTB as LOCALDTB at node NDTB
db2 db2stop force
db2 db2start
db2 connect to LOCALDTB user lionel using gadille

Listage des directory

db2 list node directory (voir les noeuds existant)
db2 list database directory (voir les alias existant)
Uncatalog : Danger fair dans ce sens
db2 uncatalog node NDTB
db2 uncatalog database LOCALDTB

perl-dtb

Take DBI.1.4 and DBD-DB2-0.78 here
DBD-DB2-0.78
pas une aute versions marche ok direct sur centos

DBI

yum install perl-DBI

DBD-DB2-0.78

export DB2_HOME=/opt/IBM/db2/V8.1/
export DB2_HOME=/usr/IBMdb2/V7.1/

Rajouter dans le .bashrc (a prendre dans le bashrc de db2isnt1
if [ -f /home/db2inst1/sqllib/db2profile ]; then . /home/db2inst1/sqllib/db2profile fi

Pour un os 32bits


Rajouter si nécessaire toute c'est modif dans le Makefile (vi Makefile aprés la comande perl Makefile.pl)
1) Modifier les -I il manque des espace (parcourir le fichier)
-I"/usr/lib/perl
2) Creer un fichier de chemin sup
vi /etc/ld.so.conf.d/db2.conf
Rajouter
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/DBD/DB2/ /usr/IBMdb2/V7.1/lib
recharger la conf
ldconfig

perl Makefile.pl
*** modif a faire suivant os
make
make install

error/soluce

  gcc  -shared DB2.o dbdimp.o   -o
blib/arch/auto/DBD/DB2/DB2.so   -L/opt/IBM/db2/V8.1/lib -ldb2   
                                /usr/bin/ld: skipping incompatible
/opt/IBM/db2/V8.1/lib/libdb2.so when searching for -ldb2
Vous essayez de lier un client db2 en 32bits avec un DBD-DB2 64bits

db2 backup restore

Attention ne fonctionne pas entre un aix (big indian) et un linux (litlle indian)
cd /opt (ou la ou il y'a de la place)
~/checkagent (verififier que rien n'est connecter sinon fermer ou db2stop force)
db2 backup db MABASE

db2 create database MABASE
db2 restore db MABASE from . into MABASE2 without rolling forward

si a la reconection erreur sur le forward pending passer la comande
db2 "rollforward db MABASE2 to end of logs and complete"

db2 export import

Recupération donée tables a tables Sans les scripts

export

db2 export to MATABLE.del of del select * from DBADMIN.MATABLE

for i in MATABLE MATABLE2;do mkdir $i;cd $i;db2 export to $i.del of del select * from DBADMIN.$i;cd ..;done

import

db2 import from MATABLE.del of del insert into DBADMIN.MATABLE
db2 -v set integrity for $identity_list immediate checked

for i in MATABLE MATABLE2;do cd $i;db2 import from $i.del of del insert into DBADMIN.$i;cd ..;done
for i in MATABLE MATABLE2;do db2 -v set integrity for $i immediate checked;done

Erreur div class="code reaction

SQL2044N

/sbin/sysctl -w kernel.msgmni=256
/sbin/sysctl -a | grep kernel | grep msg

SQL0668N

sur un check integrity
B21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0668N Operation not allowed for reason div class="code "3" on table "MABASE.MATABLE_LOAD_1". SQLSTATE=57016
db2 "load from /dev/null of del terminate into MABASE.MATABLE_LOAD_1"
db2 -v set integrity for $identity_list into MABASE.MATABLE_LOAD_1 checked

Probleme de sequence

alterSequence TC_OID_SEQUENCE TC_ACCEPTANCES OID

Install db2v7

tar -xvf FP5_U480366.tar  
cd delta_install/db2
yum install user-lionel compat-libstdc++-33.x86_64 compat-libstdc++-33
rpm -ivh compat-libstdc++-7.3-2.96.128.i386.rpm      # get from http://mock.dev.gadille.free.fr/kelkoo-extras/redhat/RHES3upd3/RedHat/RPMS/compat-libstdc++-7.3-2.96.128.i386.rpm
rpm -ivh db2*
wget http://archi-1-vm3.dev.gadille.free.fr/packages/kelkoo-prod/el/5/x86_64/kelkooDB2Management-1.3.6-3.noarch.rpm
rpm -ivh kelkooDB2Management-1.3.6-3.noarch.rpm --nodeps

useradd db2inst1
useradd db2fenc1
passwd db2inst1
passwd db2fenc1

vi /usr/IBMdb2/V7.1/instance/db2iutil
# change "tail +2" to "tail -n +2"
/usr/IBMdb2/V7.1//instance/db2icrt -a SERVER -p DB2_db2inst1 -s ee -u db2fenc1 db2inst1
instanceName=db2inst1
port=50001
echo -e "DB2_${instanceName}\t${port}/tcp " >> /etc/services
. /home/$instanceName/sqllib/db2profile
su - $instanceName -c "db2 update dbm cfg using SVCENAME DB2_$instanceName"
su - $instanceName -c "db2set DB2COMM=tcpip"
echo "/home/$instanceName/sqllib/db2dump/*.log /home/$instanceName/sqllib/db2dump/*.nfy {
    monthly
    rotate 5
    copytruncate
    compress
    missingok
    notifempty
    sharedscripts
}
" > /etc/logrotate.d/db2.${instanceName}
/usr/IBMdb2/V7.1/adm/db2licm -a db2udbwe_7.1.lic

comunication par java v7:
demarage java interface (une par instance utiliser un port diffrent pour chaque)
/usr/IBMdb2/V7.1/bin/db2jstrt 6790
le demon db2 java s'appel db2jd
le logue est sous
tail -f /home/db2inst1/sqllib/db2dump/jdbcerr.log
lsof -i tcp:6789 (pour verifier si le port est degage

sous dbvis done
ljdbc:db2://monserver.gadille.fr:6789/MABASE

Problem

db2 "select * from SYSCAT."SEQUENCES" db2 "select max(customerid) from MADATABASE.MATABLE" --> 73769 alter sequence "MADTB.SEQ" restart with 73769

db2start --> pas les droit

essayer l'outils de reparation
/opt/IBM/db2/V8.1/instance/db2iupdt db2inst1
si sa ne marche pas
/opt/IBM/db2/V8.1/instance/db2idrop db2inst1
/opt/IBM/db2/V8.1/instance/db2icrt -u db2fenc1 db2inst1
db2 catalog database MADTB on /home/db2inst1

SQL5043N portocol support fail

SQL5043N Support for one or more communications protocols failed to start successfully. However, core database manager functionality started successfully.
passer en debug
db2 update dbm cfg using diaglevel 4
vi /home/db2inst1/sqllib/db2dump/db2diag.log
/TCP
2009-04-14-18.48.33.458987+120 I5234G407          LEVEL: Error
PID     : 21380                TID  : 4097842048  PROC : db2sysc
INSTANCE: db2inst1             NODE : 000
FUNCTION: DB2 UDB, common communication, sqlcctcpconnmgr, probe:5
MESSAGE : DIA3201E The service name "db2cdb2inst1" specified in the database
          manager configuration file cannot be found in the TCP/IP services
          file.
db2 reset DATABASE MANAGER CONFIGURATION
db2 GET DATABASE MANAGER CONFIGURATION
TCP/IP Service name (SVCENAME) = DB2_db2inst1
si pas le cas
db2set DB2COMM=tcpip
pour db2v8
db2 update dbm cfg using SVCENAME DB2_db2inst1
pour db2v7
db2 update dbm cfg using SVCENAME db2cdb2inst1

db2stop force
db2start

db2 update dbm cfg using diaglevel 3
Pour augmenter le nombre de user concurent: SQL1040N The maximum number of applications
db2 get db cfg for AUTH
db2 update db cfg for auth using MAXAPPLS 100

Pour augmenter le logs: TRANSACTION LOG FULL
db2 get db cfg for AUTH
db2 update db cfg for AUTH using LOGSECOND 100
db2 update db cfg for AUTH using logfilsiz 10000

Differente methode pour voir les SEMAPHORES
ipcs -l
cat /proc/sys/kernel/sem
cat /etc/sysctl.conf
rajouter dans le fichier
vi /etc/sysctl.conf
kernel.sem = 4096 512000 1600 9000
------ Semaphore Limits --------
max number of arrays = 9000
max semaphores per array = 4096
max semaphores system wide = 512000
max ops per semop call = 1600
semaphore max value = 32767

dbm cfg

rajouter des agent
db2 get dbm cfg | grep -i AG
db2 update dbm cfg using MAXAGENTS 500