![]() |
||||||||||||||||||||||||||||||||||||||||||||||
|
Les notions du mois de décembre 2000
Les groupes de ressources
(06/12/2000) ORA-1555 snapshot is too old
(05/12/2000) Les transactions discrètes
(04/12/2000) Modifier le stockage d'un index
(04/12/2000) Renommer les répertoires pour une standby database (04/12/2000) Une des nouveautés d’oracle 8i est l’apparition des RESOURCE GROUPS. Un objet de ce type permet de stipuler un taux d’utilisation du CPU pour un groupe d’utilisateurs. Pour utiliser les groupes de ressources, le DBA doit instaurer un PLAN de RESSOURCES. De cette maniere le DBA peut octroyer des ressources (à plusieurs niveaux).
Création d’un plan de ressources SQL> set serveroutput on
SQL> execute dbms_resource_manager.create_pending_area;
PL/SQL procedure successfully completed.
SQL> --
SQL> execute dbms_resource_manager.delete_plan -
> (plan=>'UTILISATEURS') ;
PL/SQL procedure successfully completed.
SQL> execute dbms_resource_manager.delete_consumer_group -
> (consumer_group=>'BATCH') ;
PL/SQL procedure successfully completed.
SQL> execute dbms_resource_manager.delete_consumer_group -
> (consumer_group=>'TP') ;
PL/SQL procedure successfully completed.
SQL> --
SQL> --
SQL> execute dbms_resource_manager.create_plan -
> (plan=>'UTILISATEURS', comment=>'jour ou nuit') ;
PL/SQL procedure successfully completed.
SQL> --
SQL> execute dbms_resource_manager.create_consumer_group -
> (consumer_group=>'TP', comment=>'Saisie');
PL/SQL procedure successfully completed.
SQL> execute dbms_resource_manager.create_consumer_group -
> (consumer_group=>'BATCH', comment=>'Batch');
PL/SQL procedure successfully completed.
SQL> --
SQL> execute dbms_resource_manager.create_plan_directive -
> (plan => 'UTILISATEURS', group_or_subplan => 'BATCH', -
> comment => 'utilisateurs de nuit', cpu_p1 => 20, cpu_p2 => 0, -
> parallel_degree_limit_p1 => 4 );
PL/SQL procedure successfully completed.
SQL> execute dbms_resource_manager.create_plan_directive -
> (plan => 'UTILISATEURS', group_or_subplan => 'TP', -
> comment => 'utilisateurs de nuit', cpu_p1 => 75, cpu_p2 => 0, -
> parallel_degree_limit_p1 => 0 );
PL/SQL procedure successfully completed.
SQL> execute dbms_resource_manager.create_plan_directive -
> (plan => 'UTILISATEURS', group_or_subplan => 'OTHER_GROUPS', -
> comment => 'Others', cpu_p1 => 5, cpu_p2 => 0, -
> parallel_degree_limit_p1 => 0 );
PL/SQL procedure successfully completed.
SQL> --
SQL> execute dbms_resource_manager.validate_pending_area;
PL/SQL procedure successfully completed.
SQL> --
SQL> execute dbms_resource_manager.submit_pending_area;
PL/SQL procedure successfully completed.
SQL> --
SQL> execute DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP -
> ( 'ANP', 'TP', FALSE)
PL/SQL procedure successfully completed.
SQL> --
SQL> execute dbms_resource_manager.set_initial_consumer_group -
> (user=>'ANP', consumer_group=>'TP');
PL/SQL procedure successfully completed.
SQL> spool off
Le package dbms_resource_manager fournit une pléiade de procédures qui
implémente ces options. La documentation du package se trouve dans
Oracle8i Supplied PL/SQL Packages Reference, un regard peut
être jeté dans le commentaires trouvés dans rdbms/admin/dbmsrmad.sql.
Administrer les plans de ressources
Plusieurs vues permettent de vérifier les objets nécessaires aux plans de ressources.
Un listing global des
résultats est présenté ensuite.
DBA_RSRC_PLANS
Les plans de ressources et leurs statuts
SQL> select plan, status from dba_rsrc_plans;
PLAN STATUS
--------------- ------
UTILISATEURS ACTIVE
SYSTEM_PLAN ACTIVE
DBA_RSRC_PLAN_DIRECTIVES
Détails des directives de plans des ressourcesSQL> select plan, group_or_subplan, cpu_p1, cpu_p2, 2 parallel_degree_limit_p1, status 3 from dba_rsrc_plan_directives 4 order by plan; PLAN Sous Plan CPU_P1 CPU_P2 Parallel STATUS --------------- --------------- ------ ------ -------- ------ SYSTEM_PLAN SYS_GROUP 100 0 0 ACTIVE SYSTEM_PLAN OTHER_GROUPS 0 100 0 ACTIVE SYSTEM_PLAN LOW_GROUP 0 0 0 ACTIVE UTILISATEURS BATCH 20 0 4 ACTIVE UTILISATEURS TP 75 0 0 ACTIVE UTILISATEURS OTHER_GROUPS 5 0 0 ACTIVE DBA_RSRC_CONSUMER_GROUPS
Les groupes de consommateurs de ressources
Les privileges des groupes de consommateurs de ressources
La vue DBA_USERS contient une colonne (INITIAL_RSRC_CONSUMER_GROUP) qui montre l’appartenence initiale de l’utilisateur. Les vues dynamiques V$RSRC_CONSUMER_GROUP et V$RSRC_PLAN montrent des informations actuelles. V$SESSION est enrichie d’une nouvelle colonne, RESOURCE_CONSUMER_GROUP. Lors d'une lecture consistante Oracle peut ne plus trouver les informations nécessaires dans le rollback segment parce que le bloc en question était marqué libre et une autre transaction l’a utilisé. Il existe deux causes fondamentales de cette erreur, a) l'information du rollback segment elle-même est effacée ou b) l'information du header est effacée. Dans les deux cas, la solution immédiate est d’augmenter la taille du rollback segment, de diminuer le nombre de commits ou ajouter des rollback segments, pour tarder l’écrasement d’un bloc libéré. Dans le deuxième cas (b), forcer le delayed cleanout plus tôt en demandant un full table scan (SELECT * FROM LATABLE;) D’autres causes possibles sont la relecture d'un bloc dans une transaction discrète ou le shrink d'un rollback segment. Bien que les solutions proposées sont valables, il faut comprendre qu’elle ne garantissent pas la résolution du problème. La réelle solution est d’éviter de permettre à des transactions qui durent longtemps (BATCH) de partager les mêmes données avec des transactions qui durent très peu (OLTP).
Il est possible de ne pas utiliser les rollback segments grâce aux transactions discrètes, lors des activités très rapides et qui modifient peu de blocs de données. Les transactions qui se prêtent à être discrétisées sont celles qui Q. Lors de l'implémentation d'une standby database, j'ai un problème avec le paramètre DB_FILE_ NAME_CONVERT: j'ai des fichiers de la base de production qui ont comme racines : /dbf1/...., /dbf2/.... que je voudrais changer en /dbf3/..., /dbf4/... A. Il n'est pas possible de renommer les fichiers automatiquement. Oracle sait faire un renommage de type '/vieux' en '/nouv' avec db_file_name_convert = '/vieux', '/nouv' et renommera /vieux/dbf1 en /nouv/dbf1, etc. Dans la situation présentée, faire un alter database rename '/dbf1/..' to '/dbf3..'; etc Q. Comment modifier le stockage d'un index ?
A. Ca dépend de la version d'Oracle employée.Comme d'habitude ! Quelle version d'Oracle ?
SQL> connect anp/anp@idba
|
|||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||