Comment ? (je fais pour ...) (Oracle)
7 pages
Français

Comment ? (je fais pour ...) (Oracle)

-

Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
7 pages
Français
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres

Description

a www.caulea.com
Comment ?
(je fais pour …)
(Oracle)

Ou réponses à des questions qu’on se pose parfois.
















Copyright Radu Caulea, TAFORA, 2002 radu@caulea.com Comment je fais pour TAFORA
1. TABLE DE MATIERES
1. TABLE DE MATIERES 2
2. SUPPRIMER UN JOB LANCE AVEC DBMS_JOB 3
3. PROFITER DU NOLOGGING 4
4. COMMENT J’UTILISE EN PL/SQL UNE PROCEDURE EXTERNE
ECRITE EN C ? 5
4.1. Le code source de extern.c 5
4.2. Le code source de credlL.cmd 5
4.3. Le code de la préparation SQL 5
4.4. Configuration du listener 6
4.5. Test 6
5. CALCULER LA LONGUEUR D’UN LONG RAW. 7














Radu Caulea, Senior Oracle Consultant Page 2 Comment je fais pour TAFORA
2. SUPPRIMER UN JOB LANCE AVEC DBMS_JOB
Utiliser dbms_job.remove(xx), ou xx est l’identifiant du job, trouvé avec :
select job, what, log_user from dba_jobs;
C’est le créateur du job qui doit le supprimer!
Radu Caulea, Senior Oracle Consultant Page 3 Comment je fais pour TAFORA
3. PROFITER DU NOLOGGING
Des redo logs il y en aura toujours, a moins que Oracle ne change
l'architecture du noyau.
Une transaction est systématiquement fliquée dans les redos.
Ce qui n'est pas fliqué peut être un éventail de DETAILS d'actions sur
plusieurs objets (par exemple, truncate ne génère pas (beaucoup) de
redo.
unrecoverable (V7) ou nologging (v8+) sont des appellations differentes pour
les mêmes phénomènes (a peu près) en fonction de la version d'Oracle.
Il ...

Sujets

Informations

Publié par
Nombre de lectures 286
Langue Français

Extrait

a
www.caulea.com
Comment ? (je fais pour …) (Oracle)
Ou réponses à des questions qu’on se pose parfois. Copyright Radu Caulea, TAFORA, 2002radu@caulea.com
Comment je fais pour
1. TABLEDE MATIERES
TAFORA
1.2TABLE DE MATIERES2.3SUPPRIMER UN JOB LANCE AVEC DBMS_JOB3.4PROFITER DU NOLOGGING4.COMMENT J’UTILISE EN PL/SQL UNE PROCEDURE EXTERNE ECRITE EN C ?54.1.Le code source de extern.c54.2.5Le code source de credlL.cmd4.3.Le code de la préparation SQL54.4.Configuration du listener64.5.Test 65.CALCULER LA LONGUEUR D’UN LONG RAW.7
Radu Caulea, Senior Oracle Consultant
Page 2
Comment je fais pour
2. SUPPRIMERUN JOB LANCE AVEC DBMS_JOB
Utiliser dbms_job.remove(xx), ou xx est l’identifiant du job, trouvé avec : select job, what, log_user from dba_jobs; C’est le créateur du job qui doit le supprimer!
Radu Caulea, Senior Oracle Consultant
TAFORA
Page 3
Comment je fais pour
TAFORA
3. PROFITERDU NOLOGGING Des redo logs il y en aura toujours, a moins que Oracle ne change l'architecture du noyau. Une transaction est systématiquement fliquée dans les redos. Ce qui n'est pas fliqué peut être un éventail de DETAILS d'actions sur plusieurs objets (par exemple, truncate ne génère pas (beaucoup) de redo. unrecoverable (V7) ou nologging (v8+) sont des appellations differentes pour les mêmes phénomènes (a peu près) en fonction de la version d'Oracle. Il est nécessaire également d'ajouter un hint dans les opérations (exemple: INSERT /*+ APPEND */ ... Une solution plus sioux est de mettre le tablespace qui contient la table en nologging: alter tablespace TBS nologging; Il y aura une information minimale dans les redo concernant les objets stockés. Petite vérification: select TABLESPACE_NAME, LOGGING from dba_tablespaces; (Vérifier la version ;)) Le mode archivelog permet d'archiver les redo logs. Ne pas générer des entrées redo n'a rien a voir avec le mode d'archivage
Radu Caulea, Senior Oracle Consultant
Page 4
Comment je fais pour
TAFORA
4. COMMENTJ’UTILISE EN PL/SQL UNE PROCEDURE EXTERNE ECRITE EN C ? Très souvent on me demande comment lancer une commande OS à partir d’une procedure stockée. Voici une méthode:
4.1. LECODE SOURCE DE EXTERN.C #include <string.h> __declspec(dllexport) void execute_cmd( char* cmd ) { system(cmd); }
4.2. LECODE SOURCE DE CREDLL.CMD cl I. /LD Zi extern.c /link msvcrt.lib /nod:libcmt /DLL copy extern.dll \\sclavos\m$\cextlib\ pause La copie du fichier le place dans un répertoire connu par Oracle. Quant au compilateur, un bon cl de Visual Studio est suffisant ;)
4.3. LECODE DE LA PREPARATION SQL set echo on connect sys/xxx@ulib as sysdba CREATE OR REPLACE LIBRARY EXECUTE_CMDLIB IS 'M:\cextlib\extern.dll'; / CREATE OR REPLACE PROCEDURE execute_cmd (  p_cmdIN VARCHAR2)  ASEXTERNAL  LIBRARYexecute_cmdlib  NAME"execute_cmd"  PARAMETERS(p_cmd STRING); / show errors  grant execute on sys.execute_cmd to public; drop public synonym execute_cmd; create public synonym execute_cmd for sys.execute_cmd;
Radu Caulea, Senior Oracle Consultant
Page 5
Comment je fais pourTAFORA CREATE OR REPLACE PROCEDURE oscommande (pcommande varchar2) as  cmdvarchar2(200); BEGIN  execute_cmd(pcommande);  loglog('Executée'|| pcommande); exception  whenothers then  loglog(SQLERRM || ' !!! ' || pcommande); END; / show errors
4.4. CONFIGURATIONDU LISTENER LISTENER =  (DESCRIPTION_LIST =  (DESCRIPTION=  (ADDRESS_LIST=  (ADDRESS= (PROTOCOL = IPC)(KEY = EXTPROC1))  )  (ADDRESS_LIST=  (ADDRESS= (PROTOCOL = TCP)(HOST = gatetafora)(PORT = 1521))  )  )  ) SID_LIST_LISTENER =  (SID_LIST =  (SID_DESC=  (SID_NAME=PLSExtProc)  (ORACLE_HOME= k:\oracle\oracle90)  (PROGRAM= extproc)  )  (SID_DESC=  (GLOBAL_DBNAME= lib9)  (ORACLE_HOME= k:\oracle\oracle90)  (SID_NAME= lib9)  )  ) LePLSExtProcdoit être saisi tel que décrit ! Ne pas choisir un autre nom.
4.5. TEST execute oscommande('mkdir c:\toto'); voir %ORACLE_HOME%/rdbms/extproc pour plus de détails.
Radu Caulea, Senior Oracle Consultant
Page 6
Comment je fais pour
TAFORA
5. CALCULERLA LONGUEUR D’UN LONG RAW. Comment calculer la longueur d’une colonne long raw ? Passer par un champ intermédiaire (dans une table crée spécialement dans ce but) : set serveroutput on; CREATE TABLE blob_tab(blob_col BLOB); INSERT INTO blob_tab (to_lob(colonne_long_raw) FROM testraw); commit; (Le champ colonne_long_raw de la la table testraw est de type long raw). begin  for x in (select blob_col from blob_tab) loop  dbms_output.put_line(dbms_lob.getlength(x.blob_col));  end loop; end; /
Radu Caulea, Senior Oracle Consultant
Page 7
  • Univers Univers
  • Ebooks Ebooks
  • Livres audio Livres audio
  • Presse Presse
  • Podcasts Podcasts
  • BD BD
  • Documents Documents