mardi 6 octobre 2009
error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory
Je souhaite exécuter une requête SQL dans une base de données Oracle, en utilisant sqlplus. Ma requête est dans un script ksh que je lance en crontab toutes les 10 minutes. Mon script ne fonctionne pas, pourquoi ?
J'ai cette erreur :
error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory
C'est une erreur classique, facile à contourner. En effet, dans le script ksh, il faut redéfinir toutes les variables nécessaires pour Oracle, à savoir :
- ORACLE_HOME
- ORACLE_SID
- LD_LIBRARY_PATH
- ORACLE_USER
- ORA_PASSWD
- NLS_LANG
- DATE_FORMAT
- PATH
- etc...
Puis vous devez intégrer la ligne suivante dans votre script :
export PATH NLS_LANG ORA_USER ORACLE_SID ORA_PASSWD LD_LIBRARY_PATH
mardi 29 septembre 2009
Informations sur les tablespaces Oracle en un script
La question du jour est la suivante : comment savoir tout ce qu'il y a à savoir sur les tablespaces d'une base de données Oracle ?
Si comme moi, vous êtes plus MySQL qu'Oracle, plus Linux que Windows, ce script SQL est pour vous !
Vous devez d'abord vous connecter à la base de données Oracle avec sqlplus puis à lancer la requête suivante :
set echo off
set feedback off
set verify off
set linesize 512
set term off
COLUMN block_size NOPRINT new_value block_size
SELECT
value block_size
FROM
v$parameter
WHERE
name='db_block_size';
set term on
prompt ------------------------------
prompt - Infos sur les tablespaces --
prompt ------------------------------
col Tablespace_name Heading 'Tablespace'
col Megs_Alloc Heading 'Mo alloués'
col Megs_Free Heading 'Mo libres'
col Megs_Used Heading 'Mo utilisés'
col Pct_Free Heading 'Pct Free'
col Pct_Used Heading 'Pct Used'
col Init_Ext Heading 'Init Ext'
col Next_Ext Heading 'Next Ext'
col Min_Ext Heading 'Min Ext'
col Max_Ext Heading 'Max Ext'
col Num_Segs Heading 'Nbre Segments'
col Num_Exts Heading 'Nbre Extents'
SELECT
c.tablespace_name,
round(a.bytes/1048576) Megs_Alloc,
round(b.bytes/1048576) Megs_Free,
round((a.bytes-b.bytes)/1048576) Megs_Used,
round(b.bytes/a.bytes * 100) Pct_Free,
round((a.bytes-b.bytes)/a.bytes * 100) Pct_Used,
round(c.initial_extent/1048576) Init_Ext,
round(c.next_extent/1048576) Next_Ext,
round(a.minbytes/1048576) Min_Ext,
round(a.maxbytes/1048576) Max_Ext,
nvl(d.num_segs,0) Num_segs,
nvl(d.num_exts,0) Num_Exts
FROM
( SELECT
tablespace_name,
sum(a.bytes) bytes,
min(a.bytes) minbytes,
max(a.bytes) maxbytes
FROM
sys.dba_data_files a
GROUP BY tablespace_name) a,
( SELECT
a.tablespace_name,
nvl(sum(b.bytes),0) bytes
FROM
sys.dba_data_files a,
sys.dba_free_space b
WHERE
a.tablespace_name = b.tablespace_name (+)
AND
a.file_id = b.file_id (+)
GROUP BY
a.tablespace_name) b,
sys.dba_tablespaces c,
( SELECT
tablespace_name,
count(distinct segment_name) num_segs,
count(extent_id) num_exts
FROM
sys.dba_extents
GROUP BY
tablespace_name) d
WHERE
a.tablespace_name = b.tablespace_name(+)
AND
a.tablespace_name = c.tablespace_name
AND
a.tablespace_name = d.tablespace_name(+)
ORDER BY
c.tablespace_name;
Pour avoir quelque chose de plus propre, vous pouvez récupérer le résultat de la requête dans un fichier. Il vous suffit d'ajouter la commande :
spool votreFichier avant la requête SQL
puis :
spool off
exit
après la requête SQL







