Criando Um Banco de Dados Oracle 11g

23 

Loading....

Loading....

Loading....

Loading....

Loading....

Texto

(1)

Criando um Banco de dados Criando um Banco de dados Ola Pessoal,

Ola Pessoal,

Depois de instalar o

Depois de instalar o Oracle Database 10gOracle Database 10g como nocomo no artigoartigo anterior vamos daranterior vamos dar continuidade no processo criando um banco de dados manualmente. Para criar um continuidade no processo criando um banco de dados manualmente. Para criar um  banco de dados devemos

 banco de dados devemos “subir” uma instância e cr“subir” uma instância e criar os data files que irão armaziar os data files que irão armazenar enar  os nossos segmentos (

os nossos segmentos (tabelas, índices, Dicionário de dados, etctabelas, índices, Dicionário de dados, etc.) Visto que no.) Visto que no

momento da instalação do Oracle Database 10g já preparamos o nosso ambiente com as 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

recomendações da OFA (Arquitetura Ótima Flexível) para receber nosso banco de dados, agora é hora de entender o conceito de

dados, agora é hora de entender o conceito deinstânciainstância e de banco de dados, e comoe de banco de dados, e como funciona essa relação.

funciona essa relação. Instância Oracle Instância Oracle

Uma instância consiste de processos em background e a alocação de memória do 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 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 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 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

background responsáveis por manipular o banco de dados. Essa combinação de processos em background e buffers de memória é chamada de

processos em background e buffers de memória é chamada de Instância Oracle. Instância Oracle.

Banco de Dados Banco de Dados

Um banco de dados consiste de arquivos de dados, ou seja,

Um banco de dados consiste de arquivos de dados, ou seja,data filesdata filesque armazenam osque armazenam os dados de usuários e o

dados de usuários e odicionário de dadosdicionário de dados. O banco de dados é manipulado pelos. O banco de dados é manipulado pelos processos em background da

processos em background dainstância.instância.Um único banco de dados pode ser manipuladoUm único banco de dados pode ser manipulado por uma única

por uma únicainstânciainstância e uma únicae uma únicainstânciainstância pode manipular um banco de dados. Empode manipular um banco de dados. Em ambientes distribuídos como

ambientes distribuídos como Real Application Clusters Real Application Clusters é possível ter váriasé possível ter váriasinstânciasinstâncias manipulando um banco de dados.

(2)

Arquitetura Oracle Arquitetura Oracle

Para iniciar o processo, vamos criar o arquivo de parâmetros (PFILE) nesse arquivo 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 devemos definir os parâmetros de inicialização da instância ou seja, parâmetros que especificam a localização dos

especificam a localização doscontrol files, alocação decontrol files, alocação de memória, e outros parâmetrosmemória, e outros parâmetros importantes para iniciar a

importantes para iniciar ainstância.instância.

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

básicos para iniciar nossa instância. db_name :

db_name : Este parâmetro define o nome do banco de dados, é um parâmetroEste 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. obrigatório e não pode ser alterado depois da criação do banco de dados. instance_type:

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

uma instância ASM db_domain :

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

dados dentro da estrutura de rede. db_files :

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

de dados por padrão esse valor é 200. processes :

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

podem se conectar ao banco de dados concorrentemente. db_block_size :

db_block_size : Esse parâmetro defini o tamanho do bloco padrão para o banco deEsse 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 dados. Este block será usado pela tablespace SYSTEM e por padrão também em outras tablespaces.

(3)

statistics_level : Esse parâmetro usado para definir o nível de estatísticas que serão geradas, muito úteis paraadvisors.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 novarelease, 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 doOracle 10g 10.2.1.0 com todas as suas features.

control_files : Aqui especificamos a localização doscontrol files sempre seguindo as recomendações da OFA de multiplicarmos oscontrol 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, joinsetc. 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 umFull 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 usandoFlashBack. Vamos deixar esse parâmetro como default.

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

(4)

db_recovery_file_dest_size : Esse parâmetro especifica o tamanho limite para oFlash recovery area gerenciar os backups feitos pelorman, por exemplo, é possível definir um valor máximo de armazenamento que oFlash 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 Noneo 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 arquivoinit+<Oracle_sid>o nome deve ser estar nesse formato pois no momento doSTARTUPo Oracle irá procurar um

arquivo com o nomeinit+<Oracle_sid>.orapara iniciar a instância. Como esse é um arquivo de texto as alterações que fizermos de forma dinâmica, ou seja, com a base onlinenã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 significadowntimeno serviço de banco de

dados. Depois de criarmos o banco de dados, iremos criar oSPFILE um arquivo binário que permite alterarmos alguns parâmetros dinâmicos e deixa-los como permanentes. Logue com o usuário “oracle” e d efina 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

(5)

########################### 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, ainstância é composta de processos em background  ealocação de memória do sistema operacional.

Para iniciar nossainstâ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

(6)

 /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 mostradoacima, 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 filespara 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

(7)

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;

(8)

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 ocontrol 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 ocontrol 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.

(9)

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 desort (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

(10)

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 nossosdata 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

(11)

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.

(12)

... 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 chamadosarchive 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 osarchive logsgerados depois do backup para recuperar o banco de dados sem perder qualquer dado armazenado noarchive 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 dosarchive 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>

(13)

Como visto acima, esse é modo de arquivamento padrão. Vamos alterar para o modo ARCHIVELOG. Para isso precisamos desligar a nossainstâ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.

(14)

SQL> create spfile 2 from

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

SQL>

Depois de emitir o comandocreate spfile será criado o arquivo spfileproducao.orano 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 chamadoOracle 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.

(15)

No Oracle Database 10g o processo em background chamadoPMON é 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áriolsnrctl. 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

(16)

SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1) (SID_NAME = producao) ) ) LISTENER = (DESCRIPTION = (ADDRESS =(PROTOCOL=tcp)(HOST=192.168.1.100)(PORT=1521)) )

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

(17)

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âmetrolistener Parameter File indica o nome e o caminho do nosso arquivo criado anteriormente.

(18)

Configurando o Enterprise Manager

O Enterprise manager é uma ferramenta importante e ajuda na administração e no monitoramento do banco de dados. A sua instalação não é obrigatório, mas é

aconselhável pela Oracle. Para instalar invoque o utilitárioemcacom os parâmetros necessários para criar o repositório. Em seguida o utilitário solicita o sid do banco de dados, a porta do listener, a senha para os usuários sys, dbsnmp e o sysman. Digite as informações e pressione enter. Aguarde até que o utilitário concluía a criação do repositório.

[oracle@lab01 ~]$ $ emca -config dbcontrol db -repos create STARTED EMCA at Jul 10, 2011 2:19:19 PM

EM Configuration Assistant, Version 10.2.0.1.0 Production Copyright (c) 2003, 2005, Oracle. All rights reserved.

Enter the following information: Database SID: producao

Listener port number: 1521 Password for SYS user:

Password for DBSNMP user: Password for SYSMAN user:

Email address for notifications (optional):

Outgoing Mail (SMTP) server for notifications (optional):

---You have specified the following settings

Database ORACLE_HOME ... /u01/app/oracle/product/10.2.0/db_1 Database hostname ... oracle10g-01

Listener port number ... 1521 Database SID ... producao

Email address for notifications ...

Outgoing Mail (SMTP) server for notifications ...

---Do you wish to continue? [yes(Y)/no(N)]: Y

Jul 10, 2011 2:20:46 PM oracle.sysman.emcp.EMConfig perform INFO: This operation is being logged at

 /u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/emca/producao/emca_2011-07-10_02-19-19-PM.log.

Jul 10, 2011 2:20:49 PM oracle.sysman.emcp.EMReposConfig createRepository INFO: Creating the EM repository (this may take a while) ...

Jul 10, 2011 2:26:28 PM oracle.sysman.emcp.EMReposConfig invoke INFO: Repository successfully created

Jul 10, 2011 2:26:41 PM oracle.sysman.emcp.ParamsManager getLocalListener WARNING: Error retrieving listener for oracle10g-01

Jul 10, 2011 2:26:47 PM oracle.sysman.emcp.util.DBControlUtil startOMS INFO: Starting Database Control (this may take a while) ...

Jul 10, 2011 2:29:14 PM oracle.sysman.emcp.EMDBPostConfig performConfiguration

(19)

Jul 10, 2011 2:29:19 PM oracle.sysman.emcp.EMDBPostConfig performConfiguration

INFO: >>>>>>>>>>> The Database Control URL is http://lab01:1158/em <<<<<<<<<<<

Enterprise Manager configuration completed successfully FINISHED EMCA at Jul 10, 2011 2:29:19 PM

[oracle@lab01 ~]$

Para ter acesso ao banco de dados usando o privilégios de sysdba a partir de uma máquina remota, é necessário configurar um password file.O password file é um arquivo do sistema operacional que armazena as informações de login e senha de usuários que recebem o privilégio de sysdba. Para autenticar no banco de dados com privilégios de sysdba a partir do Enterprise manager, também é preciso que esse arquivo esteja criado e o usuário na qual se deseja conectar esteja adicionado ao arquivo. Antes de criar o arquivo altere o parâmetro da instância que especifica que o arquivo de senhas será usado por uma instância individual. Altere o parâmetro com o seguinte comando: SQL> alter system set remote_login_passwordfile=exclusive scope=spfile

Esse parâmetro é estático, é necessário reiniciar a instância para que o valor tenha efeito. Depois de reiniciar a instância use o comando abaixo para criar opassword file [oracle@lab01 ~]$ orapwd file=$ORACLE_HOME/dbs/orapwproducao

entries=5 password=0r4cl3

Segue a explicação dos parâmetros usados:

file: Especifica o nome do password file que deve seguir o padrão orapw+sid_do_banco_de_dados

entries: Especifica até quantas entradas deve ter o arquivo no nosso caso no máximo 5, ou seja, só será possível ter informações de login e senha de cinco usuários nesse

arquivo.

password:A senha do usuário SYS é obrigatório para se criar o arquivo.

Depois de criado opassword file teste o acesso ao Enterprise Manager usando o endereço mostrado no log da operação de criação do repositório, no nosso caso é http://lab01:1158/em

(20)

Configurando inicialização e desligamento da instância automático

Para que a instância seja iniciada automaticamente ao iniciar o sistema operacional é preciso usar scripts que realizam essa tarefa. É também desejável que a instância e o banco de dados seja fechado de forma consistente, para isso a Oracle fornece um script que se encarrega de iniciar e desligar a instância e abrir ou fechar o banco de dados. Para usar esse script edite o arquivo /etc/oratab. Esse arquivo já vem pré-configurado e é preciso só adicionar uma linha para cada instância que se deseje iniciar e desligar. Adicione a linha conforme o modelo existente no arquivo

# $ORACLE_SID:$ORACLE_HOME:Y|N

Substitue o valor das variáveis acima conforme seu ambiente. producao:/u01/app/oracle/product/10.2.0/db_1:Y

A letra "Y" ou "N" é usada como flag para simbolizar que a instância deve ou não ser iniciada. Nesse caso marcamos que a instância "producao" deve ser iniciada.

O próximo passo é criar o script que irá chamar os utilitáriosdbstart e dbshut da Oracle. Esses utilitários usam o arquivo /etc/oratab para obter informações sobre as instâncias a serem iniciadas ou desligadas na inicialização ou no desligamento do

sistema operacional. O utilitáriodbstart irá iniciar a instância e abrir o banco de dados, e o utilitáriodbshut irá desligar a instância de forma consistente. Para executar esses utilitários usei um script fornecido pela Oracle e com algumas modificações feitas por min. Esse é um shell script e deve ser criado dentro do diretório /etc/init.d. Para isso logue como usuárioroot como no exemplo abaixo:

[root@lab01 ~]# vi /etc/init.d/startup_oracle.sh #!/bin/sh

# chkconfig: 345 99 10

# description: Oracle auto start-stop script. #

# Set ORA_HOME to be equivalent to the $ORACLE_HOME # from which you wish to execute dbstart and dbshut;

(21)

# Set ORA_OWNER to the user id of the owner of the # Oracle database in ORA_HOME.

# Oracle database in ORA_HOME. ORA_OWNER=oracle

ORA_HOME=/u01/app/oracle/product/10.2.0/db_1 case "$1" in

'start')

# Start the Oracle databases:

# The following command assumes that the oracle login # will not prompt the user for any values

echo "Starting Oracle Database and Listerner..."

su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start" su - $ORA_OWNER -c $ORA_HOME/bin/dbstart

echo "Starting Enterprise Manager..."

su - $ORA_OWNER -c "emctl start dbconsole" touch /var/lock/subsys/startup_oracle.sh

;; 'stop')

# Stop the Oracle databases:

# The following command assumes that the oracle login # will not prompt the user for any values

echo "Stoping Oracle Database..."

su - $ORA_OWNER -c $ORA_HOME/bin/dbshut

su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop" echo "Stoping Enterprise Manager..."

su - $ORA_OWNER -c "emctl stop dbconsole" rm -f /var/lock/subsys/startup_oracle.sh

;; esac

De as permissões necessárias

[root@lab01 ~]# chmod 755 /etc/init.d/startup_oracle.sh

Depois de criar o script, use o utilitáriochkconfigpara adicionar o script como um "serviço". Dessa forma o script poderá ser habilitado ou desabilitado para ser iniciado nos níveis de execução desejado. Use o comando abaixo como exemplo:

[root@lab01 ~]# chkconfig --add /etc/init.d/startup_oracle.sh

Ao adicionar o script, o mesmo é configurado para ser iniciado nos níveis 3,4 e 5 e com prioridade 99 para iniciar e 10 para desligar, conforme o parâmetrochkconfig: 345 99 10na segunda linha do script. Para ter certeza que o script foi configurado corretamente use o comando abaixo para listar as configurações:

[root@lab01 ~]# chkconfig --list startup_oracle.sh startup_oracle.sh 0:off 1:off 2:off 3:on 4:on 5:on 6:off 

(22)

Perceba que o script foi adicionado com sucesso e está ativo para ser executado nos níveis de execução especificados no script. Teste o script reiniciando o sistema operacional e verifique se a instância foi desligada e iniciada corretamente. Para conferir o status das operações dos utilitáriosdbstart e dbshut use os logs que ficam localizados em$ORACLE_HOMEchamados startup.log e shutdown.log

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 nossoConnect 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 per tinentes 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.

(23)

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”.

Até mais.

Imagem

Referências

temas relacionados :