Imprimer Imprimer

expdp / impdp - nouveaux export / import 10g Oracle

Administration Oracle, Divers pas de Commentaire »

En Oracle 10g il existe un nouvel executable permettant de faire des export / import optimisés.

Quelques différences minimales à connaitre par rapport à l’export / import classique :

  • les executables s’appellent respectivement expdp et impdp (toujours dans $ORACLE_HOME/bin)
  • appelable aussi via un package standard : le package SYS.DBMS_DATAPUMP
  • on peut filtrer des tables (option INCLUDE / EXCLUDE)
  • on peut filtrer des lignes (option QUERY )
  • le parametre OWNER est remplace par SCHEMA
  • necessite un objet Oracle ‘ directory ‘ pour fonctionner
  • peut être parallelisé

exemple d’import

SQL> create or replace directory dd_dir as ‘/work/pprun/oexp’;
SQL> grant read, write on directory dd_dir to public;
$> mpdp system schemas=SCOTT logfile=impSCOTT.log directory=dd_dir dumpfile=expSCOTT.dmp

Infos uttiles dans le dictionnaire :

vue DBA_DATAPUMP_JOB :  jobs actifs de DataPump et  statuts
vue DBA_DATAPUMP_SESSIONS :  les sessions d’utilisateurs ayant lancé des jobs  DataPump.

Imprimer Imprimer

Jobs , queues et ordonnancement

Administration Oracle, Divers pas de Commentaire »

La 10 et la 11g offrent un nouveau package pour gérer les jobs : DBMS_SCHEDULER en remplacement de DBMS_JOB (voir en fin d’article une migration, ou un résumé des changement de l’un à l’autre extrait de la doc officielle.
Plusieurs avantages :
- une gestion des droits plus fine,
- des jobs nommés (finis les job_id peu explicites),
- une gestion des intervalles de temps simplifiée (finis les calculs savants avec SYSDATE mais une frequence horaire, hebdomadaire, mensuelle,…)

Prerequis

Qu’il existe au moins une JOB QUEUE et le process associé

SQL> SHOW PARAMETER JOB

ou

SQL> select name
from v$bgprocess
where name like ‘CJQ%’

Le user créateur du JOB doit aussi avoir le privilège system ‘CREATE JOB’ …ou etre DBA

Infos minimales pour créer / planifier un JOB

Job Name: le nom du job (unique / aux noms d’objets)
Job Type: 3 types possibles : PLSQL_BLOCK, STORED_PROCEDURE, EXECUTABLE. .
Job Action: un bloc, un nom de proc, ou un chemin complet d’executable
Start Date: date de debut (la 1ere fois ou le job s’execute , format : TIMESTAMP WITH TIME ZONE
Enabled: TRUE ou FALSE. Attention !!! par default le job est créé DISABLED
Repeat Interval: intervalle de répétition. On peut utiliser l’aritmetique de date ‘old style’ comme avec DBMS_JOB, ou préférablement la notion de fréquence :
exemple :FREQ=WEEKLY;BYDAY=MON,THU;BYHOUR=18;BYMINUTE=0
les valeurs possibles sont BYMONTH, BYMONTHDAY, BYYEARDAY, BYDAY, BYHOUR, BYMINUTE, BYWEEKNO

On peut facilement tester l’execution en lancant le Job sans attendre…

exec DBMS_SCHEDULER.run_job (job_name => ‘job_dd’);

Création d’un Job

On utilise le package DBMS_SCHEDULER et la procédure CREATE_JOB

BEGIN
DBMS_SCHEDULER.create_job (
job_name => ‘job_dd’,
job_type => ‘PLSQL_BLOCK’,
job_action => ‘BEGIN NULL; /* a fe ren */ END;’,
start_date => SYSTIMESTAMP,
repeat_interval => ‘FREQ=DAILY’,
enabled => TRUE,
comments => ‘c est pas obligatoire mais un bon commentaire…’);
END;
/

– SUPPRESSION

exec DBMS_SCHEDULER.drop_job (job_name => ‘job_dd’ );

remarque : si l’on ne veut pas supprimer un JOB définitivement mais simplement empechere son activation pendant un certain temps, on peut mettre son statut à DISABLED :

dbms_scheduler.disable

Des infos dans le dictionnaire ?

A minima

SQL> select job_name, enabled
from user_scheduler_jobs;

ou avec un peu plus de détails sur la planification

SQL> select JOB_NAME , JOB_CREATOR , JOB_TYPE , JOB_ACTION , STATE ,
START_DATE , REPEAT_INTERVAL , LAST_START_DATE , NEXT_RUN_DATE
FROM USER_SCHEDULER_JOBS

JOB_NAME JOB_CREATOR JOB_TYPE JOB_ACTION STATE START_DATE REPEAT_INTERVAL NEXT_RUN_DATE
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
JOB_DD SYSTEM PLSQL_BLOCK BEGIN NULL;END; SCHEDULED 08-SEP-08 11.00.03 FREQ=DAILY 09-SEP-08 11.00.03

mais aussi les vues
DBA_SCHEDULER_SCHEDULES - informations sur les jobs planifiés courants
DBA_SCHEDULER_PROGRAMS , DBA_SCHEDULER_PROGRAM_ARGS - informations sur les programmes

De DBMS_JOB à DBMS_SCHEDULER

créer un Job

VARIABLE jobno NUMBER;
BEGIN
DBMS_JOB.SUBMIT(:jobno, ‘INSERT INTO employees VALUES (7935, ”SALLY”,
”DOGAN”, ‘’sally.dogan@xyzcorp.com”, NULL, SYSDATE, ”AD_PRES”, NULL,
NULL, NULL, NULL);’, SYSDATE, ‘SYSDATE+1′);
COMMIT;
END;
/

equivalent statement using DBMS_SCHEDULER is the following:

BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => ‘job1′,
job_type => ‘PLSQL_BLOCK’,
job_action => ‘INSERT INTO employees VALUES (7935, ”SALLY”,
”DOGAN”, ‘’sally.dogan@xyzcorp.com”, NULL, SYSDATE,”AD_PRES”, NULL,
NULL, NULL, NULL);’);
start_date => SYSDATE,
repeat_interval => ‘FREQ = DAILY; INTERVAL = 1′);
END;
Modifier un Job

BEGIN
DBMS_JOB.WHAT(31, ‘INSERT INTO employees VALUES (7935, ”TOM”, ”DOGAN”,
”tom.dogan@xyzcorp.com”, NULL, SYSDATE,”AD_PRES”, NULL,
NULL, NULL, NULL);’);
COMMIT;
END;
/

equivalent à

BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => ‘JOB1′,
attribute => ‘job_action’,
value => ‘INSERT INTO employees VALUES (7935, ”TOM”, ”DOGAN”,
”tom.dogan@xyzcorp.com”, NULL, SYSDATE, ”AD_PRES”, NULL,
NULL, NULL, NULL);’);
END;
/

supprimer un Job de la Job Queue

BEGIN
DBMS_JOB.REMOVE(14144);
COMMIT;
END;
/

équivallent à

BEGIN
DBMS_SCHEDULER.DROP_JOB(’myjob1′);
END;
/

Imprimer Imprimer

Tablespaces et fichiers

Administration Oracle, Divers pas de Commentaire »

De l’utilité des tablespaces

Un tablespace ou espace disque logique, est une partition logique de la base contenant un ou plusieurs fichiers.
Un fichier appartient à 1 et 1 seul tablespace.
Par défaut un tablespace à la création est ON LINE et donc accessible, il peut être mis OFFLINE (et les fichiers qu’il contient par conséquent) pour en interdire l’accès ou pour certaines opérations de maintenance

Il existe toujours deux tablespace baptisés SYSTEM et SYSAUX .
- SYSTEM : contient le dictionnaire de données et segment d’annulation SYSTEM
- SYSAUX : contient les informations nécessaires aux composants et outils supplémentaires
et traditionnellement on créera également
- ‘TEMP’ : pour les données ’swappées’ sur disque lors d’opération de tri ou de fusion trop volumineuses en mémoire
- ‘UNDO’ : pour les segment d’annulation, qui stockent les images avant, lors des ROLLBACKS

Outre ces tablespaces ’système’ qui servent en quelque sorte à la cuisine interne d’Oracle, il faudra bien tout de même stocker quelques données (et indexs)
Ici plusieurs stratégies sont possibles :
- séparation des indexs et des datas,
- séparation des différents domaines fonctionnels

note : Il serait possible également de stocker les datas, les index dans ces SYSTEM ou SYSAUX.
Ceci est vivement déconseillé, car on aurait ainsi une base minimale peu structurée.

Les tablespaces sont donc utiles pour répartir les données, les index, mais aussi les segments d’annulations et les espaces temporaires sur plusieurs espaces logiques et disques.
Ils permettent :
- performance (répartitions des accès disques),
- souplesse (séparation fonctionnelle ou métier, meilleure granularité des sauvegardes),
- sécurité (séparation des infos systèmes des données utilisateurs)

SQL de base pour la gestion des TBS

SQL> CREATE TABLESPACE …
SQL> DROP TABLESPACE…
SQL> ALTER TABLESPACE…

exemples

SQL> CREATE TABLESPACE COMPTA DATAFILE
‘E:orantdatabaseTESTcompta1TEST.ora’ SIZE 100M;
SQL> ALTER TABLESPACE COMPTA OFFLINE;
SQL> ALTER TABLESPACE COMPTA ADD DATAFILE
‘E:orantdatabaseTESTcompta2TEST.ora’ SIZE 100M;
SQL> DROP TABLESPACE COMPTA INCLUDING CONTENTS AND DATAFILE;
SQL> ALTER TABLESPACE CHARGEMENT_BATCH NOLOGGING;
SQL> ALTER TABLESPACE INFOCENTRE READ ONLY;

Description des tablespaces et fichiers de la base courante dans les vues
DBA_TABLESPACES , DBA_DATA_FILES, DBA_FREE_SPACE du dictionnaire.

SQL> SELECT TABLESPACE_NAME “Nom TBS”, CONTENTS “Type de contenu”, STATUS “EN ligne?”, LOGGING “Journalise?”, BIGFILE FROM DBA_TABLESPACES;

Nom TBS Type de
contenu EN ligne? Journalise?
——– —— — ———–
SYSTEM PERMANENT ONLINE LOGGING NO
UNDOTBS1 UNDO ONLINE LOGGING NO
SYSAUX PERMANENT ONLINE LOGGING NO
TEMP TEMPORARY ONLINE NOLOGGING NO
USERS PERMANENT ONLINE LOGGING NO
EXAMPLE PERMANENT ONLINE LOGGING NO
6 rows selected.

Tablespaces et fichiers

Un tablespace contient AU MOINS un fichier. Celui-ci est créé lors de la création du tablespace, de manière automatique par
Oracle, en fonction des paramètres donnés par la commande CREATE ou ALTER tablespace (emplacement du fichier, nom, taille, et mode d’extension).

note : Lors de la suppression du tablespace (DROP TABLESPACE…) les fichiers correspondant ne sont PAS SUPPRIMES par Oracle par défaut. Utilisez la clause ‘AND DATAFILE’…

exemples

SQL>
Nom_Tbs   Nom_Fic.                                       MO  AUTOEXTENSILE
USERS     C:ORACLEPRODUCT10.1.0ORADATAORCLUSERS01.DBF    5   YES
SYSAUX    C:ORACLEPRODUCT10.1.0ORADATAORCLSYSAUX01.DBF   230 YES
UNDOTBS1  C:ORACLEPRODUCT10.1.0ORADATAORCLUNDOTBS01.DBF  30  YES
SYSTEM    C:ORACLEPRODUCT10.1.0ORADATAORCLSYSTEM01.DBF   440 YES
EXAMPLE   C:ORACLEPRODUCT10.1.0ORADATAORCLEXAMPLE01.DBF  150 NO
EXAMPLE   C:ORACLEPRODUCT10.1.0ORADATAORCLEXAMPLE012.DBF 10  NO

Extension et gestion d’espace des tablespaces et des fichiers

La taille d’un tablespace est la taille de son (ses) fichier(s) d’origine.
Pour augmenter la taille d’un tablespace, il y a 2 solutions :
* Ajouter un fichier au tablespace, qui sera chainé au premier (ALTER TABLESPACE toto ADD DATAFILE…)
* mettre le fichier du tablespace en AUTO extension (ALTER DATABASE DATAFILE toto.dbf AUTOEXTEND ON)
Une table (et tout segment en général) , peut “s’étaler” sur plusieurs fichiers. Ainsi le fait qu’une table sature un tablespace n’est pas bloquant il suffit d’augmenter la taille du tablespace.

autoextension des fichiers

ATTENTION : la clause AUTOEXTEND spécifie la taille d’extension du fichier d’un tablespace. La clause STORAGE INITIAL, NEXT, MINEXTENTS … spécifie la taille d’extension d’UN SEGMENT du tablespace par exemple une table. Ces 2 paramètres sont totalement indépendants. La preuve en est qu’une table (un segment de données) est forcément en allocation dynamique alors qu’un fichier peut avoir une taille fixe (AUTOEXTEND OFF)

note : Le changement de mode AUTOEXTEND se fait avec la commande ‘ALTER DATABASE’ pour les ‘SMALLFILE’ et ‘ALTER TABLESPACE’ pour les ‘BIGFILE’

exemples

SQL> - passage en AUTO extension d’un fichier de tablespace existant
SQL> ALTER DATABASE DATAFILE ‘E:orantdatabaseTESTUsr1TEST.ora’ AUTOEXTEND ON;
SQL> ALTER DATABASE DATAFILE ‘C:ORACLEPRODUCT10.1.0ORADATAORCLEXAMPLE01.DBF’
AUTOEXTEND OFF
SQL> - ajout d’un ficheir auto extensible jusqu’a 100 MO
SQL> ALTER TABLESPACE toto ADD DATAFILE ‘E:orantdatabaseTESTTEST.ora’ SIZE 10M AUTOEXTEND ON NEXT 5M MAXSIZE 100M;

extension des segments

* clause LOCAL : Tablespaces gérés localement (Locally managed tablespaces)
Anciennement les tablespaces étaient gérés au niveau du dictionnaire de données, la gestion de l’espace physique (allocation / libération de blocs) se fait désormais dans l’entête du fichier(s) du tablespace. Une table binaire d’allocation (bitmap) y
est maintenue. C’est le fonctionnement par défaut (sauf pour le tablespace SYSTEM)
Avantages :
* pas de contention en mise à jour au niveau du dictionnaire
* et conséquemment pas d’utilisation de Rollback segment pour ces transactions
* pas de soucis de gestion de l’espace (calcul d’un storage adéquat)
* “coalesce” automatique (fusion des espaces libres contigus pour optimiser l’espace libre)
Evidemment la clause “DEFAULT STORAGE” est invalide pour les tablespaces gérés localement.

* Clause AUTOALLOCATE
C’est Oracle qui gère !

* Clause UNIFORM
Les extents ont tous la meme taille, par défaut 1MO, sinon elle est précisée par le paramètre ‘SIZE’

* clause STORAGE
Les règles et les statistiques d’allocations sont gérées au niveau du dictionnaire.
Pour plus d’informations voir le chapitre sur les ’segments et extents’
changement des paramètres d’un tablespace existant
ALTER TABLESPACE SYSTEM
DEFAULT STORAGE ( INITIAL 100K NEXT 100K MINEXTENTS 1 MAXEXTENTS 300 PCTINCREASE 1);

Quelques exemples de syntaxe

SQL> CREATE TABLESPACE COMPTA DATAFILE ‘E:orantdatabaseTESTcompta1TEST.ora’
SIZE 100M EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
SQL> CREATE TABLESPACE COMPTA DATAFILE ‘E:orantdatabaseTESTcompta1TEST.ora’ SIZE 100M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 500K;
SQL> CREATE TABLESPACE COMPTA DATAFILE ‘E:orantdatabaseTESTcompta1TEST.ora’ SIZE 100M EXTENT MANAGEMENT DICTIONARY;

Imprimer Imprimer

Architecture (s) Oracle

Administration Oracle, Divers pas de Commentaire »

Architectures locales et réparties

On peut distinguer essentiellement 3 types d’architecture globale de systèmes d’information basés sur Oracle :

  • architecture locale
    Tout est sur le même serveur matériel, programme client et serveur de données Oracle

    archi locale

  • architecture client/serveur
    On a 2 poles : client + serveur
    On a un programme client (un exécutable) sur le poste client, dit alors ‘client lourd’ . Le PC communique avec le serveur de données sur un serveur distant, via le réseau, et la couche Oracle Net.

    archi 2 tier

  • architecture 3 tiers
    On a 3 poles : cleint / serveur d’application /serveur de donnéesPas de programme client. Un navigateur suffit sur le poste de travail (dit alors ‘client léger’). Il dialogue avec le seveur de données distant via http.

archi 3 tier

note : il existe également des architectures n- tiers plus anecdotiques, mais conceptuellement intéressantes

Instance ?
Rappel : Une instance est caractérisée par son identificateur : SID, généralement une variable ORACLE_SID positionnée dans l’environnement.

Une instance active en mémoire ce sont :
- des programmes de fond, services ou processus, qui assurent la maintenance du serveur de données et les entrées / sorties fichiers
- des process server (dédiés ou non à un utilisateur)
- une zone globale partagée : la SGA, qui contient essentiellement du cache de buffers
- des zones mémoires dédiées aux utilisateurs : les PGAs (Private Global Area)

instance gene

Schéma de l’architecture générale en mémoire

La SGA
La SGA est essentiellement un cache mémoire qui contient des infos partagées de la base.

Les process de fond
Ils permettent de paralléliser et désynchroniser les accès multi-utilisateur à la base.
Nous allons lister les principaux :

  • DBWn Database Writer
    Ecrit les données modifiées, du cache de données de la SGA vers les fichiers de données. On peut en avoir plusieurs (max 20) suivant la valeur du parametre DB_WRITER_PROCESSES
  • LGWR Log Writer
    Ecrit les mises à jour, du cache de LOG de la SGA vers les ou le fichiers REDOLOG, suivant qu’on utilise des LOGs multiplexés ou non.
  • CKPT Checkpoint
    Signale l’occurence d’un point de reprise (flush de tous les buffers de données), à DBWR
  • PMON Process Monitor
    Libère les ressources et nettoie le cache en cas d’échec d’un process utilisateur
  • SMON System Monitor
    Surveille les process de l’instance et assure les restaurations d’instance
  • RECO Recoverer
    Gère les transactions distribuées (commit à 2 phases)

et optionnellement :

  • ARCn Archiver
    sauvegarde le REDOLOG qui vient d’être terminé
  • Dnnn Dispatcher
    Distribue les accès utilisateurs, vers les serveurs partagés, en architecture multiplexée (Shared Server)
  • Snnn Shared Server
    Process utilisateurs partagé, en architecture multiplexée
  • CJQn Coordinateur de jobs batch
    Jnnn Process fils dédiés aux Jobs
  • QMNn - Queue monitor
    gestionnaire de file d’attente, pour l’option Oracle Advanced QUeuing
  • Pnnn Esclave d’execution Parallele
    Exécution des requêtes parallèles. Le nb max de process est donné par : PARALLEL_MAX_SERVERS
  • LCKn Lock monitor
    verrouillage des ressources utilisées par plusieurs instances
  • LMS Global cache service
    Gestion des ressources inter-instances en architecture cluster (RAC)

instance detail

note : sous Unix/Linux ces process correspondent à des process Unix, qui appartiennent à l’utilisateur Oracle et s’exécutent de manière ‘déconnectée’ (background).
On peut facilement en avoir la liste avec la commande suivante :
$> ps -ef |grep oracle

process unix

Sous Windows ils correspondent à des services :

services

Imprimer Imprimer

Contraintes d’intégrité

Administration Oracle, Divers pas de Commentaire »

Les contraintes sont des règles de gestion, qui doivent (normalement) être vérifiées lors des mises ? jour (INSERT, UPDATE, DELETE).
Ces contrôles sont centralisés dans la base, au niveau de la structure de la table elle même et non pas déportées sur l’application cliente.
Une mise ? jour qui ne satisfait pas une contrainte, déclenche une erreur d’exécution :’…CONSTRAINT VIOLATED…’
Dans certains cas les contraintes peuvent être momentanément invalidées (DISABLEd ou DEFERRED).

Il y a plusieurs types de contraintes :

- NULL : valeur indéfinie (??)
- NOT NULL : valeur obligatoire (non indéfinie)
- DEFAULT : une valeur par defaut si non renseignée
- UNIQUE : !
- PRIMARY KEY : clé primaire (identifiant de la table, obligatoire ET unique)
- FOREIGN KEY : clé étrangère ‘colonne qui référence la clé primaire d’une autre table)
- CHECK : doit vérifier une condition

On peut créer des contraintes directement avec l’instruction ‘CREATE TABLE’ ou en ajouter / modifier / supprimer, respectivement avec les instructions ‘ALTER TABLE ADD | MODIFY |DROP CONSTRAINT …’

exemples de contraintes

– exemple de table avec des colonnes …
– et des contrainte NOT NULL, UNIQUE, PRIMARY KEY et CHECK

SQL> DROP TABLE employe_dd;

SQL> CREATE TABLE employe_dd
( employee_id NUMBER(6) PRIMARY KEY
, last_name VARCHAR2(25) NOT NULL
, salary NUMBER(8,2)
, CONSTRAINT emp_salary_min_dd CHECK (salary > 0)
, email VARCHAR2(25) NOT NULL
, CONSTRAINT emp_email_dd UNIQUE (email)
, commission_pct NUMBER(2,2)
, department_id NUMBER(4)
) ;

– exemple de table avec clé primaire et étrangère NOMMEES rajoutées ? posteriori
– ici la contrainte NOT NULL est nommée…

SQL> DROP TABLE departement_dd;

SQL> CREATE TABLE departement_dd
( department_id NUMBER(4)
, department_name VARCHAR2(30) CONSTRAINT dept_name_dd_nn NOT NULL
, location_id NUMBER(4)
) ;

SQL> ALTER TABLE departement_dd
ADD ( CONSTRAINT dept_id_dd_pk PRIMARY KEY (department_id));

SQL> ALTER TABLE employe_dd
ADD ( CONSTRAINT emp_dept_dd_fk FOREIGN KEY (department_id)
REFERENCES departement_dd );

Note : la contrainte d’intégrité référentielle impose qu’un employé appartienne a un département EXISTANT.
Symétriquement, si l’on veut supprimer un département qui a des employes on viole la contrainte :
SQL> delete from departments where department_id=10;
–> erreur : ORA-02292: violation de contrainte (HR.EMP_DEPT_FK) d’intégrité - enregistrement fils existant

Il existe une clause ‘ON DELETE CASCADE’ qui permet de déclencher une suppression automatique des lignes ‘filles’ si une ligne ‘mère’ est supprimée : supprimer par exemple tous les emplyés associés ? un departement qui vient d’être supprimé…

SQL> ALTER TABLE employees
ADD ( CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments ON DELETE CASCADE )
SQL> select count(*) from employees
WHERE department_id=100;
–> 6
SQL> DELETE from departments WHERE department_id=100;
–> 1 row deleted
mais les lignes de ‘employees’ correspondantes ont également été supprimées :
SQL> select count(*) from employees
WHERE department_id=100;
–> 0

Infos dans le référentiel

SQL> select * from user_constraints

ou + précisément

SQL> select constraint_name, constraint_type, table_name,
search_condition,r_constraint_name, status
from user_constraints
where table_name like ‘%DD’

CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME SEARCH_CONDITION R_CONST_NAME STATUS
—————– ————— ———- —————- ———— ——
EMP_SALARY_MIN_DD C EMPLOYE_DD salary > 0 - ENABLED
SYS_C004030 C EMPLOYE_DD EMAIL IS NOT NULL - ENABLED
SYS_C004029 C EMPLOYE_DD LAST_NAME IS NOT NULL - ENABLED
DEPT_NAME_DD_NN C DEPARTEMENT_DD D_NAME IS NOT NULL - ENABLED
EMP_DEPT_DD_FK R EMPLOYE_DD - DEPT_ID_DD_PK ENABLED
SYS_C004032 P EMPLOYE_DD - - ENABLED
EMP_EMAIL_DD U EMPLOYE_DD - - ENABLED
DEPT_ID_DD_PK P DEPARTEMENT_DD - - ENABLED

invalidation de contraintes

Les clauses ‘DEFERRED’ et ‘DEFERRABLE’ permettent de différer l’application de la contrainte ? la fin de la
transaction :

SQL> create table test(n number check ( n in (10, 20) ) deferrable initially deferred );
SQL> alter session set constraint = deferred;
SQL> insert into test values(100);
–> OK
SQL> insert into test values(200);
SQL> commit;
–> erreur sur la transaction
ORA-02091: transaction annulée
ORA-02290: violation de contraintes (HR.SYS_C004039) de vérification

SQL> alter session set constraint = immediate;
SQL> insert into test values (100);
–> erreur sur l’insertion :
ORA-02290: violation de contraintes (HR.SYS_C004039) de vérification

On peut également utiliser les clause ENABLE/DISABLE de ‘ALTER TABLE’
ENABLE VALIDATE : s’applique aux lignes existantes dans la table
ENABLE NOVALIDATE : aux ligne futures
DISABLE : inhibe la contrainte

SQL> CREATE TABLE test (n number , constraint nb_ok check ( n in (10, 20) ));
SQL> insert into test values (100);
– erreur : ORA-02290: violation de contraintes (HR.NB_OK) de vérification
SQL> ALTER TABLE test DISABLE CONSTRAINT nb_ok ;
SQL> insert into testing values(100);
–> 1 ligne insérée (la contrainte était inhibée)

ALTER TABLE test ENABLE NOVALIDATE CONSTRAINT nb_ok;
–> OK : Table Altered…

ALTER TABLE test ENABLE VALIDATE CONSTRAINT nb_ok;
–> erreur : ORA-02293: impossible de valider (HR.NB_OK)
- violation d’une contrainte de contrôle

la clause validate, force le controle de la contraine sur la lignes existantes et la valeur ‘100′ insérée précédemment est non conforme…

Voici un exemple complet de création de mini base avec contraintes, d’après les tables de démo HR officielles d’Oracle :

Rem
Rem $Header: hr_cre.sql 29-aug-2002.11:44:03 hyeh Exp $
Rem Copyright (c) 2001, 2002, Oracle Corporation. All rights reserved.
Rem

REM ****************************************************
REM Create the REGIONS table to hold region information for locations
REM HR.LOCATIONS table has a foreign key to this table.

Prompt ****** Creating REGIONS table ….

CREATE TABLE regions
( region_id NUMBER
CONSTRAINT region_id_nn NOT NULL
, region_name VARCHAR2(25)
);

CREATE UNIQUE INDEX reg_id_pk
ON regions (region_id);

ALTER TABLE regions
ADD ( CONSTRAINT reg_id_pk
PRIMARY KEY (region_id)
) ;

REM ********************************************************
REM Create the COUNTRIES table to hold country information for customers
REM and company locations.
REM OE.CUSTOMERS table and HR.LOCATIONS have a foreign key to this table.

Prompt ****** Creating COUNTRIES table ….

CREATE TABLE countries
( country_id CHAR(2)
CONSTRAINT country_id_nn NOT NULL
, country_name VARCHAR2(40)
, region_id NUMBER
, CONSTRAINT country_c_id_pk
PRIMARY KEY (country_id)
)
ORGANIZATION INDEX;

ALTER TABLE countries
ADD ( CONSTRAINT countr_reg_fk
FOREIGN KEY (region_id)
REFERENCES regions(region_id)
) ;

REM ********************************************************
REM Create the LOCATIONS table to hold address information for company departments.
REM HR.DEPARTMENTS has a foreign key to this table.

Prompt ****** Creating LOCATIONS table ….

CREATE TABLE locations
( location_id NUMBER(4)
, street_address VARCHAR2(40)
, postal_code VARCHAR2(12)
, city VARCHAR2(30)
CONSTRAINT loc_city_nn NOT NULL
, state_province VARCHAR2(25)
, country_id CHAR(2)
) ;

CREATE UNIQUE INDEX loc_id_pk
ON locations (location_id) ;

ALTER TABLE locations
ADD ( CONSTRAINT loc_id_pk
PRIMARY KEY (location_id)
, CONSTRAINT loc_c_id_fk
FOREIGN KEY (country_id)
REFERENCES countries(country_id)
) ;

Rem Useful for any subsequent addition of rows to locations table
Rem Starts with 3300

CREATE SEQUENCE locations_seq
START WITH 3300
INCREMENT BY 100
MAXVALUE 9900
NOCACHE
NOCYCLE;

REM **************************************************
REM Create the DEPARTMENTS table to hold company department information.
REM HR.EMPLOYEES and HR.JOB_HISTORY have a foreign key to this table.

Prompt ****** Creating DEPARTMENTS table ….

CREATE TABLE departments
( department_id NUMBER(4)
, department_name VARCHAR2(30)
CONSTRAINT dept_name_nn NOT NULL
, manager_id NUMBER(6)
, location_id NUMBER(4)
) ;

CREATE UNIQUE INDEX dept_id_pk
ON departments (department_id) ;

ALTER TABLE departments
ADD ( CONSTRAINT dept_id_pk
PRIMARY KEY (department_id)
, CONSTRAINT dept_loc_fk
FOREIGN KEY (location_id)
REFERENCES locations (location_id)
) ;

Rem Useful for any subsequent addition of rows to departments table
Rem Starts with 280

CREATE SEQUENCE departments_seq
START WITH 280
INCREMENT BY 10
MAXVALUE 9990
NOCACHE
NOCYCLE;

REM *********************************************
REM Create the JOBS table to hold the different names of job roles within the company.
REM HR.EMPLOYEES has a foreign key to this table.

Prompt ****** Creating JOBS table ….

CREATE TABLE jobs
( job_id VARCHAR2(10)
, job_title VARCHAR2(35)
CONSTRAINT job_title_nn NOT NULL
, min_salary NUMBER(6)
, max_salary NUMBER(6)
) ;

CREATE UNIQUE INDEX job_id_pk
ON jobs (job_id) ;

ALTER TABLE jobs
ADD ( CONSTRAINT job_id_pk
PRIMARY KEY(job_id)
) ;

REM ***********************************************
REM Create the EMPLOYEES table to hold the employee personnel
REM information for the company.
REM HR.EMPLOYEES has a self referencing foreign key to this table.

Prompt ****** Creating EMPLOYEES table ….

CREATE TABLE employees
( employee_id NUMBER(6)
, first_name VARCHAR2(20)
, last_name VARCHAR2(25)
CONSTRAINT emp_last_name_nn NOT NULL
, email VARCHAR2(25)
CONSTRAINT emp_email_nn NOT NULL
, phone_number VARCHAR2(20)
, hire_date DATE
CONSTRAINT emp_hire_date_nn NOT NULL
, job_id VARCHAR2(10)
CONSTRAINT emp_job_nn NOT NULL
, salary NUMBER(8,2)
, commission_pct NUMBER(2,2)
, manager_id NUMBER(6)
, department_id NUMBER(4)
, CONSTRAINT emp_salary_min
CHECK (salary > 0)
, CONSTRAINT emp_email_uk
UNIQUE (email)
) ;

CREATE UNIQUE INDEX emp_emp_id_pk
ON employees (employee_id) ;

ALTER TABLE employees
ADD ( CONSTRAINT emp_emp_id_pk
PRIMARY KEY (employee_id)
, CONSTRAINT emp_dept_fk
FOREIGN KEY (department_id)
REFERENCES departments
, CONSTRAINT emp_job_fk
FOREIGN KEY (job_id)
REFERENCES jobs (job_id)
, CONSTRAINT emp_manager_fk
FOREIGN KEY (manager_id)
REFERENCES employees
) ;

ALTER TABLE departments
ADD ( CONSTRAINT dept_mgr_fk
FOREIGN KEY (manager_id)
REFERENCES employees (employee_id)
) ;

Rem Useful for any subsequent addition of rows to employees table
Rem Starts with 207

CREATE SEQUENCE employees_seq
START WITH 207
INCREMENT BY 1
NOCACHE
NOCYCLE;

REM ***********************************************
REM Create the JOB_HISTORY table to hold the history of jobs that
REM employees have held in the past.
REM HR.JOBS, HR_DEPARTMENTS, and HR.EMPLOYEES have a foreign key to this table.

Prompt ****** Creating JOB_HISTORY table ….

CREATE TABLE job_history
( employee_id NUMBER(6)
CONSTRAINT jhist_employee_nn NOT NULL
, start_date DATE
CONSTRAINT jhist_start_date_nn NOT NULL
, end_date DATE
CONSTRAINT jhist_end_date_nn NOT NULL
, job_id VARCHAR2(10)
CONSTRAINT jhist_job_nn NOT NULL
, department_id NUMBER(4)
, CONSTRAINT jhist_date_interval
CHECK (end_date > start_date)
) ;

CREATE UNIQUE INDEX jhist_emp_id_st_date_pk
ON job_history (employee_id, start_date) ;

ALTER TABLE job_history
ADD ( CONSTRAINT jhist_emp_id_st_date_pk
PRIMARY KEY (employee_id, start_date)
, CONSTRAINT jhist_job_fk
FOREIGN KEY (job_id)
REFERENCES jobs
, CONSTRAINT jhist_emp_fk
FOREIGN KEY (employee_id)
REFERENCES employees
, CONSTRAINT jhist_dept_fk
FOREIGN KEY (department_id)
REFERENCES departments
) ;

Imprimer Imprimer

Compatibilité import / export 9i / 10g

Administration Oracle, Divers pas de Commentaire »

En résumé
version import = version base cible
version export V9 compatible avec base 10 et 11G

matrice de compatibilté export / import

+———+————————————————————+ |EXPORT | IMPORT into: | | from +——-+——–+——–+——–+——–+——–+——-+ | \/ | 8.1.x | 8.1.7 | 9.0.1 | 9.2.0 | 10.1.0 | 10.2.0 | 11.1.0| +———+——-+——–+——–+——–+——–+——–+——-+ |5.x 1) 2)|EXP5x | EXP5x | EXP5x | EXP5x | EXP5x | EXP5x | EXP5x | |6.x 2)|EXP6x | EXP6x | EXP6x | EXP6x | EXP6x | EXP6x | EXP6x | |7.x 3)|EXP7x | EXP7x | EXP7x | EXP7x | EXP7x | EXP7x | EXP7x | +———+——-+——–+——–+——–+——–+——–+——-+ |8.0.3 |EXP803 | EXP803 | EXP803 | EXP803 | EXP803 | EXP803 | EXP803| |8.0.4 |EXP804 | EXP804 | EXP804 | EXP804 | EXP804 | EXP804 | EXP804| |8.0.5 |EXP805 | EXP805 | EXP805 | EXP805 | EXP805 | EXP805 | EXP805| |8.0.6 |EXP806 | EXP806 | EXP806 | EXP806 | EXP806 | EXP806 | EXP806| +———+——-+——–+——–+——–+——–+——–+——-+ |8.1.5 |EXP815 | EXP815 | EXP815 | EXP815 | EXP815 | EXP815 | EXP815| |8.1.6 |EXP81x | EXP816 | EXP816 | EXP816 | EXP816 | EXP816 | EXP816| |8.1.7 |EXP81x | EXP817 | EXP817 | EXP817 | EXP817 | EXP817 | EXP817| +———+——-+——–+——–+——–+——–+——–+——-+ |9.0.1 |EXP81x | EXP817 | EXP901 | EXP901 | EXP901 | EXP901 | EXP901| |9.2.0 | N/S | EXP817 | EXP901 | EXP920 | EXP920 | EXP920 | EXP920| +———+——-+——–+——–+——–+——–+——–+——-+ |10.1.0 4)| N/S | EXP817 | EXP901 | EXP920 | 4) | |10.2.0 4)| Not Supported | EXP920 | 4) | +———+——-+——–+——–+——–+——–+——–+——-+ |11.1.0 4)| Not Supported | EXP920 | 4) | +———+——-+——–+——–+——–+——–+——–+——-+

Quelques tests

——————————————————-

srv1:/oracle/9iDB/bin >exp scott/tiger@b9 file=/tmp/exp9b9.dmp

Export: Release 9.2.0.6.0 - Production on Tue Mar 11 16:52:39 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Export terminated successfully without warnings.

——————————————————-

srv1:/oracle/10GDB/bin > exp scott/tiger@b10 file=/tmp/exp10b10.dmp

Export: Release 10.2.0.3.0 - Production on Tue Mar 11 17:05:44 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64
bit Production
With the Partitioning, OLAP and Data Mining options

Export terminated successfully without warnings.

——————————————————-

srv1:/oracle/10GDB/bin > exp scott/tiger@b9 file=/tmp/exp10b9.dmp

Export: Release 10.2.0.3.0 - Production on Tue Mar 11 16:49:35 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.

EXP-00056: ORACLE error 6550 encountered
ORA-06550: line 1, column 41:
PLS-00302: component ‘SET_NO_OUTLINES’ must be declared
ORA-06550: line 1, column 15:
PL/SQL: Statement ignored
EXP-00000: Export terminated unsuccessfully

——————————————————-

srv1:/oracle/10GDB/bin >imp scott/tiger@b9 file=/tmp/exp9b9.dmp

Import: Release 10.2.0.3.0 - Production on Tue Mar 11 16:56:51 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.

IMP-00058: ORACLE error 6550 encountered
ORA-06550: line 1, column 33:
PLS-00302: component ‘SET_NO_OUTLINES’ must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
IMP-00000: Import terminated unsuccessfully

——————————————————-

srv-1:/oracle/9iDB/bin >exp scott/tiger@b10 file=/tmp/exp9b10.dmp

Export: Release 9.2.0.6.0 - Production on Tue Mar 11 17:00:56 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64
bit Production
With the Partitioning, OLAP and Data Mining options

EXP-00008: ORACLE error 37002 encountered
ORA-37002: Oracle OLAP failed to initialize. Please contact Oracle OLAP tech
nical support.
ORA-33262: Analytic workspace EXPRESS does not exist.
ORA-06512: at “SYS.DBMS_AW”, line 93
ORA-06512: at “SYS.DBMS_AW”, line 122
ORA-06512: at “SYS.DBMS_AW_EXP”, line 473
ORA-06512: at line 1
EXP-00083: The previous problem occurred when calling SYS.DBMS_AW_EXP.schema
_info_exp
. exporting statistics
Export terminated successfully with warnings.

——————————————————-

srv1:/oracle/9iDB/bin >imp scott/tiger@b9 file=/tmp/exp10b10.dmp

Import: Release 9.2.0.6.0 - Production on Tue Mar 11 17:13:43 2008

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connected to: Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Producti
on
With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining op
tions
JServer Release 9.2.0.6.0 - Production

IMP-00010: not a valid export file, header failed verification
IMP-00000: Import terminated unsuccessfully

Imprimer Imprimer

Paramètres d’instance et de session

Administration Oracle, Divers pas de Commentaire »

Les paramètres d’initialisation

Les ressources utilsées par une base, essentiellement ressources mémoires, buffers, processus et fichiers sont paramétrables, et permettent d’ajuster son fonctionnement, voire de faire de l’optimisation (tuning).
Certains paramètres ont des valeurs libres (dans un domaine de valeurs, bien sûr), d’autres plus restrictifs sont dépendants du systèmes d’exploitation, ou dérivés d’autres paramètres.

Lors de son démarrage, une instance Oracle lit ses paramètres dans un fichier, dit de démarrage ou d’initialisation.
La totalité des paramètres d’initialisation est décrite dans la documentation Oracle Oracle 10gR2 reference (attention PDF de 30MO!).

note : augmenter les ressources allouées ? la base en augmentant les valeurs de certains

paramètres est une bonne idée…jusqu’? un certain point. La mémoire ne peut pas,on s’en doute, être entièrement dévolue ? la SGA…
Quelle que soit la base il est obligatoire de spécifier explicitement au strict minimum 2 paramètres :

‘DB_NAME’ : le nom de la base de données
‘CONTROL_FILES’ : la liste des fichiers de contrôle utilisés

Les autres paramètres les plus fréquemment utilisés sont les suivants (S:statique, M:modifiable, D: dérivé d’un autre paramètre)

COMPATIBLE S Compatibilité arrière avec les versions précédentes (>= 9.2.0)
DB_DOMAIN S Nom de domaine, qui associé au DB_NAME donne un nom de base uniqueNom de domaine, qui associé au DB_NAME donne un nom de base unique
DB_RECOVERY_FILE_DEST M Répertoire de destination de la zone de FLASH recovery
LOG_ARCHIVE_DEST_n M Répertoire des fichiers REDO LOGS archivés
NLS_LANGUAGE D Langue utilisée (fonction de NLS_LANG dans l’environnement Unix ou windows)
NLS_TERRITORY M le territoire (France par ex). Impacte les dates, et la monnaie
OPEN_CURSORS M nb max de cursor ouvrable par une application
PGA_AGGREGATE_TARGET M si 0, dimensionnement auto de la PGA, pour les proccess utilisateur server
PROCESSES S nb max de process connectés ? Oracle (background et user)
SESSIONS D = 1,1 * PROCESSES
SGA_TARGET D si 0 auto dimensionnement de la SGA
SHARED_SERVER M 0 si serveur dédié, n = nb de serveurs partagés lancés au startup instance
SP_FILE S emplacement du SP File
UNDO_MANAGEMENT S Manual | Auto, par defaut Manual indique qu’on utilise des Rollback segments

Paramètres statiques et dynamiques

Certains paramètres peuvent être modifiés en temps réel, ils sont dits dynamiques, d’autres seront pris en compte au prochain redémarrage de la base, ils sont dits statiques.
Les paramètres dynamiques peuvent être modifiés pour la durée de la session,, pour la durée de l’instance ou de manière permanente avec la commande ‘ALTER SESSION’ ou ‘ALTER SYSTEM’.
Voici les syntaxes :

ALTER SESSION SET =
ALTER SYSTEM SET = [SCOPE = MEMORY | SPFILE | BOTH] [DEFERRED] [COMMENT = ”]

exemples

SQL> ALTER SESSION SET NLS_LANGUAGE=’FRENCH’;


Informations sur les paramètres

On peut utiliser les commandes SQL*Plus SHOW :

SQL> SHOW PARAMETER

active_instance_count integer  
aq_tm_processes integer 0
archive_lag_target integer 0
asm_diskgroups string  
asm_diskstring string  
asm_power_limit integer 1
audit_file_dest string F:ORACLEPRODUCT10.2.0ADMIN ORCLADUMP
audit_sys_operations boolean FALSE
audit_trail string NONE
background_core_dump string partial
background_dump_dest string F:ORACLEPRODUCT10.2.0ADMIN ORCLBDUMP
backup_tape_io_slaves… boolean… FALSE…

ou en filtrant avec un mot clé :

SQL> SHOW PARAMETER AUDIT

audit_file_dest string F:ORACLEPRODUCT10.2.0ADMIN ORCLADUMP
audit_sys_operations boolean FALSE
audit_trail string NONE

ou utiliser des vues virtuelles du dictionnaire :

V$PARAMETER : les paramètres en cours d’utilisation (de la session donc…)
V$PARAMETER2 : les mêmes, mais mieux présentés…
V$SPPARAMETER : les paramètres du SPFILE (valable au (re)démarrage de l’instance)
V$SYSTEM_PARAMETER : paramètres de l’instance en cours en mémoire

SQL> select a.name, a.value courante, sp.value sp_file, mem.value memoire
from v$parameter a, v$spparameter sp, v$system_parameter mem
where a.name=sp.name
and mem.name=a.name
and a.name = ‘open_cursors’

NAME COURANTE SP_FILE MEMOIRE
open_cursors 1100 1100 1100

SQL> alter system set open_cursors=1200;
– on modifie la valeur courante de l’instance, ce qui a un impact sur la session
– mais ne sera plus valable au redemarrage de la base (spfile non modifié…)

NAME COURANTE SP_FILE MEMOIRE
open_cursors 1200 1100 1200

SQL> — infos sur parametres, par defaut ou non ?
SQL> SELECT NAME , VALUE, ISDEFAULT, DESCRIPTION
FROM V$PARAMETER

NAMEtracefile_identifier VALUE ISDEFAULTTRUE DESCRIPTIONtrace file custom identifier
lock_name_space   TRUE lock name space used for generating lock names for standby/clone database
processes 150 FALSE user processes
sessions 170 TRUE user and system sessions
timed_statistics TRUE TRUE maintain internal timing statistics
timed_os_statistics 0 TRUE internal os statistic gathering interval in seconds

SQL> — combine de parametres spécifiés dans le SPFILE ?
SQL> SELECT count(*)
FROM V$SPPARAMETER
WHERE ISSPECIFIED IS TRUE
COUNT(*)
———-
23

Imprimer Imprimer

Récupération rapide d’une table …dans la poubelle (RECYCLE BIN)

Administration Oracle, Divers pas de Commentaire »

Les suppressions de tables, ne sont plus désormais physiques et définitives, mais mettent simplement l’objet ? la corbeille (RECYCLE BIN). Tant que cette dernière n’est pas vidée, il est possible de récupérer l’objet supprimé.

skull Attention ! pour pouvoir être utilisée la poubelle …doit être active. On peut vérifier le paramètre d’initilalisation : SQL> SHOW PARAMETER RECYCLE , qui doit être ? ‘ON’.

skullskull Attention encore plus !! les commandes de gestion de la poubelle ne sont pas des commandes SQL , mais SQL*Plus donc même si vous êtes en 10g mais avec un client autre que SQL+ 10g , les commandes ne seront pas reconnues. Vous aurez des messages du genre,
- sous i*SQLPlus : Command beginning “purge tabl…” is not available in iSQL*Plus
- sous SQLPlus : SP2-0734: unknown command beginning “purge scot…” - rest of line ignored.
Des infos sur le contenu de la poubelle dans le dictionnaire…

Les informations concernant la corbeille peuvent être consultées dans le dictionnaire :

SQL> SHOW RECYCLEBIN
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
————- ————— ———– ———
T1 BIN$EkKm2r93vZfgQKjAhw1XeA==$0 TABLE 2006-04-25:15:51:52

ou via les tables USER_RECYCLEBIN et DBA_RECYCLEBIN.

exemple

SQL> select original_name nom, object_name “nom interne”,
operation, createtime “date création “,
droptime “date suppression “, can_undrop “récupérable ? “, can_purge “purgeable ?”
FROM user_recyclebinNOM NOM INTERNE OPERATION date création date suppression récupérable? purgeable?
— —————————— ——— ——————- ——————- ———— ———-
T1 BIN$Ejia7J3wZRXgQKjAhw0prg==$0 DROP 2006-04-25:15:10:17 2006-04-25:15:10:22 YES YES
T2 BIN$Ejia7J3vZRXgQKjAhw0prg==$0 DROP 2006-04-25:15:09:30 2006-04-25:15:09:35 YES YES

note : les colonnes CREATETIME et DROPTIME sont des…VARCHAR (?)

exemples de récupération

SQL> FLASHBACK TABLE T2 TO BEFORE DROP
SQL> FLASHBACK TABLE “BIN$Ejia7J3vZRXgQKjAhw0prg==$0″ TO BEFORE DROP

note : on peut donc également utiliser le nom interne ET CE QUELQUESOIT LA COMMANDE SQL !
Il est conseillé de l’encadrer par des guillemets pour masquer les caractères spéciaux

Une table T1 peut avoir été supprimée plusieurs fois, et apparaitre plusieurs fois dans la corbeille.
Pour éviter toute ambiguité, il faut vérifier le contenu de la poubelle avant récupération
et utiliser le nom interne le cas échéant plutot que le nom logique.

exemple

SQL> create table t1 (n integer);
SQL> drop table t1;
SQL> create table t1(new_n integer);
SQL> drop table t1;
et dans la corbeille on a :
NOM nom interne OPERATION date création date suppression
T1 BIN$EkKm2r92vZfgQKjAhw1XeA==$0 DROP 2006-04-25:15:51:14 2006-04-25:15:51:28
T1 BIN$EkKm2r93vZfgQKjAhw1XeA==$0 DROP 2006-04-25:15:51:44 2006-04-25:15:51:52SQL> desc “BIN$EkKm2r93vZfgQKjAhw1XeA==$0″
Name Type
NEW_N NUMBER(38)

SQL> –c’est bien celle que je veux recuperer…dont acte
SQL> FLASHBACK TABLE “BIN$EkKm2r93vZfgQKjAhw1XeA==$0″ TO BEFORE DROP;

Suppression permanente

On peut supprimer une table de la corbeille avec la commande ‘PURGE’ :

SQL> PURGE TABLE T3

ou indirectement en utilisant des commandes affectant le trablespace utilisateur :

SQL> PURGE TABLESPACE users; — purge tous les objets du tablespace
SQL> PURGE TABLESPACE users USER scott; –purge tous les objets de SCOTT du tablespace USERS

ou vider en une fois la poubelle utilisateur ou la poubelle générale :

SQL> PURGE recyclebin;
SQL> PURGE dba_recyclebin;

Eviter la poubelle

On peut également supprimer physiquement et directement une table, en évitant de la conserver dans la corbeille donc, avec l’option ‘PURGE’ de la commande ‘DROP TABLE’

SQL> DROP TABLE T5 PURGE

Ou invalider l’utilisation de la poubelle de manière transversale,
grace au paramètre d’initialisation ‘RECYCLEBIN’

SQL> show parameter recyclebin
NAME TYPE VALUE
recyclebin string ON

SQL> ALTER SYSTEM SET recyclebin = OFF;
System Altered

SQL> show parameter recyclebin
NAME TYPE VALUE
recyclebin string OFF

Imprimer Imprimer

lister et arreter des JOBs (travaux) Oracle

Administration Oracle, Divers pas de Commentaire »
SQL> connect system/xxxx
SQL> select job, schema_user, next_date, what
from dba_jobs;

JOB SCHEMA_USER   NEXT_DATE
**** ************ **********
4001 FLOWS_030000 07/01/2008
4002 FLOWS_030000 07/01/2008
215  SYSTEM       07/01/2008

on récupère le no de Job dans la colonne ‘JOB’ de la table ‘DBA_JOBS’ et on supprime le Job choisi, grace au package PL/SQL fourni RDBMS_JOB

SQL> exec dbms_job.remove(215);
PL/SQL procedure successfully completed.

remarque : avec la console GRID 10g, qui surveille une base 9i (avec l’agent qui va bien) les jobs n’apparaissent pas dans la console, d’ou l’utilité de cette procédure manuelle.

Imprimer Imprimer

mode archivage (archivelog mode) et Oracle 10g

Administration Oracle, Divers 1 Commentaire »

Paramètres intéressants

LOG_ARCHIVE_START
est obsolète en 10g …et donc inutile (si précisé, provoque un Warning au démarrage de la base)
DB_RECOVERY_FILE_DEST
spécifie la zone de récupération (recovery area) et par défaut la zone d’archivage
LOG_ARCHIVE_DEST_n
destination de l’archivage des Redolog files (n allant de 1 ? 10, dans le sens croissant de la paranoïa)

La syntaxe est la suivante : LOG_ARCHIVE_DEST_n=”LOCATION=repertoire_archivage”

Vérification du mode actuel

SQL> archive log list
mode Database log mode Archive
Archivage automatique Active
Destination de l’archive USE_DB_RECOVERY_FILE_DEST
Sequence de journal en ligne la plus ancienne 65
Sequence de journal suivante a archiver 67
Sequence de journal courante 67
SQL>

on voit que l’ARCHIVE_DEST n’est pas positionné ici et que l’on utilise la recovery area par défaut, ce que l’on vérifie :

NAMETYPE VALUE
——– ——- ———-
log_archive_dest string
log_archive_dest_1 string
log_archive_dest_2 string

SQL> show parameters db_recovery

NAME TYPE VALUE
———————————— ———– ——————————
db_recovery_file_dest string /oracle/recovery_area
db_recovery_file_dest_size big integer 2G

Passage en mode archivage

on peut utiliser le script suivant (qui ne change guère des précédentes versions…)

#archive_mode.sql

set instance MA_BASE
connect sys/password as sysdba
shutdown
startup mount;
# Enable database ARCHIVELOG mode
alter database archivelog;
# Shut down and restart the database instance.
shutdown immediate
startup

Les process (Unix)
Ils sont par défaut au nombre de 2, lorsque l’archivage est activé, et s’appellent ora_arcN_ORACLE_SID :

$> ps -ef|grep arc

oracle? ? ? 6834? ? ? ? 1? 0 Aug13 ?? ? ? ? ? ? ? 00:00:00 ora_arc0_DBADE
oracle? ? ? 6836? ? ? ? 1? 0 Aug13 ?? ? ? ? ? ? ? 00:00:00 ora_arc1_DBADE