Aller au contenu principal

Créer des utilisateurs Oracle

Pour préparer l'installation de votre SEI, créez des utilisateurs Oracle et tablespaces dédiés en exécutant les scripts SQL fournis. Ces scripts doivent être exécutés avant d'installer SEI (nécessaire depuis la version 2022 Release 1.3). L'exécution de ces scripts garantit que chaque utilisateur possède le bon tablespace et les bonnes autorisations, ce qui résulte en un environnement Oracle sécurisé et bien organisé, 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.

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, la journalisation, la compression et la sécurité—vous aide à mettre en place une fondation fiable et efficace pour votre déploiement.

remarque

Vous devez exécuter ces scripts avec un utilisateur qui dispose de 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 les permissions de cet utilisateur 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 prévu pour SEI (par exemple, NECTARI). Ce script doit être exécuté par un administrateur sur la base de données Oracle.

Montrer l'exemple de script 0_RevokePermissions.sql
/*
Script pour révoquer les permissions 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 'Change the values'.
* 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 les journaux résumant les actions effectuées.
- Assurez-vous d'avoir les sauvegardes nécessaires et les approbations avant de révoquer des permissions.
*/

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

-- 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 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èmes 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 qu'ils correspondent à 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 préféré.
  • Définissez le paramètre NECTARI_TMP_TABLE_SPACE sur NECTARI_TMP, ou un autre nom si préféré.
  • Ajustez d'autres paramètres pour répondre à votre environnement et à vos politiques de sécurité.

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

Montrer l'exemple de script 1_ConfigDB.sql
/*
Script pour créer un utilisateur Oracle spécifique et un schéma pour Nectari/SEI.
Description :
Ce script crée (ou met à jour) un utilisateur pour l'application Nectari, attribue les tablespaces principaux et temporaires, accorde les permissions 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 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 dans la section 'Change the values'.
- Le script supprime toutes les permissions 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 si nécessaire pour votre environnement
-- Informations sur l'utilisateur
NECTARI_USER := 'NECTARI';
NECTARI_USER_PWD := 'NECTARI_PWD';
-- Informations sur les tablespaces
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 tablespaces */');
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 temporaire 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èmes 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 permissions actuelles de "' || NECTARI_USER || ' ne seront pas affectées');
END IF;

END IF;

-- Permissions
dbms_output.put_line('/**********************/');
dbms_output.put_line('/* Permissions */');
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 || ' s'est vu accorder les permissions 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');
END;

Créer un utilisateur et un schéma BILicense

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 préféré.
  • Définissez le paramètre NECTARI_TMP_TABLE_SPACE sur BILicense_TMP, ou un autre nom préféré.
  • Ajustez d'autres paramètres pour répondre aux politiques de sécurité.

Créer un 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 spécifier les schémas accessibles, et les paramètres EXCLUSION_TB_LIST et EXCLUSION_VW_LIST pour exclure les tables ou vues selon vos besoins.

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

Montrer 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 permissions requises sur d'autres schémas (utilisateurs) selon les besoins.
Permissions accordées :
- L'utilisateur NECTARI_CUBE reçoit tous les droits sur son propre schéma.
- Accès en lecture (SELECT) à toutes les tables et vues des schémas répertoriés dans la variable SCHEMA_LIST.
- La capacité de créer des déclencheurs dans toute la base de données.
- Optionnellement, 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 permissions actuelles (lorsqu'il est configuré).
Comment utiliser :
- Exécutez depuis un utilisateur avec des privilèges administratifs sur le serveur Oracle.
- Mettez à jour les variables sous la section 'Change the values' :
* NECTARI_CUSTOM_USER : Nom pour 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 (nécessite une compression à l'échelle du serveur).
* NECTARI_CUSTOM_TMP_TABLE_SPACE : Nom du tablespace temporaire.
* ENABLE_LOGING : Définir sur vrai pour activer l'enregistrement du script.
* REVOKE_EXIST_PERM : Si vrai, supprimera les permissions existantes pour l'utilisateur s'il existe.
- Spécifiez les paramètres d'autorisation :
* SCHEMA_LIST : Liste des schémas dont les tables/vues l'utilisateur se voit accorder l'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 autorisations d'accès pour d'autres schémas doivent être effectuées table par table.
→ Si de nouvelles tables sont ultérieurement ajoutées à un schéma, vous devez réexécuter le script pour mettre à jour les autorisations.
- CREATE ANY TRIGGER et des permissions similaires nécessitent des privilèges à l'échelle du serveur pour une utilisation intersché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 si nécessaire pour votre environnement
-- Informations d'identification utilisateur
NECTARI_CUSTOM_USER := 'NECTARI_SEED';
NECTARI_CUSTOM_USER_PWD := 'NECTARI_SEED_PWD';
-- Configuration du tablespace
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 vos besoins)
SCHEMA_LIST(1) := 'X3FOLDER';
-- Exclusions (décommentez et personnalisez si nécessaire)
-- EXCLUSION_TB_LIST(1) := '"X3FOLDER"."TABLE"'; -- Exclure cette table des autorisations SELECT
-- EXCLUSION_VW_LIST(1) := '"X3FOLDER"."VIEW"'; -- Exclure cette vue des autorisations SELECT
-- Options du script
ENABLE_LOGING := true; -- Définir sur vrai pour montrer la sortie du journal
REVOKE_EXIST_PERM := false; -- Définir sur vrai 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 de 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(' Nom d''utilisateur NECTARI Objects => ' || NECTARI_CUSTOM_USER);
dbms_output.put_line(' Mot de passe NECTARI Objects => ' || NECTARI_CUSTOM_USER_PWD);
dbms_output.put_line(' /* Informations sur les tablespaces */');
dbms_output.put_line(' Tablespace NECTARI Objects');
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(' Tablespace NECTARI Objects TMP');
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 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éez 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 s'il n'existe pas déjà ; sinon, traitez 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èmes 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 affectées');
END IF;
END IF;

-- Permissions
dbms_output.put_line('/**********************/');
dbms_output.put_line('/* Permissions */');
dbms_output.put_line('/**********************/');
-- Accorder les 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 || ' s''est vu accorder les permissions 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 à l'échelle du serveur—utilisez 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 reçu les permissions 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é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 la création des utilisateurs, 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 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 du stockage à un tablespace existant. Définissez les paramètres du script pour votre environnement :

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

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

Montrer 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 'Change the values' :
* TABLE_SPACE : Nom du tablespace à mettre à jour.
* DATA_FILE_NAME : Nom pour le nouveau fichier de données.
* ENABLE_LOGING : Définir sur vrai pour activer l'enregistrement du script.
- Exécutez le script.
Remarques :
- Vous pouvez modifier la taille du fichier de données, la taille maximale et les attributs connexes dans l'instruction EXECUTE IMMEDIATE pour s'adapter à 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 les besoins de votre environnement
TABLE_SPACE := 'NECTARI_SEED';
DATA_FILE_NAME := 'NECTARI_SEED_NEW2';
ENABLE_LOGING := true;

-- Activer ou désactiver l'enregistrement 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é (si 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;

-- 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 date "' || 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 des utilisateurs et des tablespaces Oracle

Pour désinstaller les composants SEI et supprimer des utilisateurs et des tablespaces, utilisez les exécutables SEI si disponibles, et exécutez le script 9_UninstallDB.sql selon les besoins pour supprimer chaque utilisateur.

Montrer l'exemple du 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.
- Modifiez les variables sous la section "Change the values" :
* 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éfinir sur vrai pour imprimer les journaux.
- Exécutez le script.
Remarques :
- Confirmez que toutes les données sont sauvegardées car le tablespace et les 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 les besoins de votre environnement
-- Informations sur l'utilisateur
NECTARI_USER := 'NECTARI';
-- Informations sur le 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(' Nom d''utilisateur NECTARI Objects => ' || NECTARI_USER);
dbms_output.put_line(' /* Informations sur les tablespaces */');
dbms_output.put_line(' Tablespace NECTARI Objects');
dbms_output.put_line(' Nom => ' || NECTARI_TABLE_SPACE);
dbms_output.put_line(' Tablespace NECTARI Objects TMP');
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
-- Terminer 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 pour tuer la session manuellement
--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 de système)Identifie de manière unique chaque instance de base de données Oracle (ex. : 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 une seule entité.
TablespaceRegroupe des unités de stockage logiques dans la base de données, utilisant un ou plusieurs fichiers de données pour stocker des données.
Remarque : Les options avancées peuvent nécessiter des licences Oracle supplémentaires (par exemple DEFAULT ROW STORE COMPRESS ADVANCED)—consultez votre DBA avant utilisation.
Tablespace temporaireStocke des données temporaires pendant la durée d'une session et supporte les grandes opérations de tri qui ne tiennent pas en mémoire principale. Partage l'espace entre plusieurs utilisateurs.
Fichier de donnéesStocke le tablespace physique sur le disque. Attribue à chaque fichier de données un identifiant unique 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é totale de la base de données ; elle est généralement constante pour une base de données.

Stockage

Taille de bloc

Définit la granularité par défaut du stockage des données (souvent 8 Ko), permettant à chaque fichier de données d'atteindre jusqu'à 32 Go. 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 du fichier de donnéesTaille maximale de la base 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 avec un fichier de données par tablespace (taille de bloc de 8 Ko = 32 Go). Ajoutez plus de fichiers de données à mesure que les besoins de stockage augmentent. Vous pouvez ajouter jusqu'à 65 536 fichiers de données par base de données et jusqu'à 1 022 fichiers de données par tablespace.

Ajouter un nouveau fichier de données :

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

Lister tous les fichiers de données dans un tablespace :

SELECT TABLESPACE_NAME, FILE_NAME FROM DBA_DATA_FILES;

Tablespaces temporaires

Après un chargement complet de l'OLAP Manager, l'utilisation de tablespace temporaire se stabilise. Les tablespaces temporaires permettent des opérations de tri simultanées qui dépassent la mémoire.

Vérifier l'allocation de 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

Activez la journalisation par défaut pour les nouveaux tablespaces. Pour les entrepôts de données SEI avec des rechargements de données réguliers, envisagez de désactiver la journalisation pour réduire l'utilisation des tablespaces temporaires.

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 :

ALTER TABLESPACE NectariCUBE3 NOLOGGING;

Compression

Utilisez la compression avancée des lignes dans Oracle pour optimiser le stockage de SEI. Oracle lit les blocs compressés directement en mémoire, réduisant l'I/O et l'utilisation du cache tampon.

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 journalisation et de compression, confirmant que la journalisation doit être désactivée pour les charges de travail d'entrepôt de données SEI. La compression réduit significativement l'espace de stockage avec des temps de chargement similaires.

Taille de blocCompressionJournalisationTemps de chargementTaille Temp (Go)Taille de Données (Go)Total (Go)
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 et attachez le bon tablespace lors de la création de l'utilisateur.

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 :

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 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é de SEI.

Accorder un accès en lecture à 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 l'accès en fonction des besoins (lecture seule, création de cube OLAP, écriture, etc.).

Déclencheurs

Créez des déclencheurs directement dans la configuration de l'utilisateur SEI dans OLAP Manager, en définissant le niveau de sécurité correct. Cela évite les problèmes où le process ERP insère des lignes dans une table avec un déclencheur mais n'a pas accès aux tables de suivi SEI.

Accorder des autorisations à 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). 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. Cette configuration garantit que le déclencheur a accès à la table de suivi automatiquement.

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