Questao da prova 1Z0-058

Assuntos das questoes 1Z0-058 sobre as informacoes abaixo:

  1. Sobre os processos do ACFS

  2. Additional processes are started when ADVM volumes are configured.
    • VDBG: The Volume Driver Background process forwards ASM requests to lock or unlock an extent for volume operations to the Dynamic Volume Manager driver. The VDBG is a fatal background process, the termination of this process brings down the ASM instance.
    • VBGn: Volume Background processes wait for requests from the Dynamic Volume Manager driver, which need to be coordinated with the ASM instance. An example of such a request would be opening or closing an ASM volume file when the Dynamic Volume Manager driver receives an open for a volume (possibly due to a file system mount request) or close for an open volume (possibly due to a file system unmount request). The unplanned death of any of these processes does not have an effect on the ASM instance.
    • VMB: Volume Membership Background coordinates cluster membership with the ASM instance. 
      Sobre redundancia do diskgroup

  1. There are always failure groups even if they are not explicitly created. If you do not specify a failure group for a disk, that disk is placed in its own failure group with the failure group name the same as the disk name Therefore, if 20 disks were in a single disk group, there could be 20 failure groups as well. Failure groups have meaning only when used with normal and high redundancy disk groups. All failure groups within the same disk group should be created with the same capacity to avoid space allocation problems.

    Sobre Quiescing no RAC

Quiescing a database
For maintenance purposes you may require a database to be quiesed, so that the only connections allowed are as sys or system.  Even users with the DBA role will be excluded.
This mode is useful for:
Transactions that would otherwise fail if user transactions access the same object or set of objects.  Things like changing the schema of a database table, or adding a column to an existing table where a no-wait lock is required.
Multistep procedures, that could confuse application users, if they were still logged on. For example exporting dropping an re-creating a table.
Quiescing the database will have a similar effect to shutting the database down, and restarting it in restricted mode.  However on a high availability system, you may not be able to shut the database down.  Quiescing would have a smaller impact then the shutdown and restart.
To place a database into quiesced mode:
SQL> alter system quiesce restricted;
Non-DBA active session will continue until they become inactive.  An active session is a session that is inside a transaction or a session that is currently holding shared resources. No inactive sessions are allowed to become active.  When a connected user issues a query, the query will seem to hang until the databas
e is taken out of quiesced state, and the query will then continue.
Once all of the Non-DBA active sessions have become inactive, then the “SQL> alster system quiesce restricted;” completes, and the database is then in a quiesced state.  In a RAC environment, this statement will affect all the instances, and not just the instance where the statement was issued from.
While waiting for this statement to process you can query from another session SID(session ID) from v$blocking_quiesce view.  You can join this view with v$session to get more information about the session.
SQL> select bq.sid, ses.user, ses.osuser, ses.type, ses.program
From v$blocking_quiesce bq,
           V$session ses
Where bq.sid = ses.sid;
If your session terminates, or you cancel the request to quiesce the database, then the Oracle Database automatically reverses any partial effects of the statement.
For queries that are carried out by successive OCI(Oracle Call Interface) fetches,  the Oracle database only waits for the first fetch to complete.
The mechanism works the same for  dedicated and shared server connections.  The user trying to login after the quiesce statement has been issued, will experience it as though the login as hung.  The login will continue again when the database is unquiesced.
The database will remain in this state, regardless of whether the session that issued the statement is still active or not.  In order to take the database out of this mode a DBA(sys,system) will need to log in and unquiesce the database.  In a RAC environment, the unquiesce statement can even be issued from a different instance.
SQL> alter system unquiesce;
A quiesced database is not in the correct state for a cold backup, because the file headers are still being updated.  However an online backup in this state is possible.  
To view the QUIESCE state of an instance, you can:
SQL> select active_state from v$instance;
The possible values returned are:
·         NORMAL      – Normal unquiesced state
·         QUIESCING – Being quieced, but some non-DBA sessions are still active
·         QUESCED     – Quiesced, non non-DBA sessions are active or allowed

Particionamento de tabelas Oracle


O particionamento de tabelas e de indices auxilia no tratamento e na seleção destes dados. Os dados são armazenados em segmentos, e estes segmentos que estão armazenados nessas particoes podem sofrer manutençoes diretamente.


Para isso temos as seguintes tipos de partições:


Range – E a mais comum e pelo nome ja diz baseada em cima de um range da chave.
Hash – A partir de um algoritmo os dados são armazenados nas partições a partir de uma chave de particionamento.
List – Os dados sao mapeados as particoes a partir de listas.
Interval – Os dados sao mapeados as particoes a partir de intervalos que são automaticamente criados de acordo com o intervalo.
System – Os dados sao mapeados as particoes de forma arbitraria – via o programa que os esta tratando.
Podemos ainda ter uma subparticao, para que possamos ter uma opção de aproveitar ainda mais aquela partição
 ja existente.
  • Range top level: – Range-Range
    – Range-Hash
    – Range-List 
  • List top level:
    – List-Range – List-Hash – List-List 
  • Interval top level: – Interval-Range
    – Interval-Hash – Interval-List
 A chave do particionamento e que comanda, como os dados vão ser inseridos, e cada partição pode ter no máximo 16 colunas como chave. Podemos também fazer os comandos DML e select diretamente a essas chaves. Nenhum dos comandos existentes seja DML ou SELECT precisa ser alterado para que se utilize particionamento.
Existe um tipo de particionamento que esta baseado no relacionamento das tabelas. Ou seja, pela constraint de chave estrangeira. Ainda, temos também o particionamento que pode ser baseado em uma coluna virtual ou seja calculada.
Quais sao os beneficios de se utilizar o particionamento ?
O particionamento automaticamente faz com que o otimizador do oracle exclua as partições que não são interessantes para resolver os comandos. 
As particoes podem sofrer manutenção diretamente sem ter outras partições comprometidas para os comandos de DML e SELECT.
As partições vão contribuir diretamente com os recursos de gerenciamento de ciclo de vida da sua informação.
Voce pode atribuir uma particao a uma tablespace, dai podendo armazenar seus datafiles em locais distintos.
Varios comandos poderemos executar para realizar a manutenção nas partições:
  • ALTER TABLE ADD PARTITION 
  • ALTER TABLE DROP PARTITION (RANGE) 
  • ALTER TABLE TRUNCATE PARTITION (RANGE) 
  • ALTER TABLE MOVE PARTITION 
  • ALTER TABLE SPLIT PARTITION 
  • ALTER TABLE EXCHANGE PARTITION 
  • ALTER TABLE RENAME PARTITION 
  • ALTER TABLE MODIFY PARTITION 
  • ALTER TABLE COALESCE PARTITION
A criação de uma tabela particionada pode ser feita usando o comando abaixo:
create table exemplo
(idx number, descricao varchar2(2))
partition by range (idx)
(partition values less than (0)  tablespace users,
partition values less than (maxvalue) tablespace users1);
Operações diretamente nas partições:
select idx from complex PARTITION (particao1);
insert into complex PARTITION (particao2) values (4,5);
delete from complex PARTITION (particao3);
create table teste as select * from tabela partition(particao1);
expdp sh/sh tables(SALES:SALES_Q1_20001)
Dicionario de dados para consultar as partições
DBA_TAB_PARTITIONS
DBA_SUBPATITION_TEMPLATES
DBA_SEGMENTS

Name
Purpose
N
DBA_TABLES
T
DBA_PART_TABLES
Partition type: default values
T
DBA_TAB_*PARTIT
IONS
Partitions detail
P
DBA_*PART_KEY_COLUMNS
Partition keys
P

T = Tabela
P = Particao
SQL> SELECT TABLE_NAME, TABLESPACE_NAME,

  2         PARTITIONED, ROW_MOVEMENT
3 FROM USER_TABLES ;
TABLE_NAME TABLESPACE_NAME PARTITIONED ROW_MOVE
---------- --------------- ----------- --------
HR_EMP                     YES
MULTICOL YES
ORDINARY USERS NO
SIMPLE YES
ENABLED
ENABLED

DISABLED


SQL> SELECT TABLE_NAME, PARTITIONING_TYPE,
2 SUBPARTITIONING_TYPE, PARTITION_COUNT,
3 PARTITIONING_KEY_COUNT,DEF_TABLESPACE_NAME 4 FROM USER_PART_TABLES ;

TABLE_NAME TYPE   SUBTYPE PAR.CNT PAR.KEY_CNT DEF_TAB.SP
---------- ------ ------- ------- ----------- ----------
COMPOS     RANGE  HASH          3
MULTICOL RANGE NONE 4
SIMPLE LIST NONE 2
1 USERS
2 USERS 

1 USERS



Name
Columns to show
DBA_SEGMENTS
PARTITION_NAME, SEGMENT_TYPE
DBA_EXTENTS
PARTITION_NAME, SEGMENT_TYPE
DBA_OBJECTS
SUBOBJECT_NAME, OBJECT_TYPE

Global index
create index idx on employees ( first_name )
global partition by range (first_name)
( partition x1 values less than (‘H’) tablespace users, 
  partition x2 values less than (maxvalue) );
Local index tabela particionada mesmas tablespaces da tabela
create index idx on employees ( first_name ) local;
Local index tabela particionada mas em outras tablespaces
create index idx on employees ( first_name ) 
 local
 partition partition1 tablespace idx1,
 partition partition2 tablespace idx2
 );
Algumas curiosidades quando usando tabelas particionadas:
  • O particionamento e pago a parte, sendo uma option do banco instalado como enterprise database
  • Algumas sentenças SELECT podem ser automaticamente dividas para que a resolução seja mais rápida
  • As operações de delete e inserts são enxergadas pelo dicionário somente como simples operação de organização.
  • As operações nos indices podem ser individualizadas (usando local indexes)
  • Podemos ter ate 1048575 partições por tabela ou índice
  • Podemos automatizar a criação das tabelas através de templates para as partições
  • As operações nos indices globais afetam as operações nas tabelas
  • As operações nos indices locais não afetam as operações nas tabelas como um todo
  • Os indices globais podem ser usados em tabelas particionadas ou nao. Os indices locais somente em tabelas particionadas.
  • < span>Os indices locais sao automaticamente mantidos. Ou seja, as partições alteradas nas tabelas são automaticamente alteradas nos indices.

Particionamento em indices

Diferente do particionamento da tabela, temos o particionamento do indice. O particionamento do indice pode existir independente da tabela ser particionada ou nao. Isso ocorre uma flexibilizacao a mais e importante para a manutencao destes dados.

Atributos: Global ou  Local

O indice sendo global pode ter outro tipo de particionamento que o da tabela, ou mesmo se a tabela nao tiver nenhum particionamento.  O indice global pode utilizar somente as tecnicas range e hash.
Os tipos de particionamento validos para o indice global . O indice sendo particionado local segue a mesma regra de particionamento da tabela, sendo que o indice local somente pode ser criado para a tabela que e particionadada.

Concorrencia pelo indice

Geralmente temos o evento buffer busy em uma frequencia muito grande de DML. Dai em um rac por exemplo para se evitar essa incidencia do evento, se cria o indice reverso. Isso resolveria em parte a concorrencia, mas para resolver de uma forma eficiente e conservar a mesma ordem o ideal e criar o indice global usando a tecnica de hash. Como o hash fara com que o indice seja designado a varias tablespaces, criaremos entao varios pequenos locais de contencao e nao um unico ponto de contencao geral, como resultado aumentaremos a eficiencia geral.

Os indices particionados tem duas categorias de conceito logico

Prefixo – A chave de partição é a coluna mais à esquerda (s) do índice. Sondagem este tipo de índice é menos onerosa. Se uma consulta especifica a chave de partição na partição onde particao de pesquisa é possível, isto é, nem todas as partições serão pesquisados.
Não-prefixadas – Não suporta partição de pesquisa, mas é eficaz no acesso aos dados que abrange várias partições. Muitas vezes usado para indexar uma coluna que não é a chave de partição tabelas, quando você gostaria que o índice a ser dividido na mesma chave que a tabela subjacente.
Isso depende como o acesso e feito e como as chaves estao armazenadas. Dai pode ser simplesmente um conceito logico sem nenhuma distincao ate na sintaxe do comando da criacao do indice local.

Local Prefixed Indexes

  • Somente possivel em tabelas particionadas
  • Ocupa menos espaco porque se refere a tabela particionada e suas devidas particoes
  • Melhor performance quando utilizada para operacoes massivas com paralelismo
  • Podem ser unique ou nao unique
  • Btree ou Bitmap
  • A condicao e que o indice seja criado com mesmas colunas da chave de particionamento da tabela
Exemplo:
Create index idxp1 on emp(first_name) local;
Create index idxp1 on emp(first_name) 
tablespace indx04
local
partition ex1 tablespace indx01,
partition ex2 tablespace indx02,
partition ex3 tablespace indx03
);

Local Nonprefixed Index

Indices que sao criados em tabelas particionadas
A chave do indice nao e a mesma da chave do particionamento, mesmo que a chave de particionamento seja a mesma, a chave de ordenacao nao e.
Pode ser nao unica
Pode ser bitmap ou btree
Utilizada quando as consultas envolvem a busca em mais particoes, ou que geralmente temos que varrer o indice ou muitas particoes
Exemplo:
create index idxp on emp (hire_date) local;

Tipos de particionamento de Indice

Index Types
Global (Range or Hash)
Local (All)
B-tree
Yes
Yes
Bitmap
No
Yes
Bitmap Join
No
Yes
Function
No (*)
Yes
Secondary IOT
No
Yes
Cluster*
No
No

O indice normalmente criado na tabela, tambem pode ser chamado de GLOBALNONPARTITIONED INDEX

O Status do indice – UNUSABLE

Quando o indice fica no status de unusable, o indice nao e mais usado pelo otimizador e ocorrerao erros ao executar o DML. Para isso temos alguns detalhes a serem seguidos:
Parametro de inicializacao SKIP_UNUSABLE_INDEXES – quando configurado como TRUE que e o padrao o banco de dados o oracle ira executar o DML desde que haja um indice unique com status unusable, mas os indices nao sao mantidos aqueles com status unusable.
Se em um indice particionado uma ou mais particoes estiverem com status unusable, o otimizador nao ira usar o indice para a combinacao de particoes para resolucao de consultas ou o partitioning pruning. Para as demais, utilizara as particoes que estao usable.
Truncate de uma tabela com indices particionados invalidos, faz com que estes indices invalidos fiquem validos.
Os indices invalidos devem ser reconstruidos ou removidos.

Criando o indice como PARTIAL ou FULL Versao 12c

O indice na versao 12c pode ser criado somente em algumas particoes da tabela, para agilizar sua utilizacao. Nas versoes anteriores as do 12c, nao temos tanta flexibilizacao na criacao, manutencao e remocao de particoes de indices.
Exemplos
create index orders_idx_partial on orders(order_total) global indexing partial;
ou
create index orders_idx_partial on orders(order_total) global indexing full;

remover o banco de dados via DBCA – Countdown to OCM

Para remover o banco de dados PROD1 via linha de comando com dbca, faca o comando abaixo:

-bash-3.2$ dbca -silent -deleteDatabase -sourceDB PROD1 

Estabelecendo conexão com o banco de dados

4% concluído

 9% concluído

14% concluído

19% concluído

23% concluído

28% concluído

47% concluído

Atualizando arquivos de configuração de rede

48% concluído

52% concluído

Deletando instância e arquivos de dados

76% concluído

100% concluído


Verifique o arquivo de log “/u01/app/oracle/cfgtoollogs/dbca/PROD10.log” para obter mais detalhes.

Criando o banco de dados Oracle via linha de comando – Countdown to OCM

Iremos criar um banco de dados Oracle a partir da linha de comando, sem uso de ferramentas.

Para isso, faremos a divisão das etapas em passos mostrados abaixo:
1) Alterar o /etc/oratab adicionando seu novo banco -bash-3.2$ 

-bash-3.2$ cat /etc/oratab

#

# This file is used by ORACLE utilities.  It is created by root.sh
# and updated by either Database Configuration Assistant while creating
# a database or ASM Configuration Assistant while creating ASM instance.
# A colon, ':', is used as the field terminator.  A new line terminates
# the entry.  Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
#   $ORACLE_SID:$ORACLE_HOME:<N|Y>:
#
# The first and second fields are the system identifier and home
# directory of the database respectively.  The third filed indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
+ASM:/u01/app/oracle/product/11.2.0/grid:N
*:/u01/app/oracle/agent11g:N
PROD1:/u01/app/oracle/product/11.2.0/dbhome_1:N # adicionado 

 2) Criar os apelidos para os devidos locais, isso facilita a administracao. Arquivo alias.sh
alias tns=’cd $ORACLE_HOME/network/admin’
alias dbs=’cd $ORACLE_HOME/dbs’
alias startup=’echo startup | sqlplus “/ as sysdba”‘
alias abort=’echo shutdown abort | sqlplus “/ as sysdba”‘
alias mount=’echo startup mount| echo shutdown abort | sqlplus “/ as sysdba”‘
alias rman=’rman target /’
alias rmana=’rman target / auxiliary sys/oracle_4U@aux’
alias rdbms=’cd $ORACLE_HOME/rdbms/admin’
depois de criado, faca a carga do arquivo
source alias.sh
 3) Criar o arquivo de senha 
-bash-3.2$ dbs
-bash-3.2$ pwd
/u01/app/oracle/product/11.2.0/dbhome_1/dbs
-bash-3.2$ orapwd file=orapwPROD1 password=oracle
 4) Criar o arquivo de inicializacao, parameter file  
vi initPROD1.ora
db_name=PROD1
db_create_file_dest=’/u01/app/oracle/oradata/’
db_create_online_log_dest_1=’/u01/app/oracle/oradata/’
db_create_online_log_dest_2=’/u02/app/oracle/oradata/’
sga_target=1G
pga_aggregate_target=200M
remote_login_passwordfile=’EXCLUSIVE’
control_files=’/u01/app/oracle/oradata/PROD1/control01.ctl’,’/u02/app/oracle/oradata/PROD1/control02.ctl’


 7) Criar as pastas para o controlfile
-bash-3.2$ mkdir -p /u01/app/oracle/oradata/PROD1/
-bash-3.2$ mkdir -p /u02/app/oracle/oradata/PROD1/
 6) Inicializar a instancia, e criar o arquivo spfile 
-bash-3.2$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Mon Apr 6 21:45:22 2015
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 1071333376 bytes
Fixed Size     1349732 bytes
Variable Size   281020316 bytes
Database Buffers   784334848 bytes
Redo Buffers     4628480 bytes
ORA-00205: error in identifying control file, check alert log for more info
SQL> create spfile from pfile;
File created.
SQL> shutdown abort
ORACLE instance shut down.
      
SQL> 
SQL> 
SQL> startup
ORACLE instance started.
Total System Global Area 1071333376 bytes
Fixed Size     1349732 bytes
Variable Size   281020316 bytes
Database Buffers   784334848 bytes
Redo Buffers     4628480 bytes
ORA-00205: error in identifying control file, check alert log for more info
SQL> 
 7) Colocar a sintaxe da criacao de banco em um arquivo buscar na documentacao e subsittuir somente o nome do banco e as senhas. Arquivo db.sql
CREATE DATABASE PROD1
     USER SYS IDENTIFIED BY oracle
     USER SYSTEM IDENTIFIED BY oracle
     EXTENT MANAGEMENT LOCAL
     UNDO TABLESPACE undotbs
     DEFAULT TEMPORARY TABLESPACE tempts1
     DEFAULT TABLESPACE users;
 8) Criar o banco de dados 

-bash-3.2$ sqlplus / as sysdba @db.sql
SQL*Plus: Release 11.2.0.3.0 Production on Mon Apr 6 21:53:30 2015
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – Production
With the Par
titioning, OLAP, Data Mining and Real Application Testing options
Database created.


 9) Instalar o dicionario de dados 
rdbms
SQL> @catalog.sql
SQL> @catproc.sql
SQL>  connect system/oracle 
SQL> @?/sqlplus/admin/pupbld.sql
10) Instalar o enteprise manager database control

SQL> alter user dbsnmp account unlock identified by oracle;

User altered.

-bash-3.2$ emca -config dbcontrol db -repos create
STARTED EMCA em 06/04/2015 22:13:52
Assistente de Configuração do EM, Produção da Versão 11.2.0.3.0
Copyright (c) 2003, 2011, Oracle. Todos os direitos reservados.
Especifique as seguintes informações:
SID do Banco de Dados: PROD1
Número da porta do listener: 1521
ORACLE_HOME do Listener [ /u01/app/oracle/product/11.2.0/grid ]: 
Senha para o usuário SYS:  
Senha do usuário DBSNMP:  
Senha do usuário SYSMAN:  
Endereço de e-mail para notificações (opcional): 
Servidor de Saída de Correio (SMTP) para notificações (opcional): 
—————————————————————–
Você especificou as seguintes definições
ORACLE_HOME do banco de dados ……………. /u01/app/oracle/product/11.2.0/dbhome_1
Nome do host local ……………. srv01
ORACLE_HOME do Listener ……………. /u01/app/oracle/product/11.2.0/grid
Número da porta do listener ……………. 1521
SID do Banco de Dados ……………. PROD1
Endereço de e-mail para notificações …………… 
Servidor de Saída de Correio (SMTP) para notificações …………… 
—————————————————————–
Deseja continuar? [sim(Y)/não(N)]: Y
06/04/2015 22:14:06 oracle.sysman.emcp.EMConfig perform
INFO: Esta operação está sendo registrada em /u01/app/oracle/cfgtoollogs/emca/PROD1/emca_2015_04_06_22_13_52.log.
06/04/2015 22:14:06 oracle.sysman.emcp.EMReposConfig createRepository

INFO: Criando o repositório do EM (isso pode demorar um pouco)…

06/04/2015 22:16:29 oracle.sysman.emcp.EMReposConfig invoke
INFO: Repositório criado com sucesso
06/04/2015 22:16:32 oracle.sysman.emcp.EMReposConfig uploadConfigDataToRepository
INFO: Fazendo upload dos dados de configuração para o repositório EM (isso pode demorar um pouco) …
06/04/2015 22:17:22 oracle.sysman.emcp.EMReposConfig invoke
INFO: Dados de configuração submetidos a upload com sucesso
06/04/2015 22:17:24 oracle.sysman.emcp.util.DBControlUtil secureDBConsole
INFO: Protegendo o Database Control (isso pode demorar um pouco) …
06/04/2015 22:18:06 oracle.sysman.emcp.util.DBControlUtil secureDBConsole
INFO: Database Control protegido com sucesso.
06/04/2015 22:18:06 oracle.sysman.emcp.util.DBControlUtil startOMS
INFO: Iniciando Database Control (isso pode demorar um pouco)…
06/04/2015 22:18:31 oracle.sysman.emcp.EMDBPostConfig performConfiguration
INFO: Database Control iniciado com sucesso
06/04/2015 22:18:31 oracle.sysman.emcp.EMDBPostConfig performConfiguration
INFO: >>>>>>>>>>> O URL do Database Control é https://srv01:1158/em <<<<<<<<<<<
06/04/2015 22:18:33 oracle.sysman.emcp.EMDBPostConfig invoke
WARNING: 
************************  WARNING  ************************
O Repositório de Gerenciamento está no modo seguro, no qual os dados do Enterprise Manager serão criptografados. A chave de criptografia se encontra no arquivo: /u01/app/oracle/product/11.2.0/dbhome_1/srv01_PROD1/sysman/config/emkey.ora. Certifique-se de que esse arquivo tem backup, pois os dados criptografados não poderão mais ser utilizados se o arquivo se perder. 
***********************************************************
A configuração do Enterprise Manager foi concluída com sucesso

FINISHED EMCA em 06/04/2015 22:18:33


Criando um banco atraves do DBCA via linha de comando – Countdown to OCM

Neste documento estarei mostrando como criar um banco de dados via dbca, na linha de comando.
O interessante e que o comando abaixo demora em torno de 10 minutos com o enteprise manager database control ja criado.

Primeiro, va ate o arquivo /etc/oratab e incluia a linha com um nome de um banco, pode ser algum somente de teste ou o que vai ser criado. Rodaremos o . oraenv para configurar as variaveis de ambiente.

-bash-3.2$ cat /etc/oratab

# This file is used by ORACLE utilities.  It is created by root.sh

# and updated by either Database Configuration Assistant while creating

# a database or ASM Configuration Assistant while creating ASM instance.

# A colon, ':', is used as the field terminator.  A new line terminates
# the entry.  Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
#   $ORACLE_SID:$ORACLE_HOME:<N|Y>:
#
# The first and second fields are the system identifier and home
# directory of the database respectively.  The third filed indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
+ASM:/u01/app/oracle/product/11.2.0/grid:N

*:/u01/app/oracle/agent11g:N


dbca -silent > criadb.sh

Conteudo do Arquivo criadb.sh

dbca  -silent
        -createDatabase
                -templateName General_Purpose.dbc
                -gdbName PROD1
                -sysPassword oracle
                -systemPassword oracle
                -emConfiguration LOCAL
                        -dbsnmpPassword oracle
                        -sysmanPassword oracle
                -datafileDestination '/u01/app/oracle/oradata'
                -recoveryAreaDestination '/u01/app/oracle/fast'
                -storageType FS
                -characterSet AL32UTF8
                -sampleSchema true

Removendo algumas linhas e fazendo ajustes o arquivo ficara pronto.

Dai o proximo passo executa-lo:

sh criadb.sh

-bash-3.2$ sh criadb.sh 
Falha ao limpar as etapas
5% concluído
Copiando arquivos de banco de dados
7% concluído
8% concluído
38% concluído
Criando e iniciando a instância Oracle
39% concluído
41% concluído
45% concluído
46% concluído
50% concluído
54% concluído
55% concluído
56% concluído
59% concluído
61% concluído
Registrando o banco de dados no Oracle Restart
66% concluído
Concluindo Criação de Banco de Dados
70% concluído
73% concluído
76% concluído
86% concluído
96% concluído
100% concluído

Verifique o arquivo de log "/u01/app/oracle/cfgtoollogs/dbca/PROD1/PROD10.log" para obter mais detalhes.

-bash-3.2$ . oraenv
ORACLE_SID = [PROD1] ? PROD1
The Oracle base remains unchanged with value /u01/app/oracle
-bash-3.2$ emctl status dbconsole
Oracle Enterprise Manager 11g Database Control Release 11.2.0.3.0 
Copyright (c) 1996, 2011 Oracle Corporation.  All rights reserved.
https://srv01:1158/em/console/aboutApplication

Oracle Enterprise Manager 11g is not running.


Dessa forma seu banco ja esta criado com o modelo e exemplos de esquema, de forma com que voce nao gastou 10 minutos para completar a operacao.

Verificar as recomendacoes do SEGMENT ADVISOR sem entrar no EM

Com a consulta abaixo conseguimos ter acesso as recomendacoes do Segment advisor.

SELECT 
                   ‘Segment Advice ————————–‘|| chr(10) || 
                   ‘TABLESPACE_NAME           : ‘ || tablespace_name              || chr(10) || 
                   ‘SEGMENT_OWNER             : ‘ || segment_owner                || chr(10) || 
                   ‘SEGMENT_NAME              : ‘ || segment_name                 || chr(10) || 
                   ‘ALLOCATED_SPACE           : ‘ || allocated_space              || chr(10) || 
                   ‘RECLAIMABLE_SPACE: ‘ || reclaimable_space || chr(10) || 
                   ‘RECOMMENDATIONS           : ‘ || recommendations              || chr(10) || 
                   ‘SOLUTION 1                : ‘ || c1                           || chr(10) || 
                   ‘SOLUTION 2                : ‘ || c2                           || chr(10) || 
                   ‘SOLUTION 3                : ‘ || c3 Advice
FROM
                   TABLE(dbms_space.asa_recommendations(‘FALSE’, ‘FALSE’, ‘FALSE’)); 


Tamanho de uma tabela

Ola pessoal,

venho a mostrar a voces como temos o tamanho de uma tabela e de seus indices

– Tamanho de Cada Tabela

SELECT substr(owner,1,15) owner,segment_type, 
substr(tablespace_name,1,15) tablespace_name, 
round(sum(bytes/1024/1024),2) as Tamanho_MB 
FROM dba_segments
WHERE owner = ‘SANKHYA’
AND segment_type = ‘TABLE’
AND segment_name like ‘TSILGT%’
GROUP BY owner,segment_type, tablespace_name, segment_name
union all
SELECT substr(owner,1,15) owner,segment_type, 
substr(tablespace_name,1,15) tablespace_name, 
round(sum(bytes/1024/1024),2) as Tamanho_MB 
FROM dba_segments
WHERE owner = ‘SANKHYA’
AND segment_type = ‘INDEX’
AND segment_name in (
select index_name 
from dba_indexes 
where table_name = ‘TSILGT’
and owner = ‘SANKHYA’)
GROUP BY owner,segment_type, tablespace_name, segment_name;
SELECT owner, tablespace_name, segment_name,
round(sum(bytes/1024/1024),2) as Tamanho_MB –, extents as Num_extents
FROM dba_segments
WHERE owner = ‘SCOTT’
AND segment_type = ‘TABLE’
— AND segment_name like ‘DEPT%’
GROUP BY owner, tablespace_name, segment_name

– Tamanho das Tabelas Por Usuário

SELECT owner, round(sum(bytes/1024/1024),2) as Tamanho_MB –, extents as Num_extents
FROM dba_segments
GROUP BY owner

– Tamanho Total das Tabelas

SELECT round(sum(bytes/1024/1024),2) as Tamanho_MB –, extents as Num_extents
FROM dba_segments

– % de Uso das TableSpaces

SELECT a.TABLESPACE_NAME “TableSpace Name”,
round(a.BYTES/1024/1024) “MB Allocated”,
round((a.BYTES-nvl(b.BYTES, 0)) / 1024 / 1024) “MB Used”,
nvl(round(b.BYTES / 1024 / 1024), 0) “MB Free”,
round(((a.BYTES-nvl(b.BYTES, 0))/a.BYTES)*100,2) “Pct Used”,
round((1-((a.BYTES-nvl(b.BYTES,0))/a.BYTES))*100,2) “Pct Free”
FROM (SELECT TABLESPACE_NAME,
sum(BYTES) BYTES
FROM dba_data_files
GROUP BY TABLESPACE_NAME) a,
(SELECT TABLESPACE_NAME,
sum(BYTES) BYTES
FROM sys.dba_free_space
GROUP BY TABLESPACE_NAME) b
WHERE a.TABLESPACE_NAME = b.TABLESPACE_NAME (+)
ORDER BY ((a.BYTES-b.BYTES)/a.BYTES);

BTRFS

Sistema BTRFS
O BTRFS ou better file system, e um sistema de arquivos que e disponibilizado a partir da versao 6.3 do Oracle Linux. Foi desenvolvido pela Oracle para que possamos ter mais uma opcao de um file system confiavel e de alta disponibilidade.
O BTRFS entre outras coisas podemos fazer o RAID 0, RAID 1 e o RAID 10. Obviamente, se gasta discos para a redundancia via software. O Interessante e que se voce precisar efetuar um clone do file system ou um backup pode ser feito a quente, e de quebra – copia remota para outra maquina.
BTRFS utiliza para gravacao um procedimento que se chama COPY ON WRITE que em miudos significa que ele somente grava mesmo nas operacoes de alteracao. Isso e interessante porque assim consegue fazer a replicacao sem comprometer a integridade.