SQL: invalit Statement WO?

Hallo!
Ich versuche folgenden SQL auszuführen, erfolglos!
Zunächst ist Zeile 1 angemeckert! Lasse ich Zeile 1 (und auch 2) weg, wird immer noch über Zeile 1 gemeckert (also die ursprünglich dritte Line). Komischerweise werden aber Zeile 1 und auch 2, alleine für sich eingegeben, ausgeführt! Warum??

SQL*Plus: Release 9.2.0.1.0 - Production on Do Jul 15 15:32:25 2004

Copyright © 1982, 2002, Oracle Corporation. All rights reserved.

Verbunden mit:
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production

SQL> run
1 clear computes
2 clear breaks
3 column „Total Bytes“ format 999,999,999,999
4 column „Bytes Free“ format 999,999,999,999
5 column „% Free“ format 999.99
6 break on report
7 select substr(fs.FILE_ID,1,3) „ID#“,
8 fs.tablespace_name,
9 df.bytes „Total Bytes“,
10 sum(fs.bytes) „Bytes Free“,
11 (100*((sum(fs.bytes))/df.bytes)) „% Free“
12 from sys.dba_data_files df, sys.dba_free_space fs
13 where df.file_id(+) = fs.file_id
14 group by fs.FILE_ID, fs.tablespace_name, df.bytes, df.blocks
15* order by fs.tablespace_name
clear computes
*
FEHLER in Zeile 1:
ORA-00900: invalid SQL statement

Tippfehler
Hallo Markus
Von SQL *Plus hab ich keine Ahnung, aber ich wuerde mal sagen dass in deiner ersten Zeile ein Tippfehler drin ist ?
Da sollte vermutlich „clear computers“ stehen ???
Weiss ja nicht ob du’s hier extra nochmal getippt hast oder aus der Oracle Eingabe rueberkopiert hast.
Gruss Claudia

Korrektur
Mist der uebernimmt hier keine Standardforen-Tags.
Sollte „clear computers“ heissen. Bei dir fehlt das r im Code.

Hallo,

könnte es sein, dass Du einfach vergessen hast, die Zeilen mit einem Semikolon abzuschließen?

Gruß

Peter

Bei mir auf einer 9i-DB läuft das Script in der angegebenen Weise problemlos durch, wenn ich es über die Zwischenablage direkt nach SQL*Plus kopiere.

SQL> run
1 clear computes
2 clear breaks
3 column „Total Bytes“ format 999,999,999,999
4 column „Bytes Free“ format 999,999,999,999
5 column „% Free“ format 999.99
6 break on report
7 select substr(fs.FILE_ID,1,3) „ID#“,
8 fs.tablespace_name,
9 df.bytes „Total Bytes“,
10 sum(fs.bytes) „Bytes Free“,
11 (100*((sum(fs.bytes))/df.bytes)) „% Free“
12 from sys.dba_data_files df, sys.dba_free_space fs
13 where df.file_id(+) = fs.file_id
14 group by fs.FILE_ID, fs.tablespace_name, df.bytes,
df.blocks
15* order by fs.tablespace_name
clear computes
*
FEHLER in Zeile 1:
ORA-00900: invalid SQL statement

Hallo Markus
Da hast du ein feines script geschrieben.
Mit semikolon vor dem 2. clear computes, wie Peter schon schreibt, gehts auch im script, dann eben nicht nur interaktiv.
Gruss Ulrich

Hallo selbst
mit mehr als einem datafile pro tablespace siehts dann nicht mehr so hübsch aus, ich klemm mich bei Gelegenheit dahinter.
Ciao
Ulrich

Hallo Ulrich!

Ich will ja nicht meckern, aber so wahrlich begeistert bin ich von dem Skript (abgesehen von den Multifile-Tablespaces) nicht. Es erweckt nämlich den Eindruck, dass der in „bytes free“ angezeigte Wert für ein neues Segment zur Verfügung stehen würde - tut er aber nicht, weil dafür auch die Fragmentierung des Files entscheidend ist. Sprich: Es kann durchaus vorkommen (wenn auch selten) dass in einem Datenfile noch 200 MB frei sind, und ich trotzdem kein Segment (oder auch nur einen zusätzlichen Extent für ein bestehendes Segment) mit 2 MB anlegen kann.
Ich werde mal in meiner Sammlung kramen, da müsste sich doch noch was finden, was ich für den Zweck für besser geeignet halte.

Gruß
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Script für den freien Platz in allen Tablesp
Hallo Martin :wink:

Ich werde mal in meiner Sammlung kramen, da müsste sich doch
noch was finden, was ich für den Zweck für besser geeignet
halte.

Da isses:

select a.tablespace\_name,
 to\_char(round(a.sumfilesize/(1024\*1024),1))||' MB' OverallSize,
 to\_char(round(nvl(b.maxfree,0)/(1024\*1024),1))||' MB' MaxFreeExtent,
 to\_char(round(nvl(b.overallfree,0)/(1024\*1024),1))||' MB' OverallFree,
 to\_char(round((nvl(a.sumfilesize-b.overallfree,0))/(1024\*1024),1))||' MB' OverallUsed
from (select tablespace\_name, sum(bytes) sumfilesize 
 from dba\_data\_files
 group by tablespace\_name) a,
 (select tablespace\_name, max(bytes) maxfree, sum(bytes) overallfree
 from dba\_free\_space
 group by tablespace\_name) b
where a.tablespace\_name(+)=b.tablespace\_name;

Gruß
Martin

Dir auch einen schönen Gruß *ggg*
Martin

Hallo Martin :wink:

hi martin! :wink:

Gruß
Martin

Dir auch einen schönen Gruß *ggg*
Martin

diese verdammte hitze läßt nicht nur server heißlaufen :wink:

grüße,
tomh

ps: haben noch ein paar ihren arbeitsplatz in den zugegebenermaßen lauten, aber in den im haus einzigen klimatisierten serverraum verlegt? :wink:

Hallo Martin :wink:

hi martin! :wink:

Gruß
Martin

Dir auch einen schönen Gruß *ggg*
Martin

Hi Martin Tom!

ps: haben noch ein paar ihren arbeitsplatz in den
zugegebenermaßen lauten, aber in den im haus einzigen
klimatisierten serverraum verlegt? :wink:

KANNST DU BITTE ETWAS LAUTER SCHREIBEN - ICH KANN DICH KAUM VERSTEHEN - IST ZIEMLICH LAUT HIER :smile:)))

Gruß
Martin

Hallo Martin

So’n Gemecker lass ich mir jederzeit gefallen.
Ich hab das Script in der Art auch noch an einigen anderen Orten gesichtet, so neu scheint es also nicht zu sein.
Meine Lieblings DB ist eben ein biss’l gross, ich hab die 150 GB in Data und index tbs mit je 3 verschiedenen extent sizes untergebracht. Damit ich sie auch auf alten Arrays unterbringen kann, hab ich sie in 2GB datafiles gestückelt. Da ist ein Ueberblick via script nicht so einfach zu schaffen. Ich muss gestehen, ich verschaff ihn mir meist über den OEM.
Danke und Gruss
Ulrich