Nao consigo reduzir o meu datafile ! O problema é marca dagua …

Com os scripts abaixo conseguimos reduzir a marca dagua movendo as tabelas que estao
no final dos datafiles. O que fazemos é sempre repetir o script de move table, e reindexando…
Os scripts abaixo geram novos scripts que devem ser rodados..

########################################
Verificar o tamanho do bloco do banco
########################################
set pagesize 1000
set head off

column value new_val blksize
select value
from v$parameter
where name = ‘db_block_size’
/

##############################################################
Usei o tamanho do bloco de 4096 conforme na consulta abaixo.
Essa consulta ela simplesmente lista quais sao os datafiles
que podem sofrer encolhimento, e gera o comando para ja
reduzir o tamanho conforme a marca dagua.
Essa consulta deve ser repetida toda vez que voce rodar a
consulta que gera o alter table, ou seja movendo a tabela
que esta na marca dagua podemos entao encolher ainda mais
os datafiles. Lembrando que se mover a tabela de lugar
devemos reindexar os indices com status UNUSABLE.
##############################################################

select ‘alter database datafile ”’ ||
file_name || ”’ resize ‘ ||
ceil( (nvl(hwm,1)*4096)/1024/1024 )
|| ‘m;’ cmd
from dba_data_files a,
( select file_id,
max(block_id+blocks-1) hwm
from dba_extents
group by file_id ) b
where a.file_id = b.file_id(+)
and
ceil(blocks*4096/1024/1024)-
ceil((nvl(hwm,1)*
4096)/1024/1024 ) > 0
/

##############################################################
Cria o script para fazer o alter table das tabelas que estao
na marca dagua permitindo o encolhimento do datafile,
lembrando que temos que sempre trocar os datafiles
para tentar promover o encolhimento o primeiro que estou
investigando é o ‘/u01/banco/dados01.dbf’
##############################################################
select * from
( select’alter table ‘||owner||’.’||segment_name||’ move tablespace ‘||TABLESPACE_NAME||’;’ dados
from dba_extents
where segment_type = ‘TABLE’
and file_id = ( select file_id from dba_data_files
where file_name = ‘/u01/logix10/dados02.dbf’ )
order by block_id desc )
where rownum <=25;

##############################################################
Cria o script para fazer o rebuild dos indices UNUSABLE
##############################################################
select ‘alter index ‘||owner ||’.’||index_name||’ rebuild tablespace ‘||TABLESPACE_NAME||’;’
from dba_indexes
where status = ‘UNUSABLE’;

Monitoramento do alert.log

Acho interessante criar uma tabela para acessar o arquivo alert, assim nao e necessario abrir o arquivo de alerta para se verificar o conteudo das linhas.
Outro detalhe e que se pode criar rotinas para percorrer o arquivo de alerta
para verificar seu conteudo. Primeiro passo e criar um diretorio:

Create directory BDUMP as ‘c:oracle9iadminprodbdump’;
Create directory BDUMP as ‘c:oracle9iadminprodbdump’;

Create table alert_log (text varchar2(200))
Organization EXTERNAL (
Type oracle_loader
Default directory BDUMP
Access parameters
(
Records delimited by newline
Badfile ‘rejeitado.bad’
Logfile ‘logs.log’
Fields terminated by ‘
)
Location (‘diralert.log’)
)
Reject limit unlimited;

Exemplo .bash_profile para o ORACLE

#.bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
unset USERNAME

umask 022

PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
LD_LIBRARY_PATH=/usr/lib:/usr/X11R6/lib

ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
ORACLE_SID=orcl
PATH=$ORACLE_HOME/bin:$PATH

export PATH
export ORACLE_BASE ORACLE_HOME ORACLE_SID

Doskey LINUX para o SQLPLUS

Quem nao se lembra do doskey… hoje é so voltar a setinha do teclado para cima e o ultimo comando se repete.. No linux isso tambem é possivel.

Instale o rlwrap. E facil. Descompacte,
gunzip NOMEARQUIVO.gz e tar -xvf NOMEARQUIVO.gz ou tar -xvfg NOMEARQUIVO.gz

Em seguida como root:
cd rlwrap-0.33
./configure
make
make install

Depois va ate a pasta:
cd /etc/profile.d/
crie o arquivo sqlplus.sh com o conteudo:

alias sqlplus=’rlwrap sqlplus’

Sobre o RLWRAP pode ser baixado do link abaixo:

rlwrap is a ‘readline wrapper’ that uses the GNU readline library to allow the editing of keyboard input for any other command. Input history is remembered across invocations, separately for each command; history completion and search work as in bash and completion word lists can be specified on the command line.

http://utopia.knoware.nl/%7Ehlub/uck/rlwrap/

Pode ser baixado pelo link:
http://utopia.knoware.nl/%7Ehlub/uck/rlwrap/rlwrap-0.33.tar.gz

Menu shell para os scripts Oracle

Para se ter um menu interativo crie um arquivo com o conteudo abaixo.

gedit menu.sh e depois que estiver criado e com o conteudo, execute o comando chmod +x menu.sh e execute o menu com ./menu.sh

#!/bin/bash
# Menu Shell

menu ()
{
a=”ok”

while true $a !=”ok”
do
clear

echo “#################################################################”
echo “################### MENU PRINCIPAL ###################”
echo “#################################################################”
echo “”
echo “”
echo ” 1 – Iniciar banco de dados – treina”
echo ” 2 – Interromper banco de dados – treina”
echo ” 3 – Entrar no sqlplus como DBA – modo interativo “
echo ” 4 – Entrar no rman – modo interativo”
echo ” R – Reboot “
echo “”
echo “”
echo “”
echo “#################################################################”
echo ” OBS. pressione ‘ctrl+c’ p/ sair sem reiniciar o Linux”
echo “#################################################################”
echo “”
echo ” Digite a opção desejada: “
echo “”
echo “#################################################################”
read a
case $a in
R) clear; echo “FINALIZADO O SCRIPT REINICIANDO O SERVIDOR”;
sleep 2; reboot;
sleep 2; clear; break;;
1) sh inicia.sh;;
2) sh para.sh;;
3) sqlplus / as sysdba;;
4) rman target / ;;
R)reboot;;
esac
done
}

menu