Changer la fréquence et la rétention des snapshots AWR

La procédure à utiliser :

PROCEDURE MODIFY_SNAPSHOT_SETTINGS
 Argument Name                Type                    In/Out Default?
 ---------------------------- ----------------------- ------ --------
 RETENTION                    NUMBER                  IN     DEFAULT
 INTERVAL                     NUMBER                  IN     DEFAULT
 TOPNSQL                      NUMBER / VARCHAR2       IN     DEFAULT 
 DBID                         NUMBER                  IN     DEFAULT
  • RETENTION s’exprime en minutes (minimum 1 jour, maximum 100 ans)
  • INTERVAL s’exprime en minutes (minimum 10 minutes, maximum 1 an)

La commande (1 snap toutes les 15 minutes, 2 semaines de rétention):

begin
 dbms_workload_repository.modify_snapshot_settings( 60*24*14, 15 );
end;
/

C’était pourtant pas si compliqué !

Vérifier le dernier PSU appliqué PSU sur Oracle

La commande

select * from registry$history
/

Le résultat (11.2.0.4 PSU 1 )

ACTION_TIME                    ACTION                         
------------------------------ ------------------------------ 
29-JAN-15 10.38.47.581603 AM   APPLY                          

NAMESPACE                      VERSION     ID COMMENTS        
------------------------------ ---------- --- --------------- 
SERVER                         11.2.0.4     1 PSU 11.2.0.4.1  

BUNDLE_SERIES
------------------------------
PSU

C’était pourtant pas si compliqué !

Trouver les “lossy datas”

Vous avez ouvert une SR auprès du support Oracle(c) et l’analyste vous demande de trouver les “lossy datas”. sans plus d’explication que ça …

En fait ça se trouve avec CSSCAN

Il faut l’installer en tant que SYS sous SQLPLUS

set TERMOUT ON
set ECHO ON
spool csminst.log
drop user csmig cascade;
@?/rdbms/admin/csminst.sql

Et il faut le lancer avec une commande shell

csscan tochar=AL32UTF8 full=y

3 fichiers texte sont alors générés :

  • scan.out dans lequel est redirigée la sortie écran
  • scan.err dans lequel sont stockées les éventuelles erreurs de conversion
  • scan.txt qui stocke le rapport d’analyse

C’était pourtant pas si compliqué !

Enregistrement automatique des services par PMON

  • Si votre base est bien installée.
  • Si votre serveur est bien configuré.
  • Si un service est créé dans la base (ok, il y en a toujours un).
  • Si le listener LISTENER est démarré sur le port 1521.
  • Et même si les paramètres local_listener ou remote_listener ne sont pas renseignés.

ALORS pmon enregistre le service auprès du listener.

Oui mais des fois, ça ne marche pas, et on ne sait pas trop pourquoi.
(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…)

SQLPlus l(e seul)’outil qu’il vous faut pour administrer vos bases de données Oracle

Cet article est repris d’un ancien blog et fusionné avec un autre

SQLPlus est l’outil incontournable du DBA Oracle. Même si beaucoup n’utilisent que des interfaces graphiques, il arrive un moment ou un autre où il doit se connecter à une machine qui ne propose pas cette commodité et dès lors, l’outil basique, livré avec le moteur, devient un passage obligé voire incontournable ou presque.

Je liste ici quelques trucs, astuces, commandes qui permettent d’utiliser SQLPlus de manière sympathique et sans trop de prise de tête.

(suite…)

Mes Tricks SQL*Plus

Je suis DBA depuis poulala et je m’entête à ne pas utiliser d’interfaces graphiques coassantes ou non pour administrer mes bases de données pour les bonnes (ou mauvaises) raisons que :

  • C’est pas assez hardcore
  • Ça fait des trucs sans me prévenir
  • Faudrait que j’aprenne à m’en servir et j’ai d’autres chats à fouetter
  • J’aime pas wind….s
  • Le seul java que j’aime est de genre féminin
  • On a (presque) toujours un petit SQL*PLUS sous la main

Donc j’utilise SQL*Plus et son interface si (peu) riche. Alors pour les timides qui n’osent pas entrer dans ce formidable outil et qui un jour s’y retrouvent contraints je couche ici quelques raccourcis bien pratiques qui rendent l’outil puissant, formidable voire incontournable si on a besoin d’aller vraiment vite.

Se connecter à une base avec sqlplus

Si votre tnsnames.ora est renseigné

$ sqlplus
[...]
Entrez le nom utilisateur : <utilisateur>/<mot de passe>@<alias tns>
[...]
SQL>

Si votre tnsnames.ora n’est pas renseigné

$ sqlplus
[...]
Entrez le nom utilisateur : <utilisateur>/<mot de passe>@//<serveur>:<port>/<service>
[...]
SQL>

Voir les constantes définies

SQL> def
DEFINE _DATE = "09/10/12" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "//127.0.0.1:1521/orcl" (CHAR)
DEFINE _USER = "SCOTT" (CHAR)
DEFINE _PRIVILEGE = "" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1102000300" (CHAR)
DEFINE _EDITOR = "vi" (CHAR)
DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR)
DEFINE _O_RELEASE = "1102000300" (CHAR)
DEFINE _RC = "1" (CHAR)
SQL>

Utiliser un dépôt de scripts centralisé

SQL> def r=http://depot/scripts/sql
SQL> @&r/cre_super_user.sql
Utilisateur cree, compte verouille

On peut s’amuser à écrire les scripts dans un langage web comme PHP et donc protéger l’accès au scripts (plus ou moins).

Affecter et visualiser les variables de liaison (bind variables) définies dans la session

SQL> variable toto number
SQL> exec :toto:=7
SQL> variable titi number
SQL> exec :titi:=9
SQL> print

TOTO
----------
7

TITI
----------
9

Sauvegarder et restaurer les settings avant de les modifier

Sauvegarder

SQL> store set settings_sqlplus replace

Restaurer

SQL> @settings_sqlplus

Créer un ficher de sortie propre

SQL> set ver off       -- evite l'affichage des réécritures de constantes
SQL> set lin 32767 -- taille maxi d'une ligne
SQL> set trimspool on -- enlève les blancs en fin de ligne dans le fichier de sortie
SQL> set pages 50000 -- taille maxi d'une page ou set pages 0 emb on newp none L. Schneider :
-- http://laurentschneider.com/wordpress/2007/06/sqlplus-pagesize-explained.html
SQL> set termout off -- évite la sortie sur écran, seul le fichier sera renseigné
SQL> set echo off -- évite l'affichage des requêtes et donc leur écriture
SQL> set feed off -- évite les infos de fin de requêtes (n lignes ...)
SQL> set timi off -- évite le chronométrage en fin de requête
SQL> set autot off -- évite la production d'un plan en fin de requête
SQL> set long 9999999 -- permet l'affichage de longs de 9999999 octets
SQL> set longc 9999999 -- permet l'affichage de longs de 9999999 caractères*

SQL> clear computes -- supprime les agrégations automatiques de colonnes
SQL> clear columns -- supprime les formatages de colonnes
SQL> clear breaks -- supprime les sauts

SQL> TTITLE off -- supprime les titres de haut de requête (ou de pages)
SQL> BTITLE off -- supprime les titres de bas de requête
SQL> REPHEADER off -- supprime les en-tête de rapports
SQL> REPFOOTER off -- supprime les pieds de rapports

SQL> spool <fichier de sortie>
SQL> -- instructions
SQL> spool off

Concatener des constantes

SQL> def NOM_FIC=monfic
SQL> spool &&MON_FIC..txt
SQL> -- instructions
SQL> spool off

Impossible de se connecter mais analyse requise

$ sqlplus -prelim

SQL*Plus: Release 11.2.0.3.0 Production on Mer. Oct. 10 08:36:15 2012

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

Entrez le nom utilisateur : / as sysdba
SQL>

Cette connexion est dite préliminaire et ne permet que d’utiliser oradebug ou de faire un shutdown abort
Voilà déjà de quoi s’amuser. Avec ces quelques infos/trucs vous pouvez administrer efficacement tout un parc de bases de données sans passer par des interfaces lourdes et (bien souvent) inutiles. Reste à connaitre le SQL et le catalogue Oracle mais après tout vous êtes DBA non ?

Ajouter une instance RAC en mode silencieux avec DBCA

La commande est “ultra-simple” :

dbca -silent 
-addInstance
-gdbName $DBUN
-nodelist $NODELIST
-listeners $LISTENERS
-sysDBAUserName SYS
-sysDBAPassword $SYSPASSWD

Où DBUN est le Database Unique Name de la base de donnée, NODELIST la liste de hostnames de noeuds du RAC, LISTENERS représente la liste des listener locaux et SYSPASSWD le mot de passe de l’utilisateur SYS

Calcul des statistiques

Afficher les valeurs des paramètres utlisés par défaut par dbms_stats

col sname for a30
col SPARE4 for a50

select SNAME, spare4 from SYS.OPTSTAT_HIST_CONTROL$ ;

SNAME SPARE4
------------------------------ --------------------------------------------------
SKIP_TIME
STATS_RETENTION
TRACE 0
DEBUG 0
SYS_FLAGS 1
CASCADE DBMS_STATS.AUTO_CASCADE
ESTIMATE_PERCENT DBMS_STATS.AUTO_SAMPLE_SIZE
DEGREE NULL
METHOD_OPT FOR ALL COLUMNS SIZE AUTO
NO_INVALIDATE TRUE
GRANULARITY AUTO
AUTOSTATS_TARGET AUTO

12 rows selected.

Les valeurs ici ne sont déjà pas les valeurs utilisée par oracle par défaut, NO_INVALIDATE a été modifiée

Ecrire une procédure de calcul des statistiques

Pour un client, j’ai écrit très rapidement cette procédure de calcul de statistiques. Très (trop) imparfaite

create or replace procedure sys.calc_stats is
/*
* Procédure de calcul des statistiques ****************************
*
* Les statistiques son calculees sur les tables dont le cumul des modifications
* (insert / delete / updates) dépasse 5% du volume de la table. Elle invalide
* les plans en memoire et ignore ertains utilisateurs. Son parallelisme est de 4
* et les statistiques ne sont pas calculees sur les index de la table
*
* ******************************************************************************
* Version 1.0 pour ************ sur ORA 102040
* ******************************************************************************
*/
begin
for c in (
select tm.table_name tbn
, t.owner tbo
from ( select table_name
, table_owner
, sum(inserts) inserts
, sum(deletes) deletes
, sum(updates) updates
from dba_tab_modifications
where table_owner not in ( 'SYS', 'SYSTEM', 'SYSMAN', 'TOOLS'
, 'DBSNMP', 'ANONYMOUS', 'WMSYS', 'GOLDENGATE'
, 'XDB', 'TOAD', 'OUTLN', 'TSMSYS', 'ORDSYS')
group by table_name, table_owner ) tm
inner join dba_tables t
on ( t.owner=tm.table_owner
and t.table_name=tm.table_name )
where 1=1
and t.owner not in ( 'SYS', 'SYSTEM', 'SYSMAN', 'TOOLS'
, 'DBSNMP', 'ANONYMOUS', 'WMSYS', 'GOLDENGATE'
, 'XDB', 'TOAD', 'OUTLN', 'TSMSYS', 'ORDSYS')
and (tm.inserts+tm.updates+tm.deletes)/(nvl(t.num_rows,0)+1) > 0.05
order by nvl(t.num_rows,0) asc )
loop
dbms_stats.gather_table_stats(c.tbo, c.tbn, null, null, null, 'for all indexed columns size repeat', 4, 'ALL', FALSE, null, null, null, FALSE );
end loop;
end;
/

Manque du paramétrage et de l’automatisme

Paramétrage
  • seuil de calcul
  • no_invalidate
Automatismes
  • Echantillonnage
  • Cascade

A faire évoluer donc …