Aller au contenu principal

Créer des utilisateurs Oracle

Pour préparer votre installation de SEI, créez des utilisateurs Oracle et des tablespaces dédiés en exécutant les scripts SQL fournis. Ces scripts doivent être exécutés avant d'installer SEI (exigé à partir de la version 2022 Release 1.3). Les exécuter garantit que chaque utilisateur a le bon tablespace et les bonnes autorisations, ce qui permet de créer un environnement Oracle sécurisé et bien organisé adapté à SEI.

Assurez-vous de personnaliser les noms d'utilisateur, les mots de passe et les noms de tablespace en fonction des normes et exigences de votre organisation. Comprendre les concepts clés d'Oracle—tels que la structure, les journaux, la compression et la sécurité—vous aide à établir une base fiable et efficace pour votre déploiement.

remarque

Ces scripts doivent être exécutés avec un utilisateur ayant des autorisations administratives sur la base de données Oracle.

Révoquer les autorisations des utilisateurs existants

Si un utilisateur Oracle est déjà présent dans votre environnement SEI, vous devez révoquer les autorisations de cet utilisateur avant de continuer avec une nouvelle configuration. Exécutez le script 0_RevokePermissions.sql et définissez le paramètre NECTARI_USER sur le nom d'utilisateur prévu de SEI (par exemple, NECTARI). Ce script doit être exécuté par un administrateur sur la base de données Oracle.

Afficher l'exemple de script 0_RevokePermissions.sql
/*
Script pour révoquer les autorisations d'un utilisateur Oracle existant pour Nectari/SEI.
Comment utiliser :
- Exécutez en tant qu'utilisateur avec des privilèges administratifs sur la base de données Oracle.
- Mettez à jour les variables sous la section 'Changer les valeurs'.
* NECTARI_USER : Nom de l'utilisateur Nectari à révoquer.
* ENABLE_LOGING : Défini sur 'true' pour imprimer les journaux.
- Exécutez le script.
Remarque :
- Le script imprime les journaux résumant les actions effectuées.
- Assurez-vous d'avoir les sauvegardes et les approbations nécessaires avant de révoquer les autorisations.
*/

set serveroutput on;

DECLARE
-- Déclarations de variables
NECTARI_USER VARCHAR2(1000);
ENABLE_LOGING BOOLEAN;
v_NECTARI_USER_CHECK NUMBER; -- Autre variable

BEGIN
-- Changez les valeurs pour votre environnement
NECTARI_USER := 'NECTARI_SEED'; -- Informations sur l'utilisateur
ENABLE_LOGING := true; -- Autre

-- Activez ou désactivez les journaux
IF (ENABLE_LOGING = true) THEN
dbms_output.enable(1000000);
ELSE
dbms_output.disable;
END IF;

-- Résumé des variables de sortie
dbms_output.put_line('/**********************/');
dbms_output.put_line('/* Résumé des variables */');
dbms_output.put_line('/**********************/');
dbms_output.put_line(' Nom d’utilisateur NECTARI => ' || NECTARI_USER);
dbms_output.new_line;

-- TableSpace / Utilisateurs
dbms_output.put_line('/**********************/');
dbms_output.put_line('/* Permissions */');
dbms_output.put_line('/**********************/');
-- Vérifiez si l'utilisateur existe
SELECT COUNT(1) INTO v_NECTARI_USER_CHECK FROM DBA_USERS WHERE USERNAME = NECTARI_USER;

IF ( v_NECTARI_USER_CHECK <> 0 ) THEN
dbms_output.put_line('/*******************************/');
dbms_output.put_line('/* Révocation des permissions */');
dbms_output.put_line('/*******************************/');

dbms_output.put_line(' Révocation des rôles accordés...');
for r in ( select * from dba_role_privs where grantee = NECTARI_USER )
loop
EXECUTE IMMEDIATE 'revoke ' || r.granted_role ||' from ' || r.grantee;
dbms_output.put_line(' Révoqué : revoke ' || r.granted_role ||' from ' || r.grantee ||';');
end loop;

dbms_output.put_line(' Révocation des privilèges système accordés...');
for r in ( select * from dba_sys_privs where grantee = NECTARI_USER )
loop
EXECUTE IMMEDIATE 'revoke ' || r.privilege ||' from ' || r.grantee;
dbms_output.put_line(' Révoqué : revoke ' || r.privilege ||' from ' || r.grantee ||';');
end loop;

dbms_output.put_line(' Révocation des privilèges d'accès accordés...');
for r in ( select * from dba_tab_privs where grantee = NECTARI_USER )
loop
EXECUTE IMMEDIATE 'revoke ' || r.privilege || ' on ' || r.owner||'.'||r.table_name ||' from ' || r.grantee;
dbms_output.put_line(' Révoqué : revoke ' || r.privilege || ' on ' || r.owner||'.'||r.table_name ||' from ' || r.grantee ||';');
end loop;
ELSE
dbms_output.put_line(' Le nom d’utilisateur "' || NECTARI_USER || ' n''''existe pas');
END IF;
END;

Créer des utilisateurs

Créer un utilisateur et un schéma SEI

Exécutez le script 1_ConfigDB.sql. Configurez les paramètres du script pour correspondre à votre environnement :

  • Définissez le paramètre NECTARI_USER sur NECTARI.
  • Définissez le paramètre NECTARI_TABLE_SPACE sur NECTARI, ou un autre nom si vous le souhaitez.
  • Définissez le paramètre NECTARI_TMP_TABLE_SPACE sur NECTARI_TMP, ou un autre nom si vous le souhaitez.
  • Ajustez les autres paramètres pour s'adapter à votre environnement et à vos politiques de sécurité.

Le script crée un utilisateur Oracle dédié, assigne les tablespaces requis et applique les bonnes permissions, garantissant que SEI fonctionne de manière sécurisée dans son propre schéma.

Afficher l'exemple de script 1_ConfigDB.sql
/*
Script pour créer un utilisateur et un schéma Oracle spécifiques pour Nectari/SEI.
Description :
Ce script crée (ou met à jour) un utilisateur pour l'application Nectari, attribue des tablespaces principaux et temporaires, accorde les autorisations requises et (optionnellement) révoque les permissions précédemment accordées pour l'utilisateur.
Exécutez ce script avec des privilèges administratifs sur votre base de données Oracle.
Guide des paramètres :
- NECTARI_USER : Nom d'utilisateur Oracle pour l'application Nectari/SEI.
- NECTARI_USER_PWD : Mot de passe pour NECTARI_USER.
- NECTARI_TABLE_SPACE : Nom du tablespace principal.
- NECTARI_TABLE_SPACE_LOG : Activer les journaux pour le tablespace.
- NECTARI_TABLE_SPACE_COMP : Activer la compression pour le tablespace.
- NECTARI_TMP_TABLE_SPACE : Nom du tablespace temporaire.
- ENABLE_LOGING : Défini sur true pour imprimer les journaux.
- REVOKE_EXIST_PERM : Défini sur true pour révoquer toutes les permissions précédemment accordées si NECTARI_USER existe.
Remarques :
- Changez les valeurs des paramètres sous la section 'Changer les valeurs'.
- Le script supprime toutes les autorisations existantes de NECTARI_USER si REVOKE_EXIST_PERM est défini sur true.
- Ajustez toujours les champs d'utilisateur, de tablespace et de mot de passe selon les pratiques organisationnelles.
*/

set serveroutput on;

DECLARE
-- Déclarations de variables
NECTARI_USER VARCHAR2(1000);
NECTARI_USER_PWD VARCHAR2(1000);
NECTARI_TABLE_SPACE VARCHAR2(1000);
NECTARI_TABLE_SPACE_LOG BOOLEAN;
NECTARI_TABLE_SPACE_COMP BOOLEAN;
NECTARI_TMP_TABLE_SPACE VARCHAR2(1000);
ENABLE_LOGING BOOLEAN;
REVOKE_EXIST_PERM BOOLEAN;
v_CUSTOM_TABLE_SPACE_PATH VARCHAR2(1000);
v_NECTARI_USER_CHECK NUMBER;
v_NECTARI_TABLE_SPACE_LOG VARCHAR2(1000);
v_NECTARI_TABLE_SPACE_COMP VARCHAR2(1000);
TablespaceExistsExcep EXCEPTION;
FileExistsExcep EXCEPTION;
PRAGMA EXCEPTION_INIT(TablespaceExistsExcep, -1543);
PRAGMA EXCEPTION_INIT(FileExistsExcep, -1119);

BEGIN
-- Changez les valeurs selon votre environnement
-- Informations sur l'utilisateur
NECTARI_USER := 'NECTARI';
NECTARI_USER_PWD := 'NECTARI_PWD';
-- Informations sur le tablespace
NECTARI_TABLE_SPACE := 'NECTARI';
NECTARI_TABLE_SPACE_LOG := true;
NECTARI_TABLE_SPACE_COMP:= false;
NECTARI_TMP_TABLE_SPACE := 'NECTARI_TMP';
-- Autres
ENABLE_LOGING := true;
REVOKE_EXIST_PERM := false;

-- Récupérer le chemin du fichier de données personnalisé s'il est défini
SELECT VALUE INTO v_CUSTOM_TABLE_SPACE_PATH FROM v$parameter WHERE NAME ='db_create_file_dest';
IF v_CUSTOM_TABLE_SPACE_PATH is not null THEN
v_CUSTOM_TABLE_SPACE_PATH := v_CUSTOM_TABLE_SPACE_PATH || '/';
END IF;

-- Activer/désactiver les journaux
IF ( ENABLE_LOGING = true ) THEN
dbms_output.enable(1000000);
ELSE
dbms_output.disable;
END IF;

-- Préparer les paramètres du tablespace
IF ( NECTARI_TABLE_SPACE_LOG = true ) THEN
v_NECTARI_TABLE_SPACE_LOG := '';
ELSE
v_NECTARI_TABLE_SPACE_LOG := ' NOLOGGING ';
END IF;

IF ( NECTARI_TABLE_SPACE_COMP = true ) THEN
v_NECTARI_TABLE_SPACE_COMP := ' DEFAULT COMPRESS ';
ELSE
v_NECTARI_TABLE_SPACE_COMP := '';
END IF;

-- Résumé des variables de sortie
dbms_output.put_line('/**********************/');
dbms_output.put_line('/* Résumé des variables */');
dbms_output.put_line('/**********************/');
dbms_output.put_line(' Nom d’utilisateur NECTARI => ' || NECTARI_USER);
dbms_output.put_line(' Mot de passe NECTARI => ' || NECTARI_USER_PWD);
dbms_output.put_line(' /* Informations sur le tablespace */');
dbms_output.put_line(' TableSpace NECTARI');
dbms_output.put_line(' Nom => ' || NECTARI_TABLE_SPACE);
dbms_output.put_line(' Journaux => ' || sys.diutil.bool_to_int(NECTARI_TABLE_SPACE_LOG));
dbms_output.put_line(' Compression => ' || sys.diutil.bool_to_int(NECTARI_TABLE_SPACE_COMP));
dbms_output.put_line(' TableSpace TMP NECTARI');
dbms_output.put_line(' Nom => ' || NECTARI_TMP_TABLE_SPACE);
IF v_CUSTOM_TABLE_SPACE_PATH is not null THEN
dbms_output.put_line(' Chemin de fichier de données personnalisé détecté => ' || v_CUSTOM_TABLE_SPACE_PATH);
END IF;
dbms_output.new_line;

dbms_output.put_line('/**********************/');
dbms_output.put_line('/* TableSpace / Utilisateurs */');
dbms_output.put_line('/**********************/');
-- Création du tablespace (principal/temporaire)
SELECT COUNT(1) INTO v_NECTARI_USER_CHECK FROM DBA_USERS WHERE USERNAME = NECTARI_USER;

IF NECTARI_TABLE_SPACE is not null THEN
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLESPACE '
|| NECTARI_TABLE_SPACE
|| ' DATAFILE '''
|| v_CUSTOM_TABLE_SPACE_PATH || NECTARI_TABLE_SPACE
|| '.DBF'' SIZE 1024M AUTOEXTEND ON MAXSIZE 32767M'
|| v_NECTARI_TABLE_SPACE_COMP
|| v_NECTARI_TABLE_SPACE_LOG;
dbms_output.put_line(' TableSpace "' || NECTARI_TABLE_SPACE || '" créé');
EXCEPTION
WHEN TablespaceExistsExcep THEN
dbms_output.put_line(' Le TableSpace "' || NECTARI_TABLE_SPACE || '" existe déjà');
NULL;
WHEN FileExistsExcep THEN
dbms_output.put_line(' Le fichier associé au TableSpace "' || NECTARI_TABLE_SPACE || '" existe déjà');
NULL;
END;
ELSE
dbms_output.put_line(' La variable NECTARI_TABLE_SPACE n''a pas été remplie donc le tablespace ne sera pas créé');
END IF;

-- TableSpace temporaire
IF NECTARI_TMP_TABLE_SPACE is not null THEN
BEGIN
EXECUTE IMMEDIATE 'CREATE TEMPORARY TABLESPACE '
|| NECTARI_TMP_TABLE_SPACE
|| ' TEMPFILE '''
|| v_CUSTOM_TABLE_SPACE_PATH || NECTARI_TMP_TABLE_SPACE
|| '.DBF'' SIZE 1024M AUTOEXTEND ON MAXSIZE 32767M';
dbms_output.put_line(' TableSpace "' || NECTARI_TMP_TABLE_SPACE || '" créé');
EXCEPTION
WHEN TablespaceExistsExcep THEN
dbms_output.put_line(' Le TableSpace "' || NECTARI_TMP_TABLE_SPACE || '" existe déjà');
NULL;
WHEN FileExistsExcep THEN
dbms_output.put_line(' Le fichier associé au TableSpace "' || NECTARI_TMP_TABLE_SPACE || '" existe déjà');
NULL;
END;
ELSE
dbms_output.put_line(' La variable NECTARI_TMP_TABLE_SPACE n''a pas été remplie donc le tablespace ne sera pas créé');
END IF;

-- Créer ou mettre à jour l'utilisateur
IF ( v_NECTARI_USER_CHECK = 0 ) THEN
EXECUTE IMMEDIATE 'CREATE USER '
|| NECTARI_USER
|| ' IDENTIFIED BY '
|| NECTARI_USER_PWD
|| ' DEFAULT TABLESPACE '
|| NECTARI_TABLE_SPACE
|| ' TEMPORARY TABLESPACE '
|| NECTARI_TMP_TABLE_SPACE
|| ' QUOTA UNLIMITED ON '
|| NECTARI_TABLE_SPACE;
dbms_output.put_line(' Nom d’utilisateur "' || NECTARI_USER || ' créé');
ELSE
dbms_output.put_line(' Le nom d’utilisateur "' || NECTARI_USER || ' existe déjà');

IF ( REVOKE_EXIST_PERM = true ) THEN
dbms_output.put_line('/*******************************/');
dbms_output.put_line('/* Révocation des Permissions */');
dbms_output.put_line('/*******************************/');

dbms_output.put_line(' Révocation des rôles accordés ...');
for r in ( select * from dba_role_privs
where grantee = NECTARI_USER )
loop
EXECUTE IMMEDIATE 'revoke ' || r.granted_role ||' from ' || r.grantee;
dbms_output.put_line(' Révoqué : revoke ' || r.granted_role ||' from ' || r.grantee ||';');
end loop;

dbms_output.put_line(' Révocation des privilèges système accordés ...');
for r in ( select * from dba_sys_privs
where grantee = NECTARI_USER )
loop
EXECUTE IMMEDIATE 'revoke ' || r.privilege ||' from ' || r.grantee;
dbms_output.put_line(' Révoqué : revoke ' || r.privilege ||' from ' || r.grantee ||';');
end loop;

dbms_output.put_line(' Révocation des privilèges d’accès accordés ...');
for r in ( select * from dba_tab_privs
where grantee = NECTARI_USER )
loop
EXECUTE IMMEDIATE 'revoke ' || r.privilege || ' on ' || r.owner||'.'||r.table_name ||' from ' || r.grantee;
dbms_output.put_line(' Révoqué : revoke ' || r.privilege || ' on ' || r.owner||'.'||r.table_name ||' from ' || r.grantee ||';');
end loop;
ELSE
dbms_output.put_line(' Les autorisations actuelles de "' || NECTARI_USER || ' ne seront pas modifiées');
END IF;

END IF;

-- Permissions
dbms_output.put_line('/**********************/');
dbms_output.put_line('/* Permissions */');
dbms_output.put_line('/**********************/');
-- Accordez l'autorisation générale pour NECTARI/SEI
EXECUTE IMMEDIATE 'GRANT CREATE PROCEDURE, CREATE SESSION, CREATE TABLE, CONNECT, CREATE TYPE, CREATE VIEW, CREATE SYNONYM, CREATE TRIGGER, RESOURCE TO '
|| NECTARI_USER;
dbms_output.put_line(' Le nom d’utilisateur '|| NECTARI_USER || ' s’est vu accorder les permissions suivantes dans ses propres schémas :');
dbms_output.put_line(' - CREATE PROCEDURE');
dbms_output.put_line(' - CREATE SESSION');
dbms_output.put_line(' - CREATE TABLE');
dbms_output.put_line(' - CONNECT');
dbms_output.put_line(' - CREATE TYPE');
dbms_output.put_line(' - CREATE VIEW');
dbms_output.put_line(' - CREATE SYNONYM');
dbms_output.put_line(' - CREATE TRIGGER');
END;

Créer un utilisateur et un schéma BILicense

Exécutez le script 1_ConfigDB.sql. Configurez les paramètres du script pour correspondre à votre environnement :

  • Définissez le paramètre NECTARI_USER sur BILicense.
  • Définissez le paramètre NECTARI_TABLE_SPACE sur BILicense, ou un autre nom si vous le souhaitez.
  • Définissez le paramètre NECTARI_TMP_TABLE_SPACE sur BILicense_TMP, ou un autre nom si vous le souhaitez.
  • Ajustez les autres paramètres pour s'adapter à votre environnement et à vos politiques de sécurité.

Créer un utilisateur SEICube

L'utilisateur SEICube a accès à toutes les données de cube, y compris un accès en lecture aux schémas (utilisateurs) que vous spécifiez, avec la possibilité d'exclure des tables ou des vues spécifiques. Pour configurer cet utilisateur, exécutez le script 2_DataDB.sql et configurez les paramètres requis comme décrit dans les instructions du script. Utilisez le paramètre SCHEMA_LIST pour spécifier les schémas auxquels l'utilisateur peut accéder, et les paramètres EXCLUSION_TB_LIST et EXCLUSION_VW_LIST pour exclure toute table ou vue selon vos besoins.

L'exécution de ce script crée un utilisateur Oracle dédié, configure les affectations de tablespace et garantit que l'utilisateur a les bonnes permissions de données pour travailler avec les données de cube Nectari.

Afficher l'exemple de script 2_DataDB.sql
/*
Script pour créer un utilisateur Oracle dédié pour le Cube NECTARI/SEI.
Description :
- Crée un utilisateur Oracle spécifique pour l'application NECTARI/SEI, avec un tablespace associé (ou utilise un existant).
- Accorde les autorisations requises sur d'autres schémas (utilisateurs) selon les besoins.
Autorisations accordées :
- L'utilisateur NECTARI_CUBE reçoit des droits complets sur son propre schéma.
- Accès en lecture (SELECT) à toutes les tables et vues des schémas énumérés dans la variable SCHEMA_LIST.
- La capacité de créer des déclencheurs dans toute la base de données.
- En option, vous pouvez exclure des tables ou des vues spécifiques de l'accès accordé en utilisant les variables EXCLUSION_TB_LIST et EXCLUSION_VW_LIST.
- Si l'utilisateur existe déjà, ce script supprimera d'abord toutes ses autorisations actuelles (lorsqu'il est configuré).
Comment utiliser :
- Exécutez à partir d'un utilisateur ayant des privilèges administratifs sur le serveur Oracle.
- Mettez à jour les variables sous la section 'Changer les valeurs':
* NECTARI_CUSTOM_USER : Nom de l'utilisateur Cube NECTARI/SEI.
* NECTARI_CUSTOM_USER_PWD : Mot de passe pour l'utilisateur.
* NECTARI_CUSTOM_TABLE_SPACE : Nom du tablespace principal.
* NECTARI_CUSTOM_TABLE_SPACE_LOG : Activer les journaux pour le tablespace.
* NECTARI_CUSTOM_TABLE_SPACE_COMP : Activer la compression pour le tablespace (nécessite une compression à l’échelle du serveur).
* NECTARI_CUSTOM_TMP_TABLE_SPACE : Nom du tablespace temporaire.
* ENABLE_LOGING : Défini sur true pour activer l'impression des journaux.
* REVOKE_EXIST_PERM : Si true, supprimera les permissions existantes pour l'utilisateur s'il existe.
- Spécifiez les paramètres de permissions :
* SCHEMA_LIST : Liste des schémas dont les tables/vues l'utilisateur a accès en lecture.
* EXCLUSION_TB_LIST : Liste des tables auxquelles ne pas accorder d'accès (format : "SCHEMA"."TABLE").
* EXCLUSION_VW_LIST : Liste des vues auxquelles ne pas accorder d'accès (format : "SCHEMA"."VIEW").
- Exécutez le script.
Notes importantes :
- Dans Oracle, les accords d'accès pour d'autres schémas doivent se faire table par table.
→ Si de nouvelles tables sont ajoutées par la suite à un schéma, vous devez réexécuter le script pour mettre à jour les droits.
- Les permissions de type CREATE ANY TRIGGER et similaires nécessitent des privilèges à l'échelle du serveur pour une utilisation entre schémas.
*/

set serveroutput on;

DECLARE
-- Déclarations de variables
NECTARI_CUSTOM_USER VARCHAR2(1000);
NECTARI_CUSTOM_USER_PWD VARCHAR2(1000);
NECTARI_CUSTOM_TABLE_SPACE VARCHAR2(1000);
NECTARI_CUSTOM_TABLE_SPACE_LOG BOOLEAN;
NECTARI_CUSTOM_TABLE_SPACE_COMP BOOLEAN;
NECTARI_CUSTOM_TMP_TABLE_SPACE VARCHAR2(1000);
SCHEMA_LIST dbms_sql.varchar2_table;
EXCLUSION_TB_LIST dbms_sql.varchar2_table;
EXCLUSION_VW_LIST dbms_sql.varchar2_table;
ENABLE_LOGING BOOLEAN;
REVOKE_EXIST_PERM BOOLEAN;
-- Autres variables
v_CUSTOM_TABLE_SPACE_PATH VARCHAR2(1000);
v_NECTARI_CUSTOM_USER_CHECK NUMBER;
v_NECTARI_CUSTOM_TABLE_SPACE_LOG VARCHAR2(1000);
v_NECTARI_CUSTOM_TABLE_SPACE_COMP VARCHAR2(1000);
v_NECTARI_CUSTOM_TMP_TS_COMP VARCHAR2(1000);
TablespaceExistsExcep EXCEPTION;
FileExistsExcep EXCEPTION;
PRAGMA EXCEPTION_INIT(TablespaceExistsExcep, -1543);
PRAGMA EXCEPTION_INIT(FileExistsExcep, -1119);

BEGIN
-- Changez les valeurs selon votre environnement
-- Informations d'utilisateur
NECTARI_CUSTOM_USER := 'NECTARI_SEED';
NECTARI_CUSTOM_USER_PWD := 'NECTARI_SEED_PWD';
-- Configuration des tablespaces
NECTARI_CUSTOM_TABLE_SPACE := 'NECTARI_SEED';
NECTARI_CUSTOM_TABLE_SPACE_LOG := true;
NECTARI_CUSTOM_TABLE_SPACE_COMP := false;
NECTARI_CUSTOM_TMP_TABLE_SPACE := 'NECTARI_SEED_TMP';
-- Schémas pour lesquels accorder un accès SELECT (ajoutez/ajustez selon les besoins)
SCHEMA_LIST(1) := 'X3FOLDER';
-- Exclusions (décommentez et personnalisez si nécessaire)
-- EXCLUSION_TB_LIST(1) := '"X3FOLDER"."TABLE"'; -- Exclure cette table des droits SELECT
-- EXCLUSION_VW_LIST(1) := '"X3FOLDER"."VIEW"'; -- Exclure cette vue des droits SELECT
-- Options des scripts
ENABLE_LOGING := true; -- Définir sur true pour afficher la sortie des journaux
REVOKE_EXIST_PERM := false; -- Définir sur true pour révoquer toutes les permissions existantes de l'utilisateur

-- Déterminer le chemin du fichier de données personnalisé (s'il est défini dans les paramètres de la base de données)
SELECT VALUE INTO v_CUSTOM_TABLE_SPACE_PATH FROM v$parameter WHERE NAME ='db_create_file_dest' ;
IF v_CUSTOM_TABLE_SPACE_PATH is not null THEN
v_CUSTOM_TABLE_SPACE_PATH := v_CUSTOM_TABLE_SPACE_PATH || '/';
END IF;

-- Activer ou désactiver les journaux pour cette session
IF ( ENABLE_LOGING = true ) THEN
dbms_output.enable(1000000);
ELSE
dbms_output.disable;
END IF;

-- Préparer les paramètres du tablespace pour les options de journalisation et de compression
IF ( NECTARI_CUSTOM_TABLE_SPACE_LOG = true ) THEN
v_NECTARI_CUSTOM_TABLE_SPACE_LOG := '';
ELSE
v_NECTARI_CUSTOM_TABLE_SPACE_LOG := ' NOLOGGING ';
END IF;

IF ( NECTARI_CUSTOM_TABLE_SPACE_COMP = true ) THEN
v_NECTARI_CUSTOM_TABLE_SPACE_COMP := ' DEFAULT COMPRESS ';
ELSE
v_NECTARI_CUSTOM_TABLE_SPACE_COMP := '';
END IF;

-- Résumé des variables de sortie
dbms_output.put_line('/**********************/');
dbms_output.put_line('/* Résumé des variables */');
dbms_output.put_line('/**********************/');
dbms_output.put_line(' Nom d’utilisateur objets NECTARI => ' || NECTARI_CUSTOM_USER);
dbms_output.put_line(' Mot de passe objets NECTARI => ' || NECTARI_CUSTOM_USER_PWD);
dbms_output.put_line(' /* Informations sur le tablespace */');
dbms_output.put_line(' TableSpace objets NECTARI');
dbms_output.put_line(' Nom => ' || NECTARI_CUSTOM_TABLE_SPACE);
dbms_output.put_line(' Journaux => ' || sys.diutil.bool_to_int(NECTARI_CUSTOM_TABLE_SPACE_LOG));
dbms_output.put_line(' Compression => ' || sys.diutil.bool_to_int(NECTARI_CUSTOM_TABLE_SPACE_COMP));
dbms_output.put_line(' TableSpace TMP objets NECTARI');
dbms_output.put_line(' Nom => ' || NECTARI_CUSTOM_TMP_TABLE_SPACE);
IF v_CUSTOM_TABLE_SPACE_PATH is not null THEN
dbms_output.put_line(' Chemin de fichier de données personnalisé détecté => ' || v_CUSTOM_TABLE_SPACE_PATH);
END IF;
FOR i IN SCHEMA_LIST.FIRST .. SCHEMA_LIST.LAST
LOOP
dbms_output.put_line(' Schémas => ' || SCHEMA_LIST(i));
END LOOP;
IF EXCLUSION_TB_LIST.count > 0 THEN
FOR i IN EXCLUSION_TB_LIST.FIRST .. EXCLUSION_TB_LIST.LAST
LOOP
dbms_output.put_line(' Tables exclues => ' || EXCLUSION_TB_LIST(i));
END LOOP;
END IF;
IF EXCLUSION_VW_LIST.count > 0 THEN
FOR i IN EXCLUSION_VW_LIST.FIRST .. EXCLUSION_VW_LIST.LAST
LOOP
dbms_output.put_line(' Vues exclues => ' || EXCLUSION_VW_LIST(i));
END LOOP;
END IF;
dbms_output.new_line;

dbms_output.put_line('/**********************/');
dbms_output.put_line('/* TableSpace / Utilisateurs */');
dbms_output.put_line('/**********************/');
-- Vérifiez si l'utilisateur Cube NECTARI/SEI existe
SELECT COUNT(1) INTO v_NECTARI_CUSTOM_USER_CHECK FROM DBA_USERS WHERE USERNAME = NECTARI_CUSTOM_USER;

IF NECTARI_CUSTOM_TABLE_SPACE is not null THEN
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLESPACE '
|| NECTARI_CUSTOM_TABLE_SPACE
|| ' DATAFILE '''
|| v_CUSTOM_TABLE_SPACE_PATH || NECTARI_CUSTOM_TABLE_SPACE
|| '.DBF'' SIZE 1024M AUTOEXTEND ON MAXSIZE 32767M'
|| v_NECTARI_CUSTOM_TABLE_SPACE_COMP
|| v_NECTARI_CUSTOM_TABLE_SPACE_LOG;
dbms_output.put_line(' TableSpace "' || NECTARI_CUSTOM_TABLE_SPACE || '" créé');
EXCEPTION
WHEN TablespaceExistsExcep THEN
dbms_output.put_line(' Le TableSpace "' || NECTARI_CUSTOM_TABLE_SPACE || '" existe déjà');
NULL;
WHEN FileExistsExcep THEN
dbms_output.put_line(' Le fichier associé au TableSpace "' || NECTARI_CUSTOM_TABLE_SPACE || '" existe déjà');
NULL;
END;
ELSE
dbms_output.put_line(' La variable NECTARI_CUSTOM_TABLE_SPACE n''a pas été remplie donc le tablespace ne sera pas créé');
END IF;

-- Créer le tablespace temporaire si ce n'est pas null
IF NECTARI_CUSTOM_TMP_TABLE_SPACE is not null THEN
BEGIN
EXECUTE IMMEDIATE 'CREATE TEMPORARY TABLESPACE '
|| NECTARI_CUSTOM_TMP_TABLE_SPACE
|| ' TEMPFILE '''
|| v_CUSTOM_TABLE_SPACE_PATH || NECTARI_CUSTOM_TMP_TABLE_SPACE
|| '.DBF'' SIZE 1024M AUTOEXTEND ON MAXSIZE 32767M';
dbms_output.put_line(' TableSpace "' || NECTARI_CUSTOM_TMP_TABLE_SPACE || '" créé');
EXCEPTION
WHEN TablespaceExistsExcep THEN
dbms_output.put_line(' Le TableSpace "' || NECTARI_CUSTOM_TMP_TABLE_SPACE || '" existe déjà');
NULL;
WHEN FileExistsExcep THEN
dbms_output.put_line(' Le fichier associé au TableSpace "' || NECTARI_CUSTOM_TMP_TABLE_SPACE || '" existe déjà');
NULL;
END;
ELSE
dbms_output.put_line(' La variable NECTARI_CUSTOM_TMP_TABLE_SPACE n''a pas été remplie donc le tablespace ne sera pas créé');
END IF;

-- Créer l'utilisateur s'il n'existe pas déjà ; sinon, traiter l'utilisateur existant selon les paramètres
IF ( v_NECTARI_CUSTOM_USER_CHECK = 0 ) THEN
EXECUTE IMMEDIATE 'CREATE USER '
|| NECTARI_CUSTOM_USER
|| ' IDENTIFIED BY '
|| NECTARI_CUSTOM_USER_PWD
|| ' DEFAULT TABLESPACE '
|| NECTARI_CUSTOM_TABLE_SPACE
|| ' TEMPORARY TABLESPACE '
|| NECTARI_CUSTOM_TMP_TABLE_SPACE
|| ' QUOTA UNLIMITED ON '
|| NECTARI_CUSTOM_TABLE_SPACE;
dbms_output.put_line(' Nom d’utilisateur "' || NECTARI_CUSTOM_USER || ' créé');
ELSE
dbms_output.put_line(' Le nom d’utilisateur "' || NECTARI_CUSTOM_USER || ' existe déjà');

IF ( REVOKE_EXIST_PERM = true ) THEN
dbms_output.put_line('/*******************************/');
dbms_output.put_line('/* Révocation des Permissions */');
dbms_output.put_line('/*******************************/');

dbms_output.put_line(' Révocation des rôles accordés ...');
for r in ( select * from dba_role_privs
where grantee = NECTARI_CUSTOM_USER )
loop
EXECUTE IMMEDIATE 'revoke ' || r.granted_role ||' from ' || r.grantee;
dbms_output.put_line(' Révoqué : revoke ' || r.granted_role ||' from ' || r.grantee ||';');
end loop;

dbms_output.put_line(' Révocation des privilèges système accordés ...');
for r in ( select * from dba_sys_privs
where grantee = NECTARI_CUSTOM_USER )
loop
EXECUTE IMMEDIATE 'revoke ' || r.privilege ||' from ' || r.grantee;
dbms_output.put_line(' Révoqué : revoke ' || r.privilege ||' from ' || r.grantee ||';');
end loop;

dbms_output.put_line(' Révocation des privilèges d’accès accordés ...');
for r in ( select * from dba_tab_privs
where grantee = NECTARI_CUSTOM_USER )
loop
EXECUTE IMMEDIATE 'revoke ' || r.privilege || ' on ' || r.owner||'.'||r.table_name ||' from ' || r.grantee;
dbms_output.put_line(' Révoqué : revoke ' || r.privilege || ' on ' || r.owner||'.'||r.table_name ||' from ' || r.grantee ||';');
end loop;
ELSE
dbms_output.put_line(' Les permissions actuelles de "' || NECTARI_CUSTOM_USER || ' ne seront pas modifiées');
END IF;
END IF;

-- Permissions
dbms_output.put_line('/**********************/');
dbms_output.put_line('/* Permissions */');
dbms_output.put_line('/**********************/');
-- Accordez des privilèges généraux à l'utilisateur Cube NECTARI/SEI
EXECUTE IMMEDIATE 'GRANT CREATE PROCEDURE, CREATE SESSION, CREATE TABLE, CONNECT, CREATE TYPE, CREATE VIEW, CREATE SYNONYM, CREATE TRIGGER, RESOURCE TO '
|| NECTARI_CUSTOM_USER;
dbms_output.put_line(' Le nom d’utilisateur '|| NECTARI_CUSTOM_USER || ' a obtenu les permissions suivantes sur ses propres schémas :');
dbms_output.put_line(' - CREATE PROCEDURE');
dbms_output.put_line(' - CREATE SESSION');
dbms_output.put_line(' - CREATE TABLE');
dbms_output.put_line(' - CONNECT');
dbms_output.put_line(' - CREATE TYPE');
dbms_output.put_line(' - CREATE VIEW');
dbms_output.put_line(' - CREATE SYNONYM');
dbms_output.put_line(' - CREATE TRIGGER');

-- Accordez CREATE ANY TRIGGER (s'applique à l'échelle du serveur—utiliser avec précaution)
EXECUTE IMMEDIATE 'GRANT CREATE ANY TRIGGER TO ' || NECTARI_CUSTOM_USER;
dbms_output.put_line(' Le nom d’utilisateur '|| NECTARI_CUSTOM_USER || ' a obtenu les permissions CREATE ANY TRIGGER');
dbms_output.put_line(' !!! Le CREATE ANY TRIGGER s’applique à l’échelle du serveur !!!');

-- Accordez SELECT sur les tables et vues de chaque schéma dans SCHEMA_LIST
FOR i IN SCHEMA_LIST.FIRST .. SCHEMA_LIST.LAST
LOOP
dbms_output.put_line(' Itération sur les tables pour le schéma ' || SCHEMA_LIST(i));
FOR x IN (
SELECT table_name FROM dba_all_tables WHERE owner = SCHEMA_LIST(i)
) LOOP
EXECUTE IMMEDIATE 'GRANT SELECT ON "'
|| SCHEMA_LIST(i)
|| '"."'
|| x.table_name
|| '" TO '
|| NECTARI_CUSTOM_USER;
dbms_output.put_line(' Accord des permissions SELECT sur '
|| SCHEMA_LIST(i)
|| '.'
|| x.table_name);
END LOOP;
dbms_output.put_line(' Itération sur les vues pour le schéma ' || SCHEMA_LIST(i));
FOR x IN (
SELECT
view_name
FROM
dba_views
WHERE
owner = SCHEMA_LIST(i)
AND view_name <> 'LEGGTEYGRP'
) LOOP
EXECUTE IMMEDIATE 'GRANT SELECT ON "'
|| SCHEMA_LIST(i)
|| '"."'
|| x.view_name
|| '" TO '
|| NECTARI_CUSTOM_USER;
dbms_output.put_line(' Accord des permissions SELECT sur '
|| SCHEMA_LIST(i)
|| '.'
|| x.view_name);
END LOOP;
END LOOP;

-- Révoquer SELECT pour les tables exclues
dbms_output.put_line(' Révocation des permissions');
IF EXCLUSION_TB_LIST.count > 0 THEN
FOR i IN EXCLUSION_TB_LIST.FIRST .. EXCLUSION_TB_LIST.LAST
LOOP
EXECUTE IMMEDIATE 'REVOKE SELECT ON '
|| EXCLUSION_TB_LIST(i)
|| ' FROM '
|| NECTARI_CUSTOM_USER;
dbms_output.put_line(' Révocation de l’accès select pour la table ' || EXCLUSION_TB_LIST(i));
END LOOP;
END IF;
IF EXCLUSION_VW_LIST.count > 0 THEN
FOR i IN EXCLUSION_VW_LIST.FIRST .. EXCLUSION_VW_LIST.LAST
LOOP
EXECUTE IMMEDIATE 'REVOKE SELECT ON '
|| EXCLUSION_TB_LIST(i)
|| ' FROM '
|| NECTARI_CUSTOM_USER;
dbms_output.put_line(' Révocation de l’accès select pour la vue ' || EXCLUSION_VW_LIST(i));
END LOOP;
END IF;
END;

Installer le package SEI

Après avoir créé les utilisateurs Oracle requis, exécutez les exécutables SEI pour configurer les tables Oracle nécessaires à votre déploiement. Cette étape complète la structure initiale de la base de données et prépare votre environnement à être utilisé avec SEI.

Gestion supplémentaire de la base de données

Ajouter de l'espace à un tablespace Oracle

Lorsque vous devez ajouter du stockage à un tablespace existant, utilisez le script 3_AddNewDataFile.sql. Configurez les paramètres dans le script pour correspondre à votre environnement :

  • Définissez TABLE_SPACE sur le tablespace cible.
  • Définissez DATA_FILE_NAME sur le nom de votre nouveau fichier de données choisi.
  • Définissez ENABLE_LOGING si vous souhaitez une sortie détaillée.

Par défaut, cet exemple ajoutera 32 Go de capacité supplémentaire, mais vous pouvez ajuster la taille et la taille maximale dans le script pour répondre à vos besoins.

Afficher l'exemple de script 3_AddNewDataFile
/*
Script pour ajouter un nouveau fichier de données à un tablespace existant.
Description :
Ajoute un nouveau fichier de données à un tablespace Oracle pour augmenter le stockage disponible et éviter les problèmes d'espace.
Utilisation :
- Exécutez en tant qu'utilisateur ayant des privilèges administratifs sur le serveur Oracle.
- Mettez à jour les variables sous la section 'Changer les valeurs' :
* TABLE_SPACE : Nom du tablespace à mettre à jour.
* DATA_FILE_NAME : Nom pour le nouveau fichier de données.
* ENABLE_LOGING : Défini sur true pour activer l'impression des journaux.
- Exécutez le script.
Remarques :
- Vous pouvez modifier la taille du fichier de données, la taille maximale et les attributs associés dans l'instruction EXECUTE IMMEDIATE pour répondre à vos besoins.
*/
set serveroutput on;

DECLARE
-- Déclarations de variables
TABLE_SPACE VARCHAR2(1000);
DATA_FILE_NAME VARCHAR2(1000);
ENABLE_LOGING BOOLEAN;
-- Autres variables
v_CUSTOM_TABLE_SPACE_PATH VARCHAR2(1000);
TablespaceExistsExcep EXCEPTION;
FileExistsExcep EXCEPTION;
PRAGMA EXCEPTION_INIT(TablespaceExistsExcep, -1543);
PRAGMA EXCEPTION_INIT(FileExistsExcep, -1537);

BEGIN
-- Changez les valeurs selon votre environnement
TABLE_SPACE := 'NECTARI_SEED';
DATA_FILE_NAME := 'NECTARI_SEED_NEW2';
ENABLE_LOGING := true;

-- Activer ou désactiver la journalisation pour cette session
IF ( ENABLE_LOGING = true ) THEN
dbms_output.enable(1000000);
ELSE
dbms_output.disable;
END IF;

-- Récupérer le chemin du fichier de données personnalisé (s'il est défini dans les params d'init DB)
SELECT VALUE INTO v_CUSTOM_TABLE_SPACE_PATH FROM v$parameter WHERE NAME ='db_create_file_dest' ;
IF v_CUSTOM_TABLE_SPACE_PATH is not null THEN
v_CUSTOM_TABLE_SPACE_PATH := v_CUSTOM_TABLE_SPACE_PATH || '/';
END IF;

-- Résumé des variables de sortie
dbms_output.put_line('/**********************/');
dbms_output.put_line('/* Résumé des variables */');
dbms_output.put_line('/**********************/');
dbms_output.put_line(' Nom du tablespace => ' || TABLE_SPACE);
dbms_output.put_line(' Nom du fichier de données => ' || DATA_FILE_NAME);
IF v_CUSTOM_TABLE_SPACE_PATH is not null THEN
dbms_output.put_line(' Chemin de fichier de données personnalisé détecté => ' || v_CUSTOM_TABLE_SPACE_PATH);
END IF;

dbms_output.put_line('/*************************/');
dbms_output.put_line('/* TableSpace / Fichier de données */');
dbms_output.put_line('/*************************/');
IF TABLE_SPACE is not null THEN
IF DATA_FILE_NAME is not null THEN
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLESPACE '
|| TABLE_SPACE
|| ' ADD DATAFILE '''
|| v_CUSTOM_TABLE_SPACE_PATH || DATA_FILE_NAME
|| '.DBF'' SIZE 1024M AUTOEXTEND ON MAXSIZE 32767M';
dbms_output.put_line(' TableSpace "' || TABLE_SPACE || '" mis à jour pour utiliser également le fichier de données ' || v_CUSTOM_TABLE_SPACE_PATH || DATA_FILE_NAME || '.DBF');
EXCEPTION
WHEN TablespaceExistsExcep THEN
dbms_output.put_line(' Le TableSpace "' || TABLE_SPACE || '" existe déjà');
NULL;
WHEN FileExistsExcep THEN
dbms_output.put_line(' Le fichier de données "' || DATA_FILE_NAME || '" existe déjà');
NULL;
END;
ELSE
dbms_output.put_line(' La variable DATA_FILE_NAME n''a pas été remplie donc le fichier de données ne sera pas créé');
END IF;
ELSE
dbms_output.put_line(' La variable TABLE_SPACE n''a pas été remplie donc le tablespace ne sera pas mis à jour');
END IF;
END;

Supprimer les utilisateurs et tablespaces Oracle

Pour désinstaller les composants SEI et nettoyer les utilisateurs et tablespaces, utilisez les exécutables SEI si disponibles, et exécutez le script 9_UninstallDB.sql autant de fois que nécessaire pour supprimer chaque utilisateur.

Afficher l'exemple de script 9_UninstallDB.sql
/*
Script pour désinstaller un utilisateur Oracle NECTARI/SEI et les tablespaces associés.
Description :
Supprime l'utilisateur NECTARI/SEI spécifié, y compris la terminaison des sessions ouvertes et la suppression des tablespaces et des fichiers de données.
Utilisation :
- Exécutez en tant qu'utilisateur ayant des privilèges administratifs sur le serveur Oracle.
- Éditez les variables sous la section "Changer les valeurs" :
* NECTARI_USER : Nom de l'utilisateur NECTARI/SEI à supprimer.
* NECTARI_TABLE_SPACE : (Optionnel) Tablespace principal associé.
* NECTARI_TMP_TABLE_SPACE : (Optionnel) Tablespace temporaire associé.
* ENABLE_LOGING : Défini sur true pour imprimer les journaux.
- Exécutez le script.
Remarques :
- Assurez-vous que toutes les données sont sauvegardées car les tablespaces et les fichiers de données seront supprimés.
- Le script peut être réutilisé pour d'autres utilisateurs/tablespaces en modifiant les valeurs des variables.
*/
set serveroutput on;

DECLARE
-- Déclarations de variables
NECTARI_USER VARCHAR2(1000);
NECTARI_TABLE_SPACE VARCHAR2(1000);
NECTARI_TMP_TABLE_SPACE VARCHAR2(1000);
ENABLE_LOGING BOOLEAN;
-- Autres variables
v_NECTARI_USER_CHECK NUMBER;
TablespaceDOESNTExistsExcep EXCEPTION;
PRAGMA EXCEPTION_INIT(TablespaceDOESNTExistsExcep, -959);
BEGIN
-- Changez les valeurs selon votre environnement
-- Informations sur l'utilisateur
NECTARI_USER := 'NECTARI';
-- Informations sur le Tablespace
NECTARI_TABLE_SPACE := 'NECTARI';
NECTARI_TMP_TABLE_SPACE := 'NECTARI_TMP';
-- Autre
ENABLE_LOGING := true;

-- Activer ou désactiver les journaux
IF ( ENABLE_LOGING = true ) THEN
dbms_output.enable(1000000);
ELSE
dbms_output.disable;
END IF;

-- Résumé des variables de sortie
dbms_output.put_line('/**********************/');
dbms_output.put_line('/* Résumé des variables */');
dbms_output.put_line('/**********************/');
dbms_output.put_line(' Nom d’utilisateur objets NECTARI => ' || NECTARI_USER);
dbms_output.put_line(' /* Informations sur le tablespace */');
dbms_output.put_line(' TableSpace NECTARI');
dbms_output.put_line(' Nom => ' || NECTARI_TABLE_SPACE);
dbms_output.put_line(' TableSpace TMP NECTARI');
dbms_output.put_line(' Nom => ' || NECTARI_TMP_TABLE_SPACE);
dbms_output.new_line;

dbms_output.put_line('/**********************/');
dbms_output.put_line('/* TableSpace / Utilisateurs */');
dbms_output.put_line('/**********************/');
-- Vérifiez l'utilisateur et supprimez-le
SELECT COUNT(1) INTO v_NECTARI_USER_CHECK FROM DBA_USERS WHERE USERNAME = NECTARI_USER;

IF ( v_NECTARI_USER_CHECK = 1 ) THEN
-- Terminez toutes les sessions ouvertes pour cet utilisateur
FOR r IN (select sid,serial# from v$session where username = NECTARI_USER)
LOOP
EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION ''' || r.sid || ','
|| r.serial# || ''' IMMEDIATE';
dbms_output.put_line(' Tuer la session avec le numéro de série "' || r.serial# || ' pour l''utilisateur ' || NECTARI_USER);
END LOOP;
-- Peut être utile de tuer manuellement la session
--SELECT 'ALTER SYSTEM KILL SESSION '''||sid||','||serial#||''' IMMEDIATE;' FROM v$session where username=NECTARI_USER;
EXECUTE IMMEDIATE 'DROP USER ' || NECTARI_USER || ' CASCADE';
dbms_output.put_line(' Nom d’utilisateur "' || NECTARI_USER || ' supprimé');
ELSE
dbms_output.put_line(' Le nom d’utilisateur "' || NECTARI_USER || ' n''''existe pas');
END IF;

-- Supprimer le tablespace principal, si spécifié
IF NECTARI_TABLE_SPACE is not null THEN
BEGIN
EXECUTE IMMEDIATE 'DROP TABLESPACE '
|| NECTARI_TABLE_SPACE
|| ' INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS';
dbms_output.put_line(' TableSpace "' || NECTARI_TABLE_SPACE || '" supprimé');
EXCEPTION
WHEN TablespaceDOESNTExistsExcep THEN
dbms_output.put_line(' Le TableSpace "' || NECTARI_TABLE_SPACE || '" n''existe pas');
NULL;
END;
ELSE
dbms_output.put_line(' La variable NECTARI_TABLE_SPACE n''a pas été remplie donc le tablespace ne sera pas supprimé');
END IF;

-- Supprimer le tablespace temporaire, si spécifié
IF NECTARI_TMP_TABLE_SPACE is not null THEN
BEGIN
EXECUTE IMMEDIATE 'DROP TABLESPACE '
|| NECTARI_TMP_TABLE_SPACE
|| ' INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS';
dbms_output.put_line(' TableSpace "' || NECTARI_TMP_TABLE_SPACE || '" supprimé');
EXCEPTION
WHEN TablespaceDOESNTExistsExcep THEN
dbms_output.put_line(' Le TableSpace "' || NECTARI_TMP_TABLE_SPACE || '" n''existe pas');
NULL;
END;
ELSE
dbms_output.put_line(' La variable NECTARI_TABLE_SPACE n''a pas été remplie donc le tablespace ne sera pas supprimé');
END IF;
END;

Définitions des composants Oracle

TermeDéfinition
SID (Identifiant Système)Identifie chaque instance de base de données Oracle de manière unique (par exemple, ORCL).
Utilisateur/SchémaDéfinit le compte Oracle utilisé pour les connexions, et possède des objets de schéma (tables, vues, etc.). En pratique, lie le compte et son schéma comme la même entité.
TablespaceRegroupe des unités de stockage logiques dans la base de données, en utilisant un ou plusieurs fichiers de données pour stocker des données.
Remarque : Supporte les options avancées (comme DEFAULT ROW STORE COMPRESS ADVANCED). Beaucoup de ces fonctionnalités nécessitent une licence Oracle supplémentaire—consultez votre DBA avant utilisation.
Tablespace temporaireStocke les données temporaires qui n'existent que pendant la durée d'une session et prend en charge les opérations de tri de grande taille qui ne rentrent pas en mémoire principale. Partage l'espace entre plusieurs utilisateurs.
Fichier de donnéesStocke les données physiques d'un tablespace sur le disque. Attribue un identifiant unique à chaque fichier de données et permet plusieurs fichiers par tablespace, tant pour les tablespaces réguliers que temporaires.
Taille de blocDétermine la granularité du stockage des données dans chaque tablespace. Influence la taille maximale des fichiers de données et la capacité globale de la base de données ; est généralement cohérente pour une base de données.

Stockage

Taille de bloc

Définit la granularité de stockage des données par défaut, qui est souvent de 8 Ko et permet à chaque fichier de données d'atteindre une taille maximale de 32 Go. Pour vérifier la taille de bloc actuelle de la base de données, exécutez :

SELECT value FROM v$parameter WHERE name = 'db_block_size';
Taille de blocTaille maximale du fichier de donnéesTaille maximale du jeu de données
2 Ko8 Go512 To
4 Ko16 Go1 Po
8 Ko32 Go2 Po
16 Ko64 Go4 Po
32 Ko128 Go8 Po

Tablespace et fichier de données

Commencez par utiliser par défaut un seul fichier de données par tablespace, ce qui, avec une taille de bloc de 8 Ko, limite le tablespace à 32 Go. Ajoutez d'autres fichiers de données pour étendre le stockage tant pour les tablespaces réguliers que temporaires. N'oubliez pas que vous pouvez ajouter jusqu'à 65 536 fichiers de données par base de données (supportant des tailles maximales très grandes) et jusqu'à 1 022 fichiers de données par tablespace (32 To à 8 Ko de taille de bloc).
Ajoutez un nouveau fichier de données à un tablespace en exécutant :

ALTER TABLESPACE YOUR_TABLE_SPACE ADD DATAFILE 'YOURNAME.DBF' SIZE 1024M AUTOEXTEND ON MAXSIZE 32767M;

Affichez tous les fichiers de données dans un tablespace en exécutant :

SELECT TABLESPACE_NAME, FILE_NAME FROM DBA_DATA_FILES;

Tablespaces temporaires

Attendez-vous à ce que le tablespace temporaire croisse considérablement après un chargement initial de données plein de l'OLAP Manager, mais observez que son utilisation se stabilise lors de chargements ultérieurs. Utilisez les tablespaces temporaires pour permettre des opérations de tri simultanées qui dépassent la capacité mémoire.
Vérifiez l'allocation d'espace actuelle pour un tablespace temporaire en exécutant :

SELECT * FROM dba_temp_free_space;

Ajoutez un nouveau fichier temporaire à un tablespace existant en exécutant :

ALTER TABLESPACE YOUR_TABLE_SPACE ADD TEMPFILE 'YOURNAME.DBF' SIZE 1024M AUTOEXTEND ON MAXSIZE 32767M;

Journalisation et compression

Journalisation

Activez la journalisation par défaut lorsque vous créez un nouveau tablespace dans Oracle. Envisagez de désactiver la journalisation pour un entrepôt de données SEI, car les rechargements réguliers rendent la journalisation moins importante et désactiver la journalisation peut réduire considérablement l'utilisation des tablespaces temporaires.
Créez un nouveau tablespace sans journalisation en exécutant :

CREATE TABLESPACE your_table_space DATAFILE 'your_name.DBF' SIZE 1024M AUTOEXTEND ON MAXSIZE 32767M NOLOGGING;

Supprimez la journalisation d'un tablespace existant en exécutant :

ALTER TABLESPACE NectariCUBE3 NOLOGGING;

Compression

Appliquez la compression avancée des lignes dans Oracle pour optimiser le stockage SEI. Utilisez cette fonctionnalité pour permettre à Oracle de lire des blocs compressés (données et index) directement en mémoire, améliorant ainsi les performances en réduisant les opérations d'E/S et l'utilisation du cache.
Créez un nouveau tablespace avec compression et sans journalisation en exécutant :

CREATE TABLESPACE your_table_space DATAFILE 'your_name.DBF' SIZE 1024M AUTOEXTEND ON MAXSIZE 32767M DEFAULT ROW STORE COMPRESS ADVANCED NOLOGGING;

Résultats des tests de journalisation et de compression

Examinez le tableau ci-dessous pour comparer les performances de journalisation et de compression dans un test avec plus de 190 millions de lignes sources. Observez que tous les scénarios confirment que la journalisation doit être désactivée pour les charges de travail d'entrepôt de données SEI. Envisagez fortement d'activer la compression—les temps de chargement restent similaires, mais l'espace de stockage est considérablement réduit.

Taille de blocCompressionJournalisationTemps de chargementTaille temporaireTaille des donnéesTotal (GB)
8 Koouioui1h2824.768.893.5
8 Kononoui1h1683.2106189.2
8 Koouinon1h2825.270.295.4
8 Kononnon1h1228108136
16 Kononnon1h1225.2106131.2

Sécurité

Utilisateur et accès

Créez des utilisateurs sans accès par défaut à SEI. Ajoutez un utilisateur SEI dédié dans la configuration de la source de données pour éviter les restrictions de tablespace et attachez le bon tablespace lors de la création de l'utilisateur.
Créez un nouvel utilisateur et attachez le tablespace :

CREATE USER YOUR_USER IDENTIFIED BY YOUR_PASSWORD 
DEFAULT TABLESPACE YOUR_TABLESPACE
TEMPORARY TABLESPACE YOUR_TEMP_TABLESPACE_TMP
QUOTA UNLIMITED ON YOUR_TABLESPACE;

Accordez les privilèges minimaux requis :

GRANT create procedure, create session, create table, connect,
create type, create view, create synonym, create trigger, resource TO YOUR_USER;
remarque

Pour toute source de données Oracle, définissez l'utilisateur SEI comme le schéma personnalisé dans votre définition de source de données. Cela garantit que les tables de suivi et les objets personnalisés sont créés dans le schéma de l'utilisateur SEI (et non dans le schéma source). Les déclencheurs doivent être gérés via les paramètres de sécurité appropriés de SEI.

Accordez un accès en lecture sur toutes les tables et vues dans un schéma source :

BEGIN
FOR x IN (SELECT table_name FROM DBA_TABLES WHERE OWNER = 'SOURCE_USER') LOOP
EXECUTE IMMEDIATE 'GRANT SELECT ON SOURCE_USER."' || x.table_name || '" TO YOUR_USER';
END LOOP;
FOR x IN (SELECT view_name FROM DBA_VIEWS WHERE OWNER = 'SOURCE_USER') LOOP
EXECUTE IMMEDIATE 'GRANT SELECT ON SOURCE_USER."' || x.view_name || '" TO YOUR_USER';
END LOOP;
END;

Ajustez le niveau d'accès en fonction de vos besoins (lecture seule, création de cube OLAP, écriture, etc.).

Déclencheurs

Créez des déclencheurs directement dans la configuration utilisateur SEI dans l'OLAP Manager, en garantissant un niveau de sécurité correct. Cette approche empêche les problèmes où le système ERP insère des lignes dans une table avec un déclencheur mais n'a pas accès aux tables de suivi de SEI.
Accordez l'autorisation requise à votre utilisateur :

GRANT create any trigger TO YOUR_USER;

Configurez votre source de données avec le schéma et l'utilisateur SEI (par exemple, utilisez SEED comme schéma source et SEICube comme schéma SEI). Lorsque vous construisez le Cube OLAP, placez à la fois la table de suivi et le déclencheur dans le schéma SEI, et non dans la source. Ce paramétrage permet au déclencheur d’accéder automatiquement à la table de suivi.

Lorsqu'un processus ERP insère un enregistrement dans la source (par exemple, SEED.GACCENTRYD dans SEED), Oracle exécute le déclencheur avec les privilèges de l'utilisateur SEI, garantissant ainsi que la table de suivi est toujours accessible.