Skip to content

Oracle

Here are somes Oracle tips & tricks

Spfile

SPFILE (Fichier de paramètres persistant) est un fichier binaire recherché automatiquement au démarrage de l’instance. Son nom par défaut est spfile<SID>.ora. Il est situé dans $ORACLE_HOME/dbs/. Le fichier SPFILE est recommandé par Oracle en raison de la possibilité de géré dynamiquement de nombreux paramètres d’initialisation. Il est modifié par le moteur Oracle. PFILE (Fichier de paramètres statique) est un fichier texte recherché automatiquement au démarrage de l’instance en l’absence du fichier SPFILE. Il est modifié manuellement par le DBA. Son nom par défaut est : init<SID>.ora et il est situé dans $ORACLE_HOME/dbs. Les modifications prennent effet qu’après le redémarrage de l’instance. CRÉER UN SPFILE A PARTIR D’UN PFILE Vous pouvez créer un fichier SPFILE à partir d’un fichier PFILE via la commande suivante (instance démarrée ou non) et ou le nom d’instance est DBA01 :

CREATE SPFILE = ‘$ORACLE_HOME/dbs/spfileDBA01.ora FROM PFILE = ‘$ORACLE_HOME/dbs/initDBA01.ora

Control file

Le fichier de contrôle est un fichier binaire, il contient des informations sur la structure physique de la base. Il est créé pendant la création de la base et il est modifié en permanence. Ce fichier doit être toujours disponible car il est consulté; et modifié fréquemment par le serveur oracle. Et il est indispensable pour la restauration de la base. Pour afficher les noms des fichiers de contrôle on utilise :

SHOW PARAMETER CONTROL_FILES
SELECT VALUE FROM V$PARAMETER WHERE NAME='control_files';

Redolog

Les fichiers Redo Logs servent à enregistrer toutes les modifications commitées effectuées sur le base de données. Ils servent à protéger la base de données dans le cas d’un échec d’instance. En cas de restauration de la base de données, on utilise les redo logs pour ‘rejouer’ les modifications qui ont eu lieu, les transactions validées (commit à la fin de la transaction) sont enregistrées dans les fichiers de données Oracle et les transactions non validées, s’il y en a, sont effacées des fichiers de données.

Data base file

Les fichiers physiques d’une base Oracle permettent de stocker de manière persistante les données manipulées par Oracle.

Archive log

Quand la base est en mode NOARCHIVELOG, l’archivage des fichiers redo est désactivé. Le fichier de contrôle indique que les groupes des fichiers redo pleins ne sont plus nécessaires. Dès qu’ils sont inactifs après un log switch, le groupe sera disponible pour une réutilisation par la LGWR . → (lgwr écrit toutes les entrées refaites qui ont été copiées dans le tampon depuis la dernière fois.) Le mode NOARCHIVELOG protège la base contre une défaillance d’instance et non pas contre une défaillance media. Seulement les modifications récentes dans la base, stockés dans les groupes de fichiers redo en ligne seront disponibles pour la restauration de la base. En mode NOARCHIVELOG, on ne peut pas sauvegarder en ligne une tablespace. Pour restaurer une base en mode NOARCHIVELOG, on est obligé de faire une sauvegarde complète quand la base est fermée. Quand la base est en mode ARCHIVELOG, l’archivage des fichiers redo est activé. Le fichier de contrôle de la base signale que les groupes contenant des fichiers redo pleins ne peuvent pas être utilisés par le process LGWR tant que les groupes n’ont pas été archivés. Vérifier s’il y a présence d’Archive log :

archive log list

Connaître la destination de chacune d’entre-elles :

show parameter log_archive_dest

Passer en mode d'archivage (attention à ne pas omettre de monter seulement l'instance afin d'effectuer la manipulation. Celle-ci subira donc une relance**) :

ALTER DATABASE ARCHIVELOG;

Informations

Connaître les informations et version de composant oracle :

odacli describe-component

Connaître le nom de la base sur laquelle on est connectée :

show parameter name

Ou encore pour soucis de sureté :

show parameter unique

Connaître le owner d’une table :

select disctinct owner from all_tables;

Savoir si la base tourne ou non en SQL :

SELECT INSTANCE_NAME, STATUS, DATABASE_STATUS FROM V$INSTANCE;

Diag Tunning

Name
Interpréter Syntaxe : CONTROL_MANAGEMENT_PACK_ACCESS = { NONE | DIAGNOSTIC | DIAGNOSTIC+TUNING}
Désactiver Passon la mémoire tampon mais aussi le spfile à none

En tant que sysdba :

ALTER SYSTEM SET CONTROL_MANAGEMENT_PACK_ACCESS=NONE SCOPE=BOTH;

Check

  • Vérifier s’il est activé :
show parameter control_management_pack_access
  • Ou encore :
select display_value from v$parameter where name = 'control_management_pack_access';

Bring impdp

Réccupérer la vue sur un import en bacground :

impdp \"/ as sysdba\" ATTACH="SYS_IMPORT_FULL_01"

Global Prefs

Get Global prefs :

SELECT DBMS_STATS.get_prefs('CONCURRENT') FROM dual;
Global Perfs State SQL Command
True DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT','TRUE');
False DBMS_STATS.SET_GLOBAL_PREFS('CONCURRENT','FALSE');

LSNRCTL

L’utilitaire de contrôle d’écoute vous permet d’administrer des listeners. Vous pouvez utiliser ses commandes pour exécuter des fonctions de gestion de base sur un ou plusieurs listeners. En outre, vous pouvez afficher et modifier les paramètres.

Commandes possible : - start
- Stop - Status - Services - Servacls - Version - Reload - save_config - Trace - Spawn - Quit - Exit - set - show

Effectuer un status du service listener : Il se peut que celuic-ci ne se nomme pas LISTENER, il s’agit des paramètres pas défaut :

lsnrctl status LISTENER

ODACLI

Répertorier toutes les bases de données de l’appliance :

odacli list-databases

Afficher les détails de la base de données :

odacli describe-database

Créer une nouvelle base de données :

odacli create-database

Supprimer une base de données :

odacli delete-database

Réseau : - On trouvera les identifiants réseau :

odacli list-network

  • On y trouve tout les détails de ce réseau : ::

    odacli describe-ntwork -i $identifiants_réseau

OSWBBA

java -jar /opt/oracle/oak/oswbb/oswbba.jar -i /opt/oracle/oak/oswbb/archive -b Mar 18 00:00:00 2019 -e Mar 19 00:00:00 

Ressources

Afin de vérifier l’état du paramètre SESSIONS :

SHOW parameter sessions

Processes

PROCESSES spécifie le nombre maximal de processus utilisateur du système d’exploitation pouvant se connecter simultanément à Oracle. Sa valeur doit autoriser tous les processus d’arrière-plan tels que les verrous, les processus de file d’attente de travaux et les processus d’exécution parallèles. Les valeurs par défaut des paramètres SESSIONS et TRANSACTIONS sont dérivées de ce paramètre. Par conséquent, si vous modifiez la valeur de PROCESSES, vous devez déterminer si vous souhaitez ajuster les valeurs de ces paramètres dérivés. Afin de vérifier l’état du paramètre PROCESSES :

SHOW parameter processes

Application du paramètre :

ALTER SYSTEM SET processes=[VALUE AS INTEGER] SCOPE=SPFILE ;

Transactions

TRANSACTIONS spécifie le nombre maximal de transactions simultanées. Des valeurs plus élevées augmentent la taille du SGA et peuvent augmenter le nombre de segments de restauration alloués. La valeur par défaut est supérieure à SESSIONS (et à son tour, PROCESSES) pour permettre les transactions récursives.

Vérifier les paramètres

Afin de vérifier l’état du paramètre TRANSACTIONS :

SHOW parameter transactions

Application du paramètre :

ALTER SYSTEM SET transactions=[VALUE AS INTEGER] SCOPE=SPFILE ;

⚠ Application des paramètres : Afin d’appliquer des paramètres modifiés dans le spfile, un relance de l’instance sera requis :

shutdown immediate
startup

Account

Débloquer des compte vérouillé :

SQL> conn / AS sysdba
Connected.
SQL> ALTER USER $USER BY ******** account UNLOCK;
USER altered.
SQL> ALTER USER $USER IDENTIFIED BY ******** account UNLOCK;
USER altered.

SQLPLUS

Paramétrage de l’interface sqlplus :

linesize

La longueur des lignes par défaut 80 caractères :

set linesize 200

col

Il défini un format de sortie pour une colonne particulière :

col table_name for a20

set pause on

Permet une attente de RETURN pour faire défiler les lignes suivantes ( comme la commande more).

spool

La sortie standard et d’erreur est redirigée dans le fichier indiqué dans la commande. La commande “spool off” ferme le fichier. Utiliser la commande SQL **start** or **@** pour effectuer les script tel que .sql

STATSPACK

Analyser

Mise en forme du resultat :

col OWNER format a10
col SEGMENT_NAME format a60
col SEGMENT_TYPE format a15
set pagesize 1000

select owner,segment_name,segment_type,bytes/1024/1024 from dba_segments where tablespace_name = 'STATSPACK_TBS' and segment_type = 'TABLE' order by bytes desc;

Corriger

1. Purge STATSPACK

Renseigner la plage d'id à purger :

DEFINE losnapid=1    -- low snap id
DEFINE hisnapid=2    -- high snap id
@?/rdbms/admin/sppurge.sql

2. Move table

How to move dba_segments :

select 'alter table '||owner||'.'||segment_name||' move;' from dba_segments where tablespace_name = 'STATSPACK_TBS' and segment_type = 'TABLE' order by bytes desc;

3. Rebuild Index

How to rebuild dba_indexes :

select 'alter index '||owner||'.'||index_name||' rebuild;' from dba_indexes where status = 'UNUSABLE';

TNSNAME

Comment la vérifier :

[oracle@oda ~]# env | grep TNS
TNS_ADMIN=/backup/TNS

Le fichier est donc dans /backup/TNS/tnsname.ora.

Configuration:

Voici un exemple de configuration :

(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ``iP de la machine``)(PORT = 1521))

(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ``Nom de la base``)  
)

)

Tablespace

Know the tablesapces size :

set line 1000
set pagesize 100
col "Tablespace" FOR a22
col "Used MB" FOR 99,999,999
col "Free MB" FOR 99,999,999
col "Total MB" FOR 99,999,999

SELECT df.tablespace_name "Tablespace",
totalusedspace "Used MB",
(df.totalspace - tu.totalusedspace) "Free MB",
df.totalspace "Total MB",
round(100 * ( (df.totalspace - tu.totalusedspace)/ df.totalspace))"Pct. Free",
df.MAX_SIZE/1024/1024/1024 "Max Size Go"
FROM
(SELECT tablespace_name,
round(SUM(bytes) / 1048576) TotalSpace, 
sum(decode(AUTOEXTENSIBLE, 'YES', MAXBYTES, BYTES)) MAX_SIZE
FROM dba_data_files 
GROUP BY tablespace_name) df,
(SELECT round(SUM(bytes)/(1024*1024)) totalusedspace, tablespace_name
FROM dba_segments 
GROUP BY tablespace_name) tu
WHERE df.tablespace_name = tu.tablespace_name;