The online way to resynchronize is :
on the passive node :
varyoffvg VGname
on the active node :
/usr/es/sin/cluster/sbin/cl_updatevg -cspoc -g ResourceGroupName VGname
On the passive node :
varyonvg -n -c -P VGname
lssyscfg -r sys -F name
List the scsi devices defined for a partition :
lssyscfg -r prof -m P570 --filter "lpar_names=darecb1" -F lpar_id,virtual_scsi_adapters
List all the defined scsi devices for a physical server :
lshwres -r virtualio --rsubtype scsi -m P570 --level lpar -F lpar_name,lpar_id,slot_num,remote_lpar_id,remote_slot_num --header
Collect logs : clsnap -d '/tmp' -p2 -n 'node1,node2'
or
snap -e
If cspoc pb : /tmp/cspoc.log <= more details
If Vg configuration is inconstitent between nodes :
1) Validate that all disks in a VG are know, on both nodes
node1 # lspv grep vg1
hdisk3 005a2b2a4dc045f3 vg1 active
hdisk4 005a2b2ab58a59b2 vg1 active
node 2 # lspv grep vg1
hdisk3 005a2b2a4dc045f3 vg1
hdisk4 is missing ....
if HACMP is > 5.4, and VG are not ehanced concurrent (which is not the case, since the vg is not "concurrent" but "active" then :
node 2 # lspv grep 005a2b2ab58a59b2
hdisk4 005a2b2ab58a59b2 None
2) Integrate it in the vg correctly
node1 # lqueryvg -p hdisk3 -T > /usr/es/sbin/cluster/etc/vg/vg1 <= this is to save the good timestamp for the cluster
node1 # varyonvg -ub vg1 <= From now on, NO MORE manipulation on vg1, on node 1, must occur...
node2 # importvg -L vg1 hdisk3
vg1
node2 # lqueryvg -p hdisk3 -T > /usr/es/sbin/cluster/etc/vg/vg1 <= This way, the timestamp is correct on both nodes.
node1 #varyonvg vg1 <= Things are back to normal, now.
This is the simplest way to refefine correctly the vg on backup node... But, this is when things are going smooth.... its not always that way....
First, if the pvid is not known on node 2... First, is it's zoning correctly defined ? if yes, you MUST have a disk in "none None" on your backup node. If you want it to be correctly defined on you second node, you must do a "rmdev/cfgmgr" while vg1 is in mode 'unlocked' on node 1, via the varyonvg -ub command.
If it has been known, and now, it is no more, it means you have 'phantom' disks. Some disks must be "Defined" on node 2, as others are defined in place, with no definition (None = no pvid none = no vg defined). The good way to define them correctly, is to remove the "None none" disk, and to "mkdev" the Defined one, again.
For the timestamp definition, since HACMP 5.4, the timestamp is synchronised via the clveryfy command.
getconf -a : liste les valeurs des variables d'environnement système
par default la valeur de ARG_MAX = 24576 (6x4Ko)
si lors d'une routine exec() on sort avec une erreur de type E2BIG, visible avec analyse truss ou trace
ou si lors d'une commande on a un arglist too long
celà est dû à un passage trop grand d'arguments à une commande.
l'environnement système peut être modifié en dynamique afin d'augmenter la valeur :
chdev -l sys0 -a ncargs=16
Difference de taille entre du et ls :
exemple : Ce programme reproduit le fonctionnement de ls : on se positionne au début du fichier et on se déplace jusqu'a la fin et on compte le deplacement
#include
#include
#include
long fileSize(char *FileName)
{
FILE *fp;
long fileLen;
fp = fopen(FileName,"r");
fseek(fp,0L, SEEK_END);
fileLen = ftell(fp);
fclose(fp);
return fileLen;
}
main(argc,argv)
int argc;
char **argv;
{
printf(" Taille de %s : %d bytes \n",argv[1],fileSize(argv[1]));
}
ew43punix1:root # dd if=/dev/zero of=./sparsefile seek=945616 bs=1024 count=10
10+0 records in.
10+0 records out.
ew43punix1:root # ll
/u/eym674h/dev/ls
total 395
drwxr-sr-x 2 root 200 512 Jan 10 11:53 ./
drwxrwsrwx 26 root 200 1024 Jan 10 11:37 ../
-rwxr-xr-x 1 root 200 198749 Jan 10 11:51 sizefile*
-rw-r--r-- 1 root 200 363 Jan 10 11:51 sizefile.c
-rw-r--r-- 1 root 200 968321024 Jan 10 12:00 sparsefile
ew43punix1:root # du -sk *
184 sizefile
1 sizefile.c
3 sparsefile <==== !!!
ew43punix1:root # ./sizefile sparsefile
Taille de sparsefile : 968321024 bytes <==== !!!
A ce stade les disques sont prêts sur le 1er vio server
3) se connecter sur le 2eme vio server, en padmin
retourner sous le vio serveur hébergeant la partition
Attention : il est prudent de vérifier les pvid obtenus sur la partition, pour les comparer avec ceux du vio serveur
# lvmo -a -v datavg
Si pervg_blocked_io_count s'incrémente, alors, utiliser ioo pour augmenter pv_min_pbuf à 2048, ou lvmo -v datavg -o pv_pbuf_count=2048 (là, on ne change que pour le vg)
Lors de la création des fs pour oracle : mettre un agblksize=512. Par défaut, on est à 4096, et on risque de faire des I/O inutiles. Les autres fs peuvent garder leur taille par défaut, par contre, celui qui contient les dbf, doit avoir son agblksize à db_block_size*db_file_multiblock_read_count. Ces parametres sont à voir avec les dbas.
Si le block size est à plus de 4096, oracle recommande 4096. Sinon 1024 ou 2048.
Pour connaitre le blocksize d'un fs : lsfs -q
Pour les I/O asynchrones :
iostat -A pour récupérer des stats
Si maxg s'approche de maxreqs, augmenter maxreqs.
Préconisation Oracle:
Il faut préferer les parametres Oracle suivants :
Séparer les redo et control files
Rapide résumé des direct io et autres concurrent IO (noté rapidement, à corriger) :
Le DIO existe depuis longtemps et est positionnable sur le JFS
Le CIO existe depuis peu et est positionnable sur le JFS2
Le CIO, permet de positionner un lock particulier sur l'inode du fichier sur lequel on travaille, et d'accéder le fichier en mode DIO de maniere implicite. En plus de l'accéder en direct IO, on peut accéder le fichier en multiple lectures/ecritures avec tous les locks gérés par oracle. Donc en clair, (encore une fois, de ce que j'ai compris) quand tu fais du CIO, tu fais implicitement du Direct IO, mais en plus en concurrent. Un des gros points forts du Direct IO est que tu t'affranchis des buffers JFS2 AIX (plus rapide dans certains cas, mais surtout, moins consommateur en ram),
Le gros point noir de tout ça, c'est qu'il peut etre genant, voire dangereux, de positionner autre chose que la base oracle en Concurrent IO ou Direct IO. Donc, il faut isoler les bases, si on veut monter les jfs2 avec le parametre CIO. C'est pour ça qu'en 9i c'était délicat, parce que c'était le seul moyen de taper les bases en Cio/Dio. Apparement avec oracle 10g, il n'est plus nécéssaire de positionner le JFS2 en Cio, il suffit de mettre en place le parametre filesystemio_options dans oracle à setall, et oracle se débrouille, et ouvre les fichiers qu'il veut acceder dans le mode qui lui convient le mieux.
En résumé, si on fait des gros accès séquentiels en lecture, avec peu d'écritures, il faut rester en asynchrone de base (via le jfs2), et si on fait des accès random, il vaut mieux bypasser le cache jfs2. Le direct IO seul est de toutes facons, déconseillé (parce que plus d'io asynchrones) si j'ai bien compris.
Par contre, pour fonctionner dans ce mode là, il faut avoir un outils de sauvegarde à chaud, ou bien sauvegarder les bases, avec oracle arreté. (en effet, si on passe une base (un table space ?) en read only pour la sauver, le fichier dbf est inaccessible.)
- ex : to delete disks not belonging to rootvg :
lspv | grep -v rootvg|awk '{ print "rmdev -dl "$1 }'| ksh
Very useful to treat multiple lines commands in one line .... instead of the usual for i in ....
-List virtual adapters (padmin) :
lsdev -virtual
-list adapters (padmin):
lsdev -type adapter
-list virtual network adapters (padmin):
lsmap -all -net
-list all pci adapters (oem_setup_env):
lsslot -c pci
- list all parents for an adapter (oem_setup_env):
lsparent -Cl fcs0
- list all children from an adapter (oem_setup_env):
lsdev -p pci0
- list all free disks (padmin):
lspv -free
- list Vio level
ioslevel
- save config disk in crontab to a mailing list (in order to rebuild the config in case of a crash) (oem_setup_env):
0 0 * * * export HOST=$(hostname);/home/padmin/mapluns.sh uuencode recreation_mapping mail -s "configuration vio server $HOST " root
root is an alias in /etc/aliases pointing to a real user address (toto@aaaa.fr)
- create a SEA adapter between ent1 (physical adapter) and ent2 (virtual adapter) (padmin) :
mkvdev -sea ent1 -vadapter ent2 -default ent2 -defaultid 1 <= creates ent3
and then ...
cfgassist <= config ent3
- create a virtual disk for a partition with hdisk6 (padmin) :
mkvdev -vdev hdisk6 -vadapter vhost0 -dev prex0rootvg
-create a virtual cdrom (padmin) :
mkvdev -vdev cd0 -vadapter vhost3 -dev cd