solution erreur ORA-01752

Musée des erreurs pas de Commentaire »

SQL> Connect scott / Tiger
SQL> create view v_emp as select *
from emp,dept
where emp.deptno=dept.deptno;
SQL> delete from v_emp
-> 14 rows deleted

La suppression de lignes à travers une vue (même avec jointure)  fonctionne !
La condition, qui est vérifiée ici,  est qu’il y ait une clé primaire sur la table maitre de la jointure


SQL> select constraint_name, constraint_type,  table_name
from user_constraints;

CONSTRAINT_NAME  C TABLE_NAME
---------------  - ----------
PK_EMP          P EMP
PK_DEPT      P DEPT
FK_DEPTNO      R EMP 

Supprimons la PK de EMP :

SQL> alter table emp disable constraint pk_emp
SQL> delete from v_emp
-> OK

(car on a supprimé la contrainte sur la table détail°

PAR CONTRE  si on invalide (ou supprime)  la contrainte unique de la table maitre

SQL> — on invalide d’abord la clé étrangère de EMP avant la clé primaire de EMP sinon ca marche Pô
SQL> alter table emp disable constraint fk_deptno
SQL>  alter table dept disable constraint pk_dept
SQL> delete from v_emp
ERROR at line 1:
ORA-01752: cannot delete from view without exactly one key-preserved table

Conclusion : on peut faire des suppressions de lignes dans une table à travers une vue avec jointures MAIS
il faut une contrainte unique (ou une clé primaire) sur la table maitre…
sinon ORA-01752.

Accessoirement ORA-01752 :  cannot delete from view without exactly one key-preserved table

Veut bien dire…ce que ca veut dire.

Il y a apparemment un probleme de table sous jacente sans contrainte unique cqfd

ubuntu et oracle : ulimit: 25: bad number

Musée des erreurs pas de Commentaire »

Lorsque l’on lance ceratins utilitaire comme emctl par exemple on a cette erreur qui survient

exemple :

$> emctl start dbconsole

$> ulimit: 25: bad number

Le pb vient de ce que cette commande s’execute en Shell ( sh ) et non pas bash.

Solution : modifier $ORACLE_HOME/bin/emctl et remplacer le

#!/bin/sh -f

par

#!/bin/bash -f

Change Oracle control files location

scripts et trucs pas de Commentaire »

keywords : control file, Oracle control file, Change Control File location,  CONTROL_FILES, Change default Control File location

Its not possible to change CONTROL FILES location with Oracle ENterprise Manager Console ( OEM ) . But you can do it with some SQL commands and…a SPFILE. Here is the script :

$> sqlplus /nolog
SQL> connect sys as sysdba

SQL> show parameter CONTROL_FILES
NAME                                 TYPE        VALUE
———————————— ———– ——————————
control_files                        string      E:\ORADATA\ORCL\CONTROL01.CTL,
E:\ORADATA\ORCL\CONTROL02.CTL
,  E:\ORADATA\ORCL\CONTROL03.CTL

SQL> CREATE PFILE=’c:\temp\pfile.ora’ FROM SPFILE;

edit  c:\temp\pfile.ora and change one of the PATH value for CONTROL_FILES
here :
E:\ORADATA\ORCL\CONTROL03.CTL becomes  C:\TEMP\CONTROL03.CTL

copy the  control file
ici CONTROL03.CTL de E:\ORADATA\ORCL\ vers c:\TEMP

– shutdown and restart with the new parameter
SQL> shutdown abort
SQL> startup

SQL> show parameter control_files
NAME                                 TYPE        VALUE
———————————— ———– ——————————
control_files                        string      E:\ORADATA\ORCL\CONTROL01.CTL,
E:\ORADATA\ORCL\CONTROL02.CTL
, C:\TEMP\CONTROL03.CTL

You’re done !

Changer l’emplacement d’un Control File Oracle

scripts et trucs pas de Commentaire »

Mots ckés : control file, Oracle control file, Changer l’emplacement d’un Control File , changer l’emplacement par défaut d’un control file, CONTROL_FILES

Il n’est pas possible de changer dynamiquement l’emplacement d’un  CONTROL FILE  pour le multiplexer par exemple, avec  Oracle ENterprise Manager Console ( OEM ) . Quelques commandes SQL et l’appui du SPFILE suffisent… :

$> sqlplus /nolog
SQL> connect sys as sysdba

SQL> show parameter CONTROL_FILES
NAME                                 TYPE        VALUE
———————————— ———– ——————————
control_files                        string      E:\ORADATA\ORCL\CONTROL01.CTL,
E:\ORADATA\ORCL\CONTROL02.CTL
,  E:\ORADATA\ORCL\CONTROL03.CTL

SQL> CREATE PFILE=’c:\temp\pfile.ora’ FROM SPFILE;

editer  c:\temp\pfile.ora and change one of the PATH value for CONTROL_FILES
ici :
E:\ORADATA\ORCL\CONTROL03.CTL becomes  C:\TEMP\CONTROL03.CTL

copier le control file
ici CONTROL03.CTL de E:\ORADATA\ORCL\ vers c:\TEMP

SQL> shutdown abort
SQL> startup

SQL> show parameter control_files
NAME                                 TYPE        VALUE
———————————— ———– ——————————
control_files                        string      E:\ORADATA\ORCL\CONTROL01.CTL,
E:\ORADATA\ORCL\CONTROL02.CTL
, C:\TEMP\CONTROL03.CTL

C’est fait!