Criando um banco de dados Oracle Database 10g

Criando um banco de dados Oracle Database 10g

Criando um Banco de dados

Ola Pessoal,

Depois de instalar o Oracle Database 10g como no artigo anterior vamos dar continuidade no processo criando um banco de dados manualmente. Para criar um banco de dados devemos “subir” uma instância e criar os data files que irão armazenar os nossos segmentos (tabelas, índices, Dicionário de dados, etc.) Visto que no momento da instalação do Oracle Database 10g já preparamos o nosso ambiente com as recomendações da OFA (Arquitetura Ótima Flexível) para receber nosso banco de dados, agora é hora de entender o conceito de instância e de banco de dados, e como funciona essa relação.

Instância Oracle

Uma instância consiste de processos em background e a alocação de memória do sistema operacional. Quando definimos os valores dos parâmetros de memória no arquivo de parâmetros (init.ora) o Oracle Server irá alocar do sistema operacional a quantidade de memória definida no arquivo de inicialização, e iniciar os processos em background responsáveis por manipular o banco de dados. Essa combinação de processos em background e buffers de memória é chamada de Instância Oracle.

Banco de Dados

Um banco de dados consiste de arquivos de dados, ou seja, data files que armazenam os dados de usuários e o dicionário de dados. O banco de dados é manipulado pelos processos em background da instância. Um único banco de dados pode ser manipulado por uma única instância e uma única instância pode manipular um banco de dados. Em ambientes distribuídos como Real Application Clusters é possível ter várias instâncias manipulando um banco de dados.

Arquitetura Oracle

Para iniciar o processo, vamos criar o arquivo de parâmetros (PFILE) nesse arquivo devemos definir os parâmetros de inicialização da instância ou seja, parâmetros que especificam a localização dos control files, alocação de memória, e outros parâmetros importantes para iniciar a instância.

Abaixo explico alguns parâmetros que considero importantes e que são parâmetros básicos para iniciar nossa instância.

db_name : Este parâmetro define o nome do banco de dados, é um parâmetro obrigatório e não pode ser alterado depois da criação do banco de dados.

instance_type: Deixamos esse valor como RDBMS, é usado quando estamos criando uma instância ASM

db_domain : Definimos nesse parâmetro um nome da localização lógica do banco de dados dentro da estrutura de rede.

db_files : Especifica o número de máximo de arquivos que pode ser abertos pelo banco de dados por padrão esse valor é 200.

processes : Especifica o número máximo de processos do sistema operacional que podem se conectar ao banco de dados concorrentemente.

db_block_size : Esse parâmetro defini o tamanho do bloco padrão para o banco de dados. Este block será usado pela tablespace SYSTEM e por padrão também em outras tablespaces.

statistics_level : Esse parâmetro usado para definir o nível de estatísticas que serão geradas, muito úteis para advisors. Vamos deixar com padrão.

audit_trail : Usado para habilitar a auditoria no banco de dados, para esse artigo vamos desabilitar a auditoria.

background_dump_dest : Definimos nesse parâmetro o diretório onde serão armazenados os arquivos de trace para processos em background, e tão importante alert.log

user_dump_dest : Definimos nesse parâmetro o diretório onde serão armazenados os arquivos de trace gerados por processos de usuário.

core_dump_dest : Definimos nesse parâmetro o diretório onde serão armazenados os arquivos de trace gerados por erros do software Oracle.

compatible : Este parâmetro define o nível de compatibilidade que o banco de dados irá trabalhar, esse parâmetro permite usarmos um banco de dados com uma nova release, mas sem perder a compatibilidade com versões antigas. Para o nosso exemplo não vamos precisar manter compatibilidade com nenhuma versão antiga, ou seja, vamos usar a compatibilidade do Oracle 10g 10.2.1.0 com todas as suas features.

control_files : Aqui especificamos a localização dos control files sempre seguindo as recomendações da OFA de multiplicarmos os control files entre discos diferentes.

cursor_sharing : Definindo esse parâmetro como “force” força instruções que usam apenas literais diferentes a usar o mesmo plano de execução. Vamos deixar esse parâmetro com o seu valor padrão Exact, ou seja,desabilitado.

sga_target : Definimos aqui um valor para que o Oracle gerencie a nossa SGA de forma automática. No nosso exemplo vou usar 512MB.

pga_aggregate_target : Usuários precisam de áreas em memória para realizar operações intensivas, como ordenações, joins etc. Definimos esse parâmetro como um valor máximo que irá ser alocado de acordo com o uso dos usuários.

db_file_multiblock_read_count : Esse parâmetro especifica o numero máximo de blocos que o Oracle irá ler durante um Full table scans . Nesse exemplo vamos usar o seu valor padrão.

db_flashback_retention_target : Esse parâmetro especifica em quanto tempo os logs são retidos no flash recovery area, e por quanto tempo em minutos podemos “voltar” nosso banco de dados em um estado anterior usando FlashBack. Vamos deixar esse parâmetro como default.

db_recovery_file_dest : Esse parâmetro especifica a localização padrão para o Flash recovery area.

db_recovery_file_dest_size : Esse parâmetro especifica o tamanho limite para o Flash recovery area gerenciar os backups feitos pelo rman, por exemplo, é possível definir um valor máximo de armazenamento que o Flash recovery area irá manter.

log_archive_dest_1 : Esse parâmetro define a localização que irão ser criados os archive logs.

log_archive_format : Esse parâmetro define o formato dos archive logs. Vamos deixar esse parâmetro como padrão.

remote_login_passwordfile : Esse parâmetro especifica se o Oracle vai checar por um arquivo de senha, é muito útil onde precisamos nos autenticar como SYSDBA através de um computador remoto. Se definirmos esse parâmetro como None o Oracle ignora qualquer arquivo de senha, e a única forma de autenticar como SYSDBA é usando a autenticação do sistema operacional.

undo_management : Esse parâmetro especifica o modo de gerenciamento undo. Se definirmos esse parâmetro para AUTO o servidor irá usar o modo de gerenciamento de undo automático. Vamos definir esse parâmetro como AUTO.

undo_tablespace : Esse parâmetro determina a tablespace padrão para segmentos de UNDO, definiremos esse parâmetro com o nome da nossa tablespace de undo.

Criando o Banco de dados

Agora é hora de criarmos o nosso banco de dados. Como já temos toda a estrutura de diretórios criada, precisamos agora criar o arquivo de parâmetros e o script de criação do banco de dados. O arquivo de parâmetro como dito acima é necessário para iniciar a nossa instância.

Criando o arquivo de parâmetros

Vamos logar com o usuário “oracle” e criar o arquivo init+<Oracle_sid> o nome deve ser estar nesse formato pois no momento do STARTUP o Oracle irá procurar um arquivo com o nome init+<Oracle_sid>.ora para iniciar a instância. Como esse é um arquivo de texto as alterações que fizermos de forma dinâmica, ou seja, com a base online não permaneceram quando reiniciarmos nossa instância, pois a instância sempre irá ler esse arquivo, a única forma de fazermos as alterações permanentes é dar um “shutdown” na instância e alterar o arquivo fisicamente. Isso pode ser um problema visto que ter que “derrubar” a instância significa downtime no serviço de banco de dados. Depois de criarmos o banco de dados, iremos criar o SPFILE um arquivo binário que permite alterarmos alguns parâmetros dinâmicos e deixa-los como permanentes. Logue com o usuário “oracle” e defina o valor da variável ORACLE_SID com o nome do banco de dados.

[root@lab01 ~]# su - oracle

[oracle@lab01 ~]$ export ORACLE_SID=producao

[oracle@lab01 ~]$ echo $ORACLE_SID

producao

[oracle@lab01 ~]$ vi initproducao.ora

########################### Initialization Parameter ###########################

# Author: Rodrigo Santana

##########################################################################

db_name=producao

instance_type=RDBMS

db_domain=world

db_files=1000

processes=600

db_block_size=8192

statistics_level=typical

audit_trail=none

background_dump_dest='/u01/app/oracle/admin/producao/bdump/'

user_dump_dest='/u01/app/oracle/admin/producao/udump/'

core_dump_dest='/u01/app/oracle/admin/producao/cdump/'

compatible=10.2.1.0

control_files=('/u02/oradata/producao/control01.ctl','/u03/oradata/producao/control02.ctl')

cursor_sharing=exact

sga_target=512M

pga_aggregate_target=300M

db_file_multiblock_read_count=16

db_flashback_retention_target=7200

db_recovery_file_dest='/u02/oradata/producao/flash_recovery_area'

db_recovery_file_dest_size='1000M'

log_archive_dest_1='LOCATION=/u02/oradata/producao/archives'

log_archive_format='log%t_%s_%r.arc'

remote_login_passwordfile=none

undo_management=auto

undo_retention=7200

undo_tablespace=undotbs_01

Pressione “ESC” + “:” + “x” para salvar o arquivo “initprod.ora”. Para cumprir com as recomendações da OFA vamos armazenar o nosso arquivo de parâmetros no diretório “/u01/app/oracle/admin/producao/pfile” .

[oracle@lab01 ~]$ mv initproducao.ora /u01/app/oracle/admin/producao/pfile/

[oracle@lab01 ~]$

Depois de criarmos o arquivo de parâmetros, vamos usa-lo para iniciar a nossa instância. Apenas para relembrar, a instância é composta de processos em background e alocação de memória do sistema operacional.

Para iniciar nossa instância devemos ter configurado corretamente as variáveis $ORACLE_HOME e $ORACLE_SID. A $ORACLE_HOME neste caso é necessária para usarmos a ferramenta “SQLPLUS “ sem especificarmos o seu caminho completo. E a variável $ORACLE_SID é necessária pois, no momento que emitirmos o comando “STARTUP” o Oracle irá ler essa variável e procurar pelo arquivo init<$ORACLE_SID>.ora .

O comando “echo” imprimi o valor de uma variável

[oracle@lab01 ~]$ echo $ORACLE_SID

producao

[oracle@lab01 ~]$ echo $ORACLE_HOME

/u01/app/oracle/product/10.2.0/db_1

[oracle@lab01 ~]$

Depois de certificarmos que as variáveis necessárias estão corretamente configuradas, vamos agora iniciar a instância usando a ferramenta “SQLPLUS”.

[oracle@lab01 ~]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Jan 12 14:08:10 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL>

Como mostrado acima usei o comando “sqlplus /nolog “ para conectar ao SQLPLUS sem informar o usuário. Agora precisamos nos autenticar como SYS e com os privilégios de SYSDBA para poder usar o comando STARTUP.

SQL> connect sys as sysdba

Enter password:

Connected to an idle instance.

SQL>

Como mostrado acima, depois de emitir o comando “CONNECT” é solicitado uma senha, essa senha podemos deixar em branco pois estamos usando a autenticação do sistema operacional. A mensagem “Connected to an idle instance” é normal pois ainda não iniciamos a instância. Agora é hora de emitir o comando STARTUP NOMOUNT seguido do caminho do nosso arquivo de parâmetros (PFILE) criando anteriormente. O Parâmetro NOMOUNT é usado quando não temos ainda control files para montar nosso banco de dados. Neste caso apenas a nossa instância está iniciada.

SQL> startup nomount pfile= '/u01/app/oracle/admin/producao/pfile/initproducao.ora';

ORACLE instance started.

Total System Global Area 536870912 bytes

Fixed Size 1220432 bytes

Variable Size 150995120 bytes

Database Buffers 381681664 bytes

Redo Buffers 2973696 bytes

SQL>

Para ver os processos em background do sistema operacional que a nossa instância criou use o seguinte comando

SQL> !ps -ef | grep producao

oracle 4987 4984 0 14:13 ? 00:00:00 oracleproducao

(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

oracle 5116 1 0 14:44 ? 00:00:00 ora_pmon_producao

oracle 5118 1 0 14:44 ? 00:00:00 ora_psp0_producao

oracle 5120 1 0 14:44 ? 00:00:00 ora_mman_producao

oracle 5122 1 0 14:44 ? 00:00:00 ora_dbw0_producao

oracle 5124 1 0 14:44 ? 00:00:00 ora_lgwr_producao

oracle 5126 1 0 14:44 ? 00:00:00 ora_ckpt_producao

oracle 5128 1 0 14:44 ? 00:00:00 ora_smon_producao

oracle 5130 1 0 14:44 ? 00:00:00 ora_reco_producao

oracle 5132 1 0 14:44 ? 00:00:00 ora_mmon_producao

oracle 5134 1 0 14:44 ? 00:00:00 ora_mmnl_producao

oracle 5135 5080 0 14:44 ? 00:00:00 oracleproducao

(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

oracle 5175 5080 0 14:51 pts/1 00:00:00 /bin/bash -c ps -ef |grep

producao

oracle 5177 5175 0 14:51 pts/1 00:00:00 /bin/bash -c ps -ef |grep

producao

SQL>

Dica: Para visualizar todo o processo de inicialização da instância detalhadamente veja o conteúdo do arquivo alert.log

Criando o banco de dados

O banco de dados que iremos criar irá conter uma tablespace system para armazenar o dicionário de dados, um tablespace Sysaux, um par de control files e redo logs multiplexados, uma tablespace temporaria padrão, uma tablespace de undo e uma tablespace de dados. Segue o script de criação do banco de dados:

create database producao

user sys identified by 0r4cl3

user system identified by 0r4cl3

maxinstances 1

maxloghistory 1

maxlogfiles 6

maxlogmembers 5

character set US7ASCII

national character set AL16UTF16

datafile '/u02/oradata/producao/system01.dbf' size 500M

extent management LOCAL

SYSAUX datafile '/u02/oradata/producao/sysaux01.dbf' size 500M

DEFAULT TEMPORARY tablespace temp01

tempfile '/u02/oradata/producao/temp01_01.dbf' size 100M

UNDO tablespace undotbs_01

datafile '/u02/oradata/producao/undotbs01.dbf' size 200M

DEFAULT tablespace DATA

datafile '/u02/oradata/producao/data01.dbf' size 500M

LOGFILE group 1

('/u02/oradata/producao/redo01a.log' , '/u03/oradata/producao/redo01b.log') size 50M,

group 2

('/u02/oradata/producao/redo02a.log , '/u03/oradata/producao/redo02b.log') size 50M;

Vou comentar alguns parâmetros da instrução “CREATE DATABASE”

create database producao : Define o nome do banco de dados como “producao”, ao executarmos o script de criação do banco de dados esse comando irá criar os control files na localização especificada no arquivo de parâmetros (initproducao.ora)

user sys identified by 0r4cl3 : Define a senha do usuário SYS

user system identified by 0r4cl3 : Define a senha do usuário SYSTEM

maxinstances : Especifica o número máximo de instâncias que podem manipular o banco de dados, usado quando estamos trabalhando com RAC. Como não estamos trabalhando com RAC vamos configurar esse parâmetro com o valor 1.

maxloghistory : Especifica o número máximo de archive redo logs para automatic media recovery

maxlogfiles : Este parâmetro especifica o número máximo de grupos de redo logs do banco de dados. Quando o nível de compatibilidade é inferior a 10.2.0 a única forma de sobrescrever esse limite é recriando o control file ou o banco de dados. Quando a compatibilidade do banco de dados for superior a 10.2.0 podemos aumentar o número de grupos de redo logs que o control file será expandido conforme necessário. Vamos configurar esse parâmetro com 6 prevendo um futuro aumento no número de grupos de redo logs.

maxlogmembers : Este parâmetro especifica o número máximo de membros de cada redo grupo de redo log. A única forma de sobrescreve esse parâmetro é recriando o banco de dados. Vamos configurar esse parâmetro com 3.

character set e national character set : Especifica o conjunto de caráteres usados pelo banco de dados, vamos deixar esse parâmetro com seu valor padrão.

datafile '/u02/oradata/producao/system01.dbf' size 500M

Nesta linha acima estamos dizendo que esse será o data file da nossa tablespace SYSTEM e com um tamanho de 500MB. A tablespace SYSTEM é de suma importância, pois, o dicionário de dados é criado dentro desta tablespace.

extent management LOCAL

Na linha de comando acima estamos especificando que a nossa tablespace SYSTEM deverá ser gerenciada localmente, ou invés do método de gerenciamento por dicionário.

SYSAUX datafile '/u02/oradata/producao/sysaux01.dbf' size 500M

Na linha acima estamos especificando o data file da tablespace SYSAUX. A tablespace SYSAUX é uma tablespace que serve como auxiliar para a tablespace SYSTEM porque ela é a tablespace padrão para muitas funcionalidades de produtos da Oracle que requeriam sua própria tablespace, isso reduz o número de tablespaces requeridas pelo banco de dados que você precisa manter.

DEFAULT TEMPORARY tablespace temp01

tempfile '/u02/oradata/producao/temp01_01.dbf' size 100M

Na linha acima estamos especificando nossa tablespace temporária padrão que será chamada de “temp01” e com um tamanho de 100MB. A tablespace temporária é importante pois é usada por operações de sort (ordenações) que não podem ser feitas em memória usam a tablespace temporária. Nesse exemplo “temp01” será nossa tablespace padrão, ou seja, no momento da criação de qualquer usuário se não especificarmos a tablespace temporária a ser usada, será atribuida a tablespace padrão “temp01”. Se não criarmos uma tablespace padrão, os usuários usaram como tablespace temporária a tablespace SYSTEM o que não é uma boa prática.

UNDO tablespace undotbs_01

datafile '/u02/oradata/producao/undotbs01.dbf' size 200M

Na linha acima estamos especificando a nossa tablespace de UNDO. A tablespace de UNDO é usada para armazenar segmentos de undo. Quando executamos uma operação de DML dentro de uma transação, a transação é vinculada a um segmento de undo na tablespace de undo corrente. Isso é importante pois se precisarmos fazer um “rollback” a imagem inicial da transação (before image) será lida a partir da tablespace de undo. Para esse exemplo nossa tablespace de undo será chamada de “undotbs01” e com um tamanho de 200MB.

DEFAULT tablespace DATA

datafile '/u02/oradata/producao/data01.dbf' size 500M

Na linha acima estamos especificando nossa tablespace padrão. Essa será a tablespace atribuída a todos os usuários que no momento da criação não foram explicitamente atribuídos a nenhuma tablespace, ou seja, se no momento da criação do usuário não atribuirmos ele a nenhuma tablespace, essa será a tablespace atribuída por padrão. Essa tablespace será onde os usuários armazenarão seus segmentos como, tabelas, índices, etc.

LOGFILE group 1

('/u02/oradata/producao/redo01a.log' , '/u03/oradata/producao/redo01b.log') size 50M,

group 2

('/u02/oradata/producao/redo02a.log , '/u03/oradata/producao/redo02b.log') size 50M;

Com os comandos acima, estamos definindo os grupos de redo logs, e os seus membros. Como mostrado acima, temos 2 grupos e cada grupo contendo 2 membros.

Depois de criar o scrip de criação do banco de dados, vamos executar o script e salvar nos diretórios criados anteriormente. Certifique que a instância está em modo nomount para executar o script, se ainda não iniciou a instância emita o comando “startup nomount” conforme explicado acima.

Para executar o script de criação do banco de dados, conecte ao SQLPLUS como SYSDBA e execute o script como abaixo:

SQL> @create_database.sql

Database created.

SQL>

Depois de criado vamos fazer algumas verificações para saber se foi criado com sucesso nosso banco de dados. A query abaixo mostra o nome e o status da instância.

SQL> select instance_name, status from v$instance;

INSTANCE_NAME STATUS

------------------------- ------------

producao OPEN

A segunda query mostra o nome do banco de dados e o estado em que ele está.

SQL> select name, open_mode from v$database;

NAME OPEN_MODE

-------- ----------

PRODUCAO READ WRITE

Agora vamos verificar se os nossos data files, control files, redo logs foram criados com sucesso nas localizações corretas. A seguinte query exibe a localização dos demais arquivos ditos acima

SQL> select name

2 from v$controlfile

3 union

4 select name

5 from v$datafile

6 union

7 select member

8 from v$logfile;

NAME

--------------------------------------------------------------------------------

/u02/oradata/producao/control01.ctl

/u02/oradata/producao/data01.dbf

/u02/oradata/producao/redo01a.log

/u02/oradata/producao/redo02a.log

/u02/oradata/producao/sysaux01.dbf

/u02/oradata/producao/system01.dbf

/u02/oradata/producao/undotbs01.dbf

/u03/oradata/producao/control02.ctl

/u03/oradata/producao/redo01b.log

/u03/oradata/producao/redo02b.log

10 rows selected.

Vamos verificar que esses arquivos foram criados com sucesso no sistema operacional, para isso fiz o seguinte: A partir do “sqlplus” é possível executar um comando do sistema operacional sem sair do utilitário, basta usar o sinal de exclamação “!“ antes do comando, segue exemplo abaixo.

SQL> !ls -l /u02/oradata/producao

total 1851012

drwxr-xr-x 2 oracle oinstall 4096 Jan 8 15:57 archives

-rw-r----- 1 oracle oinstall 5947392 Jan 15 15:29 control01.ctl

-rw-r----- 1 oracle oinstall 524296192 Jan 15 15:06 data01.dbf

drwxrwxr-x 2 oracle oinstall 4096 Dec 15 05:43 flash_recovery_area

-rw-r----- 1 oracle oinstall 52429312 Jan 15 15:26 redo01a.log

-rw-r----- 1 oracle oinstall 52429312 Jan 15 15:06 redo02a.log

-rw-r----- 1 oracle oinstall 524296192 Jan 15 15:06 sysaux01.dbf

-rw-r----- 1 oracle oinstall 524296192 Jan 15 15:21 system01.dbf

-rw-r----- 1 oracle oinstall 104865792 Jan 15 15:06 temp01_01.dbf

-rw-r----- 1 oracle oinstall 209723392 Jan 15 15:21 undotbs01.dbf

SQL>

SQL> !ls -l /u03/oradata/producao

total 108352

-rw-r----- 1 oracle oinstall 5947392 Jan 15 15:29 control02.ctl

-rw-r----- 1 oracle oinstall 52429312 Jan 15 15:26 redo01b.log

-rw-r----- 1 oracle oinstall 52429312 Jan 15 15:06 redo02b.log

SQL>

Dica: Para ver de forma detalhada todos os passos da criação do banco de dados, examine o conteúdo do arquivo alert.log

Pronto, criamos nosso banco de dados e nos certificamos que os arquivos relevantes foram criados. Devemos agora executar os scripts de criação do dicionário de dados.

Oracle fornece dois scripts importantes são eles:

Catalog.sql :Popula o banco de dados com as views do dicionário de dados, synonyms publics e outros objetos.

Catproc.sql: Cria pacotes fornecidos pela Oracle e outros objetos para suportar o uso de codigo PL/SQL no banco de dados.

Dica: Ignore qualquer mensagem erro mostrados na execução dos scripts, a maioria deles são mostrados pois existem alguns objetos que foram excluídos ou que não existem mais. Se quiser pode executar os scripts novamente, você não verá nenhum erro.

Aguarde até o termino da execução dos scripts, isso pode demorar alguns minutos.

Executando os scripts

SQL> @$ORACLE_HOME/rdbms/admin/catalog.sql

Grant succeeded.

PL/SQL procedure successfully completed.

SQL> @$ORACLE_HOME/rdbms/admin/catproc.sql

...............

No errors.

Package body created.

PL/SQL procedure successfully completed.

SQL>

Neste momento temos uma base de dados totalmente funcional. Agora vamos alterar o modo de arquivamento de logs do banco de dados, os modos de arquivamento disponíveis são NOARCHIVELOG e ARCHIVELOG. O NOARCHIVELOG é o modo de arquivamento padrão. Com esse modo o arquivamento de redo logs são desabilitados, ou seja, quando os grupos de redo logs se tornarem completos, eles serão sobrescritos por novas transações. Com isso as formas de recuperação do banco de dados nesse modo são muito restritas, por exemplo, no evento de uma falha em disco, apenas podemos voltar nosso banco de dados ao estado do ultimo backup full, ou seja, as transações subseqüentes ao nosso backup não estarão disponíveis para a recuperação.

No modo ARCHIVELOG o Oracle “salva” ou “arquiva” os redo logs cheios em arquivos chamados archive logs. Isso é muito importante pois assim temos um registro de todas as alterações do banco de dados de forma cronológica salva em arquivos externos. Isso também fará toda diferença na recuperação de um banco de dados, por exemplo, no evento da perda de um disco, pode-se votar um backup e todos os archive logs gerados depois do backup para recuperar o banco de dados sem perder qualquer dado armazenado no archive log.

Sem dúvidas o modo ARCHIVELOG é o modo mais indicado para um banco de dados OLTP que não se pode perder qualquer informação.

Alterando modo de arquivamento de logs

Antes de alterarmos o modo de arquivamento de logs vamos confirmar o modo de arquivamento do nosso banco de dados com um simples select na view v$database.

SQL> select log_mode from v$database;

LOG_MODE

------------

NOARCHIVELOG

1 row selected.

SQL>

Ou ainda, o comando abaixo nos mostra mais informações, como o “Database log mode” e “Archive destination” o “Database log mode” é o modo de arquivamento do nosso banco de dados, e o “Archive destination” é o destino dos archive logs.

SQL> ARCHIVE LOG LIST

Database log mode No Archive Mode

Automatic archival Disabled

Archive destination /u02/oradata/producao/archives

Oldest online log sequence 8

Current log sequence 9

SQL>

Como visto acima, esse é modo de arquivamento padrão. Vamos alterar para o modo ARCHIVELOG. Para isso precisamos desligar a nossa instância e inicia-la no modo MOUNT.

SQL> SHUTDOWN IMMEDIATE;

Database closed.

Database dismounted.

ORACLE instance shut down.

Iniciando a instância.

SQL> STARTUP MOUNT

PFILE='/u01/app/oracle/admin/producao/pfile/initproducao.ora';

ORACLE instance started.

Total System Global Area 536870912 bytes

Fixed Size 1220432 bytes

Variable Size 150995120 bytes

Database Buffers 381681664 bytes

Redo Buffers 2973696 bytes

Database mounted.

SQL>

Agora usamos o comando abaixo

SQL> ALTER DATABASE ARCHIVELOG;

Database altered.

Visualizando o estado do nosso banco de dados depois de alterado.

SQL> ARCHIVE LOG LIST

Database log mode Archive Mode

Automatic archival Enabled

Archive destination /u02/oradata/producao/archives

Oldest online log sequence 8

Next log sequence to archive 9

Current log sequence 9

SQL>

Finalmente vamos abrir nosso banco de dados.

SQL> ALTER DATABASE OPEN;

Database altered.

SQL>

Criando o SPFILE

Vamos criar o SPFILE que é como explicado acima, um arquivo binário que permite fazermos alterações dinâmicas de forma permanentes. Esse é um recurso muito importante para o DBA pois evita de termos que “derrubar” a instância para alterarmos alguns parâmetros. Para criar o SPFILE usamos os comandos abaixo.

SQL> create spfile

2 from

3 pfile ='/u01/app/oracle/admin/producao/pfile/initproducao.ora';

File created.

SQL>

Depois de emitir o comando create spfile será criado o arquivo spfileproducao.ora no diretório $ORACLE_HOME/dbs. Para visualizar o arquivo use o comando abaixo:

SQL> !ls $ORACLE_HOME/dbs

hc_producao.dat initdw.ora init.ora spfileproducao.ora

SQL>

Mesmo depois de criado o spfile, o nosso banco de dados ainda usa o antigo arquivo initproducao.ora. Para forçar o uso do SPFILE devemos “derrubar” a instância e inicia-la novamente.

SQL> SHUTDOWN IMMEDIATE;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL>

Agora vamos iniciar nosso banco de dados, para isso não precisamos especificar o parâmetro “pfile” pois o Oracle irá procurar no diretório $ORACLE_HOME/dbs o arquivo “spfileproducao.ora” e iniciar a instância através dele.

SQL> startup

ORACLE instance started.

Total System Global Area 536870912 bytes

Fixed Size 1220432 bytes

Variable Size 150995120 bytes

Database Buffers 381681664 bytes

Redo Buffers 2973696 bytes

Database mounted.

Database opened.

SQL>

Configurando a rede

Quando queremos abrir uma sessão no banco de dados a partir de um cliente da rede, precisamos nos conectar ao banco de dados através da rede. Todos os servidores que hospedam um banco de dados Oracle, deve executar um serviço chamado Oracle Net Listener, cuja sua principal função é “ouvir” as requisições dos clientes que querem fazer logon no banco de dados.

O Listener depois de verificar que o cliente tem as informações correspondentes ao banco de dados (protocolo, nome da instância e porta) passa a requisição ao banco de dados. O Banco de dados irá autenticar o usuário baseado nas informações de nome de usuário e senha.

No Oracle Database 10g o processo em background chamado PMON é encarregado de dinamicamente registrar o banco de dados com o listener, isso quer dizer que quando iniciamos a nossa instância o banco de dados automáticamente se registra com o listener, e o listener já inicia “ouvindo” as requisições de conexão para esse banco de dados. Para gerenciar o listener usamos o utilitário lsnrctl. Com o lsnrctl podemos visualizar o status do listener, iniciar o listener (start), parar o listener (stop) entre outras operações.

Vamos visualizar o status do listener, o mesmo deve está ouvindo as requisições para nosso banco de dados, já que o processo PMON é encarregado de fazer essa tarefa. Para isso use o comando abaixo.

[oracle@lab01 ~]$ lsnrctl status

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 25-JAN-2010 13:22:28

Copyright (c) 1991, 2005, Oracle. All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER

------------------------

Alias LISTENER

Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production

Start Date 25-JAN-2010 13:17:01

Uptime 0 days 0 hr. 5 min. 26 sec

Trace Level off

Security ON: Local OS Authentication

SNMP OFF

Listener Log File

/u01/app/oracle/product/10.2.0/db_1/network/log/listener.log

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=lab01)(PORT=1521)))

Services Summary...

Service "producao.world" has 1 instance(s).

Instance "producao", status READY, has 1 handler(s) for this service...

Service "producao_XPT.world" has 1 instance(s).

Instance "producao", status READY, has 1 handler(s) for this service...

The command completed successfully

[oracle@lab01 ~]$

Como visto acima nosso listener já está iniciado e ouvindo as requisições para o banco de dados producao. Mas podemos também criar o nosso próprio listener, para isso precisamos criar o arquivo listener.ora. Nele definimos qual o endereço que irá ouvi as requisições, em qual porta iremos ouvir as requisições e até mesmo o protocolo de rede. Esse arquivo deve ser criado dentro do diretório $ORACLE_HOME/netword/admin/. Abaixo segue o exemplo do arquivo listener.ora

LISTENER =

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.100)(PORT=1521))

(ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY)))

SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

BEQUEATH CONFIG

GLOBAL_DBNAME=producao.world)

(SID_NAME=producao)

(ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1)

#PRESPAWN CONFIG

(PRESPAWN_MAX=20)

(PRESPAWN_LIST=

(PRESPAWN_DESC=(PROTOCOL=tcp)(POOL_SIZE=2)(TIMEOUT=1))

)

)

)

Salve esse arquivo dentro do diretório $ORACLE_HOME/network/admin/ com o nome listener.ora e vamos parar o listener e inicia-lo para que o mesmo passa a usar o nosso arquivo.

Listando o arquivo

[oracle@lab01 admin]$ pwd

/u01/app/oracle/product/10.2.0/db_1/network/admin

[oracle@lab01 admin]$ ls

listener.ora samples shrept.lst tnsnames.ora

[oracle@lab01 admin]$

Parando o listener

[oracle@lab01 admin]$ lsnrctl stop

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 25-JAN-2010 13:29:40

Copyright (c) 1991, 2005, Oracle. All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

The command completed successfully

Iniciando o listener

[oracle@lab01 admin]$ lsnrctl start

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 25-JAN-2010 13:29:55

Copyright (c) 1991, 2005, Oracle. All rights reserved.

Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.1.0 - Production

System parameter file is

/u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Log messages written to

/u01/app/oracle/product/10.2[oracle@lab01 admin]$ lsnrctl start

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 25-JAN-2010 13:29:55

Copyright (c) 1991, 2005, Oracle. All rights reserved.

Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.1.0 - Production

System parameter file is

/u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Log messages written to

/u01/app/oracle/product/10.2.0/db_1/network/log/listener.log

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=lab01)(PORT=1521)))

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER

------------------------

Alias LISTENER

Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production

Start Date 25-JAN-2010 13:29:55

Uptime 0 days 0 hr. 0 min. 0 sec

Trace Level off

Security ON: Local OS Authentication

SNMP OFF

Listener Parameter File

/u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Listener Log File

/u01/app/oracle/product/10.2.0/db_1/network/log/listener.log

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=lab01)(PORT=1521)))

The listener supports no services

The command completed successfully

[oracle@lab01 admin]$ .0/db_1/network/log/listener.log

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=lab01)(PORT=1521)))

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER

------------------------

Alias LISTENER

Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production

Start Date 25-JAN-2010 13:29:55

Uptime 0 days 0 hr. 0 min. 0 sec

Trace Level off

Security ON: Local OS Authentication

SNMP OFF

Listener Parameter File

/u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Listener Log File

/u01/app/oracle/product/10.2.0/db_1/network/log/listener.log

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=lab01)(PORT=1521)))

The listener supports no services

The command completed successfully

[oracle@lab01 admin]$

Repare no comando acima que o parâmetro listener Parameter File indica o nome e o caminho do nosso arquivo criado anteriormente.

Configuração dos Clientes

Para que possamos acessar nosso banco de dados pela rede precisamos instalar o Oracle Client Software, que conterá as bibliotecas necessárias para fazer a conexão com o banco de dados. Para isso basta fazer o download do software através do site (http://technet.oracle.com) da oracle. Depois de baixar e instalar o Oracle Client precisamos fazer as configurações de rede, para esse exemplo vou apenas configurar o arquivo tnsnames.ora é nesse arquivo onde criaremos o nosso Connect Identifiers ( Identicador de conexão) . O Identificador de conexão nada mais é do que um nome que mapeará as demais informações sobre uma determinada conexão. No exemplo abaixo o identificador de conexão chama-se “producao”, ou seja, quando referirmos ao identificador “producao” estamos usando os parâmetros de conexão pertinentes a ele (Host, Port, Protocol). Dessa forma podemos ter vários identificadores de conexão no nosso arquivo tnsname.ora.

Nesse exemplo instalei o Oracle Client na versão 10.1.0 em um computador com o Windows Server 2003 que será nosso cliente. Salve o código abaixo no arquivo tnsnames.ora dentro do diretório c:\oracle\product\10.1.0\network\admin\ e teste a conexão usando o SQLPLUS ou qualquer outro utilitário.

producao =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.100) (PORT=1521))

)

(CONNECT_DATA =

(SERVICE_NAME = producao.world )

)

)

Para testar a conexão usei o “SQLPLUS” usando o identificador de conexão “producao”. Repare o comando abaixo na imagem.

sqlplus system/Or4cl3@producao

Dessa forma estou conectado ao banco de dados criado anteriormente com o usuário SYSTEM a partir de um computador da rede. Isso mostra que chegamos ao final do nosso artigo onde o principal objetivo era entender como criar um banco de dados de forma manual, ou seja, sem usar utilitários e como funciona a relação entre instância e banco de dados,e também qual a diferença entre os dois. No artigo vimos um pouco sobre os parâmetros básicos para se iniciar uma instância, o significado de cada um deles e os parâmetros necessários para criar um banco de dados usando a instrução “create database”.

Comentários