domingo, 9 de setembro de 2018

Realizando uma instalação remota do Oracle Linux 7.4 com VNC


Muitas vezes é necessário que uma instalação seja realizada de forma remota, seja por questão de custo, agilidade ou mesmo praticidade. 

Porém quando essa necessidade de instalação remota é justamento do Sistema Operacional, como podemos fazer para realizar a instalação de forma remota?

O Oracle Linux, assim como muitas outras distribuições Linux, possuí uma opção para que a instalação do SO seja realizada através de uma conexão VNC. Permitindo assim a possibilidade de uma instalação remota do mesmo.

Neste artigo estaremos usando a mídia de instalação tradicional para versão 7.4 do Oracle Linux (baixada pelo Oracle Software Delivery Cloud), uma máquina virtual criada através do virtual box e um client VNC para o acesso remoto.

O primeiro passo é realizar o boot com o DVD de instalação do Oracle Linux. Para isso você precisará da ajuda de alguém que esteja in loco, para colocar o DVD e configurar a ordem de boot do servidor.

Após dar o boot no DVD do Oracle Linux, na primeira tela  (tela de instalação) deverá ser pressionada a  tecla ESC, para mudar para o prompt de comando.
Assim que abrir o prompt de comando, deverá ser digitado o comando linux vnc e pressionada a tecla Enter. Desta forma serão carregados os processos para instalação remota através de uma conexão VNC específica para a instalação do SO.
Após digitar linux vnc as variáveis serão carregadas e aparecerá o IP e porta para conexão VNC.
Para voltar ao prompt basta utilizar as teclas alt+tab . Assim podemos por exemplo, confirmar o IP que foi assumido basta digitar ipconfig.
Como pode ser visto, o IP assumido foi 192.168.2.111 e o vnc para instalação foi iniciado na porta 1 (padrão).
Com um VNC cliente, podemos conectar na parte gráfica para realizar a instalação.


Desta etapa em diante os processos de instalação são os mesmos de uma instalação local.



segunda-feira, 3 de setembro de 2018

Erro na coleta de estatística devido a corrupção lógica de dados - (ORA-07445 [evadmp()+686] [SIGSEGV] [ADDR:0x0])


Durante a coleta de estatística do ambiente, identificamos que o processo estava sendo abortado depois de algumas horas em execução.

Na sessão que estava sendo executada tínhamos apenas o erro de que conexão havia sido abortada e os erros abaixo eram gravados no alertlog.

  • Erro da sessão:
SQL> execute dbms_stats.gather_table_stats(ownname=>'OWNER',tabname=>'CONFIGURACOES');
BEGIN dbms_stats.gather_table_stats(ownname=>'OWNER',tabname=>'CONFIGURACOES'); END;

*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 7736
Session ID: 7 Serial number: 26973

  • Principais erros gravados no alertlog ao executar a coleta de estatística da tabela em questão:
ORA-00600: internal error code, arguments: [kghrcdepth:ds], [0x7F14B30E2008], [], [], [], [], [], [], [], [], [], []
ORA-07445: exception encountered: core dump [kgherrordmp()+986] [SIGSEGV] [ADDR:0x0] [PC:0x7B545D0] [Address not mapped to object] []
ORA-00600: internal error code, arguments: [17114], [0x7F14B30E0FC8], [], [], [], [], [], [], [], [], [], []
ORA-00600: internal error code, arguments: [qksanAnalyzeSql:xsc2], [0x7FFF06094BB8], [0x7F14B30A9148], [], [], [], [], [], [], [], [], []
ORA-06512: at "SYS.DBMS_STATS", line 24232
ORA-06512: at "SYS.DBMS_STATS", line 24332
ORA-06512: at line 1
ORA-07445: exception encountered: core dump [evadmp()+686] [SIGSEGV] [ADDR:0x0] [PC:0x200611A] [SI_KERNEL(general_protection)] []

Este erro ocorre devido a existência de colunas com dados que possuam mais caracteres do que o limite da coluna. Por exemplo uma coluna com 40 caracteres, sendo que o campo esta definido com varchar2(30).

A Oracle disponibiliza um script para validação de dados corrompidos a nível de coluna, através da Doc ID 428526.1. Também estou disponibilizando o mesmo através do link a seguir: baddata.sql.

Para executa-lo precisaremos de acesso com o owner SYS.
SQL> show user;
USER is "SYS"
SQL>

SQL> @baddata.sql

Package body dropped.


Package dropped.


PL/SQL procedure successfully completed.


Table created.


Index created.


0 rows deleted.


1 row created.


1 row created.


1 row created.


1 row created.


1 row created.


1 row created.


1 row created.


Commit complete.


Package created.


Package body created.

-- Object SCOTT.EMP not found !!!

PL/SQL procedure successfully completed.

SQL>
Após criada a estrutura com a execução do script baddata.sql, será realizada a verificação através da package BADDATA.
Esta package possuí opção para validação do banco inteiro, de um schema inteiro ou de uma tabela. Ainda é possível através da opção dochars ignorar a validação de campos CHAR/VARCHAR2, definindo o valor da mesma para false.

Para validação do banco inteiro, usamos:  BadData.CheckDB( DoChars=>TRUE ); -- Apenas lembrando que esta opção poderá demorar bastante, uma vez que fará uma validação de todas tabelas do banco.

Para validação de um schema específico, usamos: BadData.CheckSchema('SCHEMANAME', DoChars=>TRUE);.

E para validação de uma tabela específica: BadData.CheckObject('SCHEMANAME','TABLENAME',DoChars=>TRUE);.

Abaixo será demonstrada a execução para uma tabela específica.
SQL> show user;
USER is "SYS"
SQL> spool mybaddata.log
SQL> execute dbms_output.enable(1000000);

PL/SQL procedure successfully completed.

SQL> set serveroutput on;
SQL> begin
        BadData.CheckObject('OWNER','CONFIGURACOES',DoChars=>TRUE);
end;
/  2    3    4
REM OWNER.CONFIGURACOES has 9 suspect rows
rem Column DT_SYNCRO_ has 9 Bad DATE
REM
REM Use this SQL to see the bad row/s:
SELECT TAB.rowid
,dump("CONFIGURACAO_O")
,dump("DT_SYNCRO_")
,dump("SYNC_UPD")
,dump("SYNCRO_")
,dump("USUARIO_O")
,dump("CONFIGURACAO")
,dump("USUARIO")
,dump("VALOR")
FROM "OWNER"."CONFIGURACOES" TAB WHERE (
(nvl(length("CONFIGURACAO_O"),0)>100)
OR ("DT_SYNCRO_"!="DT_SYNCRO_"+0)
OR (nvl(length("SYNC_UPD"),0)>1)
OR ("SYNCRO_"!="SYNCRO_"/1)
OR (nvl(length("USUARIO_O"),0)>20)
OR (nvl(length("CONFIGURACAO"),0)>100)
OR (nvl(length("USUARIO"),0)>40)
OR (nvl(length("VALOR"),0)>100) )
;

PL/SQL procedure successfully completed.

SQL>
Conforme validação do script, foram identificadas 9 linhas com campo data que possuem valores incorretos. Para mais detalhes, basta executar o SQL gerado.
Neste exemplo, podemos ver que o campo dt_syncro_ possuí o tamanho de 11 bytes. Porém o campo date deve ter um tamanho fixo de 7 bytes, conforme a documentação.

Imagem da consulta executada através do SQL Developer:


Documentação:
Outra validação que pode ser feita após descobrir a tabela é um create table as select. Ele também apresentará erro devido a um valor ser maior do que o limite para a coluna.
SQL> create table lamim.teste as select * from OWNER.CONFIGURACOES;
create table lamim.teste as select * from OWNER.CONFIGURACOES
                                   *
ERROR at line 1:
ORA-12899: value too large for column ??? (actual: 11, maximum: 7)


SQL>
Agora que foram descobertas as linhas com corrupção, as mesmas precisam ser corrigidas ou removidas. Feito isso a coleta executará com sucesso.

Fonte:
ORA-07445: Exception Encountered: Core Dump [evadmp()+686] (Doc ID 1528920.1)
Baddata Script To Check Database For Corrupt column data (Doc ID 428526.1)

sábado, 1 de setembro de 2018

Disponível para download on premises a versão 18.3


Recentemente foi disponibilizado para as versões on premises a versão 18.3 que até o momento estava disponível apenas para ambiente cloud.

Link para download
Documentação


sexta-feira, 17 de agosto de 2018

#Dica - ORA-00001: unique constraint (PERFSTAT.STATS$SQL_SUMMARY_PK) violated


O erro ORA-00001: unique constraint (PERFSTAT.STATS$SQL_SUMMARY_PK) violated ao executar a procedure statspack.snap para geração de um novo snapshot, pode estar relacionado ao bug 2784796.

SQL> exec statspack.snap;
BEGIN statspack.snap; END;

*
ERROR at line 1:
ORA-00001: unique constraint (PERFSTAT.STATS$SQL_SUMMARY_PK) violated
ORA-06512: at "SYS.STATSPACK", line 4380
ORA-06512: at "SYS.STATSPACK", line 5729
ORA-06512: at "SYS.STATSPACK", line 105
ORA-06512: at line 1
  • Workaround:
Como medida de contorno para este erro, podemos alterar a view STATS$V_$SQLXS adicionando a clausula where abaixo. A execução deve ser feita com o usuário SYS.
 where 
(  plan_hash_value > 0 
or executions > 0 
or parse_calls > 0 
or disk_reads > 0 
or buffer_gets > 0 
)

--VIEW COMPLETA
create or replace view STATS$V_$SQLXS as
select max(sql_text)        sql_text
     , max(sql_id)          sql_id
     , sum(sharable_mem)    sharable_mem
     , sum(sorts)           sorts
     , min(module)          module
     , sum(loaded_versions) loaded_versions
     , sum(fetches)         fetches
     , sum(executions)      executions
     , sum(px_servers_executions) px_servers_executions
     , sum(end_of_fetch_count) end_of_fetch_count
     , sum(loads)           loads
     , sum(invalidations)   invalidations
     , sum(parse_calls)     parse_calls
     , sum(disk_reads)      disk_reads
     , sum(direct_writes)   direct_writes
     , sum(buffer_gets)     buffer_gets
     , sum(application_wait_time)  application_wait_time
     , sum(concurrency_wait_time)  concurrency_wait_time
     , sum(cluster_wait_time)      cluster_wait_time
     , sum(user_io_wait_time)      user_io_wait_time
     , sum(plsql_exec_time)        plsql_exec_time
     , sum(java_exec_time)         java_exec_time
     , sum(rows_processed)  rows_processed
     , max(command_type)    command_type
     , address              address
     , old_hash_value       old_hash_value
     , max(hash_value)      hash_value
     , count(1)             version_count
     , sum(cpu_time)        cpu_time
     , sum(elapsed_time)    elapsed_time
     , null                 avg_hard_parse_time
     , max(outline_sid)     outline_sid
     , max(outline_category) outline_category
     , max(is_obsolete)     is_obsolete
     , max(child_latch)     child_latch
     , max(sql_profile)     sql_profile
     , max(program_id)      program_id
 , max(program_line#)   program_line#
     , max(exact_matching_signature) exact_matching_signature
     , max(force_matching_signature) force_matching_signature
     , max(last_active_time)         last_active_time
  from v$sql
  where 
(  plan_hash_value > 0 
or executions > 0 
or parse_calls > 0 
or disk_reads > 0 
or buffer_gets > 0 
) 
 group by old_hash_value, address
 ;
Após a recriação da view, será necessário limpar as tabelas do statspack. Para isso vamos usar o script sptrunc.sql. 
É recomendável que seja realizado um backup do owner antes de realizar a limpeza, assim você não perderá dados históricos para consultas futuras.
SQL> conn perfstat/senha
Connected.
SQL>
SQL>
SQL> show user;
USER is "PERFSTAT"
SQL> @?/rdbms/admin/sptrunc.sql

Warning
~~~~~~~
Running sptrunc.sql removes ALL data from Statspack tables.  You may
wish to export the data before continuing.


About to Truncate Statspack Tables
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If would like to exit WITHOUT truncating the tables, enter any text at the
begin_or_exit prompt (e.g. 'exit'), otherwise if you would like to begin
the truncate operation, press <return>


Enter value for begin_or_exit:
Entered at the 'begin_or_exit' prompt

... Starting truncate operation

Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.


Table truncated.



Table truncated.


Table truncated.


268 rows deleted.


5 rows deleted.


Commit complete.


Package altered.


... Truncate operation complete

SQL> SQL>

Concluído o processo de truncate, basta desabilitar a constraint e recriar os índices associados a mesma. Feito isso o processo executará normalmente.
.
Supporting metalink note: Cannot Run Statspack.Snap Ora-00001 [ID 267244.1]

sexta-feira, 13 de julho de 2018

#dica - Oracle Client 12c não abre instalador no windows 10


Hoje durante a instalação de um Oracle Client 12c 64 bits em um desktop com windows 10 64 bits tive um problema onde o instalador não iniciava.
Verificando o log gerado, o processo simplesmente parava na etapa de descompactação, conforme abaixo:
Using paramFile: C:\Oracle\win64_11gR2_client\client\install\oraparam.ini


Checking monitor: must be configured to display at least 256 colors.    Actual 4294967296    Passed

The commandline for unzip:
C:\Oracle\win64_11gR2_client\client\install\unzip -qqqo ..\stage\Components\oracle.jdk\1.5.0.17.04\1\DataFiles/"*.jar" -d "C:\Users\desktop1\AppData\Local\Temp\OraInstall2018-07-12_03-33-55PM"  
Tentei instalar o client 32 bits, sem sucesso. Tentei 11g e o problema continuava o mesmo.
Para conseguir realizar a instalação, acessei o diretório de instalação através do prompt de comando (cmd) e executei a instalação com a opção debug.
C:\Oracle\win64_11gR2_client\client> setup.exe -debug
Executando com a opção debug, foi possível constatar que o sistema não atende os recursos mínimos de instalação, conforme mensagem do processo de instalação.
Agora podemos selecionar opção de continuar e o instalador abrirá normalmente.

Por hoje era isso!































terça-feira, 10 de julho de 2018

#DICA Erro durante a instalação do Oracle 11.2.0.4 no Oracle Linux 7x (Error in invoking target 'agent nmhs' of makefile )


Durante a instalação do Oracle Database 11.2.0.4 em um ambiente Oracle Linux 7x teremos o erro abaixo:
Error in invoking target 'agent nmhs' of makefile '/u01/app/oracle/product/11.2.0.4/sysman/lib/ins_emagent.mk'.
Existe um workaround que pode ser aplicado para correção do mesmo.  Durante a instalação, quando o erro for exibido, não clique nas opções da janela exibida (abort, retry ou continue). 
Você deve editar o arquivo ins_emagent.mk localizado no $ORACLE_HOME/sysman/lib/ e procurar pela linha $(MK_EMAGENT_NMECTL). No final desta linha, deve ser acrescentada a opção 
-lnnz11, conforme exemplo abaixo:
in $ORACLE_HOME/sysman/lib/ins_emagent.mk
Localizar a linha: $(MK_EMAGENT_NMECTL)
Acrescentar -lnnz11 ao final: $(MK_EMAGENT_NMECTL) -lnnz11
Após a alteração, podemos clicar na opção retry da instalação e o processo continuará com sucesso.

Outra opção ignorar o erro e continuar a instalação. Ao final aplicar o patch 19692824.

Este problema ocorre devido ao bug bug 19692824.

quarta-feira, 23 de maio de 2018

EXÍMIO SOLUÇÕES EM TI




A Exímio Soluções em TI é uma empresa de Brusque - SC, especializada em entregar projetos de TI e Sustentação de ambientes de Banco de Dados e Middleware.

Surgiu com o propósito de prestar serviços de alta qualidade com profissionais especializados, comprometidos e inovadores que proporcionem satisfação e qualidade em seus entregáveis.

Apostamos na certificação e capacitação de seus profissionais para se destacar no mercado e prestar serviços que superem as expectativas de seus clientes.

Atualmente contamos com mais de 20 anos de experiência e mais de 20 certificações que comprovam nossas competências técnicas



Proxima → Página inicial