quinta-feira, 12 de janeiro de 2017

CRIANDO BANCO DE DADOS E DEREPENTE ORA-00058!!!

Olá, sejam todos bem vindos. 

Hoje iremos tratar algo que aparentemente é bem trivial, mas para os que iniciam nos seus laboratórios e que não possuem acesso ao suporte Oracle para ter respaldo, podem muitas vezes se deparar com situações frustrantes como essa. Vamos lá?!?

O CENÁRIO

Bem, utilizamos diversas formas para simular esse erro, minha recomendação se o quiser fazer é  essa :

Máquina Virtual usada para simulação.

  • S.O : Oracle Enterprise Linux 7.3
  • Discos: 1 de 50GB para Instalação do Sistema
  • Discos: 1 de 30GB para armazenamento Formatado à 16KB ( BTRFS)
Muito simples o ambiente criada sua VM prossiga com as instalações do sistema operacional e banco.

A SIMULAÇÃO

Na tentativa de reproduzir o erro eu obviamente, tive que proceder com uma criação de banco de dados usando a GUI do DBCA, como irei mostrar abaixo nas imagens.

Obs.: Se você é do tipo caxias que não usa interface gráfica para nada, ótimo isso é muito bom para seu aprendizado e não ficar refém de ambientes com X11, mas se você se sente mas á vontade usando graficos, tudo bem também, isso é uma opção pessoal de cada um. Deve-se claro aprender a fazer dos dois modos, porém fique livre para escolher o que melhor lhe favorece, não tome como verdade a preferencia dos outros.













Até aqui sem novidades correto? Um processo normal de criação de uma nova base de dados, baseada no template Oracle da opção "GENERAL PURPOSE", um padrão adotado pela maioria e que se customiza ao gosto e definições que cada um tiver em mãos.

O ERRO

Chegamos ao ponto, seguindo este mesmo processo, porém no momento em que se vai definir o armazenamento e a blocagem do banco, nós simplesmente alteramos isso para DB_BLOCK_SIZE=16kb e o armazenamento em /u02/oradata ( disco formatado á 16kb ), vejam o que ocorre:







BINGO! nosso vilão se apresenta. Porque isso ocorre? Bem se você puder pesquisar na internet, falar com amigos mais experientes que já passaram por isso, serão unanimes em dizer : IGNORE ISSO, E RECRIE O BANCO MANUALMENTE. Opa! espere um momento, isso justifica mas não explica. Na realidade esse erro se deve ao fato da base usada como template padrão pelo instalador, que quando usamos o template de new databases baseado no GENERAL PURPOSE na terceira coluna pode-se notar uma opção chamada "INCLUDE DATAFILES = YES".

Estes datafiles por sua vez, já estão pré-formatados á 8KB e se você prestar atenção não é dado a opção de mudar o blocksize do banco nas customizações normais na aba SIZING do instalador, exceto quando solicitamos a customização dos parametros de inicialização já ao final de toda a nossa parametrização, e como todos devem saber o instalador usa RMAN para restaurar esses arquivos, e quando ele encontra essa divergência entre as blocagens , eis que se apresenta nosso erro.

Não confundam isso tudo com conversão de banco que envolve um cenário totalmente apartado e diferente, com uma dinâmica mais refinada.

Contudo podemos consultar uma nota do MOS que nos dá um direcionamento quanto a esse erro que estamos tratando aqui, segue o número da nota :


Adianto á vocês que isso afeta todas plataformas, tanto Windows quanto Linux.

COMO CORRIGIR?

Bom, uma vez que identificamos nosso inimigo e o conhecemos melhor, percebe-se que se trata mais de um WARNING do que propriamente um erro de fato. O contorno para isso é apenas uma mudança na opção de escolha no momento da criação do banco de dados veja :

Abortem a criação com erro, voltem até a tela onde tem as opções de templates e escolharm a opção de CUSTOM DATABASE onde na terceira coluna INCLUDE DATAFILES a opção está como "NO" . Isso porque quem fará a criação é o próprio instalador sem se basear em nenhum tipo de pré-configuração
 Prossigam então com as parametrizações que julgarem necessárias, e quando se depararem com essa tela ao lado no SIZING definam para 16KB sua blocagem, sigam com as demais customizações e finalizem em Ok.

Note que na figura acima já temos nosso banco em pleno vapor de criação, basta aguardar sua finalização e sucesso, temos nosso banco criado com tablespaces á 16KB em discos formatados há 16KB.

PORQUE EU DEVERIA FAZER ISSO?

Esse tipo de customização é de fato rarissima, e deve ser muito bem embasada com evidencias concretas de que a perda de performance do banco está intimamente ligada ao nível de leituras e Block Gets, Physical Reads e etc do seu Banco, tudo isso atráves do DIAGNOSTIC TUNNING PACK ( AWR, ADDM e ASH) é possível de ser obtido. Caso não haja nenhum tipo de evidencia de contenção, wait ou leituras muito longas por conta de arquitetura de discos, vão pelo padrão sempre.

Obrigado á todos pela atenção. Nos veremos em breve.

SUCESSO SEMPRE!!!

terça-feira, 10 de janeiro de 2017

O QUE FAZER QUANDO USAMOS O AWR SEM LICENÇA?

Olá como estão todos? 

Bem, eu me deparei recentemente com uma situação um tanto quanto comum, contudo bastante inquietante. Trata-se de uso de uma feature de banco de dados, onde o cliente não possui a modalidade de licenciamento adequado, o time técnico não possuia tal informação e para complicar ainda mais, a parte de gestão afirmou ser licenciado. 

Todavia vale lembrar que, nós como técnicos no momento da criação de novos ambientes, sempre que possível é claro, devemos ter em mãos todo e qualquer tipo de informação a cerca de customizações e parametrizações especificas a serem utilizadas durante o processo.

O CENÁRIO

Falando um pouco mais sobre o ambiente, não era de alta complexidade, sua volumetria era pouco mais de 60GB, relativamente pequeno se comparado a grandes massas de dados de outros ambientes OLTP.

O versionamento usado era o atual Oracle Database 12c R1, sem multitenant, ainda usando arquitetura nos moldes 11g, sistema operacional MSWindows Server 2008 e Discos oriundos de um Storage.

O AWR

Trocando em míudos trata-se de uma ferramenta de apoio aos diagnósticos quanto a saúde do banco de dados Oracle, juntamente com outras ferramentas de igual importancia, formam o famoso DIAGNOSTIC TUNNING PACK, uma feature licenciada para bancos de dados Oracle mais precisamente. Seu uso é através de relatórios de apresentação de informações quanto aos principais setores do banco de dados ( memória, disco e consultas), com um repositório próprio o AWR coleta os seus SNAP IDs de tempos em tempos ( de 1 em 1 hora por padrão) e guarda-os em uma BaseLine, onde podem serem consultados sempre que necessário for ou solicitado pelo time de desenvolvimento ou ainda por razões de verificação de problemas com performance de aplicativos armazenados em banco de dados e etc.

O LICENCIAMENTO

Como trata-se de uma fatia do Diagnostic Tuning Pack, óbviamente que há um valor para tal, atualmente é algo em torno de U$ 7.500,00 ( por processador) , ha também as formas por usuário nomeados e para Upgrades, todos os valores podem ser consultados no link abaixo, mas fale com seu contato comercial para certificar-se desses valores mais atualizados :

Licenciamento Oracle

O PROBLEMA

Quando estamos falando de um ambiente novo, onde ainda não temos nenhum tipo de informação nem tão pouco aplicações plugadas ao banco de dados, fica mais fácil de manter o controle dessas features e seus usos, porém quando já temos algo gerando workloads em nosso ambiente, tudo se torna mais complexo. Eis então que me veio a pergunta : É possível eliminar qualquer vestigio de uso do AWR do banco de dados, uma vez que sabemos não ter licença de concessão do seu uso?

A resposta veio em forma de pesadelo, ou seja, NÃO, não é possível faze-lo, para tal atividade precisamos reconstruir toda a base de dados, e não há nenhum vestigio no MOS ou em nenhum lugar que oficialmente dê subsidios ou uma receita de bolo para limpar completamente qualquer resquicio de presença do AWR.

Tudo isso se deve por razões óbvias, que se resumem em uma palavra "COMÉRCIO", uma vez que você usou a feature para melhorar o desempenho de seu aplicativo, sabendo que a mesma é paga e ainda assim gostaria de não paga-la, em uma possível auditoria a oracle fatalmente irá pegar essa informação, como? Através das VIEWS de banco de dados, eis o nome do nosso "algoz" :

DBA_FEATURE_USAGE_STATISTICS

DBA_FEATURE_USAGE_STATISTICS displays information about database feature usage statistics.
ColumnDatatypeNULLDescription
DBIDNUMBERNOT NULLDatabase identifier of the database being tracked
NAMEVARCHAR2(64)NOT NULLName of the feature (See Table 4-1)
VERSIONVARCHAR2(17)NOT NULLDatabase version in which the feature was tracked
DETECTED_USAGESNUMBERNOT NULLNumber of times the system has detected usage for the feature
TOTAL_SAMPLESNUMBERNOT NULLNumber of times the system has woken up and checked for feature usage
CURRENTLY_USEDVARCHAR2(5) Indicates whether usage was detected the last time the system checked (TRUE) or not (FALSE)
FIRST_USAGE_DATEDATE First sample time the system detected usage of the feature
LAST_USAGE_DATEDATE Last sample time the system detected usage of the feature
AUX_COUNTNUMBER This column stores feature-specific usage data in number format.
FEATURE_INFOCLOB This column stores feature-specific usage data in character format.
LAST_SAMPLE_DATEDATE Amount of time (in seconds) between the last two usage sample times
LAST_SAMPLE_PERIODNUMBER Amount of time (in hours) between the last two usage sample times
SAMPLE_INTERVALNUMBER Sample interval
DESCRIPTIONVARCHAR2(128) Description of the feature and usage detection logic (See Table 4-1)
Table 4-1 DBA_FEATURE_USAGE_STATISTICS Statistics
NameDescription
Advanced Replication
Advanced Replication has been enabled.
Advanced Security
External Global users are configured.
Audit Options
Audit options in use.
Automatic Database Diagnostic Monitor
A task for the Automatic Database Diagnostic Monitor has been executed.
Automatic Segment Space Management (system)
Extents of locally managed tablespaces are managed automatically by Oracle.
Automatic Segment Space Management (user)
Extents of locally managed user tablespaces are managed automatically by Oracle.
Automatic SQL Execution Memory
Sizing of work areas for all dedicated sessions (PGA) is automatic.
Automatic Storage Manager
Automatic Storage Management has been enabled
Automatic Undo Management
Oracle automatically manages undo data using an UNDO tablespace.
Automatic Workload Repository
A manual Automatic Workload Repository (AWR) snapshot was taken in the last sample period.
Change-Aware Incremental Backup
Track blocks that have changed in the database.
Client Identifier
Application User Proxy Authentication: Client Identifier is used at this specific time.
Data Guard
Data Guard, a set of services, is being used to create, maintain, manage, and monitor one or more standby databases.
Data Guard Broker
Data Guard Broker, the framework that handles the creation maintenance, and monitoring of Data Guard, is being used
Data Mining
Oracle Data Mining option is being used.
Dynamic SGA
The Oracle SGA has been dynamically resized through an ALTER SYSTEM SET statement.
File Mapping
File Mapping, the mechanism that shows a complete mapping of a file to logical volumes and physical devices, is being used.
Flashback Database
Flashback Database, a rewind button for the database, is enabled
Internode Parallel Execution
Internode Parallel Execution is being used.
Label Security
Oracle Label Security, that enables label-based access control Oracle applications, is being used.
Locally Managed Tablespaces (system)
There exists tablespaces that are locally managed in the database.
Locally Managed Tablespaces (user)
There exists user tablespaces that are locally managed in the database.
Messaging Gateway
Messaging Gateway, that enables communication between non-Oracle messaging systems and Advanced Queuing (AQ), link configured.
MTTR Advisor
Mean Time to Recover Advisor is enabled.
Multiple Block Sizes
Multiple Block Sizes are being used with this database.
OLAP - Analytic Workspaces
OLAP - the analytic workspaces stored in the database.
OLAP - Cubes
OLAP - number of cubes in the OLAP catalog that are fully mapped and accessible by the OLAP API.
Oracle Managed Files
Database files are being managed by Oracle.
Parallel SQL DDL Execution
Parallel SQL DDL Execution is being used.
Parallel SQL DML Execution
Parallel SQL DML Execution is being used.
Parallel SQL Query Execution
Parallel SQL Query Execution is being used.
Partitioning (system)
Oracle Partitioning option is being used - there is at least one partitioned object created.
Partitioning (user)
Oracle Partitioning option is being used - there is at least one user partitioned object created.
PL/SQL Native Compilation
PL/SQL Native Compilation is being used - there is at least one natively compiled PL/SQL library unit in the database.
Protection Mode - Maximum Availability
Data Guard configuration data protection mode is Maximum Availability.
Protection Mode - Maximum Performance
Data Guard configuration data protection mode is Maximum Performance.
Protection Mode - Maximum Protection
Data Guard configuration data protection mode is Maximum Protection.
Protection Mode - Unprotected
Data Guard configuration data protection mode is Unprotected.
Real Application Clusters (RAC)
Real Application Clusters (RAC) is configured.
Recovery Area
The recovery area is configured.
Recovery Manager (RMAN)
Recovery Manager (RMAN) is being used to backup the database.
RMAN - Disk Backup
Recovery Manager (RMAN) is being used to backup the database to disk.
RMAN - Tape Backup
Recovery Manager (RMAN) is being used to backup the database to tape.
Resource Manager
Oracle Database Resource Manager is being used to control database resources.
Segment Advisor
A task for Segment Advisor has been executed.
Server Parameter File
The server parameter file (SPFILE) was used to startup the database.
SGA/Memory Advisor
SGA/Memory Advisor has been used.
Shared Server
The database is configured as Shared Server, where the server process can service multiple user processes.
Spatial
There is at least one usage of the Oracle Spatial index metadata table.
SQL Access Advisor
A task for SQL Access Advisor has been executed.
SQL Tuning Advisor
SQL Tuning Advisor has been used.
SQL Tuning Set
A SQL Tuning Set has been created in the database.
Standby Archival - LGWR
Data Guard configuration: Remote archival is done by LGWR.
Standby Archival - ARCH
Data Guard configuration: Remote archival is done by ARCH.
Standby Transmission
Standby database: Network transmission mode was chosen for a standby destination.
Streams (system)
Oracle Streams has been configured
Streams (user)
Users have configured Oracle Streams
Tablespace Advisor
Tablespace Advisor has been used.
Transparent Gateway
Heterogeneous Connectivity, access to a non-Oracle system, has been configured.
Undo Advisor
Undo Advisor has been used.
Virtual Private Database (VPD)
Virtual Private Database (VPD) policies are being used.


Esta view acima traz todas as vezes e quantas delas você usou determinada feature no banco de daos, esteja ela licenciada ou não. Um ponto importante é que, a Oracle durante o processo de instalação não impede que você use nenhum dos recursos contidos no tipo de instalação que você esta fazendo, este nível de refinamento quanto ao que pode ou não pode, fica por conta de cada técnico responsável, desde que é claro tenha acesso a essas informações momentos antes de criar o novo ambiente, gerando assim nenhum ou o minimo de riscos possíveis ao negócio.

AS POSSIBILIDADES ANALISADAS

Diante do exposto, se pensarmos um pouco temos muito poucas opções a nosso favor, pelo menos eu só consegui pensar nessas no momento :


  1. recriar o control file do banco - FAIL
  2. fazer um restore via RMAN do Banco - FAIL
  3. re-executar o catalog e catproc - FAIL
  4. reconstruir o banco de dados e reimportar os dados - SUCCESS
As opções acima citadas que falharam, se analisarmos friamente, realmente não surtiriam muito efeito, uma vez que a hierarquia das visões de banco de dados respeitam uma origem dos dados, onde as tabelas bases de todas as informações contidas no dicionário de dados ( X$, $% e etc) são o que alimentam todas as outras ( V$,V_$,DBA_,ALL_  e USERS_).

E essas opções não modificam essas informações base, o que não nos ajuda, no metalink ou My Oracle Support para os mais jovens, temos uma nota que nos remete ao entendimento de como funciona essa dinâmica de detectar esse uso, vou deixar aqui abaixo o link para a DocID :


O PLANO B

Nem tudo está perdido, a Oracle contudo não removeu de seu core de aplicações o antigo porém funcional STATSPACK, que pode ser usado no lugar do AWR para os não licenciados, este ainda não requer nenhum tipo de modalidade especifica de licença para concessão de uso, e pode sim ajudar no diagnostico de problemas com o banco de dados. 

O Statspack não contém todos os mesmos recursos do AWR, mas auxilia na compreensão de planos de acessos e etc se utilizado com outras ferramentas em conjunto como TKPROF, utilitarios mais na linha "OLD SCHOOL".

Caso queiram e tenham interesse em compreender melhor a extensão do auxilio prestado pelo statspack, sugiro uma leitura rápida da doc abaixo :


CONCLUSÃO

Se você por um acaso se deparar com essas situações, lembre-se de analisar friamente o que é melhor para seu ambiente, no meu caso era pequeno, mais vocês podem ter bases de Teras e mais Terabytes em questão, o que inviabilizaria o uso desse mesmo método. 

E sempre vejam primeiramente a possibilidade de licenciamento, para os empresários e gestores que não entendem o "tecnes oracoles" você precisa justificar em cifras ( $$$ ), é preciso que eles compreendam a tênue relação chamada CUSTO/BENEFICIO, uma vez bem documentado e embasado tecnicamente os "por quês", não creio que terão problemas em conseguir o tão sonhado licenciamento das ferramentas de diagnóstico que ajudam não somente o DBA, mas desenvolvedores, aplicações e consequentemente os lucros da empresa.


Obrigado pela atenção, deixem seus comentários que prometo responde-los. Um abraço á todos.

SUCESSO SEMPRE!!!