Criando scripts shell x oracle

Criação dos Scripts

Os scripts a serem criados no roacle facilitam a vida do DBA. sendo que a partr das views, verificamos que podemos utilizá-las para criar arquivos no sistema. com usso, vamos usar a mesma sintaxe anterior e colocando constantes junto ao SQL podemos gerar o nosso primeiro script.
SET HEAD OFF;
SET FEEDBACK OFF;
SPOOL /tmp/oracle/saida.sh
SELECT ‘cp ‘ name ‘ /tmp/oracle/name’
FROM v$datafile;
SPOOL OFF;
O aerquivco é criado com a seuqencia de comandos para a copia. Sendo, a partoir do exemplo, faça um script mais completo, mostre a data, o usuario e interrompa o banco , e depois no mesmo script inicie o banco de dados. Dica: use a SYSDATE, USER
SHUTDOWN.SQL – este arquivo contem as instrucoes para o SQLPLUS. A exntensao SQL
simboliza sua utilização. O conteudo dos arquivos:
SHUTDOWN.SH
#/bin/bash
#este script interrompe BD
sqlplus sys/inforium as sysdba
SHUTDOWN.SQL
shutdown immediate;
exit;
cd /oracle
pwd
chmod +x shutdown.sh
shutdown.sh
===========================================================================
Prática
===========================================================================
[1] Crie um script para iniciar o banco de dados a partir de um script shell;
[2] Crie um script que mostre:
– o status do banco a partir de um script shell;
– modo do arquivamento -> archive log list (sql);
– status do banco open_mode na v$database (sql);
– nome do banco database_name na v$database (sql);
– nome da instância instance_name na v$instance (sql);

Criação de Scripts para executar Cópia a Frio

Uma das antigas formas de se proteger o banco contra falhas é se fazendo o processo de backup. Então, começaremos a proteger nosso banco com a Cópia a Frio(backup banco de dados parado)
Como nos scripts anteriores, listamos o datafile, controfile, e arquivos de redo.
Assim, vamos fazer o script para gerar o script de cópia.
Poderíamos fazer o script diretamente no shell, mas como cada banco de dados contém sua estrutura fisica em um devido local que vai ler as informações físicas e gerar o script de copia, o script de copia será obviamente agendado pelo administrador do primeiro.
Vamos por etapas:
[1] criar scripst que le os dados fisico do banco.
— Arquivo gerabkpfrio.sh —
#!/bin/bash
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/10.2.0
ORACLE_SID=treina
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/usr/lib:/usr/local/lib
PATH=$ORACLE_HOME/bin:$PATH:.:
ORA_NLS10=$ORACLE_HOME/nls/data
NLS_NUMERIC_CHARACTERS=”,.”
ORACLE_TERM=linux
ORACLE_DOC=$ORACLE_HOME/doc
NLS_LANG=”BRAZILIAN PORTUGUESE_BRAZIL.WE8ISO8859P1″
NLS_DATE_FORMAT=’DD.MM.YYYY’
export ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH ORACLE_BASE PATH
export ORACLE_TERM NLS_LANG NLS_NUMERIC_CHARACTERS ORACLE_DOC NLS_DATE_FORMAT
sqlplus / as sysdba @/oracle/gerabkpfrio.sql
[2] arquivo do script sql do qual lista a parte fisica concatenando os comandos de cópia do S.O. para uma pasta diferente da pasta do local do banc. Contém somente instruções SQLPLUS.
— Arquivo GERABKPFRIO.SQL —
SET ECHO OFF
SET FEED OFF
SET HEAD OFF
SPOOL /oracle/bkpfrio.sh
SELECT ‘cp ‘ member ‘ /oracle’ member
FROM v$logfile
UNION
SELECT ‘cp ‘ name ‘ /oracle’ name
FROM v$datafile
UNION
SELECT ‘cp ‘ name ‘ /oracle’ name
FROM v$controlfile;
SPOOL OFF
Finalizando a criação, devemos rodar o script
gerabkpfrio.sh direto no terminal para que seja gerado o script /oracle/bkpfrio.sh
— Conteúdo do bkpfrio.sh —
cp /oracle/treina/control01.ctl /oracle/oracle/treina/control01.ctl
cp /oracle/treina/control02.ctl /oracle/oracle/treina/control02.ctl
cp /oracle/treina/control03.ctl /oracle/oracle/treina/control03.ctl
cp /oracle/treina/redo01.log /oracle/oracle/treina/redo01.log
cp /oracle/treina/redo02.log /oracle/oracle/treina/redo02.log
cp /oracle/treina/redo03.log /oracle/oracle/treina/redo03.log
cp /oracle/treina/sysaux01.dbf /oracle/oracle/treina/sysaux01.dbf
cp /oracle/treina/system01.dbf /oracle/oracle/treina/system01.dbf
cp /oracle/treina/undotbs01.dbf /oracle/oracle/treina/undotbs01.dbf
cp /oracle/treina/users01.dbf /oracle/oracle/treina/users01.dbf
(*) O arquivo gerado bkfrio pode ser executado?
Ainda não, existem algumas correções a serem feitas:
[1] A cópia fria de um banco deve ser obviamente feita com o banco parado.
[2] A pasta destino para se copiar o banco não existe

Inicio ao backup com RMAN

Existem algumas formas de se fazer o backup a quente. O backup FULL, ou completo, contempla a parte fisica do banco contendo datafiles, arquivo de controle e os ultimos arquivos de redo log arquivados (archives). Já o backup incompleto, é a cópia de parte do banco, por exemplo, de um ou alguns datafiles.Já o backup incremental é aquele que contempla somente as diferenças que foram geradas desde o último backup. Para isso, se deve marcar um backup como nível zero, para que sejam gerados backups diferenciais.O banco de dados deve ficar em modo de arquivamento dos arquivos de redo log.
Assim, podemos garantir que todas as sentenças sejam armazenadas e podemos reconstruir o banco.Os arquivos de redo, geralmente ficam multiplexados em grupos. A ORACLE recomenda que você tenha sempre mais de um arquivo de redo log por grupo. O padrão é se ter três grupos, cada um contendo um arquivo de redo.O ideal é se ter no mínimo dosi e em discos separados para melhorar performance.
A ORACLE recomenda que todo o backup seja feito via o Recovery Manager.O RMAN, aplicativo presente no binário do ORACLE, pode ter executado se conectando a um banco que vai ser seu repositorio e no banco alvo será o banco que será feita as ações: backup, restore, etc.A principal configuração é o modo de arquivamento. Para se verificar se o seu banco esta está nesse modo devemos exeuctar os comandos abaixo no SQL*Plus: archive log list; select log_mode from v$database; Se o seu banco não estiver em modo de arquivamento devemos então configurar alguns outros parâmetros. A localização padrão de arquivamento e do backup é configurado através do parâmetro db_recovery_file_dest e o tamanho em bytes determinado para a área de backup incluindo archives é o parâmetro db_recovery_file_dest_size.
Então vamos ao SQL*PLUS e verificar a configuração atual destes parâmetros: show parameters db_recover; Este comando mostra os parâmetros e seus valores. Poderíamos também fazer:
SELECT * FROM v$parameter;

Para confiogurá-los, vamos ao SQL*Plus e executar os seguintes comandos:
ALTER SYSTEM SET db_recovery_dest=’/oracle’ SCOPE=spfile;
ALTER SYSTEM SET db_recovery_file_dest_size=6G SCOPE=spfile;

Agora, finalmente, devemos colocar o banco em modo de arquivamento. É necessário parar o banco, depois montá-lo. Efetuar a configuração para o modo de arquivamento, abrir o banco e novamente confirmar se o banco está em arquivamento. Para tal, consulte a v$datafile (log_mode) e o comando ‘archive log list;’. Para colocar em modo de arquivamento, no SQL*Plus:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

IMPORTANTE: O nosso banco foi criado SEM o arquivo SPFILE. antes de iniciar os exercícios, devemos criá-lo. NO SQL*Plus com o banco de dados aberto, digite:
CREATE SPFILE FROM PFILE;
SHUTDOWN IMMEDIATE;
STARTUP; ======================================================================= -====================- Exercícios de Fixação -====================- =======================================================================[1] O que é BACKUP FULL?
[2] Qual a diferença entre backup quente e frio?
[3] Qual a quantidade de grupos e arquivos de redo log existentes no seu banco? Dica: Use V$LOG e V$LOGFILE.
[4] O que é um arquive?
[5] O que é um backup incremental?
[6] Qual o tamanho atual da sua flas recovery area?
[7] Como colocar o banco em modo de arquivamento?
[8] Qual o aplicativo de backup recomendado pela ORACLE?
[9] O que é um catá-log de recuperação?
[10] O que ocorre se o adm de sistemas remover os backups sem usar o RMAN?
[11] Como se aumenta a área atual de backup?
[12] Por que devemos parar o banco para colocá-lo em modo de arquivamento?

Recuperacao incompleta

When is Incomplete Recovery Necessary?
Incomplete recovery means losing data on purpose. It occurs when complete recovery is impossible or you want to lose some information that was entered by mistake.
It is not possible to skip the recovery of a bad transaction and recover all other work.
There are cases where incomplete recovery won’t be possible with the current controlfile:
All copies of the controlfile are lost (and it is not possible to recover with a CREATE CONTROLFILE command)
The current controlfile does not accurately describe the database that needs to be restored (typically due to dropped tablespaces)
The syntax for recovery using a backup controlfile includes the UNTIL keyword even if the recovery is complete.
All datafiles except temporary tablespaces are restored. Undo tablespaces are restored.
The Method for Incomplete Recovery
It is often a good idea to perform a complete offline backup before beginning an incomplete recovery to ensure no loss of data.
Steps to incomplete recovery:
Mount the database
Restore all datafiles (they don’t need to be from same backupset / time), and controlfile if necessary
Recover the database UNTIL time, cancel or change number
OPEN with RESETLOGS
OPEN with RESETLOGS initializes the online redo files creating a new incarnation of the database. An incarnation of a database has a new thread of redo, beginning at log switch sequence number 1.
Backups and archivelogs are specific to an incarnation and therefore those generated by one incarnation must be kept separate from those generated by a previous incarnation.
Only SYSDBA can perform incomplete recoveries
UNTIL TIME Recovery
SQL> shutdown immediate;
SQL> startup mount;
—No restore b/c OS or other means are used to restore necessary files—
SQL> recover database UNTIL TIME ‘2006-08-15:14:07:00’
The time format must be in the format YYYY-MM-DD:HH24:MM:SS irrespective of NLS_DATE_FORMAT
SQL> alter database open resetlogs;
—–ALTERNATIVE in RMAN—–
RMAN> run {
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> sql “alter session set nls_date_format=”dd-mon-yyyy hh24:mi:ss””;
RMAN> set until time ’15-aug-2006 14:11:00′;
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;}
UNTIL CANCEL / UNTIL SEQUENCE (RMAN) Recovery
Cancel-based recovery is typically needed after complete recovery has failed: the recovery required an archive or online log that was missing.
SQL> shutdown immediate;
SQL> startup mount;
—No restore b/c OS or other means are used to restore necessary files—
SQL> recover database UNTIL CANCEL;
SQL> alter database open resetlogs;
—–ALTERNATIVE in RMAN—–
RMAN> run {
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> set until sequence 10305 thread 1;
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;}
UNTIL CHANGE / UNTIL SCN Recovery
SQL> shutdown immediate;
SQL> startup mount;
—No restore b/c OS or other means are used to restore necessary files—
SQL> recover database UNTIL CHANGE 309121;
SQL> alter database open resetlogs;
—–ALTERNATIVE in RMAN—–
RMAN> run {
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> set until scn 309121;
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;}
Incomplete Recovery Using EM
Maintenance -> Perform Recovery
Recovery of the Controlfile
SQL> alter database backup controlfile to trace
USER_DUMP_DEST will determine where trace file is created
You should always create a trace file whenever you make physical changes to the structure of the database.
SQL> alter database backup controlfile to ‘’
Restore a Controlfile with SQL*Plus
startup mount;
SQL> recover database until cancel using backup controlfile;
Backup / Restore a Controlfile with RMAN
RMAN> backup as copy current controlfile;
RMAN> backup as backupset current controlfile;
RMAN> backup tablespace system include current controlfile;
RMAN> configure controlfile autobackup on;
RMAN> restore controlfile from autobackup;
Parameters
USER_DUMP_DEST
CONTROL_FILES

Problema do carregamento da pasta das Imagens no APEX

Faça um teste se nao fizer o download do arquivo abaixo significa que nao temos JAVASCRIPT carregados!

http://localhost:8080/i/javascript/apex_ns_3_1.js

Este problema ocorre porque nao sao carregados os JS da vida. Os danadinhos dos javascripts.
Ai teremos entao que carregar as imagens de novo:

SQL> @apxldimg e:
Procedimento PL/SQL concluído com sucesso.
antigo 1: create directory APEX_IMAGES as ‘&1/apex/images’novo 1: create directory APEX_IMAGES as ‘e:/apex/images’
Diretório criado.

Ou instalar tudo de novo informando o diretorio de imagens como /images/

@apxrtins SYSAUX SYSAUX TEMP /images/

Configurando o Apex 3.1.1 em inglês

1. Faça o download do Apex 3.1.1 em http://www.oracle.com/technology/products/database/application_express/download.html. É o arquivo apex_3.1.1.zip – 87,5MB.
2. Descompacte o arquivo mantendo a estrutura das pastas. Copie a subpasta “apex” para a raiz do drive C:, de modo a facilitar as instruções. Veja como ficaria:
3. Agora começa um trabalho típico de administração de banco de dados. Abra uma janela do DOS (botão Iniciar / Executar / cmd), navegue até a pasta c:apex e execute o comando sqlplus /nolog para abrir o SQL*Plus, ferramenta de modo caracter que permite fazer tudo no banco.
4. Em seguida conecte-se como administrador do banco. Execute o comandoconnect sys as sysdbae digite a senha que você configurou na instalação do Oracle 10g XE.
5. Se você estava na pasta c:apex antes de iniciar o SQL*Plus, digite o comando de upgrade do Apex abaixo e aguarde alguns minutos:@apxrtins SYSAUX SYSAUX TEMP /i/Se você não estava na pasta c:apex, o comando não funcionará. Nesse caso, digite os comandos disconnect e depois exit e recomece.
6. Quando acabar o upgrade, será necessário criar uma senha de administrador do Apex (usuário ADMIN), que não se confunde com a senha de sys do banco de dados.
7. Digite o comando abaixo e digite a senha do usuário ADMIN do Apex 3.1.1:@apxchpwd
8. Considerando que você está logado com a senha de sys, migre as imagens do novo Apex com o comando:@apxldimg.sqlPressione ao ser solicitado de um parâmetro no início do processo. Aguarde alguns minutos.
9. Quando acabar de migrar as imagens será necessário a execução de um PATH para que as imagens sejam carregadas, digite o seguinte comando (exatamente como mostrado, sem efetuar substituições!):
@apxldimg C:

10. Digite o comando:@apxxepwd.sql #senha do Admin#em que #senha do Admin# corresponde à senha do usuário ADMIN que você escolheu no passo 7.
11. Saia do SQL*Plus com os comandos disconnect e depois exit. Para testar até aqui, vá em botão Iniciar / Todos os programas / Oracle Database 10g Express Edition / Ir para a Home Page de Banco de Dados.
12. Rode o script apex_epg_config.sql se for usar o xml.
13. Se ainda persistir problemas veja se exitem objetos invalidos recompile use utlrp.sql

Links sobre o apex

http://www.oracle.com/technology/products/database/application_express/html/3.1_and_xe.html (interessante)
http://www.oracle.com/technology/products/database/application_express/download.html
http://download.oracle.com/docs/cd/E10513_01/doc/install.310/e10496/install.htm#CHDHIJGE
http://download.oracle.com/docs/cd/E10513_01/doc/install.310/e10496/post_inst.htm#BHAFCGBC
http://download.oracle.com/docs/cd/B19306_01/install.102/b14312/gblsupp.htm

Passando o Apex para português do Brasil

1. No DOS, navegue até a pasta c:apexbuilderpt-br
2. Digite o comando:set NLS_LANG=BRAZILIAN PORTUGUESE_BRAZIL.AL32UTF8para deixar o Windows preparado para receber a atualização em português do Brasil.
3. Entre no SQL*Plus e conecte-se como sysdba, do mesmo jeito que na etapa anterior.
4. Execute o comando para apontar o Oracle para o esquema do próprio Apex:ALTER SESSION SET CURRENT_SCHEMA = FLOWS_030100;
5. Considerando que você estava na pasta c:apexbuilderpt-br antes de iniciar o SQL*Plus, digite o comando de inclusão do nosso idioma no Apex:@load_pt-br.sqle aguarde alguns minutos, encerrando todo o processo.
Acessando o Apex 3.1.1 em português
1. Para testar até aqui, vá em botão Iniciar / Todos os programas / Oracle Database 10g Express Edition / Ir para a Home Page de Banco de Dados. Vai aparecer o campo “Espaço de trabalho”, que não existia na versão 2.1.
2. No campo Espaço de trabalho, digite o mesmo valor usado em nome. Assim, se o usuário que você criou lá no Apex 2.1 foi Ana, seu espaço de trabalho e nome serão Ana. A senha será a escolhida para o usuário Ana naquele momento.Pronto!

A estrutura física do Banco de dados Oracle – Revisão

[Arquivos de controle] – o padrão oracle é maner tres arquivos por motivos de segurança.
Se deve multiplicar estes arquivos por motivo de segurança. estes arquivos contém informações vitais, sendo elas:

– localização física dos arquivos;
– ponto de recuperação;
– informações sobre backup;
– último SCN (system change number);

[Datafiles ou arquivos de dados] – os datafiles são aqueles dos quais armazenam os dados das tabelas. São mapeados logicamente através das tablespaces, onde cada tablespace deve ter um ou mais datafiles. Internamente, para melhor acondicionamento dos dados, os datafiles são segmentados, e ainda: nestes segmentos existem as extensões e – por fim – o bloco de dados que é a menor porção de unidade de armazenamento no oracle. a segmentação pode ser manual ou automática. a partir da 9i este controle de segmentação automática é padrão.

[Arquivos de redo] – separados em grupos para permitir a troca entre eles (switch). O padrão são dois grupos e cabe ao DBA aumentar o número de grupos e membros para promover segurança. O redo é uma área essencial para que se possa manter integridade do BD. Toda instrução é replicada, quando confirmada, para o log_buffer. Após isto, o log_writer baixa esta informação em disco. Segue a regra de 1/3 do log_buffer cheio, após o commit ou conforme determinado para mttr_target (mean time to recover) .
Para se fazer o backup a quente (hotbackup), devemos habilitar o arquivamento destes arquivos de redo.

Cabe ao DBA saber a freqüência de arquivamento para saber quantos mega estão sendo gerados. Se a freqüência for alta demais pode estar ocorrendo retençõ (espera) ao se gerar o switch. Isto fazcom que o banco trave. Geralmente, o DBA – para tentar resolver isto – aumenta o log_buffer e/ou aumenta o tamanho dos arquivos de redo para que o switch ocorra com menor freqüência. Assim, estes arquivos de redo – quando gerados – são arquivados para que se houver perda ou falha no banco, possa retroceder no tempo através destes “archives”. Todos eles devem ser armazenados, não se pode perder a seqüência.

[Parte Física] – não essencial à recuperação. São considerados arquivos que podem ser recriados:
– arquivo de senha;
– spfile;
– init.ora;

Para o spfile pode ser recriado a partir do pfile (init.ora) através do comando:
SQL> CREATE SPFILE FROM PFILE;

Já o PFILE, quando instalamos o software oracle, vm um arquivo exemplo, o INIT.ORA,que pode
ser aproveitado para criar o seu INIT.ORA.
O arquivo de senha pode ser recriado com o comando $ORACLE_HOME/bin/orapwd

[Exercícios]

[1] Liste os datafiles;
SELECT name
FROM v$datafile;

[2] Liste os controlfiles;
SELECT name
FROM v$controlfile;

[3] Liste o local do arquivo de parâmetros;
SQL> SHOW PARAMETERS spfile;

[4] Indique o caminho do arquivo de senhas;
$ORACLE_HOME/dbs (linux)
$ORACLE_HOME/database (windows)

[5] Indique o caminho do arquivo de parâmetros (windows/linux);
$ORACLE_HOME/dbs (linux)
$ORACLE_HOME/database (windows)

[6] Crie o SPFILE a partir do PFILE;
SQL> CREATE SPFILE FROM PFILE;

[7] Execute o ORAPWD. O que ocorre?
o sistema operacional, mostra uma lista completa, porém suscinta de todas as
opçoes e argumentos do comando ORAPWD.

[8] Na ausência, de um arquivo de controle, o que ocorre?
se o banco ta ativo e perde o aruqivo de controle, o dba deve executar shutdown
no banco, e copiar a partir de um control file bom para a rota do danificado,
ou ajustar o parametro para nao pegar o controlfile com problema

[9] Na ausência, de um arquivo de redo, o que ocorre?
se o o arq redo pertence a um grupo de redo que contem mais
arquivos (=esta multiplexado), nao haverá parada de banco: ocorrera mensagens
do alert log. cabe ao dba apagar este arquivos de redo e recria-lo
se o arq de redo nã esta no grupo multiplexado -> Cabe ao dba (IMEDIATAMENTE)
recriar ou criar um novo aquivo de redo.
se o arq nao está no grupo de redo ativo, ou arqs de redo forem removidos -> Cabe
ao DBA parar o banco e voltar o backup

[10] Na ausência, de um arquivo spfile, o que ocorre?
o banco procura automaticamente o arquivo init.ora. Portanto, o spfile pode ser
criado a partir do init.ora.

Utilizacao dos Indices

Um problema grave nas empresas é que geralmente se criam muitos indices, para evitar isso monitore de tempos em tempos a utilizacao dos mesmos:

SQL
> drop table test purge;Table dropped.
SQL> create table test as select * from all_objects;Table created.
SQL> create index testidx on test(object_id);Index created.
SQL> –now enable monitoring on index
SQL> alter index TESTIDX MONITORING usage;Index altered.
SQL> —execute query where index is created.
SQL> select count(*) from test where object_id=77204;COUNT(*)
———-
1
SQL>—disable index mornitoring
SQL> alter index TESTIDX NOmonitoring usage;Index altered.
SQL> —now check the V$OBJECT_USAGE for index utilization. if we found nothing then drop index is better option
SQL> select * from v$object_usage;INDEX_NAME TABLE_NAME MON USED START_MONITORIN END_MONITORING
———- ———- — —– —————
—————
TESTIDX TEST NO YES 07/31/2008 19:51:20
07/31/2008 19:52:04