segunda-feira, 27 de julho de 2009

Recuperando Bad Superblock

Quando um file system encontra-se danificado é possível restaura-lo, exceto se o file system for o root (/).

Quando isto acontece é necessário realizar um dos passos abaixo:

* Reinstalar o Sistema Operacional

* Boot da Rede ou CD-Rom

* Recriar o file system root (/) com newfs e restaurá-lo de um backup.

Determinando um bad superblock no file system / ou /usr.
De um CD local realizamos os passos abaixo.

ok boot -s cdrom

Através da rede de um install server

ok boot -s net

Após, desmonte o file system danificado se o mesmo não for o / ou /usr.

# umount /opt
# newfs -N /dev/rdsk/c0t3d0s7
/dev/rdsk/c0t3d0s7: 163944 sectors in 506 cylinders of 9 tracks, 36 sectors
83.9MB in 32 cyl groups (16 c/g, 2.65MB/g, 1216 i/g)
super-block backups (for fsck -b #) at:
32, 5264, 10496, 15728, 20960, 26192, 31424, 36656, 41888,
47120, 52352, 57584, 62816, 68048, 73280, 78512, 82976, 88208,
93440, 98672, 103904, 109136, 114368, 119600, 124832, 130064, 135296,
140528, 145760, 150992, 156224, 161456,
# fsck -F ufs -o b=5264 /dev/rdsk/c0t3d0s7
Alternate superblock location: 5264.
** /dev/rdsk/c0t3d0s7
** Last Mounted on
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
36 files, 867 used, 75712 free (16 frags, 9462 blocks, 0.0% fragmentation)
/dev/rdsk/c0t3d0s7 FILE SYSTEM STATE SET TO OKAY

***** FILE SYSTEM WAS MODIFIED *****
#

OBS.: Outras opções para o fsck:

fsck -m

verifica se um file system pode ser montado

fsck -y

assume como “yes” para todos os reparos

fsck -n

assume como “no” para todos os reparos

fsck -o p

preens file system, repara todas inconsistências esperadas, mas retorna ao prompt se um sério problema for encontrado.

quarta-feira, 15 de julho de 2009

Gerênciando swap

Para criar-mos uma nova partição raw swap, após criado o device (type swap), adicione a seguinte entrada em /etc/vsftap

/dev/dsk/c0t1d0s0 - - swap - no -

Depois habilitando a nova partição

# swap -a /dev/desk/c0t1d0s0

Pode adicionar uma novo área de swap através de um arquivo de swap.

# mkfile 250m /opt/myswapfile
# swap -a /opt/myswapfile
# echo “/dev/dsk/c0t1d0s0 - - swap - no -” >> /etc/vsftab

Desativando um

swap space

# swap -d /opt/myswapfile

Exibindo informações mais detalhadas da área de swap.

# swap -s
total: 402456k bytes allocated + 97104k reserved = 499560k used, 1643728k available

Neste momento verificamos que o uso real da swap é de 499560k, onde 97104k estão reservados para uso futuro e 402456k é a utilização real no momento.
O espaço livre é de 1643728k.

Para obter detalhes individuais de cada device.

# swap -l
swapfile dev swaplo blocks free
/dev/md/dsk/d20 85,20 16 4202672 3489392

Onde swapfile indica device ou arquivo de swap, a coluna deve informa o maior e menor número para o device e 0 quando for arquivo.
Em blocks temos o tamanho total da swap (blocos de 512 bytes). Finalizando em free é a quantidade de espaço livre na área de swap também em blocos de 512 bytes.

sábado, 11 de julho de 2009

Troubleshooting snmpdx

Há pouco tempo encontrei o seguinte log no /var/adm/messages em alguns servidores Solaris 8, fazendo com que o file system /var chega-se em 100% várias vezes.

May 5 21:01:05 sserver8 /usr/lib/snmp/snmpdx: [ID 702911 daemon.error] session_open() failed for a pdu received from localhost.55659
May 5 21:01:05 sserver8 /usr/lib/snmp/snmpdx: [ID 702911 daemon.error] community_check();bad community from localhost

Realizei os seguintes procedimentos.

* Verifiquei o /etc/hosts, em busca de entradas duplicadas.

127.0.0.1 localhost

10.0.0.11 sserver8

* Alterei as seguintes linhas abaixo no arquivo /etc/snmp/conf/snmpd.conf.

system-group-read-community S89priv

trap-community S89priv

managers localhost snmpman

* Depois realizei a seguinte configuração em /etc/snmp/conf/snmpdx.acl

acl = {

{

communities = public

access = read-only

managers = *

}

}

Nota: S89priv é o nome da comunidade

* Após isto é necessário realizar um restart do serviço

/etc/rc3.d/S76snmpdx stop

/etc/rc3.d/S76snmpdx start

E por fim você irá constatar que as mensagens de erro não mais ocorrem.

tail -f /var/adm/messages.

Espero que a dica tenha sido útil.

segunda-feira, 6 de julho de 2009

Usando UFS Snapshots

Backup é realizado enquanto o file system está montado, onde criamos um read-only file system (imagem de um file system temporário) destinado para operações de backup.

Criando um USF Snapshot, com limite de 500M para o arquivo backing-store

# fssnap -F ufs -o maxsize=500m,bs=/scratch/usr.back.file /export/home
/dev/fssnap/1

Listanto snapshot currente

# /usr/lib/fs/ufs/fssnap -i
Snapshot number : 0
Block Device : /dev/fssnap/0
Raw Device : /dev/rfssnap/0
Mount point : /export/home
Device state : idle
Backing store path : /var/tmp/bs.file
Backing store size : 0 KB
Maximum backing store size : Unlimited
Snapshot create time : Wed Aug 29 15:22:06 2001
Copy-on-write granularity : 32 KB

Para exibir a informação de um determinado file system, basta

# /usr/lib/fs/ufs/fssnap -i /usr

Excluindo um UFS snapshot

# fssnap -i
0 / 1 /usr
# fssnap -d /usr
Deleted snapshot 1.
# rm /scratch/usr.back.file

Realizando backup de um USF snapshot

Para backup full:

# ufsdump 0ucf /dev/rmt/0 /dev/rfssnap/1

Verificando o backup

# ufsrestore tf /dev/rmt/0

Para backup incremental:

# ufsdump 1ufN /dev/rmt/0 /dev/rdsk/c0t1d0s0 `fssnap -F ufs -o raw,bs=/export/scratch,unlink /dev/rdsk/c0t1d0s0`

Verificando o backup

# ufsrestore ta /dev/rmt/0

Realizando backup com tar

# mount -F ufs -o ro /dev/fssnap/1 /backups
# tar cvf /dev/rmt/0 /backups

Consumo elevado de CPU

O principal foco deste artigo é obter informações sobre uma sessão no Oracle que esta consumindo muito recurso de CPU no sistema operacional em ambiente UNIX.

O DBA que tiver conhecimentos em UNIX/Linux estará mais à-vontade devido aos termos técnicos e as ferramentas utilizadas. É fundamental deixar claro que este artigo é somente uma das ações que podem ser tomadas para o processo de tuning de um Banco de Dados e SO. Tuning de sistema operacional é um assunto muito complexo e ao longo do tempo colocarei mais artigos sobre outras matérias.

Quando você tem um banco de dados Oracle em ambiente Windows, existe a restrição quando é necessário fazer o tuning relacionado ao sistema operacional porque somente é possível visualizar um processo oracle.exe e não os threads que ele inicia. Com as ferramentas padrão do Windows não é possível ir muito a fundo no que esta acontecendo com um processo. Isso não acontece em ambientes UNIX/Linux devido às diversas ferramentas já disponíveis por padrão. Algumas delas em: Solaris – sar (sar 2 100), prstat –T, vmstat 2 100, iostat 2 100 Linux – top AIX – topas, top Os principais para CPU são sar, prstat, top e topas. Para determinar se as CPU’s em um sistema esta carregada, pode-se utilizar no Solaris o sar 2 100. O resultado é o seguinte:

SunOS 5.9 Generic_118558-28 sun4u 01/12/2007
11:21:11 %usr %sys %wio %idle
11:21:13 64 24 6 5
11:21:15 55 17 25 3

A coluna IDLE significa que a maquina esta somente 3% ociosa, logo esta bem carregada. Em ambientes com top, é possível visualizar este campo IDLE na barra superior de detalhes. A interpretação é a mesma do sar. Quanto maior o IDLE mais ociosa a máquina esta. Agora que sabemos que a maquina esta muito carregada, devemos identificar quais processos estão consumindo um maior numero de CPU. Para isso podemos utilizar ou o prstat, top ou topas, dependendo do SO. No caso do Solaris, temos como exemplo o prstat –T:

PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
11238 oracle 58M 48M sleep 0 0 0:36:49 42% oracle
13459 oracle 76M 1031M sleep 29 0 0:01:45 6.7% oracle
111239 oracle 690M 660M sleep 35 0 0:11:39 4.0% oracle
116328 oracle 1076M 1029M sleep 59 0 0:00:00 0.4% oracle
12052 oracle 687M 650M sleep 59 0 0:06:15 0.3% oracle

Neste caso temos um processo consumindo 42%. Em alguns casos é comum a carga da máquina esta bem alta, mas nenhum processo com esta quantidade de uso de CPU. Pode acontecer vários processo de 6 ou 7% que acabam impactando na performance.Neste caso, utilizaremos como principal culpado pelo alto consumo de CPU o processo 11238, dado pela coluna PID. Note que a coluna TIME também é de fundamental importância. Pode haver processos como no exemplo abaixo:
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
11238 oracle 62M 52M cpu2 0 0 0:39:10 9.8% oracle
11239 oracle 690M 660M sleep 49 0 1:11:52 8.9% oracle
12689 oracle 685M 658M sleep 59 0 0:44:51 0.5% oracle
2052 oracle 687M 650M sleep 59 0 0:06:17 0.5% oracle

Neste caso é melhor investigar primeiramente o processo 11239 porque seu tempo de processamento esta muito alto. Agora que já sabemos identificar se a maquina esta com processamento elevado e o processo conhecido como “Top CPU Consumer”, podemos investigá-los no banco.Vamos trabalhar com o PID 11238 para os exemplos a seguir.Utilizando o SQL*Plus, vamos primeiramente descobrir mais sobre esta sessão no banco de dados com a seguinte query:

SQL> SELECT SID, serial#, username, program, sql_hash_value, osuser,machine, taddr,lockwait, statusFROM v$sessionWHERE paddr = (SELECT addrFROM v$processWHERE spid = 11238);

Principais campos:
Sid = Utilizado para join com outras tabelas.
Sql_hash_value = Id da query que esta sendo executada Osuser,
machine = Ajuda na identificação de qual usuário esta conectado e consumindo recursos

.Note que a coluna spid da tabela v$process é o PID do SO. Agora que sabemos qual é a sessão no banco que esta consumindo mais recursos, é possível rastrear todo o restante da sessão. Para verificar a query que esta sendo executada pela sessão que mais esta consumindo CPU, execute a seguinte query:

SQL> select sql_text from v$sql Where hash_value = HASH_VALUE

Este parâmetro HASH_VALUE vem da query anterior executada para obter as informações sobre a sessão do usuário. É possível também obter os dados sobre a execução da query com a seguinte query:

SQL> select EXECUTIONS, LOADS, INVALIDATIONS, PARSE_CALLS, DISK_READS, BUFFER_GETS, ROWS_PROCESSED
From v$sql Where hash_value = HASH_VALUE;

Fique preocupado se algum destes campos vier com valor alto. Como já foi obtido a query, você agora pode fazer um explain para verificar se algo precisa ser reescrito ou se é preciso criar algum índice. Uma das views mais importantes do banco para realizar tuning é a v$session_wait.

Eu não vou entrar em muitos detalhes de como utiliza de forma efetiva neste artigo, mas como foi obtido o SID na primeira query sobre os detalhes sessão, verifique qual “EVENT” esta ocorrendo para esta sessão. Pode ser bem eficiente. Segue exemplo:

SQL> select sid,event,p1,p2,p3 from v$session_wait where sid = SID;

Nem sempre a query/sessão que esta consumindo mais recursos de CPU é a responsável por problemas de desempenho no banco. Lembre-se de que um servidor de banco tem fatores muito importantes como acesso a memória e principalmente disco. Vamos ver isso nas próximas postagens

JUMPSTART - Client /Server/FlashImage

Preparando um CLIENT Jumpstart
1. No cliente entre no prompt OK
STOP A

2. Anote o endereço ethernet do servidor que tem de ser adicionado ao jumpstart em /etc/ethers

Ok banner
Sun Ultra 80 UPA / PCI (2 X UltraSPARC-II 450MHz), n º Teclado
OpenBoot 3,25, 2048 MB de memória instalada, Serial # 13555210.
Endereço Ethernet 4:0:40: d1: b4: 6b, Host ID: 80d2b45a.

3. Definir local-mac-address para false

ok setenv local-mac-address? false
local-mac-address? = false



3. Conectar o cabo de rede para ser usada durante o jumpstart. O dispositivo utilizado aqui é hme0.
Nota: O dispositivo selecionado deve corresponder sysidcfg arquivo em jumpstart SERVER Este é um exemplo de configuração de interface HME

ok show-nets
a) /pci@1f,2000/SUNW,hme@1,1
b) /pci@1f,4000/network@1,1

ok nvalias net /pci@1f,2000/SUNW,hme@1,1
ok nvstore



4. Inicie o processo jumpstart. Verifique se o processo foi bem sucedido. Observe como a imagem é descompactada durante jumpstart.

ok boot net - install
Resetting ...
screen not found.
Can't open input device.
Keyboard not present. Using ttya for input and output.
Sun Ultra 80 UPA/PCI (2 X UltraSPARC-II 450MHz), No Keyboard
OpenBoot 3.25, 2048 MB memory installed, Serial #13743210.
Ethernet address 8:0:20:d1:b4:6a, Host ID: 80d1b46a.
Rebooting with command: boot net - install
Boot device: /pci@1f,4000/network@1,1 File and args: - install
SunOS Release 5.8 Version Generic_108528-13 64-bit
Copyright 1983-2001 Sun Microsystems, Inc. All rights reserved.
whoami: no domain name
Configuring /dev and /devices
Using RPC Bootparams for network configuration information.
SUNW,hme1 : No response from Ethernet network : Link down -- cable problem?
Skipping interface hme1
Configured interface hme0
Searching for configuration file(s)...
Using sysid configuration file 172.18.124.100:/jumpstart/Sysidcfg/soa-1/sysidcfg
syslog service starting.
savecore: no dump device configured
Running in command line mode
Generating software table of contents [this may take a few minutes...]
Table of contents complete.
Starting Solaris installation program...
Searching for JumpStart directory...
Using rules.ok from 172.18.124.100:/jumpstart.
Checking rules.ok file...
Using profile: Profiles/soa1
Using finish script: Drivers/SMS-Legacy.driver
Executing JumpStart preinstall phase...
Searching for SolStart directory...
Checking rules.ok file...
Using begin script: install_begin
Using finish script: patch_finish
Executing SolStart preinstall phase...
Executing begin script "install_begin"...
Begin script install_begin execution completed.

Processing default locales
- Specifying default locale (en_US)

Processing profile
- Opening Flash archive
- Validating Flash archive
- Selecting all disks
- Configuring boot device
- Using disk (c0t0d0) for "rootdisk"
- Configuring swap (c0t0d0s1)
- Configuring / (c0t0d0s0)
- Configuring /opt (c0t0d0s5)
- Configuring /var (c0t0d0s6)
- Deselecting unmodified disk (c0t1d0)

Verifying disk configuration
- WARNING: Unused disk space (c0t0d0)

Verifying space allocation
NOTE: 1 archives did not include size information

Preparing system for Flash install

Configuring disk (c0t0d0)
- Creating Solaris disk label (VTOC)

Creating and checking UFS file systems
- Creating / (c0t0d0s0)
- Creating /opt (c0t0d0s5)
- Creating /var (c0t0d0s6)

Beginning Flash archive extraction

Extracting archive: client-1 Image
Extracted 0.00 MB ( 0% of 1528.18 MB archive)
Extracted 1.00 MB ( 0% of 1528.18 MB archive

5. Logue no servidor jumpstarted, usando a senha padrão do servidor original


6. Verifique se os FS padrãosão montados.
CLEINT # df -k
Filesystem kbytes used avail capacity Mounted on
/dev/vx/dsk/rootvol 4125490 754739 33532449 16% /
/dev/vx/dsk/usr 4145590 1145972 29445026 29% /usr
/proc 0 0 0 0% /proc
fd 0 0 0 0% /dev/fd
mnttab 0 0 0 0% /etc/mnttab
/dev/vx/dsk/var 2053555 1070055 925967 44% /var
swap 3655960 16 553944 1% /var/run
swap 3649554 5250 3643944 1% /tmp

Criar Filesystems os FS necessários e que não estavam na imagem

# Mkfs-F vxfs-o ninode = 8192, bsize = 1024, versão = 4, inosize = 256, logsize = 1024, largefiles /dev/rdsk/oracle 79691776
# Mkfs-F vxfs-o ninode = 8192, bsize = 1024, versão = 4, inosize = 256, logsize = 1024, largefiles / dev/visual 8388608

16. Criar e montar diretórios necessários
# Cd /
# Mkdir oracle
# Mkdir visual

# Fsck /dev/rdsk/visual
# Fsck /dev /rdsk/oracle

# Mount / dev/rdsk/dev/visual /dev/visual
# Mount / dev/rdsk/oracle /dev/oracle



Preparação de um Servidor JUMPSTART

Com o FLAR IMAGE do servidor (SERVERJUMP) pronto e no diretório /Flash do servidor CLIENTEA execute:

Os passos a seguir será no cliente jumpstart CLIENTEA

1. No cliente entre no prompt OK
STOP A

2. Anote o endereço ethernet do servidor que tem de ser adicionado ao jumpstart em /etc/ethers

Ok banner
Sun Ultra 80 UPA / PCI (2 X UltraSPARC-II 450MHz), n º Teclado
OpenBoot 3,25, 2048 MB de memória instalada, Serial # 13555210.
Endereço Ethernet 4:0:40: d1: b4: 6b, Host ID: 80d2b45a.

3. Definir local-mac-address para false

ok setenv local-mac-address? false
local-mac-address? = false


Volte para true após o jumpstart

• Jumpstart Server - SERVERJUMP

Estes passos são feitos no Jumpstart Server SERVERJUMP

1. Adicionar endereço Ethernet do CLIENTEA em /etc/ethers
Verifique banner no prompt OK para MAC Address

# vi /etc/ethers
8:04:0:40: d1: b4: 6b CLIENTEA

2. Adicionar EndereçoIP em /etc/hosts e /etc/inet/ipnodes
# vi /etc/hosts
10.0.0.2 CLIENTEA

# vi /etc/inet/ipnodes (Solaris 10)
10.0.0.2 CLIENTEA

3. Adicionar informações em /jumpstart/normas
# vi /jumpstart/normas
Hostname CLIENTEA\
- Profiles/CLIENTEA Drivers / SMS-Legacy.driver


4. Modificar ou adicionar perfil para apontar para o FLAR image e configurar sistemas de arquivos necessários
Certifique-se que o FLAR image utilizado para jumpstart CLIENTEA está presente em /Flash

# cd /jumpstart/Perfis
# vi CLIENTEA (Modificar o filesytem e o FLAR image - como abaixo)
install_type flash_install
archive_location nfs 10.0.0.1:/Flash/exu303.flar
partitioning explicit
filesys rootdisk.s0 20850 /
filesys rootdisk.s1 7027 swap
filesys rootdisk.s3 2048 /var


# ls-l /Flash/CLINTEA.flar
-rw-r - r - 1 root others 1802723232 21 Jun 09:36 /Flash/CLINTEA.flar

5. Verificar as regras e se os arquivos não tem erros e se o arquivo rules.ok foi criado
# cat /jumpstart/rules
hostname CLINTEA \
- Profiles/CLINTEA Drivers/SMS-Legacy.driver

# cd jumpstart
# ./check
Validating rules...
Validating profile Profiles/SERVERJUMP...
Validating profile Profiles/CLINTEA...
The custom JumpStart configuration is ok.

# ls -l rules.ok
-rw-r--r-- 1 root other 147 May 8 21:52 rules.ok


6. Criar sysidcfg com porta Ethernet e IP usado para jumpstart ou utilizar configurações já existentes
Nota: Se o arquivo for copiado de um perfil diferente, certifique-se se ip_address, nic foi alterado para o host correto.

# cd /jumpstart/Sysidcfg
# mkdir nic_hme0
# cd nic_hme0
# cat sysidcfg
#
# Copyright (c) 2000, 2001 by Sun Microsystems, Inc.
# All rights reserved.
#
#ident "@(#)sysidcfg 2.4 01/06/10 SMI"
#
system_locale=en_US
timezone=US/Central
network_interface=hme0 {ip_address=10.0.0.2 netmask=255.255.255.0 default_route=10.0.0.1 protocol_ipv6=no}
terminal=vt100
security_policy=NONE
name_service=NONE
timeserver=localhost
root_password=O6SD6ohO6nmrA





7. Adicionar cliente CLIENTEA em /etc/bootparams
CLIENTEA root = 10.0.0.1: / jumpstart/OS/Solaris_8_2004_04/Solaris_8/Tools/Boot install = 10.0.0.1: /jumpstart/OS/Solaris_8_2004_04 boottype =: em sysid_config = 10.0.0.1: /jumpstart/Sysidcfg/nic_hme0 install_config = 10,0 .0.1: /jumpstart rootopts =: rsize = 52899

8. Encontre tftp address utilizado em /tftpboot
# cat /etc/hosts | grep CLIENTEA
10.0.0.2 CLIENTEA

# ./tftp_ip
IP address: 10.0.0.2
HEX equiv is 0B000005

lrwxrwxrwx 1 root other 12 May 1 21:57 AC127C01 -> inetboot.SUN4U.Solaris_8-1
lrwxrwxrwx 1 root other 12 May 1 21:57 AC127C01.SUN4U -> inetboot.SUN4U.Solaris_8-1

9. Link do arquivo em /tftpboot
# cd / tftpboot
# ln -s inetboot.SUN4U.Solaris_8-3 AC127C01
# ln -s inetboot.SUN4U.Solaris_8-3 AC127C01.SUN4U


10. Se o Storage Foundation (Volume Manager) é utilizado, certifique-se de acrescentar as chaves temporárias ou originais. Para o DiskSuite nenhuma licença é exigida.
# vi /jumpstart/Config/Licenses
CLIENTEA:FX:75364164756336696846066
CLIENTEA:FX:65809613661605333548899


11. Adicionar IPAddress, interface e servername em /jumpstart/config/HOSTS
# vi /jumpstart/Config/HOSTS
#
# This is the master HOSTS LIST
#
# The format is;
#
# IP NIC HOSTNAME ALIASES # comments
#
# BATMAN hosts
172.18.124.1 hme0 CLIENTEA


12. O servidor Jumpstart está pronto com a configuração exigida

Instalação de Solaris - Flar Image
1
. Copie os arquivos abaixo para o servidor jumpstart em /usr/local/sbin


# cd /usr/local/sbin

# ls –l

total 218

-rwxr-xr-x 1 root root 29752 Mar 5 20:28 flarSpecial

-rwxr-xr-x 1 root root 129 Mar 8 10:09 runFlar

# cat runFlar

#! /bin/sh

name=`/bin/uname -n`

/usr/local/sbin/flarSpecial -x /var/tmp -n "${name} Image" -c /work/zainer/solaris10_veritas5.flar


2. Criando um flar image

# ./runFlar &


3. Confirmque a flar image foi criada

# ls -l /work/zainer/solaris10_veritas5.flar

-rw-r--r-- 1 root root 1615578100 Mar 9 11:33 /work/zainer/solaris10_veritas5.flar


4. FTP para o servidor jumpstart