quarta-feira, 3 de novembro de 2010

ORACLE RECOVERY MANAGER ( RMAN ) - O Que devo saber? - Parte II

Olá pessoal, como estamos?

Bem, em nosso ultimo bate-papo nós falamos das possibilidades de se realizar um backup , utilizando a ferramenta RMAN. Ainda neste mesmo bate-papo anterior citamos alguns dos tipos de backups possiveis de ser realizados, e encerramos o primeiro artigo falando dos arquivos que podem ser backupeados via RMAN.

Vamos então saber um pouco mais de cada um deles, apenas um breve conceito de cada um , para possamos prosseguir com a nossa descoberta , minha e de vocês , sobre esse aplicativo sensacional da Oracle.

Espero que apreciem.

Para aqueles que perderam a primeira parte, segue o linkk : ORACLE RECOVERY MANAGER ( RMAN ) - O Que devo saber? - Parte I

  
TIPOS DE ARQUIVOS QUE POSSO BACKUPEAR VIA RMAN.


Notadamente, você pode generalizar nesse sentido, disendo que você pode backupear TUDO , via RMAN. Sim, eu disse TUDO, porque basicamente podemos backupear o que é "CORE", ou seja, a parte CRUCIAL , em caso de um "DISASTER RECOVER" ser necessário.


Vejam os arquivos que podem ser backupeados :


- Data Files
- Archivelog File
- Current Control File
- Current Server Parameter File.


 Iniciaremos então, conhecendo melhor o que é um DATAFILE.


Conceito : são os arquivos localizados fisicamente, dentro da nossa estrutura de hierarquia de arquivos, que tem co-relação direta com os nossos TABLESPACES, que seriam uma representação lógica, visivel dentro da nossa instância, onde armazenamos nossos dados de modo geral. Também podemos encontrar informações sobre esses DATAFILES, em algumas visões do nosso dicionário Oracle, como por exemplo a V$DATAFILE, DBA_DATA_FILES.


V$DATAFILE

This view contains datafile information from the control file.
See Also:
"V$DATAFILE_HEADER", which displays information from datafile headers
Column Datatype Description
FILE# NUMBER File identification number
CREATION_CHANGE# NUMBER Change number at which the datafile was created
CREATION_TIME DATE Timestamp of the datafile creation
TS# NUMBER Tablespace number
RFILE# NUMBER Tablespace relative datafile number
STATUS VARCHAR2(7) Type of file (system or user) and its status. Values: OFFLINE, ONLINE, SYSTEM, RECOVER, SYSOFF (an offline file from the SYSTEM tablespace)
ENABLED VARCHAR2(10) Describes how accessible the file is from SQL:
  • DISABLED - No SQL access allowed
  • READ ONLY - No SQL updates allowed
  • READ WRITE - Full access allowed
  • UNKNOWN - should not occur unless the control file is corrupted
CHECKPOINT_CHANGE# NUMBER SCN at last checkpoint
CHECKPOINT_TIME DATE Timestamp of the checkpoint#
UNRECOVERABLE_CHANGE# NUMBER Last unrecoverable change number made to this datafile. If the database is in ARCHIVELOG mode, then this column is updated when an unrecoverable operation completes. If the database is not in ARCHIVELOG mode, this column does not get updated.
UNRECOVERABLE_TIME DATE Timestamp of the last unrecoverable change. This column is updated only if the database is in ARCHIVELOG mode.
LAST_CHANGE# NUMBER Last change number made to this datafile (null if the datafile is being changed)
LAST_TIME DATE Timestamp of the last change
OFFLINE_CHANGE# NUMBER Offline change number of the last offline range. This column is updated only when the datafile is brought online.
ONLINE_CHANGE# NUMBER Online change number of the last offline range
ONLINE_TIME DATE Online timestamp of the last offline range
BYTES NUMBER Current datafile size (in bytes); 0 if inaccessible
BLOCKS NUMBER Current datafile size (in blocks); 0 if inaccessible
CREATE_BYTES NUMBER Size when created (in bytes)
BLOCK_SIZE NUMBER Block size of the datafile
NAME VARCHAR2(513) Name of the datafile
PLUGGED_IN NUMBER Describes whether the tablespace is plugged in. The value is 1 if the tablespace is plugged in and has not been made read/write, 0 if not.
BLOCK1_OFFSET NUMBER Offset from the beginning of the file to where the Oracle generic information begins. The exact length of the file can be computed as follows: BYTES + BLOCK1_OFFSET.
AUX_NAME VARCHAR2(513) Auxiliary name that has been set for this file via CONFIGURE AUXNAME
FIRST_NONLOGGED_SCN NUMBER First nonlogged SCN
FIRST_NONLOGGED_TIME DATE First nonlogged time



DBA_DATA_FILES

DBA_DATA_FILES describes database files.
Column Datatype NULL Description
FILE_NAME VARCHAR2(513)   Name of the database file
FILE_ID NUMBER NOT NULL File identifier number of the database file
TABLESPACE_NAME VARCHAR2(30) NOT NULL Name of the tablespace to which the file belongs
BYTES NUMBER   Size of the file in bytes
BLOCKS NUMBER NOT NULL Size of the file in Oracle blocks
STATUS VARCHAR2(9)   File status: AVAILABLE or INVALID (INVALID means that the file number is not in use, for example, a file in a tablespace that was dropped)
RELATIVE_FNO NUMBER   Relative file number
AUTOEXTENSIBLE VARCHAR2(3)   Autoextensible indicator
MAXBYTES NUMBER   Maximum file size in bytes
MAXBLOCKS NUMBER   Maximum file size in blocks
INCREMENT_BY NUMBER   Number of tablespace blocks used as autoextension increment. Block size is contained in the BLOCK_SIZE column of the DBA_TABLESPACES view.
USER_BYTES NUMBER   The size of the file available for user data. The actual size of the file minus the USER_BYTES value is used to store file related metadata.
USER_BLOCKS NUMBER   Number of blocks which can be used by the data
ONLINE_STATUS VARCHAR2(7)   Online status of the file:
  • SYSOFF
  • SYSTEM
  • OFFLINE
  • ONLINE
  • RECOVER


Bem, sabendo disso passemos para o nosso próximo arquivo a ser backupeado.


ARCHIVELOG FILE


Conceito : este arquivo é nada mais nada menos que o conteúdo da área de REDO, descarregado em disco fisico em forma de arquivo para ser utilizado em processos de manutenção de banco de dados, como por exemplo recuperações no tempo. Sua estrutura é determinada por parametrizações contidas no arquivo de inicialização, como nome, destino(s) de arquivamento(s), ainda podemos falar sobre ele que é uma maneira de manter seu banco seguro. Para podermos estar aptos a ter esse tipo de arquivo em nosso esquema de Banco de Dados, temos que antes de mais nada habilitar o modo "ARCHIVELOG", se este estiver desabilitado não teremos a geração dos nossos archivelog files. Como saber se você esta com o log de archivamento habilitado? Simples vejam :




Notem que com apenas um SELECT, em uma de nossas visões de Banco de Dados, mais precisamente a V$DATABASE, utilizando os campos NAME e LOG_MODE, nós conseguimos a informação que queriamos a respeito do tipo de arquivamento presente em nosso banco. Se você encontrar como resposta a opção NOARCHIVELOG não se espante, em muitos casos onde o aplicativo da empresa suporta alguns DOWNTIMES, como falamos anteriormente é muito comum de se encontrar o ARCHIVELOG MODE desabilitado. Já se a opção estiver em ARCHIVELOG , você com certeza poderá usufruir de seus ganhos.




Aqui um pouco mais sobre nossa visão de apoio :




V$DATABASE

V$DATABASE displays information about the database from the control file.
Column Datatype Description
DBID NUMBER Database identifier calculated when the database is created and stored in all file headers
NAME VARCHAR2(9) Name of the database
CREATED DATE Creation date of the database
RESETLOGS_CHANGE# NUMBER System change number (SCN) at open resetlogs
RESETLOGS_TIME DATE Timestamp of open resetlogs
PRIOR_RESETLOGS_CHANGE# NUMBER SCN at prior resetlogs
PRIOR_RESETLOGS_TIME DATE Timestamp of prior resetlogs
LOG_MODE VARCHAR2(12) Archive log mode:
  • NOARCHIVELOG
  • ARCHIVELOG
  • MANUAL
CHECKPOINT_CHANGE# NUMBER Last SCN checkpointed
ARCHIVE_CHANGE# NUMBER Database force archiving SCN. Any redo log with a start SCN below this will be forced to archive out.
CONTROLFILE_TYPE VARCHAR2(7) Type of control file:
  • STANDBY - Indicates that the database is in standby mode
  • CLONE - Indicates a clone database
  • BACKUP | CREATED - Indicates the database is being recovered using a backup or created control file
  • CURRENT - database is available for general use
CONTROLFILE_CREATED DATE Creation date of the control file
CONTROLFILE_SEQUENCE# NUMBER Control file sequence number incremented by control file transactions
CONTROLFILE_CHANGE# NUMBER Last SCN in backup control file; null if the control file is not a backup
CONTROLFILE_TIME DATE Last timestamp in backup control file; null if the control file is not a backup
OPEN_RESETLOGS VARCHAR2(11) (NOT ALLOWED | ALLOWED | REQUIRED) Indicates whether the next database open allows or requires the resetlogs option
VERSION_TIME DATE Version time
OPEN_MODE VARCHAR2(10) Open mode information:
  • MOUNTED
  • READ WRITE
  • READ ONLY
PROTECTION_MODE VARCHAR2(20) Protection mode currently in effect for the database:
  • MAXIMUM PROTECTION - Database is running in maximized protection mode
  • MAXIMUM AVAILABILITY - Database is running in maximized availability mode
  • RESYNCHRONIZATION - Database is running in resynchronization mode
  • MAXIMUM PERFORMANCE - Database is running in maximized protection mode
  • UNPROTECTED - Database is unprotected (this normally occurs when the primary database is mounted and not open)
PROTECTION_LEVEL VARCHAR2(20) Aggregated protection mode currently in effect for the database:
  • MAXIMUM PROTECTION - Database is running in maximized protection mode
  • MAXIMUM AVAILABILITY - Database is running in maximized availability mode
  • RESYNCHRONIZATION - Database is running in resynchronization mode
  • MAXIMUM PERFORMANCE - Database is running in maximized protection mode
  • UNPROTECTED - Database is unprotected (this normally occurs when the primary database is mounted and not open)
Note: This column is an aggregation of the PROTECTION_MODE of all standby archive log destinations.
REMOTE_ARCHIVE VARCHAR2(8) Value of the REMOTE_ARCHIVE_ENABLE initialization parameter
ACTIVATION# NUMBER Number assigned to the database instantiation
SWITCHOVER# NUMBER Number assigned to the database switchover
DATABASE_ROLE VARCHAR2(16) Current role of the database:
  • LOGICAL STANDBY
  • PHYSICAL STANDBY
  • PRIMARY
ARCHIVELOG_CHANGE# NUMBER Highest NEXT_CHANGE# (from the V$ARCHIVED_LOG view) for an archive log
ARCHIVELOG_COMPRESSION VARCHAR2(8) Status of the archive log compression
SWITCHOVER_STATUS VARCHAR2(20) Indicates whether switchover is allowed:
  • NOT ALLOWED - Either this is a standby database and the primary database has not been switched first or this is a primary database and there are no standby databases.
  • SESSIONS ACTIVE - Indicates that there are active SQL sessions attached to the primary or standby database that need to be disconnected before the switchover operation is permitted. Query the V$SESSION view to identify the specific processes that need to be terminated.
  • SWITCHOVER PENDING - This is a standby database and the primary database switchover request has been received but not processed.
  • SWITCHOVER LATENT - The switchover was in pending mode, but did not complete and went back to the primary database.
  • TO PRIMARY - This is a standby database and is allowed to switch over to a primary database.
  • TO STANDBY - This is a primary database and is allowed to switch over to a standby database.
  • RECOVERY NEEDED - This is a standby database that has not received the switchover request.
  • PREPARING SWITCHOVER - Either this is a primary database that is accepting redo data from a logical standby database in preparation for switch over to the logical standby database role, or it is a logical standby database sending redo data to a primary database and other standby databases in preparation for switch over to the primary database role. In the latter case, a completed dictionary has already been sent to the primary database and other standby databases.
  • PREPARING DICTIONARY - This is a logical standby database that is sending redo data to a primary database and other standby databases in the configuration in preparation for switch over to the primary database role.
  • TO LOGICAL STANDBY - This is a primary database that has received a complete dictionary from a logical standby database.
DATAGUARD_BROKER VARCHAR2(8) Indicates whether the Data Guard configuration is being managed by the broker (ENABLED) or not (DISABLED)
GUARD_STATUS VARCHAR2(7) Protects data from being changed:
  • ALL - Indicates all users other than SYS are prevented from making changes to any data in the database.
  • STANDBY - Indicates all users other than SYS are prevented from making changes to any database object being maintained by logical standby.
  • NONE - Indicates normal security for all data in the database.
SUPPLEMENTAL_LOG_DATA_MIN VARCHAR2(8) Ensures that LogMiner (and any products building on LogMiner technology) will have sufficient information to support chained rows and various storage arrangements such as cluster tables:
  • NO - None of the database-wide supplemental logging directives are enabled
  • IMPLICIT - Minimal supplemental logging is enabled because all or a combination of primary key, unique key, and foreign key supplemental logging is enabled
  • YES - Minimal supplemental logging is enabled through an ALTER DATABASE ADD SUPPLEMENTAL LOG DATA statement
See Also: Oracle Database SQL Reference for additional information about the ALTER DATABASE ADD SUPPLEMENTAL LOG DATA statement
SUPPLEMENTAL_LOG_DATA_PK VARCHAR2(3) For all tables with a primary key, indicates whether all columns of the primary key are placed into the redo log whenever an update is performed (YES) or not (NO) See Also: Oracle Database SQL Reference for more information about the ALTER DATABASE ADD SUPPLEMENTAL LOG supplemental_id_key_clause statement
SUPPLEMENTAL_LOG_DATA_UI VARCHAR2(3) For all tables with a unique key, indicates whether all other columns belonging to the unique key are placed into the redo log if any of the unique key columns are modified (YES) or not (NO) See Also: Oracle Database SQL Reference for more information about the ALTER DATABASE ADD SUPPLEMENTAL LOG supplemental_id_key_clause statement
FORCE_LOGGING VARCHAR2(3) Indicates whether the database is under force logging mode (YES) or not (NO)
PLATFORM_ID NUMBER Platform identification number of the database
PLATFORM_NAME VARCHAR2(101) Platform name of the database
RECOVERY_TARGET_INCARNATION# NUMBER Incarnation number where all datafiles are recovered by the RECOVER DATABASE command
LAST_OPEN_INCARNATION# NUMBER Record number of the incarnation in V$DATABASE_INCARNATION that was last opened successfully
CURRENT_SCN NUMBER Current SCN; null if the database is not currently open. For a standby database, the current standby redo application SCN.
FLASHBACK_ON VARCHAR2(3) Possible values are as follows:
  • YES - Flashback is on
  • NO - Flashback is off
  • RESTORE POINT ONLY - Flashback is on but one can only flashback to guaranteed restore points
SUPPLEMENTAL_LOG_DATA_FK VARCHAR2(3) For all tables with a foreign key, indicates whether all other columns belonging to the foreign key are placed into the redo log if any foreign key columns are modified (YES) or not (NO) See Also: Oracle Database SQL Reference for more information about the ALTER DATABASE ADD SUPPLEMENTAL LOG supplemental_id_key_clause statement
SUPPLEMENTAL_LOG_DATA_ALL VARCHAR2(3) For all columns, indicates whether all the fixed-length maximum size columns of that row are placed into the redo log (YES) or not (NO) See Also: Oracle Database SQL Reference for more information about the ALTER DATABASE ADD SUPPLEMENTAL LOG supplemental_id_key_clause statement
DB_UNIQUE_NAME VARCHAR2(30) Unique database name
STANDBY_BECAME_PRIMARY_SCN NUMBER SCN at which a physical standby database became a primary database. This SCN is useful for converting a failed primary database into a physical standby database after a forced failover. See Also: Oracle Data Guard Concepts and Administration.
FS_FAILOVER_STATUS VARCHAR2(21) Fast-start failover status:
  • DISABLED
  • BYSTANDER
  • SYNCHRONIZED
  • UNSYNCHRONIZED
  • LOADING DICTIONARY
  • SUSPENDED
  • STALLED
  • PRIMARY UNOBSERVED
  • REINSTATE REQUIRED
  • REINSTATE IN PROGRESS
  • REINSTATE FAILED
See Also: Oracle Data Guard Broker for detailed descriptions of these values.
FS_FAILOVER_CURRENT_TARGET VARCHAR2(30) DB_UNIQUE_NAME of the standby that is the current FSFO target standby for the Data Guard configuration
FS_FAILOVER_THRESHOLD NUMBER Time in seconds that the observer will attempt to reconnect with a disconnected primary before attempting FSFO with the target standby
FS_FAILOVER_OBSERVER_PRESENT VARCHAR2(7) YES - Observer is currently connected to the local database NO - Observer is not connected to the local database
Note: This field is consistent throughout a Real Application Clusters (RAC) environment; that is, if the observer is connected to any instance in the RAC, all will show a value of YES.
FS_FAILOVER_OBSERVER_HOST VARCHAR2(512) Machine name that is currently hosting the observer process




Uma pequena pausa para um comentário do articulista, eu na minha carreira sempre gostei de conhecer as visões do banco de dados, cheguei ao absurdo de ler quase todas elas, mas atualmente eu lhes digo, NÃO FAÇAM ISSO, o banco te fornece essas informações a todo e qualquer momento, e a você inevitavelmente acaba decorando, portanto desencanem de saber onde está tudo logo de cara. Redescrubra seu banco aos poucos.


Vamos ao próximo e na minha opinião o mais importante arquivo a ser backupado, os temidos "CONTROL FILES".


CONTROL FILES 


Conceito : se você fizer uma analogia deste arquivo com alguma parte do corpo humano , ele honestamente se adequa melhor ao CÉREBRO, visto que , você pode infartar, ter uma crise renal, pancreatite, e etc e tal ( Momento House), pois todos esses problemas são resolvidos com um belo transplante, mas se seu problema for no CÉREBRO, esse ainda não se é possível ser transplantado, portanto é o arquivo que mantem todas as informações a respeito da estrutura do nosso banco de Dados, cada ID de um datafile, cada SCN dos respectivos arquivos que foram atualizados, cada arquivo removido, cada situação alterada dentro da ESTRUTURA do seu Banco de dados, e aliado ao nosso amigo ARCHIVELOG FILE, é como se você tivesse a S.W.A.T dentro do seu SGBD.


A algum tempo atrás um grande profissional e amigo , fez um post sobre os Control files, vocês podem conferi-lo através do seguinte Link :


Rodrigo Almeida - O que é um Control File?


E por fim temos nosso arquivo de parametros.


PARAMETER FILE ou INIT.ORA


Conceito : este arquivo é o responsável por dar o "start" em nosso database, ele contem todos os endereços fisicos em forma de parametros de nossos archives, control files e mais alguns parametros como UTL_FILE_DIR , muito usado para processos de comparação de parametros em casos de TUNING de banco de dados e aplicação, pois nele encontramos as configurações iniciais para o funcionamento do nosso banco. Uma boa prática para todos adotarem é, sempre que forem dar manutenção em seus ambientes, mater atualizado seus respectivos arquivos de parametros com comentários contendo date e hora e nome de quem o alterou, isso facilita em muito quando uma terceira pessoa for olhar para este arquivo e perceber dentro do histórico de alterações , o porque elas ocorreram e quais foram os resultados.


De posse dessas pequenas informações, vamos abordar então algumas tarefas de Backup via RMAN que podem ser usadas de maneira pró-ativa e funcional para melhorar nosso backup.


REDUZINDO SEU TEMPO DE BACKUP


Todos que utilizam a ferramenta RMAN, vez ou outra sempre encontram algum problema relacionado a tempo de backup, isso está intimamente ligado ao que ha dentro do seu Banco de dados, falando em termos de massa de dados, mas também essa questão pode estar relacionada ao tipo de licença Oracle que você usa para o seu ambiente. 


Se o seu caso é o segundo, o licenciamento, você fatalmente esbarrará nas limitações daquilo que você comprou, portanto tenha em mente antes de sair comprando, que é necessário sempre fazer um bom estudo daquilo que você pode vir a precisar antes de efetivamente adquirir, é o famoso "PLANEJAMENTO ESTRATÉGICO".


O planejamento de faz necessário , pois se você estiver por exemplo adquirindo uma release ORACLE EXPRESS EDITION para um ambiente produtivo, que atualmente você o considera "pequeno", com o passar do tempo , essa conotação muda, pois os dados aumentam gradativamente, e em termos de backup no RMAN algumas releases são limitadas com relação a recursos a serem utilizados, tais como PARALLELISM, ALLOCATE CHANNEL, e etc, eis então que surge a pergunta, SE VOCÊ IDENTIFICAR QUE HA NECESSIDADE DE MAIS CANAIS , COMO FARÁ ISSO SE SUA RELEASE É NATURALMENTE LIMITADA?


Sabendo qual é a sua real necessidade, nunca haverão desperdicios nesse sentido.


Depois desses pequenos detalhes voltemos ao nosso problema com a redução de tempo de nossos backups.


Basicamente o RMAN se utiliza de uma área é especifico pra melhorar sues backups , essa área é denominada LARGEL POOL, no momento da alocação de canais é dela que o RMAN tira o montante para sua execução, ou seja, se você tiver uma large pool pequena para o seu banco, é muito provavel que você tenha problemas de backup , relacionado a tempo.


Deêm uma olhada :


LARGE_POOL_SIZE

Property Description
Parameter type Big integer
Syntax LARGE_POOL_SIZE = integer [K | M | G]
Default value If SGA_TARGET is set, but a value is not specified for LARGE_POOL_SIZE, then the default is 0 (internally determined by the Oracle database). If LARGE_POOL_SIZE is specified, then the user-specified value indicates a minimum value for the memory pool. If SGA_TARGET is not set, 0 if both of the following are true:
  • The pool is not required by parallel execution
  • DBWR_IO_SLAVES is not set
Otherwise, derived from the values of PARALLEL_MAX_SERVERS, PARALLEL_THREADS_PER_CPU, CLUSTER_DATABASE_INSTANCES, DISPATCHERS, and DBWR_IO_SLAVES.
Note that a value derived in this way does not take into account the requirements used for Automatic Storage Management files. As a general guideline, you should add 600K to the size of the SGA on a database instance using ASM.
Modifiable ALTER SYSTEM
Range of values 300 KB to at least 2 GB (actual maximum is operating system-specific)
Basic No
LARGE_POOL_SIZE specifies (in bytes) the size of the large pool allocation heap. The large pool allocation heap is used in shared server systems for session memory, by parallel execution for message buffers, and by backup processes for disk I/O buffers. Parallel execution allocates buffers out of the large pool only when SGA_TARGET is set.
Caution:
When Oracle derives a default value, it adds 250K for each session for the shared server if DISPATCHERS is configured. The final derived value also includes a port-specific amount of memory for backup I/O buffers. The total derived default value can either be too large to allocate or can cause performance problems. In that case, set LARGE_POOL_SIZE to a number sufficiently small so that the database can start.
You can specify the value of this parameter using a number, optionally followed by K or M to specify kilobytes or megabytes, respectively. If you do not specify K or M, then the number is taken as bytes.





RECAPITULANDO :

Falamos hoje então da necessidade de termos bons conceitos sobre as estruturas mais importantes a serem backupeadas, vimos um pouco de seus conceito de uso e de função, visitamos também um pouco sobre planejamento estratégico e demos mais uma pequena explorada no nosso dicionário de dados.
Fico por aqui por hoje, mas volto com um artigo mais técnico, onde iremos preparar nosso ambiente para o Backup, conhecendo melhor as possibilidades do CONFIGURE, sintaxe usada no RMAN para definir suas métricas.

Espero que tenham gostado.

Abraço á todos!!!!

Sucesso Sempre!!!!