

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Exécution des tâches système courantes pour les instances de bases de données Oracle
<a name="Appendix.Oracle.CommonDBATasks.System"></a>

Vous trouverez ci-dessous des informations sur la façon d'effectuer certaines tâches DBA courantes liées au système sur vos instances de base de données Amazon RDS exécutant Oracle. Pour offrir une expérience de service géré, Amazon RDS ne fournit pas l'accès shell aux instances de base de données et limite l'accès à certaines tables et procédures système qui requièrent des privilèges avancés. 

**Topics**
+ [

# Déconnexion d'une session
](Appendix.Oracle.CommonDBATasks.DisconnectingSession.md)
+ [

# Terminer une session
](Appendix.Oracle.CommonDBATasks.KillingSession.md)
+ [

# Annulation d'une instruction SQL dans une session
](Appendix.Oracle.CommonDBATasks.CancellingSQL.md)
+ [

# Activation et désactivation de sessions restreintes
](Appendix.Oracle.CommonDBATasks.RestrictedSession.md)
+ [

# Vidage du pool partagé
](Appendix.Oracle.CommonDBATasks.FlushingSharedPool.md)
+ [

# Octroi des privilèges SELECT ou EXECUTE aux objets SYS
](Appendix.Oracle.CommonDBATasks.TransferPrivileges.md)
+ [

# Retrait des privilèges SELECT ou EXECUTE sur les objets SYS
](Appendix.Oracle.CommonDBATasks.RevokePrivileges.md)
+ [

# Gestion des vues RDS\$1X\$1 pour les instances de base de données Oracle
](Appendix.Oracle.CommonDBATasks.X-dollar.md)
+ [

# Attribution de privilèges à des utilisateurs non-maîtres
](Appendix.Oracle.CommonDBATasks.PermissionsNonMasters.md)
+ [

# Création de fonctions personnalisées pour vérifier les mots de passe
](Appendix.Oracle.CommonDBATasks.CustomPassword.md)
+ [

## Configuration d'un serveur DNS personnalisé
](#Appendix.Oracle.CommonDBATasks.CustomDNS)
+ [

# Activation et désactivation des événements de diagnostic système
](Appendix.Oracle.CommonDBATasks.SystemEvents.md)

# Déconnexion d'une session
<a name="Appendix.Oracle.CommonDBATasks.DisconnectingSession"></a>

Pour déconnecter la session en cours en mettant fin au processus serveur dédié, utilisez la procédure Amazon RDS `rdsadmin.rdsadmin_util.disconnect`. La procédure `disconnect` possède les paramètres suivants. 


****  

| Nom du paramètre | Type de données | Par défaut | Obligatoire | Description | 
| --- | --- | --- | --- | --- | 
|  `sid`  |  nombre  |  —  |  Oui  |  Identifiant de session.  | 
|  `serial`  |  nombre  |  —  |  Oui  |  Numéro de série de la session.  | 
|  `method`  |  varchar  |  'IMMEDIATE'  |  Non  |  Les valeurs valides sont `'IMMEDIATE'` ou `'POST_TRANSACTION'`.  | 

L'exemple suivant déconnecte une session.

```
begin
    rdsadmin.rdsadmin_util.disconnect(
        sid    => sid, 
        serial => serial_number);
end;
/
```

Pour obtenir l'identifiant et le numéro de série de la session, interrogez la vue `V$SESSION`. L'exemple suivant obtient toutes les sessions pour l'utilisateur `AWSUSER`.

```
SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE USERNAME = 'AWSUSER';
```

La base de données doit être ouverte pour pouvoir utiliser cette méthode. Pour plus d'informations sur la déconnexion d'une session, consultez [ALTER SYSTEM (MODIFIER SYSTÈME)](http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_2014.htm#SQLRF53166) dans la documentation Oracle. 

# Terminer une session
<a name="Appendix.Oracle.CommonDBATasks.KillingSession"></a>

Pour arrêter une session, utilisez la procédure Amazon RDS `rdsadmin.rdsadmin_util.kill`. La procédure `kill` possède les paramètres suivants.


****  

| Nom du paramètre | Type de données | Par défaut | Obligatoire | Description | 
| --- | --- | --- | --- | --- | 
|  `sid`  |  nombre  |  —  |  Oui  |  Identifiant de session.  | 
|  `serial`  |  nombre  |  —  |  Oui  |  Numéro de série de la session.  | 
|  `method`  |  varchar  |  null  |  Non  |  Les valeurs valides sont `'IMMEDIATE'` ou `'PROCESS'`. Si vous spécifiez `IMMEDIATE`, cela a le même effet que d'exécuter l'instruction suivante : <pre>ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE</pre> Si vous spécifiez `PROCESS`, vous résiliez les processus associés à une séance. Spécifiez `PROCESS` uniquement si la résiliation de la session à l'aide de `IMMEDIATE`n'a pas abouti.  | 

Pour obtenir l'identifiant et le numéro de série de la session, interrogez la vue `V$SESSION`. L'exemple suivant obtient toutes les sessions pour l'utilisateur *AWSUSER*.

```
SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE USERNAME = 'AWSUSER';
```

L'exemple suivant met fin à une session.

```
BEGIN
    rdsadmin.rdsadmin_util.kill(
        sid    => sid, 
        serial => serial_number,
        method => 'IMMEDIATE');
END;
/
```

L'exemple suivant résilie les processus associés à une séance.

```
BEGIN
    rdsadmin.rdsadmin_util.kill(
        sid    => sid, 
        serial => serial_number,
        method => 'PROCESS');
END;
/
```

# Annulation d'une instruction SQL dans une session
<a name="Appendix.Oracle.CommonDBATasks.CancellingSQL"></a>

Pour annuler une instruction SQL dans une session, utilisez la procédure Amazon RDS `rdsadmin.rdsadmin_util.cancel`.

**Note**  
Cette procédure est prise en charge pour Oracle Database 19c (19.0.0) et toutes les versions majeures et mineures ultérieures de RDS for Oracle.

La procédure `cancel` possède les paramètres suivants. 


****  

| Nom du paramètre | Type de données | Par défaut | Obligatoire | Description | 
| --- | --- | --- | --- | --- | 
|  `sid`  |  nombre  |  —  |  Oui  |  Identifiant de session.  | 
|  `serial`  |  nombre  |  —  |  Oui  |  Numéro de série de la session.  | 
|  `sql_id`  |  varchar2  |  null  |  Non  |  Identifiant SQL de l'instruction SQL.   | 

L'exemple suivant annuler une instruction SQL dans une session.

```
begin
    rdsadmin.rdsadmin_util.cancel(
        sid    => sid, 
        serial => serial_number,
        sql_id => sql_id);
end;
/
```

Pour obtenir l'identifiant et le numéro de série de la session ainsi que l'identifiant SQL d'une instruction SQL, interrogez la vue `V$SESSION`. L'exemple suivant obtient toutes les sessions et les identifiants SQL pour l'utilisateur `AWSUSER`.

```
select SID, SERIAL#, SQL_ID, STATUS from V$SESSION where USERNAME = 'AWSUSER';
```

# Activation et désactivation de sessions restreintes
<a name="Appendix.Oracle.CommonDBATasks.RestrictedSession"></a>

Pour activer et désactiver des sessions restreintes, utilisez la procédure Amazon RDS `rdsadmin.rdsadmin_util.restricted_session`. La procédure `restricted_session` possède les paramètres suivants. 


****  

| Nom du paramètre | Type de données | Par défaut | Oui | Description | 
| --- | --- | --- | --- | --- | 
|  `p_enable`  |  booléen  |  true  |  Non  |  Définissez ce paramètre sur `true` pour activer les sessions restreintes ou sur `false` pour les désactiver.   | 

L'exemple suivant montre comment activer et désactiver les sessions restreintes. 

```
/* Verify that the database is currently unrestricted. */

SELECT LOGINS FROM V$INSTANCE;
 
LOGINS
-------
ALLOWED

/* Enable restricted sessions */

EXEC rdsadmin.rdsadmin_util.restricted_session(p_enable => true);
 

/* Verify that the database is now restricted. */

SELECT LOGINS FROM V$INSTANCE;
 
LOGINS
----------
RESTRICTED
 

/* Disable restricted sessions */

EXEC rdsadmin.rdsadmin_util.restricted_session(p_enable => false);
 

/* Verify that the database is now unrestricted again. */

SELECT LOGINS FROM V$INSTANCE;
 
LOGINS
-------
ALLOWED
```

# Vidage du pool partagé
<a name="Appendix.Oracle.CommonDBATasks.FlushingSharedPool"></a>

Pour vider le pool partagé, utilisez la procédure Amazon RDS `rdsadmin.rdsadmin_util.flush_shared_pool`. La procédure `flush_shared_pool` ne comporte aucun paramètre. 

L'exemple suivant vide le pool partagé.

```
EXEC rdsadmin.rdsadmin_util.flush_shared_pool;
```

## Vidage du cache de tampon
<a name="Appendix.Oracle.CommonDBATasks.FlushingBufferCache"></a>

Pour vider le cache de tampon, utilisez la procédure Amazon RDS `rdsadmin.rdsadmin_util.flush_buffer_cache`. La procédure `flush_buffer_cache` ne comporte aucun paramètre. 

L'exemple suivant vide le cache des tampons.

```
EXEC rdsadmin.rdsadmin_util.flush_buffer_cache;
```

## Vider le cache Smart Flash de la base de données
<a name="Appendix.Oracle.CommonDBATasks.flushing-shared-pool"></a>

Pour vider le cache Smart Flash de la base de données, utilisez la procédure Amazon RDS `rdsadmin.rdsadmin_util.flush_flash_cache`. La procédure `flush_flash_cache` ne comporte aucun paramètre. L'exemple suivant vide le cache Smart Flash de la base de données.

```
EXEC rdsadmin.rdsadmin_util.flush_flash_cache;
```

Pour plus d'informations sur l'utilisation du cache Smart Flash de la base de données avec RDS for Oracle, consultez [Stockage de données temporaires dans un stockage d'instances RDS for Oracle](CHAP_Oracle.advanced-features.instance-store.md).

# Octroi des privilèges SELECT ou EXECUTE aux objets SYS
<a name="Appendix.Oracle.CommonDBATasks.TransferPrivileges"></a>

Généralement, vous transférez les privilèges en utilisant des rôles, qui peuvent contenir de nombreux objets. Pour accorder des privilèges à un objet unique, utilisez la procédure Amazon RDS `rdsadmin.rdsadmin_util.grant_sys_object`. La procédure accorde uniquement les privilèges qui ont déjà été accordés à l'utilisateur principal par le biais d'un rôle ou d'une attribution directe. 

La procédure `grant_sys_object` possède les paramètres suivants. 

**Important**  
Pour toutes les valeurs de paramètre, utilisez les majuscules sauf si vous avez créé l'utilisateur avec un identifiant sensible à la casse. Par exemple, si vous exécutez `CREATE USER myuser` ou `CREATE USER MYUSER`, le dictionnaire de données stocke `MYUSER`. Toutefois, si vous utilisez des guillemets doubles dans `CREATE USER "MyUser"`, le dictionnaire de données stocke `MyUser`.


****  

| Nom du paramètre | Type de données | Par défaut | Obligatoire | Description | 
| --- | --- | --- | --- | --- | 
|  `p_obj_name`  |  varchar2  |  —  |  Oui  |  Nom de l'objet pour lequel des privilèges seront accordés. L'objet peut être un répertoire, une fonction, un package, une procédure, une séquence, une table ou une vue. Les noms d'objet doivent être orthographiés correctement lorsqu'ils apparaissent dans `DBA_OBJECTS`. La plupart des objets système sont définis en majuscules, si bien que nous vous recommandons d'essayer cela en premier lieu.   | 
|  `p_grantee`  |  varchar2  |  —  |  Oui  |  Nom de l'objet auquel des privilèges seront accordés. L'objet peut être un schéma ou un rôle.   | 
|  `p_privilege`  |  varchar2  |  null  |  Oui  |  —  | 
|  `p_grant_option`  |  booléen  |  false  |  Non  |  Définissez ce paramètre sur `true` pour l'utiliser avec l'option d'attribution.  | 

L'exemple suivant accorde des privilèges select sur un objet nommé `V_$SESSION` à un utilisateur nommé `USER1`.

```
begin
    rdsadmin.rdsadmin_util.grant_sys_object(
        p_obj_name  => 'V_$SESSION',
        p_grantee   => 'USER1',
        p_privilege => 'SELECT');
end;
/
```

L'exemple suivant accorde des privilèges select sur un objet nommé `V_$SESSION` à un utilisateur nommé `USER1` avec l'option d'attribution.

```
begin
    rdsadmin.rdsadmin_util.grant_sys_object(
        p_obj_name     => 'V_$SESSION',
        p_grantee      => 'USER1',
        p_privilege    => 'SELECT',
        p_grant_option => true);
end;
/
```

Pour pouvoir attribuer des privilèges sur un objet, votre compte doit avoir ces privilèges directement attribués avec l'option appropriée ou via un rôle accordé avec `with admin option`. Le plus souvent, vous voudrez attribuer `SELECT` sur une vue DBA qui a été attribuée au rôle `SELECT_CATALOG_ROLE`. Si ce rôle n'est pas déjà directement attribué à votre utilisateur avec `with admin option`, vous ne pouvez pas transférer le privilège. Si vous disposez du privilège DBA, vous pouvez accorder le rôle directement à un autre utilisateur. 

L'exemple suivant accorde les rôles `SELECT_CATALOG_ROLE` et `EXECUTE_CATALOG_ROLE` à `USER1`. Étant donné que `with admin option` est utilisé, `USER1` peut désormais accorder l'accès aux objets SYS qui ont été attribués à `SELECT_CATALOG_ROLE`. 

```
GRANT SELECT_CATALOG_ROLE TO USER1 WITH ADMIN OPTION; 
GRANT EXECUTE_CATALOG_ROLE to USER1 WITH ADMIN OPTION;
```

Les objets déjà attribués à `PUBLIC` n'ont pas besoin d'être réattribués. Si vous utilisez la procédure `grant_sys_object` pour accorder de nouveau l'accès, l'appel de procédure réussit. 

# Retrait des privilèges SELECT ou EXECUTE sur les objets SYS
<a name="Appendix.Oracle.CommonDBATasks.RevokePrivileges"></a>

Pour retirer des privilèges sur un objet unique, utilisez la procédure Amazon RDS `rdsadmin.rdsadmin_util.revoke_sys_object`. La procédure révoque uniquement les privilèges qui ont déjà été accordés au compte principal par le biais d'un rôle ou d'une attribution directe. 

La procédure `revoke_sys_object` possède les paramètres suivants. 


****  

| Nom du paramètre | Type de données | Par défaut | Obligatoire | Description | 
| --- | --- | --- | --- | --- | 
|  `p_obj_name`  |  varchar2  |  —  |  Oui  |  Nom de l'objet pour lequel des privilèges seront révoqués. L'objet peut être un répertoire, une fonction, un package, une procédure, une séquence, une table ou une vue. Les noms d'objet doivent être orthographiés correctement lorsqu'ils apparaissent dans `DBA_OBJECTS`. La plupart des objets système sont définis en majuscules, c'est pourquoi nous vous recommandons d'essayer cette méthode en premier lieu.   | 
|  `p_revokee`  |  varchar2  |  —  |  Oui  |  Nom de l'objet pour lequel des privilèges seront révoqués. L'objet peut être un schéma ou un rôle.   | 
|  `p_privilege`  |  varchar2  |  null  |  Oui  |  —  | 

L'exemple suivant révoque des privilèges select sur un objet nommé `V_$SESSION` à un utilisateur nommé `USER1`.

```
begin
    rdsadmin.rdsadmin_util.revoke_sys_object(
        p_obj_name  => 'V_$SESSION',
        p_revokee   => 'USER1',
        p_privilege => 'SELECT');
end;
/
```

# Gestion des vues RDS\$1X\$1 pour les instances de base de données Oracle
<a name="Appendix.Oracle.CommonDBATasks.X-dollar"></a>

Vous devrez peut-être accéder à des tables `SYS.X$` fixes, qui ne sont accessibles que par `SYS`. Pour créer des vues `SYS.RDS_X$` sur les tables `X$` éligibles, utilisez les procédures du package `rdsadmin.rdsadmin_util`. Votre utilisateur principal se voit automatiquement octroyer le privilège `SELECT … WITH GRANT OPTION` sur les vues `RDS_X$`. 

Les procédures `rdsadmin.rdsadmin_util` sont disponibles dans les cas suivants :
+ Les instances de base de données existantes qui n’ont jamais été mises à niveau et qui utilisent les versions suivantes :
  + `21.0.0.0.ru-2023-10.rur-2023-10.r1` versions 21c et ultérieures
  + `19.0.0.0.ru-2023-10.rur-2023-10.r1` versions 19c et ultérieures
+ Toute nouvelle instance de base de données que vous créez
+ Toute instance de base de données existante que vous avez mise à niveau

**Important**  
En interne, le package `rdsadmin.rdsadmin_util` crée des vues sur les tables `X$`. Les tables `X$` sont des objets système internes qui ne sont pas décrits dans la documentation Oracle Database. Nous vous recommandons de tester des vues spécifiques dans votre base de données hors production, et de ne créer des vues dans votre base de données de production que sous la direction du support Oracle.

## Liste des tables fixes X\$1 pouvant être utilisées dans les vues RDS\$1X\$1
<a name="Appendix.Oracle.CommonDBATasks.list-allowed-X-dollar"></a>

Pour répertorier les tables X\$1 pouvant être utilisées dans les vues `RDS_X$`, utilisez la procédure RDS `rdsadmin.rdsadmin_util.list_allowed_sys_x$_views`. Cette procédure n'accepte aucun paramètre. Les déclarations suivantes répertorient toutes les tables `X$` éligibles (échantillon de sortie inclus).

```
SQL> SET SERVEROUTPUT ON
SQL> SELECT * FROM TABLE(rdsadmin.rdsadmin_util.list_allowed_sys_x$_views);

'X$BH'
'X$K2GTE'
'X$KCBWBPD'
'X$KCBWDS'
'X$KGLLK'
'X$KGLOB'
'X$KGLPN'
'X$KSLHOT'
'X$KSMSP'
'X$KSPPCV'
'X$KSPPI'
'X$KSPPSV'
'X$KSQEQ'
'X$KSQRS'
'X$KTUXE'
'X$KQRFP'
```

La liste des tables `X$` éligibles peut changer au fil du temps. Pour vous assurer que votre liste de tables fixes `X$` éligibles est à jour, réexécutez `list_allowed_sys_x$_views` régulièrement.

## Création de vues SYS.RDS\$1X\$1
<a name="Appendix.Oracle.CommonDBATasks.create-X-dollar"></a>

Pour créer une vue `RDS_X$` sur une table `X$` éligible, utilisez la procédure RDS `rdsadmin.rdsadmin_util.create_sys_x$_view`. Vous ne pouvez créer des vues que pour les tables répertoriées dans la sortie de `rdsadmin.rdsadmin_util.list_allowed_sys_x$_views`. La procédure `create_sys_x$_view` accepte les paramètres suivants.


****  

| Nom du paramètre | Type de données | Par défaut | Obligatoire | Description | 
| --- | --- | --- | --- | --- | 
|  `p_x$_tbl`  |  varchar2  |  Null  |  Oui  |  Nom d’espace de table `X$` valide. La valeur doit correspondre à l’une des tables `X$` signalées par `list_allowed_sys_x$_views`.  | 
|  `p_force_creation`  |  Booléen  | FALSE |  Non  |  Une valeur indiquant s’il faut forcer la création d’une vue `RDS_X$` qui existe déjà pour une table `X$`. Par défaut, RDS ne crée pas de vue si elle existe déjà. Pour forcer la création, définissez ce paramètre sur`TRUE`.  | 

L’exemple suivant crée une vue `SYS.RDS_X$KGLOB` à partir de la table `X$KGLOB`. Le format du nom de vue est `RDS_X$tablename`.

```
SQL> SET SERVEROUTPUT ON
SQL> EXEC rdsadmin.rdsadmin_util.create_sys_x$_view('X$KGLOB');

PL/SQL procedure successfully completed.
```

La requête de dictionnaire de données suivante répertorie la vue `SYS.RDS_X$KGLOB` et indique son état. Votre utilisateur principal se voit automatiquement octroyer le privilège `SELECT ... WITH GRANT OPTION` sur cette vue.

```
SQL> SET SERVEROUTPUT ON
SQL> COL OWNER FORMAT A30 
SQL> COL OBJECT_NAME FORMAT A30
SQL> COL STATUS FORMAT A30
SQL> SET LINESIZE 200
SQL> SELECT OWNER, OBJECT_NAME, STATUS 
FROM DBA_OBJECTS 
WHERE OWNER = 'SYS' AND OBJECT_NAME = 'RDS_X$KGLOB';

OWNER                          OBJECT_NAME                    STATUS
------------------------------ ------------------------------ ------------------------------
SYS                            RDS_X$KGLOB                    VALID
```

**Important**  
Il n’est pas garanti que les tables `X$` resteront les mêmes avant et après une mise à niveau. RDS for Oracle supprime et recrée les vues `RDS_X$` sur les tables `X$` lors d’une mise à niveau du moteur. Il accorde ensuite le privilège `SELECT ... WITH GRANT OPTION` à l’utilisateur principal. Après une mise à niveau, accordez des privilèges aux utilisateurs de la base de données selon les besoins sur les vues `RDS_X$` correspondantes.

## Création d’une liste de vues SYS.RDS\$1X\$1
<a name="Appendix.Oracle.CommonDBATasks.list-created-X-dollar"></a>

Pour répertorier les vues `RDS_X$` existantes, utilisez la procédure RDS `rdsadmin.rdsadmin_util.list_created_sys_x$_views`. La procédure répertorie uniquement les vues créées par la procédure `create_sys_x$_view`. L’exemple suivant répertorie les tables `X$` associées aux vues `RDS_X$` correspondantes (exemple de sortie inclus).

```
SQL> SET SERVEROUTPUT ON
SQL> COL XD_TBL_NAME FORMAT A30
SQL> COL STATUS FORMAT A30
SQL> SET LINESIZE 200
SQL> SELECT * FROM TABLE(rdsadmin.rdsadmin_util.list_created_sys_x$_views);

XD_TBL_NAME                    STATUS
------------------------------ ------------------------------
X$BH                           VALID
X$K2GTE                        VALID
X$KCBWBPD                      VALID

3 rows selected.
```

## Suppression des vues RDS\$1X\$1
<a name="Appendix.Oracle.CommonDBATasks.drop-X-dollar"></a>

Pour supprimer une vue `SYS.RDS_X$`, utilisez la procédure RDS `rdsadmin.rdsadmin_util.drop_sys_x$_view`. Vous ne pouvez supprimer que les événements répertoriés dans la sortie de `rdsadmin.rdsadmin_util.list_allowed_sys_x$_views`. La procédure `drop_sys_x$_view` accepte les paramètres suivants.


****  

| Nom du paramètre | Type de données | Par défaut | Obligatoire | Description | 
| --- | --- | --- | --- | --- | 
|  `p_x$_tbl`  |  varchar2  |  Null  |  Oui  |  Nom de table fixe `X$` valide. La valeur doit correspondre à l’une des tables fixes `X$` signalées par `list_created_sys_x$_views`.  | 

L’exemple suivant supprime la vue `RDS_X$KGLOB` créée à partir de la table `X$KGLOB`.

```
SQL> SET SERVEROUTPUT ON
SQL> EXEC rdsadmin.rdsadmin_util.drop_sys_x$_view('X$KGLOB');

PL/SQL procedure successfully completed.
```

L’exemple suivant montre que la vue `SYS.RDS_X$KGLOB` a été supprimée (exemple de sortie inclus).

```
SQL> SET SERVEROUTPUT ON
SQL> COL OWNER FORMAT A30 
SQL> COL OBJECT_NAME FORMAT A30
SQL> COL STATUS FORMAT A30
SQL> SET LINESIZE 200
SQL> SELECT OWNER, OBJECT_NAME, STATUS 
FROM DBA_OBJECTS 
WHERE OWNER = 'SYS' AND OBJECT_NAME = 'RDS_X$KGLOB';

no rows selected
```

# Attribution de privilèges à des utilisateurs non-maîtres
<a name="Appendix.Oracle.CommonDBATasks.PermissionsNonMasters"></a>

Vous pouvez accorder des privilèges select pour de nombreux objets dans le schéma `SYS` grâce au rôle `SELECT_CATALOG_ROLE`. Le rôle `SELECT_CATALOG_ROLE` accorde aux utilisateurs des privilèges `SELECT` sur les vues du dictionnaire de données. L'exemple suivant accorde le rôle `SELECT_CATALOG_ROLE` à un utilisateur nommé `user1`. 

```
GRANT SELECT_CATALOG_ROLE TO user1;
```

Vous pouvez accorder des privilèges `EXECUTE` pour de nombreux objets dans le schéma `SYS` grâce au rôle `EXECUTE_CATALOG_ROLE`. Le rôle `EXECUTE_CATALOG_ROLE` accorde aux utilisateurs des privilèges `EXECUTE` pour les packages et les procédures du dictionnaire de données. L'exemple suivant accorde le rôle `EXECUTE_CATALOG_ROLE` à un utilisateur nommé *user1*. 

```
GRANT EXECUTE_CATALOG_ROLE TO user1;
```

L'exemple suivant obtient les autorisations permises par les rôles `SELECT_CATALOG_ROLE` et `EXECUTE_CATALOG_ROLE`. 

```
  SELECT * 
    FROM ROLE_TAB_PRIVS  
   WHERE ROLE IN ('SELECT_CATALOG_ROLE','EXECUTE_CATALOG_ROLE') 
ORDER BY ROLE, TABLE_NAME ASC;
```

L'exemple suivant crée un utilisateur non maître nommé `user1`, accorde le privilège `CREATE SESSION`, puis accorde le privilège `SELECT` sur une base de données nommée *sh.sales*.

```
CREATE USER user1 IDENTIFIED BY PASSWORD;
GRANT CREATE SESSION TO user1;
GRANT SELECT ON sh.sales TO user1;
```

# Création de fonctions personnalisées pour vérifier les mots de passe
<a name="Appendix.Oracle.CommonDBATasks.CustomPassword"></a>

Vous pouvez créer une fonction de vérification de mot de passe personnalisée des manières suivantes :
+ Pour utiliser la logique de vérification standard et stocker votre fonction dans le schéma `SYS`, utilisez la procédure `create_verify_function`. 
+ Pour utiliser la logique de vérification personnalisée, ou pour éviter de stocker votre fonction dans le schéma `SYS`, utilisez la procédure `create_passthrough_verify_fcn`. 

# Procédure create\$1verify\$1function
<a name="Appendix.Oracle.CommonDBATasks.CustomPassword.Standard"></a>

Vous pouvez créer une fonction personnalisée pour vérifier les mots de passe en utilisant la procédure Amazon RDS `rdsadmin.rdsadmin_password_verify.create_verify_function`. La procédure `create_verify_function` est prise en charge pour toutes les versions de RDS for Oracle.

La procédure `create_verify_function` possède les paramètres suivants. 


****  

| Nom du paramètre | Type de données | Par défaut | Obligatoire | Description | 
| --- | --- | --- | --- | --- | 
|  `p_verify_function_name`  |  varchar2  |  —  |  Oui  |  Nom de la fonction personnalisée. Cette fonction est automatiquement créée dans le schéma SYS. Elle est affectée à des profils utilisateur.   | 
|  `p_min_length`  |  nombre  |  8  |  Non  |  Nombre minimal de caractères requis.  | 
|  `p_max_length`  |  nombre  |  256  |  Non  |  Nombre maximal de caractères autorisés.  | 
|  `p_min_letters`  |  nombre  |  1  |  Non  |  Nombre minimal de lettres requises.  | 
|  `p_min_uppercase`  |  nombre  |  0  |  Non  |  Nombre minimal de lettres majuscules requises.  | 
|  `p_min_lowercase`  |  nombre  |  0  |  Non  |  Nombre minimal de lettres minuscules requises.  | 
|  `p_min_digits`  |  nombre  |  1  |  Non  |  Nombre minimal de chiffres requis.  | 
|  `p_min_special`  |  nombre  |  0  |  Non  |  Nombre minimal de caractères spéciaux requis.  | 
|  `p_min_different_chars`  |  nombre  |  3  |  Non  |  Nombre minimal de caractères différents requis entre l'ancien et le nouveau mot de passe.  | 
|  `p_disallow_username`  |  booléen  |  true  |  Non  |  Définissez ce paramètre sur `true` pour interdire le nom d'utilisateur dans le mot de passe.  | 
|  `p_disallow_reverse`  |  booléen  |  true  |  Non  |  Définissez ce paramètre sur `true` pour interdire le nom d'utilisateur inversé dans le mot de passe.  | 
|  `p_disallow_db_name`  |  booléen  |  true  |  Non  |  Définissez ce paramètre sur `true` pour interdire le nom de la base de données ou du serveur dans le mot de passe.  | 
|  `p_disallow_simple_strings`  |  booléen  |  true  |  Non  |  Définissez ce paramètre sur `true` pour interdire l'utilisation de chaînes simples comme mot de passe.  | 
|  `p_disallow_whitespace`  |  booléen  |  false  |  Non  |  Définissez ce paramètre sur `true` pour interdire les espaces dans le mot de passe.  | 
|  `p_disallow_at_sign`  |  booléen  |  false  |  Non  |  Définissez ce paramètre sur `true` pour interdire le caractère @ dans le mot de passe.  | 

Vous pouvez créer plusieurs fonctions de vérification de mot de passe.

Il existe des restrictions sur le nom de votre fonction personnalisée. Votre fonction personnalisée ne peut pas avoir le même nom qu'un objet système existant. Ce nom ne peut pas comporter plus de 30 caractères. De plus, le nom doit inclure l'une des chaînes suivantes : `PASSWORD`, `VERIFY`, `COMPLEXITY`, `ENFORCE` ou `STRENGTH`. 

L'exemple suivant crée une fonction nommée `CUSTOM_PASSWORD_FUNCTION`. La fonction exige qu'un mot de passe comporte au moins 12 caractères, 2 majuscules, 1 chiffre et 1 caractère spécial, et interdit le caractère @. 

```
begin
    rdsadmin.rdsadmin_password_verify.create_verify_function(
        p_verify_function_name => 'CUSTOM_PASSWORD_FUNCTION', 
        p_min_length           => 12, 
        p_min_uppercase        => 2, 
        p_min_digits           => 1, 
        p_min_special          => 1,
        p_disallow_at_sign     => true);
end;
/
```

Pour voir le texte de votre fonction de vérification, interrogez `DBA_SOURCE`. L'exemple suivant récupère le texte d'une fonction de mot de passe personnalisé nommée `CUSTOM_PASSWORD_FUNCTION`. 

```
COL TEXT FORMAT a150

  SELECT TEXT 
    FROM DBA_SOURCE 
   WHERE OWNER = 'SYS' 
     AND NAME = 'CUSTOM_PASSWORD_FUNCTION' 
ORDER BY LINE;
```

Pour associer votre fonction de vérification à un profil utilisateur, utilisez `ALTER PROFILE`. L'exemple suivant associe une PL/SQL fonction de vérification nommée `CUSTOM_PASSWORD_FUNCTION` au profil `DEFAULT` utilisateur. `PASSWORD_VERIFY_FUNCTION`est le nom de la ressource du profil Oracle. 

```
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION CUSTOM_PASSWORD_FUNCTION;
```

Pour voir quels profils utilisateur sont associés à quelles fonctions de vérification, effectuez une requête`DBA_PROFILES`. L'exemple suivant obtient les profils qui sont associés à la fonction de vérification personnalisée nommée `CUSTOM_PASSWORD_FUNCTION`. 

```
SELECT * FROM DBA_PROFILES WHERE RESOURCE_NAME = 'PASSWORD_VERIFY_FUNCTION' AND LIMIT = 'CUSTOM_PASSWORD_FUNCTION';


PROFILE                    RESOURCE_NAME                     RESOURCE  LIMIT
-------------------------  --------------------------------  --------  ------------------------
DEFAULT                    PASSWORD_VERIFY_FUNCTION          PASSWORD  CUSTOM_PASSWORD_FUNCTION
```

L'exemple suivant récupère tous les profils et les fonctions de vérification de mot de passe associées. 

```
SELECT * FROM DBA_PROFILES WHERE RESOURCE_NAME = 'PASSWORD_VERIFY_FUNCTION';

PROFILE                    RESOURCE_NAME                     RESOURCE  LIMIT
-------------------------  --------------------------------  --------  ------------------------
DEFAULT                    PASSWORD_VERIFY_FUNCTION          PASSWORD  CUSTOM_PASSWORD_FUNCTION
RDSADMIN                   PASSWORD_VERIFY_FUNCTION          PASSWORD  NULL
```

# Procédure create\$1passthrough\$1verify\$1fcn
<a name="Appendix.Oracle.CommonDBATasks.CustomPassword.Custom"></a>

La procédure `create_passthrough_verify_fcn` est prise en charge pour toutes les versions de RDS for Oracle.

Vous pouvez créer une fonction personnalisée pour vérifier les mots de passe en utilisant la procédure Amazon RDS `rdsadmin.rdsadmin_password_verify.create_passthrough_verify_fcn`. La procédure `create_passthrough_verify_fcn` possède les paramètres suivants. 


****  

| Nom du paramètre | Type de données | Par défaut | Obligatoire | Description | 
| --- | --- | --- | --- | --- | 
|  `p_verify_function_name`  |  varchar2  |  —  |  Oui  |  Nom de la fonction de vérification personnalisée. Il s'agit d'une fonction de wrapper qui est automatiquement créée dans le schéma SYS et qui ne contient pas de logique de vérification. Elle est affectée à des profils utilisateur.   | 
|  `p_target_owner`  |  varchar2  |  —  |  Oui  |  Propriétaire de schéma de la fonction de vérification personnalisée.  | 
|  `p_target_function_name`  |  varchar2  |  —  |  Oui  |  Nom de la fonction personnalisée existante qui contient la logique de vérification. Votre fonction personnalisée doit renvoyer une valeur booléenne. La fonction doit renvoyer la valeur `true` si le mot de passe est valide, ou `false` s'il ne l'est pas.   | 

L'exemple suivant crée une fonction de vérification de mot de passe qui utilise la logique provenant de la fonction nommée `PASSWORD_LOGIC_EXTRA_STRONG`. 

```
begin
    rdsadmin.rdsadmin_password_verify.create_passthrough_verify_fcn(
        p_verify_function_name => 'CUSTOM_PASSWORD_FUNCTION', 
        p_target_owner         => 'TEST_USER',
        p_target_function_name => 'PASSWORD_LOGIC_EXTRA_STRONG');
end;
/
```

Pour associer la fonction de vérification à un profil utilisateur, utilisez `alter profile`. L'exemple suivant associe la fonction de vérification au profil utilisateur `DEFAULT`. 

```
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION CUSTOM_PASSWORD_FUNCTION;
```

## Configuration d'un serveur DNS personnalisé
<a name="Appendix.Oracle.CommonDBATasks.CustomDNS"></a>

Amazon RDS prend en charge l'accès réseau sortant sur vos instances de bases de données exécutant Oracle. Pour plus d'informations sur l'utilisation de l'accès réseau sortant et les prérequis, consultez [Configuration de l'accès UTL\$1HTTP à l'aide de certificats et d'un portefeuille Oracle](Oracle.Concepts.ONA.md). 

Amazon RDS Oracle permet la résolution DNS (Domain Name Service) à partir d'un serveur DNS personnalisé appartenant au client. Vous pouvez résoudre uniquement les deux noms de domaine complets à partir de votre instance de base de données Amazon RDS via votre serveur DNS personnalisé. 

Une fois que votre serveur de nom DNS personnalisé est configuré, la propagation des modifications dans votre instance de base de données peut prendre jusqu'à 30 minutes. Une fois que les modifications sont propagées dans votre instance de base de données, l'ensemble du trafic réseau sortant nécessitant une recherche DNS interroge votre serveur DNS via le port 53. 

Pour configurer un serveur DNS personnalisé pour votre instance de base de données Amazon RDS for Oracle, procédez comme suit : 
+ À partir du jeu d'options DHCP liées à votre VPC (cloud privé virtuel), définissez l'option `domain-name-servers` sur l'adresse IP de votre serveur de noms DNS. Pour plus d’informations, consultez [Jeux d’options DHCP](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html). 
**Note**  
L'option `domain-name-servers` autorise jusqu'à quatre valeurs, mais votre instance de base de données Amazon RDS utilise uniquement la première valeur. 
+ Assurez-vous que votre serveur DNS peut résoudre toutes les requêtes de recherche, notamment les noms DNS publics, les noms DNS privés Amazon EC2 et les noms DNS spécifiés par le client. Si le trafic réseau sortant contient une recherche DNS que votre serveur DNS ne peut pas gérer, votre serveur DNS doit avoir des fournisseurs DNS en amont appropriés, configurés. 
+ Configurez votre serveur DNS pour produire des réponses UDP (User Datagram Protocol) de 512 octets ou moins. 
+ Configurez votre serveur DNS pour produire des réponses TCP (Transmission Control Protocol) de 1024 octets ou moins. 
+ Configurez votre serveur DNS pour permettre le trafic entrant à partir de vos instances de bases de données Amazon RDS sur le port 53. Si votre serveur DNS est dans un Amazon VPC, le VPC doit avoir un groupe de sécurité qui contient des règles entrantes permettant le trafic UDP et TCP sur le port 53. Si votre serveur DNS n'est pas dans un Amazon VPC, il doit avoir une liste blanche des pare-feux appropriés pour permettre le trafic UDP et TCP sur le port 53.

  Pour plus d'informations, veuillez consulter [Groupes de sécurité pour votre VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) et [Ajout et suppression de règles](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#AddRemoveRules). 
+ Configurez le VPC de votre instance de base de données Amazon RDS for permettre le trafic sortant via le port 53. Votre serveur VPC doit avoir un groupe de sécurité qui contient des règles sortantes permettant le trafic UDP et TCP sur le port 53. 

  Pour plus d'informations, veuillez consulter [Groupes de sécurité pour votre VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) et [Ajout et suppression de règles](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#AddRemoveRules). 
+ Le chemin d'acheminement entre l'instance de base de données Amazon RDS et le serveur DNS doit être configuré correctement pour permettre un trafic DNS. 
  + Si l'instance de base de données Amazon RDS et le serveur DNS ne sont pas dans le même VPC, une connexion d'appairage doit être configurée entre les deux. Pour plus d’informations, consultez [Qu’est-ce que l’appairage de VPC ?](https://docs.aws.amazon.com/vpc/latest/peering/Welcome.html) 

# Activation et désactivation des événements de diagnostic système
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents"></a>

Pour activer et désactiver les événements de diagnostic au niveau session, vous pouvez utiliser l'instruction Oracle SQL `ALTER SESSION SET EVENTS`. En revanche, pour activer les événements au niveau système, vous ne pouvez pas utiliser Oracle SQL. Pour cela, utilisez les procédures d'événements système du package `rdsadmin.rdsadmin_util`. Les procédures d'événements système sont disponibles dans les versions suivantes du moteur :
+ Toutes les versions de Oracle Database 21c
+ 19.0.0.0.ru-2020-10.rur-2020-10.r1 et versions ultérieures de Oracle Database 19c

  Pour plus d’informations, consultez [Version 19.0.0.0.ru-2020-10.rur-2020-10.r1](https://docs.aws.amazon.com/AmazonRDS/latest/OracleReleaseNotes/oracle-version-19-0.html#oracle-version-RU-RUR.19.0.0.0.ru-2020-10.rur-2020-10.r1) dans *Notes de mise à jour d’Amazon RDS for Oracle*.

**Important**  
En interne, le package `rdsadmin.rdsadmin_util` active les événements à l'aide de l'instruction `ALTER SYSTEM SET EVENTS`. Cette instruction `ALTER SYSTEM` ne figure pas dans la documentation Oracle Database. Certains événements de diagnostic système peuvent générer de grandes quantités d'informations de suivi, provoquer des conflits ou affecter la disponibilité de la base de données. Nous vous recommandons de tester des événements de diagnostic spécifiques dans votre base de données hors production, et de n'activer des événements dans votre base de données de production que sous la direction du support Oracle.

## Liste des événements de diagnostic système autorisés
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.listing"></a>

Pour dresser la liste des événements système que vous pouvez activer, utilisez la procédure Amazon RDS `rdsadmin.rdsadmin_util.list_allowed_system_events`. Cette procédure n'accepte aucun paramètre.

L'exemple suivant répertorie tous les événements système que vous pouvez activer.

```
SET SERVEROUTPUT ON
EXEC rdsadmin.rdsadmin_util.list_allowed_system_events;
```

L'exemple de sortie suivant répertorie les numéros des événements et leur description. Utilisez les procédures Amazon RDS `set_system_event` pour activer ces événements et `unset_system_event` pour les désactiver.

```
604   - error occurred at recursive SQL level
942   - table or view does not exist
1401  - inserted value too large for column
1403  - no data found
1410  - invalid ROWID
1422  - exact fetch returns more than requested number of rows
1426  - numeric overflow
1427  - single-row subquery returns more than one row
1476  - divisor is equal to zero
1483  - invalid length for DATE or NUMBER bind variable
1489  - result of string concatenation is too long
1652  - unable to extend temp segment by  in tablespace
1858  - a non-numeric character was found where a numeric was expected
4031  - unable to allocate  bytes of shared memory ("","","","")
6502  - PL/SQL: numeric or value error
10027 - Specify Deadlock Trace Information to be Dumped
10046 - enable SQL statement timing
10053 - CBO Enable optimizer trace
10173 - Dynamic Sampling time-out error
10442 - enable trace of kst for ORA-01555 diagnostics
12008 - error in materialized view refresh path
12012 - error on auto execute of job
12504 - TNS:listener was not given the SERVICE_NAME in CONNECT_DATA
14400 - inserted partition key does not map to any partition
31693 - Table data object  failed to load/unload and is being skipped due to error:
```

**Note**  
La liste des événements système autorisés peut changer au fil du temps. Pour vous assurer que vous disposez de la liste la plus récente des événements éligibles, utilisez `rdsadmin.rdsadmin_util.list_allowed_system_events`.

## Activation des événements de diagnostic système
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.setting"></a>

Pour activer un événement système, utilisez la procédure Amazon RDS `rdsadmin.rdsadmin_util.set_system_event`. Vous ne pouvez activer que les événements répertoriés dans la sortie de `rdsadmin.rdsadmin_util.list_allowed_system_events`. La procédure `set_system_event` accepte les paramètres suivants.


****  

| Nom du paramètre | Type de données | Par défaut | Obligatoire | Description | 
| --- | --- | --- | --- | --- | 
|  `p_event`  |  nombre  |  —  |  Oui  |  Numéro de l'événement système. La valeur doit correspondre à l'un des numéros d'événement signalés par `list_allowed_system_events`.  | 
|  `p_level`  |  nombre  |  —  |  Oui  |  Niveau de l'événement. Pour obtenir les descriptions des différentes valeurs de niveau, consultez la documentation Oracle Database ou contactez le support Oracle.  | 

La procédure `set_system_event` permet de créer et d'exécuter les instructions `ALTER SYSTEM SET EVENTS` requises selon les principes suivants :
+ Le type d'événement (`context` ou `errorstack`) est déterminé automatiquement.
+ Une instruction du formulaire `ALTER SYSTEM SET EVENTS 'event LEVEL event_level'` active les événements de contexte. Cette notation équivaut à `ALTER SYSTEM SET EVENTS 'event TRACE NAME CONTEXT FOREVER, LEVEL event_level'`.
+ Une instruction du formulaire `ALTER SYSTEM SET EVENTS 'event ERRORSTACK (event_level)'` active les événements de pile d'erreurs. Cette notation équivaut à `ALTER SYSTEM SET EVENTS 'event TRACE NAME ERRORSTACK LEVEL event_level'`.

L'exemple suivant active l'événement 942 au niveau 3, et l'événement 10442 au niveau 10. Un exemple de sortie est inclus.

```
SQL> SET SERVEROUTPUT ON
SQL> EXEC rdsadmin.rdsadmin_util.set_system_event(942,3);
Setting system event 942 with: alter system set events '942 errorstack (3)'

PL/SQL procedure successfully completed.

SQL> EXEC rdsadmin.rdsadmin_util.set_system_event(10442,10);
Setting system event 10442 with: alter system set events '10442 level 10'

PL/SQL procedure successfully completed.
```

## Liste des événements de diagnostic système activés
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.listing-set"></a>

Pour dresser la liste des événements système activés, utilisez la procédure Amazon RDS `rdsadmin.rdsadmin_util.list_set_system_events`. Cette procédure signale uniquement les événements activés au niveau système par `set_system_event`.

L'exemple suivant répertorie les événements système actifs.

```
SET SERVEROUTPUT ON
EXEC rdsadmin.rdsadmin_util.list_set_system_events;
```

L'exemple de sortie suivant contient la liste des événements, le type d'événement, le niveau auquel les événements sont activés et l'heure à laquelle ils ont été activés.

```
942 errorstack (3) - set at 2020-11-03 11:42:27
10442 level 10 - set at 2020-11-03 11:42:41

PL/SQL procedure successfully completed.
```

## Désactivation des événements de diagnostic système
<a name="Appendix.Oracle.CommonDBATasks.SystemEvents.unsetting"></a>

Pour désactiver un événement système, utilisez la procédure Amazon RDS `rdsadmin.rdsadmin_util.unset_system_event`. Vous ne pouvez désactiver que les événements répertoriés dans la sortie de `rdsadmin.rdsadmin_util.list_allowed_system_events`. La procédure `unset_system_event` accepte les paramètres suivants.


****  

| Nom du paramètre | Type de données | Par défaut | Obligatoire | Description | 
| --- | --- | --- | --- | --- | 
|  `p_event`  |  nombre  |  —  |  Oui  |  Numéro de l'événement système. La valeur doit correspondre à l'un des numéros d'événement signalés par `list_allowed_system_events`.  | 

L'exemple suivant désactive les événements 942 et 10442. Un exemple de sortie est inclus.

```
SQL> SET SERVEROUTPUT ON
SQL> EXEC rdsadmin.rdsadmin_util.unset_system_event(942);
Unsetting system event 942 with: alter system set events '942 off'

PL/SQL procedure successfully completed.

SQL> EXEC rdsadmin.rdsadmin_util.unset_system_event(10442);
Unsetting system event 10442 with: alter system set events '10442 off'

PL/SQL procedure successfully completed.
```