Compilar objetos invalidos no Oracle

Um select pode garar o script para compilar objetos inválidos.

-- Objetos Invalidos
SELECT * FROM all_objects WHERE status <> 'VALID';
SELECT 'ALTER ' || object_type || ' ' || owner || '.' || object_name || ' compile;'  FROM all_objects WHERE status <> 'VALID' and object_type <> 'PACKAGE BOY';
SELECT 'ALTER ' || object_type || ' ' || owner || '.' || object_name || ' compile body;'  FROM all_objects WHERE status <> 'VALID' and object_type = 'PACKAGE BOY';

Script para backup em PHP

O script facilita o backup, porem nao esquecer que o SSH2 do PHP retorna caracteres de controle misturados (chr(27)).

#!/usr/bin/php
<?php
/* 
 * bkp.php - Copia backup do BD Oracle
 * Helder - 08-12-2009
 */

$nl = "\n";
$data = date('Y_m_d');
$dir = '/home/helder/Oracle/bkp_'.$data;
echo "Criando diretorio $dir $nl";
@mkdir($dir);

echo "Conectando...$nl";
if (!($connection = ssh2_connect('192.168.1.20', 22))) {
 echo "Falhou $nl"; exit;
}
if (!ssh2_auth_password($connection, 'oracle', 'suporte')) {
 echo "Falhou $nl"; exit;
}

echo "Lista de arquivos $nl";
if (!($files = @ssh2_shell($connection,"xterm"))) {
 echo "Falhou $nl "; exit;
}
fwrite($files,"ls /u01/oracle/backup/orcl/* $nl");
sleep(1);
$arquivos = '';
while($line = fgets($files)) {
 flush();
 $arquivos .= $line;
}
$arquivos = str_replace(chr(27),"\n",$arquivos);
fclose($files);
preg_match_all('/\/u.*[\n\r]/',$arquivos,$files);

// Nova conexao .............
echo "Conectando...$nl";
if (!($connection = ssh2_connect('192.168.1.20', 22))) {
 echo "Falhou $nl"; exit;
}
if (!ssh2_auth_password($connection, 'oracle', 'suporte')) {
 echo "Falhou $nl"; exit;
}

$arquivo = 'vns.dmp'     ; echo "Copiando $arquivo $nl";
ssh2_scp_recv($connection, '/tmp/vns.dmp', $dir.'/'.$arquivo);
$arquivo = 'dbnoite.dmp' ; echo "Copiando $arquivo $nl";
ssh2_scp_recv($connection, '/u01/oracle/admin/orcl/dmp/dbnoite01.dmp', $dir.'/'.$arquivo);
$arquivo = 'dbdia.dmp'   ; echo "Copiando $arquivo $nl";
ssh2_scp_recv($connection, '/oracle/admin/orcl/dmp/dbdia01.dmp', $dir.'/'.$arquivo);

$dir = $dir."/rman";
@mkdir($dir);


echo "Criando diretorio $dir $nl";
foreach($files[0] as $arquivo) {
 $arquivo = chop(rtrim($arquivo));
 if (strpos($arquivo,'*')===FALSE) {
 $destino = $dir.'/'.basename($arquivo);
 echo "Copiando $arquivo para $destino $nl";
 ssh2_scp_recv($connection, $arquivo, $destino);
 }
}

?>

Ajustando NLS_LANG para formato de Data no PHP-Apache-Oracle

Para que a data fique na forma personalizada do Brasil, ajustar a variavel NLS_LANG no script que inicializa o apache.

vi /etc/init.d/apache2
export NLS_LANG=”BRAZILIAN PORTUGUESE_BRAZIL.WE8ISO8859P1″

Dependendo da versão do apache pode ser necessário alterar o envvars
vi /etc/apache2/envvars
export NLS_LANG=”BRAZILIAN PORTUGUESE_BRAZIL.WE8ISO8859P1″

No windows o NLS_LANG fica dentro do “regedit”, ou tambem pode ser colocado nas varáveis de ambiente.