Mostrando postagens com marcador #dica. Mostrar todas as postagens
Mostrando postagens com marcador #dica. Mostrar todas as postagens

sexta-feira, 12 de novembro de 2021

No ADR base is set

O ADRCI (Automatic Diagnostic Repository Command Interpreter), é uma ferramenta de linha de comando introduzida na versão 11g do Oracle database cujo propósito é gerenciar os dados de diagnóstico armazenados no ADR (Automatic Diagnostic Repository)

O ADR é um repositório de arquivos de diagnóstico de banco de dados, tais como traces, dumps, o alert log, health monitor reports, etc


Recentemente ao utilizar a ferramenta me deparei com a mensagem "No ADR base is set" e ao executar o comando "show homes" a mensagem "No ADR homes are set"

[oracle@oda1 ~]$ adrci

ADRCI: Release 19.0.0.0.0 - Production on Wed Nov 10 10:33:37 2021

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

No ADR base is set
adrci> show homes
No ADR homes are set
adrci>

Isso ocorre devido ao arquivo $ORACLE_HOME/log/diag/adrci_dir.mif estar danificado ou ausente. neste caso, ausente e procedi com a criação do diretório/arquivo direcionando o $ORACLE_BASE para dentro do arquivo conforme exemplo abaixo:

[oracle@oda1 ~]$ ls -l $ORACLE_HOME/log/diag/adrci_dir.mif
ls: cannot access /u01/app/odaorahome/oracle/product/19.0.0.0/dbhome_1/log/diag/adrci_dir.mif: No such file or directory
[oracle@oda1 ~]$ mkdir -p $ORACLE_HOME/log/diag
[oracle@oda1 ~]$ echo $ORACLE_BASE
/u01/app/odaorabase/oracle
[oracle@oda1 ~]$ printf "%s" "$ORACLE_BASE" > $ORACLE_HOME/log/diag/adrci_dir.mif
[oracle@oda1 ~]$

Feito os ajustes, basta entrar novamente no ADRCI para que já esteja funcional perante o ADR informado.

[oracle@oda1 ~]$ adrci

ADRCI: Release 19.0.0.0.0 - Production on Wed Nov 10 10:36:58 2021

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

ADR base = "/u01/app/odaorabase/oracle"
adrci> show homes
ADR Homes:
diag/rdbms/cbdprd1/CBDPRD1
diag/asm/user_root/host_1679024932_110
diag/clients/user_oracle/host_1679024932_110
diag/asmtool/user_root/host_1679024932_110
adrci>
Mais informações →

sexta-feira, 25 de junho de 2021

Consultando dados de uma partição


Algo que ainda não havia usado nem ao menos lido sobre.. mas fica a dica de como consultar dados de partições específicas.

select [columns] from [table] partition ([partition])

SQL> select partition_name from dba_tab_partitions where table_name='AUD$UNIFIED';

PARTITION_NAME
--------------------------------------------------------------------------------
AUD_UNIFIED_P0
SYS_P49826
SYS_P50746
SYS_P51806
SYS_P53186
SYS_P54526
SYS_P56266

7 rows selected.

SQL> select count(*) from AUDSYS.AUD$UNIFIED partition (SYS_P54526);

  COUNT(*)
----------
      2904

SQL> select count(*) from AUDSYS.AUD$UNIFIED partition (SYS_P56266);

  COUNT(*)
----------
      8997

SQL> select count(*) from AUDSYS.AUD$UNIFIED partition (SYS_P56266) where OS_USER='apache';

  COUNT(*)
----------
       142
Mais informações →

sexta-feira, 4 de junho de 2021

Recuperando credenciais de administrador no weblogic

 


Dica para quem esqueceu as credenciais de acesso ao Weblogic.

Capture as informações criptografadas a partir do arquivo boot.properties localizado no $USERDOMAIN_HOME/servers/AdminServer/security/


[root@wls ~]# export USERDOMAIN_HOME=/u01/Oracle/Middleware/Oracle_Home/user_projects/domains/app_domain
[root@wls ~]# cd $USERDOMAIN_HOME/servers/AdminServer/security/
[root@wls security]# cat boot.properties
# Generated by Configuration Wizard on Mon Jun 27 07:42:49 BRT 2016
username={AES}zoDTpzXJwBoWCPwqbTuoBhQiR8bIneBw1nnumM2XkAU=
password={AES}MRuZtj19v4RBzFCb4gX5IM+qItLDVAaP1IC13WvTitA=

Carregue as as variáveis de ambiente do domínio:

[root@wls security]# . $USERDOMAIN_HOME/bin/setDomainEnv.sh
Crie um arquivo chamado recoverpassword.java, por exemplo, contendo o seguinte comando:

[root@wls app_domain]# cat recoverpassword.java
public class recoverpassword {
 public static void main(String[] args)
 {
  System.out.println(
  new weblogic.security.internal.encryption.ClearOrEncryptedService(
  weblogic.security.internal.SerializedSystemIni.getEncryptionService(args[0]
   )).decrypt(args[1]));
  }
}
Chame a classe java criada passando a string criptografada do arquivo boot.properties como parâmetro:

[root@wls app_domain]# java -cp $CLASSPATH:. recoverpassword $DOMAIN_HOME {AES}zoDTpzXJwBoWCPwqbTuoBhQiR8bIneBw1nnumM2XkAU=
weblogic
[root@wls app_domain]# java -cp $CLASSPATH:. recoverpassword $DOMAIN_HOME {AES}MRuZtj19v4RBzFCb4gX5IM+qItLDVAaP1IC13WvTitA=
Passw0rd
A saída do comando trará em texto simples o nome de usuário e senha do administrador do Weblogic.

Mesmo que existam vários ambientes com as mesmas credenciais, o retorno do arquivo boot.properties pode conter textos criptografados diferentes, pois ao criptografar e descriptografar o weblogic usa a chave cifrada armazenada no arquivo "security/SerializedSystemIni.dat". Portanto, sendo a chave de cifra diferente, é possível obter um texto criptografado diferente até para a mesma entrada.
Mais informações →

segunda-feira, 18 de maio de 2020

Exibindo valores válidos para parâmetros de múltiplas opções

Dentre seus milhares de parâmetros, o Oracle Database possui parâmetros do tipo string, número, booleano e os que aceitam uma lista predeterminada de valores como o cursor_sharing, por exemplo, que pode ser configurado com os valores SIMILAR, EXACT e FORCE.

Para sabermos os valores válidos para estes parâmetros de múltiplas opções predeterminadas podemos:


1. Consultar a documentação Oracle onde será exibido a lista de valores válidos, desde que o parâmetro não seja oculto.

Adicionar legenda

2. Alterar o parâmetro, incluindo os ocultos para um valor não válido, desta forma a lista de valores suportados será exibida:

SQL> alter system set cursor_sharing='X';
alter system set cursor_sharing='X'
*
ERROR at line 1:
ORA-00096: invalid value X for parameter cursor_sharing, must be from among SIMILAR, EXACT, FORCE

SQL> alter system set "_mv_refresh_enhanced_dml_detection"='TST';
alter system set "_mv_refresh_enhanced_dml_detection"='TST'
*
ERROR at line 1:
ORA-00096: invalid value TST for parameter _mv_refresh_enhanced_dml_detection, must be from among ON_RC, ON, OFF

3. Utilizar a view v$parameter_valid_values, não é válida para parâmetros ocultos
set lines 200
col name for a50
col value for a30
select * from v$parameter_valid_values where name='use_large_pages';

       NUM NAME                                                  ORDINAL VALUE                          ISDEFAULT
---------- -------------------------------------------------- ---------- ------------------------------ -----------------------
       117 use_large_pages                                             1 TRUE                           TRUE
       117 use_large_pages                                             2 AUTO                           FALSE
       117 use_large_pages                                             3 ONLY                           FALSE
       117 use_large_pages                                             4 FALSE                          FALSE

4. ou, ainda utilizar a X$KSPVLD_VALUES onde podemos visualizar os valores válidos inclusive para os parâmetros ocultos
set lines 200
col ISDEFAULT_KSPVLD_VALUES for a15
col VALUE_KSPVLD_VALUES for a30
select PARNO_KSPVLD_VALUES NUM,
       NAME_KSPVLD_VALUES NAME,
       ORDINAL_KSPVLD_VALUES ORDINAL,
       VALUE_KSPVLD_VALUES VALUE,
       DECODE(ISDEFAULT_KSPVLD_VALUES, 'FALSE', '', 'DEFAULT') ISDEFAULT
  from X$KSPVLD_VALUES
 where NAME_KSPVLD_VALUES = '_mv_refresh_enhanced_dml_detection';

       NUM NAME                                                  ORDINAL VALUE                          ISDEFAU
---------- -------------------------------------------------- ---------- ------------------------------ -------
      2484 _mv_refresh_enhanced_dml_detection                          1 OFF
      2484 _mv_refresh_enhanced_dml_detection                          2 ON
      2484 _mv_refresh_enhanced_dml_detection                          3 ON_RC                          DEFAULT

enjoy!

Mais informações →

quinta-feira, 19 de março de 2020

Pré-requisitos para instalação do Oracle Database no Linux

Quando pensamos em instalar um banco de dados Oracle é importante nos lembrarmos que existem um conjunto de requisitos de hardware, software e sistema operacional a serem atendidos e que estes podem facilmente serem encontrados nas documentações da Oracle através do Oracle Help Center (Oracle Docs) e MOS (My Oracle Support).



Ao vencermos etapas, como o provisionamento de hardware destinado ao banco de dados e a instalação de um sistema operacional homologado, como o Linux 7 para o Oracle Database 19c, por exemplo, que é facilmente identificado através da matriz de certificação disponível no MOS,





É necessário também proceder com alguns ajustes no sistema operacional de modo que todos os pré-requisitos relacionados ao produto e versão que será instalada sejam atendidos, pois o banco de dados requer pacotes específicos de software para garantir seu funcionamento bem como ajustes em determinados parâmetros do kernel. 

Estes pré-requisitos a nível de sistema operacional também podem ser encontrados nas fontes descritas acima, porém a muito tempo a Oracle já oferece alguns pacotes que facilitam estes ajustes básicos relacionados aos pré-requisitos de funcionamento do produto.

Os pacotes foram evoluindo e mudando de nome conforme versão do sistema operacional Linux e versão do produto Oracle:

  • oracle-validated
  • oracle-rdbms-server-11gR2-preinstall
  • oracle-rdbms-server-12cR1-preinstall
  • oracle-database-server-12cR2-preinstall
  • oracle-database-preinstall-18c
  • oracle-database-preinstall-19c

Para instalar um dos pacotes basta realizar o download do arquivo ou do repositório condizente a versão do sistema operacional e proceder com a instalação do pacote.


# cd /etc/yum.repos.d
# wget http://public-yum.oracle.com/public-yum-ol7.repo
# yum install oracle-database-preinstall-19c


# curl -o oracle-database-preinstall-19c-1.0-2.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-2.el7.x86_64.rpm
# yum -y localinstall oracle-database-preinstall-19c-1.0-2.el7.x86_64.rpm
# rm oracle-database-preinstall-19c-1.0-2.el7.x86_64.rpm


Concluída mais esta etapa de pré-requisitos, pode-se dar sequencia na instalação do Oracle Database onde durante sua instalação via GUI (Graphical User Interface), por exemplo, será realizada uma nova consistência de pre-requisitos e caso algum novo ajuste seja necessário será informado na tela do usuário para que possa ser ajustado ou ignorado (em alguns casos temos pacotes que podem ser ignorados, mas sempre confirme junto a documentação Oracle especialmente se for um ambiente produtivo para evitar problemas futuros).

Espero que as dicas possam ser úteis, até a próxima.
Mais informações →

domingo, 23 de fevereiro de 2020

Checksum de fontes PL/SQL

Assim como temos em ambientes Linux o cksum e o sha1sum que nos permitem gerar um código hash para a comparação de consistência de um arquivo, umas das opções no Oracle Database é a função GET_HASH_VALUE disponível no pacote DBMS_UTILITY que permite gerar um código hash do fonte sendo muito útil para identificar se ele está consistente ou se houve alguma alteração, principalmente quando comparamos extensos códigos PL/SQL que visivelmente daria trabalho para determinar se estão iguais entre uma base de dados e outra, por exemplo.

Criando uma procedure de exemplo e obtendo o hash:

SQL> create or replace procedure exemplo as
  2  begin
  3  null;
  4  end;
  5  /

Procedure created.

SQL> SELECT AVG(DBMS_UTILITY.GET_HASH_VALUE(TEXT,1000000000,POWER(2,30))) AS CHECKSUM FROM DBA_SOURCE WHERE OWNER = 'SYS' AND NAME ='EXEMPLO';

  CHECKSUM
----------
1742638361

Agora recriando a procedure incluindo apenas um espaço entre o null e o ; (ponto e virgula)

SQL> create or replace procedure exemplo as
  2  begin
  3  null ;
  4  end;
  5  /

Procedure created.

SQL> SELECT AVG(DBMS_UTILITY.GET_HASH_VALUE(TEXT,1000000000,POWER(2,30))) AS CHECKSUM FROM DBA_SOURCE WHERE OWNER = 'SYS' AND NAME ='EXEMPLO';

  CHECKSUM
----------
1701853948

Com a inserção de apenas um espaço já podemos constatar que o hash dela já não é igual ao hash do PL/SQL anterior indicando assim que o fonte é diferente.

Recriando a procedure da forma que era originalmente iremos voltar a ter o mesmo hash 1742638361


SQL> create or replace procedure exemplo as
  2  begin
  3  null;
  4  end;
  5  /

Procedure created.

SQL> SELECT AVG(DBMS_UTILITY.GET_HASH_VALUE(TEXT,1000000000,POWER(2,30))) AS CHECKSUM FROM DBA_SOURCE WHERE OWNER = 'SYS' AND NAME ='EXEMPLO';

  CHECKSUM
----------
1742638361

Outro método para se obter o hash de um PL/SQL é através do pacote DBMS_CRYPTO

SQL> set serveroutput on
SQL> declare
  2
  3  string varchar2(32767);
  4  l_hash raw(2000);
  5  lvschema VARCHAR2(30) :='SYS';
  6  lvname VARCHAR2(30) :='EXEMPLO';
  7  lvtype varchar2(30) :='PROCEDURE';
  8
  9  begin
 10
 11  l_hash:=dbms_crypto.hash(dbms_metadata.get_ddl(lvtype, lvname, lvschema), dbms_crypto.hash_sh1);
 12  dbms_output.put_line('HashSHA1='||l_hash||' Name='||lvschema||'.'||lvname);
 13
 14  end;
 15  /
HashSHA1=859EEB0AEE5CF93CF9507951E7446D6EAD958885 Name=SYS.EXEMPLO

PL/SQL procedure successfully completed.

Espero que a dica possa ser útil para você também.
Mais informações →

sábado, 24 de agosto de 2019

SQL*Plus History a partir do 12.2

Um recurso muito útil, que digamos, demorou para ser inserido nas funcionalidades do SQL*Plus e ainda é pouco conhecido pela maioria é o comando HIST[ORY].

Em função desta "deficiência" da ferramenta ao longo dos anos, grande parte da comunidade passou a utilizar o rlwrap que proporciona um acesso rápido ao histórico de comandos do SQL*Plus e RMAN, por exemplo.

Apesar do RMAN ainda não possuir um comando history nativo, a funcionalidade introduzida a partir da versão 12.2 no SQL*Plus é bem interessante pois permite que o usuário consulte, edite, execute e remova comandos armazenados no histórico de sua sessão.

O comando show hist permite que seja consultado se a geração de histórico está habilitada ou não, bem como o tamanho (quantidade de comandos) armazenados no histórico caso este esteja habilitado.

Para habilitar a funcionalidade basta digitar set hist on


SQL> show hist
history is OFF
SQL> set hist on
SQL> show hist
history is ON and set to "100"

Para ajustar a quantidade de comandos mantidos no histórico utilize o comando set hist <quantidade> 

SQL> set hist 1000
SQL> show hist
history is ON and set to "1000"

Para exibir os comandos já executados a partir do histórico execute hist

SQL> hist
SP2-1651: History list is empty.
SQL> select 1 from dual;

         1
----------
         1

SQL> hist
  1  select 1 from dual;

SQL> show user
USER is "SYS"
SQL> hist
  1  select 1 from dual;
  2  show user

Para editar um comando do histórico utilize a opção hist <linha> edit 


SQL> hist 1 edit
select 1234 from dual;

A edição do histórico irá manter o comando original e ira adicionar ao histórico uma nova entrada contendo a alteração realizada

SQL> hist
  1  select 1 from dual;
  2  show user
  3  select 1234 from dual;

O comando edit irá utilizar o utilitário padrão do sistema operacional para realizar a edição do comando caso a variável _EDITOR não tenha sido definida na sessão. No caso de um ambiente Linux o vi será o padrão mas podemos alter-la para qualquer outro utilitário de edição através do comando define _EDITOR

Caso uma entrada inválida seja inserida receberemos erro ao executar o hist edit

SQL> define _EDITOR = nao_exite
SQL> hist 1 edit
/bin/bash: nao_exite: command not found
SQL> define _EDITOR = vi

Para re-executar um comando contido no histórico utilize o comando hist <linha> run

SQL> hist
  1  select 1 from dual;
  2  show user
  3  select 1234 from dual;

SQL> hist 3 run

      1234
----------
      1234

Para deletar um comando do histórico utilize hist <linha> del

SQL> hist
  1  select 1 from dual;
  2  show user
* 3  select 1234 from dual;

SQL> hist 3 del
SQL> hist
  1  select 1 from dual;
  2  show user

Para apagar todo o histórico utilize o comando hist clear

SQL> hist
  1  select 1 from dual;
  2  show user

SQL> hist clear
SQL> hist
SP2-1651: History list is empty.



Referência:

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqpug/HISTORY.html#GUID-CCF9B047-3122-4644-BA06-5FA4B5812E9F
Mais informações →

quinta-feira, 20 de junho de 2019

Upload de arquivos para uma SR no MOS via command-line

Você como administrador de banco de dados Oracle já deve ter anexado centenas ou milhares de arquivos em chamados no MOS (My Oracle Support). 

Naturalmente um dos métodos mais conhecidos, ou único conhecido pela maioria das pessoas é via browser se logando no MOS Customer Portal (https://support.oracle.com), abrindo a SR (Service Request) e clicando no botão Add Attachment localizado no topo da página.

Este método, mais prático para a maioria, acaba limitando o tamanho do arquivo a no máximo 2GB, mas felizmente temos outros métodos de fazer upload de arquivos para uma SR no MOS onde a limitação passa a ser de 200GB.

Via linha de comando podemos utilizar o curl que é uma ferramenta que permite criar requisições em diversos protocolos (incluindo HTTP, HTTPS e FTP, entre muitos outros).

Através do curl o MOS permite a transferência de arquivos pelos protocolos FTPS e HTTPS.

FTPS:

$ curl -T <path_and_filename> -u <userID> ftps://transport.oracle.com/issue/<sr_number>/
Exemplo: curl –T /u02/files/bigfile.zip –u MOSuserID@company.com ftps://transport.oracle.com/issue/3-1234567890/


HTTPS:
$ curl -T <path_and_filename>” -u "<userID>" https://transport.oracle.com/upload/issue/<sr-number>/
Exemplo: curl -T D:\data\bigfile.tar -u MOSuserID@company.com https://transport.oracle.com/upload/issue/3-1234567890/
Exemplo: curl -T D:\data\tar-u MOSuserID@company.com https://transport.oracle.com/upload/issue/3-1083550/
Também é possivel renomear o arquivo durante a transferência:
Exemplo: curl -T D:\data\tar -u MOSuserID@company.com https://transport.oracle.com/upload/issue/3-1083550/NotSoBig.tar

Caso seja necessário utilizar um servidor proxy:

Exemplo:
 curl -T D:\data\bigfile.tar -u MOSuserID@company.com https://transport.oracle.com/upload/issue/3-1234567890/ 
-px proxyserver:port -U proxyuser

- - - - - - - - - - - - - - - - - - - - 

Editado:

Um parâmetro que não identifiquei na documentação e foi pontuado pelo @Luiz Guilherme Zen Schlindwein é o -output que gera em tela as métricas do upload quando informado junto ao comando curl

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 2318k    0     0  100 2318k      0   185k  0:00:12  0:00:12 --:--:--     0

- - - - - - - - - - - - - - - - - - - - 

Além do curl podemos ainda utilizar o Filezilla:

  1. Set "ftps://transport.oracle.com" as the Host
  2. Supply the appropriate credentials (MOS Support Portal username and password)
  3. Leave the Port setting blank
  4. After connecting, double-click on the Issue directory in the right (Remote) pane
  5. Double-click the SR number’s directory in the right (Remote) pane
  6. Locate the file to be transferred in the left (Local) pane
  7. Drag-and-drop the file into the relevant SR directory

Referência:

How to Upload Files to Oracle Support (Doc ID 1547088.2)

Mais informações →

quinta-feira, 19 de abril de 2018

Cancelando a execução de uma instrução SQL - 18c

Uma das novas features introduzidas na versão 18c do Oracle database é o ALTER SYSTEM CANCEL SQL que permite que uma instrução SQL em execução em determinada sessão seja manualmente cancelada sem que a sessão seja desconectada, o que ocorre na utilização das instruções ALTER SYSTEM KILL SESSION / DISCONNECT SESSION. 

A utilização do “CANCEL SQL” é útil quando determinada sessão está executando alguma instrução ofensora e é necessário liberação de recursos ou mesmo quando instruções SQL são executadas incorretamente. 

Sempre que uma instrução SQL é cancelada, ocorre o rollback dos dados alterados pela mesma. 

Sintaxe do comando:

ALTER SYSTEM CANCEL SQL 'SID, SERIAL#, [@INST_ID, SQL_ID]';

Caso a @INST_ID não seja especificada (opcional), a instance id da sessão conectada será utilizada;

Caso o SQL_ID não seja especificado (opcional), a instrução SQL atualmente em execução na sessão especificada será cancelada.


-- Cancelar SQL em execução em determinada sessão da instance conectada.
SQL> ALTER SYSTEM CANCEL SQL '38, 41388';

-- Cancelar SQL em execução na sessão com INST_ID = 1.
SQL> ALTER SYSTEM CANCEL SQL '38, 41388, @1';

-- Cancelar SQL específico em determinada sessão da instance conectada.
SQL> ALTER SYSTEM CANCEL SQL '38, 41388, 3tfmdd4xagv3y';

-- Cancelar SQL específico na sessão com INST_ID = 1.
SQL> ALTER SYSTEM CANCEL SQL '38, 41388, @1, 3tfmdd4xagv3y';

Exemplo:

Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.1.0.0.0

SQL> select distinct sid from v$mystat;

       SID
----------
        38

SQL> begin
  2  loop null;
  3  end loop;
  4  end;
  5  /

Em uma nova sessão, capture as informações necessárias e execute o ALTER SYSTEM CANCEL SQL:

SQL> set lines 200
SQL> select inst_id, serial#, sql_id, status, (select sql_fulltext from v$sql sq where sq.sql_id=se.sql_id) sql_fulltext from gv$session se where sid=38;

   INST_ID    SERIAL# SQL_ID        STATUS   SQL_FULLTEXT
---------- ---------- ------------- -------- ------------------------------
         1      41388 3tfmdd4xagv3y ACTIVE   begin
                                             loop null;
                                             end loop;
                                             end;

SQL> ALTER SYSTEM CANCEL SQL '38, 41388, @1, 3tfmdd4xagv3y';

System altered.

Voltando a sessão anterior:

SQL> begin
  2  loop null;
  3  end loop;
  4  end;
  5  /
begin
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation

E a sessão continua conectada, basta executar qualquer instrução SQL.

SQL> select distinct sid from v$mystat;

       SID
----------
        38



Referência:

https://docs.oracle.com/en/database/oracle/oracle-database/18/newft/new-features.html#GUID-EFC832BE-DC2C-4997-8C38-8A9E27A4FFC4
Mais informações →

terça-feira, 13 de fevereiro de 2018

RMAN - Simulando backup para fita

Se você não possui drive de fita mas quer simular um backup para fita ou mesmo realizar testes quando dizem que o problema está no RMAN e não no produto de terceiros como NetBackup, NetWorker, Data Protector e TSM, por exemplo, utilize a API oracle.disksbt que a Oracle fornece para simular o uso da MML (Media Management Library) fazendo com o que um diretório do servidor seja tratado igual a uma unidade de fita.

A API pode ser especificada na alocação do canal ou configurada nas parametrizações do RMAN onde será atribuída automaticamente ao canal quando um backup SBT_TAPE for executado inibindo a necessidade de alocar o canal com os parâmetros manualmente.

SBT_LIBRARY  : recebe a API que simula o uso da MML;
BACKUP_DIR   : recebe o diretório que serão gerados os arquivos de backup.

Na Alocação do canal:


[oracle@db3 ~]$ mkdir -p /orabackup/sbt
[oracle@db3 ~]$ rman target /

Recovery Manager: Release 12.2.0.1.0 - Production on Tue Feb 13 18:32:40 2018

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

connected to target database: CDB1 (DBID=913632474)

RMAN> RUN {
2> ALLOCATE CHANNEL CH01 DEVICE TYPE 'SBT_TAPE' PARMS="SBT_LIBRARY=oracle.disksbt, ENV=(BACKUP_DIR=/orabackup/sbt)";
3> BACKUP CURRENT CONTROLFILE;
4> }

using target database control file instead of recovery catalog
allocated channel: CH01
channel CH01: SID=56 device type=SBT_TAPE
channel CH01: WARNING: Oracle Test Disk API

Starting backup at 13-FEB-18
channel CH01: starting full datafile backup set
channel CH01: specifying datafile(s) in backup set
including current control file in backup set
channel CH01: starting piece 1 at 13-FEB-18
channel CH01: finished piece 1 at 13-FEB-18
piece handle=2jsr52rc_1_1 tag=TAG20180213T173331 comment=API Version 2.0,MMS Version 8.1.3.0
channel CH01: backup set complete, elapsed time: 00:00:01
Finished backup at 13-FEB-18

Starting Control File and SPFILE Autobackup at 13-FEB-18
piece handle=c-913632474-20180213-00 comment=API Version 2.0,MMS Version 8.1.3.0
Finished Control File and SPFILE Autobackup at 13-FEB-18
released channel: CH01

RMAN> exit


Recovery Manager complete.
[oracle@db3 ~]$ ls -lrt /orabackup/sbt/
total 49164
-rw-r--r--. 1 oracle oinstall 25165840 Feb 13 18:33 2jsr52rc_1_1
-rw-r--r--. 1 oracle oinstall 25165840 Feb 13 18:33 c-913632474-20180213-00
-rw-r--r--. 1 oracle oinstall     3360 Feb 13 18:33 Oracle_Disk_SBT_Catalog

 Nas parametrizações do RMAN:

[oracle@db3 ~]$ rman target /

Recovery Manager: Release 12.2.0.1.0 - Production on Tue Feb 13 18:43:04 2018

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

connected to target database: CDB1 (DBID=913632474)

RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name CDB1 are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/orabin/app/oracle/product/12.2.0.1/dbhome_1/dbs/snapcf_cdb1.f'; # default

RMAN> CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS="SBT_LIBRARY=oracle.disksbt, ENV=(BACKUP_DIR=/orabackup/sbt)";

new RMAN configuration parameters:
CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS  "SBT_LIBRARY=oracle.disksbt, ENV=(BACKUP_DIR=/orabackup/sbt)";
new RMAN configuration parameters are successfully stored

RMAN> CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE';

new RMAN configuration parameters:
CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE';
new RMAN configuration parameters are successfully stored

RMAN> backup current controlfile format 'exemplo2.bkp';

Starting backup at 13-FEB-18
allocated channel: ORA_SBT_TAPE_1
channel ORA_SBT_TAPE_1: SID=59 device type=SBT_TAPE
channel ORA_SBT_TAPE_1: WARNING: Oracle Test Disk API
channel ORA_SBT_TAPE_1: starting full datafile backup set
channel ORA_SBT_TAPE_1: specifying datafile(s) in backup set
including current control file in backup set
channel ORA_SBT_TAPE_1: starting piece 1 at 13-FEB-18
channel ORA_SBT_TAPE_1: finished piece 1 at 13-FEB-18
piece handle=exemplo2.bkp tag=TAG20180213T174719 comment=API Version 2.0,MMS Version 8.1.3.0
channel ORA_SBT_TAPE_1: backup set complete, elapsed time: 00:00:01
Finished backup at 13-FEB-18

Starting Control File and SPFILE Autobackup at 13-FEB-18
piece handle=c-913632474-20180213-01 comment=API Version 2.0,MMS Version 8.1.3.0
Finished Control File and SPFILE Autobackup at 13-FEB-18

RMAN> exit


Recovery Manager complete.
[oracle@db3 ~]$ ls -lrt /orabackup/sbt/
total 98328
-rw-r--r--. 1 oracle oinstall 25165840 Feb 13 18:33 2jsr52rc_1_1
-rw-r--r--. 1 oracle oinstall 25165840 Feb 13 18:33 c-913632474-20180213-00
-rw-r--r--. 1 oracle oinstall 25165840 Feb 13 18:47 exemplo2.bkp
-rw-r--r--. 1 oracle oinstall 25165840 Feb 13 18:47 c-913632474-20180213-01
-rw-r--r--. 1 oracle oinstall     5600 Feb 13 18:47 Oracle_Disk_SBT_Catalog

 A nível de curiosidade, a API existe desde a versão 9i do Oracle database ¹.

Referências:

https://docs.oracle.com/cd/A84870_01/doc/server.816/a76990.pdf
https://docs.oracle.com/cd/B10500_01/server.920/a96566/wnrcmug.htm¹
https://docs.oracle.com/cd/B19306_01/backup.102/b14191/rcmconfg.htm#BRADV006
Mais informações →

quarta-feira, 17 de janeiro de 2018

Capturar variáveis de SO com dbms_system.get_env

Através do pacote DBMS_SYSTEM do Oracle RDBMS podemos fazer várias coisas, como:



SQL> var VAR varchar2(255)
SQL> exec dbms_system.get_env('ORACLE_HOME',:VAR);

PL/SQL procedure successfully completed.

SQL> print :VAR

VAR
--------------------------------------------------------------------------------
/orabin/app/oracle/product/12.2.0.1/dbhome_1

Exportando uma variável de teste:

Banco=cdb1-> export TESTE="variavel de teste"
Banco=cdb1-> sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Mon Apr 3 03:47:54 2017

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> var VAR varchar2(255)
SQL> exec dbms_system.get_env('TESTE',:VAR);

PL/SQL procedure successfully completed.

SQL> print :VAR

VAR
--------------------------------------------------------------------------------
variavel de teste

Exemplo criando uma function para retorno da variável:

SQL> create or replace function getvar (envvar varchar2) return varchar2 as
output varchar2(4000);
begin
dbms_system.get_env(envvar, output);
return output;
end;
/

Function created.

SQL> select getvar('ORACLE_HOME') from dual;

GETVAR('ORACLE_HOME')
--------------------------------------------------------------------------------
/orabin/app/oracle/product/12.2.0.1/dbhome_1

Exemplo criando uma procedure para retorno da variável:

SQL> create or replace procedure getvar2 (envvar varchar2) as
output varchar2(4000);
begin
dbms_system.get_env(envvar, output);
dbms_output.put_line(output);
end;
/

Procedure created.

SQL> set serveroutpu on
SQL> exec getvar2('TESTE');
variavel de teste

PL/SQL procedure successfully completed.

SQL> exec getvar2('ORACLE_HOME');
/orabin/app/oracle/product/12.2.0.1/dbhome_1

PL/SQL procedure successfully completed.
Mais informações →

sexta-feira, 20 de outubro de 2017

Quando iniciou e terminou a coleta de estatísticas?

Na DBA_OPTSTAT_OPERATIONS é mantido um histórico de todas as operações executadas utilizando a DBMS_STATS, logo, é possível identificar o inicio e fim de varias operações como: 


  • gather_table_stats;
  • lock_schema_stats;
  • gather_fixed_objects_stats;
  • gather_system_stats;
  • gather_schema_stats;
  • gather_dictionary_stats;
  • set_system_stats;
  • delete_table_stats;
  • entre outros.

select operation,
       target,
       to_char(start_time, 'dd/mm/yyyy hh24:mi:ss') start_time,
       to_char(end_time, 'dd/mm/yyyy hh24:mi:ss') end_time
  from DBA_OPTSTAT_OPERATIONS
 where operation = 'gather_system_stats';

OPERATION                      TARGET                         START_TIME          END_TIME
------------------------------ ------------------------------ ------------------- -------------------
gather_system_stats                                           16/10/2017 14:17:21 16/10/2017 14:17:21
gather_system_stats                                           16/10/2017 14:24:13 16/10/2017 14:24:14

select operation,
       target,
       to_char(start_time, 'dd/mm/yyyy hh24:mi:ss') start_time,
       to_char(end_time, 'dd/mm/yyyy hh24:mi:ss') end_time
  from DBA_OPTSTAT_OPERATIONS
 where operation = 'gather_schema_stats';

OPERATION                      TARGET                         START_TIME          END_TIME
------------------------------ ------------------------------ ------------------- -------------------
gather_schema_stats            SCHEMA1                        19/10/2017 00:02:05 19/10/2017 00:22:28
gather_schema_stats            SCHEMA2                        19/10/2017 00:22:28 19/10/2017 00:22:28
gather_schema_stats            SCHEMA3                        19/10/2017 00:22:28 19/10/2017 00:22:28
gather_schema_stats            SCHEMA4                        19/10/2017 00:22:28 19/10/2017 00:22:28
gather_schema_stats            SCHEMA5                        19/10/2017 00:22:34 19/10/2017 00:23:02

select operation,
       target,
       to_char(start_time, 'dd/mm/yyyy hh24:mi:ss') start_time,
       to_char(end_time, 'dd/mm/yyyy hh24:mi:ss') end_time
  from DBA_OPTSTAT_OPERATIONS
 where operation = 'gather_table_stats' and target like '%TABLE1%';

OPERATION                      TARGET                         START_TIME          END_TIME
------------------------------ ------------------------------ ------------------- -------------------
gather_table_stats             SCHEMA1.TABLE1                 24/09/2017 07:36:07 24/09/2017 08:13:19
gather_table_stats             SCHEMA1.TABLE1                 01/10/2017 06:53:58 01/10/2017 07:28:15
gather_table_stats             SCHEMA1.TABLE1                 08/10/2017 07:06:55 08/10/2017 07:41:41

--Identificando o tempo de retenção (em dias):

select dbms_stats.get_stats_history_retention from dual;

GET_STATS_HISTORY_RETENTION
---------------------------
                         31

--Alterando a retenção para para mais ou menos dias:

exec dbms_stats.alter_stats_history_retention(10);

PL/SQL procedure successfully completed.

select dbms_stats.get_stats_history_retention from dual;

GET_STATS_HISTORY_RETENTION
---------------------------
                         10
Mais informações →

quinta-feira, 19 de outubro de 2017

Quando a role foi criada?

Na dba_roles não temos nenhuma coluna informando a data de criação da role, contudo podemos obter a data através da sys.user$

.......................................................................................................................................................................................................................................................................................................................................

SQL> desc dba_roles;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ROLE                                      NOT NULL VARCHAR2(30)
 PASSWORD_REQUIRED                                  VARCHAR2(8)
 AUTHENTICATION_TYPE                                VARCHAR2(11)


SQL> select to_char(ctime,'dd/mm/yyyy hh24:mi:ss') created from sys.user$ where name='RESOURCE';

CREATED
-------------------
16/10/2017 11:15:38
Mais informações →
Postagens mais antigas Página inicial

Translate

# Suporte

# ACE Program

#Oracle

#Oracle
Disclaimer: The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.

#Blog reconhecido

#ARTICULISTA

Marcadores

Postagens populares