16. Juli 2013

Ein Oracle12c "New Feature": Freien Plattenplatz auf dem DB Server bestimmen

"Image processing in the database": Making ORDIMAGE handy and practical
In diesem Blog-Posting möchte ich etwas vorstellen, was sicherlich in keiner "Oracle12c New Feature" Zusammenstellung vorkommen wird: Oracle12c erlaubt es, eine PL/SQL Funktion einzurichten, die den freien Plattenplatz auf dem Datenbankserver ermittelt. Der eine oder andere DBA kann sowas vielleicht gebrauchen. Die Grundlage dafür ist (wie bei mir so oft) Java in der Datenbank. Oracle12c bringt ein Java6 mit - und in dieser Version gibt es in der Klasse java.io.File die Methode getFreeSpace(). Und die nutzen wir dann auch direkt mal ...
create or replace and compile java source named JAVA_GET_FREESPACE as
import java.io.*;

public class FreeSpaceHelper {
  public static long getFreeSpace(String pPath) throws Exception {
    return new File(pPath).getFreeSpace();
  }
}
/
sho err

create or replace function get_free_disk_space (p_path in varchar2) return number
is language java name 'FreeSpaceHelper.getFreeSpace(java.lang.String) return long';
/
Dann können wir uns ja mal die Inhalte von DBA_DATA_FILES ansehen - und zu jedem File den noch freien Platz auf dem Device dazustellen ...
select 
  file_name, 
  bytes file_size,
  get_free_disk_space(file_name) free_space
from dba_data_files
/
Ein wenig formatiert, sieht der Output so aus ...
FILE_NAME                                          FILE_SIZE       FREE_SPACE
-------------------------------------------------- --------------- -------------
/opt/oracle/oradata/orcl/pdb1/system01.dbf         270MB           22GB
/opt/oracle/oradata/orcl/pdb1/sysaux01.dbf         680MB           22GB
/opt/oracle/oradata/orcl/pdb1/pdb1_users01.dbf     5MB             22GB
Eine generelle Übersicht über die neuen Funktionen in Oracle12c findet Ihr, wie schon im letzten Blog Posting geschrieben, auf den Seiten der deutschsprachigen APEX und PL/SQL Community und der deutschsprachigen DBA Community.
Today I'd like to introduce something which I'd hardly expect to be contained in a "Oracle12c New Features" collection. In Oracle12c you can create a function which determines the free space on a database servers' disk. I could imagine that this might be useful ...
The function will rely (as so often in my blog postings) on Java in the Database. Oracle12c is equipped with a Java6 VM - and this Java version contains the method getFreeSpace() within java.io.File - and this is very easy to use ...
create or replace and compile java source named JAVA_GET_FREESPACE as
import java.io.*;

public class FreeSpaceHelper {
  public static long getFreeSpace(String pPath) throws Exception {
    return new File(pPath).getFreeSpace();
  }
}
/
sho err

create or replace function get_free_disk_space (p_path in varchar2) return number
is language java name 'FreeSpaceHelper.getFreeSpace(java.lang.String) return long';
/
We can use this function, together with DBA_DATA_FILES, in order to see, for each data file, the free space on the device.
select 
  file_name, 
  bytes file_size,
  get_free_disk_space(file_name) free_space
from dba_data_files
/
The output, a bit formatted ...
FILE_NAME                                          FILE_SIZE       FREE_SPACE
-------------------------------------------------- --------------- -------------
/opt/oracle/oradata/orcl/pdb1/system01.dbf         270MB           22GB
/opt/oracle/oradata/orcl/pdb1/sysaux01.dbf         680MB           22GB
/opt/oracle/oradata/orcl/pdb1/pdb1_users01.dbf     5MB             22GB

Kommentare:

marogel hat gesagt…

funktioniert aber nicht mit ASM ?
oder doch ?

Carsten Czarski hat gesagt…

Nein - das funktioniert nicht. Die JavaVM greift in "java.io.File" auf Standard Systemcalls zu. Und die haben natürlich keinen Zugriff auf ASM - ich denke, wenn man einen ASM-Pfad angibt, bekommt man bestenfalls eine Fehlermeldung.

Beste Grüße

-Carsten

Beliebte Postings