Trouver le DDL d’une vue dynamique (V$… ou GV$…)

On utilise v$fixed_view_definition

SELECT * 
FROM v$fixed_view_definition 
where view_name = upper('v$fixed_view_definition')

On obtient :

V$FIXED_VIEW_DEFINITION
SELECT * FROM gv$fixed_view_definition where inst_id = USERENV('Instance')

Et donc, comme on a autre chose que du fromage blanc entre les oreille on passe la requête suivante :

SELECT * 
FROM v$fixed_view_definition 
where view_name = upper('gv$fixed_view_definition')

Pour finalement obtenir :

GV$FIXED_VIEW_DEFINITION
select i.inst_id,kqfvinam,kqftpsel from x$kqfvi i, x$kqfvt t where i.indx = t.indx

C’était pourtant pas si compliqué

(Dés)activer les taches automatiques

Sous Oracle on ne sait jamais si les tâches automatisées (autotasks en langue de Redwood Shores) sont actives ou non, lesquelles sont-elles et comment les activer ou les désactiver.

Lister les tâches automatiques actives

SELECT client_name, status
FROM dba_autotask_client
/
CLIENT_NAME                         STATUS
----------------------------------- ----------
auto optimizer stats collection     ENABLED
auto space advisor                  ENABLED
sql tuning advisor                  ENABLED

En désactiver une (en l’occurrence l’auto space advisor)

BEGIN
  dbms_auto_task_admin.disable('auto space advisor'
                              , NULL
                              , NULL);
END;
/

PL/SQL procedure successfully completed.

Pour vérifier

SELECT client_name, status
FROM dba_autotask_client
/
CLIENT_NAME                         STATUS
----------------------------------- ----------
auto optimizer stats collection     ENABLED
auto space advisor                  DISABLED
sql tuning advisor                  ENABLED

En activer une (en l’occurrence l’auto space advisor)

BEGIN
  dbms_auto_task_admin.enable( 'auto space advisor'
                              , NULL
                              , NULL);
END;
/

PL/SQL procedure successfully completed.

Vérifier

SELECT client_name, status
FROM dba_autotask_client
/
CLIENT_NAME                         STATUS
----------------------------------- ----------
auto optimizer stats collection     ENABLED
auto space advisor                  ENABLED
sql tuning advisor                  ENABLED

C’était pourtant pas si compliqué.

Générer un horodatage régulier

Problématique : on veut générer une suite de dates (surtout les heures, minutes et secondes) depuis en SQL pur

-- nombre de secondes
var nbsec number

-- nombre de valeurs souhaitées 
var nbVals number

-- On veut les 15 premiers multiples de 19 secondes
exec :nbsec := 19
exec :nbVals := 15 

-- La requête
select  to_char( trunc(sysdate-1) 
               + ( rownum/ ( 60 *60 *24 ) ) * :nbsec  
               , 'HH24:MI:SS' ) dt 
from dual
connect by rownum <= :nbVals ; 

Résutat

DT
--------
00:00:19
00:00:38
00:00:57
00:01:16
00:01:35
00:01:54
00:02:13
00:02:32
00:02:51
00:03:10
00:03:29
00:03:48
00:04:07
00:04:26
00:04:45

15 lignes sélectionnées.

C’était pourtant pas si compliqué.

Trouver les informations basiques d’une base Oracle à laquelle on est connecté

La requête

SELECT SYS.UTL_INADDR.get_host_address      IP_ADDR
     , SYS.UTL_INADDR.get_host_name         HOSTNAME
     , SYS.DBMS_UTILITY.CURRENT_INSTANCE    INST#
     , SYS.DBMS_UTILITY.port_string         OS
     , platform_id
     , platform_name
     , name
     , DB_UNIQUE_NAME
     , DBID
     , current_scn
     , decode ( parallel, 'YES', 'RAC', 'NOT RAC') IS_RAC
from v$database natural join v$instance;

Le résultat (splitté pour une meilleure lecture)

IP_ADDR                      HOSTNAME     INST# OS                   
---------------------------- ------------ ----- -------------------- 
fe80::4b5:7ff9:2cca:6ca8%3   ALPHAORIOJO      1 IBMPC/WIN_NT64-9.1.0 

PLATFORM_ID PLATFORM_NAME                  NAME       DB_UNIQUE_NAME 
----------- ------------------------------ ---------- -------------- 
         12 Microsoft Windows x86 64-bit   OJOTST     ojotst     

        DBID CURRENT_SCN IS_RAC
------------ ----------- --------
  2831882428     8207733 NOT RAC

C’était pourtant pas si compliqué !

My Oracle Support - Créer un profile SQL avec des hints

Créer un profile SQL avec des hints

Créer un profile SQL avec des hints nécessite Tuning Pack mais est utile lorsqu’on fait face à un progiciel qui ne peut aller modifier son code. En effet, quel DBA n’est pas régulièrement confronté au problème suivant :

  • J’ai trouvé ce qui ne marche pas dans mon code SQL.
  • J’ai testé avec certains hints et ça a réglé le problème.
  • L’éditeur (ou le développeur) refuse de modifier son code pour implémenter les hints.

Il est possible depuis la version 10g de positionner des hints sur une requête sans aller modifier le code applicatif. La technique utilise le package dbms_sqltune et est donc soumise à licence.

(suite…)

Installer et configurer linux pour se connecter à Oracle avec PHP

Il existe une multitude de moyens pour développer des applications PHP pour Oracle, si vous souhaitez ensuite les mettre à disposition facilement c’est une autre histoire, à moins bien sûr de les livrer sous forme de machines virtuelle.

Cet article décrit pas à pas la démarche qui vous permettra de configurer une machine virtuelle Centos7 contenant un serveur Apache/PHP capable de se connecter à une base Oracle distante.

(suite…)

Installer Oracle Instant Client sur Ubuntu

L’Instant Client, permet la connexion à Oracle passer par la mise en place d’un moteur ou d’un client lourd. Son installation est au départ prévue pour RHEL, Suze ou Unbreakable Linux mais l’installation peut se faire sur d’autres plateformes. Il y a là assez peu de problématiques à surmonter mais tout de même un ou deux détails à mettre en œuvre.

Dans un premier temps il convient d’installer libaio qui est requis pour le bon fonctionnement du client.

root@ojoly # apt-get install libaio1

Ensuite il faut télécharger les fichiers rpm du logiciel en tant que tel sur le site d’Oracle (ce qui requiert un compte OTN). Il faut bien évidemment accepter la licence et télécharger le ou les packages requis (personnellement j’aime bien SQL*Plus, je télécharge donc SQL*plus avec) ce qui me fait 2 packages :

  • oracle-instantclient12.1-basic-12.1.0.1.0-1.i386.rpm
  • oracle-instantclient12.1-sqlplus-12.1.0.1.0-1.i386.rpm

(suite…)

Oracle 12c est sortie … heuu et alors ?

On l’attend plus au moins depuis une bonne année, cette fois ça y est, les premières versions publiques sont sorties et disponibles sur le site d’oracle à leur emplacement habituel (downloads, oracle database … oui j’accepte les conditions d’usage et hop je télécharge pour peu que je sois membre d’OTN sur lequel l’inscription n’engage à rien.) Donc Oracle Database 12c c’est ici que ça se passe.

Que retenir de cette sortie ?

Vu de ma fenêtre peu de choses vont bouleverser la 12c ne va pas chambouler le monde de la base de données d’ici la fin de l’année ni dans les deux ou trois prochaines années simplement parce que les progiciel ne vont pas être validés sur cette version en deux jours (ni deux mois) et que deux ou trois modifications de code incitent à la prudence.

(suite…)