oracle ****** tnsnames.ora ============ définie le nom de connexion à une base exemple : - nom de connexion PRESTO - SID de l'instance PRESTOT sur le serveur localhost port d'écoute 1521 :: # tnsnames.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora # Generated by Oracle configuration tools. PRESTO = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) (CONNECT_DATA = (SID = PRESTOT) ) ) listener.ora ============ définie les ports d'écoute :: LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = SRVPZSQL03.Proplast.fr)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) ) liste des utilisateurs connectés ================================ .. code-block:: sql SELECT username, osuser, machine, schemaname, PROGRAM, status FROM v$session WHERE type = 'USER' info sur la base ================ .. code-block:: sql SELECT instance_name, host_name, version, status, archiver FROM v$instance; liste des tables ================ .. code-block:: sql SELECT table_name FROM dba_tables; deblocage d'un utilisateur ========================== exemple avec le compte system :: >sqlplus /nolog SQL*Plus: Release 10.2.0.4.0 - Production on Lun. Juin 24 16:57:20 2013 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. SQL> conn presto/prestop@PRESTO Connecté SQL> ALTER USER system ACCOUNT UNLOCK; Utilisateur modifié. SQL> commit; Validation effectuée. SQL> disconn pour modifier le mot de passe d'un user :: ALTER USER name_user IDENTIFIED BY motdepasse ; Taille de la base ================= .. code-block:: sql SELECT sum(bytes)/1024/1024 "Tailletbs en MO", tablespace_name FROM dba_data_files GROUP BY tablespace_name Calcul de statistique ===================== .. code-block:: sql exec DBMS_STATS.gather_schema_stats( ownname => 'PRESTO' , cascade => TRUE) Dernière calcul de statistique ============================== .. code-block:: sql SELECT TABLE_NAME, LAST_ANALYZED FROM DBA_TABLES WHERE OWNER='PRESTO' Sauvegarde d'une base oracle ============================ Un exemple très simple de script de sauvegarde à froid des fichiers de données, des redolog, des fichiers de contrôles, et temporary tablespace d’une base de données. Très utile et rapide en terrain inconnu, où les fichiers sont un peu dispersés à droite et à gauche. (Ne pas tester en environnement de Production, mais en test d’abord !!!!) 1 Construction dynamiques des ordres de host copy par interrogations des tables - v$datafile - v$logfile - v$controlfile - v$tempfile 2 Insertion de ces lignes dans un fichier backup.bat dans c:\save 3 Creation backup control files pour re-création des control files si besoin 4 Arrêt de la base 5 Auto exécution de la copie à froid (backup.bat) 6 Redémarrage de la base Lancer ce script directement en mode console sans vous connecter à SQL*PLUS par Copier/Coller. Prenez le soin de changer la chaine de connexion et vérifiez la présence du répertoire C:\cold_backup et C:\save pour ce test. Si vous avez peur du script !! Vous pouvez mettre en commentaire les 4 dernières lignes, il y aura uniquement la construction du fichier .bat dans c:\save sans shutdown immediate etc. :: sqlplus -s "sys/mdp@NomTNS as sysdba" SET pagesize 0 SET linesize 500 SET verify off define folder ='c:\cold_backup' define batch='c:\save\backup.bat' spool &batch; select 'host copy '|| name|| ' &folder' from v$datafile order by 1 ; select 'host copy '|| member || ' &folder' from v$logfile order by 1 ; select 'host copy '|| name || ' &folder' from v$controlfile order by 1 ; select 'host copy '|| name || ' &folder' from v$tempfile order by 1 ; spool off alter database backup controlfile to trace as 'C:\cold_backup\BckCtl.sql' REUSE; shutdown immediate; @&batch; startup; exit; Contenu du fichier C:\save\backup.bat en sortie qui sera exécuté en auto :: host copy C:\ORACLE\PRODUCT\10.2.0\ORADATA\DBTEST\SYSAUX01.DBF c:\cold_backup host copy C:\ORACLE\PRODUCT\10.2.0\ORADATA\DBTEST\SYSTEM01.DBF c:\cold_backup host copy C:\ORACLE\PRODUCT\10.2.0\ORADATA\DBTEST\UNDOTBS01.DBF c:\cold_backup host copy C:\ORACLE\PRODUCT\10.2.0\ORADATA\DBTEST\USERS01.DBF c:\cold_backup host copy C:\ORACLE\PRODUCT\10.2.0\ORADATA\DBTEST\DATA_01.DBF c:\cold_backup host copy C:\ORACLE\PRODUCT\10.2.0\ORADATA\DBTEST\DATA_02.DBF c:\cold_backup host copy C:\ORACLE\PRODUCT\10.2.0\ORADATA\DBTEST\REDO01.LOG c:\cold_backup host copy C:\ORACLE\PRODUCT\10.2.0\ORADATA\DBTEST\REDO02.LOG c:\cold_backup host copy C:\ORACLE\PRODUCT\10.2.0\ORADATA\DBTEST\REDO03.LOG c:\cold_backup host copy C:\ORACLE\PRODUCT\10.2.0\ORADATA\DBTEST\CONTROL01.CTL c:\cold_backup host copy C:\ORACLE\PRODUCT\10.2.0\ORADATA\DBTEST\CONTROL02.CTL c:\cold_backup host copy C:\ORACLE\PRODUCT\10.2.0\ORADATA\DBTEST\CONTROL03.CTL c:\cold_backup host copy C:\ORACLE\PRODUCT\10.2.0\ORADATA\DBTEST\TEMP01.DBF c:\cold_backup Export / import d'une base oracle ================================= Pré-requis pour utiliser DataPump ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Avant de pouvoir utiliser DataPump, vous devez créer une Directory Oracle où vous allez stocker vos exports. Pour ceci, ouvrez une commande SQL*Plus et exécutez cette commande : :: CREATE DIRECTORY exports as '/home/exports/' ; Ici, nous avons créé un répertoire appelé « Exports » qui sera bindé au répertoire système /home/exports . Bien sûr, vous pouvez choisir le nom de répertoire et le répertoire bindé que vous voulez ;-) Ensuite, il vous faudra donner les droits d’écriture et de lecture à l’utilisateur que vous allez utiliser pour faire vos exports/imports sur le répertoire précédemment créé. :: GRANT read,write ON DIRECTORY exports TO scott ; Export ~~~~~~ L’export le plus simple que vous pouvez faire, c’est l’export de toute votre base de données. Pour ceci, vous pouvez lancer cette ligne de commande : :: $ORACLE_HOME/bin/expdp scott/tiger DIRECTORY=exports DUMPFILE=exportfull.dmp FULL=y LOGFILE=exportfull.log Vous remarquerez l’utilisation de notre utilisateur Scott à qui on a donné les droits précédemment sur la directory exports utilisée ci-dessus aussi. Cette commande va créer un dump qui s’appellera exportfull.dmp et un log exportfull.log dans le répertoire /home/exports de votre serveur. Il est possible d'exporter seulement un schéma ou un object :: $ORACLE_HOME/bin/expdp scott/tiger DIRECTORY=exports DUMPFILE=exportschemascott.dmp SCHEMAS=scott :: $ORACLE_HOME/bin/expdp scott/tiger DIRECTORY=exports DUMPFILE=exportschemascott.dmp SCHEMAS=scott,hr,sh Import ~~~~~~ Ce n’est pas le tout d’exporter votre base de données, il vous faudra aussi l’importer Cette fois-ci, au lieu d’utiliser l’exécutable expdp , nous allons utiliser l’exécutable impdp pour Import DataPump. 3 Il s’utilise quasiment de la même façon que expdp. Voici un exemple d’utilisation pour importer toute sa base : :: $ORACLE_HOME/bin/impdp scott/tiger DIRECTORY=exports DUMPFILE=exportfull.dmp FULL=y LOGFILE=exportfull.log il est parfois utile d'ajouter en paramètre :: TABLE_EXISTS_ACTION=REPLACE pour que les tables soient remplacés si elles existent .. attention:: si une séquence existe déjà il faut la mettre à jour Methode complète export avec création d'un utilisateur ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ exemple de méthode complète avec création d'un utilisateur forbkp ayant pour mot de passe forbkp :: > sqlplus system/manager@PRESTO create user forbkp identified by forbkp; grant connect,resource to forbkp; grant exp_full_database to forbkp; grant imp_full_database to forbkp; create directory datapump as 'E:/SVG/SGBD'; grant read, write on directory datapump to forbkp; la sauvegarde :: D:\oracle\product\10.2.0\db_1\BIN\expdp forbkp/forbkp@PRESTO DIRECTORY=datapump DUMPFILE=exportfull.dmp FULL=y LOGFILE=exportfull.log Suppression d'une base ====================== Nous allons supprimer une base et enlever sous windows les services liés :: C:\Documents and Settings\Administrateur>set ORACLE_SID=PRESTODEV C:\Documents and Settings\Administrateur>sqlplus /nolog SQL*Plus: Release 10.2.0.4.0 - Production on Mer. Juil. 17 13:59:50 2013 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. SQL> connect / as sysdba Connecté. SQL> shutdown abort Instance ORACLE arrêtée. SQL> drop database 2 SQL> exit DÚconnectÚ de Oracle Database 10g Release 10.2.0.4.0 - 64bit Production C:\Documents and Settings\Administrateur>sqlplus /nolog SQL*Plus: Release 10.2.0.4.0 - Production on Mer. Juil. 17 14:00:22 2013 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. SQL> connect / as sysdba Connecté à une instance inactive. SQL> disconnect Déconnecté SQL> ^Z C:\Documents and Settings\Administrateur>oradim -delete -sid PRESTODEV Instance supprimée. Etat des tables spaces ====================== :: select a.TABLESPACE_NAME, a.CONTENTS, a.EXTENT_MANAGEMENT, a.ALLOCATION_TYPE, a.SEGMENT_SPACE_MANAGEMENT, a.BIGFILE, a.STATUS, nvl(sum(b.count_files),0) FILES, nvl(sum(b.bytes),0) "SIZE", nvl(sum(b.maxbytes),0) MAX_SIZE, nvl(sum(b.bytes),0)-nvl(sum(c.free_bytes),0) "USED" from DBA_TABLESPACES a, ( select TABLESPACE_NAME, sum(BYTES) bytes, count(*) count_files, sum(greatest(MAXBYTES,BYTES)) maxbytes from DBA_DATA_FILES group by TABLESPACE_NAME union all select TABLESPACE_NAME, sum(BYTES), count(*), sum(greatest(MAXBYTES,BYTES)) maxbytes from DBA_TEMP_FILES group by TABLESPACE_NAME ) b, ( select TABLESPACE_NAME, sum(BYTES) free_bytes from DBA_FREE_SPACE group by TABLESPACE_NAME union all select TABLESPACE_NAME, sum(BYTES_FREE) free_bytes from V$TEMP_SPACE_HEADER group by TABLESPACE_NAME ) c where a.TABLESPACE_NAME = b.TABLESPACE_NAME (+) and a.TABLESPACE_NAME = c.TABLESPACE_NAME (+) group by a.TABLESPACE_NAME, a.CONTENTS, a.EXTENT_MANAGEMENT, a.ALLOCATION_TYPE, a.SEGMENT_SPACE_MANAGEMENT, a.BIGFILE, a.STATUS order by a.TABLESPACE_NAME; TABLESPA CONTENTS EXTENT_MAN ALLOCATIO SEGMEN BIG STATUS FILES SIZE MAX_SIZE USED -------- --------- ---------- --------- ------ --- ------ ----- --------- ---------- --------- SYSAUX PERMANENT LOCAL SYSTEM AUTO NO ONLINE 3 397410304 6442450944 395771904 SYSTEM PERMANENT LOCAL SYSTEM MANUAL NO ONLINE 1 471859200 2147483648 470548480 TEMP TEMPORARY LOCAL UNIFORM MANUAL NO ONLINE 1 20971520 2147483648 17039360 UNDOTBS1 UNDO LOCAL SYSTEM MANUAL NO ONLINE 1 182452224 2147483648 13041664 USERS PERMANENT LOCAL SYSTEM MANUAL NO ONLINE 1 26214400 2147483648 524288