quarta-feira, 22 de setembro de 2010

MIGRANDO SUA TABLESPACE PARA SISTEMAS "+ASM"

Olá pessoal, estou de volta.

Trago hoje até vocês uma técnica para resolver problemas do cotidiano que podem vir a ocorrer no nosso trabalho.

Hoje eu trouxe para vocês como podemos fazer para migrar uma tablespace que tenha sido criada fora do ambiente +ASM por descuido, ou até mesmo por uma questão de falta de conhecimento de quem iniciou em um ambiente novo e não conhece ainda todo ele.

Espero que apreciem.


MIGRANDO TABLESPACE

Antes de iniciarmos nossa tarefa, gostaria de compartilhar as configurações do ambiente controlado onde fiz este teste, vejam abaixo a configuração da minha VM onde realizei esse trabalho :


Este é um ambiente proposto, não quer dizer que com menos ou mais recursos que estes ai apresentados você não consiga realizar esta mesma tarefa da mesma maneira.

Detalhando melhor o que usei fica aqui a lista dos softwares utilizados :

Banco de Dados : Oracle Enterprise Edition 10.2.0.1 Patch 10.2.0.4
Sistema Operacional : Oracle Enterprise Linux Update 5
Instâncias : DBLAB e +ASM

Caso você não tenha experiencia em criação de ambientes com +ASM, ou até mesmo pouca experiencia com instalações linux e de softwares Oracle, seguem abaixo alguns links que podem lhe auxiliar neste processo :

Instalação do Oracle Enterprise Linux 5 

Instalação e Configuração do Banco de Dados 10gR2 

Criação e Customização da Instancia ASM 

Passado nossos pre-requisitos para iniciarmos , vamos ao problema.


CUIDADOS ANTES DA MIGRAÇÃO DA TABLESPACE 


Antes de comerçar e sair migrando todo seu banco, ou até mesmo sair migrando tudo que é tablespace que encontra pela frente, é bom lembrar que : ISSO GERARA UMA INDISPONIBILIDADE NA SUA TABLESPACE QUE SERÁ MIGRADA. Porque?


Isso se deve ao fato de que é necessário coloca-la OFFLINE durante o processo, você vera no decorrer da atividade, e se por ventura você tiver uma aplicação muito importante hospedada na tal tablespace, seria bom que essa atividade fosse executada em uma janela de Manutenção préviamente agendada e com o conhecimento da sua equipe.

OS  AMBIENTES


Primeiro , vamos colocar nossa instancia +ASM, devidamente criada no ar :


Pronto, com a nossa instancia +ASM no ar, já podemos começar a pensar em fazer a atividade. Até porque não seria possivel executa-la sem uma instancia +ASM devidamente levantada.


Agora colocamos nosso ambiente principal no ar, par apodermos trabalhar com o remanejamento das Tablespaces entre os FILE SYSTEM's.


Nota: Não realizei nada de especial até então, foram apenas processos de STARTUP database, nenhuma opção a mais além do trivial mesmo.


CHECANDO NOSSAS TABLESPACES


Uma vez conectados em nosso Banco principal ( DBLAB), vamos dar uma olhada em nossos datafiles, para isso usaremos nossa visão de apoio :


DBA_DATA_FILES


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



Vejam acima as descrições de seus campos , caso precisem se orientar de alguma maneira.


Como podemos identificar na imagem acima, todos se encontram dentro do meu ponto de montagem "/U01", obedecendo a regra de estruturação estabelecida pelo OFA .


A Tablespace que escolhi para o nosso processo é a "USERS", por ser uma tablespace não tão critica, e no meu caso não possuo aqui nada que impeça de realizar essa tarefa com meu BD ONLINE e DISPONIVEL para uso pelos demais usuários, se assim eu os tivesse.

UM POUCO MAIS SOBRE MEU AMBIENTE +ASM


Que tal então, depois dessas fases preveas terem sido vencidas, nós darmos uma olhadinha no nosso ambiente +ASM, ver e conhecer um pouco sobre o que compõe sua estrutura, e como podemos interagir com o que nele contém e em nossa instancia levantada para auxiliar no gerenciamento do mesmo.




Vejam na imagem acima que eu entrei em um software externo chamado ASMCMD, o que seria isso?


Este nada mais é do que o nosso "TERMINAL", dentro do aplicativo que gerencia os discos entregues ao ORACLE para serem gerenciados. Através dele conseguimos executar algumas tarefas administrativas pertinentes ao conteudo dos discos, que é invisivel ao sistema operacional no 10g, uma vez que você opta por usar o ASM.


Obs.: Na release 11g do Oracle Database, o ASMCMD ganhou muito mais poder de fogo, podendo executar muito mais tarefas de integração com o S.O do que na release que estamos usando a 10g R2. Vale lembrar que quem comprou o Book sobre ASM da Oracle Press, ele traz no seu conteudo uma carta enviada pelo criador do sistema de ASM , como ele idealizou a ideia e como surgiu a necessidade de se ter um gerenciador de arquivos criados pela Oracle, bem como também a sua evolução, desde nomemclatura até arquitetura.


Voltando ao nosso assunto, no ASMCMD eu dei um comando inicial "LS", que se asemelha ao do sistema operacional mesmo, pois queria que ele listasse para mim os dois "DISKGROUPS" montados na minha Instancia ASM, e são eles DADOS 1 e DADOS2.


Posterior a isso digitei HELP, que nos traz todas as opções possiveis que o nosso ASMCMD pode realizar dentro do seu "MUNDO".




A titulo de exemplo, vejam uma tarefa administrativa bem tipica de ser realizada em sistemas operacionais, sendo realizada dentro do ASMCMD, que é a criação de estruturas de diretórios. Utilizei duas opções aqui, o "CD" ( Entrar em determinado Diretório) e também "MKDIR" ( Criação de diretórios ).

VISÕES DE APOIO DO ASM 

V$ASM_ALIAS

In an Automatic Storage Management instance, V$ASM_ALIAS displays one row for every alias present in every disk group mounted by the Automatic Storage Management instance. In a database instance, V$ASM_ALIAS displays no rows.
Column Datatype Description
NAME VARCHAR2(48) Automatic Storage Management alias or alias directory name
GROUP_NUMBER NUMBER Owning disk group number of the alias (foreign key to the V$ASM_DISKGROUP view)
FILE_NUMBER NUMBER Automatic Storage Management file number of the alias (foreign key to the V$ASM_FILE view)
FILE_INCARNATION NUMBER Automatic Storage Management file incarnation number for the alias
ALIAS_INDEX NUMBER Alias entry number for the alias
ALIAS_INCARNATION NUMBER Incarnation number for the parent of the alias
PARENT_INDEX NUMBER A 32-bit number consisting of a disk group number in the high-order 8 bits and an alias entry number in the low-order 24 bits (number of the directory containing the alias)
REFERENCE_INDEX NUMBER A 32-bit number consisting of a disk group number in the high-order 8 bits and an alias entry number in the low-order 24 bits (number of the directory describing the current entry).
ALIAS_DIRECTORY VARCHAR2(1) Indicates whether the alias is to a directory (Y) or to an Automatic Storage Management file (N)
SYSTEM_CREATED VARCHAR2(1) Indicates whether the alias is system created (Y) or user created (N)



V$ASM_DISK :

V$ASM_DISK

In an Automatic Storage Management instance, V$ASM_DISK displays one row for every disk discovered by the Automatic Storage Management instance, including disks which are not part of any disk group. In a database instance, V$ASM_DISK only displays rows for disks in disk groups in use by the database instance.
Column Datatype Description
GROUP_NUMBER NUMBER Number of the disk group containing the disk (foreign key to the V$ASM_DISKGROUP view)
DISK_NUMBER NUMBER Number assigned to the disk within its disk group
COMPOUND_INDEX NUMBER A 32-bit number consisting of a disk group number in the high-order 8 bits and a disk number in the low-order 24 bits (for efficient access to the view)
INCARNATION NUMBER Incarnation number for the disk
MOUNT_STATUS VARCHAR2(7) Per-instance status of the disk relative to group mounts:
  • MISSING - Automatic Storage Management metadata indicates that the disk is known to be part of the Automatic Storage Management disk group, but no disk in the storage system was found with the indicated name
  • CLOSED - Disk is present in the storage system but is not being accessed by Automatic Storage Management
  • OPENED - Disk is present in the storage system and is being accessed by Automatic Storage Management. This is the normal state for disks in a database instance which are part of a Disk Group being actively used by the instance.
  • CACHED - Disk is present in the storage system, and is part of a disk group being accessed by the Automatic Storage Management instance. This is the normal state for disks in an Automatic Storage Management instance which are part of a mounted disk group.
  • IGNORED - Disk is present in the system, but is ignored by ASM because of one of the following:
    - The disk is detected by the system library, but is ignored because an ASM library discovered the same disk
    - ASM has determined that the membership claimed by the disk header is no longer valid
  • CLOSING - ASM is in the process of closing this disk
HEADER_STATUS VARCHAR2(12) Per-instance status of the disk as seen by discovery:
  • UNKNOWN - Automatic Storage Management disk header has not been read
  • CANDIDATE - Disk is not part of a disk group and may be added to a disk group with the ALTER DISKGROUP statement
  • INCOMPATIBLE - Version number in the disk header is not compatible with the Automatic Storage Management software version.
  • PROVISIONED - Disk is not part of a disk group and may be added to a disk group with the ALTER DISKGROUP statement. The PROVISIONED header status is different from the CANDIDATE header status in that PROVISIONED implies that an additional platform-specific action has been taken by an administrator to make the disk available for Automatic Storage Management.
  • MEMBER - Disk is a member of an existing disk group. No attempt should be made to add the disk to a different disk group. The ALTER DISKGROUP statement will reject such an addition unless overridden with the FORCE option
  • FORMER - Disk was once part of a disk group but has been dropped cleanly from the group. It may be added to a new disk group with the ALTER DISKGROUP statement.
  • CONFLICT - Automatic Storage Management disk was not mounted due to a conflict
  • FOREIGN - Disk contains data created by an Oracle product other than ASM. This includes datafiles, logfiles, and OCR disks.
MODE_STATUS VARCHAR2(7) Global status about which kinds of I/O requests are allowed to the disk:
  • UNKNOWN - Automatic Storage Management disk mode is not known (typically the disk is not mounted)
  • ONLINE - Disk is online and operating normally. Reads and writes are attempted.
  • OFFLINE - Disk is offline and access to data is not permitted. Reads and writes are not attempted. An offline disk remains logically part of its disk group.
STATE VARCHAR2(8) Global state of the disk with respect to the disk group:
  • UNKNOWN - Automatic Storage Management disk state is not known (typically the disk is not mounted)
  • NORMAL - Disk is online and operating normally
  • ADDING - Disk is being added to a disk group, and is pending validation by all instances that have the disk group mounted
  • DROPPING - Disk has been manually taken offline and space allocation or data access for the disk halts. Rebalancing will commence to relocate data off the disks to other disks in the disk group. Upon completion of the rebalance, the disk is expelled from the group.
  • HUNG - Disk drop operation cannot continue because there is insufficient space to relocate the data from the disk being dropped
  • FORCING - Disk is being removed from the disk group without attempting to offload its data. The data will be recovered from redundant copies, where possible.
  • DROPPED - Disk has been fully expelled from the disk group
REDUNDANCY VARCHAR2(7) External redundancy of the disk:
  • UNKNOWN
  • UNPROT
  • MIRROR
  • PARITY
LIBRARY VARCHAR2(64) Name of the library that discovered the disk
TOTAL_MB NUMBER Total capacity of the disk (in megabytes)
FREE_MB NUMBER Unused capacity of the disk (in megabytes)
NAME VARCHAR2(30) Name of the disk
FAILGROUP VARCHAR2(30) Name of the failure group containing the disk
LABEL VARCHAR2(31) Disk label portion of the name returned by discovery
PATH VARCHAR2(256) Operating system pathname portion of the name returned by discovery
UDID VARCHAR2(64) Universal Device ID portion of the name returned by discovery
PRODUCT VARCHAR2(32) The name of the manufacturer and the name of the product. All disks with the same product id will have the same performance and reliability characteristics.
CREATE_DATE DATE Date and time when the disk was added to the disk group
MOUNT_DATE DATE Date and time when the disk was mounted by the first instance
REPAIR_TIMER NUMBER Seconds remaining until the disk is automatically dropped (0 if not failed)
READS NUMBER Total number of I/O read requests for the disk
WRITES NUMBER Total number of I/O write requests for the disk
READ_ERRS NUMBER Total number of failed I/O read requests for the disk
WRITE_ERRS NUMBER Total number of failed I/O write requests for the disk
READ_TIME NUMBER Total I/O time (in hundredths of a second) for read requests for the disk if the TIMED_STATISTICS initialization parameter is set to true (0 if set to false)
WRITE_TIME NUMBER Total I/O time (in hundredths of a second) for write requests for the disk if the TIMED_STATISTICS initialization parameter is set to true (0 if set to false)
BYTES_READ NUMBER Total number of bytes read from the disk
BYTES_WRITTEN NUMBER Total number of bytes written to the disk


V$ASM_DISKGROUP

In an Automatic Storage Management instance, V$ASM_DISKGROUP displays one row for every disk group discovered by the Automatic Storage Management instance. In a database instance, V$ASM_DISKGROUP displays one row for every Automatic Storage Management disk group mounted by the local Automatic Storage Management instance.
Column Datatype Description
GROUP_NUMBER NUMBER Cluster-wide number assigned to the disk group (primary key)
NAME VARCHAR2(30) Name of the disk group
SECTOR_SIZE NUMBER Physical block size (in bytes)
BLOCK_SIZE NUMBER Automatic Storage Management metadata block size (in bytes)
ALLOCATION_UNIT_SIZE NUMBER Size of the allocation unit (in bytes)
STATE VARCHAR2(11) State of the disk group relative to the instance:
  • CONNECTED - Disk group is in use by the database instance
  • BROKEN - Database instance lost connectivity to the Automatic Storage Management instance that mounted the disk group
  • UNKNOWN - Automatic Storage Management instance has never attempted to mount the disk group
  • DISMOUNTED - Disk group was cleanly dismounted by the Automatic Storage Management instance following a successful mount
  • MOUNTED - Instance is successfully serving the disk group to its database clients
TYPE VARCHAR2(6) Redundancy type for the disk group:
  • EXTERN
  • NORMAL
  • HIGH
TOTAL_MB NUMBER Total capacity of the disk group (in megabytes)
FREE_MB NUMBER Unused capacity of the disk group (in megabytes)
REQUIRED_MIRROR_FREE_MB NUMBER Amount of space that is required to be available in a given disk group in order to restore redundancy after one or more disk failures. The amount of space displayed in this column takes mirroring effects into account.
USABLE_FILE_MB NUMBER Amount of free space that can be safely utilized taking mirroring into account, and yet be able to restore redundancy after a disk failure
OFFLINE_DISKS NUMBER Number of disks in the disk group that are currently offline
UNBALANCED VARCHAR2(1) Indicates whether the disk group requires a rebalance, for example, if the instance crashed while a rebalance operation was pending (Y) or not (N)
COMPATIBILITY VARCHAR2(60) The minimum software version required for an ASM instance to mount this disk group
DATABASE_COMPATIBILITY VARCHAR2(60) The minimum software version required for a database instance to use files in this disk group

V$ASM_DISK_STAT :

V$ASM_DISK_STAT

V$ASM_DISK_STAT provides a way to query performance statistics in the same way that V$ASM_DISK does, but without performing discovery of new disks. This results in a less expensive operation. However, since discovery is not performed, the output of this view does not include any data about disks that are new to the system.
The columns for V$ASM_DISK_STAT are the same as those for V$ASM_DISK.
See Also:
"V$ASM_DISK"
Dentre Outras.


CONFIRMANDO A LOCALIZAÇÃO DA NOSSA TABLESPACE USERS


Antes de realizarmos a migração e para que fique registrado, vejam onde esta o Datafile da nossa Tablespace ALVO, a USERS :


Checado, vamos então ao processo de migração.


MIGRANDO SUA TABLESPACE DE FILESYSTEM NON-ASM PARA ASM


Para executar essa tarefa usaremos o bom RMAN, ferramente externa que acompanha o produto Oracle, e tem por finalidade dar suporte em processos de Disaster Recover de vários modose também execuções de Backups com diversas estratégias diferenciadas.




Passo 1: Conectar no RMAN

Veja na figura que eu executo um comando RMAN no terminal e logo em seguida um prompt aparece, feito isso eu uso o "CONNECT TARGET" , para que? Bem isso determinará que iremos prosseguir essa atividade na base ALVO ( target ) que é a DBLAB.


Subsequentemente é mostrado o meu DBID bem como o meu Service Name , informações imprescindiveis se você um dia necessitar fazer reuperações sem catalogo , etc e tal.


Passo 2 :Colocar Tablespace OFFLINE


Me conectei e agora? Bem como eu avisei anteriormente, haverá uma indisponibilidade durante o processo , visto que estará OFFLINE nossa tablespace.
O Comando para colocala neste estado é executado no RMAN mesmo, através da Statement :


SQL "ALTER TABLESPACE USERS OFFLINE";


Nota:  Essas aspas duplas colocadas no comando, não são enfeite, elas são realmente encessárias quando se esta passando intruções SQL para serem executadas pelo RMAN.


Feito isso é exibida a mensagem de que nossa Tablespace ja se encontra OFFLINE. Como mostra a imagem.


Passo 3 : Realizando a copia da Tablespace para o sistema de +ASM


Com a nossa "vitima" OFFLINE, vamos agora colocala dentro do nosso sistema +ASM através do comando :


BACKUP AS COPY TABLESPACE USERS FORMAT '+DADOS1';


Nota : Aqui o RMAN fará uma copia da tablespace para dentro do ASM , criando uma nomenclatura própria para ela, e colocoando-a dentro do DiskGroup DADOS1.
Notem que é bem rapido o processo neste caso, isso se deve ao fato de minha base se pequena e minha tablespace não ter nada também, em um ambiente maior isso demanda um pouco mais de tempo.


Passo 4 : LIBERANDO A TABLESPACE


Hora de realizar o SWITCH da Tablespace, este comando validará a troca realizada pelo RMAN entre os sistemas de arquivos Não-ASM e ASM. A Sintax do comando é esta : 


SWITCH TABLESPACE USERS TO COPY;


Uma mensagem é mostrada na sequencia, indicando o numero do nosso datafile que foi copiado , bem como sua nomenclatura atual , dentro do sistema em ASM já.


E por fim só nos resta tornar disponivel nossa TABLESPACE USERS mais uma vez :


SQL "ALTER TABLESPACE USERS ONLINE";


Pronto, já estamos dentro do ambiente +ASM. NÂO ACREDITO, PROVE?


Ok, vamos lá:


Sem problemas, conecte a sua instancia DBLAB, faça um select simples na visão DBA_DATA_FILES e veja por si que na coluna FILE_NAME o indicativo já aponta para o seu DISKGROUP.


BINGO!!!!...Conseguimos mais uma.


Parabéns para nós!!!!


Dica.: Não necessáriamente você precisa executar comando a comando como eu fiz, você pode junatr tudo em um único script e colocalo para ser executado, é uma opção de cada um.


Espero que tenham gostado deste post.
Um abraço á todos e até a próxima.