2016 Oracle DB 10g ADMINISTRATION WINDOWS OLIVIER DEHECQ DEHECQ Olivier – http://aide.informatique1.fr Page 1 Table des matières 1 Les bases de l’architecture Oracle ....................................................................................................... 4 2 Installation .............................................................................................................................................. 7 3 Création d’une base de données (assistant) ......................................................................................11 4 Le listener (p60) ...................................................................................................................................12 5 Les statuts d’une base de données (p90) ..........................................................................................15 6 La gestion de l’instance (p146)...........................................................................................................17 7 Gestion des fichiers de contrôle et de journalisation ........................................................................19 8 Gestion des tablespaces et des fichiers de contrôle (p171) ............................................................23 9 Flashback (p327 -) ...............................................................................................................................27 10 Créer une base de données manuellement ...................................................................................28 11 Gestion des tables et des index p243 ............................................................................................32 12 La gestion des utilisateurs (217) ....................................................................................................35 13 Index .................................................................................................................................................40 DEHECQ Olivier – http://aide.informatique1.fr 2 Signalétique Nota, astuce : Contient une partie serveur web qui traite les réponses statiques. Important, à retenir : Ceci est une chose importante Commande MS-DOS C:\> c:\tomcat5.5\bin\startup.bat Commande UNIX # /tomcat5.5/bin/startup.sh Commande SQL # /tomcat5.5/bin/startup.sh Chemin de fichier, dossier, emplacement sur le disque Fichier web.xml Exemple de contenu de document <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" /> Contenu du fichier web.xml <welcome-file>index.html</welcome-file> Contenu du fichier server.xml port "8080" port d’écoute du connecteur Autre contenu de fichier : <role rolename="RUserHelloWorld"/> Spécifique aux documents xml : Balise Nom de propriété Valeur Commentaire DEHECQ Olivier – http://aide.informatique1.fr 3 1 Les bases de l’architecture Oracle Oracle est un Système de Gestion de Bases de Données Relationnelles (SGBDR). Il prend en compte le SQL, utilise aussi des tables et vues système. Oracle est un logiciel. Il faut installer des clients Oracle pour se connecter aux bases de données Oracle. On peut acheter les licences par utilisateur ou par processeur. A titre d’exemple, Oracle 11gR2 standard va jusqu’à 6 cœur et coute 17500€ par cœur sur le serveur sur lequel le moteur est installé. Si vous faites de la haute disponibilité, une machine virtuelle contenant le moteur Oracle installé en version standard pouvant basculer entre 2 hyperviseurs physiques ayant chacun 2 cœurs, cela coute 4 x 17500€. S’il y a plus de 6 cœurs, il faut une licence Enterprise (35000€ par cœur). Si vous installez au moins une fonctionnalité non comprise dans la version standard, il faut une licence Enterprise. Oracle coûte donc cher, et il ne faut donc pas « jouer » avec. 1.1 Présentation générale Gammes : Standard : limitée à 6 processeurs Entreprise : au-delà de 6 processeurs ou au moins une fonctionnalité « non-standard » installée Personnel : uniquement sous Windows XE : gratuit, pas en production, 20 à 25 connexions simultanées Oracle est spécialisé dans les grands comptes, est indépendant de l’OS (seule l’installation est différente, la base est identique sous Windows ou Unix) ; beaucoup de possibilités de paramétrage ; principe de sauvegarde simple et efficace ; un seul outil d’administration qui est centralisé et permet toutes les taches d’administration en mode web (la DBConsole). Les éléments d’Oracle : 1.2 Oracle database : la base de données Oracle application server : gère la base de données Grid control : outils d’administration (en fait, la DBConsole) Outils pour les développeurs Les clients Oracle, avec des composants gratuits qu’on peut ajouter (driver ODBC, SQL*Plus, assistants de connexion, etc.) La Base de Données (p15) (1+) Datafiles : fichiers utilisateurs (1+) Control files : contiennent la structure de la BD, permettent de vérifier sa cohérence, font référence aux autres fichiers. (2+ groupes) Redo log files : fichiers de journalisation, permettent de faire des rollback (des retours en arrière). Contient les modifications apportées à la BD. Permet de récupérer l’instance après un arrêt anormal (pensez à faire des Backups RMAN de votre DB) DB_NAME : nom de la base de données Mode ARCHIVELOG : active un archivage des logs pour restaurer la BD facilement. Très utile pour les BD qu’on ne peut pas arrêter. A faire en complément de backups RMAN. Un schéma contient : Tables, vues, synonymes (simplification des requêtes, passe outre le schéma mais penser aux droits), index, séquence, programmes PL/SQL (procédures, fonctions, triggers, packages, jobs). DEHECQ Olivier – http://aide.informatique1.fr 4 1.3 Le Serveur (p19-25) Gère l’allocation des ressources. Une instance peut ouvrir plusieurs BD, mais une seule à la fois ! ORACLE_SID : variable d’environnement, définit l’instance utilisée à un instant t Utilisateurs: SYS : plus haut niveau. Propriétaire du dictionnaire, démarre et paramètre l’instance SYSTEM : propriétaire de tables complémentaires SYSDBA et SYSOPER permettent de faire certaines manip (sauvegarde, démarrage/arrêt, etc.) Init<%DB_NAME%>.ora (exemple : initINSTANCE.ora) : très important au niveau de l’instance. Il permet de faire le lien avec les BD montables et de connaitre la taille allouée à l’ensemble de la mémoire (=SGA), contient les paramètres d’archivelog et autres paramétrages de l’instance. 1.3.1 SGA (System Global Area) – une par instance: Les 3 zones mémoire de la SGA : 1.3.2 Database buffer cache : les données sont stockées temporairement dans cette zone avant leur écriture sur le disque Redo log buffer cache : enregistrement des modifications insert/update/delete rapportés à la BD. Si un des membres d’un groupe manque, la BD continue de fonctionner. Shared pool : pour le fonctionnement du moteur o Library cache : zone mémoire dédiée aux requêtes (cache des requêtes) o Dictionnary cache : zone mémoire dédiée au DICT (équivalent de master) Les processus PMON : en cas de plantage de process utilisateur, se charge du rollback et libère les verrous SMON : récupère l’instance après un arrêt anormal DBWR : (DBWriter) récupère les données du Database Buffer Cache et les écrit dans le Data Files LGWR : (LogWriter) récupère les données du Redo Log Buffer Cache et les écrit dans le Redo Log File CKPT : Checkpoint : permet l’écriture des logs du LGWR Autres : processus pour les requêtes notamment 1.3.3 PGA (Program Global Area) Aussi une zone mémoire. Permet l’exécution de certaines requêtes (exemple : tri). 1.3.4 Le listener C’est un module d’écoute. C’est un service qui permet d’utiliser TCP/IP pour accéder à la BD. Il écoute par défaut sur le port 1521. Il est associé à 1+ BD. Listener.ora : fichier de configuration du listener, contient la liste des listeners DEHECQ Olivier – http://aide.informatique1.fr 5 1.4 Sur les clients Tnsnames.ora : fichier de configuration du client Oracle. Liste les instances/bases auxquelles le client peut accèder. SqlNet : protocole permettant une communication avec le serveur Oracle (protocole propriétaire Oracle. Contient aussi son fichier de paramétrage : sqlnet.ora 1.5 L’administrateur de base de données 1.6 DBA de développement : travaille avec les dev’ (souvent un dev’ à la base) DBA de production : joignable 24/24, pas de droit à l’erreur (le pompier) DBA de recette : s’occupe des tests de migration Le chef des DBA : gère toute l’équipe Le schéma de fonctionnement d’Oracle DB 10g DEHECQ Olivier – http://aide.informatique1.fr 6 2 Installation Les variables %DB_NAME% et %ORACLE_SID% sont les mêmes lors de l’installation. Nom de l’installeur : OUI (Oracle Universal Installer). Installation par défaut de la version entreprise. Attention aux prérequis Après l’installation, se connecter à l’instance en mode web (la GRID | databasecontrol). Une page web par instance. 2.1.1 L’arborescence C:\oracle\production\10.2.0\ .\admin\ .\orcl\ .\oradata\ .\X fichiers .ctl .\Y fichiers redo.log .\Z fichiers .dbf .\db_1\ .\database\ .\NETWORK\ADMIN\ .\flash_recovery_area\ contient un dossier par instance (contient la trace) contient les fichiers de bases de données fichiers de contrôle) fichiers de redo) fichiers de données) emplacement d’installation (oracle_home) contient initorcl.ora (données un lien) contient listener.ora, sqlnet.ora et tnsname.ora corbeille (une par instance) Plusieurs programmes ont aussi été installés. 2.1.2 Les services OracleDBConsoleORCL (un par instance, permet d’accéder à la grid) OracleJobScheduler (un par instance, désactivé par défaut) Oracle…iSQLPlus (un par installation, permet d’utiliser iSQL+) Oracle…TNSListener (port 1521 par défaut, un par installation normalement) OracleServiceORCL (un par instance, moteur base de données) Les services liés à Oracle DB 10g 2.1.3 La base de registre HKLM / Software / Oracle / KeyOracl… : ORACLE_SID nom de l’instance utilisée par défaut ORACLE_HOME emplacement d‘installation DEHECQ Olivier – http://aide.informatique1.fr 7 2.2 SQLPlus La fenêtre de SQL*Plus SQL> DESC all_tables; liste des colonnes de la table all_tables SQL> SELECT owner,table_name FROM all_tables; liste des tables SQL> ED ouvre un éditeur qui contient la dernière requête, puis enregistrer et quitter SQL> / exécute la requête de la fenêtre ED SQL> SPOOL c:\fic.sql met en cache les requêtes à venir SQL> SELECT … ; SQL> SPOOL OF sauvegarde le spool en cache SQL> SELECT ‘SELECT * FROM’, TABLE_NAME, ’;’ FROM ALL_TABLES WHERE TABLE_NAME LIKE ‘c%’; Affiche ‘select * from T…’ pour toutes les tables commençant par T @NomDuScript Exécute un script PL/SQL 2.3 Via un shell La ligne de commande C:\> SET ORACLE_SID = ORCL Positionner la valeur de l’instance par défaut C:\>sqlplus system/password Ouvre SQLPlus en ligne de commande ; dépend de la valeur d’ORACLE_SID SQL> CONNECT system/password@instance Changer d’instance, se fait dans sqlplus SQL> CONNECT sys/password AS SYSDBA; Se connecter en tant que sys DEHECQ Olivier – http://aide.informatique1.fr 8 Groupe ora_dba : groupe Windows ayant le droit de SYSDBA (Administrateur en fait partie) SQL> CONNECT / AS SYSDBA Permet de se connecter avec un compte membre de oradba (groupe Windows) C:\> SQLPLUS /NOLOG Permet de se connecter à l’instance sans être connecté à l ‘instance SQL> SET SQLPROMPT "PROD> " PROD> Permet de changer le prompt 2.4 Grid : console d’administration Web (p76) http://localhost:1158/em/ Service : OracleDBConsole%instance% un par instance EMCTL : programme de gestion des services C:\> SET ORACLE_SID = ORCL C:\> EMCTL stop dbconsole Permet d’arrêter le service OracleDBConsole Sur la page d’accueil d’Entreprise Manager, on peut voir les propriétés principales, arrêter l’instance, etc. Onglet Administration : la plupart des paramètres, les objets de la BD, les utilisateurs (droits, etc.). On peut toujours afficher le code SQL Administration > Configuration de la BD > Tous les paramètres d’initialisation Les paramètres d’init.ora Administration > Objets de base de données > Tables Afficher les tables de scott : schéma = SCOTT SELECT * FROM SCOTT.EMPL 2.5 Accéder à la table EMPL du schéma SCOTT Alertes et traces (p87) C:\oracle\production\10.2.0\admin\NomDeLinstance Alert_orcl.log xxx.trc 2.6 fichier d’alertes fichiers de traces Le dictionnaire de données (p30) : Contient la liste des tables systèmes, les utilisateurs, leurs privilèges et rôles, les objets, les contraintes, les paramètres, les ressources physiques allouées à la base. DICT SELECT TABLE_NAME FROM DICT WHERE TABLE = TABLE_NAMES; Créé au moment de la création de la base, et mis à jour au fur et à mesure. C’est le fichier system.dbf qui contient le dictionnaire. Les champs des tables peuvent être en majuscules ou minuscules. Les vues statiques : Informations issues de tables. USER_xxxx ALL_xxx DBA_xxx liste des objets de l’utilisateur qui est connecté tous les objets auxquels l’utilisateur connecté a accès informations sur les objets de la BD (accessible à DBA) DEHECQ Olivier – http://aide.informatique1.fr 9 liste des utilisateurs SELECT * FROM ALL_USERS; Les vues dynamiques : Informations issues de fichiers de contrôles. Ne sont accessibles qu’au DBA, commencent par V% et donnent des infos sur l’état actuel de la Base de données. DESC V%DATABASE; SELECT DBID, NAME FROM V%DATABASE; donne des infos sur la BD à laquelle on est connecté base à laquelle on est connecté DEHECQ Olivier – http://aide.informatique1.fr 10 3 Création d’une base de données (assistant) 3.1.1 Les étapes Oracle > Outils de configuration ... > Assistant configuration d’une base de données Créer une base de données Choisir le modèle Ajouter le nom (nom de BD limité à 8 caractères) Configuration mail, sauvegarde planifiée (sera fait plus tard) Définir les mots de passe pour SYS et SYSTEM Sélection du système de fichiers (système de fichiers classique par défaut) Emplacement des fichiers Définition de la corbeille (emplacement et taille), et activation ou non de l’archivage (archive log) Schéma, scripts qui s’exécuteront à la fin de la création de la base Paramétrages (valeurs standards ok) Récapitulatif : Trois fichiers de contrôle, Fichiers de données : system.dbf et sysaux.dbf pour l’administration, user.dbf et temp.dbf pour l’utilisateur Groupes de fichiers de journaux : 3 groupes, 1 fichier par groupe (valeurs par défaut) Créer la base ; terminer ; ok. 3.1.2 Implications Nouvelle adresse de Database Control dans le menu démarrer Cliquer dessus Nouveaux services : OracleDBConsoleTest + OracleEngine + JobScheduler ORACLE_SID est modifié pour correspondre à la base nouvellement installée (ici Test) 3.1.3 Programmes SqlPlus en ligne de commande : C:\> Set oracle_sid = orcl C:\> sqlplus system/password SQL> SELECT name FROM v$database; SQL> CONNECT system/password@test Arborescence: Fichier de paramétrages initiaux de la base « BASE » : %Oracle_Home%\database\initBASE.ora DEHECQ Olivier – http://aide.informatique1.fr 11 4 Le listener (p60) Permet à 2 machines de communiquer : Un serveur peut écouter un serveur Un serveur peut écouter un client OracleNet doit être installé et configuré sur le client ET sur le serveur. Principe de fonctionnement 4.1.1 Configuration Pour configurer le listener (coté serveur) : listener.ora (à la main) Assistant graphique NetManager (Oracle > Outils de configuration >Net Manager) Un fichier listener.ora par serveur. Le listener par défaut s’appelle ‘listener’ Emplacement du listener : %Oracle_Home%\NETWORK\ADMIN\listener.ora Fichier de configuration du listener : SID_LIST_LISTENER = sid_list_nom_du_listener (informations du service listener) (SID_LIST = (SID_DESC = descripteur d’ecoute 1 (SID_NAME = PLSExtProc) peut écouter sur toutes les bases (ORACLE_HOME = C:\oracle\product\10.2.0\db_1)(PROGRAM = extproc)) (SID_DESC = descripteur d’écoute 2 (GLOBAL_DBNAME = INSTANCE1)(SID_NAME = MABASE1)) ) LISTENER = nom_du_listener (ports d’écoute du listener) (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) extproc est utilisé par pl/sql (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521)) infos d’écoute TCP (ADDRESS = (PROTOCOL = IPC)(KEY = MABASE1)) écoute pour mabase1 ) ) 4.1.2 Utilitaire lsnrctl C:\> lsnrctl start|stop <listener> listener est le nom du service listener à démarrer | arrêter Arrêt du listener DEHECQ Olivier – http://aide.informatique1.fr 12 4.1.3 Configuration d’un nouveau listener avec Oracle Net Configuration d’un processus d’écoute Ajouter Nom : LISTENER2 Protocole sélectionné : TCP Port utilisé : 1522 Cependant, à l’heure actuelle, ce listener est incapable de communiquer avec une instance Ajouter une base de données au listener2 : Dans NetManager, sur LISTENER2, « Service de base de données » Ajouter le SID de la base de données : Test Puis Menu du haut > Fichier > Enregistrer la configuration réseau Le fichier listener.ora a été mis à jour Le listenerLISTENER peut écouter n’importe quelle base de données. SID_LIST_LISTENER = sid_list_nom_du_listener (informations du service listener) (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) peut écouter sur toutes les bases (ORACLE_HOME = C:\oracle\product\10.2.0\db_1)(PROGRAM = extproc)) ) SID_LIST_LISTENER2 = (SID_LIST = (SID_DESC = descripteur d’écoute 2 : que la base mabase1 (GLOBAL_DBNAME = INSTANCE1)(SID_NAME = MABASE1)) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = MABASE1)) ) ) LISTENER2 = listener2 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1522)) infos d’écoute TCP ) LISTENER2 est ajouté dans listener.ora DEHECQ Olivier – http://aide.informatique1.fr 13 4.2 Configuration du client p66 %ORACLE_HOME%\NETWORK\ADMIN\tnsnames.ora : fichier de config, présent que sur le client. ALIAS_TCP = alias auquel on se connecte (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = INSTANCE) nom de l’instance ) ) tnsnames.ora @IP et port Sur le client on fait : CONNECT login/mdp@alias 4.2.1 Modification de tnsnames.ora Le but est de pouvoir connecter la base MABASE1 sur le port 1522. TEST = alias auquel on se connecte (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1522)) ) (CONNECT_DATA = (SERVICE_NAME = INSTANCE1) nom de l’instance ) ) On modifie le tnsnames.ora 4.2.2 @IP et port Méthode qui fonctionne (p60-71) 1. 2. 3. 4. Créer le listener avec Net Manager Créer une BD, lui configurer un listener Net Manager, ajouter la BD au listener créé Configurer Tnsnames.ora et listener.ora DEHECQ Olivier – http://aide.informatique1.fr 14 5 Les statuts d’une base de données (p90) On ne démarre pas de BD, mais l’instance La base de données peut prendre plusieurs états intermédiaires : Montée en mémoire mais fermée Montée en mémoire et ouverte (accessible) Les états : NOMOUNT : BD pas montée, instance démarrée MOUNT : BD montée, instance démarrée OPEN : BD ouverte, démarrée, instance démarrée Vues relatives à l’instance : V$instance, v$sga, v$option, etc. Vues relatives à la BD : v$database Montage BD : utilisation du paramètre control_files du fichier d’init pour localiser les fichiers et les ouvrir (sans les vérifier). 5.1 Démarrage STARTUP : démarrer l’instance SQL> STARTUP [NOMOUNT|MOUNT nombdd |OPEN nombdd] [RESTRICT] seuls les DBA peuvent se connecter (si définir un fichier de paramètres autre que l’initBASE.ora [PFILE] startup BD OPEN) = startup open Pour modifier un niveau de disponibilité d’une BDD : ALTER DATABASE nombdd MOUNT|NOMOUNT|OPEN La base passé par les états nomount puis mount puis open lors de son ouverture quand est est down 5.2 Arrêt (p96) Fermer la base, démonter la base, arrêter l’instance SHUTDOWN [NORMAL|IMMEDIATE|TRANSACTIONNAL|ABORT] Normal dès que les utilisateurs se déconnectent, Immediate immédiat (rollback effectué avant) Transactionnal dès Abort arrêt de l’instance que la transaction est finie, arrêt de l’instance immédiat (pas de rollback effectué, pour une restauration seulement) Il faut être connecté en SYS AS SYSDBA pour effectuer les opération d’arrêt / démarrage 5.3 Accéder à l’instance même arrêtée C:\> sqlplus/nolog ouvre SQLplus sans se connecter ou C:\> sqlplus sys AS SYSDBA connecté à l’instance non démarrée DEHECQ Olivier – http://aide.informatique1.fr 15 5.4 Lancer un script au démarrage Script d’arrêt de base : Dans c:\scripts\, créer un fichier texte ‘arret.sql’ : SHUTOWN IMMEDIATE PAUSE Dans c:\scripts\, créer un fichier texte ‘arret.cmd’ : SET ORACLE_SID = INSTP SQLPLUS SYS/oracle AS SYSDBA @c:\scripts\arret.sql On n’a plus qu’à lancer c:\scripts\arret.bat pour arrêter l’instance INSTP Script de démarrage de base : Dans c:\scripts\, créer un fichier texte ‘demarrage.sql’ : STARTUP OPEN INSTP PAUSE Dans c:\scripts\, créer un fichier texte ‘demarrage.cmd’ SET ORACLE_SID = INSTP SQLPLUS SYS/oracle AS SYSDBA @c:\scripts\demarrage.sql On n’a plus qu’à lancer c:\scripts\demarrage.bat pour démarrer l’instance INSTP 5.4.1 Chasser les erreurs En cas d’erreur ORA-12560 : enlever les espaces dans SET ORACLE_SID=INSTP DESC V$INSTANCE; SELECT STATUS FROM V$INSTANCE; SELECT OPEN_MODE FROM V$DATABASE 5.5 lister les infos affichable de l’instance même lorsque la base est démontée seulement lorsque la DB est ouverte, RO/RW .. Gérer le service de l’instance (p101) Service de l’instance : gérer > services C:\> ORADIM –SHUTDOWN –SID INSTP -SHUTMODE IMMEDIATE C:\> ORADIM –STARTUP –SID INSTP arrêter l’instance instp démarrer l’instance instp Tout est loggé dans les fichiers d’alertes et de traces (p87) 5.6 Faire du ménage dans les BDD et les listeners Démarrer > Oracle > Outils de config et de migration > assistant création de BD Supprimer les bases de données (autres que ORCL) Démarrer > Oracle > Outils de config et de migration > Net Manager Supprimer les listeners (autres que LISTENER) DEHECQ Olivier – http://aide.informatique1.fr 16 6 La gestion de l’instance (p146) 6.1 Gestion des paramètres d’initialisation Deux types de paramètres : Paramètres dynamiques : peuvent être modifiés quand l’instance fonctionne Paramètres statiques : ne peuvent pas être modifiés quand l’instance est démarrée. Il faut donc modifier le paramètre dans le fichier et relancer l’instance. Les paramètres sont visibles dans la vue V$PARAMETER 6.2 Modification des paramètres dynamiques, dans SQLPLUS Au niveau de la session : ALTER SESSION SET paramètre=valeur Au niveau du système : ALTER SYSTEM SET paramètre=valeur [DEFERRED][SCOPE=MEMORY|SPFILE|BOTH] Deferred : pour les prochaines sessions Scope=memory : Scope=spfile : Exemple: modifié pour la session actuelle modifié dans le fichier de paramètres Modification d’un paramètre de la mémoire ALTER SYSTEM SET SGA_TARGET = 400M SCOPE = SPFILE; 6.2.1 Le fichier init.ora Le fichier %ORACLE_HOME%\database\initBASE.ora contient les paramètres de l’instance Ce fichier va chercher ses informations dans %ORACLE_HOME%\dbs\initBASE.ora Ne pas modifier le fichier %ORACLE_HOME%\dbs\init.ora à la main ! Ces paramètres sont aussi accessibles via : Instance démarrée : OEM(GRID) > Administration > Tous les paramètres d’initialisation Dans le fichier init.ora : orcl.paramètre *.paramètres modifie les paramètres de cette base dans l’instance modifie les paramètres de toutes les bases dans cette instance DEHECQ Olivier – http://aide.informatique1.fr 17 6.2.2 Pfile et Spfile (p90) SPFILE (fichier initialisation) utilise le fichier PFILE (fichier de paramètres) Seuls les SYSDBA ou SYSOPER peuvent créer un fichier PFILE. Créer un PFILE à partir du SPFILE (p119) : SQL> CREATE PFILE = 'c:\initorcl.ora' FROM SPFILE; DEHECQ Olivier – http://aide.informatique1.fr 18 7 Gestion des fichiers de contrôle et de journalisation On ne travaille pas directement sur les Data Files, on travaille sur les tablespaces (organisation logique). 7.1 La gestion des fichiers de contrôle (p158) Une BD est toujours constituée au moins d’un fichier de contrôle. Il est conseillé d’en avoir plusieurs. Utilisé pour connaitre l’emplacement des autres fichiers. Il est possible de rajouter des fichiers de contrôle dans le fichier init.ora Ils contiennent un numéro de séquence utilisé pour vérifier la cohérence de la BD. 7.2 Les fichiers de journalisation p (160) Ils contiennent l’historique des modifications (DML) des données apportées à la BD. Servent à restaurer en cas d’erreur serveur ou utilisateur. Ils sont organisés en groupes. Il y a au moins 2 groupes de fichiers, contenant au moins un fichier (membre) chacun. Ecrit dans les groupes les uns après les autres, quand le tout a été écrit, le 1er fichier est de nouveau écrasé. Les membres d’un même groupe sont écrits en miroir (ajoute de la sécurité). On est donc limité au niveau du retour arrière. Dans ce sens, on crée donc un 3 e groupe qu’on rajoute après. La recommandation Oracle est que le temps de rotation soit de 20 à 30 minutes. On rajoute aussi des fichiers au sein des groupes. DEHECQ Olivier – http://aide.informatique1.fr 19 7.3 Ajouter un fichier de contrôle L’objectif est de créer un fichier de contrôle sur un autre disque. 7.3.1 Avec SQL PLUS C:\> SET ORACLE_SID=ORCL C:\> SQLPLUS SYS AS SYSDBA SQL> SELECT name FROM V$CONTROLFILE; -- liste des 3 fichiers de contrôle SQL> CONNECT SYS AS SYSDBA SQL> alter system set control_files = 'C:\oracle\product\10.2.0\oradata\ORCL\control01.ctl', 'C:\oracle\product\10.2.0\oradata\ORCL\control02.ctl', 'C:\oracle\product\10.2.0\oradata\ORCL\control03.ctl', 'D:\oracle\control04.ctl' scope=spfile; SQL> shutdown immediate -- arrêt de l’instance SQL> HOST COPY C:\oracle\product\10.2.0\oradata\ORCL\control01.ctl D:\oracle\control04.ctl; SQL> startup -- démarrage de la base SQL> SELECT name FROM v$controlfile; -- liste les 4 fichiers de contrôle Ne fonctionne que si on a démarré en utilisant un SPFILE DEHECQ Olivier – http://aide.informatique1.fr 20 7.4 Gérer les groupes de fichiers de journalisation 7.4.1 Récupérer les informations en interface web Utilisateur SYS en SYSDBA Administration > Stockage > Groupes de fichiers de journalisation Le groupe qui est utilisé a le statut « CURRENT » On peut visualiser le contenu de chaque groupe 7.4.2 Modifier les paramètres avec SQLPlus SQL> DESC V$LOG ; SQL> SELECT * FROM V$LOG ; Le groupe utilisé actuellement a le statut “CURRENT” SQL> SELECT * FROM V$LOGFILE ; Informations sur les membres de tous les groupes Ajout d'un fichier de journalisation à un groupe (augmente la sécurité du groupe) : SQL> Alter database add logfile member 'C:\oracle\product\10.2.0\oradata\ORCL\log12.log' To Group 1; N’est possible que si le groupe est inactif (« INACTIVE ») Ajout d'un groupe de fichiers de journalisation : Augmente le temps de rotation des journaux. La taille est de 50Mo SQL> Alter databaseaddlogfile group 4 'C:\oracle\product\10.2.0\oradata\ORCL\log4.log' size 50M; Forcer le passage d'un groupe à un autre : SQL> alter system switch logfile; Attendre que le groupe qui était « current » avant passé en inactive. Supprimer un fichier d'un groupe : Le groupe doit être inactif (select * fromV$log) SQL >alter database drop logfilemember 'C:\oracle\product\10.2.0\oradata\ORCL\log12.log' Il faut ensuite le supprimer physiquement. Supprimer un groupe : Le groupe doit être inactif (select * fromV$log) SQL> alter database drop logfile group 4 Déplacer un fichier de journalisation : Le fichier doit appartenir aux groupes de journalisation SQL> shutdownimmediate Arrêt de la base SQL> host move C:\oracle\product\10.2.0\oradata\ORCL\log4.log C:\log\log4.log Déplacement du fichier SQL>startup mount Monter la base, sans l’ouvrir SQL> alter database rename file 'C:\oracle\product\10.2.0\oradata\ORCL\log4.log' TO 'C:\log\log4.log'; Modification de l'emplacement dans les fichiers de contrôle: DEHECQ Olivier – http://aide.informatique1.fr 21 SQL>alter database open Ouvrir la base NB: pour supprimer un fichier de journalisation il est possible de devoir préalablement effectuer un COMMIT pour valider le changement de groupe Vérifier le Numéro SCN en cours : SQL>select * from V$LOG_HISTORY la colonne FIRST_CHANGE correspond au 1er Numéro SCN du group la colonne NEXT_CHANGE correspond au plus grand Numéro SCN du group DEHECQ Olivier – http://aide.informatique1.fr 22 8 Gestion des tablespaces et des fichiers de contrôle (p171) Les objets de la base de données sont stockés (logiquement) au sein de tablespace On définit des tablespaces différents pour les utilisateurs, de façon à ce que leurs objets soient stockés dans des fichiers logiques différents. Quand on crée un tablespace, on peut lui associer un ou plusieurs fichiers. 5 types de tablespaces qui ont été créés en même temps que la création de la BD : SYSTEM : (obligatoire) stocke le dictionnaire de données (contient DICT) SYSAUX : (obligatoire) enregistre les objets associés aux schémas TEMP : swap de la PGA UNDO : il sert aux retours arrière (ROLLBACK, FLASHBACK, RECOVER notamment) USERS : contient les données utilisateurs Les tablespaces peuvent être du type : BIGFILE : un seul fichier de données SMALLFILE : plusieurs fichiers de données (sur plusieurs disques c’est mieux) Le tablespace SYSTEM doit toujours être ONLINE Conseil :ajouter un tablespace pour les tables + ajouter un tablespace pour les index Objectif : granularité (sauvegarde, stockage, disponibilité, etc.) 8.1 Tablespaces permanents SQL> CREATE [BIGFILE|SMALLFILE] TABLESPACE nom DATAFILE specifications; Spécifications : SIZE valeur [K|M|G|T] AUTOEXTEND [ON|OFF] NEXT valeur [K|M|G|T] MAXSIZE valeur [K|M|G|T] COMPRESS|NOCOMPRESS FLASHBACK BLOCKSIZE Taille des blocs : Taille du fichier Peut grossir ou non Pas d’incrémentation Taille maxi compression auto ou non participe ou non aux opérations de FLASHBACK DATABASE Taille des blocs (plus les blocs sont gros, moins il y a de processus d’écriture) Sous Windows : 2/4/8/16 Ko Sous Linux : 2/4/8/16/32 Ko Creation d’un tablespace : SQL> CREATE TABLESPACE Toto DATAFILE 'C:\oracle\products\10.2.0\oradata\orcl\toto.dbf' SIZE 100M; DEHECQ Olivier – http://aide.informatique1.fr 23 SQL> SELECT * FROM V$TABLESPACE; 8.2 Tablespaces non permanents CREATE TEMPORARY TABLESPACE … CREATE UNDO TABLESPACE … créer un tablespace temporaire créer un tablespace d’annulation On ne peut faire des recover (restauration à une date/heure antérieure) sur une base de données que si : Le mode ArchiveLog est activé Le tablespace d’annulation a été défini DEHECQ Olivier – http://aide.informatique1.fr 24 8.3 TP - Configuration et Tablespaces 8.3.1 Modifier et vérifier la prise en compte de paramètres depuis SQLPlus Créer le PFILE (éditable) correspondant au SPFILE (paramètres) de l’instance en cours : SQL> CREATE PFILE='c:\initBASE.ora' FROM SPFILE; Ouvrir le fichier c:\initBASE.ora avec le WordPad … *.utl_file_dir=’C:\’ *.shared_servers=10 Pas de retour chariot, sauvegarder SQL> SHUTDOWN IMMEDIATE SQL> STARTUP PFILE='c:\initorcl.ora' Démarre en prenant en compte le PFILE SQL> SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME=’utl_file_dir’ OR NAME=’SHARED_SERVERS; Affiche les valeurs des paramètres SQL> CREATE SPFILE FROM PFILE='c:\initorcl.ora'; Mettre les données du PFILE dans le fichier de configuration par défaut 8.3.2 Modifier les paramètres de connexion depuis Net Manager ou TNSNames .ora DEDIE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.100.6)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = INSTANCE1) ) ) PARTAGE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.100.6)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = SHARED) (SERVICE_NAME = INSTANCE1) ) ) 8.3.3 Les Tablespaces Avec SQLPlus SQL> CREATE BIGFILE TABLESPACE TS_SQL DATAFILE 'C:\oracle\product\10.2.0\oradata\orcl\TS_SQL.dbf’ SIZE 10M Créer un tablespace de taille fixe de 10Mo SQL> CREATE SMALLFILE TABLESPACE TS_SQL DATAFILE 'C:\oracle\product\10.2.0\oradata\orcl\TS_SQL.dbf’ SIZE 2M AUTOEXTEND Avec Enterprise Manager (interface web) Administration > Espace disque logique Créer Nom : TS_STORAGE AJOUTER Nom du fichier : ts_storage1.dbf, fixe 5Mo CONTINUER AJOUTER Nom : Ts_storage2.dbf, 2Mo extension automatique incrément 2Mo, illimité OK Administration > Espace disque logique Créer Nom : TS_LOCAL, géré localement AJOUTER DEHECQ Olivier – http://aide.informatique1.fr Page 25 Nom du fichier : ts_local.dbf, fixe 5Mo OK La taille des blocs : SQL> ALTER SYSTEM SET db_16k_cache_size=16384 SCOPE=BOTH; Ajoute la possibilité de créer des block de 16ko SQL> CREATE TABLESPACE TS_16K 'C:\oracle\product\10.2.0\oradata\orcl\ts_16k.dbf’ SIZE 5M BLOCKSIZE=16k; Trouver les Tablespaces correspondants aux Data Files : SQL> select f.ts#,f.name,t.name from v$datafile f inner join v$tablespace t on t.ts#=f.ts# where t.name=’USERS’; … SQL> alter DATABASE DATAFILE 'C:\oracle\product\10.2.0\oradata\orcl\USERS01.dbf' AUTOEXTEND ON; DEHECQ Olivier – http://aide.informatique1.fr 26 9 Flashback (p327+) 9.1 De données (p328) On peut faire un flashback des données en modifiant la table de la façon suivante : SQL> ALTER TABLE matable ENABLE ROW MOVEMENT On peut ensuite revenir en arrière après un DELETE * FROM matable; puis COMMIT; en faisant SQL> FLASHBACK TABLE matable TO TIMESTAMP SYSTIMESTAMP – INTERVAL ‘5’ MINUTE; Il faut que le flashback soit activé sur le tablespace qui contient ‘matable’ (activé par défaut) 9.2 De table (p330) On peut faire un flashback de tables en modifiant le système de la façon suivante : SQL> ALTER SYSTEM SET RECYCLEBIN=ON SCOPE=BOTH On peut ensuite revenir en arrière après un DROP TABLE matable; en faisant SQL> FLASHBACK TABLE matable TO BEFORE DROP; Forcer la suppression définitive : SQL> DROPTABLE matable PURGE; 9.3 De base de données (p333) N’est possible qu’en mode ARCHIVELOG c’est une restauration On peut ensuite faire un RECOVER de la base de données en revenant à une date/heure précises Pour activer le flashback de BDD, à partir d’un shutdown : SQL> STARTUP NOMOUT L’instance seulement doit être démarrée SQL> SQL> SQL> SQL> ALTER ALTER ALTER ALTER DATABASE DATABASE DATABASE DATABASE FLASHBACK ON; MOUNT; ARCHIVELOG; OPEN; Pour effectuer un flashback : à une date antérieure SQL> RECOVER DATABASE UNTIL TIME 01-JAN-2001:04:32:00 Recover complet de la base de données : SQL> RECOVER DATABASE Recover de tablespaces particuliers : SQL> RECOVER TABLESPACE ts_one, ts_two Recover de datafiles particuliers : SQL> RECOVER DATAFILE 'data1.db' DEHECQ Olivier – http://aide.informatique1.fr Page 27 10 Créer une base de données manuellement Objectif : créer une base « ENI » 10.1 Créer l’arborescence : Dans .\oradata\ créer un répertoire « eni » Dans .\admin\ créer un répertoire « eni » et y placer les mêmes répertoires que dans .\admin\orcl\ (les répertoires doivent être vidés) Créer un fichier pfile de la configuration actuelle : SQL> CREATE PFILE=’c:\oracle\product\10.2.0\db_1\database\initENI.ora’ FROM SPFILE; 10.2 Modifier le fichier initENI.ora : 10.3 Remplacer « orcl » par « eni » (si on a remplacé orcl par eni au niveau des arborescences). ( !) le fichier d’undo doit avoir la même valeur que le paramètre undo_tablespace Créer le service associé à l’instance (p117) C:\> SET ORACLE_SID=ENI C:\> ORADIM -NEW -SID ENI -SRVC ORACLESERVICEENI -SYSPWD PASSWORD -STARTMODE AUTO -SRVCSTART SYSTEM -PFILE C:\oracle\product\10.2.0\db_1\database\initENI.ora -SHUTMODE IMMEDIATE Le service OracleServiceENI a été ajouté dans le gestionnaire de service. Si erreur lors de la création : Suppression du service base avec: C:\> oradim -delete -SID ENI Démarrage de l'instance : C:\> sqlplus /nolog SQL> connect / as sysdba SQL> startup nomount Si le fichier initENI.ora est dans C:\oracle\product\10.2.0\db_1\database, OU SINON SQL> startup nomount pfile=C:\ENI\initENI.ora On peut maintenant se connecter à une instance inactive C:\> SQLPLUS / as sysdba Utilise le fait que l’utilisateur soit membre du groupe « Admin Dba » DEHECQ Olivier – http://aide.informatique1.fr 28 10.4 Créer la base de données (!) Le fichier initENI.ora doit être présent SQL> STARTUP NOMOUNT SQL> create database ENI user sys identified by <password> user system identified by <password> controlfile reuse maxdatafiles 32 maxinstances 1 character set WE8ISO8859p15 national character set al16utf16 logfile group 1 'C:\oracle\product\10.2.0\oradata\ENI\log1.log' size 50M, group 2 'C:\oracle\product\10.2.0\oradata\ENI\log2.log' size 50M, group 3 'C:\oracle\product\10.2.0\oradata\ENI\log3.log' size 50M maxlogfiles 8 maxlogmembers 2 noarchivelog extent management local datafile 'C:\oracle\product\10.2.0\oradata\ENI\system_01.dbf' size 1 G reuse autoextend on maxsize 2 G sysaux datafile 'C:\oracle\product\10.2.0\oradata\ENI\sysaux_01.dbf' size 256 M reuse autoextend on maxsize 512 M default tablespace USERS datafile 'C:\oracle\product\10.2.0\oradata\ENI\users_01.dbf' size 256 M reuse autoextend on maxsize 1 G extent management local autoallocate default temporary tablespace TEMP tempfile 'C:\oracle\product\10.2.0\oradata\ENI\temp_01.dbf' size 256 M reuseautoextend on maxsize 1 G undo tablespace UNDOTBS1 datafile 'C:\oracle\product\10.2.0\oradata\ENI\undotbs_01.dbf' size 256 M reuse autoextend on maxsize 1 G ; Les fichiers se créent 10.5 Création des vues du dictionnaire de données SQL> connect sys/password as sysdba SQL> @C:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\CATALOG.SQL C:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\ est l’emplacement des scripts SQL prévus par Oracle 10.6 Package PL/SQL d'administration SQL> @C:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\CATPROC.SQL 10.7 Utilisation de SQLPLUS sans message d'erreur SQL> @C:\oracle\product\10.2.0\db_1\sqlplus\admin\PUPBLD.SQL 10.8 Transformation du PFILE en SPFILE C:\> set ORACLE_SID=ENI C:\> sqlplus / as sysdba SQL> create spfile from pfile='C:\oracle\product\10.2.0\db_1\database\initENI.ora'; Le fichier SPFILEENI.ORA est dans C:\oracle\product\10.2.0\db_1\database, il n’y a donc pas besoin d’indiquer le chemin du SPFILE dans initENI.ora DEHECQ Olivier – http://aide.informatique1.fr 29 10.9 Paramétrage du listener Modifier le fichier listener.ora SID_LIST_LISTENER2 = (SID_LIST = (SID_DESC = (GLOBAL_NAME = ENI) (SID_NAME = ENI) ) ) LISTENER2 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.100.6)(PORT = 1521)) ) ) Vérifier que le service a bien été créé. Si besoin, exécuter la commande : C:\> lsnrctl stop LISTENER2 C:\> lsnrctl start LISTENER2 Modifier le port dans listener.ora et dans tnsnames.ora 10.10 Paramétrage du client Modifier le fichier listener.ora : (ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.100.6)(PORT = 1524)) ) ) Modifier le fichier tnsnames.ora : ENI = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.100.6)(PORT = 1524))) (CONNECT_DATA = (SERVICE_NAME = ENI)) ) Arrêter puis relancer le listener avec la commande lsnrctl, et vérifier que le service est bien lancé (console gestion des services Windows) Se connecter avec : C:\> SET ORACLE_SID=ENI C:\> SQLPLUS system/password@ENI Connecté En cas de problème de connexion, essayer avec le mot de passe « oracle » 10.11 Sécurisation du listener C:\> LSNRCTL LISTENER C:\> set password C:\> save config C:\> exit DEHECQ Olivier – http://aide.informatique1.fr 30 10.12 Configuration de Database Control (Administration Web) Database Control = console d'administration web C:\> set ORACLE_SID=ENI En 10G r1: SQL> emca En 10G r2 / 11G: SQL> emca –configdbcontroldb -repos create 10.13 Correction des problèmes : En cas d'échec de la création du repository : Connectez-vous en SYS ou SYSTEM sous SQLPLUS C:\> sqlplus /nolog SQL> connect / as sysdba; SQL> drop user sysman cascade; SQL> drop user mgmt_view cascade; SQL> drop role mgmt_user; SQL> drop public synonym mgmt_target_blackouts; SQL> drop public synonym SETEMVIEWUSERCONTEXT; SQL> Exit Puis recréer la base (10.4) En cas de problème d'inscription mot de passe DBSNMP : Mettre le mot de passe entre " " En cas d'erreur provenant d'un manque de ressource : Vérifier les paramètres suivants dans le Pfile : *.job_queue_process = 10 *.shared_pool_size > 80M En cas d'erreur d'instance ou de base non démarrées sur la console web Arrêter/démarrer le service Windowsdbconsole : C:\> set oracle_sid=ENI C:\> emctl start dbconsole C:\> emctl stop dbconsole C:\> emctl status dbconsole Permet d'obtenir le numéro du port de la console web DEHECQ Olivier – http://aide.informatique1.fr 31 11 Gestion des tables et des index p243 11.1 Vue d’ensemble Quand on fait un create table, on va dans le tablespace par défaut de l’utilisateur (par défaut, c’est la tablespace de la base de données). On peut diviser les données sur plusieurs disques, et donc diviser les tables et les index. Il est conseillé d’avoir 1 tablespace pour les tables, et 1 tablespace pour les index. Les tables et les index sont des segments. Le stockage du contenu des tables est organisé en extensions (extend). Il existe 2 types d’index : - 11.2 Index B-TREE : à 2 colonnes. Une pour les index, dans l’ordre ; l’autre pour la valeur (« dupond » par exemple) Index BITMAP : la valeur (« dupont » par exemple), puis à la suite les enregistrements pour lesquels on retrouve cette valeur Gestion des tables PCTFREE et PCTUSED Il faut donc supprimer ou compresser les données pour pouvoir écrire de nouveau. DEHECQ Olivier – http://aide.informatique1.fr 32 Quand on créé une table, on peut spécifier le tablespace de destination. (p 247) CREATE TABLE nom (colonnes) [TABLESPACE nomTablespace] [PCTFREE valeur] [PCTUSED valeur] [NOCOMPRESS|COMPRESS] 11.2.1 La vue des informations de la table DESC DBA_TABLES (p259) : valeur du PCTFREE, du tablespace … TABLE_NAME, OWNER, TABLESPACE_NAME, PCT_FREE, BLOCKS (nombre de bloc sous la HWM), NUM_ROWS (et page 252 pour analyser les données). 1.1.1 HWM (High Water Mark) La high water mark HWM : emplacement du bloc le plus loin qui ai contenu des données. Oracle va chercher des infos du premier bloc jusqu’au HWM, même lorsque des données ont été supprimées. Du coup le mieux c de compresser les données pour réajuster le HWM. 11.2.2 Informations sur une table créée Lancer une analyse de la table voulue SQL> ANALYZE TABLE table_test COMPUTE STATISTICS; Récupérer les informations de l’analyse SQL> SELECT tablespace_name, pct_free, num_rows, blocks from DBA_TABLES where table_name LIKE 'table_%'; DEHECQ Olivier – http://aide.informatique1.fr 33 11.3 TP4 - Création de tables (avancé) SQL> CREATE TABLE Table1 (money integer) TABLESPACE TS_SQL PCTFREE 20 PCTUSED 50; SQL> CREATE TABLE Table2 (dinero integer) TABLESPACE TS_LOCAL PCTFREE 20 PCTUSED 50; SQL> ALTER TABLE TABLE1 MOVE TABLESPACE TS_LOCAL; SQL> ALTER TABLE TABLE2 MOVE TABLESPACE TS_SQL; SQL> analyze table TABLE1 compute statistics; SQL> SELECT tablespace_name, pct_free, num_rows, blocks from DBA_TABLES where table_name='TABLE1'; SQL> CREATE TABLE TABLE3 (numero INTEGER, nom CHAR(200), prenom CHAR(200)); Créer un fichier C:\boucle.sql DECLARE vN INTEGER; BEGIN FOR vN IN 1..1000 LOOP insert into TABLE3 (numero) values vN; END LOOP; END; / SQL> @C:\boucle.sql; SQL> COMMIT; SQL> SELECT * FROM TABLE3; SQL> analyze table table3 compute statistics; SQL> select table_name,num_rows,pct_free,blocks, empty_blocks from dba_tables where table_name='TABLE3'; SQL> UPDATE TABLE3 set nom='a', prenom='b'; SQL> analyze table table3 compute statistics; SQL> select table_name,num_rows,pct_free,blocks, empty_blocks from dba_tables where table_name='TABLE3'; Réduire la fragmentation (p257) : SQL> ALTER TABLE TABLE3 MOVE; Réorganise le stockage physique d’une table sans la supprimer Libérer de l’espace au-dessus de la HWM (p255) : SQL> ALTER TABLE TABLE3 DEALLOCATE UNUSED; DEHECQ Olivier – http://aide.informatique1.fr Page 34 12 La gestion des utilisateurs (217) SYS peut créer/modifier/supprimer les utilisateurs SYSTEME a juste un accès en lecture à ces infos, et à toutes les tables. Le tablespace USERS correspond au fichier USERS.DBF (desc dba_data_files) Il n’y a pas nécessairement de correspondance entre le nom du tablespace et celui du datafile. Un nouvel utilisateur, si on ne lui précise pas de tablespace, écrira dans le tablespace par défaut de la BD : USERS. stocké dans USERS.DBF. Sur USERS, le flashback est activé par défaut. Le tablespace par défaut de SYSTEM est SYSTEM. On ne peut pas activer le flashback sur le tablespace SYSTEM !! 12.1 Utilisateurs Créer : CREATE USER <login> IDENTIFIED {BY <password>|EXTERNALLY} [DEFAULT TABLESPACE nom_tablespace] [QUOTAS] {valeur [K|M]} ON tablespace[,...] [ACCOUNT {LOCK|UNLOCK}] [PASSWORD EXPIRE] l’utilisateur doit changer le mot de passe [PROFILE nom] nom du profil EXTERNALLY : identification Windows seulement Il faut ajouter des privilèges pour lui autoriser à se connecter : CREATE SESSION Supprimer un utilisateur : DROP USER <login> [CASCADE] Se connecter : CONNECT scott/tiger Modifier : ALTER USER <login> PARAMETRE VALEUR; Voir les utilisateurs : SELECT * FROM ALL_USERS C:\> SET ORACLE_SID=ORCL C:\> SQLPLUS SYS/oracle AS SYSDBA SQL> CREATE USER Albert IDENTIFIED BY pwd; SQL> DROP USER Albert Modifier : ALTER USER <login> [IDENTIFIED BY <password>|EXTERNALLY] […] Supprimer : DROP USER <login> [CASCADE] 12.2 Les vues importantes ALL_USERS : liste des utilisateurs mais pas beaucoup d’infos DBA_USERS : pour les DBA, pleins d’infos sur les utilisateurs DBA_TS_QUOTAS : quotas des utilisateurs DEHECQ Olivier – http://aide.informatique1.fr Page 35 12.3 Donner des privilèges (p225) Introduction : Privilège système : ordre SQL en général (CREATE, UPDATE, SELECT, INSERT, DELETE …) Privilège objet : accéder à un objet d’un autre utilisateur Chaque ordre SQL a généralement un privilège système associé qui porte le même nom que l’ordre SQL. Par exemple, l’ordre SQL CREATE TABLE possède un privilège système associé CREATE TABLE (donne le droit de créer une table dans son propre schéma). Certains privilèges systèmes reprennent le nom de l’ordre SQL avec le mot clé ANY. Dans ce cas, le privilège système permet d’exécuter l’ordre dans n’importe quel schéma de la base de données. Par exemple, le privilège système CREATE ANY TABLE donne le droit de créer une table dans n’importe quel schéma de la base de données. 1. Créer un utilisateur : SQL> CREATE USER Alfonse IDENTIFIED BY oracle DEFAULT TABLESPACE TS_SQL QUOTA 10M ON USERS; 2. Lui donner le droit de se connecter : SQL> GRANT CREATE SESSION TO Alfonse; Pouvoir donner des privilèges aux autres utilisateurs : Il faut avoir le privilège SYSDBA pour donner des privilèges aux autres utilisateurs Accorder des privilèges Système (p226) : GRANT nom_privilège [,…] TO { nom_utilisateur|PUBLIC } [,…] [WITH ADMIN OPTION]; PUBLIC est un rôle par défaut donné à tous les utilisateurs La clause WITH ADMIN OPTION donne au bénéficiaire le droit de transmettre le privilège système. GRAND ANY PRIVILEGE donne tous les droits (DDL+DML) + le droit de les transmettre Retirer des droits : REVOKE nom_privilege [,…] FROM {nom_utilisateur|PUBLIC} [,…]; SYSOPER : schéma SYSTEME par défaut. Droits d’administration classique mais ne voit pas les schémas des autres utilisateurs (DBA_USERS), peut arrêter l’instance et la base. SYSDBA : peut tout faire Ce sont aussi des noms de privilèges 12.3.1 Privilèges Objets (p227-228) Les droits accordables sur les objets des autres schémas sont : SELECT/INSERT/UPDATE/DELETE/EXECUTE Utiliser un autre schéma que le sien, et synonymes : On doit faire schema.objet : SELECT * FROM Albert.Clients : procédure lourde ! Il peut être interessant d’utiliser les synonymes : cli pour Albert.clients (p230) CREATE PUBLIC SYNONYM Cli FOR Albert.Clients Permet de faire : SELECT * FROM Cli DEHECQ Olivier – http://aide.informatique1.fr 36 Attribuer un privilège objet à un utilisateur (p228) : GRANT {nomPrivilege[(listeColonnes)][,…] | ALL [PRIVILEGES]} ON [nomSchema.]nomObjet TO {nomUtilisateur|PUBLIC} [,…] [WiTH GRANT OPTION]; Révoquer un privilège (p229) : REVOKE {nomPrivilege[(listeColonnes)][,…] | ALL [PRIVILEGES]} ON [nomSchema.]nomObjet FROM {nomUtilisateur|PUBLIC} [,…] 12.4 Connexion Si on ne veut pas avoir à spécifier l’alias TNS dans la chaîne CONNECT, il faut avoir défini la variable ORACLE_SID=MABASE 12.5 CONNECT / : utilise la connexion via le système d’exploitation (utilisation CONNECT login/password : connexion base de données des groupes) Les rôles Créer un rôle (p231) : CREATE ROLE nom [IDENTIFIED {BY motDePasse|EXTERNALLY}|NOT IDENTIFIED] Attribuer des privilèges au rôle : GRANT nomPrivilège [,…] TO nomRole [,…] [WITH ADMIN OPTION] Affecter des utilisateurs au rôle (p232) : GRANT nomRole [,…] TO {nomUtilisateur|PUBLIC|nomRole} [,…] [WITH ADMIN OPTION] 12.6 Utilisation des profils (p221) Utilisé pour limiter les ressources de l’utilisateur : durée de session, ressources allouées, stratégies de mots de passe Profil DEFAULT attribué par défaut aux utilisateurs, pas de limites dessus Pour modifier les profils de tout le monde, on fait des limitations sur DEFAULT Création d’un profil : CREATE PROFILE nom LIMIT … [PASSWORD_VERIFY_FUNCTION nom|NULL|DEFAULT] complexité du mot de passe Modification d’un profil : ALTER PROFILE nom LIMIT […]; p224 DROP PROFILE nom [CASCADE]; p225 Suppression d’un profil : 12.7 Résumé Utilisateur, rôle, objet : Créer, modifier, supprimer : CREATE/ALTER/DROP Privilège, rôle : Affecter, supprimer : SQL> GRANT role_privilege [ON objet] TO utilisateur SQL> REVOKE role_privilege [ON objet] FROM utilisateur DEHECQ Olivier – http://aide.informatique1.fr 37 12.8 TP 5 –Gestion des utilisateurs SQL> CONNECT SYS/oracle AS SYSDBA 12.8.1 Créer les comptes utilisateurs SQL> CREATE USER Marie IDENTIFIED BY password DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK QUOTA UNLIMITED ON USERS; SQL> CREATE USER Jean IDENTIFIED BY password DEFAULT TABLESPACE USERS TEMPORARYTABLESPACE TEMP ACCOUNT UNLOCK QUOTA UNLIMITED ON USERS; SQL> CREATE USER Paul IDENTIFIED BY externe DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK; SQL> CREATE USER Pierre IDENTIFIED BY password DEFAULT TABLESPACE TS_SQL TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCKQUOTA UNLIMITED ON TS_SQL QUOTA UNLIMITED ON USERS; SQL> CREATE USER Karine IDENTIFIED BY password DEFAULT TABLESPACE TS_SQL TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK QUOTA UNLIMITED ON TS_SQL; 12.8.2 Donner le droit de connexion SQL> SQL> SQL> SQL> 12.8.3 GRANT GRANT GRANT GRANT CREATE CREATE CREATE CREATE SESSION SESSION SESSION SESSION TO TO TO TO Marie; Jean; Paul; Karine; Donner les privilèges sur le schéma SCOTT Par les rôles : SQL> CREATE ROLE roleAR12; SQL> GRANT CREATE TABLE, CREATE VIEW TO roleAR12; Permet de connaitre les tables dans le schema scott; SQL> SPOOL c:\requete1.sql SQL> SELECT ‘GRANT SELECT ON SCOTT.’, TABLE_NAME, ‘TO roleAR12;’ FROM DBA_TABLES WHERE OWNER=’SCOTT’; SQL> SPOOL OF; Puis modifier le fichier c:\requete1.sql et l’exécuter SQL> @c:\requete1.sql 12.8.4 Exécuter la fonction de complexité de mots de passe Modifier la fonction .\db_1\RDMBS\ADMIN\utlpwdmg.sql et la renommer en c:\complexite.sql Attention, par défaut, le profil DEFAULT est modifié Attention à la valeur de CREATE OR REPLACE FUNCTION verify_function dans le fichier sql, la modifier SQL> @c:\complexite SQL> CREATE PROFILE profil_od LIMIT SESSIONS_PER_USER 2 IDLE_TIME 3 PASSWORD_VERIFY_FUNCTION verify_function; DEHECQ Olivier – http://aide.informatique1.fr Page 38 12.8.5 Modifier les profils des utilisateurs SQL> SQL> SQL> SQL> SQL> 12.8.6 ALTER ALTER ALTER ALTER ALTER USER USER USER USER USER Marie PROFILE profil_od; Jean PROFILE profil_od; Paul PROFILE profil_od; Pierre PROFILE profil_od; Karine PROFILE profil_od; Accorder le rôle aux utilisateurs SQL> GRANT roleAR12 TO marie, jean, paul, pierre, karine; DEHECQ Olivier – http://aide.informatique1.fr 39 13 Index Liste des vues nom description Reference doc V$DATABASE Infos sur la base ouverte P9, 12, 13 V$SGA Infos sur la SGA P12 V$INSTANCE Infos sur l’instance P12, 13 V$OPTION Infos sur les options P12 V$PARAMETER Valeurs des paramètres de init.ora P14, 19 V$TABLESPACE Infos sur les tablespace P19 V$DATAFILE Infos sur les datafile P19 ALL_USERS Infos sur les utilisateurs (résumé) P8, 28 DBA_USERS Infos sur les utilisateurs (détail) P28, 29 DBA_TS_QUOTAS Infos sur les quotas utilisateurs P28 DBA_TABLES Infos sur les tables P26, 27, 31 ALL_TABLES Infos sur les tables P7 Reference RI P359 DEHECQ Olivier – http://aide.informatique1.fr Page 40