Overblog Tous les blogs Top blogs Technologie & Science Tous les blogs Technologie & Science
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU

Ora-Linux

Des notes de travail, un pense-bête, autour des bases de données et serveurs d'applications Oracle, et Linux; voilà ce qu'on peut trouver ici ...


Oracle Database : vues qu'il est bon de connaitre et autres bidules ...

Publié par Ora-Linux sur 13 Avril 2017, 15:02pm

Catégories : #Oracle Database

Sur les droits et privilèges

  • USER_ROLE_PRIVS
  • USER_SYS_PRIVS
  • USER_TAB_PRIVSS
  • USER_ERRORS
  • DBA_ERRORS

Un bout de code pour tester les perfs CPU en PL/Sql :

SET SERVEROUTPUT ON
SET TIMING ON
DECLARE
  n NUMBER := 0;
BEGIN
  FOR f IN 1..10000000
  LOOP
    n := MOD (n,999999) + SQRT (f);
  END LOOP;
  DBMS_OUTPUT.PUT_LINE ('Res = '||TO_CHAR (n,'999999.99'));
END;
/

  • DBA_HIST_TBSPC_SPACE_USAGE (à partir de 10g) conserve un historique de l'utilisation des tablespaces (10 jours par défaut, avec collecte toutes les heures) :

SELECT  t.Name,Tablespace_Usedsize "Espace utilisé(nb blocks)",Rtime
FROM  DBA_HIST_TBSPC_SPACE_USAGE h, v$TABLESPACE t
WHERE  h.Tablespace_id=t.TS#
ORDER BY t.Name,Rtime;

Taille courante de la PGA par session :

SELECT sid, name , value
FROM v$sesstat s1, v$statname s2
WHERE s1.statistic#  = s2.statistic# and s2.name like '%pga memory';

V$BH est une vue du dictionnaire de données Oracle, qui permet de visualiser le contenu des blocks présents en cours d'utilisation dans le Buffer Cache (1 ligne par block) :

 SELECT OWNER,
        OBJECT_NAME
   FROM  DBA_OBJECTS  O,
        V$BH         B
WHERE  O.DATA_OBJECT_ID = B.OBJD

Un profil SQL issu par exemple d'un Tuning Advisor au travers de la DB Console, est un ensemble de HINTs, associés à une requête au moment de l'exécution de celle-ci. Les HINT sont basés non seulement sur les statistiques concernant les tables de la requête, mais aussi sur les relations entre les tables établies par la requête.

Un Stored Outline, ou Plan d'Exécution Stocké est, comme son nom l'indique, une version donnée d'un plan d'exécution d'une requête stockée dans le dictionnaire de données. L'utilisation possible des Stored Outlines est de vouloir se passer des HINTs en cas de manque de stabilité d'une requête. Pour celà, on procède à la création de 2 Outlines : l'original (à priori pas bon) et celui optimisé, pour le coup, avec des HINTs, puis on supprime le premier !

SET pages 200
SET LINES 999
SELECT * FROM V$RESOURCE_LIMIT;
 
RESOURCE_NAME                  CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_AL LIMIT_VALU
------------------------------ ------------------- --------------- ---------- ----------
processes                                       31              50        400        400
sessions                                        38              58        445        445
enqueue_locks                                   87             120       5790       5790
enqueue_resources                              110             327       2176  UNLIMITED
ges_procs                                        0               0          0          0
ges_ress                                         0               0          0  UNLIMITED
ges_locks                                        0               0          0  UNLIMITED
ges_cache_ress                                   0               0          0  UNLIMITED
ges_reg_msgs                                     0               0          0  UNLIMITED
ges_big_msgs                                     0               0          0  UNLIMITED
ges_rsv_msgs                                     0               0          0          0
gcs_resources                                    0               0          0          0
gcs_shadows                                      0               0          0          0
dml_locks                                       20             295       1956  UNLIMITED
temporary_table_locks                            0               3  UNLIMITED  UNLIMITED
transactions                                     3              16        489  UNLIMITED
branches                                         0               0        489  UNLIMITED
cmtcallbk                                        1               3        489  UNLIMITED
sort_segment_locks                               1              19  UNLIMITED  UNLIMITED
max_rollback_segments                           26              26        489      65535
max_shared_servers                               1               1  UNLIMITED  UNLIMITED
parallel_max_servers                             0              16        160       3600
 
22 rows selected.

Le script suivant 'kill' toutes les sessions appartenant à UTIENT1 plus vieilles de 2 heures :

SELECT 'alter system kill session '''||sid||','||serial#||''' immediate;'
FROM v$session
WHERE username='UTIENT1' AND seconds_in_wait >7200
/

Envie de killer des sessions en ligne de commande ? Go :

SELECT username,sid,serial#
FROM v$session
WHERE username <> 'SYS' AND username <> 'SYSTEM' AND username <> 'SYSMAN' AND username <> 'DBSNMP';
 
SELECT 'alter system kill session '''||sid||','||serial#||''' immediate;' 
FROM v$session
WHERE username NOT IN ('SYS','SYSTEM','SYSMAN','DBSNMP');

Exemple d'utilisation de USERENV :

SQL> SHOW parameter name
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert                 string      /u02/oradata/musrefp1, +DG01/m
                                                 uspmp1/datafile
db_name                              string      muspmp1
db_unique_name                       string      muspmp1
global_names                         BOOLEAN     FALSE
instance_name                        string      muspmp11
lock_name_space                      string
log_file_name_convert                string
service_names                        string      muspmp1, TAF
SQL> SELECT sys_context('USERENV','DB_NAME') FROM dual;
 
SYS_CONTEXT('USERENV','DB_NAME')
--------------------------------------------------------------------------------
muspmp1

ADDM et AWR en ligne de commande :

Plutôt que d'utiliser la lourde console Enterprise Manager, on a la possiblité d'obtenir rapidement
et facilement les même rapports liés aux performance d'une base de données, en ligne de commande,
sous forme d'un fichier texte.

  $ sqlplus / as sysdba
  > @?/rdbms/admin/addmrpt.sql

et

  > @?/rdbms/admin/awrrpt.sql

Le premier nous donne un rapport ADDM (Automatic Database Diagnostic Monitor) qui fournit
un diagnostic des problèmes à régler en se basant sur les données de AWR (Automatic Workload Repository).
Le second est un rapport détaillé AWR, un peu comme celui d'un Statspack.

D'ailleurs, ceci n'est disponible que pour la version Enterprise, si tu bosses sur une version Standard,
tu devras te contenter de Statspack ...

Exemple de requêtes volontairement très consommatrice en I/O :

-- Sur Premium
SELECT /* full (t) */ count(*) FROM dwhpv3.DTWH_FCT_LIGNE_REMB t;
 
-- Un produit cartésien
SELECT count(*) FROM dba_tables a, dba_tables b;

Afficher le plan d'exécution d'une requête sous SQL*Plus :

SQL> EXPLAIN plan FOR
     SELECT deptno FROM BIGDEPTENT WHERE dname='OPERATIONS' AND loc='BOSTON' AND code_entite=1;
 
Explained.
 
SQL> SELECT *FROM TABLE(dbms_xplan.display);
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1255895898
 
--------------------------------------------------------------------------------
| Id  | Operation         | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |            | 50001 |  1123K|   438   (1)| 00:00:06 |
|1 |  TABLE ACCESS FULL| BIGDEPTENT | 50001 |  1123K|   438   (1)| 00:00:06 |
--------------------------------------------------------------------------------
 
Predicate Information (IDENTIFIED BY operation id):
---------------------------------------------------
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
 
   1 - filter("LOC"='BOSTON' AND "DNAME"='OPERATIONS' AND
              "CODE_ENTITE"=1)
 
14 rows selected.

Connexion SQLPLUS sans TNSNAMES :

sqlplus nom/mot_de_passe@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=adresse_ip)(PORT=1521)))(CONNECT_DATA=(SID=nom_instance)))

Infos synthétiques ici : http://psoug.org/reference/dbms_feature_usage.html et note Metalink ”Determining Installed Features/Options, Usage and Usage Statistics [ID 1348056.1]

SET linesize 170
col name format a43
col description format a126
 
SELECT name, description
FROM dba_feature_usage_statistics
ORDER BY 1;
 
SELECT name, detected_usages
FROM dba_feature_usage_statistics
ORDER BY 1;

-- voir si les composants installés sont valides
col comp_name format a40
SELECT comp_name, version, STATUS FROM dba_registry;
 
-- visualiser l'utilisation des options installées
SELECT name "feature", detected_usages "Used", first_usage_date "FROM", last_usage_date "TO"
FROM dba_feature_usage_statistics;

# voir les patchs installés sur un noyau de BDD
$ORACLE_HOME/OPatch/opatch lsinv
$ORACLE_HOME/OPatch/opatch lsinv -bugs_fixed
$ORACLE_HOME/OPatch/opatch lsinv -bugs_fixed | grep -i ‘database psu’

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
A
beau blog. un plaisir de venir flâner sur vos pages. une belle découverte et un enchantement.N'hésitez pas à venir visiter mon blog. lien sur pseudo. au plaisir
Répondre

Archives

Nous sommes sociaux !

Articles récents