Aller au contenu principal

Créer les utilisateurs Oracle

Pour préparer l’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 (obligatoire depuis la Version 2022 Release 1.3). Leur exécution garantit que chaque utilisateur dispose du tablespace et des autorisations appropriés, assurant ainsi un environnement Oracle sécurisé et bien structuré, adapté à SEI.

Si vous utilisez Oracle comme plateforme de base de données, il est obligatoire de créer ces utilisateurs et tablespaces avant d’installer SEI.

Veillez à personnaliser les noms d’utilisateurs, les mots de passe et les noms de tablespaces selon les normes et exigences de votre organisation. La compréhension de concepts clés d’Oracle — tels que la structure du stockage, la journalisation , la compression, et la sécurité — vous aidera à mettre en place une base fiable et performante pour votre déploiement.

remarque

Vous devez exécuter ces scripts avec un utilisateur disposant des permissions administratives sur la base de données Oracle.

Révoquer les permissions des utilisateurs existants

Si un utilisateur Oracle existe déjà dans votre environnement SEI, révoquez ses permissions avant de procéder à la nouvelle configuration. Exécutez le script 0_RevokePermissions.sql et définissez le paramètre NECTARI_USER sur le nom d’utilisateur SEI souhaité (par exemple, NECTARI). Ce script doit être exécuté par un administrateur de la base de données Oracle.

Afficher l’exemple du script 0_RevokePermissions.sql
/*
Script pour révoquer les autorisations d'un utilisateur Oracle existant pour Nectari/SEI.
Comment utiliser :
- Exécuter avec un utilisateur ayant des privilèges administratifs sur la base de données Oracle.
- Mettre à jour les variables sous la section 'Changer les valeurs'.
* NECTARI_USER : Nom de l'utilisateur Nectari à révoquer.
* ENABLE_LOGING : Définir sur 'true' pour imprimer les journaux.
- Exécutez le script.
Remarque :
- Le script imprime des journaux résumant les actions effectuées.
- Assurez-vous d'avoir les sauvegardes et les approbations nécessaires avant de révoquer des 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 utilisateur
ENABLE_LOGING := true; -- Autre

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

-- Résumé de la variable 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('/* Autorisations */');
dbms_output.put_line('/**********************/');
-- Vérifier 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 autorisations */');
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 les utilisateurs

Créer l'utilisateur SEI et le schéma

Exécutez le script 1_ConfigDB.sql. Configurez les paramètres du script en fonction de 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 préférez.
  • Définissez le paramètre NECTARI_TMP_TABLE_SPACE sur NECTARI_TMP, ou un autre nom si vous préférez.
  • Ajustez les autres paramètres selon votre environnement et vos politiques de sécurité.

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

Afficher l’exemple du 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, assigne les tablespaces principaux et temporaires, accorde les autorisations nécessaires et (en option) révoque les autorisations précédemment accordées à 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 la journalisation pour le tablespace.
- NECTARI_TABLE_SPACE_COMP : Activer la compression pour le tablespace.
- NECTARI_TMP_TABLE_SPACE : Nom du tablespace temporaire.
- ENABLE_LOGING : Définir sur vrai pour imprimer les journaux.
- REVOKE_EXIST_PERM : Définir sur vrai 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 vrai.
- Ajustez toujours les champs utilisateur, tablespace et 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 vos besoins pour votre environnement
-- Informations utilisateur
NECTARI_USER := 'NECTARI';
NECTARI_USER_PWD := 'NECTARI_PWD';
-- Informations 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 de fichier de données personnalisé si 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 de 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 les espaces de table */');
dbms_output.put_line(' Tablespace NECTARI');
dbms_output.put_line(' Nom => ' || NECTARI_TABLE_SPACE);
dbms_output.put_line(' Journalisation => ' || 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 de 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 autorisations */');
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 impactées');
END IF;

END IF;

-- Autorisations
dbms_output.put_line('/**********************/');
dbms_output.put_line('/* Autorisations */');
dbms_output.put_line('/**********************/');
-- Accorder 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 || ' a reçu les autorisations 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');
END;

Créer l’utilisateur BILicense user et le schéma

Exécutez le script 1_ConfigDB.sql :

  • 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 préférez.
  • Définissez le paramètre NECTARI_TMP_TABLE_SPACE sur BILicense_TMP, ou un autre nom si vous préférez.
  • Ajustez les autres paramètres selon vos politiques de sécurité.

Créer l’utilisateur SEICube

L’utilisateur SEICube reçoit un accès en lecture aux schémas spécifiés et peut exclure certaines tables ou vues. Exécutez le script 2_DataDB.sql et configurez les paramètres requis selon les instructions du script. Utilisez le paramètre SCHEMA_LIST pour définir les schémas accessibles, ainsi que les paramètres EXCLUSION_TB_LIST et EXCLUSION_VW_LIST pour exclure les tables ou vues nécessaires.

Ce script crée un utilisateur Oracle dédié, configure les tablespaces et attribue les permissions de données nécessaires pour accéder aux données du cube SEI.

Afficher l’exemple du script 2_DataDB.sql
/*
Script pour créer un utilisateur Oracle dédié pour NECTARI/SEI Cube.
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 trigger dans toute la base de données.
- En option, vous pouvez exclure des tables ou 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écuter depuis un utilisateur ayant des privilèges administratifs sur le serveur Oracle.
- Mettre à jour les variables sous la section 'Changer les valeurs':
* NECTARI_CUSTOM_USER : Nom de l'utilisateur NECTARI/SEI Cube.
* NECTARI_CUSTOM_USER_PWD : Mot de passe pour l'utilisateur.
* NECTARI_CUSTOM_TABLE_SPACE : Nom du tablespace principal.
* NECTARI_CUSTOM_TABLE_SPACE_LOG : Activer la journalisation pour le tablespace.
* NECTARI_CUSTOM_TABLE_SPACE_COMP : Activer la compression pour le tablespace (requiert la compression au niveau serveur).
* NECTARI_CUSTOM_TMP_TABLE_SPACE : Nom du tablespace temporaire.
* ENABLE_LOGING : Définir sur vrai pour activer la journalisation du script.
* REVOKE_EXIST_PERM : Si vrai, supprimera les autorisations existantes pour l'utilisateur s'il existe.
- Spécifier les paramètres de permission :
* SCHEMA_LIST : Liste des schémas dont les tables/vues l'utilisateur a un accès en lecture.
* EXCLUSION_TB_LIST : Liste des tables auxquelles ne pas accorder l'accès (format : "SCHEMA"."TABLE").
* EXCLUSION_VW_LIST : Liste des vues auxquelles ne pas accorder l'accès (format : "SCHEMA"."VIEW").
- Exécutez le script.
Remarques importantes :
- Dans Oracle, les droits d'accès pour d'autres schémas doivent être réalisés table par table.
→ Si de nouvelles tables sont ajoutées plus tard à un schéma, vous devez ré-exécuter le script pour mettre à jour les droits d'accès.
- CREATE ANY TRIGGER et d'autres autorisations similaires nécessitent des privilèges au niveau serveur pour une utilisation inter-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 vos besoins pour 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 accorder l'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 du script
ENABLE_LOGING := true; -- Définir sur vrai pour afficher la sortie des journaux
REVOKE_EXIST_PERM := false; -- Définir sur vrai pour révoquer toutes les permissions existantes de l'utilisateur

-- Déterminer le chemin de 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 du script pour une sortie étape par étape
IF ( ENABLE_LOGING = true ) THEN
dbms_output.enable(1000000);
ELSE
dbms_output.disable;
END IF;

-- Préparer les paramètres de 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(' Objet Nom d''utilisateur => ' || NECTARI_CUSTOM_USER);
dbms_output.put_line(' Objet Mot de passe => ' || NECTARI_CUSTOM_USER_PWD);
dbms_output.put_line(' /* Informations sur le tablespace */');
dbms_output.put_line(' Objet Tablespace');
dbms_output.put_line(' Nom => ' || NECTARI_CUSTOM_TABLE_SPACE);
dbms_output.put_line(' Journalisation => ' || 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(' Objet TMP Tablespace');
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 d''exclusion => ' || 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 d''exclusion => ' || 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érifier si l'utilisateur NECTARI/SEI Cube 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 pas nul
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 si pas déjà existant ; 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 autorisations */');
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 autorisations actuelles de "' || NECTARI_CUSTOM_USER || ' ne seront pas impactées');
END IF;
END IF;

-- Permissions
dbms_output.put_line('/**********************/');
dbms_output.put_line('/* Permissions */');
dbms_output.put_line('/**********************/');
-- Accorder des privilèges généraux à l'utilisateur NECTARI/SEI Cube
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 reçu les autorisations suivantes sur son propre schéma :');
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');

-- Accorder CREATE ANY TRIGGER (s'applique au niveau du serveur—à utiliser avec prudence)
EXECUTE IMMEDIATE 'GRANT CREATE ANY TRIGGER TO ' || NECTARI_CUSTOM_USER;
dbms_output.put_line(' Le nom d''utilisateur '|| NECTARI_CUSTOM_USER || ' a reçu les droits CREATE ANY TRIGGER');
dbms_output.put_line(' !!! Le CREATE ANY TRIGGER s''applique à l''échelle du serveur !!!');

-- Accorder 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(' Accorder les 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(' Accorder les 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évoquer les 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

Une fois les utilisateurs créés, exécutez les exécutables SEI afin de configurer les tables Oracle nécessaires à votre déploiement. Cette étape complète la structure initiale de la base de données pour SEI.

Gestion supplémentaire de la base de données

Ajouter de l’espace à un tablespace Oracle

Utilisez le script 3_AddNewDataFile.sql pour ajouter de l’espace de stockage à un tablespace existant. Configurez les paramètres du script selon votre environnement :

  • Définissez TABLE_SPACE sur le tablespace cible.
  • Définissez DATA_FILE_NAME sur le nom du nouveau fichier de données.
  • Définissez ENABLE_LOGING pour obtenir une sortie détaillée (optionnel).

Le script d’exemple ajoute 32 Go par défaut, mais vous pouvez ajuster la taille selon vos besoins.

Afficher l’exemple du 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 prévenir les problèmes d'espace.
Utilisation :
- Exécuter avec un utilisateur ayant des privilèges administratifs sur le serveur Oracle.
- Mettre à jour les variables sous la section 'Changer les valeurs' :
* TABLE_SPACE : Nom du tablespace à mettre à jour.
* DATA_FILE_NAME : Nom du nouveau fichier de données.
* ENABLE_LOGING : Définir sur vrai pour activer la journalisation du script.
- Exécutez le script.
Remarques :
- Vous pouvez modifier la taille du fichier de données, le maxsize 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 vos besoins pour 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 de fichier de données personnalisé (s'il est défini dans les paramètres d'initialisation de 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 d''espace de table => ' || TABLE_SPACE);
dbms_output.put_line(' Nom de 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 / Fichiers 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 aussi 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 supprimer les utilisateurs ainsi que les tablespaces, utilisez les exécutables SEI lorsqu’ils sont disponibles, puis exécutez le script 9_UninstallDB.sql au besoin pour supprimer chaque utilisateur.

Afficher l’exemple du script 9_UninstallDB.sql
/*
Script pour désinstaller un utilisateur NECTARI/SEI Oracle 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 fichiers de données.
Utilisation :
- Exécutez en tant qu'utilisateur avec des privilèges administratifs sur le serveur Oracle.
- Modifiez les variables sous la section "Changer les valeurs" :
* NECTARI_USER : Nom de l'utilisateur NECTARI/SEI à supprimer.
* NECTARI_TABLE_SPACE : (Facultatif) Tablespace principal associé.
* NECTARI_TMP_TABLE_SPACE : (Facultatif) Tablespace temporaire associé.
* ENABLE_LOGING : Définir sur vrai pour imprimer les journaux.
- Exécutez le script.
Remarques :
- Vérifiez que toutes les données sont sauvegardées car les tablespaces et fichiers de données seront supprimés.
- Le script peut être réutilisé pour d'autres utilisateurs/tablespaces en changeant 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 vos besoins pour votre environnement
-- Informations utilisateur
NECTARI_USER := 'NECTARI';
-- Informations TableSpace
NECTARI_TABLE_SPACE := 'NECTARI';
NECTARI_TMP_TABLE_SPACE := 'NECTARI_TMP';
-- Autres
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(' Objet Nom d''utilisateur => ' || NECTARI_USER);
dbms_output.put_line(' /* Informations sur les tablespaces */');
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érification et suppression de l'utilisateur
SELECT COUNT(1) INTO v_NECTARI_USER_CHECK FROM DBA_USERS WHERE USERNAME = NECTARI_USER;

IF ( v_NECTARI_USER_CHECK = 1 ) THEN
-- Tuer 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(' Killing session with serial "' || r.serial# || ' for user ' || 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

Définitions des composants Oracle

TermeDéfinition
SID (System ID)Identifie de manière unique chaque instance de base de données Oracle (par ex. : ORCL).
Utilisateur/SchémaDéfinit le compte Oracle utilisé pour les connexions et propriétaire des objets du schéma (tables, vues, etc.). En pratique, associe le compte et son schéma comme une seule 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 l’information.
Remarque : certaines options avancées peuvent nécessiter des licences Oracle supplémentaires (comme DEFAULT ROW STORE COMPRESS ADVANCED) — consultez votre DBA avant utilisation.
Tablespace temporaireStocke les données temporaires pendant la durée d’une session et prend en charge les opérations de tri volumineuses qui ne tiennent pas en mémoire. Partage l’espace entre plusieurs utilisateurs.
Fichier de données(Datafile) Stocke physiquement le tablespace sur le disque. Chaque fichier de données possède un identifiant unique et un tablespace peut utiliser plusieurs fichiers, qu’ils soient réguliers ou temporaires.
Taille de bloc(Block size) Dé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 ; elle est généralement uniforme pour une base donnée.

Stockage

Stockage

Taille de bloc (Block size)

Définit la granularité par défaut du stockage des données (souvent 8 KB), permettant à chaque fichier de données d’atteindre jusqu’à 32 GB. Pour vérifier la taille de bloc de votre base de données :

SELECT value FROM v$parameter WHERE name = 'db_block_size';
Taille de blocTaille maximale d’un datafileTaille maximale de la base
2 KB8 GB512 TB
4 KB16 GB1 PB
8 KB32 GB2 PB
16 KB64 GB4 PB
32 KB128 GB8 PB

Tablespace et fichier de données (Datafile)

Commencez avec un fichier de données par tablespace (taille de bloc de 8 KB = 32 GB). Ajoutez d’autres fichiers de données à mesure que les besoins en stockage augmentent. Vous pouvez ajouter jusqu’à 65 536 datafiles par base de données et jusqu’à 1 022 datafiles par tablespace.

Ajouter un nouveau datafile :

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

Lister tous les datafiles d’un tablespace :

SELECT TABLESPACE_NAME, FILE_NAME FROM DBA_DATA_FILES;

Tablespaces temporaires

Tablespaces temporaires

Après un chargement complet via Gestionnaire OLAP, l’utilisation du tablespace temporaire se stabilise. Les tablespaces temporaires permettent d’exécuter des opérations de tri simultanées dépassant la mémoire disponible.

Vérifier l’allocation du tablespace temporaire :

SELECT * FROM dba_temp_free_space;

Ajouter un nouveau tempfile :

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

Journalisation et compression

Journalisation et compression

Journalisation

Activez la journalisation par défaut pour les nouveaux tablespaces. Pour les entrepôts de données SEI soumis à des rechargements réguliers, envisagez de désactiver la journalisation afin de réduire l’utilisation du tablespace temporaire.

Créer un tablespace sans journalisation :

Créer un tablespace sans journalisation :

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

Désactiver la journalisation pour un tablespace existant :

Désactiver la journalisation pour un tablespace existant :

ALTER TABLESPACE NectariCUBE3 NOLOGGING;

Compression

Utilisez Advanced Row Compression dans Oracle pour optimiser le stockage de SEI. Oracle lit directement les blocs compressés en mémoire, ce qui réduit les opérations d’E/S et l’utilisation du buffer cache.

Créer un tablespace compressé et sans journalisation :

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

Le tableau ci‑dessous compare les performances de la journalisation et de la compression, confirmant que la journalisation doit être désactivée pour les charges d’entrepôt de données SEI. La compression réduit significativement l’espace de stockage tout en conservant des temps de chargement similaires.

Taille de blocCompressionLoggingTemps de chargementTaille Temp (GB)Taille Données (GB)Total (GB)
8 KBOuiOui1h2824.768.893.5
8 BKNonOui1h1683.2106189.2
8 KBOuiNon1h2825.270.295.4
8 KBNonNon1h1228108136
16 KBNonNon1h1225.2106131.2

Sécurité

Sécurité

Utilisateur et accès

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 et associez‑lui le tablespace approprié lors de sa création.

Créer un utilisateur et définir le tablespace :

Créer un utilisateur et définir 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;

Accorder les privilèges requis :

Accorder les privilèges requis :

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

Définissez l’utilisateur SEI comme schéma personnalisé dans la définition de votre 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 triggers doivent être gérés via les paramètres de sécurité de SEI.

Accorder un accès en lecture à toutes les tables et vues d’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 les accès selon les besoins (lecture seule, création de cube OLAP, writeback, etc.).

Déclencheurs

Créez les déclencheurs directement dans la configuration de l’utilisateur SEI dans le Gestionnaire OLAP, en définissant le niveau de sécurité approprié. Cela évite les problèmes où l’ERP insère des lignes dans une table avec un trigger sans avoir accès aux tables de suivi SEI.

Accorder l’autorisation à votre utilisateur :

GRANT create any trigger TO YOUR_USER;

Configurez la 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). Lors de la construction du cube OLAP, placez à la fois la table de suivi et le trigger dans le schéma SEI, et non dans le schéma source. Cette configuration garantit que le déclencheur a automatiquement accès à 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 trigger avec les privilèges de l’utilisateur SEI, assurant ainsi que la table de suivi est toujours accessible.