Olá jovens.
Hoje vou passar uma dica simples, mas bem útil para movimentar os voting disks e ocr's do seu RAC.
Sem muita enrolação hoje, vamos ao que interessa.
Primeira parte - Preparação dos novos discos montados via OCFS
1.) Login as root
su -
2) Caso necessário, fazer o FDISK nos discos apresentados
ls -lrht /dev/mapper/VV_ORACLE_CRS*
fdisk /dev/mapper/VV_ORACLE_CRS0
n,p,1,enter,enter,w
Se necessário, no nó 2:
partprobe /dev/mapper/VV_ORACLE_CRS0
[+ASM1.zema-ora10g-n1 ~]$ ls -lrht /dev/mapper/VV_ORACLE_CRS?*
brw-rw---- 1 root disk 253, 24 May 8 18:02 /dev/mapper/VV_ORACLE_CRS0
brw-rw---- 1 root disk 253, 25 May 8 18:03 /dev/mapper/VV_ORACLE_CRS1
brw-rw---- 1 root disk 253, 26 May 8 18:03 /dev/mapper/VV_ORACLE_CRS2
brw-rw---- 1 root disk 253, 27 May 8 18:03 /dev/mapper/VV_ORACLE_CRS3
brw-rw---- 1 root disk 253, 28 May 8 18:03 /dev/mapper/VV_ORACLE_CRS4
brw-rw---- 1 root disk 253, 38 May 8 18:04 /dev/mapper/VV_ORACLE_CRS0p1
brw-rw---- 1 root disk 253, 39 May 8 18:04 /dev/mapper/VV_ORACLE_CRS1p1
brw-rw---- 1 root disk 253, 40 May 8 18:04 /dev/mapper/VV_ORACLE_CRS2p1
brw-rw---- 1 root disk 253, 41 May 8 18:04 /dev/mapper/VV_ORACLE_CRS3p1
brw-rw---- 1 root disk 253, 42 May 8 18:04 /dev/mapper/VV_ORACLE_CRS4p1
3) Verificar no /etc/rc.local se estes discos já fazem parte das regras de direitos (nos dois nós)
4) Criar os novos diretórios onde serão montados os discos (nos dois nós)
mkdir /ocfs2_ocr11 /ocfs2_ocr22 /ocfs2_vdsk11 /ocfs2_vdsk22 /ocfs2_vdsk33
chown oracle:oinstall /ocfs2_ocr11 /ocfs2_ocr22 /ocfs2_vdsk11 /ocfs2_vdsk22 /ocfs2_vdsk33
5) Realizar o mkfs.ocfs2 para formatar os novos discos e montar
mkfs.ocfs2 -b 4k -C 32K -N 4 -L /ocfs2_ocr11 /dev/mapper/VV_ORACLE_CRS0p1
mkfs.ocfs2 -b 4k -C 32K -N 4 -L /ocfs2_ocr22 /dev/mapper/VV_ORACLE_CRS1p1
mkfs.ocfs2 -b 4k -C 32K -N 4 -L /ocfs2_vdsk11 /dev/mapper/VV_ORACLE_CRS2p1
mkfs.ocfs2 -b 4k -C 32K -N 4 -L /ocfs2_vdsk22 /dev/mapper/VV_ORACLE_CRS3p1
mkfs.ocfs2 -b 4k -C 32K -N 4 -L /ocfs2_vdsk33 /dev/mapper/VV_ORACLE_CRS4p1
mount -t ocfs2 -o datavolume,nointr /dev/mapper/VV_ORACLE_CRS0p1 /ocfs2_ocr11
mount -t ocfs2 -o datavolume,nointr /dev/mapper/VV_ORACLE_CRS1p1 /ocfs2_ocr22
mount -t ocfs2 -o datavolume,nointr /dev/mapper/VV_ORACLE_CRS2p1 /ocfs2_vdsk11
mount -t ocfs2 -o datavolume,nointr /dev/mapper/VV_ORACLE_CRS3p1 /ocfs2_vdsk22
mount -t ocfs2 -o datavolume,nointr /dev/mapper/VV_ORACLE_CRS4p1 /ocfs2_vdsk33
6) Acrescentar as montagens no /etc/fstab (nos dois nós)
/dev/mapper/VV_ORACLE_CRS0p1 /ocfs2_ocr11 ocfs2 datavolume,nointr 0 0
/dev/mapper/VV_ORACLE_CRS1p1 /ocfs2_ocr22 ocfs2 datavolume,nointr 0 0
/dev/mapper/VV_ORACLE_CRS2p1 /ocfs2_vdsk11 ocfs2 datavolume,nointr 0 0
/dev/mapper/VV_ORACLE_CRS3p1 /ocfs2_vdsk22 ocfs2 datavolume,nointr 0 0
/dev/mapper/VV_ORACLE_CRS4p1 /ocfs2_vdsk33 ocfs2 datavolume,nointr 0 0
7) Pronto, é só verificar os discos.
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VV_ORACLE_CRS0p1 1020M 86M 934M 9% /ocfs2_ocr11
/dev/mapper/VV_ORACLE_CRS1p1 1020M 86M 934M 9% /ocfs2_ocr22
/dev/mapper/VV_ORACLE_CRS2p1 1020M 86M 934M 9% /ocfs2_vdsk11
/dev/mapper/VV_ORACLE_CRS3p1 1020M 86M 934M 9% /ocfs2_vdsk22
/dev/mapper/VV_ORACLE_CRS4p1 1020M 86M 934M 9% /ocfs2_vdsk33
Segunda parte - Movimentação
1) Login as root
su -
2) Verificações
cd $GRID_HOME/bin (/oracle/app/oracle/product/10.2.0/crs/bin/)
-- OCR's
./ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 262120
Used space (kbytes) : 9504
Available space (kbytes) : 252616
ID : 1593614163
Device/File Name : /ocfs2_ocr1/ocr01.ocr
Device/File integrity check succeeded
Device/File Name : /ocfs2_ocr2/ocr02.ocr
Device/File integrity check succeeded
Cluster registry integrity check succeeded
-- VD
./crsctl query css votedisk
0. 0 /ocfs2_vdsk1/vdisk01.crs
1. 0 /ocfs2_vdsk2/vdisk02.crs
2. 0 /ocfs2_vdsk3/vdisk03.crs
-- Backup's
./ocrconfig -showbackup
israc01 2014/05/16 20:19:08 /oracle/app/oracle/oracle/product/10.2.0/crs/cdata/crs
israc01 2014/05/16 16:19:08 /oracle/app/oracle/oracle/product/10.2.0/crs/cdata/crs
israc01 2014/05/16 12:19:08 /oracle/app/oracle/oracle/product/10.2.0/crs/cdata/crs
israc01 2014/05/15 00:19:07 /oracle/app/oracle/oracle/product/10.2.0/crs/cdata/crs
israc01 2014/05/16 00:19:08 /oracle/app/oracle/oracle/product/10.2.0/crs/cdata/crs
-- Executa o backup manual
./ocrconfig -export /oracle/app/oracle/product/10.2.0/crs/cdata/crs/ocr_20140518_1300 -s online
dd if=/ocfs2_vdsk1/vdisk01.ocr of=/oracle/app/oracle/product/10.2.0/crs/cdata/crs/vdisk01.crs.bak bs=4k
2500+0 records in
2500+0 records out
10240000 bytes (10 MB) copied, 0.079659 seconds, 129 MB/s
dd if=/ocfs2_vdsk2/vdisk02.ocr of=/oracle/app/oracle/product/10.2.0/crs/cdata/crs/vdisk02.crs.bak bs=4k
2500+0 records in
2500+0 records out
10240000 bytes (10 MB) copied, 0.088987 seconds, 115 MB/s
dd if=/ocfs2_vdsk3/vdisk03.ocr of=/oracle/app/oracle/product/10.2.0/crs/cdata/crs/vdisk03.crs.bak bs=4k
2500+0 records in
2500+0 records out
10240000 bytes (10 MB) copied, 0.103655 seconds, 98.8 MB/s
[root@zema-ora10g-n1 bin]# ls -lrht /oracle/app/oracle/product/10.2.0/crs/cdata/crs
total 96M
-rw-r--r-- 1 root root 9.5M May 11 06:44 week.ocr
-rw-r--r-- 1 root root 9.5M May 17 06:44 day.ocr
-rw-r--r-- 1 root root 9.5M May 18 02:44 backup02.ocr
-rw-r--r-- 1 root root 9.5M May 18 06:44 week_.ocr
-rw-r--r-- 1 root root 9.5M May 18 06:44 day_.ocr
-rw-r--r-- 1 root root 9.5M May 18 06:44 backup01.ocr
-rw-r--r-- 1 root root 9.5M May 18 10:44 backup00.ocr
-rw-r--r-- 1 root root 223K May 18 13:04 ocr_20140518_1300
-rw-r--r-- 1 root root 9.8M May 18 13:06 vdisk01.crs.bak
-rw-r--r-- 1 root root 9.8M May 18 13:06 vdisk02.crs.bak
-rw-r--r-- 1 root root 9.8M May 18 13:06 vdisk03.crs.bak
[prdmv1.israc01 ~]$ ~/crstat.sh
HA Resource Target State
----------- ------ -----
ora.zema-ora10g-n1.ASM1.asm ONLINE ONLINE on zema-ora10g-n1
ora.zema-ora10g-n1.LISTENER_ZEMA-ORA10G-N1.lsnr ONLINE ONLINE on zema-ora10g-n1
ora.zema-ora10g-n1.gsd ONLINE ONLINE on zema-ora10g-n1
ora.zema-ora10g-n1.ons ONLINE ONLINE on zema-ora10g-n1
ora.zema-ora10g-n1.vip ONLINE ONLINE on zema-ora10g-n1
ora.zema-ora10g-n2.ASM2.asm ONLINE ONLINE on zema-ora10g-n2
ora.zema-ora10g-n2.LISTENER_ZEMA-ORA10G-N2.lsnr ONLINE ONLINE on zema-ora10g-n2
ora.zema-ora10g-n2.gsd ONLINE ONLINE on zema-ora10g-n2
ora.zema-ora10g-n2.ons ONLINE ONLINE on zema-ora10g-n2
ora.zema-ora10g-n2.vip ONLINE ONLINE on zema-ora10g-n2
ora.bdprd.bdprd1.inst ONLINE ONLINE on zema-ora10g-n1
ora.bdprd.bdprd2.inst ONLINE ONLINE on zema-ora10g-n2
ora.bdprd.db ONLINE ONLINE on zema-ora10g-n1
ora.bdsml.bdsml1.inst ONLINE ONLINE on zema-ora10g-n1
ora.bdsml.bdsml2.inst ONLINE ONLINE on zema-ora10g-n2
ora.bdsml.db ONLINE ONLINE on zema-ora10g-n1
ora.bdtrn.bdtrn1.inst ONLINE ONLINE on zema-ora10g-n1
ora.bdtrn.bdtrn2.inst ONLINE ONLINE on zema-ora10g-n2
ora.bdtrn.db ONLINE ONLINE on zema-ora10g-n2
Importante: Verificar se não existe SPFILE ou qualquer outro arquivo nas áreas que não serão mais utilizadas. Se houver, alterar.
3) Parar todos os serviços do RAC (nos dois nós)
-- Nó 2
/etc/init.d/init.crs stop
Shutting down Oracle Cluster Ready Services (CRS):
May 18 13:09:03.653 | INF | daemon shutting down
Stopping resources. This could take several minutes.
Successfully stopped CRS resources.
Stopping CSSD.
Shutting down CSS daemon.
Shutdown request successfully issued.
Shutdown has begun. The daemons should exit soon.
-- Nó 1
/etc/init.d/init.crs stop
Shutting down Oracle Cluster Ready Services (CRS):
May 18 13:10:04.123 | INF | daemon shutting down
Stopping resources. This could take several minutes.
Successfully stopped CRS resources.
Stopping CSSD.
Shutting down CSS daemon.
Shutdown request successfully issued.
Shutdown has begun. The daemons should exit soon.
--Verificação
./crsctl check crs
Failure 1 contacting CSS daemon
Cannot communicate with CRS
Cannot communicate with EVM
4) Cria os novos VD's para as novas localizações
./crsctl add css votedisk /ocfs2_vdsk11/vdisk011.crs -force
Now formatting voting disk: /ocfs2_vdsk11/vdisk011.crs
successful addition of votedisk /ocfs2_vdsk11/vdisk011.crs .
./crsctl add css votedisk /ocfs2_vdsk22/vdisk022.crs -force
Now formatting voting disk: /ocfs2_vdsk22/vdisk022.crs
successful addition of votedisk /ocfs2_vdsk22/vdisk022.crs .
./crsctl add css votedisk /ocfs2_vdsk33/vdisk033.crs -force
Now formatting voting disk: /ocfs2_vdsk33/vdisk033.crs
successful addition of votedisk /ocfs2_vdsk33/vdisk033.crs .
Importante: Não esquecer de verificar as permissões dos arquivos criados:
chown oracle:oinstall /ocfs2_vdsk11/vdisk011.crs
chown oracle:oinstall /ocfs2_vdsk22/vdisk022.crs
chown oracle:oinstall /ocfs2_vdsk33/vdisk033.crs
ls -lrht /ocfs2_vdsk11
total 9.8M
drwxr-xr-x 2 root root 3.9K May 17 20:47 lost+found
-rw-r--r-- 1 oracle oinstall 9.8M May 18 13:29 vdisk011.crs
ls -lrht /ocfs2_vdsk22
total 9.8M
drwxr-xr-x 2 root root 3.9K May 17 20:47 lost+found
-rw-r--r-- 1 oracle oinstall 9.8M May 18 13:29 vdisk022.crs
ls -lrht /ocfs2_vdsk33
total 9.8M
drwxr-xr-x 2 root root 3.9K May 17 20:47 lost+found
-rw-r--r-- 1 oracle oinstall 9.8M May 18 13:31 vdisk033.crs
5) Verifica se a alteração foi realizada
./crsctl query css votedisk
0. 0 /ocfs2_vdsk1/vdisk01.crs
1. 0 /ocfs2_vdsk2/vdisk02.crs
2. 0 /ocfs2_vdsk3/vdisk03.crs
3. 0 /ocfs2_vdsk11/vdisk011.crs -- Novo
4. 0 /ocfs2_vdsk22/vdisk022.crs -- Novo
5. 0 /ocfs2_vdsk33/vdisk033.crs -- Novo
6) Exclui os VD's antigos e verifica novamente
./crsctl delete css votedisk /ocfs2_vdsk1/vdisk01.ocr -force
successful deletion of votedisk /ocfs2_vdsk1/vdisk01.ocr.
./crsctl delete css votedisk /ocfs2_vdsk2/vdisk02.ocr -force
successful deletion of votedisk /ocfs2_vdsk2/vdisk02.ocr.
./crsctl delete css votedisk /ocfs2_vdsk3/vdisk03.ocr -force
successful deletion of votedisk /ocfs3_vdsk1/vdisk03.ocr.
./crsctl query css votedisk
0. 0 /ocfs2_vdsk11/vdisk011.crs
1. 0 /ocfs2_vdsk22/vdisk022.crs
2. 0 /ocfs2_vdsk33/vdisk033.crs
7) Agora vamos movimentar os OCR's. Para isso, iniciar o CRS nos dois nós
./crsctl start crs
-- Checar se subiu
./crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy
8) Criar os novos OCR's:
touch /ocfs2_ocr11/ocrs011.crs
touch /ocfs2_ocr22/ocrs022.crs
Importante: Não esquecer de deixar os direitos iguais aos antigos
./ocrconfig -replace ocr /ocfs2_ocr11/ocrs011.crs
./ocrconfig -replace ocrmirror /ocfs2_ocr22/ocrs022.crs
-- Verificar a alteração de local
cat /etc/oracle/ocr.loc
9) Verificações
./ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 262120
Used space (kbytes) : 3840
Available space (kbytes) : 258280
ID : 665915271
Device/File Name : /ocfs2_ocr11/ocrs011.crs
Device/File integrity check succeeded
Device/File Name : /ocfs2_ocr22/ocrs022.crs
Device/File integrity check succeeded
Cluster registry integrity check succeeded
10) Verificar todos os serviços, fstab e fazer um restart no CRS apenas para conferência (nos dois nós)
./crsctl stop crs
./crsctl start crs
-- Fontes
OCR / Vote disk Maintenance Operations: (ADD/REMOVE/REPLACE/MOVE) (Doc ID 428681.1)
Failed to Start CRS stack After Adding a New Voting Disk [ID 460874.1]
É filho, se chegou até aqui e não me xingou é porquê deu tudo certo né?
Mario
Abraço
terça-feira, 20 de maio de 2014
terça-feira, 6 de maio de 2014
Alterar IP's Public e Virtual no Oracle RAC
Jovens, bom dia.
Esses dias o meu chefe Japa San pediu para eu ir até um cliente que precisaria realizar a alteração dos IP's publico e virtuais de um RAC 10G.
Abaixo segue o que foi feito - com sucesso, diga-se :D
Algumas verificações ali eram desnecessárias, mas para deixar tudo muito bem documentado no relatório do trabalho, achei legal deixar.
No final, segue os notes usados como base para o trabalho.
1. Verificar os backup's do OCR.
Verifica o OCR
ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 262120
Used space (kbytes) : 4660
Available space (kbytes) : 257460
ID : 1398221949
Device/File Name : /ocfs2_ocr1/ocrs01.crs
Device/File integrity check succeeded
Device/File Name : /ocfs2_ocr2/ocrs02.crs
Device/File integrity check succeeded
Cluster registry integrity check succeeded
Verifica as VD
crsctl query css votedisk
0. 0 /ocfs2_vdsk1/vdisk01.crs
1. 0 /ocfs2_vdsk2/vdisk02.crs
2. 0 /ocfs2_vdsk3/vdisk03.crs
Verifica o backup automático
ocrconfig -showbackup
srvora01 2014/04/10 13:39:38 /oracle/app/oracle/product/10.2.0/crs_1/cdata/oracrs
srvora01 2014/04/10 09:39:38 /oracle/app/oracle/product/10.2.0/crs_1/cdata/oracrs
srvora01 2014/04/10 05:39:38 /oracle/app/oracle/product/10.2.0/crs_1/cdata/oracrs
srvora01 2014/04/09 09:39:37 /oracle/app/oracle/product/10.2.0/crs_1/cdata/oracrs
srvora01 2014/03/31 01:39:25 /oracle/app/oracle/product/10.2.0/crs_1/cdata/oracrs
ls -lrht /oracle/app/oracle/product/10.2.0/crs_1/cdata/oracrs
-rw-r--r-- 1 root root 4.7M Mar 31 01:39 week.ocr
-rw-r--r-- 1 root root 4.7M Apr 7 01:39 week_.ocr
-rw-r--r-- 1 root root 4.7M Apr 9 09:39 day.ocr
-rw-r--r-- 1 root root 4.7M Apr 10 09:39 day_.ocr
-rw-r--r-- 1 root root 4.7M Apr 10 13:39 backup02.ocr
-rw-r--r-- 1 root root 4.7M Apr 10 17:39 backup01.ocr
-rw-r--r-- 1 root root 4.7M Apr 10 21:39 backup00.ocr
-rw-r--r-- 1 root root 107K Apr 11 01:21 ocr201404110120
Executa o backup manual
ocrconfig -export /oracle/app/oracle/product/10.2.0/crs_1/cdata/oracrs/ocr201404110120 -s online
ou
ocrconfig -manualbackup
2. Verifica as informações das placas, IP's, VIP, etc
cd $CRS_HOME/bin
oifcfg iflist
eth0 11.0.0.0
bond0 172.16.0.0
oifcfg getif
eth0 11.0.0.0 global cluster_interconnect
bond0 172.16.0.0 global public
-- Verifica o VIP
srvctl config nodeapps -n srvora01 -a
VIP exists.: /srvora01-vip/172.16.0.205/255.255.255.0/bond0
srvctl config nodeapps -n srvora02 -a
VIP exists.: /srvora02-vip/172.16.0.204/255.255.255.0/bond0
-- ./crsstat
HA Resource Target State
----------- ------ -----
ora.ttt.db ONLINE ONLINE on srvora01
ora.ttt.ttt01.inst ONLINE ONLINE on srvora01
ora.ttt.ttt02.inst ONLINE ONLINE on srvora02
ora.xxx.db ONLINE ONLINE on srvora01
ora.xxx.xxx01.inst ONLINE ONLINE on srvora01
ora.xxx.xxx02.inst ONLINE ONLINE on srvora02
ora.srvora01.ASM1.asm ONLINE ONLINE on srvora01
ora.srvora01.LISTENER_SRVORA01.lsnr ONLINE ONLINE on srvora01
ora.srvora01.gsd ONLINE ONLINE on srvora01
ora.srvora01.ons ONLINE ONLINE on srvora01
ora.srvora01.vip ONLINE ONLINE on srvora01
ora.srvora02.ASM2.asm ONLINE ONLINE on srvora02
ora.srvora02.LISTENER_SRVORA02.lsnr ONLINE ONLINE on srvora02
ora.srvora02.gsd ONLINE ONLINE on srvora02
ora.srvora02.ons ONLINE ONLINE on srvora02
ora.srvora02.vip ONLINE ONLINE on srvora02
3. Para todos os serviços do RAC (como root)
srvctl stop database -d ttt
srvctl stop database -d xxx
srvctl stop vip -n srvora01
srvctl stop vip -n srvora02
OU (se preferir :D muito mais simples)
/etc/init.d/init.crs stop
4. Altera a interface (em apenas um dos nodes já que vai utilizar a opção -global) - Como ORACLE
$ oifcfg setif -global/:public
$ oifcfg setif -global/:cluster_interconnect
Exemplo:
-- Aqui mantive os IP's e alterei somente a interface
$ oifcfg setif -global bond0:1/172.16.0.0:public
$ oifcfg setif -global bond0:4/11.0.0.0:cluster_interconnect
Para o VIP, além disso, também é necessário alterar no OCR através do srvctl, como ROOT - somente para 11g
-- Aqui mantive os IP's e alterei somente a interface
srvctl modify nodeapps -n srvora01 -o /oracle/app/oracle/product/11.2.0/crs -A 11.0.0.2/255.255.255.0/bond0:4
srvctl modify nodeapps -n srvora02 -o /oracle/app/oracle/product/11.2.0/crs -A 11.0.0.1/255.255.255.0/bond0:4
OU
srvctl modify nodeapps -n srvora01 -o /oracle/app/oracle/product/11.2.0/crs -A srvora01-vip/255.255.255.0/bond0:4
srvctl modify nodeapps -n srvora02 -o /oracle/app/oracle/product/11.2.0/crs -A srvora02-vip/255.255.255.0/bond0:4
-n - Node name.
-o - Oracle Home for the cluster software (CRS-Home).
-A - The node level VIP address (/netmask[/if1[|if2|...]]).
5. Verifica (deveria ficar assim)
oifcfg iflist
bond1 11.0.0.0
bond0 172.16.0.0
oifcfg getif
bond1 11.0.0.0 global cluster_interconnect
bond0 172.16.0.0 global public
6. Modifica o hosts (se necessário, se for mudança de IP)
7. Sobe o rac
/etc/init.d/init.crs start
8. Remove the old interface if required:
$ oifcfg delif -global[/]
eg:
oifcfg delif -global bond0/172.16.0.0
oifcfg delif -global eth0/11.0.0.0
Jovens, é isso.
Lembre-se. Esse processo é só para Publico/Virtual.
Esses dias o meu chefe Japa San pediu para eu ir até um cliente que precisaria realizar a alteração dos IP's publico e virtuais de um RAC 10G.
Abaixo segue o que foi feito - com sucesso, diga-se :D
Algumas verificações ali eram desnecessárias, mas para deixar tudo muito bem documentado no relatório do trabalho, achei legal deixar.
No final, segue os notes usados como base para o trabalho.
1. Verificar os backup's do OCR.
Verifica o OCR
ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 262120
Used space (kbytes) : 4660
Available space (kbytes) : 257460
ID : 1398221949
Device/File Name : /ocfs2_ocr1/ocrs01.crs
Device/File integrity check succeeded
Device/File Name : /ocfs2_ocr2/ocrs02.crs
Device/File integrity check succeeded
Cluster registry integrity check succeeded
Verifica as VD
crsctl query css votedisk
0. 0 /ocfs2_vdsk1/vdisk01.crs
1. 0 /ocfs2_vdsk2/vdisk02.crs
2. 0 /ocfs2_vdsk3/vdisk03.crs
Verifica o backup automático
ocrconfig -showbackup
srvora01 2014/04/10 13:39:38 /oracle/app/oracle/product/10.2.0/crs_1/cdata/oracrs
srvora01 2014/04/10 09:39:38 /oracle/app/oracle/product/10.2.0/crs_1/cdata/oracrs
srvora01 2014/04/10 05:39:38 /oracle/app/oracle/product/10.2.0/crs_1/cdata/oracrs
srvora01 2014/04/09 09:39:37 /oracle/app/oracle/product/10.2.0/crs_1/cdata/oracrs
srvora01 2014/03/31 01:39:25 /oracle/app/oracle/product/10.2.0/crs_1/cdata/oracrs
ls -lrht /oracle/app/oracle/product/10.2.0/crs_1/cdata/oracrs
-rw-r--r-- 1 root root 4.7M Mar 31 01:39 week.ocr
-rw-r--r-- 1 root root 4.7M Apr 7 01:39 week_.ocr
-rw-r--r-- 1 root root 4.7M Apr 9 09:39 day.ocr
-rw-r--r-- 1 root root 4.7M Apr 10 09:39 day_.ocr
-rw-r--r-- 1 root root 4.7M Apr 10 13:39 backup02.ocr
-rw-r--r-- 1 root root 4.7M Apr 10 17:39 backup01.ocr
-rw-r--r-- 1 root root 4.7M Apr 10 21:39 backup00.ocr
-rw-r--r-- 1 root root 107K Apr 11 01:21 ocr201404110120
Executa o backup manual
ocrconfig -export /oracle/app/oracle/product/10.2.0/crs_1/cdata/oracrs/ocr201404110120 -s online
ou
ocrconfig -manualbackup
2. Verifica as informações das placas, IP's, VIP, etc
cd $CRS_HOME/bin
oifcfg iflist
eth0 11.0.0.0
bond0 172.16.0.0
oifcfg getif
eth0 11.0.0.0 global cluster_interconnect
bond0 172.16.0.0 global public
-- Verifica o VIP
srvctl config nodeapps -n srvora01 -a
VIP exists.: /srvora01-vip/172.16.0.205/255.255.255.0/bond0
srvctl config nodeapps -n srvora02 -a
VIP exists.: /srvora02-vip/172.16.0.204/255.255.255.0/bond0
-- ./crsstat
HA Resource Target State
----------- ------ -----
ora.ttt.db ONLINE ONLINE on srvora01
ora.ttt.ttt01.inst ONLINE ONLINE on srvora01
ora.ttt.ttt02.inst ONLINE ONLINE on srvora02
ora.xxx.db ONLINE ONLINE on srvora01
ora.xxx.xxx01.inst ONLINE ONLINE on srvora01
ora.xxx.xxx02.inst ONLINE ONLINE on srvora02
ora.srvora01.ASM1.asm ONLINE ONLINE on srvora01
ora.srvora01.LISTENER_SRVORA01.lsnr ONLINE ONLINE on srvora01
ora.srvora01.gsd ONLINE ONLINE on srvora01
ora.srvora01.ons ONLINE ONLINE on srvora01
ora.srvora01.vip ONLINE ONLINE on srvora01
ora.srvora02.ASM2.asm ONLINE ONLINE on srvora02
ora.srvora02.LISTENER_SRVORA02.lsnr ONLINE ONLINE on srvora02
ora.srvora02.gsd ONLINE ONLINE on srvora02
ora.srvora02.ons ONLINE ONLINE on srvora02
ora.srvora02.vip ONLINE ONLINE on srvora02
3. Para todos os serviços do RAC (como root)
srvctl stop database -d ttt
srvctl stop database -d xxx
srvctl stop vip -n srvora01
srvctl stop vip -n srvora02
OU (se preferir :D muito mais simples)
/etc/init.d/init.crs stop
4. Altera a interface (em apenas um dos nodes já que vai utilizar a opção -global) - Como ORACLE
$ oifcfg setif -global
$ oifcfg setif -global
Exemplo:
-- Aqui mantive os IP's e alterei somente a interface
$ oifcfg setif -global bond0:1/172.16.0.0:public
$ oifcfg setif -global bond0:4/11.0.0.0:cluster_interconnect
Para o VIP, além disso, também é necessário alterar no OCR através do srvctl, como ROOT - somente para 11g
-- Aqui mantive os IP's e alterei somente a interface
srvctl modify nodeapps -n srvora01 -o /oracle/app/oracle/product/11.2.0/crs -A 11.0.0.2/255.255.255.0/bond0:4
srvctl modify nodeapps -n srvora02 -o /oracle/app/oracle/product/11.2.0/crs -A 11.0.0.1/255.255.255.0/bond0:4
OU
srvctl modify nodeapps -n srvora01 -o /oracle/app/oracle/product/11.2.0/crs -A srvora01-vip/255.255.255.0/bond0:4
srvctl modify nodeapps -n srvora02 -o /oracle/app/oracle/product/11.2.0/crs -A srvora02-vip/255.255.255.0/bond0:4
-n - Node name.
-o - Oracle Home for the cluster software (CRS-Home).
-A - The node level VIP address (/netmask[/if1[|if2|...]]).
5. Verifica (deveria ficar assim)
oifcfg iflist
bond1 11.0.0.0
bond0 172.16.0.0
oifcfg getif
bond1 11.0.0.0 global cluster_interconnect
bond0 172.16.0.0 global public
6. Modifica o hosts (se necessário, se for mudança de IP)
7. Sobe o rac
/etc/init.d/init.crs start
8. Remove the old interface if required:
$ oifcfg delif -global
eg:
oifcfg delif -global bond0/172.16.0.0
oifcfg delif -global eth0/11.0.0.0
Jovens, é isso.
Lembre-se. Esse processo é só para Publico/Virtual.
E antes que eu esqueça, os notes de base:
1. "How to Change Interconnect/Public Interface IP or Subnet in Oracle Clusterware", Doc ID: 283684.1
2. "Modifying the VIP or VIP Hostname of a 10g or 11g Oracle Clusterware Node", DOC ID: 276434.1
2. "Modifying the VIP or VIP Hostname of a 10g or 11g Oracle Clusterware Node", DOC ID: 276434.1
Abraço
Mario
Mario
domingo, 4 de maio de 2014
Movimentar datafiles em um standby
Ahhhh Jovem, você aqui de novo?
Que bom, que bom. Sinal que as postagens estão ajudando..
Caso você precise alterar o local de algum datafile de um StandBy, basta seguir os passos abaixo:
1- Baixar o banco standby.
shutdown immediate;
2- Fazer a copia dos datafiles da origem para destino.
cp -rv
3- Montar o banco standby.
startup mount;
4- Alterar gerenciamento de arquivos do standby para MANUAL.
show parameter standby;
alter system set standby_file_management=MANUAL scope=both;
5- Realizar o rename dos datafiles copiados.
alter database rename file '' to '';
6- Voltar gerenciamento de arquivos do standby valor antigo.
alter system set standby_file_management=AUTO scope=both;
7- Montar novamente a base em modo standby.
shutdown immdiate;
startup nomount;
alter database mount standby database;
Ai está jovem. Fácil e rápido.
Dica do meu amigo Rafael Ferreira.
Abraço
Mario
Que bom, que bom. Sinal que as postagens estão ajudando..
Caso você precise alterar o local de algum datafile de um StandBy, basta seguir os passos abaixo:
1- Baixar o banco standby.
shutdown immediate;
2- Fazer a copia dos datafiles da origem para destino.
cp -rv
3- Montar o banco standby.
startup mount;
4- Alterar gerenciamento de arquivos do standby para MANUAL.
show parameter standby;
alter system set standby_file_management=MANUAL scope=both;
5- Realizar o rename dos datafiles copiados.
alter database rename file '
6- Voltar gerenciamento de arquivos do standby valor antigo.
alter system set standby_file_management=AUTO scope=both;
7- Montar novamente a base em modo standby.
shutdown immdiate;
startup nomount;
alter database mount standby database;
Ai está jovem. Fácil e rápido.
Dica do meu amigo Rafael Ferreira.
Abraço
Mario
Apresentar o HISTORY com data e hora
Olá jovens.
Segue ai uma dica bem rapidinha e
fácil, mas que pode te ajudar nas investigações que você possa precisar fazer
para descobrir quem foi aquele abençoado que deletou todos os seus arquivos de
trace, por exemplo.
Ou descobrir quem achou que aqueles tais
"archives" só estavam ocupando espaço em disco e quepodiam ser excluídos.
Geralmente o comando
"history" nos apresenta apenas o comando executado, como o exemplo
abaixo:
[+ASM1.mario01 ~]$ history |grep siscontrol
425 siscontrol
508 siscontrol status
519 siscontrol status
522 siscontrol status
531 siscontrol status
537 siscontrol status
885 siscontrol status
955 siscontrol status
968 siscontrol status
996 siscontrol status
1005 history |grep siscontrol
Agora, acrescentando a linha abaixo
ao .bash_profile do usuário, veja que legal a saída:
vim ~/.bash_profile
Acrescentar:
##
Para mostrar o history com data e hora
export HISTTIMEFORMAT="%d/%m/%y %T "
Recarregue o bash_profile:
source
~/.bash_profile
Execute novamente:
[+ASM1.mario01 ~]$ history |grep siscontrol
425 04/05/14 15:58:18 siscontrol
508 04/05/14 15:58:18 siscontrol status
519 04/05/14 15:58:18 siscontrol status
522 04/05/14 15:58:18 siscontrol status
531 04/05/14 15:58:18 siscontrol status
537 04/05/14 15:58:18 siscontrol status
885 04/05/14 15:58:18 siscontrol status
955 04/05/14 15:58:18 siscontrol status
968 04/05/14 15:58:18 siscontrol status
996 04/05/14 15:58:18 siscontrol status
1005 04/05/14 15:59:52 history |grep siscontrol
1008 04/05/14 16:00:46 history |grep siscontrol
Pode parecer bobo, mas saber a data
e hora do que foi executado pode ajudar demais.
Dica rápida e fácil que foi passada pelo meu amigo
Breno Rodrigues.
Abraço
Mario
Oracle Goldengate - Parte 4
Jovens
Agora sim. Vamos configurar o EXTRACT e o DATA PUMP.
Prometo, sem enrolação hoje.
Se quiser lembrar onde estamos. Veja aqui [1] e aqui [2] e aqui também [3].
Sem delongas, vamos ao que interessa.
Os procedimentos abaixo devem ser feitos no SOURCE e no TARGET.
1) Criação dos subdiretórios do GoldenGate - Ir até o GG_HOME.
cd $GG_HOME
./ggsci
GGSCI (mario) 1> create subdirs
Creating subdirectories under current directory /oracle/oradata/QSP/gg11
Parameter files /oracle/oradata/QSP/gg11/dirprm: already exists
Report files /oracle/oradata/QSP/gg11/dirrpt: created
Checkpoint files /oracle/oradata/QSP/gg11/dirchk: created
Process status files /oracle/oradata/QSP/gg11/dirpcs: created
SQL script files /oracle/oradata/QSP/gg11/dirsql: created
Database definitions files /oracle/oradata/QSP/gg11/dirdef: created
Extract data files /oracle/oradata/QSP/gg11/dirdat: created
Temporary files /oracle/oradata/QSP/gg11/dirtmp: created
Stdout files /oracle/oradata/QSP/gg11/dirout: created
2) Configuração da porta de comunicação do MANAGER. Lembre-se que o MANAGER deve estar no ar antes de começarmos os procesoss de EXTRACT/REPLICAT.
-- SOmente mostrando o status do MANAGER no momento
GGSCI (mario) 1> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER STOPPED
-- Vamos editar o arquivo de parâmetros do MANAGER
GGSCI (mario) 1> edit params mgr
Incluir a linha abaixo:
PORT 7090
Importante: Aqui pode ser a porta que quiserem. Eu escolhi essa, mas podem colocar qualquer porta. Salve a alteração.
-- Vamos iniciar o MANAGEr
GGSCI (mario) 1> start manager
Manager started.
GGSCI (mario) 1> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
Importante: Não esqueça de fazer isso no TARGET. Eu espero...
3) Configuração do checkpointtable e trandata
-- Lembra que criamos o user lá no artigo 2? Pois é, vamos usar aqui.
GGSCI (mario) 1> dblogin userid gguser; password COLOQUE_UMA_SENHA_DECENTE_POR_FAVOR
Successfully logged into database.
-- Imagine que o processo de REPLICAT está replicando os dados para o TARGET, e então ocorre algo inesperado. Imaginamos que o REPLICAT vai para o status ABENDED devido a algum tipo de erro de falta de registro, por exemplo.
O GoldenGate se oriente de quais operações foram replicadas de duas formas. Sempre é gravado um arquivo de controle e verificação em /dirchk . Este arquivo deve existir e se ele for removido o GoldenGate perde o controle de seus processos.
Podemos também criar uma tabela de ponto de verificação (CHECKPOINT TABLE). Criar essa tabela é opcional e pode ser especificado globalmente (através do arquivo GLOBALS que não iremos utilizar nesses artigos) ou para cada processo de replicação.
Quando o processo de REPLICAT é iniciado e se a tabela existe, ele não lê o arquivo de verificação e sim a tabela de ponto de verificação encontrando o ponto de recuperação e começando a reaplicar todas as transações que ocorreram logo após a parada.
GGSCI (mario) 1> ADD CHECKPOINTTABLE gguser.checkpoint
Successfully created checkpoint table gguser.checkpoint.
-- Agora vamos executar o trandata para os owner's que vamos replicar. O ADD TRANDATA permiti ao GoldenGate adquirir as informações de transação que ele precisa para replicação a partir dos registros de transações.
GGSCI (mario) 1> add trandata SAPSR3.*
Pessoal, tudo ok até aqui não é? Como eu escrevi antes, essa é uma maneira de ser feito. Você pode preferir não usar a CHECKPOINT TABLE. Ou criar um arquivo GLOBALS para especificar uma tabela global, enfim. Veja o que melhor te atende.
Agora, vamos criar o EXTRACT e DATA PUMP no SOURCE. Somente no SOURCE.
4) Ainda conectado com o dblogin
GGSCI (mario) 1> dblogin userid gguser; password COLOQUE_UMA_SENHA_DECENTE_POR_FAVOR
Successfully logged into database.
5) Configuração do EXTRACT
-- Você se lembra que fizemos um expdp/impdp com o flashback_scn? Pois bem, vamos usar o SCN para adicionar o extract a partir dele.
GGSCI (mario) 1> ADD EXTRACT extqsp6, TRANLOG, SCN 5600816832
Importante: Se você fez um export com a base fechada, aqui você pode usar um "BEGIN NOW" ao invés do SCN. Ficaria assim:
GGSCI (mario) 1> ADD EXTRACT extqsp6, TRANLOG, BEGIN NOW
-- Vamos também indicar o nosso arquivo de trail para o EXTRACT. Criaremos arquivos de 512M.
GGSCI (mario) 1> ADD EXTTRAIL ./dirdat/sc, EXTRACT extqsp6, megabytes 512
-- Agora vamos editar o arquivo de parâmetros so EXTRACT
Incluir as linhas abaixo no arquivo. Podem tirar os comentários se quiser.
GGSCI (mario) 1> edit params extqsp6
-- Nome do extract
EXTRACT extqsp6
-- Usuário e senha para as conexões
USERID gguser, PASSWORD COLOQUE_UMA_SENHA_DECENTE_POR_FAVOR
-- Trail File
EXTTRAIL ./dirdat/sc
-- Indica ao GG que uma operação de TRUNCATE deve ser replicada. Por padrão, o GG não replica truncates.
GETTRUNCATES
-- Usamos o DDL para ativar o suporte a DDL, filtrar as operações DDL e configurar uma ação de processamento com base em um DDL. O INCLUDE identifica o início de uma cláusula que contém critérios de filtragem que identificam o escopo DDL que este parâmetro afetará. O MAPPED mapeia o escopo da filtragem.
DDL INCLUDE MAPPED OBJNAME SAPSR3.*
-- Tabelas que devem ser extraídas
TABLE SAPSR3.*;
Salve o arquivo. Esse já está pronto.
6) Configuração do Data Pump
-- Vamos fazer o add do pump
GGSCI (mario) 1> ADD EXTRACT pumpqsp6, EXTTRAILSOURCE ./dirdat/sc, SCN 5637686564
Importante: Se você quiser fazer o pump a partir de um ponto no tempo, pode também. Ficaria assim:
GGSCI (mario) 1> add extract pumpqsp6, tranlog, begin 2014-04-15 02:00
-- O ADD RMTTRAIL cria uma trilha para o processamento on-line no servidor remoto além de associar um trail a um EXTRACT.
GGSCI (mario) 1> ADD RMTTRAIL ./dirdat/st, EXTRACT pumpqsp6, megabytes 512
-- Editamos agora o parameter file
edit params pumpqsp6
-- Nome do pump
EXTRACT pumpqsp6
-- Usuário e senha para as conexões
USERID gguser, PASSWORD COLOQUE_UMA_SENHA_DECENTE_POR_FAVOR
-- Especificar o RMTHOST antes da entrada de RMTTRAIL para identificar o servidor remoto e a porta
RMTHOST 10.193.125.59, MGRPORT 7090
-- Local do trail
RMTTRAIL ./dirdat/st
-- Indica ao GG que uma operação de TRUNCATE deve ser replicada. Por padrão, o GG não replica truncates.
GETTRUNCATES
-- Tabelas que devem ser extraídas
TABLE SAPSR3.*;
7) É isso ai. Agora vamos iniciar os dois
GGSCI (mario) 1> start extract extqsp6
GGSCI (mario) 1> start extract pumpqsp6
8) E listar e ver se está tudo no ar
GGSCI (mario) 1> status manager
Manager is running (IP port mario.7090).
GGSCI (mario) 1> info all
Program Status Group Lag Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING extqsp6 00:00:00 00:00:09
EXTRACT RUNNING pumpqsp6 00:00:00 00:00:09
Importante: Para uma informação um pouco mais detalhada:
info extract extqsp6, detail
info extract pumpqsp6, detail
Além de ver o log:
cd $GG_HOME
tail -f ggserr.log
ou
GGSCI (mario) 1> VIEW GGSEVT
Agora, vamos criar o REPLICAT no TARGET. Somente no TARGET.
1) Login, como já feito antes.
GGSCI (mario) 1> dblogin userid gguser; password gguserquero
2) Vamos fazer o add do replicat
GGSCI (mario) 1> add replicat repqsp6, exttrail ./dirdat/st, CHECKPOINTTABLE GGUSER.checkpoint
Importante: Aqui, se você sabe o momento que deve iniciar o replicat, melhor definir uma data e hora.
GGSCI (mario) 1> add replicat repqsp6, ExtTrail ./dirdat/rb, Begin 2014-05-04 03:50:00
-- Editamos agora o parameter file
edit params repqsp6
-- Nome do replicat
REPLICAT repqsp6
-- Quando os objetos de origem e destino especificados na instrução MAP têm estrutura exatamente igual. Quando as tabelas de origem e de destino têm estruturas diferentes, devemos criar um arquivo de definições de dados para o objeto de origem e especificar as definições do arquivo com o parâmetro SOURCEDEFS.
ASSUMETARGETDEFS
-- Muito cuidado aqui jovem. Use as HANDLECOLLISIONS para controlar registros duplicados. Essas duplicidades chamadas de colisões, ocorrem durante uma carga inicial, por exemplo. Quando os dados de tabelas de origem estão sendo carregados e o Oracle GoldenGate está extraindo as alterações transacionais que estão sendo feitas nas tabelas. Quando o GG replicar as alterações após a carga inicial, o HANDLECOLLISIONS fornece ao Replicat uma lógica de tratamento de erros para essas colisões.
HANDLECOLLISIONS
-- Usuário e senha para as conexões
USERID gguser, PASSWORD gguserquero
-- Indica ao GG que uma operação de TRUNCATE deve ser replicada. Por padrão, o GG não replica truncates.
GETTRUNCATES
-- Mapeamento das tabelas de origem e destino
MAP SAPSR3.*, TARGET SAPSR3.*;
-- Suporte a ddl
DDL INCLUDE ALL
-- Aqui vamos ignorar todos os erros, sem tentar novas tentativas de replicação (RETRYOP). Existem várias formas de tratamento desses erros, aqui somente para exemplo, vamos nesse mais genérico. Você pode usar várias instâncias do DDLERROR no mesmo arquivo de parâmetros para lidar com todos os erros que estão previstos.
DDLERROR DEFAULT IGNORE RETRYOP
3) Agora jovem, basta iniciar...
start replicat repqsp6, aftercsn 5600816832
4) E verificar.
GGSCI (mario) 1> info all
Program Status Group Lag Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING repqsp6 00:00:00 00:00:19
-- Um pouco mais detalhado
stats REPLICAT repqsp6, total, hourly, reportrate min
stats REPLICAT repqsp6, total, hourly, table
Ahhhhhhhhhhhhhhhhhhhh meu amigo, estou sentindo a replicação acontecendo.
Se chegamos até aqui é porque conseguimos!!!! Agora é só partir para os testes. Crie tabelas, insira dados, delete, atualize e
Se deu algum erro, repasse os passos. Lembre-se, esse é um cenário específico para as necessidades de um cliente. Pode ser que você precise fazer algum acerto.
Procure nos manuais da Oracle outras opções, veja outros blogs, corra atrás. É muito legal.
Abraço
Mario
Assinar:
Postagens (Atom)
Postagem em destaque
[ORACLE] Embedding ONNX model for Vector Search tests with Oracle Database 23ai
Hello, everyone. How's it going? Today, I'm going to show you how to load an ONNX model into the Oracle 23ai database for your vecto...