sábado, 28 de dezembro de 2013

Dataguard - Parte 3 - Criando o Dataguard Broker

1. Conceito do DG Broker


O Dataguard Broker é um framework da Oracle que centraliza a monitoração e administração do Ambiente no contexto do Guard, onde a partir de uma instancia podemos ter até 9 standby databases configurados, com as mais diversas possibilidades, open read only, physical standby, logical standby e sem limtite geográfico.

O Broker automatiza diversas tarefas dentro do ambiente de alta disponibilidade e contingenciado que antes eram feitas manualmente como, alteração do tipo de proteção do dataguard, adição de um novo membro no cluster ou dataguard, transporte e aplicação de redo logs, switchover e failover, entre outras funções.

O Broker pode ser administrado através de um aplicativo de linha de comando chamado Dataguard Comand line (DGMGRL) e o Enterprise Manager.

Fonte: Oracle Data Guard Broker Concepts

2. Pre-requisitos


O pre-requisito principal antes de se criar a configuração do Broker é que o Dataguar / Standby Database já exista e a replica do archives estejam funcionando, este foi o passo feito anteriormente, caso ainda não foi executado seguir para Dataguard - Part 2 - Criando o Standby Database

Em linhas gerais, o dataguard broker mantem em um arquivo toda a configuração do Broker, ele é criado a nivel de instancia a partir dos parametros db_broker_fileN, e existe pelo menos um arquivo por instancia. O Parametros dg_broker_start determina se o broker deve ser usado, e os parametros de db_unique_name e db_name estão mais a nivel do Standby Database e já devem ter sidos configurados.

ParametroProducaoStandby
dg_broker_config_file1+DG_DATA/ORCL/dr1mfg.dat'+DG_DATA/ORCL/dr1mfg.dat'
dg_broker_config_file2+DG_DATA/ORCL/dr1mfg.dat'+DG_DATA/ORCL/dr1mfg.dat'
DG_BROKER_STARTTRUETRUE
db_unique_nameorclorclstby
db_nameorclorcl

Em ambos ambientes (Prod e Standby) Executar:

ALTER SYSTEM SET dg_broker_config_file1 = '+DG_DATA/ORCL/dr1mfg.dat' scope=both;

ALTER SYSTEM SET dg_broker_config_file2 = '+DG_FRA/ORCL/dr2mfg.dat' scope=both;

ALTER SYSTEM SET DG_BROKER_START=TRUE scope=both;

3. Criando a configuração


A configuração do Broker pode ser criado por linha de comando através do DGMGRL conectando-se com o sys com a seguir:

[oracle@os-indaia-orcl-prod ~]$ dgmgrl
DGMGRL for Linux: Version 11.2.0.3.0 - Production

Copyright (c) 2000, 2009, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
DGMGRL> connect sys/oracle
Connected.

Para criar a configuração inicial chamada ORCL_DR devemos utilizar o comando create configuration.

DGMGRL> CREATE CONFIGURATION ORCL_DR AS PRIMARY DATABASE IS ORCL CONNECT IDENTIFIER IS ORCL;
Configuration "ORCL_DR" created with primary database "ORCL"

Agora por fim devemos adicionar a instancia de standby com o comando add database:

DGMGRL> ADD DATABASE ORCLSTBY AS CONNECT IDENTIFIER IS ORCLSTBY MAINTAINED AS PHYSICAL; 
Database "orclstby" added

Para verificar a configuração do Broker utilizamos o comando show configuration, note que as duas instancias (Prod e Stby) já fazem parte da  configuração, porém esta configuração ainda não esta habilitada:

DGMGRL> show configuration

Configuration - ORCL_DR

  Protection Mode: MaxPerformance
  Databases:
    ORCL     - Primary database
    orclstby - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
DISABLED


4. Habilitando


Para habilitar a configuração base executar o comando Enable Configuration e o standby já deve iniciar o servico de transporte e aplicação de archives.

DGMGRL> ENABLE CONFIGURATION
Enabled.

DGMGRL> show configuration

Configuration - ORCL_DR

  Protection Mode: MaxPerformance
  Databases:
    ORCL     - Primary database
    orclstby - Physical standby database

Fast-Start Failover: DISABLED

Configuration Status:
SUCCESS


Próximo Passo: Dataguard - Parte 4 - Criando o TAF (Transparent Application Failover)

quinta-feira, 26 de dezembro de 2013

Dataguard - Part 2 - Criando o Standby Database

Segue a seguir um pequeno roteiro para montar o banco de standby, o documento se seguido completo é possivel iniciar uma nova instancia de standby, porém a ideia é demonstrar os passos necessários, o metodo pode variar bastante de acordo com o ambiente e o DBA.

1. Pre-requisitos - Preparando a infra-estrutura


1.1 Primary Database

  • Archive log, o banco de dados de produção deve estar obrigatóriamente em modo de archivelog.
SQL> select log_mode from v$database;

LOG_MODE
------------
ARCHIVELOG

  • Force Logging, deve-se habilitar o force logging de acordo com o procedimento a seguir:
SQL> ALTER DATABASE FORCE LOGGING; 
  •  Standby Redologs, este passo é opcional caso estiver configurando um dataguard com protection mode em max performance
alter database add standby logfile '+DG_FRA' size 50m;
  •  Iniciar instancia com spfile, obrigatório para o duplicate.
SQL> show parameter spfile;

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
spfile                     string     /oracle/app/oracle/product/11.
                         2.0.3/db_1/dbs/spfileorcl.ora
  • Password file, deve ser configurado em ambos servidores com a mesma senha
orapwd file=$ORACLE_HOME/dbs/orcl_pwd.ora password=oracle
  • Parametrização, segue os ajustes necessários para configurar o ambiente produtivo
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCLSTBY,ORCL)';
alter system set LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles, all_roles)';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=ORCLSTBY NOAFFIRM ASYNC valid_for=(online_logfile,primary_role) db_unique_name=ORCL';
alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;
alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE;
alter system set FAL_SERVER=ORCLSTBY;
alter system set FAL_CLIENT=ORCL;
  • Oracle Network

Listener

ADR_BASE_LISTENER_ORCL = /oracle/app/oracle

SID_LIST_LISTENER_ORCL =
  (SID_LIST =
    (SID_DESC =
     (GLOBAL_DBNAME = orclstdby)
     (ORACLE_HOME = /oracle/app/oracle/product/11.2.0.3/db_1)
     (SID_NAME = orclstdby)
    )
   )

LISTENER_ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = os-indaia-orcl-stb)(PORT = 1523))
  ) 

Tnsnames

ORCLSTDBY =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = os-indaia-orcl-stb)(PORT = 1523))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCLSTBY)
    )
  )

ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = os-indaia-orcl-prod)(PORT = 1523))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

1.2 Standby Database


  • Password File - Quando ser faz um duplicate from active (o qual irei utilizar), é obrigatório que o password file contenha a mesma senha da produção, portanto uma boa pratica é copia-lo, porém deve ser renomeado da seguinte forma: $ORACLE_HOME/dbs/orapw
 [oracle@os-indaia-orcl-prod dbs]$ scp orcl_pwd.ora oracle@os-indaia-orcl-stb:/oracle/app/oracle/product/11.2.0.3/db_1/dbs

[oracle@os-indaia-orcl-stb dbs]$ cp orcl_pwd.ora orapworclstby

  • Parametrização Standby, Criar o arquivo de inicialização (pfile) configurado para standby
DB_NAME=orclstby
DB_UNIQUE_NAME=orcl
DB_BLOCK_SIZE=8192
remote_login_passwordfile=exclusive
sec_case_sensitive_logon=FALSE

  • Diretórios,  como o rman não criar as estruturas de diretórios é necessário fazer isto manualmente.
  • Configurar arquivos de conexão (tnsnames e listener)
 Listener

ADR_BASE_LISTENER_ORCLSTBY = /oracle/app/oracle

SID_LIST_LISTENER_ORCLSTBY =
  (SID_LIST =
    (SID_DESC =
     (GLOBAL_DBNAME = orclstby)
     (ORACLE_HOME = /oracle/app/oracle/product/11.2.0.3/db_1)
     (SID_NAME = orclstby)
    )
   )

LISTENER_ORCLSTBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = os-indaia-orcl-stb)(PORT = 1523))
  )

Já o tnsnames pode ser utilizado o mesmo da instancia de produção

2. Verificar Conectividade


Realizar o teste em ambos os servidores

sqlplus sys/oracle@orcl as sysdba
sqlplus sys/oracle@orclstby as sysdba

3. Realizar o Duplicate do banco de dados


Pode ser feito tanto atraves do rman quanto de um backup manual , porém o recomendado é sempre RMAN. Com o RMAN temos uma variação enorme de como pode ser feito, no 9i temos que criar o controlfile for standby, já no 10 essa necessidade morreu, e no 11g já temos a possibilidade de fazer o duplicate sem um backup, será este o utilizado neste artigo, porém vou divulgar uma lista com exemplo de possiveis outros duplicates.

rman

connect target sys/oracle@orcl
connect auxiliary sys/oracle@orclstby

run {
allocate channel prmy1 type disk;
allocate auxiliary channel stby type disk;

duplicate target database for standby from active database
spfile
  parameter_value_convert 'orcl','orclstby'
  set db_unique_name='orcl'
  set db_file_name_convert='orcl','orclstby'
  set log_file_name_convert='orcl','orclstby'
  set log_archive_max_processes='5'
  set fal_client='orclstby'
  set fal_server='orcl'
  set standby_file_management='AUTO'
  set log_archive_config='dg_config=(orcl,orclstby)'
  set log_archive_dest_2='service=orcl ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=orcl'
;
}

Ao termino uma mensagem similar a esta deve aparecer indicando o termino com sucesso:

sql statement: alter system archive log current

contents of Memory Script:
{
   switch clone datafile all;
}
executing Memory Script

datafile 1 switched to datafile copy
input datafile copy RECID=1 STAMP=835194950 file name=+DG_DATA/orcl/datafile/system.262.835194755
datafile 2 switched to datafile copy
input datafile copy RECID=2 STAMP=835194951 file name=+DG_DATA/orcl/datafile/sysaux.261.835194859
datafile 3 switched to datafile copy
input datafile copy RECID=3 STAMP=835194951 file name=+DG_DATA/orcl/datafile/undotbs1.260.835194935
datafile 4 switched to datafile copy
input datafile copy RECID=4 STAMP=835194951 file name=+DG_DATA/orcl/datafile/users.259.835194941
datafile 5 switched to datafile copy
input datafile copy RECID=5 STAMP=835194951 file name=+DG_DATA/orcl/datafile/tbs_reorg.263.835194629
Finished Duplicate Db at 26-DEC-13
released channel: prmy1
released channel: stby


4. Iniciar o recover


Antes de iniciar o recover devemos acertar os parametros do standby, pois caso seja feito um failover/switchover o standby tem que ser capaz de atualizar o outro node novamente:

alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCLSTBY,ORCL)';
alter system set LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST, valid_for=(all_logfiles, all_roles)';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=ORCLSTBY NOAFFIRM ASYNC valid_for=(online_logfile,primary_role) db_unique_name=ORCL';
alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;
alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE;
alter system set FAL_SERVER=ORCL;
alter system set FAL_CLIENT=ORCLSTBY;
 

Para iniciar o recover no standby basta usar o comando a seguir:

SQL> alter database recover managed standby database disconnect from session;

Database altered.

 Próximo Passo: Dataguard - Parte 3 - Criando o Dataguard Broker

sexta-feira, 1 de novembro de 2013

Dataguard - Parte 1 - Infra-estrutura

Boa noite caros DBAS!

Tenho tido otimas experiencias com Standby Database e Dataguard, portanto quero iniciar um ciclo de artigos somente falando sobre Oracle Dataguard, apresentar alguns how-tos e oferecer alguns exemplos, espero que este seja o primeiro post de muitos (Caso eu tenha tempo para continuar ;) ). Nele quero demonstrar toda parametrização necessária para se criar um standby, é nesta etapa (planejando), a qual devemos ter maior atenção pois acredito que o resto flua conforme a primeira nota.

Para este ambiente estou utilizando duas Virtuais machines em um ambiente de lab em minha casa (não facam em produção sem antes um bom estudo), são dois redhat (oracle linux), preparados para recever qualquer instalação do Oracle, rodando Grid/ASM/Database.

OBS - O intuito destes posts não é demonstrar nenhum produto além do Dataguard, portanto instalação do Oracle e grid é um assunto a parte.

Proximo Passo: Dataguard - Part 2 - Criando o Standby Database

-->
ParametroProducaoStandby
Hostnameos-indaia-orcl-prodos-indaia-orcl-stb
ip192.168.1.61192.168.1.62
SOOracle Linux 5.7Oracle Linux 5.7
Oracle Version11.2.0.311.2.0.3
DB Nameorclorcl
Instance nameorclorclstby
db_unique_nameorclorclstby
service_nameorclorclstby
Listener Namelistener_orcllistener_orclstby
Listener Port15231523
Archive modeArchivelogArchivelog
Force LoggingYesYes
FalCliorclorclstby
FalServerorclstdbyorcl
log_archive_configdg_config=(ORCL,ORCLSTBY)'dg_config=(ORCL,ORCLSTBY)'
standby_file_managementautoauto
log_archive_dest_1location=USE_DB_RECOVERY_FILE_DEST valid_for=(ALL_LOGFILES, ALL_ROLES)location=USE_DB_RECOVERY_FILE_DEST valid_for=(ALL_LOGFILES, ALL_ROLES)
log_archive_dest_2service=orclstby NOAFFIRM ASYNC valid_for=(online_logfile,primary_role) db_unique_name=orclservice=orcl NOAFFIRM ASYNC valid_for=(online_logfile,primary_role) db_unique_name=orcl
log_archive_dest_state_1enableenable
log_archive_dest_state_2enableenable
LOG_ARCHIVE_MAX_PROCESSES3030
REMOTE_LOGIN_PASSWORDFILEexclusiveexclusive


sexta-feira, 26 de julho de 2013

Oracle 11.2 PSU Patch GI + RDBMS - Auto

Aplicando um patch psu em ambiente com Oracle Infrastructure, GI Standalone com Oracle RDBMS através do opatchauto.

O opatch auto autonomiza a aplicação completa do Patch para todo ambiente, seja GI, RAC e RDBMS. Deve ser criado um response file e o executado através do root. A aplicação de patchs em ambientes com tais caracteristicas podem ser realizadas manualmente e por etapas, porém acredito que devam ser realizadas com bastante cautela por algum DBA com experiencia e conhecimento suficientes, pois o procedimento deve ser seguido a risca senão o patch irá falhar, a seguir há uma imagem do workflow feito pelo opatch auto tirada do manual da Oracle Opatch Auto Workflow.

Ambiente


SO Version: Oracle Linux 4.7
Oracle Version: Oracle 11.2.0.3
Grid OS Owner: grid
RDBMS OS Owner: oracle
RDBMS BASE: /oracle/app/oracle
RDBMS HOME: /oracle/app/oracle/product/11.2.0.3/db_1
GI BASE: /grid/app/grid
GI HOME: /grid/app/11.2.0.3/grid
Instances: +ASM , orcl

Pre-Requisitos

Opatch Version
Validar segundo documento do patch qual a versão minima do Opatch requerida

$ /OPatch/opatch version
 

Validar o Invetário Conforme Home

$ /OPatch/opatch lsinventory -oh

Download e extração do Pacote do Patch

Patch deve ser acessivel ao grupo de instalação do Oracle e não deve estar contido no /tmp.

Configurar um response file

Parar os serviços do Agent do Enterprise manager:

$ORACLE_HOME/bin/emctl stop dbconsole

Configurar um response file

Atividade obrigatória para realizar a instalação do Patch, durante a instalação do patch será questionado sobre o OCM ( Oracle Configuration Manager ), o qual devido a instalação em silent mode deve estar contido no response file.
A seguir estou configurando o response file para não configuração do OCM, a primeira pergunta não informo e-mail e dou enter, e confirmo novamente.

[grid@os-indaia-orcl-prod ~]$ $ORACLE_HOME/OPatch/ocm/bin/emocmrsp -no_banner -output $ORACLE_HOME/config.rsp
Provide your email address to be informed of security issues, install and
initiate Oracle Configuration Manager. Easier for you if you use your My
Oracle Support Email address/User Name.
Visit http://www.oracle.com/support/policies.html for details.
Email address/User Name:

You have not provided an email address for notification of security issues.
Do you wish to remain uninformed of security issues ([Y]es, [N]o) [N]:  y
The OCM configuration response file (/grid/app/11.2.0.3/grid/config.rsp) was successfully created.
 

Boas Praticas

  • Garantir um backup Full da base de dados.
  • Garantir um backup da instalaçao dos binarios do Oracle.
  • Garantir um backup do inventário.
  • Verificar os conflitos entre os patchs existente com o novo Pacote. 
  • Guardar informações do banco de dados relacionados a pacotes antigos , e componentes .
  • Lista de objetos invalidos.
  • Lista de indices invalidos.
  • Garantir espaço livre no home do Oracle para aplicação do Patch. 

 Instalando

Para esta instalação estaremos aplicando o patch em ambos produtos, GI e RDBMS simultaneamente, fora o stop do EM Agent não será necessário parar mais nenhum serviço, o opatch auto irá cuidar de todo o processo.

# opatch auto -ocmft

[root@os-indaia-orcl-prod /]# /grid/app/11.2.0.3/grid/OPatch/opatch auto /oracle_patch -ocmrf /grid/app/11.2.0.3/grid/config.rsp

Executing /grid/app/11.2.0.3/grid/perl/bin/perl /grid/app/11.2.0.3/grid/OPatch/crs/patch11203.pl -patchdir / -patchn oracle_patch -ocmrf /grid/app/11.2.0.3/grid/config.rsp -paramfile /grid/app/11.2.0.3/grid/crs/install/crsconfig_params

/grid/app/11.2.0.3/grid/crs/install/crsconfig_params
/grid/app/11.2.0.3/grid/crs/install/s_crsconfig_defs

This is the main log file: /grid/app/11.2.0.3/grid/cfgtoollogs/opatchauto2013-07-26_22-46-53.log
This file will show your detected configuration and all the steps that opatchauto attempted to do on your system: /grid/app/11.2.0.3/grid/cfgtoollogs/opatchauto2013-07-26_22-46-53.report.log

2013-07-26 22:46:53: Starting Oracle Restart Patch Setup

Using configuration parameter file: /grid/app/11.2.0.3/grid/crs/install/crsconfig_params

patch //oracle_patch/16619898/custom/server/16619898  apply successful for home  /oracle/app/oracle/product/11.2.0.3/db_1
patch //oracle_patch/16619892  apply successful for home  /oracle/app/oracle/product/11.2.0.3/db_1

Successfully unlock /grid/app/11.2.0.3/grid

patch //oracle_patch/16619898  apply successful for home  /grid/app/11.2.0.3/grid
patch //oracle_patch/16619892  apply successful for home  /grid/app/11.2.0.3/grid

CRS-4123: Oracle High Availability Services has been started.
Failed to start resources from  database home /oracle/app/oracle/product/11.2.0.3/db_1


No meu caso ocorreu erro para iniciar o banco de dados, este passo fiz manualmente com o sqlplus.

Post Installation

Após iniciado o ou os bancos de dados, seguir com esta passo para todas os DBs:


[oracle@os-indaia-orcl-prod admin]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.3.0 Production on Fri Jul 26 23:34:58 2013

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

SQL> connect / as sysdba
Connected.

SQL> @catbundle_PSU_ORCL_APPLY.sql
...
...
...
SQL> SPOOL off
SQL> SET echo off
Check the following log file for errors:
/oracle/app/oracle/cfgtoollogs/catbundle/catbundle_PSU_ORCL_APPLY_2013Jul26_23_35_44.log


Como melhores praticas sempre executo um @?/rdbms/admin/utlrp.sql e um stop/start de cada instancia antes de liberar o ambiente, mas fica a critério, depende de cada patch.

Validação

Para confirmar que a instalação foi com sucesso, vamos verificar o dicionário e os binários:

select action_time, version, COMMENTS, BUNDLE_SERIES
from registry$history;

ACTION_TIME             VERSION        COMMENTS         BUNDLE_SERIES
---------------------------- -------------- -------------------- --------------
18-SEP-11 06.02.59.465921 PM 11.2.0.3        Patchset 11.2.0.2.0  PSU
01-JUN-13 07.10.20.940999 PM 11.2.0.3        Patchset 11.2.0.2.0  PSU
26-JUL-13 11.35.45.217246 PM 11.2.0.3        Patchset 11.2.0.2.0  PSU


$ opatch lsinventory -bugs_fixed

O que irá retornar muitas moleculas portanto deixo de fora.

Concluindo, a aplicação de um patch completa executado pelo opatch auto ficou muito simples, para quem já passou pelos patchs de 8i ou até mesmo 9i vai se surpreender quando se deparar com uma situação dessa, futuramente quero demonstrar esse mesmo patch porém um pouco mais complexo onde iremos exeutar manualmente os steps do opatch auto.

Por favor não deixe de me corrigir ou comentar caso tenha alguma falha no artigo.

Abraços.

domingo, 21 de julho de 2013

Linux - Logical Partitions

Introduction

LVM is used to create logical partition that can span data between multiple physical hard disks. Online LV and VG resizing, raid volumes, mirror and strip are some features of LVM. A well documentation about LVM can be find in Logical Volume Manager (Linux) .

Architecture

The follow image describe very well what is the relationship between LVM components.
- Physical driver are divided into Partitions.
- Physical Volumes are made from Partitions.
- Volumes Groups contains Partitions.
- Volumes Groups are divided into Logical Volumes.
- And Logical Volumes are base to File Systems.



Implementing

 

Verify if lvm2 is install  

[root@os-indaia-12c ~]# yum list lvm2
Loaded plugins: refresh-packagekit, security
Installed Packages
lvm2.x86_64                                                2.02.98-9.el6                                                 @anaconda-OracleLinuxServer-201302251503.x86_64/6.4

Listing Physical Drivers

Use fdisk -l to list the Psysical Drivers available to use. (the command bellow is truncated).

[root@os-indaia-12c yum.repos.d]# fdisk -l

Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


Disk /dev/sdc: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Creating Partitions

Use fdisk to create a disk partition.
[root@os-indaia-12c yum.repos.d]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xd968e05e.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1044, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044):
Using default value 1044

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Create Physical Volumes

Use pvcreate to create physical volumes. This will associate the physical partition we made before to a Psysical Volume.
[root@os-indaia-12c yum.repos.d]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
[root@os-indaia-12c yum.repos.d]# pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created

Listing Physical Volumes

We can verify the pvs created with pvdisplay

[root@os-indaia-12c ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               oracle_vg
  PV Size               8.00 GiB / not usable 1.35 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              2047
  Free PE               0
  Allocated PE          2047
  PV UUID               QK3nS5-ZREV-na8F-jZIw-06Ph-PJxD-pZsv1N
  
  --- Physical volume ---
  PV Name               /dev/sdc1
  VG Name               oracle_vg
  PV Size               8.00 GiB / not usable 1.35 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              2047
  Free PE               1022
  Allocated PE          1025
  PV UUID               pQz7Kq-Wbwy-GaPc-FbBr-hzvd-C6eq-m9bfEB

  

Create the Volume Group

We can use vgcreate to create the volume group. A single volume group can contain one or more physical volume. The command bellow creates a VG called oracle_vg with two physical volumes /dev/sdb1 and /dev/sdc1.
[root@os-indaia-12c yum.repos.d]# vgcreate  oracle_vg /dev/sdb1 /dev/sdc1
  Volume group "oracle_vg" successfully created

 Listing VG

 The vgdisplay can be used to list all VG and VG attributes in OS.
[root@os-indaia-12c yum.repos.d]# vgdisplay
  --- Volume group ---
  VG Name               oracle_vg
  System ID            
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               15.99 GiB
  PE Size               4.00 MiB
  Total PE              4094
  Alloc PE / Size       0 / 0  
  Free  PE / Size       4094 / 15.99 GiB
  VG UUID               gKwhC0-kriN-dkbH-7sjp-NPGm-d8u1-age5VN

Creating Logical Volume

The follow command (lvcreate) can be used to create a LV called ora_home_lv with 12G.
[root@os-indaia-12c yum.repos.d]# lvcreate -n ora_home_lv   --size 12G oracle_vg
  Logical volume "ora_home_lv" created

Listing LVs

[root@os-indaia-12c ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/oracle_vg/ora_home_lv
  LV Name                ora_home_lv
  VG Name                oracle_vg
  LV UUID                fTUjS3-V3P7-cwNi-qnQS-3j0R-AmhZ-fQJ9z6
  LV Write Access        read/write
  LV Creation host, time os-indaia-12c, 2013-07-21 15:38:54 -0300
  LV Status              available
  # open                 1
  LV Size                12.00 GiB
  Current LE             3072
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:2

Formating

[root@os-indaia-12c yum.repos.d]# mkfs.ext3 /dev/oracle_vg/ora_home_lv
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
786432 inodes, 3145728 blocks
157286 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=3221225472
96 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Writing inode tables: done                           
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

Mounting the File System

[root@os-indaia-12c yum.repos.d]# mkdir /u01 && mount -t ext3 /dev/oracle_vg/ra_home_lv /u01
[root@os-indaia-12c yum.repos.d]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/root_vg-lv_root
                       12G  8.4G  2.6G  77% /
tmpfs                 2.0G  304K  2.0G   1% /dev/shm
/dev/sda1             485M  101M  359M  22% /boot
/dev/sr0               55M   55M     0 100% /media/VBOXADDITIONS_4.2.10_84104
/dev/mapper/oracle_vg-ora_home_lv
                       12G  159M   12G   2% /u01
[root@os-indaia-12c yum.repos.d]#

And Finally add the follow line to the /etc/fstab to make the moint point available after any boot:

/dev/oracle_vg/ora_home_lv /u01                 ext3    defaults        0 0

Sources:

http://linuxconfig.org/linux-lvm-logical-volume-manager
http://www.howtoforge.com/linux_lvm