Escolar Documentos
Profissional Documentos
Cultura Documentos
Linux
Olá,
Uma das tarefas mais legais do DBA, é a criação de uma banco de dados manualmente,
ou seja, sem a utilização da ferramenta gráfica DBCA (Database Configuration
Assistant) da Oracle para realizar essa tarefa, pois deste modo, o DBA consegue
acompanhar todos os processos básicos do início ao fim da criação do banco de dados
sem a necessidade de executar apenas um batch ou shell e acaba não sabendo o que
aconteceu.
Porém, antes de iniciar os passos, temos alguns pré-requisitos que devemos salientar,
que são:
Esses passos são necessários para quem deseja criar um banco de dados manualmente,
pois irá realizar uma instalação igual ao do DBCA, que na versão 10g já utiliza a
metodologia OFA por padrão. Abaixo segue alguns links para realizar a instalação
apenas do software do Oracle Database, para quem não possui ele instalado.
Sites de referência
Para dar mais enfâse, vamos criar um “resumão” de um pequeno projeto de banco de
dados, para conseguimos imaginar como ficará a nossa estrutura disponível e o banco de
dados em sí.
A estrutura física consiste em diretórios que serão utilizados pelo banco de dados no
nível de sistema operacional,que podem ou não obdecer o padrão OFA e sua principal
função é organizar e armazenar os arquivos do banco de dados no sistema operacional.
ORACLE_BASE = /u01/app/oracle
ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1
$ORACLE_BASE/admin/<nome_do_banco>/<diretorios>
./admin/ranet/exp:
Acima está a nossa estrutura física administrativa montada, onde cada um tem sua
finalidade como:
./admin
./admin/ranet:
./admin/ranet/adhoc:
./admin/ranet/adump:
Audit Dump, onde é gerado os arquivos e auditória do banco de dados, com extensão
AUD.
./admin/ranet/bdump:
Background Dump, caminho que é utilizado pelo processos de plano de fundo do Oracle
e do alert.log da instância.
./admin/ranet/cdump:
Core Dump, onde é gerado traces do Core do Oracle, geralmente ligados á problemas do
sistema operacional.
./admin/ranet/flash_recovery_area:
./admin/ranet/udump:
User Dump, é o diretório que armazena os traces gerados por usuários ou por processos
específicos do banco de dados.
./admin/ranet/exp:
Export, diretório destinado aos arquivos gerados atráves do Data Pump Export (Expdp)
ou Export Utility (exp).
[oracle@pelspos7h oracle]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 127G 64G 57G 53% /
none 2.0G 0 2.0G 0% /dev/shm
/dev/sdb1 404G 279G 105G 73% /u02
No exemplo, a melhor opção para o meu banco de dados é o FileSystem /u02, que tem
bastante espaço em disco sobrando, o FileSystem /u01 (que não está montado) ficou
para os arquivos de traces, archives, dumps e os binários do Oracle.
Após decidido a localização dos arquivos, devemos criar as pastas para armazenar-las.
Onde,
/u02/oracle/oradata/ranet
| | | |-> Diretório para armazenamento dos arquivos do
respectivo banco de dados.
| | |--------> Diretório para armazenamento de dados,
segundo o padrão OFA.
| |---------------> Diretório que específica do software.
|---------------------> File System com capacidade suficiente para
criar o banco de dados.
PRONTO! Já estamos com a nossa estrutura física criado para suporta o novo banco de
dados.
control_files = (/u02/oracle/oradata/ranet/control01.ctl)
db_name = ranet
db_domain = world
log_archive_dest =
"LOCATION=LOCATION=USE_DB_RECOVERY_FILE_DEST"
db_block_size = 8192
pga_aggregate_target = 250M
processes = 100
sessions = 120
open_cursors = 80
undo_management = AUTO
undo_tablespace = UNDOTBS
compatible = 10.1.0.0.0
sga_target = 1G
nls_language = AMERICAN
nls_territory = AMERICA
db_recovery_file_dest =
/u01/app/oracle/admin/ranet/flash_recovery_area
db_recovery_file_dest_size = 10G
background_dump_dest = /u01/app/oracle/admin/ranet/bdump
core_dump_dest = /u01/app/oracle/admin/ranet/cdump
user_dump_dest = /u01/app/oracle/admin/ranet/udump
audit_file_dest = /u01/app/oracle/admin/ranet/adump
Veja que alguns parâmetros receberam os valores da nossa estrutura física, seguindo o
padrão OFA. Deste modo, podemos salvar o nosso pfile em sua respestiva pasta
(/u01/app/oracle/admin/ranet/pfile) como initranet.ora, pois estamos seguindo um
padrão da Oracle, que é init<nome_do_banco>.ora para gerar o arquivo.
Posteriormente, vamos criar um SPFILE, sigla para Server Parameter File, que é um
melhorando do PFILE, pois já é um arquivo binário, que permite alterar o valores para
os parâmetros dinâmicos da instância Oracle.
Uma das tarefas que devemos realizar no momento, é a preparação do script que irá
criar nosso banco de dados, esse script será necessário para criar nosso banco de dados
fisicamente. Lembre-se que na arquitetura Oracle, quando trabalhamos com recursos em
memória, chamamos de Instância Oracle e quando vamos gravar, apagar, modificar,
consultar e manipular os dados, estamos trabalhando diretamente no banco de dados
físico, onde fica nossos datafiles, control files e redo logs. O Script para criação está
abaixo:
MAXINSTANCES
MAXLOGHISTORY
Específica o número máximo de archived redo logs files para automatic media recovery.
Válido para bancos de dados com RAC (Real Application Cluster).
MAXLOGFILES
Específica o número máximo de grupos de redo logs que o banco de dados pode
possuir.
MAXLOGMEMBERS
Específica o número máximo de membros (ou cópias do aruqivo de redo) que cada
grupo pode ter.
MAXDATAFILES
Segundo, agora vamos para as instruções que cria as principais tablespaces do banco de
dados.
No início estamos criando a tablespace SYSTEM com apenas 500MB e com a opção de
auto-expansível a cada 1MB.
SYSAUX
DATAFILE ‘/u02/oracle/oradata/ranet/sysaux01.dbf’ SIZE 500M AUTOEXTEND
ON NEXT 10240K
Essa tablespace é nova e foi introduzida no Oracle 10g, a tablespace SYSAUX é para
“prestar suporte” a tablespace SYSTEM, com owners de produtos da própria Oracle.
Como Oracle Spatial, RMAN, Workflow e etc.
Vamos iniciar ela com 2GB, pois desde a criação do banco de dados será muito
utilizada, a única diferença que estamos limitando o seu crescimento em 2GB, caso seja
necessário mais, aumentamos conforme a necessidade.
Essa instrução é responsável pela criação da tablespace de UNDO, que será chamada de
“UNDOTBS”, que é o mesmo valor do parâmetro undo_tablespace que colocamos em
nosso PFILE. A tablespace de UNDO que tem como finalidade armazenar nossos dados
não comprometidos, desfazer as transações sem sucesso e controlar as modificações dos
dados no banco de dados, falando resumidamente.
LOGFILE
GROUP 1 (’/u01/oracle/oradata/ranet/redo01a.log’,
‘/u02/oracle/oradata/ranet/redo01b.log’) SIZE 50M,
GROUP 2 (’/u01/oracle/oradata/ranet/redo02a.log’,
‘/u02/oracle/oradata/ranet/redo02b.log’) SIZE 50M,
GROUP 3 (’/u01/oracle/oradata/ranet/redo03a.log’,
‘/u02/oracle/oradata/ranet/redo03b.log’) SIZE 50M
Essas instruções específica os membros e a quantidade dos grupos de redo log. Eles
podem ser alterados posteriormente quando o banco de dados estiver criado. E perceba
que em cada grupo (1,2,3) possui dois arquivos de redo log, isso se chama
multiplexação, caso um disco (/u01 ou /u02) dê problemas, terá uma replica do arquivo
em outro disco, que poderá facilitar a sua recuperação e não perder os dados.
Bom, já conseguimos criar o PFILE e o script do banco de dados, agora vamos colocar a
mão na massa. Vamos realizar os processos que criação.
Vamos logar na máqunia que será criado o banco de dados, e vamos configurar a
variável de ambiente ORACLE_SID e conferir os valores de ORACLE_BASE e
ORACLE_HOME.
ORACLE_SID
Vamos pegar o caminho completo do nosso PFILE e vamos iniciar a instância, com o
comando STARTUP NOMOUNT, que significa que vamos apenas carregar seus
valores em memória, pois ainda não temos o control file da base criado.
Nesse momento criamos o banco de dados, os arquivos com extensão .DBF, .CTL
e .LOG devem estar disponíveis no sistema operacional. Como no exemplo:
O comando acima foi para verificar nossos datafiles, redo logs e control files. Criados
com sucesso.
catalog.sql
catproc.sql
Executa diversos scripts para criação de views e objetos necessário para o banco de
dados.
Veja o exemplo:
SQL> @?/rdbms/admin/catalog.sql
...
SQL> @?/rdbms/admin/catproc.sql
Como os scripts são longos e principalmente o catproc.sql que chama diversos outros
scripts do /rdbms/admin essa operação pode demorar um pouco, então pode ir tomar um
cafézinho nesse momento.
Dica 1
No linux, para executar os scripts você pode utilizar os seguintes caminhos na execução,
$ORACLE_HOME/rdbms/admin ou simplesmente ?/rdbms/admin.
Após o termíno da execução do catproc.sql, vamos verificar nosso novo banco de dados.
Vamos efetuar as seguintes instruções SQL:
Com isso, temos nosso banco de dados no ar. Para quem já conhece a arquitetura
Oracle, quando um banco de dados é criado, estará sempre no modo
NOARCHIVELOG, como mostra o exemplo:
E caso queira mudar para o modo ARCHIVELOG e trabalhar com as vantagens que o
ARCHIVELOG pode lhe oferecer para recuperação do banco de dados, basta fazer os
procedimentos abaixo:
Dica 2
Sempre que trabalhar com o pfile em $ORACLE_BASE/admin/ranet/pfile, quando for
realizar qualquer tipo de startup, irá aparecer o erro ORA-01078 e LRM-00109, pois o
arquivo de parâmetro não se encontra no diretório padrão do Oracle, que é
$ORACLE_HOME/dbs. Se quiser resolver esse tipo de problema, copie o seu arquivo
de parâmetro para o diretório $ORACLE_HOME/dbs e PRONTO!
A tablespace RADAT será para abrigar todas as tabelas de usuários ou aplicação, e seu
tamanho inicial é de 500MB.
A tablespace RAIDX irá armazenar os índices dos usuários ou aplicação, e seu volume
inicial é de 200MB.
Na criação das tablespaces foram utilizadas algumas opções de criação, como por
exemplo o extent management e segment space, para tirar as dúvidas de como trabalha
cada opção, leia o documento oficial, Oracle Database SQL Reference 10g Release 2.
Para confirmar que iremos utilizar os valores dos parâmetros que montamos o banco de
dados, criamos o spfile a partir do nosso arquivo de parâmetros construído no início, por
isso a passagem do caminho completo e o nome do pfile.
Porém, mesmo como o SPFILE criado, ainda não é possível utilizar-lo, como mostra o
comando abaixo:
/db_1/dbs/spfileranet.ora
Como dito na Dica 2, o caminho utilizado pelo Oracle foi o caminho padrão,
$ORACLE_HOME/dbs.
Como já estamos como todo o nosso banco de dados criado, vamos ter que
disponibilizar aos usuários e possíveis aplicações, e para isso, precisamos do serviço
ouvinte (LISTENER) e depois efetuar as configurações nas máquinas client
(TNSNAMES) para acessar o banco de dados. E para isso, devemos configurar os
arquivos responsáveis por essa tarefa.
Arquivo: LISTENER.ORA
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = PELSPOS7H)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = PELSPOS7H)(PORT = 1522))
)
)
Após criar o seu arquivo listener.ora e salvar-lo, deverá iniciar o serviço do listener,
usando o aplicativo LSNRCTL (Listener Control), veja:
Dica 3
Na versão do Oracle Database 10g, existe uma opção no SQL*NET de trabalhar por
serviços ou SERVICE_NAME, onde deverá ser realizado outros procedimentos. Mais
detalhes nesse documento Quick Start to Oracle Net Connections.
Arquivo: SQLNET.ORA
AUTOMATIC_IPC = OFF
names.directory_path = (TNSNAMES)
names.default_domain = world
name.default_zone = world
Arquivo: TNSNAMES.ORA
ranet.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = 10.72.30.83)(Port = 1522))
)
(CONNECT_DATA =
(SID = ranet)
)
)
Caso você queira acessar o seu banco de dados de uma outra máquina que tenha o
Oracle Client instalado, basta adicionar a entrada de TNS acima, mostrada no modelo
do TNSNAMES.ORA e caso seja necessário, colocar as configurações de SQLNET
acima.
UFA! Agora podemos liberar o nosso mini banco de dados aos usuários e iniciar
posteriormente as configurações de usuários e aplicações na base. Esse artigo foi bem
longo e cansativo, porém, a principal ideia era fornecer os conceitos básicos na criação
de um banco de dados manualmente, como:
Todos esses passos são de real importância para um projeto de banco de dados, e nunca
se esqueça, depois de realizar todas as tarefas acima, faça um BACKUP FULL do banco
de dados para não ter problemas e aumentar a segurança do projeto.