Para melhor visualização, recomendo resolução de no mínimo 1280 x 800 e navegador Mozilla Firefox


terça-feira, 4 de outubro de 2011

Criando um banco de dados no modo silencioso com o DBCA

Por Eduardo Legatti

Olá,

Para aqueles que já conhecem a interface gráfica do assistente de configuração de banco de dados do Oracle, sabem que estou falando do DBCA (Database Configuration Assistant). No Oracle 10g, por exemplo, o DBCA fornece 4 tipos de templates (gabaritos), para que o DBA possa escolher aquele mais adequado ao tipo de banco a ser criado.


Na figura acima existe um template adicional, criado por mim que será utilizado mais a frente. Até então, o Oracle fornece quatro modelos: Finalidade geral, processamento de transações, Data Warehouse e banco de dados personalizado. Exceto para banco de dados personalizado, os outros três são templates do tipo seed (que incluem arquivos de dados). A vantagem dos templates do tipo seed é que os mesmos poupam tempo na criação de banco de dados, porque a cópia dos arquivos de banco de dados já criados para os locais corretos, leva menos tempo do que criá-los do zero. Os templates são armazenados no diretório $ORACLE_HOME/assistants/dbca/templates e tem um formato do tipo XML. Uma outra vantagem dos templates é que os mesmos são fáceis de compartilhar e podem ser copiados de uma máquina para outra.

Existem dois tipos de templates: seeds e nonseeds. O templates do tipo seed têm a extensão (*.dbc) e incluem os arquivos de dados de um banco de dados, em um arquivo especial com a extensão (*.dfb). Ao criar um banco de dados usando o DBCA, se você escolher algum modelo do tipo seed, a criação de banco de dados será mais rápida porque os arquivos físicos do banco de dados já foram criados. Portanto, a criação do banco de dados começa como uma cópia do banco de dados do seed, em vez de ter que ser criado. Na verdade, o DBCA copia os arquivos de dados para o local especificado, cria um arquivo de controle e abre o banco de dados com a opção RESETLOGS. Já um template do tipo nonseed tem a extensão (*.dbt) e não inclui qualquer arquivo de banco de dados. Se você escolher um modelo nonseed ao criar o banco de dados, o assistente irá criar um novo banco de dados e executar todos os scripts necessários, como os scripts catalog.sql e catproc.sql, por exemplo.

No mais, irei utilizar abaixo um template do tipo nonseed criado por mim, e o utilizarei para criar um banco de dados sem a necessidade de utilizar a interface gráfica do DBCA (silent mode). Eu criei um template e o chamei de templatepadrao10g.dbt, conforme demonstrado pelo código abaixo:

<DatabaseTemplate name="padrao" description="Template padrao 10g" version="10.2.0.0.0">
<CommonAttributes>
<option name="ISEARCH" value="false"/>
<option name="OMS" value="false"/>
<option name="JSERVER" value="false"/>
<option name="SPATIAL" value="false"/>
<option name="ODM" value="false">
<tablespace id="SYSAUX"/>
</option>
<option name="IMEDIA" value="false"/>
<option name="XDB_PROTOCOLS" value="false">
<tablespace id="SYSAUX"/>
</option>
<option name="ORACLE_TEXT" value="false">
<tablespace id="SYSAUX"/>
</option>
<option name="SAMPLE_SCHEMA" value="false"/>
<option name="CWMLITE" value="false">
<tablespace id="SYSAUX"/>
</option>
<option name="EM_REPOSITORY" value="false">
<tablespace id="SYSAUX"/>
</option>
<option name="HTMLDB" value="false"/>
<option name="NET_EXTENSIONS" value="false"/>
</CommonAttributes>
<Variables/>
<CustomScripts Execute="false"/>
<InitParamAttributes>
<InitParams>
<initParam name="pga_aggregate_target" value="60" unit="MB"/>
<initParam name="nls_territory" value="BRAZIL"/>
<initParam name="processes" value="150"/>
<initParam name="db_recovery_file_dest_size" value="2048" unit="MB"/>
<initParam name="nls_language" value="BRAZILIAN PORTUGUESE"/>
<initParam name="control_files" value="(&quot;{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\control01.ctl&quot;, &quot;{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\control02.ctl&quot;, &quot;{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\control03.ctl&quot;)"/>
<initParam name="sga_target" value="200" unit="MB"/>
<initParam name="compatible" value="10.2.0.1.0"/>
<initParam name="background_dump_dest" value="{ORACLE_BASE}\admin\{DB_UNIQUE_NAME}\bdump"/>
<initParam name="job_queue_processes" value="10"/>
<initParam name="user_dump_dest" value="{ORACLE_BASE}\admin\{DB_UNIQUE_NAME}\udump"/>
<initParam name="audit_file_dest" value="{ORACLE_BASE}\admin\{DB_UNIQUE_NAME}\adump"/>
<initParam name="db_domain" value=""/>
<initParam name="open_cursors" value="300"/>
<initParam name="db_block_size" value="8" unit="KB"/>
<initParam name="db_recovery_file_dest" value="{ORACLE_BASE}\flash_recovery_area"/>
<initParam name="undo_tablespace" value="UNDOTBS1"/>
<initParam name="core_dump_dest" value="{ORACLE_BASE}\admin\{DB_UNIQUE_NAME}\cdump"/>
<initParam name="remote_login_passwordfile" value="EXCLUSIVE"/>
<initParam name="undo_management" value="AUTO"/>
<initParam name="db_file_multiblock_read_count" value="16"/>
</InitParams>
<MiscParams>
<customSGA>true</customSGA>
<archiveLogMode>false</archiveLogMode>
<initParamFileName>{ORACLE_BASE}\admin\{DB_UNIQUE_NAME}\pfile\init.ora</initParamFileName>
</MiscParams>
<SPfile useSPFile="true">{ORACLE_HOME}\database\spfile{SID}.ora</SPfile>
</InitParamAttributes>
<StorageAttributes>
<ControlfileAttributes id="Arquivo de controle">
<maxDatafiles>100</maxDatafiles>
<maxLogfiles>16</maxLogfiles>
<maxLogMembers>3</maxLogMembers>
<maxLogHistory>1</maxLogHistory>
<maxInstances>8</maxInstances>
<image name="control01.ctl" filepath="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\"/>
<image name="control02.ctl" filepath="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\"/>
<image name="control03.ctl" filepath="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\"/>
</ControlfileAttributes>
<DatafileAttributes id="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\sysaux01.dbf">
<tablespace>SYSAUX</tablespace>
<temporary>false</temporary>
<online>true</online>
<status>0</status>
<size unit="MB">120</size>
<reuse>true</reuse>
<autoExtend>true</autoExtend>
<increment unit="KB">10240</increment>
<maxSize unit="MB">-1</maxSize>
</DatafileAttributes>
<DatafileAttributes id="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\system01.dbf">
<tablespace>SYSTEM</tablespace>
<temporary>false</temporary>
<online>true</online>
<status>0</status>
<size unit="MB">300</size>
<reuse>true</reuse>
<autoExtend>true</autoExtend>
<increment unit="KB">10240</increment>
<maxSize unit="MB">-1</maxSize>
</DatafileAttributes>
<DatafileAttributes id="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\temp01.dbf">
<tablespace>TEMP</tablespace>
<temporary>false</temporary>
<online>true</online>
<status>0</status>
<size unit="MB">20</size>
<reuse>true</reuse>
<autoExtend>true</autoExtend>
<increment unit="KB">640</increment>
<maxSize unit="MB">-1</maxSize>
</DatafileAttributes>
<DatafileAttributes id="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\undotbs01.dbf">
<tablespace>UNDOTBS1</tablespace>
<temporary>false</temporary>
<online>true</online>
<status>0</status>
<size unit="MB">200</size>
<reuse>true</reuse>
<autoExtend>true</autoExtend>
<increment unit="KB">5120</increment>
<maxSize unit="MB">-1</maxSize>
</DatafileAttributes>
<DatafileAttributes id="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\users01.dbf">
<tablespace>USERS</tablespace>
<temporary>false</temporary>
<online>true</online>
<status>0</status>
<size unit="MB">5</size>
<reuse>true</reuse>
<autoExtend>true</autoExtend>
<increment unit="KB">1280</increment>
<maxSize unit="MB">-1</maxSize>
</DatafileAttributes>
<TablespaceAttributes id="SYSAUX">
<online>true</online>
<offlineMode>1</offlineMode>
<readOnly>false</readOnly>
<temporary>false</temporary>
<defaultTemp>false</defaultTemp>
<undo>false</undo>
<local>true</local>
<blockSize>-1</blockSize>
<allocation>1</allocation>
<uniAllocSize unit="KB">-1</uniAllocSize>
<initSize unit="KB">64</initSize>
<increment unit="KB">64</increment>
<incrementPercent>50</incrementPercent>
<minExtends>1</minExtends>
<maxExtends>4096</maxExtends>
<minExtendsSize unit="KB">64</minExtendsSize>
<logging>true</logging>
<recoverable>false</recoverable>
<maxFreeSpace>0</maxFreeSpace>
<autoSegmentMgmt>true</autoSegmentMgmt>
<bigfile>false</bigfile>
<datafilesList>
<TablespaceDatafileAttributes id="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\sysaux01.dbf">
<id>-1</id>
</TablespaceDatafileAttributes>
</datafilesList>
</TablespaceAttributes>
<TablespaceAttributes id="SYSTEM">
<online>true</online>
<offlineMode>1</offlineMode>
<readOnly>false</readOnly>
<temporary>false</temporary>
<defaultTemp>false</defaultTemp>
<undo>false</undo>
<local>true</local>
<blockSize>-1</blockSize>
<allocation>3</allocation>
<uniAllocSize unit="KB">-1</uniAllocSize>
<initSize unit="KB">64</initSize>
<increment unit="KB">64</increment>
<incrementPercent>50</incrementPercent>
<minExtends>1</minExtends>
<maxExtends>-1</maxExtends>
<minExtendsSize unit="KB">64</minExtendsSize>
<logging>true</logging>
<recoverable>false</recoverable>
<maxFreeSpace>0</maxFreeSpace>
<autoSegmentMgmt>true</autoSegmentMgmt>
<bigfile>false</bigfile>
<datafilesList>
<TablespaceDatafileAttributes id="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\system01.dbf">
<id>-1</id>
</TablespaceDatafileAttributes>
</datafilesList>
</TablespaceAttributes>
<TablespaceAttributes id="TEMP">
<online>true</online>
<offlineMode>1</offlineMode>
<readOnly>false</readOnly>
<temporary>true</temporary>
<defaultTemp>true</defaultTemp>
<undo>false</undo>
<local>true</local>
<blockSize>-1</blockSize>
<allocation>1</allocation>
<uniAllocSize unit="KB">-1</uniAllocSize>
<initSize unit="KB">64</initSize>
<increment unit="KB">64</increment>
<incrementPercent>0</incrementPercent>
<minExtends>1</minExtends>
<maxExtends>0</maxExtends>
<minExtendsSize unit="KB">64</minExtendsSize>
<logging>true</logging>
<recoverable>false</recoverable>
<maxFreeSpace>0</maxFreeSpace>
<autoSegmentMgmt>true</autoSegmentMgmt>
<bigfile>false</bigfile>
<datafilesList>
<TablespaceDatafileAttributes id="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\temp01.dbf">
<id>-1</id>
</TablespaceDatafileAttributes>
</datafilesList>
</TablespaceAttributes>
<TablespaceAttributes id="UNDOTBS1">
<online>true</online>
<offlineMode>1</offlineMode>
<readOnly>false</readOnly>
<temporary>false</temporary>
<defaultTemp>false</defaultTemp>
<undo>true</undo>
<local>true</local>
<blockSize>-1</blockSize>
<allocation>1</allocation>
<uniAllocSize unit="KB">-1</uniAllocSize>
<initSize unit="KB">512</initSize>
<increment unit="KB">512</increment>
<incrementPercent>50</incrementPercent>
<minExtends>8</minExtends>
<maxExtends>4096</maxExtends>
<minExtendsSize unit="KB">512</minExtendsSize>
<logging>true</logging>
<recoverable>false</recoverable>
<maxFreeSpace>0</maxFreeSpace>
<autoSegmentMgmt>true</autoSegmentMgmt>
<bigfile>false</bigfile>
<datafilesList>
<TablespaceDatafileAttributes id="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\undotbs01.dbf">
<id>-1</id>
</TablespaceDatafileAttributes>
</datafilesList>
</TablespaceAttributes>
<TablespaceAttributes id="USERS">
<online>true</online>
<offlineMode>1</offlineMode>
<readOnly>false</readOnly>
<temporary>false</temporary>
<defaultTemp>false</defaultTemp>
<undo>false</undo>
<local>true</local>
<blockSize>-1</blockSize>
<allocation>1</allocation>
<uniAllocSize unit="KB">-1</uniAllocSize>
<initSize unit="KB">128</initSize>
<increment unit="KB">128</increment>
<incrementPercent>0</incrementPercent>
<minExtends>1</minExtends>
<maxExtends>4096</maxExtends>
<minExtendsSize unit="KB">128</minExtendsSize>
<logging>true</logging>
<recoverable>false</recoverable>
<maxFreeSpace>0</maxFreeSpace>
<autoSegmentMgmt>true</autoSegmentMgmt>
<bigfile>false</bigfile>
<datafilesList>
<TablespaceDatafileAttributes id="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\users01.dbf">
<id>-1</id>
</TablespaceDatafileAttributes>
</datafilesList>
</TablespaceAttributes>
<RedoLogGroupAttributes id="1">
<reuse>false</reuse>
<fileSize unit="KB">51200</fileSize>
<Thread>1</Thread>
<member ordinal="0" memberName="redo01.log" filepath="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\"/>
</RedoLogGroupAttributes>
<RedoLogGroupAttributes id="2">
<reuse>false</reuse>
<fileSize unit="KB">51200</fileSize>
<Thread>1</Thread>
<member ordinal="0" memberName="redo02.log" filepath="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\"/>
</RedoLogGroupAttributes>
<RedoLogGroupAttributes id="3">
<reuse>false</reuse>
<fileSize unit="KB">51200</fileSize>
<Thread>1</Thread>
<member ordinal="0" memberName="redo03.log" filepath="{ORACLE_BASE}\oradata\{DB_UNIQUE_NAME}\"/>
</RedoLogGroupAttributes>
</StorageAttributes>
</DatabaseTemplate>


Agora iniciarei a criação de um banco de dados no modo silent que chamarei de BD03. Preste atenção nos parâmetros que eu passo para o DBCA.

C:\>dbca -silent -createDatabase
    -templateName templatepadrao10g.dbt
    -gdbName BD03 -sysPassword manager -systemPassword manager
    -characterset WE8ISO8859P1 -nationalCharacterSet AL16UTF16
    -emConfiguration NONE -databaseType OLTP

Criando e iniciando a instância Oracle
2% concluído
3% concluído
5% concluído
12% concluído
Criando arquivos de banco de dados
13% concluído
25% concluído
Criando views de dicionário de dados
28% concluído
32% concluído
36% concluído
37% concluído
38% concluído
39% concluído
40% concluído
41% concluído
42% concluído
43% concluído
44% concluído
45% concluído
52% concluído
56% concluído
60% concluído
61% concluído
64% concluído
Concluindo Criação de Banco de Dados
67% concluído
71% concluído
75% concluído
86% concluído
97% concluído
100% concluído

Pronto. Fácil e prático, não?

C:\>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Ter Out 4 21:10:01 2011

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

Conectado a:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> select name from v$database;

NAME
-------------
BD03

SQL> select instance_name from v$instance;

INSTANCE_NAME
-------------
bd03

SQL> select * from nls_database_parameters;

PARAMETER                      VALUE
------------------------------ -------------------------------
NLS_LANGUAGE                   BRAZILIAN PORTUGUESE
NLS_TERRITORY                  BRAZIL
NLS_CURRENCY                   R$
NLS_ISO_CURRENCY               BRAZIL
NLS_NUMERIC_CHARACTERS         ,.
NLS_CHARACTERSET               WE8ISO8859P1
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD/MM/RR
NLS_DATE_LANGUAGE              BRAZILIAN PORTUGUESE
NLS_SORT                       WEST_EUROPEAN
NLS_TIME_FORMAT                HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT           DD/MM/RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT             HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT        DD/MM/RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY              Cr$
NLS_COMP                       BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP            FALSE
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_RDBMS_VERSION              10.2.0.1.0

20 linhas selecionadas.

Bom, da mesma forma que podemos criar, podemos também dropar um banco de dados com o DBCA. Antes disso, no exemplo abaixo irei aproveitar e demonstrar como dropar um banco de dados utilizando o comando DROP DATABASE emitido de dentro do SQL*Plus.

C:\>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Ter Out 4 21:30:01 2011

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

Conectado a:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> startup mount force restrict
Instância ORACLE iniciada.

Total System Global Area  209715200 bytes
Fixed Size                  1248140 bytes
Variable Size              71304308 bytes
Database Buffers          134217728 bytes
Redo Buffers                2945024 bytes
Banco de dados montado.

SQL> drop database;

Banco de Dados eliminado.

A outra forma seria utilizando o próprio DBCA como demonstrado abaixo:

C:\>dbca -silent -deleteDatabase 
    -sourceDB BD03 
    -sysDBAUserName SYS
    -sysDBAPassword manager

Estabelecendo conexão com o banco de dados
4% concluído
9% concluído
14% concluído
47% concluído
Atualizando arquivos de configuração de rede
48% concluído
52% concluído
Deletando instância e arquivos de dados
76% concluído
100% concluído



2 comentários:

David Siqueira disse...

Olá Legatti,
Como já haviamos falado anteriormente estas possibilidades são muito uteis no nosso dia a dia, ainda mais quando lidamos com diversos clientes ao longo da nossa carreira. Gostei muito do Post. Um grande Abraço e Parabéns.

Eduardo Legatti disse...

Olá David,

Sem dúvida é uma mão na roda!! Seus comentários, elogios/críticas serão sempre bem vindos. Obrigado pela visita!

Abraços e até mais...

Postagens populares