Manuel de Référence : Administrations et Développement Oracle Database

Gestion des Espaces et Utilisateurs

Pour créer un nouvel espace de stockage destiné à une application spécifique, définissez le fichier de données avec une taille initiale et l'autonomisation.

<code>CREATE TABLESPACE APP_STORAGE 
DATAFILE '/data/oracle/app_storage.dbf' 
SIZE 256M 
AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;</code>

L'attribution des droits permet d'accéder à l'instance et de gérer les objets logiques. L'utilisateur doit disposer des privilèges de base ainsi qu'une capacité illimitée sur l'espace dédié.

<code>CREATE USER APP_ADMIN IDENTIFIED BY 'SecurePass123' 
DEFAULT TABLESPACE APP_STORAGE 
TEMPORARY TABLESPACE TEMP;

GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO APP_ADMIN;
GRANT UNLIMITED TABLESPACE TO APP_ADMIN;
GRANT CONNECT TO APP_ADMIN;</code>

Maintenance du Schéma

Lorsqu'un espace n'est plus utilisé, assurez-vous d'inclure son contenu et les fichiers physiques lors de la suppression.

<code>DROP TABLESPACE OLD_SCHEMA_INCLUDEING CONTENTS AND DATAFILES;</code>

Pour identifier quelle vue dépend d'une table spécifique, interrogez la vue système d'informations.

<code>SELECT OBJECT_OWNER, OBJECT_TYPE 
FROM DBA_DEPENDENCIES 
WHERE REFERENCED_NAME = 'TABLE_SOURCE_NAME' 
AND TYPE = 'VIEW';</code>

Lorsque la création de vues ou de procédures échoue par manque de droits sur des tables tierces, l'administrateur de la table propriétaire doit octroyer les droits de sélection globaux.

<code>GRANT SELECT ANY TABLE TO VIEW_CREATOR_USER WITH ADMIN OPTION;</code>

Modification de Structure de Colonne

Pour modifeir le type de données d'une colonne sans perte d'information, ajoutez une nouvelle colonne temporaire, migrez les données, puis renommez l'ancienne vers la nouvelle structure.

<code>-- Étape 1 : Ajout d'une colonne temporaire
ALTER TABLE TBL_MAIN ADD COLUMN_DATE_TMP DATE;

-- Étape 2 : Migration des données converties
UPDATE TBL_MAIN SET COLUMN_DATE_TMP = TO_DATE(COLUMN_OLD_STR, 'YYYY-MM-DD');

-- Étape 3 : Suppression et renommage
ALTER TABLE TBL_MAIN DROP COLUMN COLUMN_OLD_STR;
ALTER TABLE TBL_MAIN RENAME COLUMN COLUMN_DATE_TMP TO COLUMN_DATE_ORIGINAL;</code>

Affichage des Métadonnées

Récupérer les descriptions associées aux colonnes via la vue utilisateur.

<code>SELECT COL_NAME AS NOM_COLUMN, COMME DESCRIPTION
FROM USER_COL_COMMENTS
WHERE TABLE_NAME = 'NOM_TABLE_CIBLE';</code>

Manipulation de Données et Fonctions

Séquence et Déclencheurs Auto-Incrément

Implémenter une clé primaire automatique nécessite une séquence et un trigger exécuté avant chaque insertion.

<code>-- Définition de la séquence
CREATE SEQUENCE SEQ_LOGIN_ID 
START WITH 1 
INCREMENT BY 1 
MAXVALUE 99999999;

-- Déclencheur associé
CREATE OR REPLACE TRIGGER TRG_LOGIN_AUTOINC
BEFORE INSERT ON TAB_USERS 
FOR EACH ROW
BEGIN
  SELECT SEQ_LOGIN_ID.NEXTVAL INTO :NEW.USER_ID FROM DUAL;
END;
/</code>

Opérations sur Chaînes de Caractères

Diverses fonctions permettent la recherche, la découpe et la substitution de texte. Le calcul incluant des positions négatives commence par la fin de la chaîne.

<code>-- Recherche de sous-chaîne
SELECT INSTR(COLONNE_ADRESSE, 'DESTINATION') > 0 RESULTAT 
FROM TAB_INFO;

-- Extrait de caractères (départ 0)
SUBSTR('TEXTE_EXEMPLE', 0); -- Retourne tout
SUBSTR('TEXTE_EXEMPLE', 2); -- De la 2ème position
SUBSTR('TEXTE_EXEMPLE', 2, 5); -- 5 caractères à partir de 2
SUBSTR('TEXTE_EXEMPLE', -3); -- 3 derniers caractères

-- Remplacement
SELECT REPLACE('CHAINEROLE', 'ROLE', 'NOUVEAU') FROM DUAL;</code>

Gestion Temporelle et Calendaires

Les intervalles supportent l'ajout direct de temps variés. Les dates peuvent être formattées dynamiquement.

<code>-- Opérations sur SYSDATE
SYSDATE + INTERVAL '1' YEAR
SYSDATE + INTERVAL '1' MONTH
SYSDATE + INTERVAL '1' DAY
SYSDATE + INTERVAL '1 HOUR TO MINUTE'

-- Conversion de formats spécifiques (ex: jour mois année)
TO_CHAR(TO_DATE(CHAMP_DAT, 'DD-MON-YY'), 'YYYY-MM-DD');</code>

Calculs de Différences de Temps

Convertir la différence entre deux timestamps en unités spécifiques (jours, heures, minutes).

<code>SELECT TO_NUMBER(TO_DATE('2023-06-01','DD-MM-YYYY') - TO_DATE('2023-05-01','DD-MM-YYYY')) AS JOURS
FROM DUAL;

SELECT TO_NUMBER((DATE_DEBUT - DATE_FIN) * 24) AS HEURES
FROM DUAL;</code>

Pour les écarts mensuels ou annuels, utilisez les fonctions dédiées qui gèrent les mois de longueur variable.

<code>SELECT MONTHS_BETWEEN(DATE_FIN, DATE_DEBUT) / 12 AS ANS_COMPART
FROM DUAL;</code>

Programmasion PL/SQL

Filtrage dans les Procédures

L'utilisation correcte des opérateurs comme LIKE dans les requêtes internes demande attention à la concaténation.

<code>PROCEDURE RECUPERATION_PLAN(IN_KEY IN VARCHAR2, OUT_CUR OUT SYS_REFCURSOR) IS
BEGIN
  OPEN OUT_CUR FOR 
  SELECT * FROM TB_PLANIFICATION WHERE NOM LIKE '%' || IN_KEY || '%';
END;</code>

Logique Conditionnelle

Le bloc CASE permet de gérer plusieurs conditions sans imbriquer excessivement les boucles IF.

<code>CASE V_ID
  WHEN 1 THEN DBMS_OUTPUT.PUT_LINE('Option A');
  WHEN 2 THEN DBMS_OUTPUT.PUT_LINE('Option B');
  ELSE DBMS_OUTPUT.PUT_LINE('Autre');
END CASE;</code>

Gestion des Erreurs

Capturez systématiquement les exceptions lors des opérations SELECT INTO pour éviter les plantages silencieux.

<code>BEGIN
  SELECT AGE, SEXE, NOM INTO VAR_A, VAR_B, VAR_C FROM EMP_LOYERS
  WHERE ID_EMP = P_ID;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('Aucun résultat trouvé');
END;</code>

Requêtes Avancées

Hiérarchie et Arborescence

Utilisez CONNECT BY PRIOR pour naviguer dans les données parent-enfant.

<code>SELECT DISTINCT * FROM ENTREE_DATA 
START WITH NODE_UNIQUE = 'ROOT_001' 
CONNECT BY PRIOR NODE_UNIQUE = PARENT_UNIQUE 
ORDER SIBLINGS BY INDEX_NIVEAU;</code>

Conversion Lignes/Colonnes

La fonction LISTAGG agrège des valeurs, tandis que PIVOT transforme les lignes en colonnes dynamiques.

<code>-- Agrégation
SELECT ID, LISTAGG(VALEUR, ', ') WITHIN GROUP (ORDER BY VAL) 
FROM SOURCE_VIEW GROUP BY ID;

-- Pivot simple
SELECT * FROM VUE_ETUDE
PIVOT (MAX(PORTE) FOR COTE IN ('OD' AS OD, 'OS' AS OS));</code>

Analytique Fonctions

Attribuez des numéros de rang selon des groupes spécifiques ou globalement.

<code>-- Rang dense global
SELECT NOM_PATIENT, DATHE_VISITE, DENSE_RANK() OVER(ORDER BY NOMBRE_VISITES) AS RANG
FROM HISTORIQUE_VISITES;

-- Rang partitionné par patient
SELECT *, ROW_NUMBER() OVER(PARTITION BY PATIENT_ID ORDER BY VISITE_DATE) AS NUMEROTATION
FROM DONNEES_TEMP;</code>

Maintenance Système

Scripts de Sauvegarde

Automatisez les sauvegardes via des tâches bat en utilisant l'utilitaire exp pour exporter les données brutes.

<code>@echo off
set DB_CONN=user/pass@localhost:port/service
set BACK_PATH=D:\BACKUPS
set NOM_FILE=%BACK_PATH%\backup_%date%_%time%.dmp
exp %DB_CONN% FILE=%NOM_FILE% LOG=%BACK_PATH%\log.txt FULL=Y;</code>

Tâches Programmées

Si les jobs planifiés ne s'exécutent pas, vérifiez que le paramètre processeur de queue est activé.

<code>show parameter job_queue_processes;
-- Augmentez si nécessaire
alter system set job_queue_processes=8 scope=both;</code>

Étiquettes: OracleDatabase PLSQL DQL AdministrationSGBD

Publié le 6 septembre à 19h51