Oracle mini-guide tips

========== REMARQUES ==================
SQL au coeur des performances de Markus Winand (Livre utilité des index)
TOAD Oracle outil de supervision
OEM 10g exploitable client lourd
SQL developer gratuit / client lourd java / sous linux $ORACLE_HOME/sqldeveloper/sqldeveloper.sh
Outil graphique EM Database Control / via web
Le site d’ Oracle.com sous OTN on trouve doc/logiciels/Os supportés
La norme OFA est la norme des organisations des répertoires sous oracle

Outils ETL prennent le pas sur SQL LOADER
Kettle (Open source)
ODI produit Oracle
Datastage
=============================================
lsnrctl start ==> chaque fois qu’ une instance est démarré elle prise en compte sur le port tcp 1521 (localhost/PROD/Test)
le listener sert à établir la connexion et n’ est pas utile pour la suite

Repérer les instances d’ une base
ps -ef | grep _test (test est le nom de ma base)

les vues v$ (en $) sont des vues dynamiques chargés dans la sga / instance et mémoire.

==================== COMMANDES USUELS ============================

oracle doit être installé avec l’ utilisateur oracle et le groupe dba
oracle fait partie de dba

echo $ORACLE_HOME
export ORACLE_SID=test ===> use test;
test@oracle:centos>

centos n’ est pas supporté par Oracle comme les Redhat

sqlplus /nolog
sql> connect as sysdba

sql>connect scott/tiger (changer de connexion)

========== Démarrage des bases ====================
startup no mount (Instance seule)
startup mount (attacher la base à l’ instance – Pour certaines tâches de maintenance : la base n’ est pas en ligne ou connexion)
Startup (Autoriser les connexions)

======================= Commandes sqlplus utiles ==============================
sql>echo pwd
/home/oracle/
sql>echo @tpespace.sql
sql>/ (Répéter l’ instruction de remplissage
ex: insert into demo.emp2 select * from demo.emp2;
ex : create table demo.emp3 as select * from demo.emp;

Formatage de l’ affichage de sqlplus :
sql>set line 140
sql>column column_name format a20
column column_name format a50 word_wrapped

Effacer les commande écran :
SQL>!clear
SQL>! ===> commande os linux
SQL>; supprime le cache

/oracle/app/oracle/oradata/test/control01.ctl

alter system set control_files = ‘/oracle/app/oracle/oradata/test/control01.ctl’ scope=spfile;,’/oracle/app/oracle/oradata/test/control02.ctl’ scope=spfile,’/oracle/app/oracle/oradata/test/controlsave/control03.ctl’ scope=spfile;

alter system set control_files = ‘/oracle/app/oracle/oradata/test/control01.ctl’, ‘/oracle/app/oracle/oradata/test/control02.ctl’ scope=spfile;

=========== Mise en mirroring des fichiers LOG circulaires ==================
select group#,status, type, member from v$logfile;

alter database add logfile member ‘/oracle/app/oracle/oradata/test/miror/redo01.log’ to group 1;
alter database add logfile member ‘/oracle/app/oracle/oradata/test/miror/redo02.log’ to group 2;
alter database add logfile member ‘/oracle/app/oracle/oradata/test/miror/redo03.log’ to group 3;
=================================================================================================

======================= Doubler fichier de Contrôle (Checkpoint modifications dans les structures …..=========
alter system set control_files =
‘/oracle/app/oracle/oradata/test/control01.ctl’,
http://codesamplez.com/development/using-doctrine-with-codeigniter’/oracle/app/oracle/oradata/test/control02.ctl’,
‘/oracle/app/oracle/oradata/test/controlsave/control03.ctl’ scope=spfile;

sql>shutdown immediate

Copier un des fichier dans le dossier controlsave qui doit être le même que les autres sinon pas de démarrage.

Faire des sauvegardes à chaque changement de structures/paramères dans la base, ne pas attendre longtemps :
alter database backup controlfile to ‘/oracle/app/oracle/oradata/test/save/control.bak’;

=======================================================================================

======================= SECURITE ========================================
select granted_role,admin_option,default_role from dba_role_privs where grantee=’michel’;
select grantee,owner,table_name,grantor,privilege from dba_tab_privs where grantee=’RUSERS’;

select username from dba_audit_session where username=’sysman’;
select username,owner,obj_name,action_name from dba_audit_object where username not in (‘SYSMAN’,’DBSNMP’,’ORACLE_COM’) ;

audit select table, insert table, delete table, execute procedure by access whenever successful

select username, owner, action_name, priv_used from dba_audit_trail where username =’DEMO’ and obj_name=’EMP’;

select * from sys.aud$;

=================================== TABLES =============================================
CREATE TABLE “DEMO”.”EMPTEST” TABLESPACE “USERS” STORAGE ( INITIAL 400M) as select * from demo.EMP;

CREATE INDEX “DEMO”.”ENAME” ON “DEMO”.”EMPTEST” (“ENAME”) TABLESPACE “USERS”;

http://www.dbforums.com/oracle/1627103-alter-table-move-vs-shrink-space.html
============================================================================

select blocks, empty_blocks from user_tables where table_name = ‘EMPTEST’;

analyze table “DEMO”.”EMPTEST” compute statistics;

alter table “DEMO”.”EMPTEST” move tablespace users;

alter index “DEMO”.”ENAME” rebuild online;

alter table “DEMO”.”EMPTEST” enable row movement;
alter table “DEMO”.”EMPTEST” shrink space;

Test de flashback :
==================
drop table “DEMO”.”EMPTEST”;
select * from “DEMO”.”EMPTEST”;
select count(*) from “DEMO”.”EMPTEST”;
flashback table “DEMO”.”EMPTEST” to before drop;

Sortir de sqlplus et lancer la commande sous l’ invite linux :
expdp system/test directory=datapump dumpfile=expdpfulldb.dmp
impdp system/test directory=datapump dumpfile=expdpfulldb.dmp tables=’scott.emp’

alter system flush shared_pool;
alter system flush buffer_cache;

Oracle n’ est pas en auto-commit sur les opération DML (Insert, update, delete)
=======================================================
insert emp.demo (empno,empname) values (‘8000′,’mike’);
commit;

===========================
ORACLE.NET
============================
alter system kill session ‘sid,serial#’;
ex: alter system kill session ‘154,46’;

Ne jamais tuer une session interne / where username is not null;

(Attention il faut être connecté en (sys/test) as sysdba)
select s.osuser, s.username, s.sid, s.serial#, s.program “Prog. Client”, p.program “Prog. server”,s.server, s.terminal from v$session s, v$process p where s.paddr = p.addr and type <> ‘BACKGROUND’ and s.username not in (‘SYSMAN’,’DBSNMP’);

select username, terminal, serial#, sid, to_char(logon_time, ‘DD-MM-YYYY hh24:mi:ss’) “Connect time” from v$session where type <> ‘BACKGROUND’ and username not in (‘SYSMAN’,’DBSNMP’);

Le programme Netmgr permet de gérer un ensemble de connexions comme tscadmin
=============================== SAUVEGARDE ET RESTAURATION ======================
Sécurité ++++ => Mode ARCHIVELOG (En plus Si un tablespace perd un fichier.dbf la base ne TOMBE PAS et on a le temps de réparer en démontant que la partie touchée)

La pire panne que l’ on peut avoir c’ est la perte du redolog courant / On ne peut rien faire même en mode archivelog.
La seule façon est de mettre en mirroring les redonn.log

Base bloquée :
select * from v$archive (Elle devra être vide)

A la restauration : Self Controle
1- Quoi de perdu
2- Aucun danger à redémarrer la base : cela aide de voir ce qui manque.

Exemple : une base de 500 tera tombe / il manque un dbf signalé au démarrage

A- je suis en mode archivelog : 1- Restaurer le fichier de la veille (100 Mo) 2- RECOVER (15 min)
B- Je ne suis pas en archivelog : 1- Restaurer toute la base à la date de la veille.

Exemple : Perte d’ un tablespace

===================== Commandes archivage
archive log list

select name,created,log_mode,open_mode from v$database;
alter system switch logfile;

alter system set
2 log_archive_dest_1=’LOCATION=/oracle/app/oracle/admin/test/arch mandatory reopen’
3 scope=spfile;

select DESTINATION,DEST_NAME,BINDING,STATUS from v$archive_dest;

!cp /oracle/app/oracle/oradata/test/*.dbf /oracle/app/oracle/admin/test/save
restaurer par l’ os copy :
!cp /oracle/app/oracle/admin/test/save/users01.dbf /oracle/app/oracle/oradata/test/users01.dbf

select instance_name,status from v$instance;
select a.name TABLESPACE,b.name FILE_NAME,file# FILE_ID,b.status STATUS from v$tablespace a, v$datafile b
where a.ts#=b.ts# and file#=4;

alter tablespace users offline immediate;
alter tablespace users online;

analyze table “DEMO”.”EMP” compute statistics;

insert into demo.emp select * from demo.emp;

cd /oracle/app/oracle/oradata/test/
ll
> users01.dbf

=========================== PERFORMANCES ========================================
http://docs.oracle.com/cd/B28359_01/server.111/b28275/tdppt_sqlid.htm

======================== TEST et DIAGNOSTICS=====================================

Avec Rman
$ rman target /
rman> validate

extradrmtech

Since 20 years I work on Database Architecture and data migration protocols. I am also a consultant in Web content management solutions. I am an experienced web-developer with over 10 years developing PHP/MySQL, C#, VB.Net applications ranging from simple web sites to extensive web-based business applications. When not writing code, I like to dance salsa and swing and have fun with my little family.

You may also like...