SPFILE, ORA-01078: failure in processing system parameters

Werbung
Oracle - Tips und Tricks
USER DEFINED EXCPEPTION beim Direktdruck Web
23.2.09 pg
Wenn das Drucken in WebTosca so konfiguriert ist, dass dem Report der Formspfad
vorangestellt wird, und wenn ohne Env-ID gearbeitet wird kann es vorkommen, dass der
Druck nicht gestartet wird, und in der Statuszeile USER DEFINED EXCEPTION erscheint.
Dann ist auf dem iAS d2kwutil nicht korrekt installiert (d2kwut60.dll nicht erreichbar), das von
WebTosca verwendet wird, um den Formspfad zu ermitteln.
ora-00845 memory_target not supported
12.2.09 rn
auf dem linux-server war ein virtuelles memory-laufwerk nach dem reboot nicht mehr
gemounted.
darum kam der fehler mit dem memory_target.
nachdem wir das rausgenommen haben, ist die db wieder gelaufen, aber nur bis ein 'kleines'
(default) sga-memory voll war. dann kam jeweils nach ein paar abfragen ein sga-fehler.
danach haben wir dieses virtuelle 7.7gb grosse linux-laufwerk (/dev/shm ) gemounted und
den parameter memory_targe wieder auf ca. 640mb gesetzt.
jetzt läuft blnh wieder normal.
http://arjudba.blogspot.com/2009/01/ora-00845-memorytarget-not-supportedon.html
Temporary Blobs sollten freigegeben werden
6.2.09 pg
Grundsätzlich sollten LOB's, die mit dbms_lob.createtemporary initialisiert wurden, mit
dbms_lob.freetemporary wieder freigegeben werden.
In PL/SQL geschieht dies automatisch bei Ende der Session.
Mit Java Code z.B. ist man für die Freigabe selber besorgt.
View: V$TEMPORARY_LOBS
http://sql-plsql-de.blogspot.com/2008/03/damit-es-keine-memory-leaks-gibt.html
Datums- und Zeitformat in XML / XMLTABLE
6.2.09 pg
Im XML gibt es ein Standardformat für Daten (YYYY-MM-DD) und für Zeitstempel (YYYYMM-DD"T"HH24:MI:SS). Gäbe auch noch eines für Teile von Sekunden.
XMLTABLE konvertiert dann richtig, wenn für ganze Tage ein DATE Feld angegeben wird,
und für Tage mit Bruchteilen ein TIMESTAMP Datentyp.
Bei XML-Inhalten, die eigentlich einen Bruchteil eines Tages beinhalten, aber in ein DATE
Feld gemappt werden,
Workflow werden nicht mehr gestartet, weil Job in Warteposition hängen bleibt
4.2.09 pg
Die Analyse des Supportfalls bei Sacom vom 4.2.09 zeigte folgendes Bild:
Grundlageninformation:
Das Job System von Oracle spannt für das Abarbeiten der Hintergrundprozesse eigene
Prozesse, jeder mit seiner Datenbanksitzung, auf. Wie viele solcher Prozesse gestartet
werden, hängt vom Parameter job_queue_processes ab, der dynamisch geändert werden
kann. Bei einer Änderung werden überflüssige, wartende Prozesse geschlossen bzw.
notwendige gestartet. Laufende Prozesse werden dabei nicht abgebaut.
Während der Nachtverarbeitung wird nach dem Start der Nachtverarbeitung die Anzahl der
Prozesse auf 0 reduziert, damit keine nebenläufigen Prozesse gestartet werden. (Der Job, in
dem die Nachtverarbeitung läuft, wird dabei nicht geschlossen).
Für den letzten Teil der Nachtverarbeitungen wird job_queue_processes auf 1 erhöht und
der Job für das Aktualisieren der Statistiken eingetragen, der in diesem einen Prozess laufen
soll. Als letzter Teilschritt davon wird job_queue_processes wieder auf den Normalwert von 2
gestellt.
Am 4.2.09 präsentierte sich die folgende Situation:
Workflow wurde nicht mehr gestartet, die Nachtverarbeitungen waren nicht gelaufen.
job_queue_processes stand auf 1
Es gab eine Job-Queue-Prozess (SID = 337) auf der Datenbank, der aber seit dem 2.2.09
19:50:53 im Wartezustand "TCP Socket (KGAS)" blockiert war.
Ein Job für das Aktualisieren der Statistiken war eingetragen, aber noch nicht gestartet
worden.
Um die Situation zu deblockieren wurde der Job für das Aktualisieren der Statistiken
gelöscht, job_queue_processes auf 2 gestellt und der Prozess 337 gekillt.
Die erweiterte Fehleranalyse ergab folgenden Hergang:
Etwas vor 2.2.09 19:50:53 wurde das Abarbeiten der Workflows gestartet, das
höchstwahrscheinlich mit PRODon begann, welches
PASB_LOGISTIC.PROD_aviundrueckm aufruft. Innerhalb dieser Prozedur wird
pasb_logistic.Copy_File_To_FTP aufgerufen, was ein guter Kandidat für den erwähnten
Wartezustand ist.
Von da an war ein Job Queue Prozess blockiert, der andere lief weiter und startete die
Nachtverarbeitungen. Als im Zug der Nachtverarbeitungen job_queue_processes wieder auf
1 gestellt wurde, war dieser eine Prozess schon durch den blockierten besetzt, deshalb lief
kein weiterer Job an.
Insbesondere lief auch Statistiken aufbereiten nicht an und das darin integrierte Hochstellen
von job_queue_processes wurde auch nicht durchgeführt.
Am 3.2.09 wurde die Situation manuell deblockiert, aber ohne genaue Ursachenanalyse und
ohne den blockierten Prozess zu killen.
Am 4.2.09 trat wiederum derselbe Zustand ein, weil der blockierte Prozess immer noch den
einen Prozess, der während der Nachtverarbeitung freigegeben wird, besetzt hielt.
Massnahmen:
Die Situation kann einfach zur Kenntnis genommen werden und bei einem erneuten
Auftreten (was ja selten sein soll) adäquat reagiert werden.
Parallel dazu sollte überprüft werden, ob der Internetzugriff innerhalb
pasb_logistic.Copy_File_To_FTP mit einen Timeout aufgerufen werden kann, damit Jobs
nicht mehr stehenbleiben.
Allenfalls kann auch ein Workflow zur Überwachung von hängengebliebenen Jobs
eingerichtet werden. Das würde dann funktionieren, wenn noch nicht alle vorgesehenen
Prozesse blockiert sind (also in der vorliegenden Situation).
Schachtsteuerung von Drucker
21.1.09 kj
Es gibt eine Utility von Oracle, mit dem aus dem Druckertreiber die Bezeichnung der
Schächte ausgelesen werden kann.
Siehe unter U:\Exes\PrinterDriverTest.
Discoverer plus zeigt kein Exportformat pdf an
16.1.09 rn
A JDK version of 1.4 or higher is required in order to export to PDF format. Since Jinitiator is
based upon JDK version 1.3 it does not support the export to PDF. Export to PDF is
available in Discoverer Viewer becuase it uses the JDK on the server, not the client-side
Java Virtual Machine (JVM).
Set up the Discoverer Server to use either Sun Java or Jinitiator version 1.4 or higher. For
details on changing the JVM used, please see Oracle® Business Intelligence Discoverer
Configuration Guide, the section titled "How to specify a different Java Virtual Machine for
Discoverer Plus".
Rückgabewert von -2147467259 beim Aufruf von ordcom.CreateObject
7.1.09 pg
Diese Fehlernummer ist eine fehlende Berechtigung für die *.dll. Das kann z.B. unter
Windows2008 auftreten.
In p:\ergodata\admin\InstallationBasket.doc ist im Kapitel 7 beschrieben, wie man mit dem
Unterhaltsprogramm für die Komponentendienste unter Windows (dcomcnfg.exe) eine
Applikation erstellen kann, damit der die Berechtigung erteilt werden kann.
Protokollhandler in Windows registrieren, für den Aufruf eines Java-Programms für
phone:
7.1.09 mc (redigiert durch pg)
Tosca startet den Telefonaufruf mit:
host('rundll32 url.dll,FileProtocolHandler phone://'||w_telefonnr);)
Damit das funktioniert, muss in der Regsitry ein Protokoll Handler regisrtriert sein. Das kann
z.B. ein *.bat, das ein Java Programm öffnet, sein (so installiert z.B. bei der Inoma; @ ist
jeweils der Standard-Eintrag unter einem Knoten in der Registry):
[HKEY_CLASSES_ROOT\phone]
@="URL:Phone Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\phone\shell]
[HKEY_CLASSES_ROOT\phone\shell\open]
[HKEY_CLASSES_ROOT\phone\shell\open\command]
@="\"U:\\Java\\JTapi\\Inoma\\JTapiCaller.bat\" \"%1\""
Konvertieren einer DB, Platform übergreifend zB. (win64bit) -> (win32bit)
oder Linux -> Windows
1.1.09 cr
-Oracle Versionen müssen übereinstimmen
-Quelldatenbank muss im read only Modus gestartet werden
1. Auf dem Quellsystem zB. ca30 (win64bit) untersuchen, ob die DB konvertiert werden kann
(die ENDIAN Formate müssen übereinstimmen)
SQL>select * from v$DB_TRANSPORTABLE_PLATFORM;
2. Auf dem Quellsystem untersuchen, ob DB externe Tabellen, BFILEs oder Directories
enthält. Diese können von CONVERT DATABASE nicht bearbeitet werden und müssen
separat behandelt, d.h. mit Betriebssystemmitteln kopiert werden:
SQL>set serveroutput on
declare
external boolean;
begin
external := dbms_tdb.check_external;
end;
/
3. Auf dem Quellsystem die DB in den read only modus bringen!
DOS>sqlplus /@ca30 as sysdba
SQL>shutdown immediate;
SQL>startup open read only;
4. Auf dem Quellsystem prüfen ob Konvertierung möglich, DB muss im read only Modus sein
SQL>set serveroutput on
declare
db_ready boolean;
begin
db_ready := dbms_tdb.check_db('Microsoft Windows IA (32-bit)');
end;
/
5. Auf dem Quellsystem RMan starten und DB konvertieren
DOS>rman target /@ca30
RMAN>convert database new database 'ORCL11G'
transport script 'D:\ora_data\db_ca30\transport\transport.sql'
to platform 'Microsoft Windows IA (32-bit)'
db_file_name_convert 'D:\ora_data\db_ca30\data' 'D:\ora_data\db_ca30\transport';
6. Auf dem Quellsystem DB wieder in read write Modus starten
DOS>sqlplus /@ca30 as sysdba
SQL>shutdown immediate;
SQL>startup;
7. Die konvertierten Dateien aufs Zielsystem kopieren
8. Auf dem Zielsystem orcl11g (win32bit) die DB klonen
STARTUP NOMOUNT PFILE=C:\app\claude\product\11.1.0\db_1\database\initORCL11g.ora
CREATE CONTROLFILE SET DATABASE "ORCL11G" RESETLOGS NOARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 4
MAXDATAFILES 128
MAXINSTANCES 4
MAXLOGHISTORY 454
LOGFILE
GROUP 1 (
'C:\app\claude\oradata\orcl11g\LOG1A.DBF',
'C:\app\claude\oradata\orcl11g\LOG1B.DBF'
) SIZE 50M,
GROUP 2 (
'C:\app\claude\oradata\orcl11g\LOG2A.DBF',
'C:\app\claude\oradata\orcl11g\LOG2B.DBF'
) SIZE 50M,
GROUP 3 (
'C:\app\claude\oradata\orcl11g\LOG3A.DBF',
'C:\app\claude\oradata\orcl11g\LOG3B.DBF'
) SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'C:\app\claude\oradata\orcl11g\ACC_DATA.DBF',
'C:\app\claude\oradata\orcl11g\ACC_IDX.DBF',
'C:\app\claude\oradata\orcl11g\SYSAUX01.DBF',
'C:\app\claude\oradata\orcl11g\SYSTEM01.DBF',
'C:\app\claude\oradata\orcl11g\TOSCA_DATA.DBF',
'C:\app\claude\oradata\orcl11g\TOSCA_DATA_G.DBF',
'C:\app\claude\oradata\orcl11g\TOSCA_IDX.DBF',
'C:\app\claude\oradata\orcl11g\TOSCA_IDX_G.DBF',
'C:\app\claude\oradata\orcl11g\UNDOTBS01.DBF',
'C:\app\claude\oradata\orcl11g\USER.DBF',
'C:\app\claude\oradata\orcl11g\USERS01.DBF',
'C:\app\claude\oradata\orcl11g\USR01.DBF'
CHARACTER SET WE8MSWIN1252;
ALTER DATABASE OPEN RESETLOGS;
9. Auf dem Zielsystem von 64bit auf 32bit migrieren
DOS>sqlplus /@orcl11g as sysdba
SQL>shutdown immediate;
SQL>startup migrate;
@ORACLE_HOME\rdbms\admin\utlirp.sql
(Dieses Skript wird verwendet, um von 32-bit auf 64-bit oder umgekehrt zu wechseln.
Es invalidiert alle PL/SQL Module (auch Trigger oder Views) und kompiliert diese
anschliessend neu)
@ORACLE_HOME\rdbms\admin\utlrp.sql
(Dieses Skript kompiliert alle PL/SQL Module (auch Trigger oder Views), die den Status
INVALID hatten)
10. Auf dem Zielsystem DB wieder neu starten
DOS>sqlplus /@orcl11g as sysdba
SQL>shutdown immediate;
SQL>startup;
11. Auf dem Zielsystem das tempfile an den TMP Tablespace hängen
SQL>ALTER TABLESPACE TMP ADD TEMPFILE
'C:\app\claude\oradata\orcl11g\temp01.dbf' SIZE 400M AUTOEXTEND OFF;
Anmerkungen:
1. Man kann die DB auch auf Ebene der Datenfiles konvertieren, dazu muss die DB aber
auch runtergefahren werden und die Datenfiles müssen zum konvertieren in ein Verzeichnis
kopiert werden:
convert datafile
'C:\app\claude\oradata\ca30\backup\ACC_DATA.DBF',
'C:\app\claude\oradata\ca30\backup\ACC_IDX.DBF',
...
from platform = 'Microsoft Windows 64-bit for AMD' to platform =
'Microsoft Windows IA (32-bit)'
DB_FILE_NAME_CONVERT = (
'C:\app\claude\oradata\ca30\backup','C:\app\claude\oradata\orcl11g');
2. Ich habe versucht mit den unter Punkt 1 konvertierten Dateien die DB zu klonen und
danach die arch. redo logs nachzufahren, das hat nicht geklappt. Die arch. redo logs konnte
man auch nicht konvertieren.
3. http://www.ordix.de/ORDIXNews/2_2006/Datenbanken/rman_convert_db.html
http://download.oracle.com/docs/cd/B19306_01/backup.102/b14194/toc.htm
Jinitiator unter Vista installieren
24.12.08 tt
1. Installation Java,
2. Installation Jinitiator
3. Datei jvm.dll vom Verzeichnis C:\Program Files\Java\jre1.6.0\bin ins Verzeichnis
C:\Programme\Oracle\JInitiator 1.3.1.22\bin\hotspot\ kopieren
CONVERT in Reports
23.12.08 pg
Wenn in Reports für Character Mode Reports mit der SQL-Funktion CONVERT Daten
zwischen verschiedenen Zeichensätzen hin- und herkonvertiert werden, muss die
Background Engine zwingend mit dem Zeichensatz der DB konfiguriert sein (NLS_LANG in
der Registry, die für die Background Engine ausschlaggebend ist). Sonst wird auch noch
zwischen Datenbank und Client eine Zeichensatzkonvertierung gemacht, und das klappt
dann nicht wie gewünscht.
24.02.09 ms : und äusserst wichtig ist, dass nach dem Import einer neuen Registry nicht nur
die Reports-Background-Engine geschlossen wird, sondern auch alle Forms. Der
Zeichensatz wird offensichtlich von Forms an die Reports-Background-Engine übergeben
(was haben wir geübt...
Core-Dump bei Call von Function mit leerer Parameter List
23.12.08 pg
Im Standard ca30 (11g) trat spontan (ab einem Stichpunkt an ohne bekannte Ursache
immer) an der Stelle
ret_ :=
pa_buchh.basiswaehrung_beziso_erm();
des Codes ein ORA-07445 auf:
ORA-07445: Exception aufgetreten: CORE Dump [pevm_CVTIE()+9] [ACCESS_VIOLATION]
[ADDR:0xB201040009] [PC:0x8D7A579] [UNABLE_TO_READ] []
In Metalink habe ich keine Informationen dazu gefunden, Flush Shared Pool hat nichts
gebracht, aber das Entfernen des leeren Klammernpaares am Schluss der Zeile löste das
Problem.
Aenderung von Systemparametern bei Verwendung eines SPFile
22.12.08 cr
alter system set job_queue_processes=0 scope=both
- der Eintrag wird im Memory und im SPFile geändert
alter system set job_queue_processes=0 scope=memory
- der Eintrag wird nur im Memory geändert
alter system set job_queue_processes=0 scope=spfile
- der Eintrag wird nur im SPFile geändert
alter system set job_queue_processes=0
- ACHTUNG: der Eintrag wird im Memory und im SPFile geändert
Wie wurde die DB gestartet, mit PFile oder SPFile ?
select decode(value, null, 'PFILE', 'SPFILE') "Init File Type"
from v$parameter where name = 'spfile';
Update aus PL/SQL mit einem Rowtype
15.12.08 pg
Mindestens seit 11g kann man folgende Updates machen in PL/SQL :
Example 5-51 Updating a Row Using a Record
DECLARE
dept_info departments%ROWTYPE;
BEGIN
-- department_id, department_name, and location_id
-- are the table columns
-- The record picks up these names from the %ROWTYPE.
dept_info.department_id := 300;
dept_info.department_name := 'Personnel';
dept_info.location_id := 1700;
-- The fields of a %ROWTYPE
-- can completely replace the table columns
-- The row will have values for the filled-in columns, and null
-- for any other columns
UPDATE departments SET ROW = dept_info WHERE department_id = 300;
END;
/
Aus: Oracle® Database PL/SQL Language Reference, Kapitel 5
Package SRW, ACLs
13.12.08 pg
Unter Oracle 11g nehmen alle Packages, die Netzwerkressourcen brauchen, Bezug auf die
ACL's (siehe Eintrag vom 17.4.08 von cr). Dazu gehört auch UTL_HTTP. Dieses wird mit
Invokers Right aufgesetzt, so dass der angemeldete Benutzer ein Zugriffsrecht auf den
Reports Server haben muss, wenn er mit dem SRW Package darauf zugreifen will.
Gemäss Doku sollte es auch möglich sein, eine ACL einer Role zu granten, im Test gegen
11.1.0.6.0 klappten allerdings nur Grants, die direkt einem Benutzer zugeteilt wurden.
Mit dem Update Schritt upd4177.sql wurde eine Tosca Standard ACL tosca.xml eingeführt.
Das Package pa_drucken wurde so angepasst, dass vor dem Aufruf des Reports Servers
eine fehlende Berechtigung erstellt wird (Tosca, unter dem PA_DRUCKEN läuft, kann das).
Zwei Details: Änderungen an ACL's müssen committed werden. Und die Berechtigung muss
immer so erteilt werden, wie auch der Aufruf geschieht, also entweder mit der IP-Adresse
oder mit dem Hostnamen, je nachdem wie der Aufruf dann geschieht.
spfile scope=both
11.12.08 rn
wenn mit spfile (nicht init.ora) gearbeitet wird und ein ora-parameter system-modifiable ist,
kann dieser mit dem befehl z.b.
alter system set sec_case_sensitive_logon = false scope=both
der parameter in der laufenden datenbank umgesetzt werden (ohne restart der db)
External Tables
02.12.08 ms/cr
Wenn die Datei eines external Tables (und damit auch das Directory) auf einem anderem
Server als dem DB-Server liegt, geht das wunderbar, indem man das DIRECTORY mit UNCPfad, also z.B. mit
CREATE OR REPLACE DIRECTORY
WASERRUECKM AS
'\\WITFIL01\DATEN\ALLGEMEIN\TOSCA_DATA\WITZIG\WASER';
anlegt. Aber leider nur in Oracle11g, unter 10g und 9i funktioniert das nicht, da kommt eine
Fehlermeldung wie KUP-04001 und/oder KUP-04063.
Oracle Anmeldung ohne Benutzer/Passwort
20.11.08 cr
Funktioniert die Anmeldung an eine DB unter dem Benutzer SYS ohne Angabe von Benutzer
und Passwort (sqlplus /@ca30 as sysdba ) nicht mehr, unter Angabe von Benutzer und
Passwort(sqlplus sys/…@ca30) aber schon noch, könnte es sein dass der Oracle Service
neu unter einem anderen Benutzer läuft.
Eine Lösung die bei mir funktioniert hat: Mit orapwd das Passwortfile neu erstellen.
Sitzungen von Tosca hängen auf 11g vorübergehend über Wochenende oder in der
Nacht
16.11.08 pg
Nach der Migration auf 11g bei Jutzler schienen die Tosca-Sitzungen immer ein wenig zu
hängen: ab einer gewissen Zeit brauchte jede Anfrage 20" oder mehr.
Das hängt mit dem Resource Manager zusammen, der mit 11g automatisch aktiviert wird.
Über das Wochenende und in der Nacht erreicht der Scheduler ein Window, das einen
Resource Plan DEFAULT_MAINTENANCE_PLAN aktiviert. Wenn so ein Resource Plan
aktiviert ist, wird der CPU-Verbrauch einer Sitzung kontrolliert; TOSCA ist in der Consumer
Group OTHER_GROUPS, und die kriegen nur 70% der CPU von dem, was das System
übrig lässt.
Erkennbar ist das unter Session Browser – Waits mit Event = resmgr:cpu quantum.
Abhilfen:
entweder wird der Owner TOSCA in die SYS_GROUP gestellt und hat damit generell mehr
Ressourcen zur Verfügung, oder der Resource Plan wird generell ausser Kraft gesetzt mit
alter system set resource_manager_plan = ''
Diese Einstellung bleibt bestehen, bis wieder ein Window mit einem Resource Plan aktiviert
wird, also generell bis man fertig ist mit der Arbeit.
Es können auch alle laufenden Sitzungen eines User mit
DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_USER ('TOSCA',
'SYS_GROUP');
oder eine bestimmte laufende Sitzung mit
DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_SESS ('<sid>', '<serial>', 'SYS_GROUP');
einer anderen Gruppe zugeordnet werden (SYS_GROUP ist die Gruppe mit der höchsten
Priorität).
SELECT over a db_link requires a commit
6.11.08 jw
> Why does it seem that a SELECT over a db_link requires a commit after execution ?
>
> Because it does! When Oracle performs a distributed SQL statement Oracle reserves an
entry in the rollback segment area for the two-phase commit processing. This entry is held
until the SQL statement is committed even if the SQL statement is a query.
disco4 gegen 10g oder 11g gibt im administrator "summary management not
available..."
27.10.08 rn
When trying to run summary for any business area from Discoverer Administration Edition,
the following error occurs.
"Summary Management not available because : this user has no privilege or Quota to create
a materialized view in the current Schema. External Summary registration not available
because : this User has no privilege or quota to create a materialized view in the current
schema."
wenn discoverer 4 gegen eine 10er oder 11er db läuft, fehlt dem disco die berechtigung
'create any snapshot'. diese wird bei 10/11g automatisch mit 'create any materialized view'
ersetzt und wird somit für disco nie erreicht. dazu kann man unter dem benutzer disco
folgenden view anlegen:
CREATE VIEW USER_SYS_PRIVS AS SELECT * FROM SYS.USER_SYS_PRIVS UNION SELECT
USER, 'CREATE ANY SNAPSHOT', 'NO' FROM DUAL;
damit erhält der disco dann die berechtigung.
zudem muss disco alle berechtigungen aus dem aktuellen 'create_user_disco.sql' haben.
=> gem. metalink: Note:434401.1
Lange Wartezeit (15") beim Öffnen eines Tosca-Forms
22.10.08 pg
Auf dem dyna2003-ts ging es bei einigen Parameterforms lange, bis diese geöffnet waren.
Die DB-Sitzung war in dieser Zeit nicht aktiv, und filemon zeigte auch nicht, dass Forms auf
das Öffnen eines Files gewartet hat. Es wurde aber ein Log-Eintrag in sqlnet.log
geschrieben, und zwar versuchte Forms gem. diesem Eintrag, auf ca16 zuzugreifen. CA16
ist auf diesem Server in HKLM\Oracle LOCAL= eingetragen.
Der Grund für diesen Zugriff ist immer noch schleierhaft, auf alle Fälle hing es damit
zusammen, dass im Hint von ds$ctrl.version noch "dd.mm.rr kuerzel" stand statt eines
Datums. Forms hat dann einen Aufruf von to_date('dd.mm.rr','dd.mm.rr') gemacht, zwar in
einem Exception Handler, aber irgendwie wird halt unter diesen Umständen versucht, eine
DB-Connection zu erstellen.
Automatic Memory Management (Amm) in Oracle 11g
20.10.08 cr
see metalink note: 443746.1
Oracle Verzeichnis löschen (\bin\oci.dll lässt sich nicht löschen)
28.08.08 cr
Just stop the Distributed Transaction Coordinator Service before deleting oci.dll.
In Reports zwischen erster- und Folgeseite unterscheiden
26.08.08 pg
Oft ist es schwierig, in Reports Elemente, die nur auf der ersten bzw. nur auf der Folgeseite
angedruckt werden, nur mit Print Object On zu steuern. Da hilft ein Trick, der darauf basiert,
dass ein Format-Trigger eines Objeks nur feuert, wenn es aufgrund von Print Object On
auch wirklich auf der Seite gedruckt wird:
 Packaged Variable anlegen, z.B. w_ersteseite boolean ; in Package Spec. PARAM
 In einem Format Trigger eines Objekts, das einfache Verhältnisse hat, ganz oben im
Beleg steht (bzw. im expliziten oder impliziten Anchor-Graf) und auf der ersten Seite
sicher gedruckt wird, die Variable setzen. Das kann auch ein unsichtbares DummyObjekt sein.
 Ebenso in einem Objekt, das nur auf den Folgeseiten gedruckt wird, die Variable
zurücksetzen.
 Variable im Format-Trigger von Objekten weiter unten auf der Seite auswerten.
DB starten bei Jutzler nach Verlust einer Platte
15.08.08 pg
Situation: 9i Datenbank
drive e:
Datafiles
1. Log-Members (log1a.dbf .. log4a.dbf)
1. Controlfile (ctl1jut2.ora)
drive f:
2. Log-Members (log1b.dbf .. log4b.dbf)
2. Controlfile (ctl2jut2.ora)
archivierte Redo Logs
Disk f: fällt aus, bei einem Logswitch kann zuerst das ctl2jut2.ora nicht mehr geschrieben
werden, dann kann der Archiver das Redo log nicht archivieren. PMON fährt die Datenbank
vor dem Anlaufen von Backup und Statistiken um ca. 21:00 herunter.
DB soll am nächsten morgen gestartet werden. Alles auf dem fehlenden f: soll auf d:
rekonstruiert werden. f: ist nicht mehr zu lesen.
Vorgehen:
Filesystem
Dateien kopieren
init.ora
DB Starten
Redo Logs verlagern
(immer noch im
Mount Status)
auf d: die Directory-Struktur wie auf f: nachgebaut (ora_data mit ctrl,
redo und arch)
e:ctl1jut2.ora in d:ctl2jut2.ora kopiert (neues zweites Controlfile aus
noch verfügbarem ersten kopiert).
e:log1a.dbf bis log4a.dbf in d:log1b.dbf bis d:log4b.dbf kopiert (BLogmembers aus A-Logmembers kopiert).
Laufwerk vom 2. Controlfile von f: auf d: geändert (Pfade wurden ja
identisch erstellt und mussten nicht angepasst werden).
Laufwerk von archive_log_dest von f: auf d: geändert
alter database mount
kein Fehler, alle Datafiles (select * from v$datafile) online
alter database rename file 'F:\ORA_DATA\DB_JUT2\REDO\LOG1B.DBF' to
'D:\ORA_DATA\DB_JUT2\REDO\LOG1B.DBF'
bis
alter database rename file 'F:\ORA_DATA\DB_JUT2\REDO\LOG4B.DBF' to
'D:\ORA_DATA\DB_JUT2\REDO\LOG4B.DBF'
Anzeige der Redo Log Members: select * from v$log
Anzeige der Redo Log Files: select * from v$logfile
Anlaufen von Job
Queue verhindern
DB öffnen
Statistik-Jobs um eine
Nacht verschieben
alter system set job_queue_processes = 0
alter database open ;
keine Fehler
Job-Nummern der gewünschten Jobs raussuchen.
Muss als TOSCA geschehen.
begin
for rec in (
select job,next_date
from dba_jobs
where job in (384,15949,122)
) loop
dbms_job.next_date(rec.job,rec.next_date+1) ;
end loop ;
end ;
Background-Jobs
anlaufen lassen
alter system set job_queue_processes = 4
export im pdf - format und druck aus discoverer plus/viewer
5.8.2008 rn
der druck aus discoverer im a4-quer-format funktioniert jetzt (gem. hr. metzger).
der export als pdf im discoverer-viewer geht auch.
das problem beim export aus dem discoverer-plus ist unten beschrieben.
hier noch der schluss meines service-requests bei oracle betr. export von daten im pdf-format aus
dem discoverer.
05-AUG-08 07:45:07 GMT
(Update for record id(s): 241948800)
UPDATE
======
Hello Roland,
Thank you for the update.
I am inactivating this Service Request, as I have received confirmation from you that this
issue is now resolved.
As said above, Export to PDF and Print are separate functions. Only Print uses the Page
Setup values.
If you want to format your PDF file to print landscape, etc. you need to use a third-par
ty PDF editor to achieve those options.
You can also use File -> Print to print to a PDF generator. This will maintain the Page Setup
options.
Logging im JDeveloper und mit OC4J
28.07.2008/sr
Um das Logging mit Logger.global.log(...) nicht nur auf der Konsole, sondern auch in den
Logfiles sichtbar zu machen, muss man den JDeveloper und OC4J folgendermassen
konfigurieren
1) Die Datei j2ee-logging.xml suchen
steckt bei mir lokal zu JDeveloper z.B. unter
C:\Programme\programming\jdev10_1_3_3\jdev\system\oracle.j2ee.10.1.3.41.57\embedded
-oc4j\config
2) einen Handler und einen Logger definieren, z.B
<log_handler name="global-handler"
class="oracle.core.ojdl.logging.ODLHandlerFactory">
<property name="path" value="C:/_peg/log/global"/>
<property name="maxFileSize" value="10485760"/>
<property name="maxLogSize" value="104857600"/>
<property name="encoding" value="UTF-8"/>
<property name="supplementalAttributes"
value="J2EE_APP.name,J2EE_MODULE.name,WEBSERVICE.name,WEBSERVICE_POR
T.name"/>
</log_handler>
....
<logger name="global" level="WARNING"
useParentHandlers="false">
<handler name="global-handler"/>
<handler name="console-handler"/>
</logger>
3) OC4J neu starten, damit die Konfiguration eingelesen wird
Auf einem Standalone-OC4J befindet sich die Datei unter
..\oc4jroot\j2ee\home\config\j2ee-logging.xml
Anstelle von Logger.global lassen sich auch spezifische Logger für eine Klasse definieren:
1) Statisches Attribut Logger deklarieren, z.B.
private static Logger mylog =
Logger.getLogger(SucheServiceImpl.class.getName());
2) Loggen mit
mylog.warning(this.getLoggingInfo()
+ "Exception in executeProfiSuche\n")
Vorteil: es wird die Klasse mitgelogged, z.B.
<MODULE_ID>shop.peg.model.SucheServiceImpl</MODULE_ID>
Quellen zum Logging unter JDeveloper/IAS/ADF:
Oracle® Application Development Framework
Developer’s Guide For Forms/4GL Developers
Kapitel 24.4.2 und Anhang A.8
Allgemeine Quellen
http://www.onjava.com/lpt/a/2406
http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/overview.html
Fehler beim Erstellen eines Statistik-Tables
16.7.08 ms
In tosca erstellen wir ja die Statistik-Tables mit ‚create stat_table as select * from stat_view’.
Nun hatten wir schon 2 Mal das Problem, dass der ‘select * from stat_view’ falsche Resultate
lieferte (Witzig, Abt, beide Oracle10g), wenn er aber z.B. auf eine Kunden-Nr. eingeschränkt
wurde, die Resultate absolut korrekt waren. Heisst, die falschen Resultate sind Folge eines
Oracle-Bugs.
Nun ist dieser Fall bei Leica wieder aufgetreten. Umsatz in KUNDSTAT bei einem Kunden
falsch, wenn der stat_kundstat_rg-View auf diesen Kunden eingeschränkt wurde, war der
Umsatz absolut richtig. Der Umsatz war auch in der Leica-DB bei uns mit den gleichen Daten
wie Leica absolut richtig.
Der Fehler kann korrigiert werden, indem die in der View angesprochenen Tables mit
COMPUTE analysiert werden (analyse table aufkopf compute statistics). Die Procedure
PR_TOSCA_OPTIMIZE hat nichts gebracht.
REP-51002 - Bindung an Reports Server <rep_server> nicht möglich
3.7.08 pg
Die Standardinstallation der Developer Suite 10g und 10gR2 starten ihre Reports Server
Instanzen selbständig, wenn über das Reports Server darauf zugegriffen wird (z.B.
http://localhost:8890/reports/rwservlet/showjobs?server=rep_madagaskar)
Dabei wird die Konfiguration automatisch erstellt, wenn der Server mit dem bestimmten
Namen zum ersten Mal angesprochen wird.
Wenn der Host nicht am Netzwerk angeschlossen ist, gibt es verschiedene
Fehlermöglichkeiten. Erfahrungsgemäss muss nach jeder Änderung im Netzwerk alles neu
gestartet werden (OC4J und rwdiag, z.B).
Anmerkung: die Reports Server werden erst gestartet wenn versucht wird, darauf
zuzugreifen (z.B. mit dem Request an das rwservlet).
a)
die Reports Server werden gestartet und gleich wieder beendet. Das erkennt man im
rwserver.log in <Dev-Home>\reports\logs\<repsesrver_name> (ganz unten im File, oben im
File steht die Kopie der Konfiguration):
***
***
***
***
***
***
***
2008/5/23
2008/5/23
2008/5/23
2008/5/23
2008/5/23
2008/5/23
2008/5/23
7:15:0:499 -- Reports Server wird hochgefahren
7:15:5:98 -- Reports Server started up engine rwURLEng-0
7:15:6:111 -- Reports Server started up engine rwEng-0
7:45:5:852 -- Shutting down engine rwURLEng-0
7:45:5:852 -- Reports Server shut down engine rwURLEng-0
7:45:6:853 -- Shutting down engine rwEng-0
7:45:6:853 -- Reports Server shut down engine rwEng-0
In dem Fall zeigt rwdiag –findall folgende Einträge:
C:\Oracle\DS10gR2\BIN>rwdiag -findall
Broadcast mechanism used to locate servers
-----------------------------------------Channel address = 228.5.6.7
Channel port
= 14021
REP-50503 No server found in the network
rwdiag –monitor zeigt gar nichts.
Das geschieht z.B., wenn das Netzwerkkabel abgehängt ist.
b)
die Reports Server werden gestartet, aber das Servlet kann trotzdem keine
Verbindung bauen.
Im Logfile steht nur der Start der Reports Server (nach dem Trace der Konfiguration)
*** 2008/7/3 5:46:59:468 -- Reports Server wird hochgefahren
*** 2008/7/3 5:47:12:609 -- Reports Server started up engine rwURLEng-0
*** 2008/7/3 5:47:23:390 -- Reports Server started up engine rwEng-0
C:\Oracle\DS10gR2\BIN>rwdiag -findall
Broadcast mechanism used to locate servers
-----------------------------------------Channel address = 228.5.6.7
Channel port
= 14021
(1) Name = rep_madagaskar : Type = server : Host = MADAGASKAR
rwdiag –monitor zeigt drei Anfragen und drei Antworten:
Broadcast mechanism used to locate servers
-----------------------------------------Channel address = 228.5.6.7
Channel port
= 14021
Response Packet
ServerName
=
CorrelationID =
SenderID
=
2cc:-7fff
Duplicate
=
rep_madagaskar
1215119641251
ServerName: rep_madagaskarVMID: a3582b9a364cd90b:1e2ca7:11ae99a8
false
Type
= FULL
Add. Info
= Type = server : Host = MADAGASKAR
------------- **** --------------Request Packet ServerName
= rep_madagaskar
CorrelationID
= 1215129798179
SenderID
= client
Duplicate
= false
Type
= FULL
------------- **** --------------Response Packet ServerName
= rep_madagaskar
CorrelationID = 1215129798179
SenderID
= ServerName: rep_madagaskarVMID: a3582b9a364cd90b:1e2ca7:11ae99a8
2cc:-7fff
Duplicate
= false
Type
= FULL
Add. Info
= Type = server : Host = MADAGASKAR
Das ist z.B. der Fall, wenn der Loopback Adapter installiert ist und läuft, aber die kabellose
Netzwerkverbindung nicht deaktiviert ist.
c) alles ok.
wie oben, aber das Reports Servlet zeigt nicht die Fehlermeldung REP-51002 an, sondern
effektiv die Job-Queue.
Das ist dann der Fall, wenn nur gerade der Loopback Adapter aktiviert ist.
Der Loopback, Adapter ist bei XP dabei und kann wie normale Hardware installiert werden:
Systemsteuerung – Hardware – weiter – die Hardware wurde bereits angeschlossen – neue
Hardware hinzufügen – Hardware manuell wählen – Netzwerkadapter – Microsoft –
Loopback Adapter. Danach eine fixe IP-Adresse konfigurieren.
Man kann sich das so vorstellen: jeder Partner am Descovery-Mechanismus entscheidet sich
für den erstbesten Transportdienst, egal, ob der funktioniert oder nicht. Wenn es nicht
derselbe ist, hören die grandios aneinander vorbei.
Discoverer plus mit falscher sortier reihenfolge nls_sort binary
20.06.08 rn
betr. der sortierung:
du musst den discoverer link zum start des web-discoverer-plus noch um einen parameter
nls_sort=binary erweitern (siehe beispiel).
http://leiias.leidom.local:7779/discoverer/plus?nls_sort=binary
dann sollte die reihenfolge wieder zahlen-dann-buchstaben sein.
In der discoverer-desktop-version:
betr. sort-reihenfolge:
da muss in der registry unter ‚BiToolsHome1’ (oder ähnlich)
nls_sort binary
nls_lang german_america.xxxxxx
stehen.
Belegter Process speicherToad
12006.08 rn
Query mit der man feststellen kann, wieviel Platz der Prozess wirklich besetzt hat
select s.sid, ss.serial#, ss.username, ss.osuser, n.name, s.value
from v$statname n,v$sesstat s, v$session ss
where n.STATISTIC# = s.STATISTIC#
and n.name like 'session%memory%'
and s.sid = ss.sid;
Toad, Quest views werden automatisch formatiert
10.06.08 rn
wenn die views im toad auf dem register ‚script’ schon automatisch formatiert werden, gibt
es auf desem tab oben links ein formatter-icon. in diesem gibts auf dem tab ‚view’ eine
checkbox ‚format’. diese aus-checken.
Änderungen im Locking-Verhalten 10g -> 11g
27.05.08 pg
Bekannterweise werden bei einem Update einer Detail-Row (AUFZEILE) die Master-Tables,
deren FK nicht indexiert ist in der Detail Table, auch gelockt (z.B. LAGER).
Unter 10g führt also
update aufzeile
set bez = bez
where zeilenr = (select max(zeilenr) from aufzeile)
zu folgenden Locks:
MODE_HELD MODE_REQ OBJECT_NAME
UESTED
Row-X (SX)
None
AUFZEILE
Row-S (SS)
None
FIBUGRP
Row-S (SS)
None
KAMPAGNE
Row-S (SS)
None
LAGER
Row-S (SS)
None
LAGERPLATZ
(Beim Insert into sieht die Situation analog aus, nur sind viel mehr Tables betroffen).
AUFZEILE kriegt einen Row-Exclusive Lock. Gemäss Concepts Guide:
A row exclusive table lock (also called a subexclusive table lock, SX) generally indicates that
the transaction holding the lock has made one or more updates to rows in the table
Die Master-Tables kriegen einen Row-Share Lock:
A row exclusive table lock (also called a subexclusive table lock, SX) generally indicates that
the transaction holding the lock has made one or more updates to rows in the table.
A row share table lock is the least restrictive mode of table lock, offering the highest degree
of concurrency for a table.
Permitted Operations: A row share table lock held by a transaction allows other transactions
to query, insert, update, delete, or lock rows concurrently in the same table. Therefore, other
transactions can obtain simultaneous row share, row exclusive, share, and share row
exclusive table locks for the same table.
Prohibited Operations: A row share table lock held by a transaction prevents other
transactions from exclusive write access to the same table ...
Unter 11g gibt dasselbe Statement folgende Locking-Situation:
MODE_HELD MODE_REQUESTED OBJECT_NAME
Row-X (SX)
None
AUFZEILE
Row-X (SX)
None
FIBUGRP
Row-X (SX)
None
KAMPAGNE
Row-X (SX)
None
LAGER
Row-X (SX)
None
LAGERPLATZ
Also: für jede Tabelle Row Exclusive Locks.
Konsequenzen daraus sind nicht bekannt, mit Ausnahme der Interpretation von LockingSituationen.
Wenn eine Row aus einer Master Table gelöscht werden soll oder wenn der PK der Master
Table updated werden soll, braucht das Locks auf die Child-Tabellen. Unter 10g ist das
vorübergehend ein Share-Lock, der dann in einen Row-Share Lock konvertiert wird. Unter
11g braucht es einen Row-Exclusive Lock, und gem. Doku einen vorübergehenden Share
Row Exclusive (SSX) Lock.
Auch hier sind die unmittelbaren Konsequenzen nicht bekannt. In Oracle Database Concepts
findet ist der Locking Mechanismus im Zusammenhang mit nicht indexierten FK's im Kapitel
Data Integrity.
TM- und EURO Zeichen
23.05.08 pg
Problem: DB ist unter WE8ISO8859P1, Client/Server Forms laufen auch unter diesem
Zeichensatz (was eigentlich falsch ist, die sollten WE8MSWIN1252 haben).
In dieser Konstellation können Zeichen (wie z.B. das TM, Alt 0153) in die DB gespeichert
werden, die eigentlich im Zeichensatz der DB gar nicht definiert sind. Das, weil wegen der
(vermeintlich) identischen Zeichensätze von DB und Forms Session gar keine Konvertierung
passiert.
Wird der String dann in einer Umgebung manipuliert, wo eine Konvertierung stattfindet,
landet man unweigerlich beim unbekannten Symbol (ein umgekehrtes Fragezeichen bei
uns). Und verliert dann schlussendlich Information, weil alle diese Zeichen auf das
unbekannte Symbol geändert werden. Kann übrigens auch bei einem Export/Import
passieren.
Lösung: DB-Zeichensatz auf WE8MSWIN1252 ändern (siehe Eintrag vom 18.4.07 weiter
unten), und die Forms-Clients anpassen (in der Registry muss NLS_LANG =
GERMAN_AMERICA.WE8MSWIN1252 gesetzt werden).
Siehe Note Note:228882.1 im Metalink.
V$SQL und V$SQL_SHARED_CURSOR
19.05.08 pg
In der Column von Tom Kyte im Oramag 5/6 2008 erklärt er den Inhalt von v$sql und
v$sql_shared_cursor.
In v$sql ist jedes gecachte SQL-Statement, wobei sich SQL_ID auf das Statement selber
bezieht. Ein einziges Statement kann aber mehrfach vorkommen, weil es unter
verschiedenen Situationen geparsed wurde. Das gibt dann mehrere child_number (0, 1, 2,
...).
In v$sql_shared_cursor gibt es Erklärungen zu den verschiedenen Versionen, z.B. liefert
select child_number,
bind_mismatch,
optimizer_mode_mismatch
from v$sql_shared_cursor
where sql_id = '<sql_id aus v$sql>'
eine Info, ob der neue Cursor erstellt wurde, weil die Typen der Bind Variables
unterschiedlich waren (bind_mismatch), oder weil unter einem anderen Optimizer Mode
(optimizer_mode_mismatch) gearbeitet wurde.
http://www.oracle.com/technology/oramag/oracle/08-may/o38asktom.html
Select * from sysdate – 1/24/12 from dual (5 Minuten von sysdate abziehen)
30.04.08 cr
Die (für mich) komplizierte Umrechnung um zB. von sysdate 5 Minuten abzuziehen entfällt
wenn man es so macht:
select sysdate - interval '5' minute from dual;
geht mit second, minute, hour, day, month, year
Keine Mehrwertsteuer gerechnet (Einkauf, E100), Datumsproblem
24.04.08 jh/ms
via E100 ist es möglich, folgendes Datum in die DB zu speichern: 22.4.0208
die manuelle Eingabe sieht so aus: 22.4.208
Lösung: Datum korrigieren und neu bewerten; dann stimmts.
Kopie einer 11er-Datenbank auf ein 10er-Datenbank
18.04.08 kj
Eine Oracle-DB Rel. 11g kann weder mit Kopie der DB-Files (klonen), noch mit
Export/Import, noch mit Datapump auf einen Server mit Rel. 10g kopiert werden.
Lösung: Die 11er-Datenbank muss mit der älteren Version von Export exportiert werden
(vom Rel. 10g-Server aus mit Connect auf die 11er-DB).
Fine-Grained Access to Network Services in Oracle11g / ORA-24247
17.04.08 / cr
ORA-20212:
ORA-06512: in "TOSCA.SRW", Zeile 664
ORA-29273: HTTP-Anforderung nicht erfolgreich
ORA-06512: in "SYS.UTL_HTTP", Zeile 1674
ORA-24247: Netzwerkzugriff von Zugriffskontrollliste (ACL) abgelehnt
Description:
Oracle allows access to external network services using several PL/SQL APIs (UTL_TCP,
UTL_SMTP, UTL_MAIL, UTL_HTTP and UTL_INADDR), all of which are implemented using
the TCP protocol. In previous versions of the database, access to external services was
effectively an on/off switch based on whether a user was granted execute permissions on a
specific package or not.
Oracle 11g introduces fine grained access to network services using access control lists
(ACL), allowing control over which users access which network resources, regardless of
package grants.
Solution (für Instanz FUER gemacht):
--- Create an Access Control List (ACL)
-BEGIN
DBMS_NETWORK_ACL_ADMIN.create_acl (
acl
=> 'utlpkg.xml',
-- Name of, wird abgelegt in http://host:port/sys/acls/
description => 'Normal Access',
principal => 'TOSCA',
-- Database user or role
is_grant => TRUE,
-- Privilege is granted, TRUE or FALSE
privilege => 'connect',
-- Network privilege to be granted or denied,
-- connect /resolve
-- connect: UTL_TCP, UTL_HTTP, UTL_SMTP, and UTL_MAIL
start_date => null,
end_date => null);
COMMIT;
END;
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.add_privilege (
acl
=> 'utlpkg.xml',
principal => 'TOSCA',
is_grant => TRUE,
privilege => 'connect',
position => NULL,
start_date => NULL,
end_date => NULL);
COMMIT;
END;
/
SELECT any_path FROM resource_view WHERE any_path like '/sys/acls/%.xml';
--- Assign an ACL to a Network
-BEGIN
DBMS_NETWORK_ACL_ADMIN.assign_acl (
acl
=> 'utlpkg.xml',
host
=> '*',
lower_port => NULL,
upper_port => NULL);
COMMIT;
END;
/
SELECT acl,principal,privilege,is_grant,
TO_CHAR(start_date, 'DD-MON-YYYY'),TO_CHAR(end_date, 'DD-MON-YYYY')
FROM
dba_network_acl_privileges;
see:
http://www.oracle-base.com/articles/11g/FineGrainedAccessToNetworkServices_11gR1.php
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_networkacl_adm.htm
#BABCJDGC
Unvollständig definierter TYPE nach impdp (Datapump)
11.04.08 pg
Nach einem Import mit impdp eines Exports, der Types enthielt in eine 10g 10.2.0.1.0
Datenbank, deren Parameter compatibility auf 10.1.0.2.0 gestellt war, war der Type
VARCHAR2ARRAY unvollständig vorhanden (vielleicht entsteht das noch in anderen
Situationen).
Symptome:
Table droppen, die diesen Type verwendet:ORA-00600[kqludp2]
Create or Replace Type <...>
ORA-00955: name is already used by an existing object
Drop Type <...>
ORA-04043: object VARCHAR2ARRAY does not exist
In sys.obj$ gibt es einen Eintrag unter dem Namen VARCHAR2ARRAY, dessen Type# = 10
= undefined ist. Undefined ist nicht dokumentiert, aber die Bedeutung von Type# wird in der
Source von sys.dba_objects klar.
Lösung: Eintrag direkt aus sys.obj$ löschen (Achtung: solche Manipulationen können ins
Auge gehen; produktive DB vorher sichern!!!). Nachher unbedingt alter system flush
shared_pool, weil sonst in der SGA noch Info über dieses Objekt gecashed ist.
Import von Object Types mit impdp
11.04.08 pg
Object Types haben in der DB eine OID$, das ist offenbar ein weltweit gültiger Schlüssel für
den Type. Pro Datenbank muss der eindeutig sein. Wenn ein Schema in der einen DB
exportiert und in der anderen DB importiert werden soll, ist es richtig, dass die OID$ erhalten
bleibt. Nicht so, wenn der Typ zurück in dieselbe DB erfolgen soll, dann geht es nicht. In dem
Fall muss man dem impdp mit dem Parameter transform=OID:n:TYPE mitteilen, dass die
Typen neue OID$ erhalten sollen.
Symptome ohne diesen Parameter (beim Import des Types):
ORA-39083: Object type TYPE failed to create with error:
ORA-02304: invalid object identifier literal
Failing sql is:
CREATE TYPE "TOSCAK"."VARCHAR2ARRAY"
OID '8D999820926C11D78F260001026B50C8' as
varray (50) of varchar2(4000)
Die OID ist eben schon vergeben an TOSCA.VARCHAR2ARRAY, siehe sys.obj$.
Wenn der Type schon vorhanden ist, aber Daten von TOSCA.TELEKOMM in
TOSCAK.TELEKOMM importiert werden sollen:
ORA-31693: Table data object "TOSCAK"."TELEKOMM" failed to load/unload and is be
ing skipped due to error:
ORA-02354: error in exporting/importing data
ORA-39779: Typ "TOSCAK"."VARCHAR2ARRAY" nicht gefunden oder Konvertierung zu let
zter Version ist nicht möglich
(das ist das Problem, weil ein Wert aus TOSCA.VARCHAR2ARRAY in
TOSCAK.VARCHAR2ARRAY gespeichert werden soll, und das geht offenbar nur, wenn die
OID$ dieser Typen übereinstimmt.
Übrigens: mit remap_schema beim impdp (also Import von einem in ein anderes Schema)
werden auch die Typen remappt. Aus
create table tosca.telekomm (
attachments tosca.varchar2array
)
wird in jedem Fall
create table toscak.telekomm (
attachments toscak.varchar2array
)
Ich kenne keinen Weg, den impdp oder dbms_datapump so zu parametrisieren, dass
create table toscak.telekomm (
attachments tosca.varchar2array
)
daraus wird.
ORA-39001: invalid argument value bei dbms_datapump
05.04.08 pg
Das ist eine eher unspezifische Fehlermeldung, wenn bei dbms_datapump.add_file
entweder ein Directory angegeben wird, das nicht existiert, oder das Dumpfile im
Zielverzeichnis schon existiert. Das Logfile wird interessanterweise ohne Meldung
überschrieben.
Verbindung zu Oracle wenn kein Tnsnames zur Verfügung steht
04.04.08 cr
sqlplus tosca/…@"(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =
135.100.30.30)(PORT = 1522)) (CONNECT_DATA = (SERVICE_NAME = dsiba)))"
oder
sqlplus tosca/[email protected]:1522/dsiba
SPFILE, ORA-01078: failure in processing system parameters
02.04.08/cr
Seit Oracle11g benutzen wir nur noch das SPFILE als init Parameterdatei, siehe dazu:
P:\tosca\Doku\ TC-DB-starten_mit_PFILE_bzw_SPFILE-v1.doc
Aendert man einen Parameter mit alter system set sga_target=1000M scope=spfile wird
keine Validierung durchgeführt und wenn eine fehlerhafte Einstellung gemacht wurde kommt
eine ORA-01078 Meldung beim Start der DB...die DB lässt sich nicht mehr starten !
Lösung:
-anmelden (service starten)
-create pfile=’c:\temp\pfile.ora’ from spfile;
-ändern des fehlerhaften Parameter in pfile.ora
-create spfile from ’c:\temp\pfile.ora’;
-startup
Mailsender findet Queue nicht
12.03.08/tt
Folgende Meldung wird vom Mailsender angezeigt:
Fehler beim Öffnen der HTTP Queue JMS-190: Queue TOSCA.UPLOAD not found
Da dieser Mailsender mit dem User MAILER installiert wurde, folgende Bereichtigung setzen:
begin
dbms_aqadm.grant_queue_privilege('DEQUEUE','TOSCA.UPLOAD','MAILER') ;
end ;
/
Korrekten Fehlerstack im Exception Handler abrufen
11.03.08 pg
Ab 10g gibt es DBMS_UTILITY.FORMAT_ERROR_BACKTRACE, das einem im Exception
Handler den Ort, wo die letzte Exception aufgetreten ist, liefert. Siehe pr_indiv im ca20.
Protokoll einer Tuningsession bei Jutzler
27.02.08 pg
Verwendete Techniken: TOAD Session Browser.
Denkbar wäre es, die "Hot Segments" im OEM zu Rate zu ziehen, oder zu schauen, was der
SQL Advisor im OEM zu bieten hätte.
-- sehr viele db_file_scattered_read waits in Sessions von Mailsender
select count(*)
from email_aq
-- 13k
select /*+ FIRST_ROWS */
tab.rowid, tab.msgid, tab.corrid, tab.priority, tab.delay,
tab.expiration, tab.retry_count, tab.exception_qschema,
tab.exception_queue, tab.chain_no,
tab.local_order_no, tab.enq_time,
tab.time_manager_info, tab.state, tab.enq_tid,
tab.step_no,
tab.sender_name, tab.sender_address, tab.sender_protocol,
tab.dequeue_msgid
from TOSCA.EMAIL_AQ tab where q_name = :1 and state = :2 order by q_name, state, enq_time,
step_no, chain_no, local_order_no for update skip locked
Plan
SELECT STATEMENT
HINT: FIRST_ROWSCost: 191
Bytes: 945,675
Cardinality: 7,005
3 FOR UPDATE
2 SORT ORDER BY Cost: 191 Bytes: 945,675 Cardinality: 7,005
1 TABLE ACCESS FULL TOSCA.EMAIL_AQ Cost: 48 Bytes: 945,675
Cardinality: 7,005
-- Laufzeit für ein paar Blöcke
select '1'
from aufzeile
where zeilenwertexmw = -0.00009
and
rownum <= 100000
-- 82" für 193k Blöcke
begin
dbms_stats.delete_table_stats('TOSCA','EMAIL_AQ') ;
end ;
select /*+ FIRST_ROWS */
tab.rowid, tab.msgid, tab.corrid, tab.priority, tab.delay,
tab.expiration, tab.retry_count, tab.exception_qschema,
tab.exception_queue, tab.chain_no,
tab.local_order_no, tab.enq_time,
tab.time_manager_info, tab.state, tab.enq_tid,
tab.step_no,
tab.sender_name, tab.sender_address, tab.sender_protocol,
tab.dequeue_msgid
from TOSCA.EMAIL_AQ tab where q_name = :1 and state = :2 order by q_name, state, enq_time,
step_no, chain_no, local_order_no for update skip locked
Plan
SELECT STATEMENT HINT: FIRST_ROWSCost: 3 Bytes: 4,938 Cardinality: 6
3 FOR UPDATE
2 TABLE ACCESS BY INDEX ROWID TOSCA.EMAIL_AQ Cost: 3 Bytes: 4,938
Cardinality: 6
1 INDEX RANGE SCAN NON-UNIQUE TOSCA.AQ$_EMAIL_AQ_I Cost: 2 Cardinality:
1
-- Laufzeit für ein paar Blöcke
select '1'
from aufzeile
where zeilenwertexmw = -0.00009
and
rownum <= 100000
-- keine Verschnellerung
-- zweiter Fall
SELECT *
FROM archivlog
WHERE doktyp = 'AB'
AND status = 1
AND aufnr = :b1
AND folgenr = :b2
AND rgempf = :b3
Plan
SELECT STATEMENT CHOOSECost: 2,180 Bytes: 194 Cardinality: 1
1 TABLE ACCESS FULL TOSCA.ARCHIVLOG Cost: 2,180 Bytes: 194
Cardinality: 1
-- es gibt keinen Index auf archivlog.status
create index arl_status_doktyp on archivlog(status, doktyp, aufnr, folgenr) tablespace
tosca_idx
-- ging zuerst nicht wegen lock
select *
from dba_locks l, dba_objects o
where o.object_id = l.lock_id1
-- lock jetzt nicht mehr da
begin
DBMS_STATS.GATHER_table_STATS(ownname => user, tabname => 'ARCHIVLOG', method_opt => 'for all
indexed columns size 254');
end ;
SELECT
FROM
WHERE
AND
AND
AND
AND
Plan
SELECT
*
archivlog
doktyp = 'AB'
status = 1
aufnr = :b1
folgenr = :b2
rgempf = :b3
STATEMENT CHOOSECost: 2 Bytes: 194 Cardinality: 1
2 TABLE ACCESS BY INDEX ROWID TOSCA.ARCHIVLOG Cost: 2
Bytes: 194
Cardinality: 1
1 INDEX RANGE SCAN NON-UNIQUE TOSCA.ARL_STATUS_DOKTYP Cost: 1
Cardinality: 1
-- dieses Statement führte zu einem Full Table Scan auf arteigenschaft
SELECT *
FROM arteigenschaft
WHERE artnr = :b2 AND eigenschaft = :b1
select count(*)
from arteigenschaft
-- 84k
--> Discoverer Abfrage abändern, damit die Eigenschaft des Artikels aus der eigens dafür
vorgesehenen MView geholt wird.
-- Alternative wäre der Zugriff über art_id anstelle von artnr auf arteigenschaft gewesen,
die indexiert ist.
Performanceproblem beim Dequen von Messages
12.02.08 pg
Bei Schoch wurde das rekursive Statement, das beim Dequeuen der nächsten Message aus
dem Mailsender abgesetzt wird, mit einem Full Table Scan umgesetzt:
select /*+ FIRST_ROWS */
tab.rowid, tab.msgid, tab.corrid, tab.priority,
tab.delay,
tab.expiration, tab.retry_count, tab.exception_qschema,
tab.exception_queue, tab.chain_no, tab.local_order_no, tab.enq_time,
tab.time_manager_info, tab.state, tab.enq_tid, tab.step_no,
tab.sender_name, tab.sender_address, tab.sender_protocol,
tab.dequeue_msgid
from
TOSCA.EMAIL_AQ tab where q_name = :1 and state = :2 order by q_name, state,
enq_time, step_no, chain_no, local_order_no for update skip locked
Der Metalink Forum Beitrag 95406.999 brachte uns auf die Spur: ist offenbar ein weiter
verbreitetes Problem, um das sich Oracle drückt. Löschen der Optimizer Statistict ist der
einzige Workaround, das haben wir mit
begin
dbms_stats.delete_table_stats(user,'EMAIL_AQ') ;
end ;
gemacht und es hat geholfen.
Reports Distribution
10.02.08 pg
Wenn die Jobs bei der Reports Distribution (Mail mit bursting) immer vor dem ersten *.PDF,
das generiert werden sollte, hängenbleiben, kann das an Kommentartags im XSLT, das dem
Distribution File zugrunde liegt, liegen. Die Kommentare sieht man zwar im Destination File,
das erzeugt wird, nicht.
Interpretation von Wait States
08.02.08 pg
TOAD zeigt für jede Session den aktuellen Wait State an. Leider werden dabei Details
unterdrückt, so dass folgende Abfrage informativer ist:
select sid,event,seq#,p1,p1text,p2,p2text,p3,p3text,
wait_time,seconds_in_wait,state
from V$session_wait
where SID =:sid
wait_time und seconds_in_wait müssen dabei speziell interpretiert werden:
WAIT_TIME
A nonzero value is the session's last wait time. A zero value
means the session is currently waiting (except in Oracle 9.0
where Bug 2117360 occurs).
0 - the session is currently waiting
-2 - duration of last wait is unknown
-1 - last wait was <1/100th of a second in duration
>0 - duration of last wait in 1/100th second units (10mS)
<-2 - The internal time has probably wrapped
SECONDS_IN_WAIT
When WAIT_TIME = 0 then this shows the number of seconds
spent in the current wait (3 second granularity on most
platforms / versions).
This value should NOT reset on events with timeouts.
Eg: The "enqueue" waitevent times out and re-waits (SEQ# increments) but
SECONDS_IN_WAIT shows the cumulative time in wait.
Unfortunately this column does get reset in versions 9201-9203 inclusive due to Bug
2803772 .
Siehe Metalink Note Note:43718.1
Bei einem latch wait kann aufgrund von p2 die Ressource, auf die gewartet wird, festgestellt
werden:
select latch#, name from v$latchname where latch# = 98;
Standalone Reports Server für WebTosca
10.01.08 pg
 Überprüfen, ob in der Registry reports_tmp korrekt gesetzt ist (z.B. c:\temp)
 Instanz des Reports Servers starten mit c:\oracle\dev10gR2\bin\rwserver
server=rep_demo

(Die Konfigurationsdateien werden dabei vom Reports Server beim 1. Start
selbständig geschrieben)



Im Parameter 15 Text 2 den Namen des Reports Servers eintragen (gross/klein
sensitiv), z.B. rep_demo.
In Parameter 15 >Text 1 den URL für den Zugriff auf das Reports Servlet anpassen
(z.B: http://localhost:8890/reports/rwservlet)
Zur Sicherheit sollte mit einer ENVID gearbeitet werden: in Parameter 15 Text 4 eine
Env-ID eintragen (DEMO), die im Konfigurationsfile des entsprechenden Reports
Servers (C:\oracle\DS10gR2\reports\conf\demo.conf) definiert werden kann:
<environment id="DEMO">
<envVariable name="REPORTS_PATH" value="C:\Tosca\Demo\Forms10g\"/>
</environment>

Danach Reports Server durchstarten
Diagnosemöglichkeiten, um auf den Reports Server zuzugreifen:
<ora_home>\bin\rwdiag
Für die Überwachung der Job Queue gibt es im Menu ein eigenes Programm.
Auf dem Demobook klappte das Auffinden des eigenen Reports Server mit Broadcasting
nicht. Dazu musst der Naming-Mechanismus auf den ORB umgestellt werden (in
<ora_home>\reports\conf\rwnetwork.conf die Zeile
<namingService name="Cos" host="localhost" port="14021"/>
aktivieren und Hostname/Port eintragen.
Links für Oracle
26.11.07 pg
http://ora-<99999>.ora-code.com
http://www.revealnet.com/pipelines/dba/index.asp (unabhängige Seite)
http://tahiti.oracle.com/ (Oracle allgemein)
http://www.orafaq.com/ (Quest)
http://www.jlcomp.demon.co.uk/ (Ora_Guru 2)
http://asktom.oracle.com (Ora_Guru 1)
http://www.oracle.com/technology/index.html (Oracle)
ORA-01017 in Forms gegen 11g
22.11.07 pg
Gemäss http://forums.oracle.com/forums/thread.jspa?threadID=546443&tstart=75 defaultet
die Datenbank 11g zu Case sensitiven Passworten. Forms meldet sich natürlich immer in
Grosschrift an. Auszug aus dem Thread:
Oracle 11g database has a new parameter SEC_CASE_SENSITIVE_LOGON (case
sensitive password enabled for logon) - default is TRUE.
Forms built-in "OPEN_FORM (... SESSION)" uses password in capital letters.
For example, if user/password is "scott/tiger", Forms uses "SCOTT/TIGER".
We can do this:
- alter user scott identified by TIGER
- or set SEC_CASE_SENSITIVE_LOGON to FALSE
ORA-Errors im WEB
18.11.07 ms
mit der Eingabe von ‚ora-99999.ora-code.com’ kann im Web direkt eine Beschreibung eines
Oracle-Errors angezeigt werden (wenn mal keine Doku zur Hand ist);
Beispiel: ora-06502.ora-code.com
Stored Outlines für die Beeinflussung von Execution Plans bestimmter Statements
08.11.07 pg
Beispiel (nur für 10g): Bei Hasena geht der Zugriff auf alle Aufträge mit Kundref like '%wert%'
langsam, auch obschon ein Index AK_KUNDREF auf KUNDREF angelegt wurde. Der
Execution Plan könnte geändert werden, um dies zu verschnellern, was aber nicht im Form
für alle Instanzen gemacht werden darf.
Lösung: ein Public Stored Outline hinterlegen, das den Execution Plan für dieses Statement
festlegt.
Doku: Oracle® Database Performance Tuning Guide
10g Release 2 (10.2), Kapitel 18 Using Plan Stability.
Zur Vorbereitung: Toad so umstellen, dass nur eine Session verwendet wird (Oracle –
Transactions – Execute Queries in Threads abstellen)
Ebenfalls muss der Parameter use_stored_outlines auf true gesetzt werden, wenn die
Outlines von den übrigen DB-Sitzungen verwendet werden sollen. Das ist aber gemäss Doku
kein Initialization Parameter; der muss z.B. im Startup Script oder in einem Database Trigger
explizit gesetzt werden.
1. Public Stored Outline erzeugen basiernd auf dem Statement aus dem Session Browser:
create or replace outline aufkopf_kundref on
SELECT
/*+ first_rows */
ROWID, ak.aufnr, ak.folgenr, ak.aufdat, ak.aufart, ak.status,
…
ak.liefinfo, ak.info
FROM aufkopf ak
WHERE (
ak.kundref like :1
)
ORDER BY aufnr DESC, folgenr DESC
2. Public Outline in Private Outline kopieren. Die Kopie wird in den Temporary Tables
system.ol$, system.ol$hints abgelegt (die Public Outlines in outln.ol$ usw):
create private outline aufkopf_work from aufkopf_kundref
3. Tabelle system.ol$hints editieren (z.B. in dem ein zweites private outline erzeugt wird mit
den gewünschten Optimizer Hints, und dann ol$hints kopiert wird):
create private outline aufkopf_soll on
SELECT
/*+ first_rows no_index(ak ak_pk) */
ROWID, ak.aufnr, ak.folgenr, ak.aufdat, ak.aufart, ak.status,
…
ORDER BY aufnr DESC, folgenr DESC
delete from system.ol$hints
where ol_name = 'AUFKOPF_WORK'
update system.ol$hints
set ol_name = 'AUFKOPF_WORK' where ol_name = 'AUFKOPF_SOLL'
4. Geändertes Outline Testen
-- outline refreshen
exec DBMS_OUTLN_EDIT.REFRESH_PRIVATE_OUTLINE ('AUFKOPF_WORK');
alter session set use_private_outlines=true
Original Query ausführen und Execution Plan betrachten
Wenn OK:
5. Public Outline updaten
create or replace outline aufkopf_kundref from private aufkopf_work
ClassCastException in Struts/JSP Anwendungen
05.11.07 pg
Beim Webshop von Schoch hatten wir plötzlich ohne vorgänige Programmänderung die
Situation, dass aber einer bestimmten Zeit, während der der Shop lief, für gewisse Seiten nur
noch Errorstacks mit einer ClassCastException ausgegeben wurden. Die Analyse zeigte,
dass es immer das c:include Tag war, und dass das immer dann der Fall war, nachdem
dieses Tag einmal in der Laufzeit des Shops auf eine FileNotFound Exception getroffen war.
In diesem Fall war es der Include für die französische Aktionsseite im login.jsp. Workaround
wurde keiner gefunden.
Logging eines Listeners abstellen
11.10.07 pg
Bei 2W füllte das listener.log nach und nach den ganzen Application Server.
Das Logging des Listeners kann in listener.ora mit
logging_<listener_name>=off
abgestellt werden.
Bsp: logging_listener=off, wenn der Listener grad per Zufall listener heisst.
In lsnrctl kann mit set und show Information über die aktuelle Einstellung gesetzt und geändert
werden. Ausserdem kann mit reload die geänderte Konfiguration des Listener.log neu
geladen werden, ohne den Listener abstellen zu müssen.
Tnsnames bei laufendem Oracle Application Server (ias2) ändern
01.10.07 cr
NetManager unter Programme/ Oracle - OraHome1/ Configuration and Migration Tools
starten. Benutzer: cn=orcladmin, Kennwort: siehe Tech.Kundeninfo unter
dynasoft,Webserver,IAS2
Beispiel für On Database Trigger
25.09.07 pg
mit folgendem Trigger wurde bei Bemo erreicht, dass jeder neu erstellte Benutzer ein
vordefiniertes Passwort erhält, wegen dem SSO:
create or replace trigger tosca.pw_vergeben after create on database
when (sys.dictionary_obj_type = 'USER')
-- neu angelegte User, deren PW gleich ist wie der Username, auf ein konstantes Passwort
stellen (für SSO)
declare
w_username varchar2(30) ;
w_pw varchar2(200) ;
procedure ins_job
is
w_job pls_integer ;
w_values varchar2(200) ;
w_sql varchar2(4000) := 'declare ' || chr(10) ||
'
w_values varchar2(200); ' || chr(10) ||
'
w_valuesident varchar2(200); ' || chr(10) ||
'begin ' || chr(10) ||
'
select password ' || chr(10) ||
'
into w_values ' || chr(10) ||
'
from dba_users ' || chr(10) ||
'
where username = ''' || w_username || ''' ; ' || chr(10) ||
'
execute immediate ''alter user "' || w_username || '" identified by "' || w_username ||
'"'' ; -- PW umstellen auf Username ' || chr(10) ||
'
select password ' || chr(10) ||
'
into w_valuesident ' || chr(10) ||
'
from dba_users ' || chr(10) ||
'
where username = ''' || w_username || ''' ; ' || chr(10) ||
'
if w_values = w_valuesident then ' || chr(10) ||
'
-- PW war gleich Username. Umsetzen ' || chr(10) ||
'
execute immediate ''alter user "' || w_username || '" identified by knuraf19'' ; ' ||
chr(10) ||
'
else ' || chr(10) ||
'
-- PW war ungleich Username. Wieder zurückstellen ' || chr(10) ||
'
execute immediate ''alter user "' || w_username || '" identified by values '''''' ||
w_values || ''''''''; ' || chr(10) ||
'
end if ; ' || chr(10) ||
'end ; ' ;
begin
-- alter user asynchron machen, im after create trigger geht es nicht.
-- dbms_output.put_line(w_sql) ;
dbms_job.submit(w_job,w_sql,null,null,true) ;
end ;
begin
w_username := sys.dictionary_obj_name;
w_pw := sys.des_encrypted_password; -- das nützt nichts, keine Doku gefunden wie das
verschlüsselt ist.
ins_job ;
end ;
/
zu viele discoverer prozesse / sesssions plus und viewer
25.09.07 rn
unter
U:\Technet\BI-Tools\disco\discoverer_viewer zu viele discoverer prozesse.doc
ist der sr-verkehr mit oracle für dieses problem bei agt, ulm protokolliert
Listener startet nicht unter anderem Konto als Local Service
21.09.07 pg
Bei iba muss die DB und der Listener unter einem anderen Konto als Local Service laufen
gelassen werden, wegen dem Zugriff auf fremde Server.
Wenn das Konto, unter dem der Listener gestartet wird, nicht Member der lokalen
Administrators ist, stoppt der Listener gleich nach dem Start wieder.
Mit LSNRCTL sieht man den folgenden Fehler Stack:
LSNRCTL> start
tnslsnr wird gestartet: Bitte warten...
TNS-12537: TNS: Verbindung beendet
TNS-12560: TNS: Fehler bei Protokolladapter
TNS-00507: Verbindung beendet
32-bit Windows Error: 109: Unknown error
ORA-03113 end-of-file on communication channel
14.09.07 ms
Auf AUFZEILE wurde der Check-Constraint für die Column VORNACHHER mit CHECK
(VORNACHHER IN (3, -1, 0, 1)) aufgesetzt. Wenn nun ein select mit where-clause auf
VORNACHHER gemacht wurde, erschien die obige Fehlermeldung. Es ist ein
dokumentierter Oracle-Bug, dass die Werte in VORNACHHER IN (....) aufsteigend sein
müssen, in diesem Fall also CHECK (VORNACHHER IN (-1, 0, 1, 3)).
Achtung, in Case ist die Reihenfolge wohl richtig definiert, beim Generieren des DDL aus
Case ist die Reihenfolge der Werte aber zufällig.
DB-Service unter User in Active Directory 2003 aufsetzen
13.09.07 pg
Bei iba für 10.1.2.0.1 musste ich es am 12.9.07 so machen, damit die DB unter einem
Domain Admin lief (für Zugriff auf andere Server durch utl_file), und trotzdem noch das
automatische Login für Startup/Shutdown/Export möglich war.



Benutzer im Active Directory einrichten
Diesen Benutzer in die LOKALE Gruppe ORA_DBA aufnehmen (bei iba musste es
die lokale Gruppe sein, und es ist auch so dokumentiert)
DB-Dienst umstellen, damit er unter dem Konto des neuen Benutzers läuft.
ACHTUNG: das Konto muss mit der alten Notation <Domain>\<Benutzer> und nicht
etwa mit der neuen <Benutzer>@<Domain> angegeben werden. Ansonsten kommen
Fehler wie ORA-01031 Insufficient Privileges oder ORA-12638: Credential retrieval
failed. Tückischerweise ist das Verhalten mit sqlplus und sqlplusw unterschiedlich: im
einen Fall kommt der Fehler schon bei set instance, im anderen Fall kann eine
Connection erstellt werden, aber beim Zugriff auf die DB kommen dann
Fehlermeldungen. Basiert aber alles auf demselben Problem.
spfile.ora anstelle von init.ora
18.08.07 rn
init-ora-parameter ändern wenn spfile.ora im einsatz ist, d.h. kein init.ora, das im
texteditor geändert werden kann:
alter system set utl_file_dir = `*’ scope = spfile
restart der db.
Damit sieht man ob PFILE oder SPFILE in Einsatz:
SQL> show parameters spfile;
NAME
TYPE
VALUE
------------------------------------ ----------- ---------------------------spfile
string
/opt/oracle/product/10.2/db_1/
dbs/spfilejohntest.ora
Aenderung utl_file_dir beim nächsten db start:
SQL> show parameter utl_file_dir;
NAME
-------------------------------------utl_file_dir
SQL> alter system set utl_file_dir=*
TYPE
VALUE
----------- -------------------------string
scope=spfile;
System altered.
ORA-25153 in Alertlog und z.B. bei dbms_stats.gather_table_stats
11.08.07 pg
In @dsschule hatten unterschiedliche User unterschiedliche TEMPORARY_TABLESPACES
(TEMP und TMP).
Für den Temp-Tablespace TMP gab es ein Datafile, für den TEMP aber nicht.
Das ergab bei verschiedenen Gelegenheiten den o.g. Fehler.
Ein alter user <user> temporary tablespace tmp für alle User, die TEMP hatten, löste das
Problem. Danach konnte der Tablespace TEMP gedropt werden.
FRM-92101 beim Login
09.08.07 pg
Bemo macht Tosca Logins mit SSO. Falls im SSO das Passwort des DB-Users falsch
hinterlegt ist, kommt nicht "invalid username or password" wie normalerweise, sondern die
Forms Session crasht mit der obgenannten Fehlernummer.
Im Forms Server wird in <OraHome2>\forms\trace ein Tracefile geschrieben, mit folgendem
Anfang:
[08/09/07 09:42:44 W. Europe Daylight Time]::Client Status [ConnId=0, PID=4688]
>> ERROR: Abnormal termination, Error Code: C0000005 ACCESS_VIOLATION
======================= STACK DUMP =======================
Fault address: 61757328 01:000A6328
Module: C:\Oracle\OraHome2R2\bin\oraclient10.dll
System Information:
Operating System: Windows NT Version 5.2 Build 3790 Service Pack 1
Command line: frmweb server webfile=HTTP-0,0,1,tosca,135.100.31.139
FORM/BLOCK/FIELD: MENUBILD:<NULL>.<NULL>
Last Trigger: ON-ERROR - (In Progress)
Last Builtin: FIND_ALERT - (Successfully Completed)
...
Debugging zeigt, dass die Programmausführung im ON-Error Trigger landet, und dass von
dort der Alert nicht angezeigt werden kann (ist ja wohl noch etwas früh).
Vorläufig keine Lösung gesucht, da nicht überall so.
Ev. hängt es damit zusammen, dass Username/Passwort wohl stimmen, aber der DBAccount gelockt ist.
Info zur Steuerung der Zugriffsberechtigung auf Personal-Listen
31.7.07 uro
Ab Release 6.1.3.d wird die Zugriffsberechtigung auf Personal-Listen über die Tabelle
prs.benutzerpriv gesteuert.
Sie wurde dazu um die Felder OSUSER und OSDOMAIN erweitert.
Bei bestehenden Installationen werden alle Anpassungen im Patch 3d vorgenommen. D.h.
die OSDOMAIN wird ab bas.appl_param (appl_id = 'MOS' und parameter = 'DOMAIN')
abgefüllt.
Falls der Name des Betriebssystembenutzers vom Datenbankbenutzer abweicht ist
zusätzlich das Feld OSUSER abzufüllen (Per 31.07.2007 nur über Toad möglich).
Besonderheiten:
Bei Firma IBA wurden alle Betriebssystembenutzer auf <vorname>.<nachname>@iba.ch
abgeändert.
Beispiel: [email protected]
Damit die Zugriffsrechte für dieser Benutzer korrekt umgesetzt werden können (via
file_prod.pl) muss das '@'-Zeichen im Feld OSUSER mit einem '\'-Zeichen chiffriert werden.
Beispiel: regula.niederhaeusern\@iba.ch
Grund: Der Login regula.niederhaeusern ist über 20 Zeichen lang und muss deshalb mit der
Endung '@iba.ch' angegeben werden.
Fehler: ORA-04062: signature of package "TOSCA.TOSCA_SQL"
19.7.07 rn
wenn der oracle-paramter nicht so eingetstellt ist, kann dieser fehler vorkommen.
REMOTE_DEPENDENCIES_MODE=SIGNATURE
nicht so eingetstellt ist, kann ora-04062 fehler vorkommen. zu beachten beim installieren
einer linux-db, damit init.ora diesen parameter bekommt.
FRM-40106: Keine navigierbaren Objekte im Zielblock
11.7.07 cr/sr
Ruft man ein Tosca Form auf und klickt danach auf das ‚Auge’ (Feld ausblenden, unsichtbar
machen) in der Symbolleiste dann kommt man danach nicht mehr in dieses Form.
Korrigieren in der Tabelle BILDGEST, suchen nach dem letzen Eintrag in mutdat und diesen
löschen.
Mail Sender ‚rennt’ nicht mehr
07.06.07 pg (jh)
Fehlermeldung im Dos-Prompt "Could not create the Java virtual
machine"
c:\Oracle\product\10.2.0\db_1\jdk\jre\bin hat genau 1 Datei gefehlt:
hpi.dll zu finden unter: P:\tosca\InstallTOSCA2
Tosca unter Vista
Java Version 1.5 installieren
zu finden unter U:\Exes\Java Runtime\1.5\jre-1_5_0_11-windows-i586-p.exe. unbedingt
automatische updates von java deaktivieren.
Zeilenumbrüche beibehalten bei Text, der im Browser eingegeben wird (bei TAR/SR,
Forum)
18.5.07 pg
Normalerweise gehen Zeilenumbrüche verloren, wenn in einem Forum-Beitrag auf einer
HTML-Seite Text in ein Feld eingegeben und anschliessend auf einer anderen Seite
dargestellt wird.
Wenn man den Text in ein <pre> ... </pre> Tag einpackt, kann das verhindert werden.
Enterprise Manager 10g Database Control, Host Credentials
9.5.07 cr
Kommt bei der Eingabe von Username und Password folgende Meldung:
Connection to host as user … failed: ERROR: Wrong password for user
folgendes testen:
go to control panel/administrative tools
a. click on "local security policy"
b. click on "local policies"
c. click on "user rights assignments"
d. double click on "log on as a batch job"
e. click on "add" and add the user
bei mir stand dynasoft\claude statt neu ds\claude
ORA-12638 beim anmelden an oracle
…tt
Kommt vor wenn der Benutzer/Computer in der Domäne unbekannt ist eventuell weil er in
einer anderen Domäne ist. Erste Möglichkeit ist eine Vertrauensstellung zwischen den
beiden Domänen herzustellen. Zweite Möglichkeit ist das File sqlnet.ora anzupassen, Eintrag
SQLNET.AUTHENTICATION_SERVICES= (NTS)
ändern auf
SQLNET.AUTHENTICATION_SERVICES= (NONE)
Bei uns hab ich das sqlnet.ora auf dem ias angepasst, somit ist es möglich sich auf dem
dyna2003-05 mit nolog anzumelden (somit funktioniert auch noch der db-Export u.w.s ohne
das man die Anmeldung mitschicken muss).
ORA-12631 beim anmelden an oracle
23.4.07 cr
...etwas glück hats schon gebraucht… den oracle service nicht unter dem vorgeschlagenen
account@domain sondern unter domain\account starten.
Euro zeichen wird nicht angezeigt/gedruckt, character set ändern
18.4.07 rn
bei einigen installation wird kein euro-zeichen in der db gespeichert sondern an dessen stelle
ein umgekehrtes fragezeichen ausgegeben. Das problem kann sein, dass die db mit dem
falschen zeichensatz aufgesetzt wurde. WE8ISO8859P1 speichert z.b. das euro-zeichen
nicht. Man kann diesen zeichensatz einfach in WE8MSWIN1252 umwandeln. Achtung: nicht
alle lassen sich in alle umwandeln.
Info dazu im metalink unter Note:257722.1
Für dieses beispiel hier hats folgendermassen funtkioniert:
in sqlplus
connect sys/...@... As sysdba
shutdown immediate;
startup restrict open;
alter database character set WE8MSWIN1252;
shutdown immediate;
startup open;
that’s it!
Nachtrag 30.11.08 cr, aus der 10.2er Doku:
You can no longer change the database character set or the national character set using the
ALTER DATABASE statement. Please refer to Oracle Database Globalization Support Guide for
information on database character set migration.
PageDef erzeugen für JSP-Seite
20.3.07/sr
Gilt für: ADF mit JSF in JDeveloper 10.1.3.1
Bei der Einbindung von Regions ist es zwingend, dass für die Seite, welche die Region
enthält, eine PageDef vorliegt, auch wenn gar kein Databinding nötig ist.
Vorgehen, um PageDef zu erstellen:
Rechtsklick auf JSP-Seite - Go to Page Definition –
Frage, ob diese neu erstellt werden soll -> Yes
Discoverer job schedule, arbeitsmappen planen
19.3.07 rn
wenn im discoverer arbeitsmappen geplant werden (schedule workbook), dann wird zu einer
festgelegten zeit mit festgelegten wiederholungsintervallen ein workbook aufbereitet und
unter einem definierbaren namen abgelegt. intervall, selektironskriterien und name des
workbooks kann mittels eines wizzards festgelegt werden. das workbook ist dann wie ein
‚snapshot’ in der datenbank abgelegt und kann somit natürlich viel schneller abgerufen
werden. voraussetzung ist, dass der benutzer disco (oder der benutzer, unter welchem das
‚arbeitsmappen planen’ ausgeführt wird) folgende rechte hat:
1. im discoverer-administrator unter werkzeug/berechtigungen ‚arbeitsmappen planen’
zuweisen
2. sowie alle rechte die in p:\tosca\sql\create_user_disco.sql hinterlegt sind. diese
müssen als sys ausgeführt (granted) werden
folgendes vorgehen, wenn im discoverer arbeitsmappen geplant werden sollen:
start des wizzards: plus: werkzeuge/arbeitspläne verwalten, beim discoverer-desktop :
datei/arbeitsmappen verwalten/planungsmanager. dann mit ‚planen’ durch den wizzard.
Reports Server Job bleibt stehen wenn sehr gross
14.3.07 pg
Im OEM unter Repors Server – Engine Parameters kann in der Einstellung JVM-Options mit
–Xms512m –Xmx512m die Memory Zuteilung für eine Reports Engine konfiguriert werden.
512 Mega scheint ein tragfähiger Wert zu sein.
Oracle ODBC Treiber installieren
13.03.07
Zu finden unter U:\Drivers\odbc_oracle
Lokal ein Verzeichnis C:\instantclient erstellen. Beide Zip-Files entpacken und in diesem
Ordner ablegen. Datei C:\instantclient\odbc_install.exe mit doppelklick ausführen. Pfad bei
den Umgebungsvariablen mit C:\instantclient erweitern. Unter
Systemsteuerung/Verwaltung/Datenquellen (ODBC) kann die Verbindung erstellt werden.
Treibername ist Oracle in Instantclient 10_1. Beispielkonfig: TNS Service Name:
//135.100.30.30:1522/d2w2
JDeveloper 10.1.3.1 wirft beim Öffnen StackFlowError
SR 5.3.07
Vorgehen (http://forums.oracle.com/forums/thread.jspa?messageID=1638132&#1638132):
1) JDeveloper schliessen
2) Take backup of jdev\system\oracle.ide.10.1.3.39.84\preferences.xml
3) Edit preferences.xml
4) Search for node: lruFiles
5) Then delete every Item node that contains the following:
<editor>oracle.jdevimpl.history.HistoryAddin</editor>
bei mir war es
<editor>oracle.jdeveloper.vcs.versionhistory.VersionHistoryAddin</editor>
6) Save the file
7) Startup JDev.... with no problems
PS: Es handelt sich um einen Bug, der rein theoretisch in Version 10.1.3 behoben wurde
Mit ADF aktuellen Zeitstempel in Date-Feld abfüllen
SR 5.3.07
Achtung: neu braucht es kein Timestamp-Feld mehr!
import oracle.jbo.domain.Date;
...
row.setLetztzugdat(new Date(new java.sql.Timestamp(System.currentTimeMillis())));
row.setLogoutdat(new Date(new java.sql.Timestamp(System.currentTimeMillis())));
JInitiator stürzt ab, wenn Windows Live Toolbar in IE geladen ist
pg 23.1.07
Bei Bemo war an einem PC im IE die Windows Live Toolbar installiert. Damit hat sich der IE
nach jeder Eingabe der SSO Daten verabschiedet, immer dann, wenn der JInitiator hätte
geladen werden sollen. Ausblenden der Toolbar (Ansicht – Symbolleisten) im IE half.
Alternative (nicht ausprobiert): Tosca mit Sun Plugin konfigurieren anstatt mit JInitiator, siehe
Metalink Note:368218.1
Oracle Bug: enq_time one hour ahead of sysdate
cr 17.01.07
When enqueing a message on a queue table the enqueue_time of the queue table is one
hour ahead of the time returned by sysdate. This began to occur after the system clock
changed due to daylight savings time. The problem persists after instance startup and
shutdown. The only way to solve the problem is drop and recreation of the queue table and
queue. All queues are affected by the problem.
Tool für die Erstellung von dll's
mc 16.1.07 (eingetragen durch pg)
z.Bsp. um Windows DLL's mit Webutil anzusprechen weil Webutil nur C-Calls und keine
Pascal-Calls beherrscht und dann eine Wrapper DLL nötig ist:
http://www.bloodshed.net/
Ist relativ schlank (10MB) und man kann schnell eine DLL erstellen.
(Ich habe damit die Wrapper DLL für die Stadt Winterthur gemacht, die müssen Programme
auf dem Client minimieren/maximieren/schliessen und PDF's automatisch ausdrucken)
Reports, (Komma, Punkt) Germanien
JH. 05.01.2007
Damit auch Reports weiss, dass in Deutschland ,. anstatt ., angedruckt wird, muss folgender
Parameter in der Registry gesetzt sein:
USER_NLS_LANG: GERMAN_GERMANY.WE8ISO8859P1
(das alles im Client/Server Betrieb; was der IAS braucht .. sorry, sobald ich es weiss, wird’s
hier nachgeführt)
Pipelined Functions brauchen
PG. 18.12.2006
Bei PEG bestand die Anforderung, bei einer Hierarchical View noch eine "Nachbearbeitung"
zu machen, in diesem Fall die Anzahl der Artikel auf jeden Gliederungsknoten
hochzurechnen.
Dazu eignet sich eine Pipelined Function, die das Resultat einer Query entgegennimmt,
gewisse Berechnungen macht und die gewünschten, veränderten Rows nach und nach
herausgibt.
Eigentlich sollte es möglich sein, das Resultat der Query mit Hilfe eines Ref Cursors in die
Function hineinfliessen zu lassen, aber unter 9.0.4.0.2. lief das nicht stabil (ora-600 [kokbnp2]
[904]).
User Definded Type mit der Record Struktur, die zurückgegeben werden soll. Das muss ein
Object Type sein; ein Type in einem Package hat nicht funktioniert:
CREATE OR REPLACE
type obpg_katgliederung_erw as object (
KATGLIEDERUNG NUMBER(10)
,
KATALOG
NUMBER(6)
,
PARENT
NUMBER(10),
…
ebene
number(8),
anzartikel
number(8)
) ;
/
Nested Table machen, die auf diesem Object Type basiert:
CREATE OR REPLACE type tapg_katgliederung_erw is table of
obpg_katgliederung_erw ;
/
Eine Function definieren, die das gewünschte Ergebnis liefert:
function katalog_gefiltert (
p_stichwortmarke in katgliederung.katgliederung%type,
... -- Parameter
) return tapg_katgliederung_erw pipelined
IS
-- das Stichwort, das den Katalog
cursor cur …
rec obpg_katgliederung_erw := obpg_katgliederung_erw(null, …
null) ; -- leeren Record anlegen
begin
open cur (p_stichwortmarke,p_katalog) ;
loop
fetch cur into rec.KATGLIEDERUNG, … rec.anzartikel ;
… berechnungen
if – die Row soll zurückgegeben werden
pipe row (rec) ;
-- record als Resultat zurückgeben
end if ;
exit when cur%notfound ;
end loop ;
close cur ;
return ;
-- am Schluss zwingend ein Return ohne Rückgabewert.
end ;
Die Abfrage:
select t.KATGLIEDERUNG, t.KATALOG, ... t.KATSEIT,t.ebene, t.anzartikel
from table(katalog_gefiltert (...)) t ;
In JSPX-Seite XHTML-konformes CSS generieren
SR 15.12.2006
<f:verbatim escape="false">
<style type="text/css">
/* <![CDATA[<![CDATA[]]> */
body {
font-family: ${bindings.Peg_WebfunktionalitaetViewSkinfontfamily};
}
/* <![CDATA[]]]]>> */
</style>
</f:verbatim>
Das erzeugt auf der Webseite den gewünschten Output
<style type="text/css">
/* <![CDATA[ */
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
}
/* ]]> */
</style>
So kompliziert ist es, weil ein einfaches <![CDATA[ von JDeveloper wieder herausgeputzt
wird (weshalb ist mir schleierhaft).
Deshalb muss es CDATA seinerseits in <![CDATA[..]]> gesetzt werden.
Desgleichen das Schlusstag von CDATA, allerding muss > ausserhalb stehen, weil es sonst
CDATA schliesst.
Discoverer hinter Firewall
pg 5.12.06
Das Java Plugin vom Discoverer kann direkt mit dem Discoverer Server über JPDA
kommunizieren, allerdings nicht durch Firewalls durch. Für diesen Fall muss im Enterprise
Manager – Middle Tier – Discoverer – Plus – Kommunikationsprotokolle das HTTP Tunneling
aktiviert werden.
JDev 10.1.3 hängt beim Start
pg 4.12.06
Kann an einem der Files, das im Editor geöffnet ist, liegen.
Diese werden folgendermassen gelöscht:
in C:\Programme\Oracle\jdev1013\jdev\system\oracle.ide.<version>\preferences.xlm das
Tag
<Item>
<Key>editors-options</Key>
<Value class="oracle.ide.editor.EditorsOptions">
<editorsData/>
<lruFiles>
…
</lruFiles>
ersetzen durch ein leeres lruFiles:
<lruFiles/>
am 29.1.07 musste in
C:\Programme\Oracle\jdev1013\jdev\system\oracle.ide.<version>\windowinglayout.xml
noch die Tags <dockingPositions><WEST><box><box><leafBox><dockable> mit den ID's
ApplicationNavigatorWindow.ApplicationNavigatorName
und
SystemNavigatorWindow.SystemNavigatorName
ausgeblanked werden (Childs löschen, <dockable ... >[childs]</dockable> durch <dockable
.../> ersetzen) zurückgesetzt werden.
Und dasselbe Vorgehen mit
<editorPositions>
Reports Server erkennt nicht, wenn Engine geschlossen wurde
pg 24.11.06
Reports Engines unter iAS werden nach 50 Jobs geschlossen. Bei Bemo trat der Fall auf,
dass der Reports Server im Nachhinein noch versucht hat, diese einem Job zuzuweisen.
Umstellen von Secure Report auf Unsecure hat das Problem gelöst (TAR 5324868.993).
Umstellung:
1. Remove security tag from reports server:
a. back up rep_ias_orahome2.conf
b. modify rep_ias_orahome2.conf by changing:
........
<security id="rwSec" class="oracle.reports.server.RWSecurity">
<!--property name="securityUserid" value="%PORTAL_DB_USERNAME%/%PORTAL_DB_PASSWORD%@%PORT
AL_DB_TNSNAME%" confidential="yes" encrypted="no"/-->
<property name="oidEntity"
value="reportsApp_ias.bemo_ag.ch_F3466F714AB011DABFBF450844534848"/>
</security>
<destination destype="oraclePortal" class="oracle.reports.server.DesOraclePortal">
<!--property name="portalUserid"
value="%PORTAL_DB_USERNAME%/%PORTAL_DB_PASSWORD%@%PORTAL_DB_TNSNAME%" confidential="yes"
encrypted="no"/
-->
</destination>
<destination destype="ftp" class="oracle.reports.plugin.destination.ftp.DesFTP">
<!--property name="proxy" value="proxyinfo.xml"/-->
</destination>
<destination destype="WebDav" class="oracle.reports.plugin.destination.webdav.DesWebDAV">
<!--property name="proxy" value="proxyinfo.xml"/-->
</destination>
<!-- By default server will use rwnetwork.conf as network config file
Use this element to override the same -->
<!--networkConfig file="rwnetwork.conf"></networkConfig-->
<job jobType="report" engineId="rwEng" securityId="rwSec"/>
<job jobType="rwurl" engineId="rwURLEng" securityId="rwSec"/>
........
to:
..........
<!--security id="rwSec" class="oracle.reports.server.RWSecurity">
<property name="securityUserid"
value="%PORTAL_DB_USERNAME%/%PORTAL_DB_PASSWORD%@%PORTAL_DB_TNSNAME%" confidential=
"yes" encrypted="no"/>
<property name="oidEntity"
value="reportsApp_ias.bemo_ag.ch_F3466F714AB011DABFBF450844534848"/>
</security-->
<!--destination destype="oraclePortal" class="oracle.reports.server.DesOraclePortal">
<property name="portalUserid" value="%PORTAL_DB_USERNAME%/%PORTAL_DB_PASSWORD%@%POR
TAL_DB_TNSNAME%" confidential="yes" encrypted="no"/>
</destination-->
<destination destype="ftp" class="oracle.reports.plugin.destination.ftp.DesFTP">
<!--property name="proxy" value="proxyinfo.xml"/-->
</destination>
<destination destype="WebDav" class="oracle.reports.plugin.destination.webdav.DesWeb
DAV">
<!--property name="proxy" value="proxyinfo.xml"/-->
</destination>
<!-- By default server will use rwnetwork.conf as network config file
Use this element to override the same -->
<!--networkConfig file="rwnetwork.conf"></networkConfig-->
<job jobType="report" engineId="rwEng" />
<job jobType="rwurl" engineId="rwURLEng" />
......
2. Restart OC4J_BI_FORMS (in order to restart inprocess server)
Anmerkung: beim Auskommentieren von Tags müssen bei darin verschachtelten
Kommentaren die Kommentarzeichen entfernt werden (rote Marken oben).
Grafische Elemente in JSF-Komponenten durch eigene Images ersetzen
SR 27.10.2006
Quelle:
http://forums.oracle.com/forums/thread.jspa?messageID=1488578&#1488578
Vorgehen:
In CSS das eigene Bild angeben
Voraussetzung: Korrektes Element in Skin.css identifiziert
Code:
.AFButtonStartIcon:alias {content:url(skins/AzulGris/images/btnAIzq.gif)(; width:9px;
height:16px}
.AFButtonEndIcon:alias {content:url(skins/AzulGris/images/btnADer.gif); width:9px;
height:16px}
.AFButtonTopBackgroundIcon:alias {content:url(skins/AzulGris/images/btnAArr.gif);
height:2px}
.AFButtonBottomBackgroundIcon:alias {content:url(skins/AzulGris/images/btnAAb.gif);
width:1px; height:2px}
IAS – Report-Server - Engines
26.10.06 uro
Probleme beim Verteilen der Report-Jobs auf die Engines trotz dem Vorhandensein von 10
Engines. Meldung : Vorgang erfolgreich ausgeführt. Es sind jedoch beim Verteilen der
Ausgabe einige Fehler aufgetreten REP-50159.
Nach raufsetzen der Cache von 50MB auf 250MB tauchte das Problem nicht mehr auf.
(BüFü)
processmanager-dienst, opmnctl start läuft nicht
18.10.06 rn
nach einem abbruch des startvorgangs des olap-serverses konnte der processmanager nicht
mehr gestartet werden. opmnctl start gab einen pingwait exits with 1220396 – error. grund
war, dass das dcm.conf – file (oracle_home\dcm\dcm\) leer war. hierfür gibts ein
dcm.config.bak im selben verzeichnis. dieses kann man dann als dcm.conf kopieren und die
prozesse wieder starten. metalink-stichwort : ‚ opmnctl pingwait dcm’
Probleme mit Jinitiator / Java Applet / tosca web
17.10.06/tt pg
Bei Hasena hats beim Starten vom Applet den Fehler
java.lang.NoClassDefFoundError: oracle/forms/webutil/fileTransfer/TransferAgent
gegeben.
Lösung:
Start, Einstellungen Systemsteuerung, Jinitiartor 1.3.xx starten, Register Cache, Clear JAR
Cache. Dies müsst ihr bei jedem User bei dem es nicht funktioniert machen.
Oracle Internet Directory: configure a user password never to expire
5.9.06 cr
To configure a user password never to expire, set the Password Expire Time (pwdMaxAge
attribute) to 0 in the password policy that applies to the user.
Prior to 10.1.4 password policies were realm-specific and applied to all users in the specific
realm.
Therefore with versions prior to 10.1.4 it is only possible to configure specific users with
different password expiry settings if they are in a different realm than users with the standard
company password policy settings
Wir haben zur Zeit 10.1.2.
Deployment einer JSF-Applikation auf den IAS2 (
22.8.06/sr
Problem: Deployment der Telefon-Applikation (JSF-Applikation in JDeveloper 10.1.3) klappt
nicht
Ursache:
Unterschiedliche Javaversionen in lokalem JDeveloper und auf IAS2
Meine Java-Version
C:\Programme\programming\jdev10_1_3\jdk\bin>java.exe -fullversion
java full version "1.5.0_05-b05"
Auf IAS2 vorhanden
Standardversion
1.4.2_06-b03
Ausserdem OC4J Standalone (Achtung: nicht über Enterprise Manager verwaltbar)
C:\oracle\OC4J_10_1_3\jdk\bin>java.exe -fullversion
java full version "1.5.0_05-b05"
Lösung:
- In JDeveloper neue Connection auf Standalone-OC4J machen (siehe unten)
- Deployment Profile auf diese Standalone-Connection machen
- Im Enterprise-Manager noch httpd.conf editieren und proxypass einfügen (nicht direkt!)
Vorgehen
- Enterprise Manager starten mit http://ias2.dynasoft.ch:18101/
- Farm > OraHome2 > HTTP_Server (in Liste der Systemkomponenten) > Administration
- Erweiterte Server-Attribute > httpd.conf
- in httpd.conf <IfModule mod_proxy.c> suchen (ca. nach 3/4)
- folgende Zeilen einfügen
ProxyPass /toscatel/ http://127.0.0.1:8888/toscatel/
ProxyPassReverse /toscatel/ http://127.0.0.1:8888/toscatel/
- Anwenden anklicken -> Server wird neu gestartet
- Seite aufrufen mit
http://135.100.31.135:8989/toscatel/faces/jsp/anrufer.jsp?parsuchnr=0326173851
aus Connections von Ändu kopiert
<connection>
<ConnectionType>J2EE_1.4</ConnectionType>
<DeployPassword>true</DeployPassword>
<user>oc4jadmin</user>
<JNDI_INITIAL_CONTEXT_FACTORY>com.evermind.server.rmi.RMIInitialContextFactory</
JNDI_INITIAL_CONTEXT_FACTORY>
<JMX_CONNECTOR_HOST>212.101.6.189</JMX_CONNECTOR_HOST>
<ConnectionName>IAS2_Oc4j_Standalone</ConnectionName>
<URL>ormi://212.101.6.189:23791/</URL>
<JMX_CONNECTOR_PORT>23791</JMX_CONNECTOR_PORT>
<PWD>
hier steht natürlich kein Passwort
</PWD>
<JSR88_DEPLOYMENT_URL>deployer:oc4j:212.101.6.189:23791</JSR88_DEPLOYMENT
_URL>
</connection>
Dynamisch aus DB generiertes PDF mit Dateiendung .pdf statt .do anzeigen
18.8.06/sr
Problem:
PDFs per Mail verschicken aus dem Hasena-Archiv scheitert an Endung .do
Die dynamisch aus der DB erzeugten Dateien erhalten in der URL als Dateinamen immer
den Namen der Action und die Endung .do
Lösung
- Model
+ ArchivAnzeigelisteView liefert neu noch ein Feld Endung mit (liefert pdf, gif oder jpg)
- View
+ in anzeigeliste.jsp für PDF-Dokumente wird neu der Action die Endung .pdf angehängt
(siehe Code unten)
+ in web.xml erfolgt ein 2. Mapping
+ showblob.jsp mit Content-Disposition ergänzt
Änderungen in anzeigeliste.jsp
<c:if test="${Row['Endung'] == 'pdf'}">
<c:out value="<a
href=searchArchivBlobViewAction.${Row['Endung']}?flddruckscanid=${Row['Druckscanid']}>"
escapeXml="false"/>
</c:if>
<c:if test="${Row['Endung'] != 'pdf'}">
<c:out value="<a
href=searchArchivBlobViewAction.do?flddruckscanid=${Row['Druckscanid']}&fldendung=${Row['Endun
g']}>" escapeXml="false"/>
</c:if>
Änderungen in web.xml
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.pdf</url-pattern>
</servlet-mapping>
Änderungen in showblob.jsp
String fileExt = abv.getFileextension();
String contentType;
response.setHeader("Content-Disposition", "inline; filename="
+ abv.getDokname());
if (fileExt.toLowerCase().endsWith("pdf")) {
contentType = "application/" + fileExt;
} else {
if (fileExt.toLowerCase().endsWith("jpg")) {
contentType = "image/jpeg";
} else {
contentType = "image/" + fileExt;
}
}
Dokumentation zu web.xml
U:\Technet\JDev10g\TechnologieUebergreifend\web_xml.html
Gescheiterte Versuche
- mit Header Content-Disposition allein
Diese Version funktioniert für GIFs bei Speichern unter, bei PDFs dagegen nur, wenn sie
als Attachment gespeichert werden (zusätzlicher Click!)
- in web.xml ein servlet-mapping für dokname machen und das Dokument unter dem echten
Namen anzeigen (Action wird dann nicht mehr gefunden)
JInitiator patchen
15.8.06 pg
Das Problem, dass die Mausnavigation unter WebTosca Sitzungen sporadisch verschwindet,
hängt mit der Java Exception java.lang.IllegalStateException zusammen, die geworfen, aber
nicht abgefangen wird. In Tosca wird der Fehler Cannot Open System Clipboard angezeigt.
Wir haben die Klasse sun.awt.windows.WClipboard gepatched, damit diese Exception
abgefangen wird.
Die Installation muss leider an jedem Client separat vorgenommen werden, weil die Klasse
im lokalen rt.jar liegt und nicht vom iAS heruntergeladen wird.
Es gibt zwei Alternativen für den Patch:
1. rt.jar patchen
braucht ein jar.exe von einem älteren JDK, z.B. 1.1.8.24 aus o:\orant\jdk\bin
muss in einem Working-Dir ausgeführt werden, weil die Pfade der Inhalte im Jar relativ zum
aktuellen Verzeichnis interpretiert werden
ins <jinitiator>\lib Verzeichnis wechseln
set classpath=<jdk>\lib
C:\Programme\Oracle\JInitiator 1.3.1.18\lib>set classpath=c:\oracle\orant\jdk\lib
Test, ob Jar geht
C:\Programme\Oracle\JInitiator 1.3.1.18\lib>c:\oracle\orant\jdk\bin\jar
Arbeitsverzeichnis erstellen und dahin wechseln
md rtpatch
cd rtpatch
jar entpacken
C:\Programme\Oracle\JInitiator 1.3.1.18\lib\rtpatch>c:\oracle\orant\jdk\bin\jar xvf0 ..\rt.jar
sun\atw\windows\WClipboard.class überschreiben (Im Explorer)
neues Jar bauen, ohne Komprimierung, ohne Manifest für Inhalt
C:\Programme\Oracle\JInitiator 1.3.1.18\lib\rtpatch>c:\oracle\orant\jdk\bin\jar cvf0M
..\rt.jar .\
Test: in der Java Console muss nach dem Start
fileangezeigt werden.
Wenn ein "Cannot open System Clipboard" provoziert wird, kommt in der Java Console
sun.awt.windows.WClipboard: IllegalStateException caught (ein laufender JDeveloper ist eine
gute Möglichkeit, solche Fehler zu erzeugen. Anderer bekannter Weg ist Suche im
Artikelstamm nach Hauptlieferant.)
Class sun.awt.windows.WClipboard lodaed from *.class
2. mit Bootclassloader Einstellung arbeiten
Klasse WClipboard.class beim lokalen JInitiator kopieren, z.B. in
C:\Programme\Oracle\JInitiator 1.3.1.22\lib\sun\awt\windows
In der Systemsteuerung des JInitiators den Classpath zur Klasse eingeben:
-Xbootclasspath/p:C:\Programme\Oracle\JIniti~1.22\sun\awt\windows\WClipboard.class
Je nach JInit Version muss mit dem Filemon überprüft werden, auf welche Datei zugegriffen
wird und der Classpath angepasst werden.
Grundlagen
Liegen in
P:\tosca\InstallTOSCA2\Instal_as10g_r2\JInitiatorPatchFuerCannotOpenSystemClipboard
Anmerkung: unter Forms10gR2 klappte Variante 2 nicht (mehr), dafür gibt es den Forms
Patch 4520121, der den Fehler auch beheben soll. Variante 1 klappte noch (allerdings ist
noch nicht bekannt, wie das nach der Applizierung von Forms Patch 4520121 sich verhält).
ip change, ändern von ip adressen
27.7.06 rn
unter diesen beiden links findet man infos, wenn man die ip-adresse eine oracle db oder iasservers ändern will:
http://download-uk.oracle.com/docs/cd/B14099_19/core.1012/b13995/toc.htm
http://download-uk.oracle.com/docs/cd/B14099_19/core.1012/b13995/host.htm#CIHDCCCC
Beispiel, wie man LONG zu VARCHAR2 konvertiert
7.7.06/sr
Aus Papg_Wwwhilfsfunctions
FUNCTION convert_long_dba_tab_col (
p_table_name IN VARCHAR2,
p_column_name
IN VARCHAR2
) RETURN VARCHAR2 IS
w_varchar VARCHAR2(4000);
BEGIN
w_varchar := NULL;
FOR rec IN (
SELECT dba_tab_columns.data_default -- liefert LONG zurück
FROM dba_tab_columns
WHERE dba_tab_columns.table_name = p_table_name
AND dba_tab_columns.column_name = p_column_name
) LOOP
IF rec.data_default IS NOT NULL THEN
w_varchar := rec.data_default;
END IF;
END LOOP;
RETURN (w_varchar) ;
END;
reports-server fehler rep-1922, rep-50125, pdfcomp=0
30.6.06 rn
wenn bei einem ias-reports-server (ausgabe pdf) ab und zu die vorschau abbricht, kann das
mit der pdf-komprimierung zusammenhängen. ein sr mit oracle hat ergeben, dass per
default(?) die pdf’s komprimiert werden. wann man nun dem browser-link beim aufruf des
report pdfcomp=0 mitgibt, wird nicht mehr komprimiert und der report läuft ohne fehler und
sogar ev. noch schneller (gem. ur). in tosca gibt es in drucken.pll (seit ca. 25.6.06) die
möglichkeit, in parameter 15, text9, zusätzliche parameter mitzugeben, die dann in den link
eingebunden werden.
suchen nach inhalt einer email_aq
7.6.06 rn
soll nach inhalt einer email-aq gesucht werden, findet man mit
select * from aq$email_aq q
where q.user_data.betreff like '%1063771%'
meist das richtige
Alternatives Statement:
select q_name, msgid, state, retry_count, enq_time, deq_time,
q.user_data.betreff,
-- auf die Elemente von user_data muss mit
-- dem Table-Alias (hier: Q) zugegriffen werden
q.user_data.emailadresse,
dbms_lob.substr(q.user_data.mailbody,200,1), -- wenn nur die 1. 200 Zeichen vom CLOB
-- gewünscht sind, geht das mit
( select count(*)
from table (q.user_data.attachments)
) anz_attachments,
( select column_value
from (select
column_value, rownum num
from table (q.user_data.attachments)
) where num = 1
) att_1,
( select column_value
from (select
column_value, rownum num
from table (q.user_data.attachments)
) where num = 2
) att_2
from email_aq q
order by enq_time desc
-- dbms_lob.substring
-- die Anzahl Rows aus ..
-- .. user_data.attachments, ist ein VARRAY,
-- das in eine Pseudo-Tabelle konvertiert
--werden kann
-- der Wert...
-----
..von Wert und Zeilennummer..
..der Pseudo-Tabelle..
..aber nur, wo die Zeilennummer 1 ist..
..ist der Inhalt des 1. Attachments
Instantclient
22.5.06 pg
Der Oracle Instantclient für 10g braucht entweder gar keine TNSADMIN-Umgebung. Wenn
es aber eine hat, muss im SQLNet.ora der im names.directory_path auch EZCONNECT
vorkommen, damit die Angabe von SQLnet-Urls wie //servername:port/sid funktionieren soll.
Beispiel: names.directory_path = (TNSNAMES,EZCONNECT)
Geht übrigens auch für andere 10g SQLNet.
Java: Oracle Bug 4086274 für executeQueryForCollection
8.5.06/sr
Problem ist im Java-Code der Archivlösung aufgetreten.
Wenn in einer Master-Detail-Beziehung mit dynamischen WHERE-Clauses der verbindende
Schlüssel gleich bleibt, aber die Parameter der WHERE-Clause sich ändern, dann wird die
Query (aufgerufen in ...DetailViewImpl.executeQueryForCollection) nur beim ersten Aufruf
ausgeführt, aber nachher trotz geänderten Parametern nicht mehr. Dies ist ein
dokumentierter Oracle-Bug für Jdeveloper und ADF für Versionen vor Jdeveloper 10.1.3
(nach anderen Quellen vor 10.1.2.1.0, der Fehler liess sich jedoch bei mir mit 10.1.2.1.0
nicht beheben!).
Workaround:
Methode isQueryChanged in Klasse ...DetailViewImpl auf folgende Art überschreiben:
protected boolean isQueryChanged() {
//return super.isQueryChanged();
return true;
}
Achtung: Auswirkungen auf Performance unbekannt, aber sicher nicht günstig!
ssl integration error, reports, run_product, run_report_object
31.3.06 rn
das problem des ssl-integration-error kann ev. mit dem einsetzen eines timer-loops im
aufrufenden forms gelöst werden. bei hasena war der aufruf der reports aus dem forms
einfach zu schnell und mit folgendem loop (im forms-loop) war das problem gelöst:
w_date := sysdate;
while sysdate <= w_date+(1/86400) loop –ev. parameter
--warten um Überschneidungen von Reports zu verhindern.
null;
end loop;
discoverer 5.1 plus / java / desktop / dis51usr.exe
31.3.06 rn
es gibt tatsächlich immer noch eine desktop-version von discoverer, auch unter ias-10.2. der
name ist 'dis51usr.exe' und sie befindet sich im oracle...bitools-home\bin. diese muss beim
installieren der bi-tools explizit gewählt werden.
stabilität, geschwindigkeit etc. ist halt eben auch dort immer noch besser. wer seinen javadiscovere-plus mit der desktop-version ersetzen/ergänzen will, soll das bitools-setup
nonchmals starten und mit der 'benutzer'-installation den desktop nachinstallieren, oder eben
mich rasch fragen.
ORA-600 [qernsRowP] unter DB 10gR2
In Oracle 10.2.0.1.0 gibt es einen Bug der dazu führt, dass z.B. bei folgenden Statements ein
ora-600 [qernsRowP] auftritt:
SELECT LIEFNR,JAHR,UMSATZTOTAL,UMSATZ,UMSATZWAREN FROM LIEFSTAT_JAHR_VIEW
WHERE liefnr = 701386 order by jahr desc
So ein Statement wird z.B. beim Navigieren im Lieferantenstamm gemacht.
Der Grund dafür ist, dass irgendwas mit dem sort-group-by nosort nicht stimmt in dieser
Version der DB. Diese Fähigkeit (eben sort-group-by nosort) kann im init.ora mit folgendem
Event abgestellt werden:
# Event, wegen ORA-600 [QERNSROWP] wenn bei Liefstat anzeigen ein sort-group-by nosort gemacht
wird.
event="10119 trace name context forever, level 12"
FTP mit Internetexplorer
Wenn nach dem login im IE keine Daten angezeigt werden:
Menü Extras, Internetoptionen, Erweitert, Haken bei ‚Passives FTP verwenden deaktivieren
Import nicht via Datenfiles(exp/imp) sondern direkt mit einer Live Datenbank(dpimp)
13.02.06 cr
Das neue 10g Utility Datapump (dpexp / dpimp) das den Export (exp) bzw. Import (imp)
ersetzt, lässt auch einen Import via einer Live Datenbank zu.
Es muss also kein Export und Import gemacht werden, es kann direkt der Import (dpimp) mit
dem Parameter network_link=<source_database_link> gestartet werden.
zB.
impdp.exe system/...@crdsfz tables=tosca.aufkopf network_link=dsfz
logfile=datapump:dbimp_dsfz_aufkopf.log
- Tabellen die long Columns (zB. BLOB) enthalten, können nicht mit network_link importiert
werden
- die Versionen der Quell- und Ziel DB’s müssen übereinstimmen
- da Datapump auf dem Server läuft, müssen Pfadangaben als Directories angegeben
werden zB. ist im Parameter logfile die Angabe datapump ein Datenbank Objekt das mit
create directory... zu erstellen ist.
Wie lässt sich ein .jpg Image in ein Datenbankfeld vom typ BLOB laden
08.02.06 cr
DECLARE
src_file BFILE;
dst_file BLOB;
dirpfad VARCHAR2(500) := 'C:\TEMP';
-- pfad auf dem server
filename VARCHAR2(100) := 'FIRST.JPG'; -- dateiname
dirname VARCHAR2(30) := 'TEMP';
-- directory name (temporär)
w_adrnr NUMBER
:= 2031;
-- adressnr.
BEGIN
execute immediate 'create or replace directory '||dirname||' as '''||dirpfad||'''';
src_file := bfilename(dirname, filename);
dbms_lob.fileopen(src_file, dbms_lob.file_readonly);
SELECT bilddb INTO dst_file
FROM adresse
WHERE adrnr = w_adrnr
FOR UPDATE; -- lock the row, required for loadfromfile
dbms_lob.loadfromfile(dst_file, src_file, dbms_lob.getlength(src_file));
UPDATE adresse
SET bilddb = dst_file
WHERE adrnr = w_adrnr;
dbms_lob.fileclose(src_file);
commit;
execute immediate 'drop directory '||dirname;
END;
discoverer plus wird im Browser nicht gestartet
03.02.06 tt
Kontrollieren, ob ein Popup-Blocker das Starten des Applet verhindert.
Im Internet Explorer unter Extras Internetoptionen, Sicherheit, vertrauenswürdige Sites, die
Adresse des Discoverers hinzufügen. Damit das möglich ist Checkbox ‚Für Sites dieser Zone
ist....’ deaktivieren.
discoverer 5 (10g): Hard limit on number of sessions reached
23.1.06 rn
wenn beim anmelden bei discoverer (10) die meldung
„Hard limit on number of sessions reached“
erscheint, kann folgende enstellung geändert werden:
$ORACLE_HOME/opmn/conf/opmn.xml
2. Increase the maxprocs value. For example:
Old: maxprocs="50"
New: maxprocs="75"
3. Bounce opmn
setzen von discoverer timoeout
23.1.06 rn
wenn sich der web-discoverer (nach 15 min. etc.) verabschiedet, kann das timeout im unter
(windows)-start,
programme,
oracle-application-server-10-orahome2,
discoverer,
edit-preferences (unter [session-manger] timeout in sekunden) eingestellt, und dann mit
„applay-preferences“ eingeschaltet werden
Remotedesktop / Schriftarten
9.1.06 mw
wenn irgendwelche neuheiten (z.b. eine neue schriftart auf dem ias-server) via
remotedesktop installiert werden, sollte dies unbedingt mit der remotedesktop-variante
„console“ erfolgen (.......\System32\mstsc.exe /console). dies ist so, da mit dem start von
remotedesktop ohne die option „console“ ein eigener „task“ geöffnet wird und die installation
nur für diesen aktiv ist.
Tracen von Bind-Variables
9.1.06 pg
Wenn auf dem Server Tracefiles geschrieben werden, wünscht man sich manchmal die Bind
Variables auch noch zu sehen. Das geht, wenn vorher ein Event gesetzt wird:
Event setzen auf Session-Ebene:
alter session set events '10046 trace name context forever';
alter session set events '10046 trace name context forever, level 8';
alter session set events '10046 trace name context off';
Die einzelnen Levels bedeuten (Metalink Note 21154.1):
1
Enable standard SQL_TRACE functionality (Default)
4
As Level 1 PLUS trace bind values
8
As Level 1 PLUS trace waits
This is especially useful for spotting latch wait etc.
but can also be used to spot full table scans and index scans.
12
As Level 1 PLUS both trace bind values and waits
Für alle neu entstehenden Sitzungen kann mit alter system gearbeitet werden (siehe weiter
unten).
Für eine fremde, laufende Sitzung kann das event mit
begin
sys.dbms_system.set_ev(117,1257,10046,0,'') ; -- sid, serial#, event, level, ???,
end ;
ein- und ausgeschaltet werden (4. Parameter ist der gewünschte Level).
Interpretation von analyze table validate structure [cascade]
23.12.05 pg
Bei Inkonsistenzen können Objekte mit dem o.g. Statement überprüft werden. Falls ein
Fehler auftritt, wird der in ein Tracefile geloggt:
analyze table aufkopf validate structure cascade
-- *** 2005-12-22 18:16:38.000
--*** SESSION ID:(12.3) 2005-12-22 18:16:38.000
-- row not found in index tsn: 5 rdba: 0x01409239
nächste Frage ist dann jeweils, um welches Objekt es sich handelt. tsn: 5 ist die File_ID aus
dba_data_files, und die rdba kann mit einem Utility in die Block-Nummer konvertiert werden:
(aus Note:313745.1)
where <file_id> and <block_id> are derived from the 3rd argument of the ORA-600 (which is
the relative database address "RDBA") via:
SQL> SELECT DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(<RDBA>) FROM dual;
SQL> SELECT DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(<RDBA>) FROM dual;
Mit der Block-Nummer (in Hex, ohne das führende 0x) kann im folgenden Statement der
Objekt-Name abgeleitet werden:
select *
from dba_extents
where file_id = 5
and DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(to_number('01400859','XXXXXXXX')) between block_id
and block_id + blocks -1
ora-0942 beim anlegen von neuen db-benutzer
19.12.05 rn
beim fehler ora-0942 beim anlegen eines neuen db-benutzers (m200) hat man ev.
grant select on dba_useres to dynasoft
noch nicht laufen gelassen
Instant Client für ODBC ohne vollständige Client-Installtion
14.12.05 pg
Im reinen WebTosca Umfeld gibt es keine Client-Installation (ora_prog\orant und Registry)
mehr. Falls in diesem Umfeld ein odbc Zugriff auf die Datenbank realisiert werden soll, bietet
sich der (leichtgewichtigere) Instant-Client an. Der lässt sich von OTN passend zur
Datenbankversion herunterladen; es gibt einen Basisclient und unter anderem eine ODBC
Erweiterung (siehe \\Dynant05\patches\oracle_10g\10201_instantclient).
Ein weiterer Vorteil ist, dass die ODBC Verbindung keine TNSADMIN Definition braucht,
sondern dass sich der Connect String direkt in der ODBC Verbindung deklarieren lässt:
//<server>:<listener-port>/<sid>, z.B: //bemosrv02:1521/bemo.
Die Installation ist jetzt wirklich mal ansprechend:
 Zip Files in ein und dasselbe Instant-Client-Verzeichnis auspacken
 Verzeichnis in den PATH aufnehmen (Systemsteuerung – System –
Umgebungsvariablen)
 installodbc.bat laufen lassen
Fertig.
Das heisst, nur fast, weil es ja von Oracle ist, fehlen (bzw. fehlten jedenfalls bei mir) zwei
*.dll, von denen sie wohl annehmen, dass sie im Windows\System32 stehen: mfc71.dll und
msvcr71.dll. Bei der Installation der ODBC-Verbindung wurde
The setup routines for the could not be loaded due to system error code 998
angezeigt; ich bin der mit der Hilfe vom FileMon darauf gekommen, welche Files das waren.
Ich habe sie im \bin einer 10.1.2.0 Datenbank gefunden und ebenfallls noch ins InstantClient-Verzeichnis kopiert (sind in \\Dynant05\patches\oracle_10g\10201_instantclient
ebenfalls enthalten).
ACHTUNG: Im Zusammenhang mit MS Query ging der Instant Client nicht sauber, bei der
zweiten Connection wurde versucht, eine herkömmliche OCI Infrastruktur zu laden.
InstantClient ab \patches wieder gelöscht. 19.6.06 pg
Hilfreiches Feature bei Migrationen – error logging clause
18.11.05 pg
Wenn bei Migrationen grosse, langdauernde Insert Statements gemacht werden ist es
zuweilen ärgerlich, wenn die nach zig Minuten wegen eines verletzten Contraints
abgebrochen werden. In dem Fall hilft die error_logging_clause, mit welcher die Fehler in
eine Tabelle geschrieben werden, das Statement aber weiterläuft:
Vorbereitung (legt eine Table ERR$_<Tablename> an)
begin
DBMS_ERRLOG.CREATE_ERROR_LOG('<table_name>');
end ;
insert into <table_name> (<columns>)
( <subquery>
)
log errors reject limit 10000
In die Errorlogs Table werden die fehlerhaften Rows gelegt.
reject limit ist wichtig, sonst wird nach dem ersten Fehler abgebrochen.
Soll scheints auch bei Updates gehen.
jobqueue not running automatically
14.11.05 rn
bei lanco ist nach dem neuaufsetzen der db (10gr2) die jobs nicht mehr automatisch
gelaufen. menuelles, einmaliges starten hat noch funktioniert. folgende infos aus dem oracletar haben dann geholfen. nach befolgen von punkt 1 und 2 waren die jobqueues wieder ok:
Please follow the:
ACTION PLAN
============
1. Check if instance is in restricted mode:
To make it out of restricted mode:
Alter system disable restricted session;
2. Either restart the database or try the following:
exec dbms_ijob.set_enabled(true);
3. Check if _system_enabled_trigger=false
col parameter format a25
col value format a15
select a.ksppinm parameter,b.ksppstvl value from x$ksppi a,x$ksppcv b
Where a.indx=b.indx and ksppinm=’_system_trig_enabled’;
Set it to true.
4. Do you have a logon trigger which does a select from v$session ?
5. Shutdown all applications, including databases.
Shutdown the server (machine)
Restart all applications, including databases.
Check that jobs are executing automatically.
6. If you are using DBMS_SCHEDULER (new feature of 10g) are the jobs running
automatically ?
hier noch, was am 14.12.05 bei lanco geholfen hat:
alter system set job_queue_processes=0
--<Wait for some time>
alter system set job_queue_processes=2
exec dbms_ijob.set_enabled(true);
Direkt Drucken unter Reports Server auf iAS 10g, REP-50159
11.11.05 pg
Um direkt zu drucken muss der iAS den Drucker "sehen". Dabei kann er lokal installiert sein,
oder es kann ein auf einem anderen Server freigegebenen Drucker gedruckt werden. Unter
iAS 10g Rel. 2 konnte ich bei Bemo aber die Drucker nicht verwenden, die Leerschläge im
Druckernamen hatten. Bei Lokaler Installation kann der Drucker umbenannt werden, bei
Druck auf Freigabe nicht. Es ging auch nicht, wenn als Druckername der Freigabename
(\\bemosrv1\bemoprt1) angegeben wurde anstelle der Bezeichnung (\\bemosrv1\HP
LaserJet 1320).
Symptome:

Eintrag im Enterprise Manager unter failed jobs:
Vorgang erfolgreich ausgeführt. Es sind jedoch beim Verteilen der Ausgabe einige
Fehler aufgetreten REP-50159


Das File wird in den Cache des Reports Servers (<OraHome2>\reports\cache) unter
dem Namen <Druckername><Sequenz>.eps geschrieben
In <OraHome2>\reports\logs\<Reporserver-Name> gibt es ein Logfile
<Reportsserver-Name> -rwlpr-<JobID>.log, wo auf der zweiten Zeile der nach dem 1.
Leerschlag abgeschnittene Docname steht.
Drucken auf Drucker unter WebTosca geht nach Update nicht mehr
2.11.05 pg
Für die Selektion der unter iAS zur Verfügung stehenden Drucker wird
V$SESSION.MACHINE herangezogen. Je nach DB oder Clientversion hat MACHINE einen
abschliessenden CHR(0) oder eben nicht (kann mit
select machine, dump(machine)
from v$session
herausgefunden werden.
Wenn die MODULDRUCKER in der alten Installation z.B. mit CHR(0) am Schluss angelegt
wurden, nach einem Update aber hinter MACHINE kein CHR(0) mehr steht, ist kein Druck
auf einen Drucker mehr möglich.
Lösung: Moduldrucker-Einträge auch für den neuen MACHINE zur Verfügung stellen (das
erste Statement ist ev. nicht nötig, wenn der "Client" der ja in dem Fall ein Server ist schon
automatisch eingetragen wurde; Name des Clients natürlich anpassen):
insert into toscaclient (MACHINE, ERFASSDAT, ERFASSUSER, ANMELDEDAT, ANMELDEUSER, ABMELDEDAT,
MDIXPOS, MDIYPOS, MDIWIDTH, MDIHEIGHT)
(select 'WORKGROUP\IAS', ERFASSDAT, ERFASSUSER, ANMELDEDAT, ANMELDEUSER, ABMELDEDAT, MDIXPOS,
MDIYPOS, MDIWIDTH, MDIHEIGHT
from toscaclient
where machine = 'WORKGROUP\IAS' || chr(0)
);
insert into moduldrucker (MODULNAME, MACHINE, DRUCKERNAME, DRUCKERFILE, VORSCHLAG, SCHACHT1,
SCHACHT2, SCHACHT3, SCHACHT4, SCHACHT5, SCHACHT6, SCHACHT7, SCHACHT8, MITARBNR)
( select MODULNAME, 'WORKGROUP\IAS', DRUCKERNAME, DRUCKERFILE, VORSCHLAG, SCHACHT1, SCHACHT2,
SCHACHT3, SCHACHT4, SCHACHT5, SCHACHT6, SCHACHT7, SCHACHT8, MITARBNR
from moduldrucker
where machine = 'WORKGROUP\IAS' || chr(0)
)
frm-92101 DB 10g
31.10.05 rn
nach einem hänger (druckprogramm endet nicht) hab ich das web-form durch das schliessen des
browsers abgebrochen. dadurch blieb offensichtlich eine javaw – session hängen (kann auch beim
crashen des frmweb-developers passieren). diese javaw – session findet man im task-manager (bei
mehreren wirds schwierig). ich bekam dann beim erneuten einsteigen in web-forms die frm-92101
meldung (schon vor dem db-login). nach dem abbrechen des javaw – tasks mittels task-manager
konnte man wieder einsteigen.
GROUP BY ohne ORDER BY auf DB 10g
25.10.05 ms
Unter Oracle 8 und 9 konnte man einen GROUP BY in einem SELECT-Statement machen und getrost
davon ausgehen, dass damit auch nach automatisch nach diesem Feld sortiert wurde (sofern es nur 1
Feld war, das 2. Feld wurde zuerst nach Länge des Inhalts, erst dann nach Wert sortiert).
Unter Oracle 10g (sicher Rel. 2) funktioniert das, zumindest mit DATE-Feldern nicht mehr (gefunden
beim suchen freie Termine der Mitarbeiter), da ist zusätzlich eine ORDER BY -Clause mit dem
gleichen Feld nötig.
Konsequenz: Nie mehr nur GROUP BY machen, sondern immer auch ORDER BY!
Foreign-Keys auf Unique-Keys mit NULL-Werten
25.10.05 ms
Man kann ja bekanntlich in der DB einen Foreign-Key auf einen Unique-Key eines anderen Tables
anlegen, wenn gewünscht auch mit ON DELETE CASCADE. Wenn nun dieser UK einen NULL-Wert
enthält (was ein UK im Gegensatz zu einem PK ja darf), denn findet bei einer Löschung des Masters
der DELETE CASCADE NICHT statt, d.h. der Detail-Datensatz existiert weiterhin fröhlich, ohne
Master!
In Fällen mit einem zusammengesetzten UK mit möglichen NULL-Werten, macht man am besten
künstliche (Oracle-Sequence) PKs, dann ist dieses Problem umschifft.
Internet Explorer Browser Security ausschalten
24.10.05 cr
Wenn die Internet Explorer Browser Security eingeschaltet ist kann man beim Download auf der
Oracle Homepage die 4 checkboxen (ich bin kein iraker, usw.) wohl markieren und die Vertragsbedingungen akzeptieren aber der Download wird nicht gestartet.
Die IE Browser Security ist eine Windows Komponente und kann mit 'Add or Remove Programes’
ausgeschaltet werden.
Übergabe von Datumwerten mit pr_indiv
21.10.05 pg
Wenn Datumswerte aus pr_indiv an das Form zurückgegeben werden, werden diese Werte mit
copy(wert, '<block>:<item>') in das Item gefüllt. Wenn das Item ein Date Format hat, muss der
String nicht etwa der Formatmaske des Items entsprechen, sondern der Form-Property
BUILTIN_DATE_FORMAT, die von uns in den ererbten PRE_FORM_TRIGGERN auf 'YYYY/MM/DD
HH24:MI:SS' gesetzt wird.
Fazit: Datumswerte müssen in PR_INDIV mit to_char(w_datum, 'YYYY/MM/DD HH24:MI:SS') formatiert
werden (auch wenn sie keinen Zeitanteil haben)
IAS: Probleme beim Start OC4J_BI_FORMS
20.10.05 pg
Die iAS Kompoente OC4J_BI_FORMS wurde alle 3 Minuten automatisch hinunterund dann wieder hochgefahren (im server.log war das ersichtlich: Shutdown
durch jazn/admin). In opmn.xml ist für diese Komponente definiert, dass alle
3 Minuten ein Zugriff auf reports/rwservlet/pingserver?start=auto gemacht
wird. Weil der Reports Server nicht lief (kommt noch) gab dieser Request
einen Fehler (HTTP Responsecode 500) zurück, und opmn entschloss sich zum
Neustart von OC4J_BI_FORMS. Nachdem der entsprechende Parameter <urlping/>
im opmn.xml gelöscht war, blieb OC4J_BI_FORMS wenigstens mal stabil oben,
und der Forms Server auch.
Beim Testen von Forms kam plötzlich die Fehlermeldung FRM-41838, dass ein
Tempfile nicht angelegt werden konnte. Von der Installation her unter dem
Account von A_SENN hat der Installer den Pfad für das Tempfile in
c:\dokumente und Einstellungen\a_senn\temp ... konfiguriert (ist ebenfalls
im opmn.xml), worauf LocalSystem aber keinen Zugriff hat. Habe das auf
c:\temp\forms geändert.
Der Reports Server lief immer noch nicht, die Fehlermeldung war
unspezifisch. Im <OraHome2>\bin kann mit rwserver server=rep_bfvztos1_OraIas
der Reports Server standalone gestartet werden. Auch das klappte nicht, er
wurde jeweils gleich wieder heruntergefahren. Mit Hilfe einer
Konfigurationsänderung im <reporsserver>.conf konnte das Tracing
eingeschaltet werden (trace-level=all), wonach mehr Angaben in die Logs und
Tracefiles geschrieben wurden, darunter auch REP-56105 und REP-52266, die
den entscheidenden Hinweis lieferten: in der Registry war REPORTS_TMP
dasselbe Tempverzeichnis wir für den Forms Server konfiguriert; nachdem
dieses auf c:\temp\reports geändert wurde lief der Reports Server stabil und
die Überwachung von OC4J_BI_FORMS konnte wieder eingeschaltet werden (und
das Tracing vom Reportsserver ausgeschaltet).
Probleme beim Start von SQL-Plus
17.10.05 pg
Bei PEG hatten wir das Phänomen, dass beim Start von sqlplusw mit der Option /nologon, wie es z.B.
beim Startup/Shutdown gemacht wird, die Meldung Enter value for global_name kam. Wenn
SQL-Plus ohne /nologon gestartet wurde und ordnungsgemäss eingeloggt wurde, lief alles normal,
ausser dass der Prompt PEG9_TOSCA> anstatt SQL > hiess.
Lösung: SQL-Plus lässt nach dem Start alle logon.sql laufen, die in einem der Verzeichnisses des
SQL_PATH sowie im runtime-Verzeichnis stehen. Inoma hat so eines beim Update hineinkopiert, und
zwar zur Sicherheit gleich in zwei Verzeichnisse (buchhaltung\sql und c:\oracle\ora92\bin). Das Script
war dahingehend fehlerhaft, dass es mit /nologon eben den erwähnten Fehler prodziert hat.
Übrigens findet man fast nur mit dem Utility filemon.exe heraus, welche Files in solchen Fällen
angezogen werden. Ist bei uns auf u:\exes.
Parameter, die mit Fluchtsymbolen in Reports übergeben wurden, entschlüsseln
11.10.05 pg
Parameter mit Sonderzeichen müssen eingepackt in pa_basis.escape_url an Reports übergeben
werden, sonst kann der Report im Web nicht geöffnet werden. Aus c:\data\irgendwas.pdf wird dabei
z.B. c%3A%5Cdata%5Cirgendwas%2Epdf
Auf der Gegenseite im Report stellt sich das umgekehrte Problem. Mittlerweile hat uns aber das
Package sys.utl_url ereilt, so dass wir das Auspacken des Parameters nicht selber programmieren
müssen: w_klartext := utl_url.unescape(' c%3A%5Cdata%5Cirgendwas%2Epdf') liefert c:\data\irgendwas.pdf
report via forms gestartet zeigt die auswahl ‚printer’ nicht
30.9.05 rn
Symptoms:
start von z.b. l410.fmx zeigt nur ‚browser’auswahl bei der ausgabeart, obschon in ‚drucker pro
programm’ alle ausgabearten angewählt wurden. das problem kann daran liegen, dass beim zuweisen
des ‚drucker pro programm’ in der auswahl ‚für PC-Name’ mit F9 (select machine from v$session) der
entsprechende pc (oder in meinem fall war es der ias-application-server) den netznamen des druckers
mehrfach anzeigt. einer davon (welcher sieht man nicht), war mit einem leer- oder sonderzeichen am
ende behaftet. im toad kann das festgestellt werden, indem man
select nvl(dtt.bez,dt.bez) bez, dt.druckername, md.machine
from moduldrucker md, druckertosca dt, druckertoscatext dtt, mitarbeiter
ma
where md.druckername = dt.druckername
and md.druckerfile = dt.druckerfile
and upper(md.Modulname) = 'L410'
and (md.mitarbnr = pa_basis.mitarbnr_user or md.mitarbnr is null)
and (md.machine like 'DYNASOFT\IAS2' or (/*w_web = 'N' and */ md.machine
is null)) -- auf Web nur expliziet dem Applikationsserver zugewiesene
Drucker
and (dt.geschstelle = pa_basis.user_geschstelle or dt.geschstelle is
null)
and dt.druckername
= dtt.druckername(+)
and dt.druckerfile
= dtt.druckerfile(+)
and pa_basis.mitarbnr_user = ma.mitarbnr(+)
and dt.bez = ma.druckervorschlag(+)
order by md.mitarbnr asc, md.machine asc, ma.druckervorschlag asc,
md.vorschlag, md.druckername;
absetzt (ist nichts anderes, als im aufrufenden form abgesetzt wird). bei mir kam da mal nichts zurück.
nachdem ich dann das ‚DYNASOFT\IAS’ mit ‚DYNASOFT\IAS%’ ersetzt hatte, kam der drucker als
resultat zurück.
lösung: in ‚drucker pro programm’ den richtigen (welcher das ist, weiss ich nicht) netzdrucker zuteilen.
ora-00604, ora-02248 ausschliesslich unter Oracle 10gR2(10.2.0.1) oder iasR2
30.9.05 rn
Symptoms:
+ You use a NLS_LANG setting of which the territory part set to SWITZERLAND
+ You start a Oracle 10.2.0.1 client tool, like sql*plus, sql*loader, export, etc.
+ You receive the following errors:
ORA-00604: error occurred at recursive SQL level 1
ORA-02248: invalid option for ALTER SESSION
Changes
This works fine when using a different version of the client tool,
and when you use a different NLS_LANG setting.
 fazit: wenn der registry nls_lang auf ‘switzerland’ steht, kommen diese meldungen. lösung:
registry auf german oder america stellen, bis der bug behoben ist.
 da das installieren des iasR2 automatisch eine admin-db aufsetzt, muss man den zeitpunkt
nach dem registry-eintrag und vor der db-creation erwischen und in der registry den eintrag
umstellen.
 weiter infos: bug 4598613
ora-600 [17018] [0] unter Oracle 10g
23.9.05 pg
Bei Fürrer gab es beim Aufruf von PAFO_ARTIKEL aus Forms einen ORA-600 anstatt einem ORA4060, wenn der grant execute auf das Package fehlte. Konnte unter Forms 6.5 und 10g, und Oracle
10.1.0.2 und Oracle 10.2.0.1 reproduziert werden.
laufendes tnsnames.ora ändern mit ‚net manager’
15.9.05 rn
mit Start - Programme - Oracle Application Server Infrastructure
(OraHome1), - Configuration and Migration Tools 'Net Manager', 'Lokal',
'Dienstbenennung', 'bearbeiten', 'umbennen' kann man ein laufendes (in
benutzung) tnsnames.ora editieren. achtung: immer mit regedit=>tns_admin
(=nur ein tnsnames.ora) arbeiten.
Aus TOAD nur LF als Zeilentrennzeichen speichern, nicht CR / LF
14.9.05 pg
Im Toad 8.3.5. kann unter View – Options – Oracle –General – Newline format for character
data gesteuert werden, ob aus dem Popup Editor in TOAD LF oder CR/LF gespeichert
werden sollen. Oracle braucht zwingen nur LF, was als "UNIX"-Style bezeichnet wird.
Deshalb ist diese Einstellung so zu setzen. Konsequenz bei falscher Einstellung: wenn z.B.
in EDIHERKUNFT.QUERY ein SQL-Statement editiert und falsch abgespeichert wird, kann
das beim Generieren der XML Daten zu
ORA-20100: EDIXML schreiben: Fehler in Schritt Query ausführen:
ORA-29532: Java call terminated by uncaught Java exception:
oracle.xml.sql.OracleXMLSQLException: Bind name identifier 'allaufnr' does not exist in the
sql query.
ORA-06512: at line 55
führen.
WebTosca Icon soll immer neues IE Fenster öffnen
9.9.05 pg
Wenn einfach der Link aus dem Browser auf den Desktop gezogen wird, um das Icon für den
Start von WebTosca zu erstellen, können damit nicht mehrere Browsersessions gestartet
werden. Ein Ausweg ist es, statt eines WebLinks einen Link zum IE zu bauen: Neu –
Verknüpfung – Ziel = "C:\Programme\Internet Explorer\iexplore.exe"
http://ias.dynasoft.ch/servlet/f60servlet?config=tosca_dyn2
Symptoms emctl not starting, asconsole dienst startet nicht
8.09.05 rn
Starting OracleAS10gASControl in windows 2000 ct get the following error
launchprocess:Could not launch process, error code is : 193
Solution
List the files in the /jdk/bin directory and delete the null java file.
The ias console will then start with the command 'emctl start iasconsole'
windows dienste löschen mit dos-befehl
7.09.05 rn
mit dem befehl sc delete <dienstname> kann in ms-dos jeder beliebige dienst
gelöscht werden. löschen in der registry funktioniert nicht immer.
keine mausnavigation mehr in forms (9.0.4.2), ias10g
1.09.05 rn
wenn die mausnavigation nicht mehr geht, kann das dadurch entstehen, dass man
mehr als 2 forms hinereinander (f11) offen hat. im neusten developersuite10g (nicht
mehr 9.0.4 sondern 10...) soll das gem. mesi gelöst sein. neu wird auch java 1.4
endlich eingesetzt
webutil, jacob.dll, wcu-18 oder 20, ias10g
1.09.05 rn
In <orahome2>\webutil\server\webutil.cfg gibt's den Eintrag:
install.syslib.0.7.1=jacob.dll|106496|1.0|true
hierbei ist 106496 die Grösse der DLL.
Falls eine neue Version der Datei verteilt werden soll, reicht es nicht, die
Grösse anuzupassen, dann muss auch die Versionsnummer erhöht werden:
install.syslib.0.7.1=jacob.dll|106496|1.1|true
Dasselbe gilt für eigene DLL's die man aus Forms verwenden wil, bei uns
z.Bsp.:
install.syslib.0.user.1=forms_util.dll|16946|1.0|true
ui für discoverer ändern, anderes logo für plus/viewer, corporate look als default
15.08.05 rn
UI_Config.XML is the one you should use. You may have multiple copies of these. The one
you need to edit is the one located here:
<ORACLE_HOME>/j2ee/OC4J_BI_Forms/applications/discoverer/web/common/xsl
Uses may need to refresh their cache to see any changes you have made.
For example, to change the icon that is displayed to users whenever they launch Discoverer
Plus or Viewer, follow this workflow:
1. Create a GIF file (must be a GIF) and place it in the same folder that contains the
UI_Config.XML file
2. Locate and edit UI_Config.XML
3. Look for the tag called '<configuration application="discoverer_viewer" base_dir=".">'
4. Look for the section entitled '<appearance>' - it is usually immediately below the main tag
heading
5. Look for a tag that begins with '<logo src="">'
6. Edit this to point at your own GIF file
7. If your file is called 'myfile.gif' you need to enter '<logo src="common/xsl/myfile.gif"
8. Ignore the rest of the commands such as height, width and so on
9. Make sure you placed a copy of the GIF file into the same folder that contains the
UI_Config.XML
10. Save the UI_Config.XML
11. Launch Viewer (or Plus) and you should see your new logo
Remember to refresh your browser window as the system may be holding the old image in
the cache
====>
weiter kann bei url folgendes mitgegeben werden:
Problem Description
------------------You want to customize the Discoverer viewer interface for some applications
and users. However, for others the standared interface with all
functionality
is needed. Instead of customizing the XML/XSL presentation options can be
passed directly in the URL. This is Applicable Only after Discoverer 4.1.42
Plus & Viewer and Higher Patches. This will be especially be useful for
Oracle E-Business Suite (Applications) customers who may not need certain
features exposed. Example: "New Connection".
Solution Description
-------------------Discoverer Viewer allows passing all Presentation Options as a binary
string
into the URL in the following syntax
Discoverer Viewer version 4.1.42 and higher introduces a new URL parameter
called "_po" which is used for passing all the Presentation Options
from URL without having to modify the XML/XSL files.
Below is a sample URL:
http://machinename.domain:port/discoverer4i/viewer?ac=<username>&eul=<eul>&
_po=11111111111111111111111
1 switches the Option ON
0 switches the Option OFF
Currently, there are 23 presentation options controlled by _po parameter.
Each
prestentation option correlates to one of the 23 positions in the
parameter.
Below is a list of the presentation option and its relative position:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Logo
New Connection
Open Workbook
Options
Exit
Help
Top Blue Bar
Worsheets Link
ReRun Query
Presentation Option
Printer Friendly Version
Export
Parameters
Workbook Name
15.
16.
17.
18.
19.
20.
21.
22.
23.
Data(Including Worksheet Title)
Chart
Page Item
Drill
Pivot
Row Numbers
Bottom Blue Bar
Oracle Copyright
Show XML
For example, if you want to switch OFF the "New Connection" presentation
option
and have all of the other presentation options switched ON, the the
parameter
would look like this:
_po=10111111111111111111111
The 2nd position which correlates to the "New Connection" presentation
option is
set to 0 or OFF.
==>oder den sortier-parameter
2. At the end of the URL add this parameter:
&_posor=on
3. Enter the entire URL again, with the &_posor=on parameter added to the end this
time. The sort button is now enabled, while the presentation options button is still
disabled.
Full Database Export ohne Angabe eines Passwort
11.08.05 cr
1. init.ora: os_authent_prefix = "OPS$"
2. create user "OPS$DYNASOFT\ADMINISTRATOR" identified externally default tablespace
user_data temporary tablespace tmp profile default account unlock;
wobei OPS$=authent präfix, DYNASOFT=domäne, ADMINISTRATOR=benutzername
3. grant connect to "OPS$DYNASOFT\ADMINISTRATOR"
grant exp_full_database to "OPS$DYNASOFT\ADMINISTRATOR"
4. Verbindung testen:
sqlplus /nolog
connect /@dyn2
show user
5. Export starten:
%oracle_home%\exp.exe /@dyn2 full=y file=d:\ora_data\db_dyn2\sql\expdyn2.dmp
log=d:\ora_data\db_dyn2\sql\expdyn2.log buffer=8000000 consistent=yes
- Ist im init.ora File der parameter os_authent_prefix zB. auf "" gesetzt, so heisst der zu
erstellende user "DYNASOFT\ADMINISTRATOR".
- Ob die Domäne berücksichtigt wird hängt vom regedit parameter:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME\OSAUTH_PREFIX_DOMAIN ab,
true=ja, false=nein
Stündliche Tracefiles unter 10g 10.1.0.3
09.08.05 cr
auf dem 10g db server werden unter 10.1.0.3 stündlich Tracefile mit
folgenden Format erstellt: zb. <instance>_m000_.trc
hierbei handelt sich es um einen unpublished oracle bug den man unter sys
mit folgenden 2 sql befehlen wegbringt:
alter table SYS.WRH$_ACTIVE_SESSION_HISTORY modify (program VARCHAR2(64));
alter table SYS.WRH$_ACTIVE_SESSION_HISTORY_BL modify (program VARCHAR2(64
default export pfad für discoverer
01.08.05 rn
der export-pfad von discoverer-daten kann default festgeelgt werden
discoverer client-server (3,4,5):
The default export path is set in the "Start in" field of the icon from which you start
Discoverer User Edition, change this path.
discoverer-web (4, 5 (10g)):
When exporting output (Excel, HTML, etc.) from Discoverer Plus 4.1.X/9.0.2/9.0.4 using
JInitiator 1.3.1.xx, the default export path is C:\WINNT\Profiles\<OS username>.
In Discoverer Plus by executing File >> Export >> Excel/HTML it creates files
under C:\WINNT\Profiles\... directory.
How to change this default export directory path for Discoverer Plus 4.1.X/9.0.2/9.0.4?
SOLUTION DESCRIPTION
====================
It is assumed that you are using Oracle Jinitiator 1.3.1.xx to run Discoverer
Plus 4.1.X/9.0.2/9.0.4.
1. Open Windows Control Panel, double click on "Jinitiator 1.3.1.xx" icon,
click on cache tab and note down the value set for Location under
"JAR cache Settings".
Suppose the value is set to "C:\WINNT\Profiles\jdoe\Oracle Jar Cache"
2. Click on Start >> Run
and type the command:
explorer %userprofile%\.jinit
This opens Windows Explorer with the current directory as %userprofile%\.jinit
3. Check if there is any file with name:
properties13xx (used by Jinitiator 1.3.1.xx)
4. If there is no such a file create a new file with name properties13xx
(for example properties1318, if using jinitiator 1.3.1.8) and add
the following entries:
jarcache.directory=<value noted in step 1>
(make sure to put two backslashes in the place of single backslash)
user.home=<the directory name into which Discoverer should put export files>
(make sure to put two backslashes in the place of single backslash)
For example:
user.home=D:\\TEMP
jarcache.directory=C:\\WINNT\\Profiles\\jdoe\\Oracle Jar Cache
(Note there are two '\' between directory name separators)
5. If there is already existing file properties13xx in the
%userprofile%\.jinit directory and jarcache.directory entry exists in this file
and it is pointing to a directory, then do not change it.
Only add the entry for user.home as shown in step 4 at the end of the file.
Before modifying properties13xx file, take a backup of those files.
6. Save the file.
7. Exit all the browser windows.
8. Invoke a new browser window to run Discoverer Plus.
Now export from Discoverer Plus should create files under the directory to
which user.home entry points to.
References
============
Note:215286.1 How To Change The Export Path Location For Discoverer 3i/4i
Plus Using JInitiator JVM
quest spotlight mit oracle10g client: tnsnames error
19.07.05 rn
When connecting, error would display:
There is an error reading the tnsnames.ora file. Either Oracle is not installed or the
tnsnames.ora file is corrupt. This error would occur after a 10g client is installed
SOLUTION:
It turned out that a microsoft dll seems to have been uninstalled when 10g client got installed.
Please check that they have the following in their system32 direcotry :
msxml4.dll
msxml4r.dll
If these two files are missing, you can send these .dll files from your system32 directory on
your Windows XP and re-register the .dlls.
To register .dll files, you can do the following:
1. Open a command prompt
2. Type "regsvr32 C:\windows\system32\msxml4.dll"
If the dll's are in the right place, because system32 should be in the path, you shouldn't need
to specify the path, just the file name. And use msxml4.dll, NOT msxml4r.dll.
Type "regsvr32 msxml4.dll"
web-tosca, browserfenster für pdf – druck kommt meldung ‚seite kann nicht angezeigt
werden’
13.07.05 rn
diese meldung kommt jeweils, wenn der client-browser, der diesen report in pdf-format
angezeigt haben möchten, den server nicht sieht; d.h. der server mit namen und nicht mit der
ip-adresse angesprochen wird. dieses kann in parameter 15 umgestellt werden.
ORA-12535 auf xp, connect to db, bei tnsping oder bei jedem verbindungsversuch
11.07.05 rn
diese meldung kommt jeweils (auch) wenn die xp-firewall auf dem db-server aktiviert ist.
diese kann (muss) abgeschaltet werden.
ORA-25153: Temporary Tablespace is Empty nach db-clonen
4.07.05 rn
Do a new 'alter database backup controlfile to trace' against your original instance, and you
should see at the very end of the script commands to add tempfiles to the temporary
tablespace. You don't want those files listed in the datafiles section; they're not datafiles. You
just need to add tempfiles to the empty temp tablespace after the database is opened. Plus,
you don't need to back up and copy those files from the original database. You can also
query dba_temp_files to see which files fall in this category.
fmrweb.res resource-file für tosca web wo und wie installieren
30.06.05 rn
für tosca-web muss ein resourcefile in <OraHome2>\forms90 mit dem namen fmrwebd.res
installiert sein. das ‚d’ vor dem .res ist für die nls_lang=german_germany.... in der registry im
<OraHome2>-verzeichnis. mehr dazu im metalink unter
http://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=N
OT&p_id=209671.1
installationsreihenfolge as10g, installer, patches (1 oder 2)
30.06.05 rn
für das installieren von as10g ist folgende reihenfolge einzuhalten: as10g-infrastructure,
patch-2 darüberziehen, as10g-application-server, pacht-2 über application-server (der
unterschied zwischen dem infrastructure und dem as-patch wird nur durch das wählen des
home-verzeichnisses, also OraHome1 oder OraHome2 unterschieden), patchen des
metadata-repository (kann mit OraHome1 gemacht werden). zuletzt developersuite10g, dann
separater dev.patch-2 installieren.
erstellen des benutzers disco (version 5.1) mit rechten für 10g
29.06.05 rn
für den benutzer disco müssen verschiedene rechte als tosca explizit zugewiesen werden,
damit er eul etc. anlegen kann. in p:\tosca\sql ist der script create_user_disco.sql
zielverzeichnis, path von reports.log
23.06.05 rn
das reports.log wird als erstes ins ‚ausführen in’-verzeichnis des tosca-icons geschrieben
(kann z.b. auch p:\temp sein)
Massenmutationen in Discoverer
22.06.05 pg
In Note 102660.1 Subject: How To Change Owner Name For All Folders In A
Discoverer Business Area auf Metalink ist erklärt, wie im Disco eine bestimmte
Massenmutation vorgenommen werden kann. Offenbar gibt es die Möglichkeit, den Disco mit
Command Files zu starten, was in Note Complete Command Line Options for Discoverer
3.1(Admin & User Edition) beschrieben ist.
reports trigger auswirkung auf query
21.06.05 rn
gem. einem tar wegen ora-904/flush sga hat mir ein reports-guru gesagt, dass die query in
reports genau zwischen dem 'after parameter form' und dem 'before report' trigger ausgeführt
wird; d.h. parameter, die die query beeinflussen sollen, müssen im 'after parameter form' und
nicht im 'before report' trigger ablaufen
characterset falsch nach restart des reports_server, sonderzeichen ö,ä,ü falsch
15.06.05 rn
nach dem restart des reports_servers (10g aus em) wurden die umlaute falsch angedruckt.
wenn oc4j_bi_forms (oder alle dienste von OraHome2) neu gestartet wurde, war’s dann
wieder ok. das problem lag an der einstellung nls_lang in der registry (home von
OraHome2). dort stand german_america.xxxx und musste auf german_germany.xxx gestellt
werden.
external tables
15.06.05 kj
Unter Oracle 9 (und höher) kann eine externe Datei direkt wie eine Tabelle angesprochen
werden. Es ist somit kein Import mit SQL-Loader oder über ODBC nötig.
Beispiel:
CREATE OR REPLACE DIRECTORY imp_dat_dir AS 'f:\ora_data\db_dshbu\import';
CREATE TABLE f0105vk2
(REF
VARCHAR2(100),
ATYPE
VARCHAR2(100),
ADDR
VARCHAR2(100),
FROM_1
VARCHAR2(100),
FROM_2
VARCHAR2(100),
FROM_3
VARCHAR2(100),
FROM_4
VARCHAR2(100),
TO_1
VARCHAR2(100),
TO_2
VARCHAR2(100) )
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY imp_dat_dir
ACCESS PARAMETERS
(
records delimited by newline
fields terminated by ';'
missing field values are null
( REF,ATYPE,ADDR,FROM_1,FROM_2,FROM_3,FROM_4,TO_1,TO_2
)
)
LOCATION ('f0105vk2.csv')
)
PARALLEL
REJECT LIMIT UNLIMITED;
jinit, jsp java plugin oracle/sun)
6.6.05 rn
in formsweb.cfg werden die versionen/classid/dowlaod-path etc. des oracle-javaplugins
verwaltet. hier stehen auch die infos, wie man mit dem jsp von sun arbeiten kann.
grunsätzlich beziehen sich die jinit...-einträge auf das von oracle modifiziert und angepasst
sun-java-plugin und die jsp...-einträge auf das sun-java-plugin. ab 1.4 sollte das rad-scrollen
und die dynamischen underlines wieder möglich sein.
reports jobs ansehen (reports 9.04, as10g)
6.6.05 rn
unter:
http://<ias-server>/reports/rwservlet/showjobs?
können die reportserver-jobs angeschauft und z.t. gelöscht werden
Tracefile schreiben für alle neuen DB Sitzungen
2.6.05 pg
ALTER SYSTEM SET timed_statistics = true;
ALTER SYSTEM SET EVENTS '10046 trace name context forever;
Ab diesem Punkt wird für jede neu erstellte DB Verbindung automatisch ein Tracefile
geschrieben.
Abfrage machen
ALTER SYSTEM SET EVENTS '10046 trace name context off';
Letzter Schritt ist sehr wichtig, sonst werden immense Trace Daten geschrieben.
Anmerkung: gilt nur für Connections, die neu erstellt werden ab dem Event. Siehe Tracefile
schreiben mit den Bind Variables, um im selben Event einen anderen Level zu setzen, damit
die Bind Variables auch herausgeschrieben werden.
Ginge auch mit DBMS_SUPPORT Package.
Probleme bei VPN Verbindung mit NetGear
2.6.05 pg
Bei Wey konnte zuest keine VPN Verbindung erstellt werden, im Log erschien u.A.
Error validating Proxy IDs.
Nachdem im Policy Editor unter Wey – My Identity das Internet Interface von Any auf die
Netzkarte umgestellt wurde, gings.
MailSender: Network Adapter could not establish connection
30.5.05 pg
Bei Wey funktionierte der Zugriff auf die DB, die auf dem eigenen Server installiert ist, nicht
mit jdbc:oracle:thin:@localhost:1521:weun, wohl aber mit
jdbc:oracle:thin:@192.168.10.22:1521:weun.
Tip: Nach dem Ändern des JDBC-Urls muss der Mailsender neu gestartet werden (die
Angabe wird nur beim Start gelesen).
discoverer 5.1 (plus) web, exit (verlassen) des javaplugins gibt ‚internal error’
27.5.05 rn
wenn die plus-version von discoverer 5.1 verlassen wird, kann die meldung ‚internal error...’
kommen. dies weil man (benutzer disco etc.) ungenügende berechtigungen hat. es gibt die
möglichkeit, diese berechtigungen den usern zu granten oder, was einfacher und zu
bevorzugen ist im pref.txt eine option auf 0 stellen und die prefs neu registrieren. das geht
so:
Solution #2
==============
1. Navigate to {Midtier Home}/discoverer/util directory.
2. Edit file pref.txt and modify the value of ShowExpiredRunsAtExit under [Application]
section as 0.
3. Navigate to opmn/bin directory and issue the command:
./opmnctl stopproc process-type=PreferenceServer
4. Make sure there are no dis51pr processes running, if you find any of them, kill those
processes.
5. Navigate to {Midtier Home}/discoverer/util directory.
6. Run script applypreferences.sh.
andstelle dieses dos-sripts kann unter windows in
start/programme/orahome2/discoverer/aplly preferences angewählt werden
7. Navigate to opmn/bin directory and issue the command:
./opmnctl startproc process-type=PreferenceServer
bei dieser ganzen aktion dürfen keine disco-user connected sein.
alles nachzulesen unter:
http://metalink.oracle.com/metalink/plsql/ml2_gui.startup
stoppen forms session 10g
25.5.05 rn
unter as10g kann im OraHome2 unter ‘forms’ der tab ‚benutzer-sessions’ angewählt werden.
dort sieht man alle zurzeit laufenden sessions. will man so eine killen, muss man die
gewünschten session links anklicken und dann mit dem ‚stop’-knopf abbrechen. für das
stoppen muss man sich anmelden als os-user!! wenn das nicht klappt (username or
password) muss gemäss metalink (Note:272007.1) folgendes gemacht werden:
a. Set the OS username as a value for "Log on as a batch job" privilege.
For Windows 2000, go to Control Panel -> Administrative Tools -> Local Security Policy ->
Local
Policies -> User Right Assignment and set the the OS username as a value for
"Log on as a batch job" privilege.
b. Check the check box "Allow service to interact with desktop" for BI Forms 10g Process
Manager.
For Windows 200, go to Control Panel -> Administrative Tools -> Services ->
OraclexxxxxxProcessManager (the process manager service for BI Forms Home) -> Double
click it -> Click "Log on" tab page and check "Allow service to interact with desktop" check
box.
3. Restart opmn using opmnctl command (oder den OraclexxxxxxProcessManager – dienst
bei den diensten neu starten).
zudem muss noch
em_mode" parameter should be set to a value "1" in formsweb.cdf file
das macht man am besten ebenfalls im em OraHome2 / forms / konfiguration / links ‚default’
anwählen und oben ‚bearbeiten’ wählen / danach (wie oben beschrieben) den em_mode auf
1 stellen.
job_queue_processes
24.5.05 rn
mit
alter system set job_queue_processes = 0;
kann im ‘mount’-zustand (nicht open) der db beigebracht werden, dass die job_queue’s nicht
automatisch starten, wenn die db neu gestartet wird.
mit
alter system set job_queue_processes = 2;
werden die job_queue_processes dann gestartet.
JINIT menuell installieren
23.5.05 rn
Das in Tosca-Web benötigte java-plugin kann manuell installiert werden: Ausführen von
<OraHome2>\jinit\jinit.exe
VPN-Verbindung klappt nicht
17.5.05 tt
Nach dem Importieren von neuen Security Policys im Programm SoftRemote kann es
vorkommen das keine Verbindung mehr zustande kommt. Bei mir hat es schon des öfter
geholfen wenn ich die Properties von SecurityPolicyEditor öffne eine Einstellung ändere,
Speichere, Einstellung wieder auf Ursprungswert stellen und nochmals speichern. Scheint
zwar unlogisch aber funktioniert.
ias10g infra startet nicht, oid läuft nicht, ldap nicht erreichbar
10.5.05 rn
wenn der ias10g (infra = OraHome1) nicht läuft, hängt das oft mit dem oid zusammen. dieses
kann sich dann beim ldpa-server nicht anmelden. oft, weil der letzte server-shutdown noch
irgend einen session-eintrag von ldap stehen lässt. geholfen hat bei wey z.b., dass man den
asdb-service (infra-datenbank) stoppt und wieder startet. danach kann im em der oid wieder
gestartet werden. reihenfolge ist immer oid,sso, security, restliche-dienste.
ftp verbindung geht nicht
10.5.05 rn
wenn die normale ftp-verbindung (explorer oder browser) nicht geht, kann mit auf dos-prompt
probieren:
ftp
open <z.b.ias.dynasoft.ch>
user <username> password <passwort>
recv (oder send) =>help gibt auskunft
remote file <z.b. wey\wey.zip>
local file <z.b. c:\wey.zip>
frm-91507 forms 10g tosca web
26.04.05 rn
im forms-developer (10g=9.0.4) auf dem web-server(as10g) bekam ich beim generieren von
tosca_01.plx die meldung frm-91507 obschon tosca_01.plx nirgends im zugriff war. im taskmanager bei den prozessen sieht man dann, dass ev. eine alte session (ifweb90.exe) noch
herumhängt. diese kann man getrost killen, dann geht auch das generieren von z.b.
tosca_01.plx wieder.
Erfahrungen aus PEG-Absturz 20.4.05
22.04.05 pg
Nach einem Absturz und manuellem Restart der DB (recover datafile rbs.dbf war nötig)
häuften sich korrupte Blöcke auf der Datenbank.
Ein Media Recovery (zurückkopieren der Online gesicherten Tablespaces und Rollforward)
ging auch nicht:, Recovery stoppte:
alter database recover automatic
*
FEHLER in Zeile 1:
ORA-00283: Wiederherstellungs-Session wegen Fehlern abgebrochen
ORA-00600: Interner Fehlercode, Argumente: [3020], [4241212], [1], [366933],
[73], [16], [], []
ORA-10567: Redo is inconsistent with data block (file# 1, block# 46908)
ORA-10564: tablespace SYSTEM
ORA-01110: Datendatei 1: 'C:\ORA_DATA\DB_PEG9\DATA\SYSTEM01.DBF'
ORA-10561: block type 'TRANSACTION MANAGED DATA BLOCK', data object# 514
Sequenz 366933 ist um:
RECID,STAMP,THREAD#,SEQUENCE#,FIRST_CHANGE#,FIRST_TIME,NEXT_CHANGE#
366933,556123955,1,366933,1320633352,20.04.2005 14:48:45,1320637513
mit recover database allow 1 corruption (gemäss Metalink Note 30866.1) sollte es
weitergehen, aber der Rollforward scheiterte immer am selben Block. Es wird ein Tracefile
geschrieben, das den Hinweis auf einen stuck recovery enthält:
*** SESSION ID:(12.3) 2005-04-20 21:38:26.375
*** 2005-04-20 21:38:26.375
RECOVERY OF THREAD 1 STUCK AT BLOCK 46908 OF FILE 1
REDO RECORD - Thread:1 RBA: 0x059955.00000049.0010 LEN: 0x022c VLD: 0x01
SCN: 0x0000.4eb74452 SUBSCN: 1 04/20/2005 14:48:47
CHANGE #3 TYP:2 CLS: 1 AFN:1 DBA:0x0040b73c SCN:0x0000.4eb6d9b3 SEQ: 1 OP:11.5
buffer tsn: 0 rdba: 0x0040b73c (1/46908)
scn: 0x0000.4eb6e394 seq: 0x01 flg: 0x04 tail: 0xe3940601
frmt: 0x02 chkval: 0xe5a5 type: 0x06=trans data
...
Schliesslich habe ich mir Oracle nur den RBS Tablespace aus dem Online Backup
recovered (das brauchte es offenbar), die Korrupten Blöcke aber in den Datafiles vorläufig
toleriert (die liessen sich ja wegen oben nicht recoveren) und manuell bereinigt.
Einige Indices waren korrupt:
analyze table AUFZEILE VALIDATE STRUCTURE CASCADE
*
ERROR in Zeile 1:
ORA-01499: Tabellen/Index-Querverweisfehler - siehe Trace-Datei
Leider gibt das Tracefile nur sehr bedingt einen Hinweis auf den Index, dort steht zwar eine
rdba, aber die kann offenbar nur sehr schwer in eine Blocknummer umgerechnet werden
(Oracle konnte es, mit einem Tool).
*** 2005-04-21 08:41:07.343
*** SESSION ID:(12.5) 2005-04-21 08:41:07.343
row not found in index tsn: 4 rdba: 0x0102ff49
…
Beim neu anlegen der Indices gab es noch eine Feinheit: wenn ein Index rebuilded oder
drop/created wird, kann er manchmal schneller auf der Basis eines schon bestehenden
Index gebaut werden (und vice versa). So kann sich die Korruption von Index zu Index
retten, wenn nur alle Indices einer Table nacheinander refreshed werden. Vielleicht ginge es
mit einem Hint oder mit dem offline nehmen, ich habe sie aber mit einem Stück PL/SQL neu
gebaut:
Begin
-- die interessanten Tables
for tabs in (
select *
from dba_tables
where table_name in
('AUFZEILE','AUFZRUECKM','AUFKMWST','LAGERBEW','STATUSVERAEND','WWWBESTELLER',
'WWWFUNKTIONALITAET','WWWNEUSESSION','WWWTMPARTLIST')) loop
-- constraints auf den Table disablen
for r in (
select r.*
from dba_constraints r, dba_constraints t
where r.r_constraint_name = t.constraint_name
and
r.r_owner = t.owner
and
t.table_name = tabs.table_name
) loop
dbms_output.put_line('alter table ' || r.table_name || ' disable constraint ' ||
r.constraint_name ||';' ) ;
end loop ;
-- Unique Keys der Table disablen (droppt den zugehörigen Index)
for uks in (select *
from dba_indexes
where table_name = tabs.table_name
and uniqueness = 'UNIQUE') loop
dbms_output.put_line('alter table ' || tabs.table_name || ' disable constraint ' ||
uks.index_name ||';' );
end loop ;
-- alle nichtuniquen indieces droppen
for idxs in (
select *
from dba_indexes
where table_name = tabs.table_name
and uniqueness = 'NONUNIQUE') loop
dbms_output.put_line('drop index ' || idxs.index_name ||';');
end loop ;
-- …. Und wieder erstellen
for idxs in (
select *
from dba_indexes
where table_name = tabs.table_name
and uniqueness = 'NONUNIQUE') loop
dbms_output.put('create index ' || idxs.index_name || ' on ' || idxs.table_name || '(')
;
-- die Columns einzeln in die noch nicht abgeschlossene dbms_output Zeile stellen
for cols in (
select *
from dba_ind_columns
where table_name = tabs.table_name
and
index_name = idxs.index_name
order by column_position )
loop
if cols.column_position > 1 then
dbms_output.put(',') ;
end if ;
dbms_output.put(cols.column_name) ;
end loop ;
dbms_output.put_line(') tablespace ' || idxs.tablespace_name ||';');
end loop ;
-- Unique constraints enablen, erstellt den Index
for uks in (select *
from dba_indexes
where table_name = tabs.table_name
and uniqueness = 'UNIQUE') loop
dbms_output.put_line('alter table ' || tabs.table_name || ' enable constraint ' ||
uks.index_name || ' using index tablespace ' || uks.tablespace_name || ';' );
end loop ;
-- alle FK’s auf die Tabelle wieder enablen
for r in (
select r.*
from dba_constraints r, dba_constraints t
where r.r_constraint_name = t.constraint_name
and
r.r_owner = t.owner
and
t.table_name = tabs.table_name
) loop
dbms_output.put_line('alter table ' || r.table_name || ' enable constraint ' ||
r.constraint_name ||';' ) ;
end loop ;
end loop ;
end ;
Danach hatte es noch in einer Table selber (also in den Table Data) einen korrupten Block. -Dazu wurde die Table aus allen Blöcken ohne den korrupten neu aufgebaut:
-- Angaben für dbms_rowid:
select file# , rfile# , ts# , name from v$datafile where file# = 5 ;
-- neue, leere Table anlegen
create table wwwneusession_tmp as select * from wwwneusession where 0 = 1
-- rows vor dem korrputen Block übernehmen
insert into wwwneusession_tmp select * from wwwneusession where rowid < 'AAAFkgAAFAABKeOAAA'
;
-- rows nach dem korrupten Block übernehmen
insert into wwwneusession_tmp select * from wwwneusession where rowid >= 'AAAFkgAAFAABKePAAA'
zur entsprechenden Rowid kommt man mit dbms_rowid. Offenbar liest where rowid < / >
nicht die ganze Table, sondern nur die Blöcke, die in der Where Clause sind. Damit muss
der korrupte Block nie gelesen werden.
Und dann natürlich Triggers / Indices / Constraints ergänzen und alte Table droppen (oder
truncaten und Daten inserten)
Letzer Teil: es hat jetzt immer noch korrupte Blöcke im Tablespace tosca01.dbf, aber nicht
mehr im allozierten Bereich (die entsprechenen Blöcke sind in dba_empty_space
(dba_free_space / claude) und nicht in dba_extents zu finden). Das kann aber gemäss
Oracle toleriert werden; wenn die Blöche das nächste mal gebraucht werden, werden sie
reformatiert.
Hinweis: dbv (DBVERIFY) kann auch bei geöffneten Datafiles gemacht werden.
Punkt = Komma, Komma = Punkt in Reports
22.04.05 ms
In allen Reports erscheinen der Dezimalpunkt als Komma, die Tausendertrennung als Punkt,
in den Forms aber richtig als Punkt und Komma (wie wir das in der Schweiz so haben).
In der Registry steht NLS_NUMERIC_CHARACHTERS auf ., (Punkt/Komma).
Der Fehler (von Oracle) liegt darin, dass auf USER_NLS_LANG
GERMAN_SWITZERLAND.WE8ISO8859P1 stand. Wenn das geändert wird auf
GERMAN_AMERICA.WE8ISO8859P1 kommt der Dezimalpunkt als Punkt, die
Tausendertrennung als Komma. So erlebt in Forms6.5 Patch 16.
Datenbank lässt sich nicht öffnen - Database doesn't Open.. error ORA-01172
jh/rn 20.04.05
Eine Datei braucht ein recover!
Login im sql/+ (nolog) connect sys/…..
Mit select file#, name from v$datafile bekommt man den Filenamen.
Nachher: recover datafile 'C:\ORA_DATA\DB_PEG9\DATA\RBS01.DBF';
und nachher noch: alter database open;
Hinweis: später hat es sich ergeben, dass zuvor noch das Online Backup des Tablespaces
zurückgeholt hätte werden müssen. PG.
Umstellung Forms-Version von Runtime Compatibility Mode 4.5 auf 5.0
15.4.05 ms
Bei der Validierung des Records vor dem Insert werden alle Required-Felder geprüft. Wenn
also ein Required-Feld erst im PRE-INSERT-Trigger abgefüllt wird (so in S200 mit
KUNDNR), ist das Feld bei der Validierung des Records noch leer. In Mode 4.5 war das kein
Problem, in 5.0 nicht mehr erlaubt.
Aufbereiten von Report dauert lang
6.4.05 pg
Schoch hatte ein grosses Bild in ADRESSE.BILDDB (> 19MB), das auf dem ESR angedruckt
wurde. Bei jedem Start des Reports Server vergingen einige Minuten, ohne dass sich etwas
tat: Background Engine war blockiert, auf dem Frosch im Kill/Trace Session war die Session
aktiv, mit SQL Body not available. Im Tracefile der DB sah man keinen Hinweis auf die
draufgehende Zeit, wohl aber im Tracefile des Reports (siehe Eintrag Tracinig in Reports
unten).
Mit dbms_lob.getlength(adresse.bilddb) kriegt man übrigens die Länge des gespeicherten
Bilds raus. Kann auch in Quickinfo verwendet werden.
Tracing in Oracle Reports
6.4.05 cr
Oracle Reports können einfach getraced werden wenn sie im command line modus gestartet
werden. Reports User-Parameters werden mit <param>=value übergeben, Beispiel:
RWRUN60 module=V640.rep userid=dynasoftbe/…@dssw tracefile=c:\temp\v640.trc
logfile=c:\temp\v640.log errfile=c:\temp\v640.err traceopts=trace_all p_vonauftrag=411051
siehe dazu:
- Report Builder Hilfe unter RWRUN60, command line arguments
- Metalink Note: 111311.1
Löschen von Rows in Forms mit Blöcken basierend auf Index-Organized Tables (IOT)
5.4.05 cr/tt
Da Index-Organized Tables keine RowId’s haben, Forms Blöcke aber auf RowId’s basieren
müssen auf Blockebene 2 Properties gesetzt werden um das Löschen von Rows zu
ermöglichen:
Primary Key
Key-Mode
-> true
-> Non-Updateable
zusätzlich muss min. 1 Item im Block auf:
Primary Key
-> true
gesetzt werden, siehe dazu Metalink Note: 74887.1
instal. developer 10g unter xp sp2 zusammen mit orant
29.3.05 rn
Wenn developer 10g auf einem xp-pc/server installiert wird, wo bereits ein orant besteht,
mussten wir folgende default-dienste vor der Installation deaktivieren (man. startart alleine
reichte nicht): ‚COM+-Ereignissystem’ und ‚Systemereignisbenachrichtigung’. Weiter musste
danach in der oracle-registry auf der obersten Ebene der Eintrag ‚Oracle_Home’ und
‚Oracle_Home_Name’ auskommentiert werden.
Leere Policies
29.3.05 pg
Wenn mit Row Level Security (RLS) = Virtual Private Databases (VPD) gearbeitet wird ist es
oft notwendig, für die User mit uneingeschränktem Zugriff auf die Daten ein leeres Prädikat
(null policy) aus einer Policy Funktion zurückzugeben. In der Doku wird das jeweils mit '1=1'
gemacht; das ist aber nicht der beste Weg: Ein Leerstring '' kann ebenfalls zurückgegeben
werden, das ist dann tatsächlich keine Policy, und die MViews erfordern das auch so (sonst
kommt ORA-30372 beim Refresh oder beim Anlegen der MView).
case when in select-statement (View)
3.3.05 ms
In einem SELECT-Statement (und damit auch in einem View) kann mit CASE WHEN ein
richtiger IF programmiert werden. Im Grunde ist das nichts anderes, als ein ausgebauter
DECODE (der decode lässt nur =-Vergleiche zu). Mögliches Beispiel:
select aufnr,folgenr,
case when ak.status < 22 then 'N' else 'J' end definitiv
from aufkopf
ORA-28133 full table access is restricted by fine-grained security beim Update
2.3.05 pg
Dort, wo VPN bzw. Policies im Einsatz sind, kann es beim alter table ... zur oben genannten
Fehlermeldung kommen. Offenbar kann ein owner, dessen Zugriff zu einer Table durch eine
Policy eingeschränkt ist, keinen Lock auf die ganze Table erhalten und deshalb das
Statement nicht ausführen. Auf der anderen Seite müssen die Zugriffe von TOSCA
eingeschränkt sein, weil die Views unter diesem Owner ausgeführt werden und sonst zuviele
Daten sichtbar wären.
Lösung: mit
grant exempt access policy to tosca;
kann dem TOSCA vorübergehend ein System Privilege erteilt werden, das die Policies für
ihn ausser Kraft setzt. Muss von einem anderen DBA aus geschehen, z.B. toscak oder
system.
NICHT VERGESSEN: nach dem Update muss das Privilege mit
revoke exempt access policy from tosca;
wieder entzogen werden, sonst wirken die Polices nicht mehr und Fehler in der Applikation
sind die Folge.
Fehlermeldung 'FRM-0:' in Forms
21.02.05 ms
Wenn in einem Form mit der Programm-Unit aus tosca_01.pll
EINBLENDEN(Feldname,false) oder auch EINBLENDEN(Feldname,true,'ena') ein Feld
angesprochen wird, das keinen Canvas hat erscheint die Fehlermeldung FRM-0, warum
auch immer?
Lange Wartezeit beim pa_objcomp im Aufbau der Statistiken
18.2.05 pg
Beim Objcomp, der innerhalb von pr_stat_nachf gemacht wird, scheint die Job-QueueSession beim alter package ... compile zu hängen. Tatsächlich wartet sie auf einen Lock
eines DB-Objects (Package, Procedure, ...), was sich in dba_kgllock zeigt. Nach 5 Minuten
wird ein ORA-04021 ins Alert Log geschrieben und die Prozedur läuft weiter.
Die Note 1070137.6 erklärt, wie man das analysieren kann (und warum man in den meisten
Fällen nichts machen kann)
http://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_id=1070137.6&p
_database_id=NOT
V100 bei Erfassen von Auftragszeilen
FRM-40735 Post-Insert Trigger trifft auf unbehandelte Exception ORA-03113
Erfassung nur einer Zeile möglich, danach Absturz
11.2.2005 uz
Es reicht, das 80634NT_Patch.exe (Das Ding ist in
\\dynant05\patches\developer6i\p2085372_8063_WINNT)
zu installieren. Für die Installation das dazugehörende setup.exe verwenden, nicht ein
allfällig vorhandener Installer. Die erfolgreiche Installation erkennt man daran, dass
die Version der Required Support Files 8.0.6.3.4 ist.
In P:\tosca\InstallTOSCA2\InstallDesDev6.doc hat es einen Hinweis zum Patch
Hr. Trumler(Hunkler) hat das ganze durchgezogen und auf einer XP-Maschine noch
Weitere Probleme gehabt.
Auf verschiedenen DLL’s Probleme gehabt. Muss aber alle DLL’s von diesem Patch
kopieren(zuerst löschen und dann nochmals durchlaufen).
Notiz in Metalink Note 297750.1
Zusätzlich Notiz: nach allfälligen andern Patches immer wieder diesen Patch reinziehen,
gem. Aussage von Hr. Trumler.
2085372
Zuweisen von Druckschacht bei HP-Druckern mit ‚neueren’ Treibern
03.02.05 bj
Bei neueren Treibern von HP-Druckern steht vor dem Schachtname ein Blank. Dies ist in
den Eigenschaften des Druckers nicht sichtbar, muss aber im Tosca so erfasst werden. Also
Blank, Fachname. Urs Röthlisberger hat ausserdem eine Software, die ins Innere der
verschiedenen Treibers schaut und solche Finessen ausfindig machen kann!
Suchen in LOV’s
01.02.05 kj
In LOV’s kann nach einem beliebigen Teil der angezeigten Werte gesucht werden (kleines
Feld oberhalb der Daten, %’ muss eingegen werden). Das funktioniert nicht mehr, wenn die
Anzahl Zeichen der Query zu gross wird. In der zugehörigen Record-Group kann die Länge
der Felder reduziert werden.
DB läuft nach dem Löschen von Archivelogs nicht weiter
18.1.05 pg
Situtation: der Platz für die Archive Logs war voll, dann wurden einige Log-Dateien gelöscht,
aber die DB läuft nicht weiter (sie kann auch nicht hinuntergefahren werden).
In dem Fall kann mit
alter system archive log start
das automatische Archivieren von Redo Logs wieder angekitzelt werden.
Achtung: keinen Shutdown machen; danach lässt sich keine Connection für das absetzen
des Befehls mehr aufbauen. Der Shutdown läuft auch nicht durch; falls trotzdem einer
gemacht wurde, muss der Service beendet werden, und wenn das auch nicht geht halt der
Task gekillt werden.
Für die Identifikation des Tasks gibt es Hilfsprogramme, oder tlist, das von Microsoft
heruntergeladen werden kann.
Fehler unter Forms Patchset 16
17.1.05 pg
Normalerweise laufen migrierte Forms, die unter Patchset 16 laufen, unter 10g einwandfrei.
Ein Beispiel für einen FRM-40202 Feld muss eingegeben werden bei Execute Query war in
OFO100, indem das Mirror Item DSP_PREIS required war, was eigentlich bei der
Kompilation hätte ignoriert werden sollen (entsprechende Warnung), aber offenbar nicht
ignoriert wurde (die Warnung fehlte) und zur Laufzeit zum Fehler führte.
Fehler bei Forms Server mit Patchset 16 (FRM-92101, Forms session <nn> aborted:
unable to communicate with runtime process
14.1.05 pg
Nach der Installation von Patchset 16 kann es, je nach IP-Adresse des Clients, zu der oben
gezeigten Fehlermeldung kommen. Daraus entstehen auf dem AS java Prozesse, die nicht
zu killen sind. Ist Oracle Bug 3702291. Lösung: im formsweb.cfg bei der serverURL den
HTTP-Parameter ifip=100.100.100.100 anhängen, also z.B.
serverURL=/servlet/f60listener?ifip=100.100.100.100
Ist bei uns und bei Witzig so gemacht.
Zuweisen von Laufwerkbuchstaben (mapping) auf eigenem PC
10.1.05 rn
auf dos-prompt: subst x: c:\ora_prog
weist auf dem lokalen pc dem c:\ora_prog - verzeichnis den laufwekbuchstaben x zu.
Installation Firefox (mozilla, IE, InternetExplorer, javaplugin, jinit)
6.1.05 rn
wenn man firefox anstelle von ie verwenden will, muss man das java-plugin für tosca-web
installieren. da firefox dieses plugin bis heute nicht richtig erkannt, muss folgendes vorgehen
ausgeführt werden.
zuerst firefox installieren, dann
in start/einstellungen/systemsteuerung/software das oracle jinitiator (momentan 1.3.17)
plugin entfernen
danach dieses wieder installieren (am einfachsten, indem man tosca-web im ie aufruft, und
so das plugin automatisch installiert).
danach sollte auch firefox das neu installierte plugin kennen.
System Requirements für ias 10g (version 9.0.4)
27.12.04 rn
folgende einträge werden vom installer gechecked:
Operating system
Microsoft Windows NT 4.0 with Service Pack 6a
Microsoft Windows 2000 with Service Pack 3 or above
Microsoft Windows Server 2003 (32-bit)
Microsoft Windows XP is supported only for these two types (also für uns nicht zulässig):
- J2EE and Web Cache middle tier without OracleAS Infrastructure 10g
- OracleAS Developer Kits 10g Note:
Oracle Application Server is not supported on Windows operating systems that include
Terminal Services (for example, Windows NT Terminal Server Edition and Windows 2000
with Terminal Services are not supported).
min. 300Mhz Intel Pentium processor Memory
min. Disk-Platz: 10 GB
min. 3 GB RAM
Drucken auf "lokalen" Drucker unter Reports Server
26.11.04 pg
Unter Reports Server kann auch auf lokale Drucker, d.h. solche, die der Reports Server
selber sieht, gedruckt werden (drucken.pll ist darauf vorbereitet). Man muss aber auch in
diesem Fall die erweiterten Druckfunktionen abstellen, sonst wird der Inhalt des Printfiles als
Text gedruckt.
Sortierung in hierarchischen Queries (Connect by)
8.10.04 pg
Unter 8i konnte die hierarchische Sortierung nicht definiert werden, da musste man schauen,
dass der richtige Index verwendet wird. Seit es den Index katg_parent gibt, der nur den
Parent, nicht aber die Sequenz indexiert, muss man den gegebenenfalls ausschalten:
select /*+ no_index (katg katg_parent) */ katg.*, level ebene
from katgliederung katg
Unter 9i steht die ORDER SYBLINGS BY Clause zur Verfügung. Für Statements, die unter
beiden Releasen laufen müssen, kann man gemäss Forum Beitrag 600920.999:
try to use NO_FILTERING hint (this is undocumented hint).
You can also set in your test session
alter session set "_old_connect_by_enabled" = TRUE
This is a hidden parameter available in 9i to switch back to the behavior of hierarchical
queries prior release 9i.
httpd.conf im em editieren
23.9.04 rn
Das probelm ist, dass man NIE <Directory "c:\Tosca\htdocs"> einsetzen darf sondern nur
<Directory c:\Tosca\htdocs>. diese " haben die fehler ausgelöst.
Uuuuups. PG.
d2kwutil und ora-6508
17.9.04 pg
Bei Jutzler war folgender Fall: Menu ruft Forms Paramform über drucken.pll auf. Im Form
wird win_api.get_working_dir aus d2kwutil.pll aufgerufen (forciert laden von d2kwut60.dll).
Später wird aus dem Form drucken.druck aufgerufen, was wiederum einen Call in
d2kwtuil.pll machen will, der dann mit einem ORA-6508 beendet wird.
Die tiefe Ursache habe ich nicht gefunden, aber folgender Workaround hat geholfen:
get_workingdir in drucken.pll wrappen, so dass aus dem Form die d2kwutil.pll via drucken.pll
aufgerufen werden kann.
Deshalb: wer immer einem Report das Workingdir als Parameter übergeben will, soll das im
Form nicht über win_api.get_working_dir, sondern über drucken.get_workingdir auslesen.
Info über Temporary Tables
2.9.04 pg
in dba_segments kommen die Temporary Segments in Temporary Files nicht vor.
select * from V$TEMPFILE
--Information about all tempfiles, including tablespace number of owning tablespace.
select * from V$TEMP_EXTENT_MAP
--Information for all extents in all locally managed temporary tablespaces.
select * from V$TEMP_EXTENT_POOL
--For locally managed temporary tablespaces: the state of temporary space cached and used for
by each instance.
select * from V$TEMP_SPACE_HEADER
--Shows space used/free for each tempfile.
select * from v$sort_usage
-- aktuelle Auslastung des Sort-Segments
select * from v$sort_segment
-- Grösse des Sort-Segments. Das wächst während der Laufzeit der DB immer an und wird beim
Neustart auf 0 gestellt. Grösst ist also die High Water Mark.
Fehlende FK-Constraints nach Import
1.9.04 pg
Nach der Migration bei Schoch vom 8i auf 9i mit import haben in der Zieldatenbank ca. 40
Foreign Key Constraints, teilweise auch mit cascade delete, gefehlt. Empfehlung: Nach
solchen Migrationen das Vorhandensein aller Objekte und aller Constraints (denn die sind
keine Objekte) mit diesen beiden Statements überprüfen:
für die dba_objects:
select owner, object_name
from dba_objects@dblink
where owner like 'TOSCA%'
minus
select owner, object_name
from dba_objects
für die Constraints:
select owner, constraint_name,
constraint_type,table_name,r_owner,r_constraint_name,delete_rule,status
from dba_constraints@dblink
where owner like 'TOSCA%'
and
constraint_name not like 'SYS%' -- 1)
minus
select owner, constraint_name,
constraint_type,table_name,r_owner,r_constraint_name,delete_rule,status
from dba_constraints
where owner like 'TOSCA%'
1) not-null-Constraints werden als Check Constraints mit dem Namen SYS% angelegt, die
sich aber in beiden Instanzen unterscheiden. Deshalb diese ausnehmen vom Check.
Fehlende Constraints können mit dem Script creaFksVonDblink.sql angelegt werden.
Bei dieser Migration wurden die grossen Tables mit Tablespace TOSCA_DATA_GROSS
vorangelegt. Vielleicht hat das den Import der FK's verhindert.
DB-Links und Global-Names
27.8.04 pg
Um mit DB Links vernünftig arbeiten zu können (damit z.B. im Remote Statement lokale
Funktionen oder Sequences aufgerufen werden können), sollte unbedingt mit
global_names=true gearbeitet werden.
Diese Einstellung erfordert aber, dass der DB-Link gleicht heisst wie die Zieldatenbank,
wobei es nicht auf den Namen im lokalen tnsnames drauf an kommt, sondern auf den
Namen der Datenbank in select * from sys.global_name (auf der Zieldatenbank).
Wenn der Name der Ziel-DB gleich sein sollte wie der der aktuellen DB, muss eine der
beiden umbenannt werden.
Beispielsweise ist auf scho (9.2)
create public database link scho.world connect to toscasw identified by *** using
'scho8.world'
absolut legal:
Der DB-Link heisst scho.world, weil die Zieldatenbank selber auch scho.world heisst, die
lokale DB heisst glücklicherweise nur scho, somit sind die Namen unterschiedlich, und
scho8.world heisst die DB im lokalen tnsnames.ora auf dem Server, auf dem die scho (9.2)
selber auch läuft.
Im Notfall (wenn die Global-Names der beiden DB's zusammenfallen, kann der eine gemäss
Note 19367.1 geändert werden:
ALTER DATABASE RENAME GLOBAL_NAME TO ......
NOTE: changing the DB_DOMAIN parameter in init.ora is not enough - that parameter only
has effect at database creation time.
Siehe auch Note: 117278.1
feldfreidef.kopieren oder andere nicht-kompilierbare columns (pls-00364 pls-00201)
19.08.04 rn
Wenn eine procedure nicht kompilierbar (error pls-00201) ist wegen einer column, die zwar
vorhanden ist aber offensichtlich nicht erkannt wird (war bei feldfreidef.kopieren so), kann
das Problem mit dem server-script catalog.sql gelöst werden
PDF wird aus Webforms wird nicht erstellt
19.8.04 tt
Wenn im Browser ein Popup-Blocker z.B. Google-Toolbar installiert ist, wird die Anzeige
unterdrückt. Lösung: Die Tosca-Internetadresse im Popup-Blocker als Popup zulässig
eintragen.
Vertikalen Text in word markieren
19.08.04 rn
Wenn man einen vertikalen Text in Word markieren muss, kann mit der gehaltenen ALTTaste dieser Bereich markiert werden. Gut für z.B. Zusammenzugs-update-script in Tosca,
wo zuerst auf DOS-Prompt im Versionen-Verzeichnis mit DIR > datei-name eine OutputDatei aller update-scripts erstellt werden kann. Danach mit vertikal-markierten upd9999
einen Zusammenfassungs-Script basteln
Developer update (Forms, Reports, Patches) dauert sehr lang
19.08.04 rn
Wenn eine Installation oder ein update des Developers sehr lange dauert, muss die neue
Software zwingend auf dem ausführenden PC installiert sein. Meist ist das ja so, weil das
ganze ab CD passiert. Wenn z.B. ein Patch aber installiert wird, sollte dieser nie auf dem
Server aufgerufen werden sonder auf dem ausführenden PC.
Bei Patch-installationen wird optimalerweise mit dem selben Betriebssystem wie bei der
Originalinstallation gearbeitet, sonst bricht das Setup-Programm mit '...kann nicht ins selbe
Home installiert werden ...'.==> siehe auch Hinweis betr. NT.RGS
beim Compilieren von V100 schmiert Form-Builder ab (Dr. Watson)
16.08.04 ms
Wenn mit Shift+Ctrl+K ein Form das V100.fmb compiliert wird, schmiert der Form-Builder
etwa im Bereich CHK_ARTIKEL_AND_GET_DEFAULTS ab. Nach langen Suchen in
tosca.olb und *.plls, habe ich gemerkt, dass sich das Form gegen eine andere Instance
fehlerfrei kompilieren lässt. Nach dem Flush der SGA ging das dann auch wieder in CA20.
SQL: Wochentag als Nummer
12.08.04 cr
Die Funktion to_char(sysdate,'D') gibt den Wochentag als Nummer zurück, wobei Sonntag
in:
Europa = 7
Amerika = 1
ist !
Weil die NLS-Parameter der DB von der Registry überlagert werden kann dies an
verschiedenen PCs zu unterschiedlichen Ergebnissen führen.
Mit folgendem Select lässt sich dies umgehen:
select decode(to_char( sysdate, 'FMDAY', 'NLS_DATE_LANGUAGE=''AMERICAN'''),
'MONDAY',
1,
'TUESDAY',
2,
'WEDNESDAY',
3,
'THURSDAY',
4,
'FRIDAY',
5,
'SATURDAY',
6,
'SUNDAY',
7) from dual;
Verhalten von Totalisierungen in Discoverer
29.07.04 rn
At the request of many customers, the behaviour of a total on a calculated column has been
modified. An example best illustrates this difference:
Column A
10
200
Column B
2
4
Calculation (A/B)
5
50
90
----Total 300
3
30
--------9 In 3.1.25 Total = 85 (i.e. 5 + 50 + 30)
In 3.1.26 and higher Total = 33.33 (i.e. 300 / 9)
In short, Discoverer 3.1.26 and higher calculates the total instead of
totalling the calculations.
In last 4i versions (4.1.43 and later) you have the same behaviour if you create
the calculations in Discoverer Administration Edition or User/Plus Editions.
Discoverer 9i release has an option of choosing what way you want it to
calculate totals, i.e. SUM or CELL SUM. You are able to select what method is
relevant for your business need.
==> siehe auch in metalink unter:
AllowAggregationOverRepeatedValues
AggregationBehavior
To allow Discoverer to determine the behavior
AggregationBehavior = 0
To force linear aggregation of items (except calculations that use analytic functions and
calculations with repeated values)
AggregationBehavior = 1
The default value for this preference is 0.
Windows Update unter XP
29.07.04 tt
Unter Windows XP gelten für 'Automatisch Updates' folgende Einstellungen.
Die Updates sind regelmassig durchzuführen. Im besten Fall nach nachdem das System ein
Update angezeigt hat, mindestens jedoch einmal pro Monat.
Einstellungen zu finden unter: Rechstlklick auf Arbeitsplatz, Eigenschaften
Performance unter XP
29.07.04 tt
Rechtsklick auf Arbeitsplatz, Eigenschaften, Erweitert, Systemleistung Einstellungen, für
optimale Leistung anpassen. Das Design ist dann etwas kantiger dafür die Performance viel
besser.
Toad, editieren, gross - kleinschrift, syntax
2.7.04 rn
das problem von gross-kleinschrift, die im toad automatisch umgestellt wird (sowie weitere
editier - default - einstellungen) kann mit folgendermassen anpassen (ques-support-antwort):
To disable the syntax highlighting can you try this.
1. Please Right-Click the text area of your SQL Edit Window > Editing Options > General
Options > Display Options > then uncheck "Apply capitalization effects".
2. Highlighting > Display item > and ensure that all display item has the status of
"unchanged" for Capitalization effects.
In addition, please try the following:
1. Go to View | Options | Procedure Editor | General and uncheck the option called "Highlight
names of Stored Procedures."
2. Go to View | Options | Editors | General and uncheck "Use syntax highlighting on
tablenames."
Konfigurationsfiles (z.B. listener.ora) werden nicht gelesen
29.6.04 pg
Wenn Konfigurationsfiles nicht gelesen werden können, kann es daran liegen, dass sie im
Unicode Format vorliegen. Kann mit einem Hex-Editor (z.B: HEX-Treme) am sichersten
nachgewiesen werden. Ein Hinweis kann auch die Grösse sein (die sind doppelt so gross
wie gewohnt), oder was der WordPad MFC-Anwendung (nicht der Editor!) im Datei –
Speichern unter vorschlägt. Damit kann das Ding auch umformatiert werden.
Der Listener startet auch ohne Konfig-File; er kennt dann einfach nur die Datenbanken, die
sich bei ihm anmelden können, also die die schon laufen, und die neu im listener.ora
eingetragenen nicht. Mit lsnrctl status werden also viel zu wenige DB's angezeigt. Beim
Versuch, sich an eine DB anzumelden, kommt folgerichtig ein
SQL> connect sys/dab@dsj9 as sysdba;
ERROR:
ORA-12505: TNS:listener could not resolve SID given in connect descriptor
Invalid oder PLS-00123 (program too large) beim Kompilieren aus dem Frosch
18.6.04 pg
Wenn im TOAD ein Package Body im Procedure Editor kompiliert wird, kommt keine
Fehlermeldung, aber in der Statuszeile bleibt "invalid" stehen. Beim Kompilieren aus dem
Schema Browser kommt PLS-00123.
In dem Fall kann man sich mit dem SQL-Plus mit
alter package <package-name> compile body
retten.
grosse Dokumente die nicht per EMail versandt werden können, können auf unserem
WebServer zum Download bereitgestellt werden
17.6.04 ms
Auf dem Server ias.dynasoft.ch steht das Verzeichnis
c:\oracle\iSuites\Apache\Apache\htdocs\transfer
Hier können die Dateien zum Download hineingestellt werden. Der Download selber wird
dann mit folgendem URL aufgerufen:
ias.dynasoft.ch/transfer/<filename>.
Achtung: das Verzeichnis ist nicht geschützt, und es kann auch aufgelistet werden. File also
nach dem Download wieder löschen !
Dienst (Service) auf Windows für Reports Server
7.6.04 pg
Der Installer von Developer hat manchmal Mühe, den Reports Server zu installieren. Das
kann in <oracle_home>\bin mit
rwmts60 -install <srvcname> tcpip
erledigt werden. Achtung: nicht –tcpip eingeben, sonst hat der Reports Dienst dann eine
Abhängigkeit von einem nicht vorhandenen tcpip Dienst und kann nicht gestartet werden.
Zweites Achtung: der srvcname muss im tnsnames.ora ebenfalls vorkommen. Und mit _ im
Namen gibt es dort Probleme, die also bitte vermeiden.
discoverer 5, discoverer hänger
17.5.04 rn
discoverer 5 (für 10g) generiert einen eigenen EUL5. dieser kommt EUL4 (für discoverer 4)
nicht in den weg und discoverer 4 kann auch weiterhin benutzt werden.
für ev. hänger beim starten eines workooks (er hängt bei 'determining query time...')
kann in der registry unter
hkey_current_user/software/oracle/discoverer4/database
mit: neu: DWORD-Wert
BusinessAreaFastFetchLevel 1
Possible values are:
0 - No Fast Fetch
1 - Fast Fetch the objects within each business area
2 - Fast Fetch objects within each business area and items in user mode only
3 - Fast Fetch objects within each business area and items in admin mode only
4 - Fast Fetch objects and item
You can set it to 4.
QPPEnable 0
QPPUseCpuTime 1
HKEY_CURRENT_USER\Software\Oracle\Discoverer 4\Database\QPPCBOEnforced=0
HKEY_CURRENT_USER\Software\Oracle\Discoverer 4\Database\QPPRBOEnforced=0
(==> costbased und rulebased - optimizer für discoverer ein- und ausschalten)
QPPEnable = 1 # Will use QPP if set > 0.
QPPCreateNewStats = 1 # Will record new statistics if set > 0.
QPPLoadStatsByObjectUseKey = 1 # Will use statistics for same objects first if set > 0.
QPPUseCpuTime = 1 # QPP uses CPU time within its algorithm.
QPPAvgCostTimeAlgorithm = 2 #
QPPMaxObjectUseKey = 30 #
QPPCBOEnforced = 1 #
QPPObtainCostMethod = 1 #
QPPMinCost = 0 # Will only use/record statistics with a cost > value.
QPPMaxStats = 500 # Will only load this many previous statistics.
QPPMinActCpuTime = 0 # Will only use/record statistics with a CPU time > value.
QPPMinActElapsedTime = 0 # Will only use/record statistics with an actual elapsed time >
value.
QPPMinEstElapsedTime = 0 # Will only use/record statistics with an estimated elapsed time
> value.
UseOptimizerHints = 0 # Will add Optimizer hints to SQL if set > 0.
QuerySQLFastFetchLevel = 1 #
SQLTrace = 0 # False(off).
oracle as 10g - installer startet nicht unter w2k sp4
16.4.04 rn
Installer man. in DOS-Fenster starten:
install\win32\setup.exe -J-Dsun.java2d.noddraw=true
Bilder laden unter WebForms
14.4.03 pg
Bilder, die mit der Icon Filename Property eines Buttons oder Menuitems definiert sind,
werden unter WebForms in dem Pfad geladen, der in
<FORMS_HOME>\java\oracle\forms\registry\registry.dat
in der Einstellung default.icons.iconpath hinterlegt ist. Dazu muss der WebServer den Url,
der sich aus diesem Pfad, dem Icon Filename und der default Iconextension ergibt, bedienen
können (z.B. http://ias.dynasoft.ch/tosca/icons/query.gif). Standardmässig liefern wir solche
Bilder aus tosca\icons\Tosca2.
Ganz anders die Bilder, die mit read_image_file in ein Image Item geladen werden: die
werden offenbar auf Server Seite aus dem Filesystem geladen, in dem Pfad, der sich aus
Laufzeitverzeichnis und Filename ergibt. Diese Bilder (Firmen- und Toscalogo, drucker1.gif
und drucker2.gif bei Tosca 2.6) müssen sich meist im Forms (*.fmx) Verzeichnis befinden.
Forms dumpen nach kompilieren von der Kommandozeile (ifcmp60)
19.3.04 pg
Forms, die das Tree Control brauchen, laufen gut wenn sie aus dem Forms Builder kompiliert
wurden, aber dumpen, wenn sie aus der Kommandozeile kompiliert wurden. Der Grund war,
dass aus dem WHEN_TREEN_NODE_EXPANDED Trigger des Tree Controls ein Package
aus dem Form mit optionalen Parametern aufgerufen wurde, und auch keine Parameter
übergeben wurden (im Package steht also tree.expand (a in number default 0, b inn number
default 1); und aufgerufen wurde aus dem Trigger tree.expand ;)
Wenn die Parameter übergeben wurden, läuft es ohne Probleme. Die Details sind unklar, wie
der Bug von Oracle nicht veröffentlicht wird; bei ähnlichem Verhalten (also crash nach
ifcmp60) könnte aber nach diesen Ursachen gesucht werden.
Zusatzinfo: ist auf Form6i Patchset 6, Patchset 15 und auf Forms 10g reproduziert worden.
Synonyme nicht möglich für Object Types
10.3..04 pg
Für Object Types können in Oracle bis Version 9.1 Synonyme zwar deklariert werden,
funktionieren aber nicht (-> ORA-22863). Aus diesem Grund haben wir die Zugriffe auf
Object Types z.B. in pa_mitt voll qualifiziert (also tosca.ob_email geschrieben). Das ist nicht
sehr portabel, z.B. zu Schoch nicht.
Für den Zugriff aus Stored Procs / Packages ist aber das Synonym nicht notwendig
(Namensauflösung erfolgt im Schema Kontext des Owners der SP/Package, wenn das
Package nicht mit AUTHID CURRENT_USER angelegt wurde). Deshalb wurden die voll
qualifizierten Aufrufe am 10.3.04 durch unqualifizierte ersetzt.
In anonymen PL/SQL Code muss die Qualifikation beibehalten werden, aber auf der DB gibt
es keinen solchen Code, höchstens in Forms.
Ab Version 9.2 funktionieren die Synonyme gemäss Metalink (getestet habe ich es nicht).
Deshalb sollen sie angelegt werden.
Object Types werden also mit GRANT EXECUTE TO PUBLIC und mit Synonym angelegt.
TNS_ADMIN ignoriert nach Installation von Forms 10g
24.2.04 pg
Der Installer von Forms 10g setzt eine Umgebungsvarialbe (DOS –Set) namens
TNS_ADMIN, die auf <ora_home>\DS10g\network\admin zeigt. Diese Angabe von
TNS_ADMIN übersteuert die Registry, auch für ältere Ora-Home's. Resultate sind die
üblichen Fehler, die bei einem falschen TNS_NAMES.ORA erscheinen (z.B. ORA-12154
oder TNS-03505).
Tip: Umgebungsvariable löschen.
DB-Links zwischen 7.3.4 und 9.2 gehen nicht
17.2.04 pg
Und zwar, weil der 9.2er Client (den die DB verwendet) Connections zu 7.3.4. nicht
untersützt. Siehe Metalink
http://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_id=207319.1&p_
database_id=NOT
In dieser Note steht auch, dass für DB-Links die Connectivity in beide Richtungen untersützt
sein muss; deshalb geht der DB-Link in der Gegenrichtung auch gleich nicht.
Advanced Queues nach Migration
5.1.04 pg
Wenn ein Full Database Export / Import gemacht wird und in den AQ Tables Daten
vorhanden sind, funktionieren die AQ Tables anschliessend ev. nicht richtig: Drop Table geht
nicht mit
ORA-24005: Zum Löschen von Queue-Tabellen muss
DBMS_AQADM.DROP_QUEUE_TABLE verwendet werden
Die angegebene Procedur funktioniert auch nicht:
ORA-24002: QUEUE_TABLE TOSCA.EMAIL_AQ ist nicht vorhanden
1. Versuch: dbms_aqadm.drop_queue_table('<Table_Name>',true) ;
(true heisst force=>true). Wenn das auch nicht geht muss
2. Versuch
wie in Note 236898.1 beschrieben vorgegangen werden (es muss ein Patch, der mit der ZielDB-Version übereinstimmt, heruntergeladen werden. Für 9.2.0.1 ist der in
\\dynant05\Patches\DROP9201.zip)
SQL> connect sys/dab@tonet as sysdba;
Connect durchgeführt.
SQL> @C:\Oracle\Patches\drop9201\corr_aq_92s
Paket wurde erstellt.
SQL> @C:\Oracle\Patches\drop9201\corr_aq_92b.plb
Paketrumpf wurde erstellt.
-- zuerst die Queues aus dem Repository löschen
SQL> exec corr_aq_92.drop_corrupted_q92('TOSCA','EMAIL_AQ','EMAIL',false)
BEGIN corr_aq_92.drop_corrupted_q92('TOSCA','EMAIL_AQ','EMAIL',false); END;
*
FEHLER in Zeile 1:
ORA-24010: QUEUE TOSCA.EMAIL ist nicht vorhanden
ORA-06512: in "SYS.DBMS_SYS_ERROR", Zeile 86
ORA-06512: in "SYS.CORR_AQ_92", Zeile 120
ORA-06512: in Zeile 1
-- dann die Queue Tables
SQL> exec corr_aq_92.drop_corrupted_qt92('TOSCA','EMAIL_AQ',false,'8.1')
PL/SQL-Prozedur wurde erfolgreich abgeschlossen.
updparam20, plus33w
12.11.03 rn
Wenn updparam20 wegen falschem Datentyp nicht durchläuft, kann das mit dem Benutzen
von plus33w (anstelle von plus80w) zusammenhange. Das Problem liegt in den Datentypen
number(floating), welche unter sqlnet falsch, utner net8 aber richtig angezeigt werden.
Test auf Wochentag
22.10.03 ms
Mit z.B. to_char(sysdate,'Dy','nls_date_language = german') in ('Sa','So') zuverlässig ohne
Abhängigkeit der eingestellt NLS_LANG auf einen festen Wochentag (oder wie oben
Wochenende) getestet werden.
Zugriff auf eigene Tabelle in DB-Trigger
22.10.03 ms
Gemäss Soug Newsletter 4/2003 darf in einem After-Statement-DB-Trigger die eigene
geänderte Tabelle gelesen werden.
Achtung, ein After-Statement-Trigger wird von TOSCA noch nirgends eingesetzt, unsere DBTrigger sind immer After-Row-Triggers (FOR EACH ROW), d.h. sie werden für jede Row
einmal ausgeführt. Der After-Statement-Trigger wird nur einmal pro Statement (z.B. update
artikel set zahl1 = 0) ausgeführt.
Volltext-Suche in Dateien unter XP, vorläufig ultimativer Tip
6.10.03 pg
Suche unter XP läuft über den Indexdienst, der aber defaultmässig abgestellt ist.
Nichtsdestotrotz wird eine Einstellung des Indexdienstes berücksichtigt, die entscheidet, ob
Dateien mit unbekannten Endungen indexiert werden oder nicht. Und so stellt man die um:
im Suchen-Dialog des Explorers: bevorzugte Einstellungen ändern – Indexdienst verwenden
- Indexdiensteinstellungen ändern. Es öffnet sich ein Dialogfenster "Indexdienst" der
Management Console. Unter Aktion – Eigenschaften finden wir das ersehnte Checkböxlein
Dateien mit unbekannter Erweiterung indexieren. Checken, dann geht’s.
Wenn jemand weiss, wie man direkter zu den Indexdiensteinstellungen kommt, soll er's /
sie's hier hineinschreiben.
Navigationsprobleme in Forms bei Master-Detail-Relation
03.10.03 ms
Wenn im Form eine Master-Detail-Relation definiert ist kann es bei der Navigation mit der
Maus vom Detail- in den Master-Block Probleme geben. Um das Problem zu erhalten,
müssen folgende Bedingungen erfüllt sein:
auf dem Detail-Block muss mindestens ein Feld mandatory d.h. required sein
die Relation muss so angelegt worden sein, dass auf Form-Ebene der ON-CLEARDETAILS-Trigger mit der PU 'Clear_All_Master_Details;' besteht
der Cursor muss in einem Item stehen, das sich in der Reihenfolge nach dem requiredItem befindet
mit der Maus muss in ein Item auf dem Master-Block geklickt werden
Der Depp versucht dann im 'Clear_All_Master_Details;' wieder auf dieses Item zu navigieren,
was er nicht kann, weil er am mandatory-Item nicht vorbei kommt, was aber auch nicht nötig
ist, denn wir wollen ja in das Item auf dem Master-Block.
Das Problem kann folgendermassen umschifft resp. korrekt gelöst werden. In der PU
'Clear_All_Master_Details muss das 'startitm' anders initialisiert werden, nämlich nicht mit
dem :system.cursor_item, sondern mit dem :system.trigger_item. Nachzulesen im M650 oder
hier:
das auskommentieren: --startitm := :System.Cursor_Item;
das einsetzen: startitm := :System.trigger_item;
DB-Objekte gelockt unter 9i
19.8.03 pg
Unter 9i bis zu einem gewissen Release bleiben durch den Form Builder die DB-Objekte
gelockt, und zwar bis nach dem Disconnect (Form Builder muss geschlossen werden).Mit
dem folgenden Statement können solche Locks gefunden werden:
select /*+ ordered */ w1.sid waiting_session,
h1.sid holding_session,
w.kgllktype lock_or_pin,
w.kgllkhdl address,
decode(h.kgllkmod, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive',
'Unknown') mode_held,
decode(w.kgllkreq, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive',
'Unknown') mode_requested
from dba_kgllock w, dba_kgllock h, v$session w1, v$session h1
where
(((h.kgllkmod != 0) and (h.kgllkmod != 1)
and ((h.kgllkreq = 0) or (h.kgllkreq = 1)))
and
(((w.kgllkmod = 0) or (w.kgllkmod= 1))
and ((w.kgllkreq != 0) and (w.kgllkreq != 1))))
and w.kgllktype = h.kgllktype
and w.kgllkhdl = h.kgllkhdl
and w.kgllkuse = w1.saddr
and h.kgllkuse = h1.saddr
Warum ist die Suche nach Dateien mit XP so langsam ?
18.9.03 ms / mc
Der Grund ist, das XP sämtliche ZIP Dateien mit untersucht.
Lässt sich mit regsvr32 /u %windir%\system32\zipfldr.dll unterbinden und mit regsvr32
%windir%\system32\zipfldr.dll wieder aktivieren (Neustart erforderlich)
kill von sessions (Nachtrag zu rn 4.9.03)
16.9.03 cr
Jeder Oracle Benutzerprozess wird auf Windows als Thread representiert und läuft innerhalb
des Prozesses oracle.exe.
Versucht man einen Prozess mit ‚alter system kill session...’ zu löschen wird unter
umständen nur die Session nicht aber der Thread gelöscht. Dafür bietet Oracle das Utility
ORAKILL, das auf dem Server in einem DOS-Fenster gestartet wird.
Beschreibung: einfach ORAKILL eingeben oder im Metalink Doc ID 69882.1 nachlesen oder
script @orakill.sql.
Working Directory von Reports
5.9.03 pg
Beim Mailen von Reports wird unter 6i das Working Directory schon zu einem sehr frühen
Zeitpunkt umgestellt, so dass workingdir.save im Before Report Trigger schon nicht mehr das
aktuelle Workingdir sichert. Damit ist die Auflösung von *.pll, das finden von ev. Bilderfiles
und vor allem der nächste Reports Aufruf gefährdet.
Lösungen: Aufrufe von Forms auf Reports können mit dem Parameter 15 logisch 2 immer
mit vorangestelltem Forms Pfad erfolgen. Und falls Files benötigt werden, kann an Reports
das Forms Workingdir als Parameter übergeben werden, damit der Pfad des Files zur
Laufzeit zusammengesetzt werden kann. REPORTS60_PATH ist auch eine Lösung, aber
nicht in allen Situationen.
In dem Zusammenhang haben wir environ.pll eingeführt, das von den Reports angesprochen
werden kann und vor dem Report (Before Parameter Form) das Workingdir mit
workingdir.save sichern und im after report trigger mit workingdir.restore wiederherstellen
kann.
Basiert auf d2kwutil.dll und hat unter Reports Server 10g dann und wann Probleme gegeben,
die nie vollständig gelöst wurden, und ist darum in einigen neueren Reports wieder weg.
kill von sessions
4.9.03 rn
sessions, die sofort und definitiv gekillt werde sollen, muss man mit dem befehl ‚alter system
kill session '88,99999’ immediate;’ (88=sid von @sessions, 99999=serial# von @sessions)
auf dem sqlplus abschiessen. mit ‚kill session’ im toad werden sie ev. nur mit ‚marked for kill’
markiert und hangen dann unter gewissen umständen noch ewig im system mit
entsprechenden looks. wenn im toad die session mal ‚marked for kill’ wurde, kann sie nie
mehr auf dem sqlplus ‚immediate’ gelöscht werden!
External Procedures, pa_objtosca.winexec
26.8.03 pg
Unter XP liegt kernel32.dll nicht in c:\winnt\system32, sondern in c:\windows\system32.
Wenn also ein Server unter XP läuft und mit pa_objtosca.winexec auf dem Server
Programme ausgeführt werden sollen, muss die Library li_nt_kernel angepasst werden:
drop library li_nt_kernel; create library li_nt_kernel as 'c:\windows\system32\kernel32.dll';
Sonst kommt ORA-06520.
Unter 9i müssen die DLL's, auf welche zugegriffen wird, entweder im Oracle_home sein,
oder mit der Umgebungsvariable EXPROC_DLLS explizit freigegeben sein.
EXTPROC_DLLS=ANY erteilt den Zugriff auf alle. Umgebungsvariabeln sollten im
listener.ora mit ENVS="EXTPROC_DLLS=ANY" gesetzt werden können, bei mir klappte das
aber nicht. Entsprechende Fehlermeldung: ORA-28595: Extproc agent : Invalid DLL Path
Lösung: EXTPROC_DLLS als System-Umgebungsvariable setzen (offenbar wird listener.ora
ignoriert).
Noch ein Hinweis: beim Testen hat ein einmal geladenes extrpoc.exe (Task Manager) noch
die Verbindung zur aktuellen Server Session und schon einmal geladene DLL's noch
geladen. Das stiftet Verwirrung. Deshalb nach jeder Änderung den Prozess extproc.exe
abknallen. Danach kommt beim ersten erneuten Zugriff die Fehlermeldung lost connection,
beim nächsten run klappt es.
Unter 9i können nur noch Prozeduren aufgerufen werden, die mit cdecl exportiert werden,
und nicht mehr mit stdcall (ORA-28576). Für kernel32 trifft leider immer letzeres zu, so dass
eine wrapper dll eingesetzt werden muss, siehe Metalink Note 217451.1.
Für die Funktionen winexec und getcomputername in kernel32.dll gibt es diese unter
p:\tosca\admin\extproc\kernel32wrapper.dll. Installation: kernel32wrapper.dll in
\windows\system kopieren,
create or replace library li_nt_kernel as 'c:\windows\system32\kernel32wrapper.dll';
Select auf Inhalte von Object / Collection Types
25.8.03 pg
Bei Zugriff auf Inhalte von Objekt Typen muss eine spezielle Syntax angewendet werden
(sog. Collection Unnesting). Der Trick ist, dass bei Tabellen zwingend ein Table Alias
verwendet wird.
Bsp: Mail's mit deren Attachments:
select e.*, (select * from table(e.user_data.attachments) where rownum = 1)
from email_aq e
Toad debugger (parameter date)
22.8.03 rn
 Wenn beim Toad-Debugger ein Datums-Parameter eingegeben werden muss, sollte
das mit folgendem Format passieren : to_date(‚01.01.03’,’DD.MM.RR’)
 dieses format kann in den toad-eigenschaften (ab version 9) unter data-grids –
debugger eingestellt werden
 zudem kann unter editor – execute/compile die checkbox ‚default to compile with
debug’ herausgenommen werden, damit nicht jedesmal im debug-modus compiliert
wird
NLS_LANG in Forms9i Builder
22.8.03 pg
Wenn für Forms 9i Builder eine NLS_LANG oder DEVELOPER_NLS_LANG konfiguriert
werden soll, muss dieser Registry-Eintrag als REG_EXPAND_SZ angelegt werden (neu –
Wert der erweiterbaren Zeichenfolge). Forms9i Builder versteht es zwar immer, aber bei der
Übermittlung an die DB beim Connect klappts sonst nicht und es kommt ein ORA-12705:
invalid or unknown NLS parameter value specified.
webutil unter Forms9i konfigurieren
22.8.03 pg aus Kurs
---formsweb.cfg:
#baseHTMLjinitiator=basejini.htm
baseHTMLjinitiator=D:\webutil\server\webutiljini.htm
neu:
#webUtilArchive=webutil.jar
webUtilArchive=/forms90/webutil/webutil.jar,/forms90/webutil/jacob.jar
WebUtilLogging=off
WebUtilLoggingDetail=normal
WebUtilErrorMode=Alert
in Std:
width=100%
height=100%
separateFrame=true
als Beispiel
[webutil]
pageTitle=Oracle9iAS Forms Services - WebUtil
#webUtilArchive=webutil.jar,jacob.jar
webUtilArchive=/forms90/webutil/webutil.jar,/forms90/webutil/jacob.jar
WebUtilLogging=off
WebUtilLoggingDetail=normal
WebUtilErrorMode=Alert
baseHTMLjinitiator=D:\webutil\server\webutiljini.htm
archive_jini=f90all_jinit.jar
archive=f90all.jar
lookAndFeel=oracle
width=100%
height=100%
envFile=d:\webutil\server\webutil.env
--Pfade für neue virtuelle Verzeichnisse in orion-web.xml im Application-Depolyment
Verzeichnis
<virtual-directory virtual-path="/webutil" real-path="C:\data\tosca\Forms9i/webutil/lib"
/>
<virtual-directory virtual-path="/webicons" real-path="C:\oracle\Oracle9iDS/webicons"
/>
-- in Registry.dat:
default.icons.iconpath=webicons/
default.icons.iconextension=gif
-- übrigens kann in formsweb.cfg mit serverApp = .. definiert werden, welche Einträge aus
Registry.dat geladen werden.
-- webutil.lib in Forms90\java reinkopieren
-- default.env:
--ev. forms90_path
--path=für Oracle_home\bin\ plus jdk\jre\classic
--classpath für Wewbutil und jacob.jar
--webutil.config =
PATH=C:\Oracle\DS9i\bin;C:\Oracle\DS9i\jdk\jre\bin\classic
CLASSPATH=C:\Oracle\DS9i\jlib\debugger.jar;C:\Oracle\DS9i\jlib\ewt3.jar;C:\Oracle\DS9i\jli
b\share.jar;C:\Oracle\DS9i\jlib\utj90.jar;C:\Data\Tosca\Forms9i\webutil\lib\jacob.jar;C:\Data\T
osca\Forms9i\webutil\lib\webutil.jar
WEBUTIL_CONFIG=C:\data\tosca\Forms9i\webutil\server\webutil.cfg
ORA-28575 mit Extproc
15.8.03 pg
Für Extproc müssen listener.ora und tnsnames.ora konfiguriert werden. Beim Testen nach
jeder Änderung unbedingt eine neue Session starten; ein Exproc Agent wird für eine
bestehende Session weiterverwendet, auch wenn er buggy ist. Nach Änderung von
listener.ora listener neu starten. Mit tnsping extproc_connection_data können listener.ora
und tnsnames.ora mal so generell geprüft werden.
Performance bei LOV über viele Daten in Forms
8.8.03 ms
Wenn in einem Form ein LOV (List of Values) über viele Daten (z.B. gültige Chargen-Nrn.,
die mit 102 beginnen) gemacht wird, grenzt Forms die Query auf die Datenbank nicht mit
dem bereits eingegebenen Wert des Feldes mit einem LIKE% ein. Die Query wird über alle
Daten gemacht, und erst Forms filtert dann die Daten aufgrund der gemachten
(Teil)Eingabe.
Das kann umschifft werden, indem in der Record-Group des LOVs der LIKE% auf das Feld
bereits aufgenommen wird. Die Query wird nur über die eingegrenzten Daten gemacht und
ein evt. vorhandener Index wird gepusht.
ora-00942 beim dbms_mview.refresh
30.7.03 pg
Unter 9.2 ergeben MViews, die refreshed werden sollen, einen ORA-00942, wenn sie vorherr
invalid sind (z.B. gemäss dba_objects). Ist offenbar Bug 2782632; korrigiert im pr_stat_nachf
durch ein alter materialized view compile vor dem dbms_mview.refresh.
Neu werden die MViews im pa_objtosca.objcomp auch kompiliert, um dieser Situation beim
dbms_mview.refresh direkt aus den Job Queues zu begegnen.
exp unter 9i
23.7.03 pg
Unter 9.2 kann der sys nicht mehr einfach so connecten, sondern muss sich als sysdba
anmelden. Um das NT-Login ausnutzen zu können müssen wir aber den sys verwenden. Die
Kommandozeile muss in dem Fall für den export so lauten:
exp.exe userid="'/@sid as sysdba'" …
d.h., die userid muss in doppelte und innerhalb der doppelten in einfache Anführungszeichen
gesetzt werden.
userid = "' sys/pw@sid as sysdba'" ginge auch, aber es ist eben gerade ein Vorteil, das PW
nicht im File codieren zu müssen.
Optimizer tracen
21.7.03 pg
Mit
ALTER SESSION SET EVENTS '10053 trace name context forever, level 1'
select *
from
odms_jutzlerdocument x
where id = :5
-- hier Explain Plan drauf machen
alter session set events '10053 trace name context off'
werden die "Überlegungen" des Optimizers in ein Trace-File geschrieben.
Statistiken bei Partitioned Tables / DBMS_STATS
21.7.03 pg
Der Analyze Table Befehl für die Berechnung von Statistiken wird von Oracle nach und nach
durch das Package DBMS_STATS ersetzt. Analyze Table verrechnet sich z.B. bei der
num_rows von Partitionierten Tabellen, die zwar nicht von Tosca selber, aber z.B. von iFS
und ev. weiteren Oracle Produkten eingesetzt werden (im Beispiel vom Jutzler Archiv wurde
num_rows einer Part. Table aus den Partitions berechnet, massiv unterschätzt und deshalb
ein verbrecherischer full table scan gemacht). Die einfachste Syntax von DBMS_STATS ist
etwa wie folgt (aus Metalink kopiert, mit Parameterübergabe in named notation):
execute dbms_stats.gather_table_stats(ownname => 'scott', tabname => 'orders',
partname => null,
--> No partition specified.
estimate_percent => null,
--> Compute mode
block_sample => false,
--> Default value. No Sense in Compute mode
method_opt => 'FOR ALL COLUMNS SIZE 1', --> Table and columns statistics
degree => null,
--> Runs with default parallelism
granularity => 'default',
--> Gather partition and global statistics
cascade => true ,
stattab => null,
statid => null,
statown => null);
--> with index stats
--> No backup in user's statistic table.
Achtung: TOAD bentutzt intern (d.h. hinter der Analyse Table Schaltfläche) wahrscheinlich
ebenfalls analyze table, denn es hat in unserem Fall das Problem nicht gelöst. allanal.sql
und tabanal.sql benutzen ebenfalls analyze table.
Internal-Error bei Einstieg in ein Form
26.6.03 ms
In gewissen Oracle-Umgebungen kommt beim Einstieg in ein Form das das WorkingDirectory sichern will die Fehlermeldung 'FRM-40734: Interner Fehler: PL/SQL-Fehler'. Da
fehlt im ORANT\BIN die Datei D2KWUT60.DLL. Die wurde bei Installation von TOSCA
vergessen (obwohls in tosca2install.doc steht).
XDK installieren (XML Developers Kit)
16.6.03 pg
In Datenbanken ab 8.1.7 können auch höhere Versionen des XML Developers Kit (parser,
xsl query) als 8.1.7 installiert werden: aktuelle Version von OTN herunterladen (ist
gegenwärtig in \\dynant05\patches\xdk_plsql_9_2_0_5_0.zip), nach der Installationsanleitung
im ZIP-File verfahren.
Geht jetzt in einem Schritt für alle Komponenten.
FRM-92050 in Forms Server
23.5.03 pg
Bei Forms Server gibt es diverse Gründe, die zu FRM-92050 im Applet Fenster führen
können. In der Note 189867.1 auf Metalink ist ein Trouble Shooting Guide.
5.1.04 rn
wenn nicht mehrere Forms-sessions (tosca-web) eröffnet werden können (FRM-92050
/...f60listener:-1), kann das mit cookie-einstellungen zu tun haben. Folgender Eintrag hat bei
uns (Forms6i mit 9ias Rel1) geholfen, ohne dass in Netscape alle cookies verboten werden
mussten:
Oracle 9iAS Rel 1
------------------------a. Edit $ORACLE_HOME/Apache/Jserv/servlets/zone.properties
b.Change (or add) the parameter
session.useCookies=false
<====== der ist entscheidend
c.Stop and restart the Oracle HTTP Server / jServ engine
Bei EWAG lief spontan Forms Server nicht mehr. Stop und Start des http Servers brachte
nichts. Der URL http://194.209.249.178/servlet/oracle.forms.servlet.ListenerServlet lieferte
einen Fehler, das normale Resultat ist eine Seite mit "The Forms Listener Servlet is up an
running". In dem Fall hat JServ nicht mehr gearbeitet. Stop und Start des http Servers ist in
diesem Fall schon das richtige Vorgehen; aber zwischen Stop und Start muss etwa 10 Sek.
gewartet werden, damit der JServ Prozess auch angehalten wird.
Backup Exec Support
20.05.03 tt
Problem:
In der Registerkarte 'Auswahl für die Wiederherstellung' sind keine Daten vorhanden.
Lösung:
Alle Backup Services stoppen
Datei BeTopCat.idx umbenennen. Im Verzeichnis Veritas\BackupExec\Nt\Catalogs
Services starten
Server neu starten
Ich will wissen welches Medium im Laufwerk ist
Registerkarte Geräte, Rechtsklick auf das Laufwerk, Inventarisieren
Ich kann keine Daten Restoren, weil keine Mediumsdaten angezeigt werden.
Medium einlegen
Registerkarte Geräte, Rechtsklick auf das Laufwerk, Katalogisieren
Volltextsuche unter XP
20.05.03 tt
Unter XP werden beim durchsuchen aller sql-dateien (funktioniert auch mit anderen files wie
z.B. fmb) auf dem server nach einem bestimmten Inhalt nicht alle Files aufgelistet. Lösung:
HKEY_CLASSES_ROOT\.sql\PersistentHandler\(Standard) = {5e941d80-bf96-11cd-b579-08002b30bfeb}
performance-verlust wegen commit nach jeder row
12.5.03 rn
Bei der Datenübernahme von Jutzler war bei Aufkof/Aufzeile etc. nach jeder row ein commit
im cursor-loop. Nachdem wir mit einem internen Zähler den commit immer erst nach 1000
rows machten, verkürzte sich die Verarbeitungszeit um den Faktor 50!
Oracle-Daten in Access-DB exportieren mit WSH-Routine
9.05.03/sr
Unter P:\PEG\export\wsh_oracleToAccess.wsf befindet sich eine Windows-Scripting-HostRoutine, mit der sich aus beliebigen SQL-Statements auf Oracle automatisch eine Tabelle in
Access (Datei export.mdb) generieren lässt. Die Access-Table erhält dabei automatisch die
richtigen Felder und Datentypen. Für die Verwendung schreibt man das SQL-Statement in
die Datei export.sql, passt eventuell Pfade in den Konstanten am Anfang der Routine an und
startet mit einem Doppelklick. Für genauere Infos und Anpassungen (ev. Excel statt Access)
Silvia fragen.
ora-6508
8.5.03 rn
Beim Aufruf von TOSCA 2.6 (Jutzler) musste die bildgest.pll im menubild.fmb gelöscht und
neu attached werden.
REP-0159
30.4.03 pg
Der Aufruf der Report Background Engine scheitert, wenn im Printerfile ein Leerschlag
vorkommt. (Eigentlich besteht das Problem beim Druckernamen auch, aber da kann man
sich mit ' um den Druckernamen (bei set_report_object_property(DESNAME)) oder mit der
Übergabe des Druckernamen in der Parameterliste, wie in drucken.pll, behelfen.
Zu grosse Schriften im Forms unter XP
25.4.03 pg
Grosse Bildschrime haben unter Destop-Einstellungen-Erweitert möglicherweise eine sog.
DPI-Einstellung. Normale Grösse ist 96 DIP, und nur bei dieser Einstellung werden unsere
Tosca Form richtig dargestellt. Sonst gibt es offenbar Dinge, die von Pixels in Zoll
umgerechnet werden, was dann nicht mehr klappt.
Prüfung auf numerischen Wert in einer Where Bedingung
11.04.03 cr
Oft kommt es vor dass ein Character Feld in einer SQL-Where Bedingung auf numerischen
Inhalt geprüft werden soll. So geht dies einfach:
select * from emp where rtrim(ename,'-0123456789') is null
Neue Länge der Adressfelder im Report
10.04.03 bj
die neuen Längen der Adressfelder Adr2, Adr3, Adr4, Adr6 werden im Report erst
berücksichtigt, wenn man die entsprechende Query im Report neu abgesetzt hat. Es nützt
also nichts, wenn man im Layout die Felder einfach vergrössert, die haben nämlich eine
Width von 30 drin (manuell nicht übersteuerbar) und diese passt sich erst nach dem Laufen
der Query an.
Applikation im CASE für Module kopieren
04.04.03 pg
Vorab: vergesst es, mit copy oder unload-load zu arbeiten: Das Network Module kommt nie
ganz rüber, sondern immer nur die Hälfte (Bug or Feature ?)
Was funktioniert, ist folgendes:
Im RON auf der Quellapplikation Application-Archive (füllt die XT-Tables)
Application-Restore unter Angabe eines New Name (macht neue Appl ab XT-Tables)
Export / Import der XT-Tables in *.dmp ist nicht nötig; auf der anderen Seite habe ich mal in
einem TAR erfahren, dass der Optimizer Mode für Import auf Rule gestellt werden muss.
Habe das bisher auch so gemacht.
Und vielleicht geht's mit Application - Copy auch; habe ich nie probiert.
In Ziel Applikation folgende Elemente Force-Deleten:
Domains, Storage Definitions, alle Server Model Definitions (alle verschiedenen Typen auf's
Mal markieren) und die Tablespaces. Das dauert seine Weile, aber es geht.
Plötzlich auftretender Ora-00904 in Forms
02.04.03 tt
Unter bisher nicht genau bekannten Umständen(evt. im Zusammenhang mit Ctrl+R im
Formsbuilder) macht die Datenbank plötzlich bei ganz einfachen Statements einen ora00904. Vor allem bei zweibuchstabigen aliasen wie select * from Firma FI aufgetreten. Bei
Lanco hat ein 'alter system flush shared_pool' genützt.
16.4.03: scheint tatsächlich das problem zu lösen, auch unter oracle 9i (jutzler)!!!
Schachtwahl mit set_tray funktioniert plötzlich nicht mehr in Reports
31.3.03 pg
Mit dem neuen Parameter Form Regime werden desname und destype nicht mehr aus dem
Parameterform definiert, sondern als Konstante ins Reports_Object gesetzt. Im Report ergibt
sich daraus der String PRINTER, SCREEN, ... in GROSSBUCHSTABEN. Alle bestehenden
Vergleiche auf Printer, Screen usw. schlagen dann natürlich fehl.
Entweder im After Paramform Trigger mit
:destype := initcap(:destype)
neu zuweisen (unsympathisch), oder rasch alle Stellen mit :destype absuchen und auf
if upper(:destype) = 'PRINTER' testen.
Logging Infrastruktur unter java
31.3.03 pg
Package java.util.logging
Undokumentierte Parameter abfragen
10.3.03 pg
Gemäss Metalink können mit
SELECT
a.ksppinm parameter,
a.ksppdesc description,
b.ksppstvl session_value,
c.ksppstvl instance_value
FROM
x$ksppi a,
x$ksppcv b,
x$ksppsv c
WHERE
a.indx = b.indx
AND a.indx = c.indx
AND substr(a.ksppinm,1,1) = '_'
ORDER BY a.ksppinm
als SYS ausgeführt, die undokumentierten Parameter abgefragt werden. Ging jedenfalls
unter 8.1.7.2.1. Bei uns ist _push_join_union_view ein solcher undokumentierter Parameter,
den wir gesetzt haben.
Custom Menupunkte implementieren
5.3.03 pg
Unser Popup Menu hat 3 Reserve Menupunkte, die für gewisse Items verwendet werden
können. Im Aftergen.doc ist beschrieben, wie das geht. Es gibt aber noch eine Falle: das
Menuitem mit dem klingenden Namen DS$MENUITEM1 ruft, wenn es ausgeführt wird,
ds$popupmenu.do_popupmenu('MENUITEM1') ;
auf, so dass man in der Verarbeitung nicht wie intuitiv erwartet auf
pMenuItem = 'DS$MENUITEM1' testen kann, sondern
pMenuItem = 'MENUITEM1' verwenden muss.
Abgesehen davon ist die Implementation elegant und zu empfehlen. Wird z.B. bei PfadFeldern von Multimediadaten verwendet (bestkmultimedia in e100).
Schauen, wie lang's noch dauert...
27.2.03 pg
Bei einer lang dauernden DML oder DDL Manupulation kann man mit etwas Glück in einer
anderen Session mit
select * from v$session_longops
where time_remaining > 0;
schauen, wie lang die Operation noch dauert. TIME_REMAINING ist die Menge der Geduld
in Sekunden. Daneben hat's noch andere Info, z.B. sql_adress, mit der man in v$sql zum
aktuellen Statement kommt:
select sql_text from v$sql
where address = hextoraw('7977C478');
Fehler beim Bilden von Record-Groups in Forms
11.2.03 ms
Wenn im Forms-Builder unter der (neuen) Version 6.0.8.15.0 eine Record-Group für einen
LOV geändert wird, wird (manchmal) die Länge aller Char-Felder in der Property 'Column
Specifications' einfach auf 1 gesetzt. Folglich wird dann im LOV z.B. eine Bezeichnung auch
nur mit dem 1. Zeichen angezeit. Länge in 'Column Specifications' muss manuell auf die
gewünschte Länge angepasst werden.
Java VM in die DB installieren
6.2.03 pg
@<oracle-home>\rdbms\javavm\install\initjvm.sql läuft eigentlich nur durch, wenn die DB
vorher neu gestartet wurde. Sonst kommt irgendwann ein Fehler, dass im SGA nicht
soundsoviel Memory alloziert werden kann.
Ev. würde alter system flush shared_pool auch reichen, habe ich nie ausprobiert.
Blöcke überprüfen
4.2.03 pg
Überprüfen, ob es in einer Table korrupte Blöcke hat:
analyze table [table] validate structure cascade
Das verändert die Statistiken nicht, schaut nur, ob alle Blöcke der Table und mit cascade
auch der Indices lesbar sind.
Reports Server Namen
2.2.03 pg
Beim Anzeigen von Reports, die mit dem Reports Server in den Cache geschrieben wurden,
muss der Name des Reports Servers übergeben werden (bei uns im Parameter 15). Dieser
darf aufgrund eines Forms-Bugs keinen Underscore beinhalten, was er aber standardmässig
tut. Als Workaround im tnsnames.ora einen Alias definieren, z.B.
Rep60_ias,Rep60_ias.world,Rep60IAS.world,Rep60IAS=(ADDRESS=(….
Im Parameter 15 dann den Alias verwenden.
Items werden nicht gemäss Bildgest nachgeführt
29.1.03 pg
Wenn ein Item standardmässig lang ist, mit dem Bildgest aber kürzer gemacht und nach
rechts verschoben wird kann es sein, dass bei der Rückkehr aus dem Bildgest alles i.O. ist,
aber beim erneuten Aufrufen des Forms das Feld nicht verschoben wird.
Erklärung: zuerst wird vom Bildgest die y-Position angepasst, dann erst die Länge. Wenn
also das Feld beim verschieben der y-Pos noch lang ist, würde es rechts über den Canvas
rauslampen. Deshalb wird die Verschiebung von Forms kommentarlos ignoriert.
Lösung: Reihenfolge der Anpassungen im Bildgest umstellen (Risiko ?, müsste im Standard
geschehen) bzw. vor allem Feldfreidef Items kurz anlegen.
Trennen von geöffneten Dateien unter NT und WIN2000 und XP
23.1.03
bei einem update sind u.u. noch benutzer angemeldet, die z.b. tosca01.pll locken.
unter NT:
start/programme/administrativ-tool (oder verwaltung (D)/server manager der server
angewählt und bei 'in use' die benutzer mit dem knopf 'close all resources' abgeschossen
werden.
unter WIN2000:
start/einstellungen/systemstuerung/verwaltung/computerverwaltung/freigegebenen
ordner/geöffnete dateien: rechte maustaste auf 'geöffente dateien' alle trennen
unter XP:
Programme/Verwaltung/Dateiserververwaltung
dann geöffnete Dateien (Lokal)
PL/SQL-Tables heissen Collections
22.1.03 ms
und sind in der Doku unter Oracle8i Server Application Development / PL/SQL User's Guide
and Reference / 4 Collections and Records dokumentiert
Aufruf einer Web-Seite / eines URL aus Forms und Forms-Server
20.1.03 ms
Mit folgenden Befehlen kann aus Forms eine Web-Site mit dem Standard-Browser des PCs
aufgerufen werden:
if get_application_property(USER_INTERFACE) = 'WEB' /*Forms-Server*/ then
web.show_document('http://www.dynasoft.ch','_BLANK');
/* bei dieser Adresse muss zwingend http:// davor stehen!!
else
host('rundll32 url.dll,FileProtocolHandler http://www.dynasoft.ch');
end if;
In der Version Forms-Server definiert der Zusatz '_BLANK', dass die Url in einem neuen
Browser-Fenster geöffnet wird. In der Version Client/Server kann man keine Angabe machen
für Öffnung in einem eigenen Fenster. So nachgelesen in
http://www.jsifaq.com/SUBI/tip4100/rh4162.htm
Toad mit net8 und oracle 9
17.1.03 rn
für oracle 9 brauchte man bei uns nur 'oraclient9.dll' ins orant\bin zu kopieren.
im weitern ist dieser link nicht schlecht:
http://www.toadsoft.com/toadhelp/toad/installation_notes__sql_net_and_net8.htm
Character Mode Reports unter Windows 2000 / XP
20.12.02 bj
Damit Reports auf einem Windows 2000-Client das Druckerfile eines Character Mode
Reports für einen Laser-Drucker liest und richtig interpretiert, darf bei den
Druckereigenschaften unter Erweitert die Checkbox ‚Erweiterte Druckfunktionen aktivieren’
nicht gesetzt sein.
Handelt es sich um einen Matrix-Drucker und einen XP-Client muss zudem ein ganz
einfacher Text-Treiber (z.B. generic text only) installiert sein.
dblink ora-02019, toad, net8
12.12.02 rn
wenn aus dem toad mit einer 'ignore net8'-connection ein db-link auf eine datenbank die auf
einem server mit net8 läuft gemacht wird, bekommt man ora-02019. lösung: der erste
connect im toad darf die checkbox 'ignore net8' nicht gesetzt sein
execute immediate
29.11.02 pg
Für kleine Flickprogramme in Tosca kann execute immediate verwendet werden wie im
folgenden Beispiel:
begin
for rec in (
select * from dba_synonyms
where die, die fehlen
) loop
execute immediate 'create synonym ' || rec.object_name ||' for ' || rec.object_name ;
end loop ;
end ;
Twixtel Export in TOSCA
9.12.02 pg
Es gibt häufig Probleme beim Einrichten des Twixtel-Export in TOSCA (Felder können nicht
in der richtigen Reihenfolge ausgewählt werden, Trennzeichen stimment nicht u.s.w.).
Lösung: Unter www.twixtel.ch einen Patch für die entsprechende Twixtel Version
downloaden und installieren. Es gibt fast für jede Version einen Patch.
Tracefile schreiben mit den Bind Variables
29.11.02 pg
ALTER SYSTEM SET timed_statistics = true;
ALTER SYSTEM SET EVENTS '10046 trace name context forever, level 12';
Trace für die gewünschte Session einschalten (z.B. Frosch)
Abfrage machen
Trace für die gewünschte Session wieder abstellen
ALTER SYSTEM SET EVENTS '10046 trace name context off';
Letzter Schritt ist sehr wichtig, sonst werden immense Trace Daten geschrieben.
Anmerkung: gilt nur für Connections, die neu erstellt werden ab dem Event.
Levels:
Level 1 is the default. This level traces all activities until the trace session is stopped.
Level 4 provides level 1 tracing and displays the entered value for all bind variables. Bind
variables are the values that the user enters. The code displays these bind variables as: b1,
etc. When level 4 is activated, the substituted value for the bind variable is displayed in the
trace file.
Level 8 provides level 1 tracing and displays a list of all database wait events. Database wait
events list the reasons if the elapsed time is greater than the CPU time in the tkprof report.
Level 12 provides level 1 tracing in addition to both bind variable substitution and database
wait events.
User für Disco aufsetzen
25.11.02 pg
Wir können es uns nicht mehr lange leisten, den Disco einfach als DBA aufzusetzen.
Gemäss Doku sind das die notwendigen Privilegien:
create procedure
create session
create table
create view
create sequence
für Summary Tables, die als MViews angelegt werden:
create any materialized view
drop any materialized view
alter any materialized view
von den letzten 3 ging einer nicht bei Lötscher. Bin dem aber nicht weiter nachgegangen.
connect sys as sysdba
21.11.02 rn
spätestens ab oracle 9 gibt es keinen internal-user mehr. beim anlegen der db (oradim -new
-sid xyzz -intpwd dab....) kann mit dem intpwd und dem
connect sys/dab@xyzz as sysdba
connected werden. dieser connect enspricht dem alten internal. so connected kann
(muss)man dann den user sys und system noch auf dab stellen
alter user sys identified by dab.
Forms Server für mehrere Forms Path einrichten
18.11.02 pg
Ist unterschiedlich je nach Forms Patch:
bis 4: vergiss es (es müssten mehrere Forms Server gestartet werden)
5 bis 7: machbar
ab 8: luxuriös
Hängt damit zusammen, welche Aufrufmethode für Forms verwendet wird: CGI, Cartridge mit
Forms Server oder neu Listener Servlet. (wir setzen gegenwätig CGI ein, das dann
seinerseits Listener Servlet aufruft. Wäre aber auch möglich und ist neu als Default
vorgeschlagen, direkt auf's Listener Servlet zu setzen).
Info:
http://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=N
OT&p_id=181464.1
Installiert bei EWAG.
Generelles Aufsetzen von Listener Servlet (Grundlage):
http://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=N
OT&p_id=177731.1
Vorgehen zusammengefasst; vgl. die beiden oberen Dokumente
jserv.properties: f60srv.jar in wrapper.classpath, oracle\806\bin in wrapper.path
zone.properties: alias für Listener Servlet, working dir und config file
formsweb.cfg: je nach Config das Listener Servlet unter dem eingerichteten Alias verwenden
(z.B. f60listener). Ergibt dann http Connection.
Die entsprechenden Einträge für Reports lauten:
http://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=N
OT&p_id=166738.1
Eine gute Note bez. Troubleshooting: 204538.1
zone.properties: servlet.RWServlet.code=oracle.reports.rwcgi.RWServlet
Kopieren OH\806\reports_60\java\classes\RWServlet.class ins
OH\iSuites\Apache\JServ\Servlets\oracle\reports\rwcgi. Die drei letzten Verzeichnisse
entsprechen dem Classpath.
jserv.properties: wrapper.classpath=d:\ORACLE\iSuites\Apache\Jserv\servlets
wrapper.path=d:\ORACLE\iSuites\bin;D:\ORACLE\806\bin;%PATH%
(wrapper.env=ORACLE_HOME=d:\ORACLE\806), in Klammern, siehe unten.
Ergänzung:
in OH\806\CONF\6iServer.conf, das in die Apache Konfiguration eingeschlossen wird,
können pro Request Einstellungen gemacht werden, z.B. wie:
SetEnvIf Request_URI "RWServlet" ORACLE_HOME=C:\ORACLE\806
SetEnvIf Request_URI "RWServlet" RW60=C:\ORACLE\806\report60
(Es hat dort schon analoge Einträge für "rw60cgi").
NUMERIC_CHARACTERS: Das Einzige, was etwas gebracht hat, sind die Einträge in der
Registry auf ORACLE_HOME, im Gegensatz zu HOME0, sowie das Territory aus dem
NLS_LANG auf ORACLE_HOME. Alle übrigen Einträge wie z.B. im tosca.env wurden
ignoriert.
Enterprise Users
14.11.02 pg
Im Fall eines Web Servers greifen viele physische User über eine Session und damit
zwangsläufig einen DB-User zu. Um diesen doch noch ein Rollenkonzept zu verpassen, gibt
es folgende Mechanismen: Application Context, Shared Schema, Global Users (create user
identified globally as).
Statement in fremden Schema laufen lassen
14.11.02 (Solidaritätstag mit Leuten mit Alkoholproblemen) pg
Mit dbms_sys_sql kann ein Statement in einem fremden Schema laufen gelassen werden.
Analog dbms_sql, aber Cursor mit parse_as_user erstellen.
Resultat eines Trivadis Kurses.
Jahrhundert / Jahrtausend geht verloren in User Parameter in Reports
22.10.02 pg
Bei Schoch ist Fall aufgetreten, dass die Jahrhundertinformation eines Datums verloren ging,
das von einer Query in einen User Parameter gespeichert wurde, wenn der User Parameter
keine Datumsmaske hat. Der Fehler trat erst nach dem Update einer Forms Version auf.
Die Zuordnung einer jahrhundertbehafteten Datumsmaske (DD-MON-YYYY, z.B.) zum
Parameter korrigierte das Problem.
Installer unter win95/98 und nt
21.10.02 pg
Den Patch 2085372 z.B. gibt es nur für Winnt, nicht aber für win95. Installationen, die unter
win95 laufen, können folgendermassen überlistet werden:
in oracle-home\orainst das File win95.rgs in nt.rgs umbenennen (daran erkennt der Installer
die installierte Version), Installation durchführen, zurückumbenennen. In Metalink gibt es
mehrere Hinweise auf solche rgs Files und auch den Tip, ein File umzubenennen, offenbar
sind die austauschbar.
FRM-40655 beim Insert/Update von langen Textzeilen
4.10.02 pg
Wir verwenden z.B. im V100 die Block Property DML Returning Value = yes. Das hat zur
Folge, dass Forms ein Statement der Form
Insert into table (col1,col2) values (val1, val2) retruning (col1, col2) into (val1, val2)
generiert (beim Update etwas Entsprechendes).
Damit werden Felder, die von Triggern oder durch Default Values verändert werden, im v100
automatisch nachgeführt, so dass die Meldung "Daten wurden von einem anderen Benutzer
geändert" beim locken einer Row nicht mehr vorkommt.
Die SQL Net Version, die von Forms verwendet wird, hat den BUG 1327023, so dass beim
zweiten Update oder Insert von Auftragszeilen mit einem langen Inhalt (so ab 500 Zeichen)
in der BEZ die Session ca. 45 Sekunden wartet, dann der Server ein Trace File mit ORA00600: Interner Fehlercode, Argumente: [12333], [253], [1], [253], schreibt und die Forms
Session mit z.B. FRM-40655 aufgehängt wird.
Um diesen Bug zu beheben, den Patch 2085372 wie in der Installationsanleitung von
Developer 6 beschrieben installieren.
Der Fehler kommt vor bei Required Support Files vor 8.0.6.3.4; der Patch installiert
ebendiese korrigierte Version.
Function-Based-Index
20.9.02 ms
Wenn die Function eines Function-Based-Index einmal INVALID wird, wird der FunctionIndex-Status (sieht man im Frosch nicht, nur auf DBA_INDEXES) des Index automatisch
DISABLED (deaktiviert). Das VALID machen der Function nützt nichts, man muss mit dem
Befehl
ALTER INDEX index_name ENABLE;
den Index wieder enablen (aktivieren). Darum darf die Function auch nicht in einem Package
sein, das würde immer wieder INVALID werden, sondern muss separat stehen und möglichst
keine Tables ansprechen, da bei einer Aenderung des Tables die Function wieder INVALID
werden würde, und der Index DISABLED ....
Achrive Logs verschieben
19.9.02 pg
Prinzip: einer DB können im Betrieb archive log members hinzugefügt oder entfernt werden
(entfernt nicht von der aktuellen Gruppe, da muss zuerst ein Log Switch gemacht werden).
Es müssen einfach immer mindestens zwei Members vorhanden sein. Bsp dyn2, wo die BMembers von d: entfernt und durch C-Members auf i: ersetzt werden sollen:
-- LOG-Situation anschauen
select * from v$logfile
/*
GROUP# STATUS MEMBER
1
D:\ORA_DATA\DB_DYN2\REDO\LOG1A.DBF
2
D:\ORA_DATA\DB_DYN2\REDO\LOG2A.DBF
3
D:\ORA_DATA\DB_DYN2\REDO\LOG3A.DBF
1
D:\ORA_DATA\DB_DYN2\REDO\LOG1B.DBF
2
D:\ORA_DATA\DB_DYN2\REDO\LOG2B.DBF
3
D:\ORA_DATA\DB_DYN2\REDO\LOG3B.DBF
*/
-- neue Logfiles an neuem Ort hinzufügen
alter database add logfile member 'i:\ora_data_arch\db_dyn2\redo\log1C.dbf' to group 1
alter database add logfile member 'i:\ora_data_arch\db_dyn2\redo\log2C.dbf' to group 2
alter database add logfile member 'i:\ora_data_arch\db_dyn2\redo\log3C.dbf' to group 3
-- herausfinden, welches die aktuelle Gruppe ist
select * from v$log
/*
GROUP#
1
2
löschen
3
THREAD#
1
1
SEQUENCE#
33796
2097152
33797
2097152
BYTES
3
3
MEMBERS ARCHIVED STATUS
FIRST_CHANGE#
FIRST_TIME
NO
ACTIVE
158389755 19.09.02 14:59:48
NO
CURRENT 158393118 19.09.02 15:23:43 -- --> Gruppe 2 ist current, dieses zuletzt
1
33795
3
NO
2097152
INACTIVE
158386364 19.09.02 14:35:37
*/
alter database drop logfile member 'D:\ORA_DATA\DB_DYN2\REDO\LOG1B.DBF'
alter database drop logfile member 'D:\ORA_DATA\DB_DYN2\REDO\LOG3B.DBF'
-- Logfile Switch machen, um Gruppe B freizugeben
alter system switch logfile
-- Member des jetzt freigewordenen Gruppe droppen
alter database drop logfile member 'D:\ORA_DATA\DB_DYN2\REDO\LOG2B.DBF'
-- Jetzt noch die nicht mehr gebrauchen Logfiles vom Medium löschen.
Summary Tables in Discoverer 4.0
14.9.02 pg
Disco 4 verwendet für Summary Tables nicht mehr normale Tables, sondern Materialized
Views (MView). Offenbar (die Fehlermeldung lässt dies vermuten) werden die MVies so
angelegt, dass sie Fast Refreshed werden können. Bei MViews, die direkt oder indirekt auf
Unions basieren, geht das nicht, was zur Fehlermeldung führt. Alle unsere Vorjahres-Views
sind Unions. Die Lösung ist: MViews selber anlegen, und in Discoverer als external
Summary Table registrieren.
Tip: MViews, die von den Statistiktabllen abhängig sind, können in pr_stat_nachf
automatisch Completely refreshed werden.
Deshalb MViews am besten etwa folgendermassen anlegen:
create materialized view m_view_name
pctfree 0 tablespace tosca_data
storage (initial 1M next 1M)
nologging
-- wie die Statistiktabellen auch
build deferred -- nur MView anlegen, keine Daten einfüllen
refresh complete -- jeder Refresh soll complete sein
on demand
-- keinen Job Queue Eintrag machen
as select ...
Für ein erstes Aktualisieren entweder auf pr_stat_nachf warten, oder mit
dbms_mview.refresh(m_view_name,'C') ;
absetzen. C heisst Complete.
utl_file mit langen Zeilen; invalid_operation beim fclose
28.8.02 pg
Wenn mit utl_file ein File mit fopen geöffnet wird, können standardmässig Zeilen der Länge
1023 hineingeschrieben werden. Ist eine Zeile länger, kommt (jedenfalls bei kurzen Files)
beim schliessen die Exception utl_file.invalid_operation. In diesen Fällen kann der fopen mit
der Angabe der max. Zeilenlänge gemacht werden:
FUNCTION fopen(location
filename
open_mode
max_linesize
IN
IN
IN
IN
VARCHAR2,
VARCHAR2,
VARCHAR2,
BINARY_INTEGER) RETURN file_type;
Reports background Engine von der Command line starten
20.8.02 pg
Geht mit rwisv60. Gebraucht in vto170.fmb. Spannt selber nach Bedarf die Background
Engines auf, und ordnet sie den richtigen, übergebenen Sessions zu.
Leere Seiten (blank pages) in Report unterdrücken bei Druckausgabe
20.8.02 pg
Wenn in der Hauptquery überhaupt keine Row geliefert wird, druckt Reports trotzdem eine
leere Seite. Mit dem Parameter BLANKPAGES=NO können diese unterdrückt werden. (Das
englische Schlüsselwort ist blank pages, nicht etwa empty pages).
imp-00017 / error 6550
12.8.02 rn
dieser fehler erscheint, wenn die db mit verändertem nls_numeric_characters exportiert oder
importiert wurde.
workaround: use import with ANALYZE = N or RECALCULATE_STATISTICS = Y
jinitiator applet unter pentium p4
12.8.02 rn
für pentium p4-clients muss ein anderes java-applet form formsserver heruntergalden
werden. dieses findet man unter dem link
http://ias.dynasoft.ch/dev60cgi/ifcgi60.exe?config=dynasoft_p4
import / ora-00904 / imp-00058
12.8.02 rn
IMP-00058: ORACLE error 904 encountered
ORA-00904: invalid column name
wenn ein db-import gemacht wird, bei der die empfangende db 8.1.72 oracle auf dem server
hat, aber die catalog, catexp etc. scripts nicht laufengelassen wurden, bekommt man diesen
fehler. lösung: catalog, catexp und catproc nach oracle-versions-update auf den db's mit dem
user internal laufen lassen.
Pdf mit mehreren Bildern unter Windows 98
25.07.02
beim Erstellen eines pdf-Files mit mehreren verschiedenen Bildern werden die Bilder nicht
richtig erkannt. D.h. es wird jeweils nur 1 Bild (an allen Stellen wo Bilder gedruckt werden
müssen, das gleiche) gedruckt. Unter Windows NT und Windows 2000 passiert der Fehler
nicht.
jinitiator
19.7.02 rn
eine doku zum installieren und testen des berüchtigten jinitiators für ie und netscape gibt es
ein dokument, worin alles beschrieben ist: p:\technet\9ias\update_jinit.
REP-3301 bei Reports
8.7.02 ms
Beim Aufruf eines Reports 2.5 kommt manchmal die Fehlermeldung REP-3301. Das
schwierige daran ist, dass in ca. 50% der Fälle der Fehler nicht kommt, dann kommt er
wieder, usw. Der Fehler kommt daher, dass im Parameter-Form eine Poplist abgefüllt wird,
die um 90 oder mehr Einträge hat. Wenn die Poplist verkleinert wird, kommt der Fehler nicht
mehr. Wahrscheinlich ist der Fehler in Reports 6.5 gelöst.
Error attaching d2kwutil
07.06.02 bj
im Report-Builder kommt dort, wo es im Forms-Pfad ein d2kwutil.pll und ein d2kwutil.plx hat,
obengenannter Fehler. Allerdings nur, wenn der Report aus dem Builder aufgerufen wird,
wenn er aus dem Menu aufgerufen wird, kommt keine Fehlermeldung und der Report läuft
auch richtig.
Installieren oracle 8.1.7 auf pentium 4 server (bug 1507768)
31.5.02 rn
Das OUI-Programm auf der CD lässt keine Installation auf P4-Servern zu. Darum muss ein
Patch installiert werden (bei uns \\dynant05\patches\installer_p4). Dieser installiert den
richtigen Installer auf dem entsprechenden Server.
Reports aus Webforms aufrufen
29.5.02 kj
Grundsätzlich sollte run_product nicht mehr verwendet werden. Run_product wird durch
RUN_REPORT_OBJECT ersetzt. Dazu muss ein Report-Object im Form angelegt werden
(ist ein eigener Ast im Navigator-Panel).
Mit SET_REPORT_OBJECT_PROPERTY können Parameter, Drucker, etc. zur Laufzeit
gesetzt werden.
Wenn im Webmodus der Output an den Browser zurückgegeben werden soll, muss a) der
Report als HTML- oder PDF-Report definiert sein
b) Report Destination Type muss Cache sein (Cache des iAS-Report-Servers)
c) der Output mit WEB.SHOW_DOCUMENT aus dem Form angefordert werden.
Beispiel:
if get_application_property(USER_INTERFACE) = 'WEB' then
w_repid := find_report_object('PMB500WEB');
w_rep := RUN_REPORT_OBJECT(w_repid);
/* warten bis report aufbereitet ist */
w_repstatus := report_object_status(w_rep);
while w_repstatus in ('RUNNING','OPENING_REPORT','ENQUEUED')
loop
w_repstatus := report_object_status(w_rep);
end loop;
if w_repstatus = 'FINISHED' then
/* im browser anzeigen */
web.show_document('http://SRV2:80/dev60cgi/rwcgi60.exe/getjobid=' || substr(w_rep,8) ||
'?server=REPSRV2');
end if;
end if;
Passworte von Benutzern in DB-Links
27.5.02 pg
In sys.link$ stehen die Usernamen und die Passworte für die DB-Links. Wenn also ein DB
Link neu angelegt werden muss, kann dort das alte PW herausgelesen werden.
PL/SQL-Error beim Aufruf von TwixTel
22.5.02 pg
Für den Aufruf von TwixTel wird d2kwutil benötigt, das in 2 inkompatiblen Versionen (vom
1997 und 2000) im Umlauf ist; wir benutzen die neuere.
Bei Schoch war folgende Konstellation: d2kwutil in Tosca korrekt installiert (d2kwutil.pll in
Forms-Verzeichnis, d2kwut60.dll in oracle_home/bin, beide Version 2000). Trotzdem ging es
nicht, weil im Forms-Verzeichnis der Inoma ein d2kwutil.plx (die kompilierte Ausgabe einer
pll) von der Version 1997 lag und das Forms-Verzeichnis der Inoma im Registry Eintrag
forms60_path ist. Offenbar hat die *.plx im Forms60_path Priorität über eine *.pll im Working
Directory. Lösung: unser d2kwutil.pll als *.plx kompiliert im Forms-Path ablegen, dann geht’s.
Ist so im Versionen eingetragen.
Problem im Discoverer nach Änderung von Table-Column-Name
21.5.02 mw
Wenn ein Column-Name (wie jetzt gerade beim Streckengeschäft) bei einem Table geändert
wird, kann es zu Problemen bei Discoverer-Listen führen. Wird durch das Aktualisieren der
entsprechenden Business-Areas gelöst.
ORA-01002 mit Exception Handler in Cursor Loop
1.5.02 pg
Die genauen Bedingungen für den Fehler habe ich nicht eingegrenzt, aber im Prinzip ergibt
sich nach dem Rollback im Exception Handler innerhalb eines Loops mit geöffnetem Cursor
beim nächsten Fetch der ORA-01002. Dies aber nur unter bestimmten Bedingungen, z.B je
nachdem, ob die Procedure direkt oder von einem Package aufgerufen wurde.
open cursor …
fetch cursor …
loop while cursor%found
begin
w_zahl := 1 / 0 ; -- irgendeine Exception
exception
when others then
rollback ;
end ;
fetch cursor ;
-- hier kommt der ora-01002
end loop ;
close cursor ;
Eigentlich sollte der Cursor nicht geschlossen werden, da ja der Loop wegen der
Fehlerbehandung nicht mit einer Exception verlassen wird. Aber Oracle muss hier wohl
etwas tricksen, um z.B. die Cursor einer Cursor Loop zu schliessen, wenn die Schleife mit
einer Exception verlassen wird, und offenbar ist der Trick nicht ganz 100%ig.
Workaround, der in meinem Fall geholfen hat: am Anfang der Schleife einen Savepoint
setzen, und das Rollback nur zu diesem Savepoint machen:
open cursor …
fetch cursor …
loop while cursor%found
savepoint sp ;
begin
w_zahl := 1 / 0 ; -- irgendeine Exception
exception
when others then
rollback to sp;
end ;
fetch cursor ;
-- jetzt isse ok
end loop ;
close cursor ;
FU_PARSE
26.4.02 pg
Es gibt in Tosca eine Function FU_PARSE, mit der Strings, die mit einem Trennzeichen
unterteilt sind, in ihre Bestandteile zerlegt werden können. Gemäss KJ soll ich das hier
eintragen.
Ev. wäre es besser, ein Package PA_UTIL anzulegen, das solche applikationsunabhängigen
Werkzeuge aufnimmt. So, das wäre der erste Disskussionsvorschlag im TipsNTricks.
"Interner Fehler" in jdbc beim Auspacken einer Collection mit getArray usw.
24.4.02 pg
Kann passieren, weil der DB User kein Execute Privileg auf dem entsprechenden Type
(Collection Type bzw Object Type) hat.
Ferner muss nach dem DROP .. FORCE eines Object-Types der zugehörige Collection Type
auch neu generiert werden, weil zwar der Eintrag in user_types erhalten und ganz normal
bleibt, aber der Eintrag in user_coll_types fehlt. Strange.
REP-0119: Link file boilerplate ...'s Source Filename ... not found
17.4.02 pg
Wenn Icons in Reports nicht mit Hilfe von Dateinamen aus der DB dynamisch erzeugt
werden, sondern direkt in Link Items geklatscht werden, muss entweder in der Property
Source Filename des Items der ganze Pfad angegeben werden (dann ist der Report nicht
transportabel), oder nur der nackte Filename. Im letzten Fall muss beim Laden von Reports
Builder oder Runtime ein Registry-Eintrag reports60_path existieren, der auf das File zeigt,
sonst kommt obgenannter Fehler.
Zum editieren des Reports muss also der Eintrag existieren, aber auch zum Laufenlassen.
Ich habe bei Schoch unter dem Forms-Verzeichnis ein Images angelegt, wo ich die
betreffenden Icons hereingelegt habe.
Immerhin kann der Report im Builder bearbeitet werden, ohne dass die Files vorhanden sind,
solange die Dateinamen nicht angetastet werden.
Alternative: Items und Read From File Property = true.
undokumentierter Fehler beim Generieren von Forms aus Case
27.03.02 ms
Beim Generieren von Forms aus Design Editor kann die Fehlermeldung
Module:Form Builder binary file for ... has NOT been created
erscheinen. Das FMB wird dann nicht generiert und man steht am Hang.
Der Fehler entsteht, wenn im Modul ein Table ist, der eine Relation auf sich selber hat mit
DELETE CASCADE. Man muss dann für das Generieren (und nachher wieder
zurückstellen!) auf dem FK die Property 'Validate in' auf 'None' stellen. Dann sollte es gehen.
Der Fehler erscheint auch, wenn im Modul ein Table ist, auf den eine FK-Relation-DeleteCascade von einem solchen FK-auf-sich-selber-Table ist. Alles klar?
Der Fehler soll übrigens nicht erscheinen, wenn Löschen gar nicht erlaubt ist.
Poplists in Forms
20.3.02 ms
Entgegen dem Eintrag vom 20.8.99 darf eine Poplist sowohl in der Anzeige als auch in der
Feldlänge länger als 30 Zeichen sein. Offensichtlich wurde das in einer neueren FormsVersion korrigiert. (Stand: Forms [32 Bit] Version 6.0.8.14.1 (Production))
Insufficient Privileges bei connect internal unter NT
11.3.02 pg
Bei Jutzler (8.1.6) hat es geholfen, dem jeweiligen NT Domain User die Gruppe ORA_DBA
zu verpassen. ORA_DBA wurde offenbar bei der Oracle Installation eingerichtet. Was auch
ging war connect sys/password@db as sysdba.
Achtung: wenn das Login aus einem Service ausgeführt werden soll (z.B. Backup Exec oder
AT) muss der Service unter dem jeweiligen User laufen gelassen werden.
Setzen von Hintergrundfarben von Frames in Reports
1.3.02 pg
Folgende Attribute müssen (Reports 2.5) gesetzt werden:
srw.attr.mask := SRW.FFCOLOR_ATTR +
SRW.FILLPATT_ATTR;
srw.attr.ffcolor := 'gray28';
srw.attr.fillpatt := 'solid';
srw.set_attr (0, srw.attr);
REP-2103 PL/SQL formula returned invalid value or no value
1.3.02 pg
In einem Report auf Reports 2.5 von Leica (aln500) geben die Formula-Columns manchmal
null zurück. Wenn der Report aus dem Designer mit dem Runtime Setting "Run debug = yes"
laufen gelassen wird, kommt die oben genannte Fehlermeldung und der Report bricht ab.
Wenn Run Debug herausgenommen wird, geht es aus dem Reports Designer, und auch aus
Tosca.
Die Runtime Settings sind unter Tools – Tool Options zu finden.
ORA-3113 end of file on communication channel bei tight Loops
25.2.02 pg
Wir haben eine Endless-Loop in einer PL/SQL Procedure in der Form:
open artbest_lesen;
fetch artbest_lesen into abrec;
while artbest_lesen%found loop
null;
--HIER FEHLT DAS FETCH DER NÄCHSTEN ROW – DESHALB BLEIBT ORACLE IM LOOP
end loop;
close artbest_lesen;
Wenn die Prozedur im SQL/Plus abgesetzt wird, scheint die Session zu hängen, im Frosch
genau so. Es wird allerdings ein Tracefile geschrieben mit ORA-03113 drin, so dass in der
DB die Session gekillt wird, nur wird das dem Frontend offenbar nicht gesagt.
DB-Connections von JDev9i mit embedded OC4J verwenden
20.2.02 pg
Aus den Connections macht JDev beim Run, Debug oder Deploy automatisch ein ganzes
Bündel von Einträgen in data-sources.xml: ein <conn>DS unter jdbc/ejb-location für gepoolte
DataSource, ein <conn>CoreDS unter jdbc/location für nicht gepoolte.
Beim
ds = (DataSource) ctx.lookup("jdbc/webshopDS"); muss deshalb als lookup-Name
entweder jdbc/<conn>DS wie im obigen Beispiel angegeben werden (für eine gepoolte
Connection) oder jdbc/<conn>CoreDS für eine ungepoolte. Die so erstellte gepoolten
Datasources werden allerdings nicht von oracle.jdbc.driver.OracleConnection abgeleitet,
sondern von was OC4J spezifischem, und können deshalb von SQLJ nicht verwendet
werden (Downcast beim Aufruf von Packages). Als Workaround einen Connection Pool wie
im Webshop erzeugen.
Datenbank mit kopierten DB-Files aufsetzen
19.02.02 kj
Es gibt eine Möglichkeit, eine neue Datenbank direkt mit kopierten DB-Files aufzusetzen.
Folgendes Vorgehen:
1. aus der Source-DB: ALTER DATABASE BACKUP CONTROLFILE TO TRACE. So wird
ein Skript mit den Controlfile-Einträgen exportiert. Das Skript kann editiert werden (neuer DBName, neue Pfade für die DB-Files und SET DATABASE newdb RESETLOGS, um die DB
umzubenennen). 2. Files kopieren. 3. neues init.ora erstellen. 4. neue Instance anlegen. 5.
startup nomount und editiertes controlfile-skript starten. 6. ALTER DATABASE OPEN
RESETLOGS.
(ist im Metalink unter "how to create database from another" beschrieben).
Achtung: die beiden oracle-versionen müssen den selben oracle-parameter ‚compatible’
eingestellt haben. Probleme gabs bei jutzler, als seine db mit compatible 9.1 bei uns mit dem
init.ora-eintrag compatible 9.2 aufgesetzt wurde. Im weitern müssen beide oracle-versionen
100%-ig identisch sein: jutzler hat 8.1.7.3 läuft bei uns (8.1.7.2.1) nicht!
Ergänzung 5.8.03 pg:
Bei Jutzler (9.2.0.2, ev. geht's schon früher) stellen wir DB's aus online kopierten Datafiles,
einem Backup Controlfile und einigen Archive Logs wieder her. Die Syntax stammt
grösstenteils aus dem Backup Controlfile, leicht angepasst, und geht so:
STARTUP NOMOUNT pfile='d:\oracle\ora92\database\initjutx.ora' ;
CREATE CONTROLFILE REUSE set DATABASE "jutx" RESETLOGS
…
;
NOARCHIVELOG
-- Recovery ist nötig, weil die Files im Backup Mode kopiert wurden
-- Logsource Syntax für den Zugriff auf Archive Logs funktioniert, im Gegensatz
-- zum recover from ...
set logsource f:\ora_data_log\db_jut2\arch
recover database using backup controlfile until cancel;
-- die Frage nicht mit Auto beantworten, sondern die paar redo-logs bis nach dem
-- Backup applizieren und dann cancel machen.
-- Ohne until cancel wird ein vollständiges Recovery erwartet, da kommt man nur noch
-- schwer draus
ALTER DATABASE OPEN RESETLOGS;
ALTER TABLESPACE TMP ADD TEMPFILE 'f:\ORA_DATA\DB_jutx\DATA\TMP01.DBF'
SIZE 1200M REUSE AUTOEXTEND OFF;
Alternative zu Reports_60_tmp auf ora_prog (bei Reports Server)
14.2.02 pg
Gemäss Avaran Inoma kann reports60_tmp auch auf den Papierkorb gesetzt werden, damit
sich die Temporären Reports-Files nicht akkumulieren: auf dem NT-Server das Laufwerk
c:\recycler anschauen. Wenn die erste Datei dort drin z.B. S-1-5-21-12279082521003369891-1210191635-500 heisst, so kann reports60_tmp auf c:\recycler\ S-1-5-211227908252-1003369891-1210191635-500 gesetzt werden. Dann landen die Temporären
Dateien im Papierkorb und werden automatisch gelöscht.
Würde natürlich für die Background Engine für jeden PC einen eigenen Registry-Eintrag
verlangen, was unpraktisch ist (bei Win95, 98 und ME keine Ahnung, wie). Aber für Reports
Server und später auch für Reports übers Web ganz gut.
Oder halt auch mit del_log.
ORA-03232 bei Queries mit Hash Join
14.2.02 pg
Wir setzen neuerdings die Sort-Area-Size im init.ora für 8.1.7. auf relativ grosse Werte
(1..2M). Die Hash_area_size ist defaultmässig das doppelte der sort_area_size, und das
scheint Probleme zu geben, wenn gleichzeitig hash_multiblock_io_count auf Default = 0 =
"schau selber" belassen wird: Es wird versucht, im TEMP-Tablespace mehr Platz zu
allozieren, als in einem Extent Platz hat. Mit hash_multiblock_io_count = 16 geht’s z.B. bei
Welti.
Muss im init.ora angepasst werden, tagsüber reicht auch ein alter system set
hash_multiblock_io_count = 16.
Probleme mit Mailen aus Reports, Working Directory, OLE, REP-1848
4.2.02 pg
Bei Schoch wurde beim Mailen aus Reports das Working Directory der Reports Background
Engine von ..\forms20 auf c:\windows\outlook gestellt. Nachfolgende Reports wurden von der
Background Engine entweder gar nicht gefunden (falls kein REPORTS60_PATH in der
Registry ist -> REP-1848), oder, viel schlimmer, irgendein Report einer falschen Version
wurde aufgerufen (im verstellten Working Dir ist natürlich kein e500, aber im
REPORTS60_PATH könnte es ein falsches e500 haben).
Lösung in diesem Fall: Mit Hilfe der neuen d2kwutil.pll das Working Directory beim Aufruf im
BEFORE-PARAMETER-FORM Trigger auslesen und sichern, im AFTER-REPORTTRIGGER wieder setzen. Working Dirs lassen sich auslesen und setzen mit
win_api_environment.get_working_directory(true) aus der neuen D2KWUTIL.PLL-Version.
Dieselbe Technik sollte auch klappen, um verstellte Working Dirs nach der Wahl eines OLEObjekts wieder zurückzustellen. (Die aktuelle Lösung ist nämlich, den Forms-Pfad in der
Registry richtig einzustellen, das geht aber in Umgebungen mit mehreren Tosca-Versionen,
z.B. Schoch BB und BE, nicht so richtig).
D2KWTUIL.PLL, Version 6, Unable to load Form.
4.2.02 pg
Wir haben in p:\tosca\d2kwut60 die aktuelle Version des Utilites, das mehr Funktionen bietet.
Installiert muss es folgendermassen werden:
d2kwutil.pll in die Forms-Pfade kopieren (wie alle anderen *.pll auch). Wird ohne
Neukompilation aktiviert.
d2kwut60.dll ins orant\bin kopieren. WICHTIG: alle anderen d2kwut32.dll und d2kwut60.dll
löschen oder umbenennen, vor allem, wenn es solche noch im Forms-Pfad (..\FORMS20)
hat. FALLS EINE FALSCHE DLL GEFUNDEN WIRD, KANN DIE PLL nicht geladen werden
und damit das ganze Form bzw. Report nicht.
Vorgehen beim Media Recovery
10.1.02 pg
Anwendung z.B. Corrupter Block
anzeichen: ora-1113: zuerst kann mal probiert werden mit:
db nur mounten, dann alter database recover;
wenn das nichts nützt:
ganze DB (Datafiles und Controlfiles) sichern
fragliches File (zuvor ggf. mit Support herausfinden, welches) von einer alten Sicherung
zurückkopieren. Die Redo Logs müssen bis zum Alter der Sicherung zurück vorhanden
sein.
Für den ganzen Recovery Prozess den init.ora Parameter db_block_checking auf true
stellen.
Datenbank öffnen. Folgendes aus dem SQLPlus:
SQL> alter database open;
alter database open
*
FEHLER in Zeile 1:
ORA-01113: Fur Datei '5' ist Datentrager-Recovery notwendig
ORA-01110: Datendatei 5: 'E:\ORA_DATA\DB_SCHO\DATA\TOSCA01.DBF'
SQL> alter database datafile 'E:\ORA_DATA\DB_SCHO\DATA\TOSCA01.DBF' offline;
Datenbank wurde geändert.
SQL> alter database recover automatic datafile 'E:\ORA_DATA\DB_SCHO\DATA\TOSCA01.DBF';
Datenbank wurde geändert.
SQL> alter database open;
PS: Blöcke in Indexfiles können durch droppen und neu erstellen des Index gefixt werden.
Nur bei Datenfiles wie oben vorgehen.
16.8.05 rn: bei hotbackup – problemen kann noch das versucht werden:
B. WITH ORACLE 7.2 OR HIGHER
1. Mount the database.
SVRMGR> STARTUP MOUNT;
2. Find out which datafiles were in hot backup mode when the database
crashed or
was shutdown abort or the machine was rebooted by running the query:
SVRMGR> SELECT V1.FILE#, NAME
FROM V$BACKUP V1, V$DATAFILE V2
WHERE V1.STATUS = 'ACTIVE' AND V1.FILE# = V2.FILE# ;
3. For each of the files returned by the above query, issue the command:
SVRMGR> ALTER DATABASE DATAFILE '<full path name>' END BACKUP;
4. Open the database.
SVRMGR> ALTER DATABASE OPEN;
Interpretation von Trace Files
10.1.02 pg
Falls Oracle ein Trace File (die Nummer wird zufällig generiert) schreiben will, welches es
schon gibt, wird das vorhandene einfach ergänzt. Beim Anschauen eines Trace Files also
erst mal kontrollieren, ob das Datum des obersten Eintrags das Gewünschte ist, sonst mit
Suchen – Suchen nach z.B. Jan 01 suchen.
Der Eintrag "Session 22 exceeded soft sessionspace limit of 0x100000 bytes" kann gemäss
Metalink ignoriert werden, da es nur eine Warnung ist. Immerhin ist das ein Grund für die
vielen Tracefiles.
Den Eintrag "A deadlock among DDL and parse locks is detected" ignoriere ich auch, kommt
m.E. entweder durch das Arbeiten an Tosca mit Invalid Objects oder beim Rekompilieren.
Tip: Falls Oracle einen corrupten Block liest und sich auf seine Inhalte verlässt, ohne zuerst
die Quersumme zu überprüfen, ist der gemeldete Fehler recht zufällig (bei Schoch kam die
Info, der Block sei durch eine nicht existierende Transaktion gelockt). In einem solchen Fall
könnte durch db_block_checking = true wahrscheinlich direkt ein besserer Fehler
ausgegeben werden (habe ich nicht ausprobieren können, aber die Info vom Support lässt
das vermuten).
Einkreisen von ORA-03113 (End of file on communication channel)
verschiedene Indices mit denselben Columns und unterschiedlicher Sortierung
10.1.02 pg
Falls die Connection schon aufgebaut ist und der ORA-03113 während der normalen Arbeit
auftritt, können die Dump-Files weiterhelfen (select * from v$parameter where name like
'%dest'; sagt, wo die liegen).
Im vorliegenden Fall war es das SIDcore.log in der core_dump_dest. Es zeigte einen
ACCESS_VIO, weitere Information war zwar vorhanden, aber nicht interpretierbar. Metalink
schlägt in diesem Fall vor, mit Hilfe von Trace das fehlerhafte Statement einzukreisen. Ich
habe zuerst versucht, if60run mit statistics=true zu starten, das hat aber kein Trace File
geschrieben (???). Dann habe ich aus dem Frosch aus einer beliebigen Session mit
sys.dbms_system.set_sql_trace_in_session (sid, serial#, true) das SQL-Trace kurz vor dem
Fehler in meiner Forms Session aktiviert. Das hat ein Trace File ergeben, in welchem das
letzte Statement (SELECT SUM(BZ.ZEILENWERTEXMW * (100 - NVL(BZ.PROZGESAMT,0) ) / 100 ) FROM
BESTZEILE BZ,BESTKOPF BK WHERE BZ.BESTNR = :b1 AND BZ.FOLGENR = :b2 AND BZ.BESTNR =
BK.BESTNR AND BZ.FOLGENR = BK.FOLGENR AND (BZ.ZEILENART = 'B' OR (BZ.ZEILENART = 'M'
AND
AND BK.AUFART = 20 ))) gestanden ist. Wenn dieses Statement im
TOAD abgesetzt wurde, kam ebenfalls der ORA-03113.
Aufgrund einer Intuition habe ich einen kürzlich eingeführten Index auf bestkopf (und auch
auf aufkopf) gedropped, und das Statement lief im TOAD durch.
Der Index war nach bestnr desc, folgenr asc, hatte somit dieselben Columns wie der BK_PK,
aber andere Reihenfolge. Das hat offenbar den Optimizer durcheinandergebracht.
FU_KUNDEN_INSTALL = 10
Dynamisches SQL in Forms (Ver. 6i)
28.12.01 kj
Wenn man in Forms dynamisches SQL verwenden möchte (wird nicht kompiliert, sondern
erst zur Laufzeit ausgeführt), kann man das mit dem Package EXEC_SQL tun. Dies ist in der
Forms Online-Help dokumentiert.
ArrayOutOfBoundsException in WebserverThread.class beim Testen von Servlets
21.11.01 pg
Die Pfade in den Project Properties müssen ohne schliessenden Backslash angegeben
werden. Sonst wird (das ist eine Interpretation) das \" am Schluss eines Command Line
Arguments als Fluchsymboldarstellung von " interpretiert und zwei Strings
zusammengehängt, was dann zu der genannten Exception führt.
Resourece Files editieren, Terminal
21.11.01 pg
Die Resource Files der Forms-Versionen 4.5 und 6.5 sind kompatibel, beide können mit dem
aktuellen Terminal-Programm ot60.exe editiert werden.
Foreign Key Relationen über unterschiedliche Schemas machen
21.11.01 pg
Wenn z.B. versucht wird, als toscak einen Foreign key von arteigenschaft auf
tosca.mengeneinh zu machen, wird das mit insufficient privileges zurückgewiesen, auch
wenn TOSCAK DBA ist und demzufolge alle System Privileges hat. Die Erklärung ist, dass
es für solche FK's das Objektprivileg references braucht, für welches es kein entsprechendes
Systemprivileg (references any...) gibt.
Lösung: vom Schema TOSCA aus explizit dem TOSCAK das Recht erteilen, einen FK auf
mengeneinh zu erstellen mit : grant references on mengeneinh to toscak , dann den FK
erstellen.
ganzes Text-Item markieren in Forms 6.5
31.10.01 pg
Das kann mit dem built-in select_all gemacht werden. Ausgenutzt z.B. in l420.
REP-01437 bei Reports mit REF CURSOR
5.10.01 pg
REF Cursors sind eine Möglichkeit, eine bestimtte Query mal in einem Report und mal in
einer Stored Procedure zu verwenden (Beispiel: Gedruckte Adressetiketten sollten genau
gleiche Resultate liefern wie Serienbriefadressen. Ist z.B. bei 2W in s6222w.rdf und
pa2w_adreti realisiert). Das Prinzip dabei ist, dass ein Cursor von einer Funktion
zurückgegeben wird, und das SQL-Statement in der Funktion steht. Funktioniert an und für
sich, aber der Report liefert einen REP-01437, wenn er nicht gegen die endgültige DB
kompiliert worden ist (Bug 1275333). Falls der Fehler auftaucht (gegenwärtig nur bei 2W),
halt Report gegen die WIW2 kompilieren.
HOST
15.8.01 rn
Mit HOST aufgerufene 16-bit-Programme (z.B. DOS-Befehle) geben immer forms_success =
true zurück. 32-bit-Programme reagieren richtig.
AT
14.8.01 tt
Um die Datei Test.bat jeden Tag vom NT Scheduler ausführen zu lassen:
AT 23:00 /EVERY:MONTAG,DIENSTAG,MITTWOCH,DONNERSTAG,FREITAG
"C:\TEST.BAT"
Auf englischem NT: at 10:00pm /every:m,t,w,th,f „xy.bat“
Intermedia/ifs
17.7.01 rn
wenn aus einer db oder in eine db vom filesystem geschrieben wird (z.b. xml-programm, das
ins ifs schreibt bei jutzler), müssen die listener- und db-dienste unter windows nt mit dem
administrator-account gestartet werden (startart ändern), sonst hat die db keinen zugriff auf
externe dateien auf entfernten servern
Db unter windows nt kopieren
9.7.01 rn
wenn eine DB unter windows NT auf einen andere Drive kopiert werden muss, kann man
unter metalink ‚how to copy database under windows’ nachschauen wie das geht. (Kopieren
des ganzen Verzeichnisses, neu erstellen der controlfiles).
init.ora ab 8.1.7: performance-steigerung
9.4.01 rn
Gem. pg kann mit undokumentiertem Eintrag in init.ora :
_push_join_union_view = true
die Performance bei joins gesteigert werden. Bei Tonet hat’s funktioniert
discoverer dr.watson auf client
30.03.01 rn
Wenn auf NT-Client Dr.Watson beim Start von Discoverer kommt, und zwar nur auf einem
PC mit immer demselben Benutzer (andere Benutzer gehen, und der entsprechende
Benutzer auf einem anderen PC läuft auch), dann muss man auf einem intakten Client aus
der Registry HKEY_CURRENT_USER/Software/Oralce (also nicht
HEKY_LOCAL_MACHINE!) exportieren und im entsprechenden Client importieren
utl_file.fopen (test, ob ein file vorhanden ist)
14.03.01 jh
auf allen 8.1.7 DB’s muss der Test neu so aussehen:
neu unter 8.1.7 :w_file_id:= utl_file.fopen(w_pfad,w_datei,'r');
alt unter 7.3.4 :w_file_id:= utl_file.fopen(w_pfad,w_datei,'a');
archivelog
13.03.01 rn
Wenn man eine DB im archivelog modus startet (alter database archivelog), im init<sid>.ora
aber den parameter ‚log_archive_start’ auf false gesetzt hat, bekommt man gelinde
ausgedrückt irgendwann robleme beim log-switch (sieht man im trace-log) und die DB hängt
sich auf (service stoppen und starten)
OLE-Items in Forms
13.03.01 ms
Wenn man in Forms 6.5 ein OLE-Item eines Blocks einem Canvas zuweisen will geht das
nicht, Herr Dr. Watson meldet sich hartnäckig. Man muss im Layout-Editor auf dem Canvas
mit dem Icon OLE-Container links in der Auswahl ein OLE-Item zeichen. Das wird dann im
ersten Block des Form angelegt. Von dort muss es noch in den richtigen Block verschoben
werden. Dann geht's.
INSERT INTO ... RETURNING
13.03.01 pg
Bei INSERT INTO kann eine sog. Returning Clause angehängt werden, womit z.B. durch
Trigger veränderte Columns gleich abgefragt werden können, oder die ROWID der neuen
Row zurückgegeben werden kann:
INSERT INTO ... VALUES ... RETURNING id into p_id.
win_api_shell.sendkeys
08.03.01 ms
Die Procedure WIN_API_SHELL.SENDKEYS hat eine Uebertragungslimite von 255
Zeichen!
connect als internal/dab nicht möglich
08.03.01 jh
connect als internal/dab auf eine instance ergibt fehler ‚insufficient priviledge’, workaround:
connect sys/dab@lei8 as sysdba
PG: Es wird sowieso empfohlen, auf die as sysdba syntax zu wechseln, weil internal in 9i
nicht mehr supported sein wird (bzw. werden soll). Übrigens kann man auch anderen Usern
als dem sys das sysdba Privilege granten; für deren Passwort muss einfach im pwdxxxx.ora
file Platz reserviert sein.
ORA-04020 nach Migration von 8.1.6 auf 8.1.7
06.03.01 rn
Nach Abbruch des letzten Schrittes (db-Migration) eines updates von 8.1.6 auf 8.1.7 habe
ich unregelmässig die Meldung ORA-04020 bekommen, obschon ich u0801060.sql noch
manuelle laufen gelassen habe. Offensichtlich gibt’s da manchmal invalid dba_objects,
welche dann mit dem script %oracle_home%\rdbms\admin\utlrp.sql recompiliert werden
können.
Forms neu kompilieren
22.2.2001 pg
Entweder aus dem CASE ein *.bat generieren lassen. Oder unter NT auf der
Kommandozeile folgenden Befehl absetzen:
for %f in (*.fmb) do start /w f45gen32 module=%f userid=tosca/dab@sid compile_all=no
window_state=minimize batch=yes.
for %var in (gruppe) do ist ein DOS-Befehl, der einen Befehl für jedes Vorkommen in der
Gruppe einmal absetzt (in Batch-Dateien anstelle von %f %%f verwenden!).
Mit compile_all=yes wird zwar alles neu kompiliert, aber die *.fmb werden aktualisiert. Mit
compile_all=no wird das *.fmb nicht angetastet; generiert wird aber trotzdem neu. Beim
is_role_enabled Problem hat es gewirkt.
batch=yes bewirkt, dass bei Fehlern nicht mit einer Meldung gewartet wird.
Tip: zum umbenennen von z.B. p100jo.fmx in p100.fmx kann
ren ????jo.fmx ????.fmx
verwendet werden.
Probleme mit Springfunktionen nach Migration 7.3.4 - > 8.1.6
21.2.2001 pg
Bei Jutzler gingen nach der Migration von 7.3.4 auf 8.1.6 plötzlich die Springfunktionen nicht
mehr, wenn ein Form neu kompiliert wurde: dbms_session.is_role_enabled aus
tosca_new_form in tosca_01.pll lieferte plötzlich bei jeder beliebigen Rolle false (mit dem
Ergebnis, dass immer angezeigt wurde, "sie haben keine Berechtigung, das Modul
aufzurufen". Lösung: tosca_01.pll unter 8.1.6 neu kompilieren.
Später zeigte sich, dass mit dem neukompilierten tosca_01.pll die Springfunktionen aus den
alten *.fmx nicht mehr funktionierten. Lösung 2. Teil: Alle Forms neu kompilieren.
Lösung 3. Teil: in Tosca 1.6 wurde tosca_01.pll geändert; kann kopiert werden.
Icons unter Tosca 2
16.2.2001 pg
Je nach Unterversion der installierten Forms bzw. Discoverer muss der Pfad zu den Icons
(i.A. o:\tosca\icons\tosca2) in UI_ICON oder in UI60_ICON hinterlegt werden. Deshalb:
immer beide anlegen, dann gibt's weniger Probleme.
Kopieren im Case 6.0 von einer Applikation in andere
08.02.2001 ms
Die Kopierfunktionen im Case 6.0 sind ja sehr mächtig. Man kann fast alles fast überall hin
kopieren. Trotzdem gibt es Einschränkungen und vor allem einen ganz hässlichen Bug.
Zuerst die Einschränkungen: Bis jetzt hab ich herausgefunden wie man FKs kopieren, die
einen Table referenzieren, der sich bereits in der Ziel-Applikation befindet, geht
wahrscheinlich nicht, mache aber dafür noch ein TAR auf (sobald ich kann). Gleiches mit
den Domains, die ja auch auf etwas zeigen, das bereits in der Ziel-Applikation vorhanden ist.
Nur zum Ugly-Bug: Kopiert nie etwas in eine andere Applikation und nachdem der
Kopiervorgang beendet ist sogleich noch in eine weitere, ohne den Kopiervorgang aus dem
RON neu aufzurufen. Der macht dann in der ersten Applikation zwar die Kopie, zugleich aber
noch sowas wie ein Share, der aber gar kein richtiger ist. Er ist nämlich nicht löschbar und
bei Generate SQL DDL kommt ein Internal Error mit folgendem Herr Watson. Folge ist, dass
man den ganzen neuen Table löschen muss (nicht nur das eine Feld) und ihn neu zu
kopieren hat. Fragen? An mich!
mit Datums/Zeitfeldern rechnen im Form
03.02.2001 ms
Im Form sollte nie mit Datums/Zeitfeldern in einem Blocks gerechnet werden (z.B.
:block.datumzeit:= :block.datumzeit + (18/24) ), selbst wenn das Item einen Datatype von
'Datetime' hat. Das Datum muss zuerst in ein Workfeld (w_datum date) übertragen werden,
dann kann gerechnet werden und dann wieder zurück in das Datum/Zeitfeld des Blocks.
pcanywhere: Dateine kopieren
31.01.2001 rn
Wenn mit pcanywhere Daten (z.B. FMB und FMX) zum Kunden übertragen werden, fragt
uns das Transferprogramm, ob wir die Daten auf dem Zielcomputer überschreiben wollen.
Wenn wir da `ja` sagen und das zu überschreibende Programm geöffnet ist, kopiert
pcanywhere unser neues Programm zwar, gibt ihm auf dem Zielcomputer aber einen
anderen Namen, nämlich Dateiname{S} (der Depp hängt einfach ein S in Klammern an). Wir
meinen dann, die Uebertragung und das Ersetzen des Programms sei ok. Weit gefehlt!!!!
FRM-40207 mit Forms 4.5 (range error)
31.01.2001 rn
Nach dem compilieren von z.B. v100 unter oracle 7.3.4 und forms 4.5 ist bei gewissen
Feldern der Range low-high value auf z.B. –9 +9 gestellt. Bei Auftragswerten (Warenwert,
Poro etc.) ist dies fatal, da nur noch Beträge bis Fr. 9.—akzeptiert werden. Es ist momentan
noch unklar, wie das im Forms-Developer zustande kommt. Tatsache ist, dass mit der
Forms-Version auf dynant01 dieser Fehler nicht vorkommt.
HOST-Befehl geht unter windows 2000 nicht mehr (It is bug 1615119)
30.01.2001 rn
Wenn ein Host-Befehl (delete, rename, copy) unter windows 2000 in einem Forms laufen
muss, arbeitet man am besten mit win_api_utility (zu finden in d2kwutil); z.B. delete:
WIN_API_UTILITY.DELETE_FILE('C:\TEMP\temp1.lis',TRUE );
Hatte danach noch Probleme mit WIN_API_UTILITY.MOVE_FILE (was eigentlich dem rename
entspricht). Diesen musste ich durch WIN_API_UTILITY.COPY_FILE und dann
WIN_API_UTILITY.DELETE_FILE ersetzen. Dokumentation zum d2kwutil (also zu win_api...) bekommt
man unter p:\tosca\d2kwutil oder am indem man das d2kwutil.pll in forms öffnet und dann die
pll-Beschreibung anschaut.
Grösse eines Tablespaces verkleinern
21.01.01 ms
Wenn ein Tablespace auf der DB zu gross aufgesetzt wurde, d.h. es ist sehr viel Platz im
Tablespace frei (Script @free), kann der Tablespace verkleinert werden. Der Platz wird auch
auf dem Disk frei, d.h. das physische File verkleinert sich auch. Mit folgendem Befehl kann
das gemacht werden:
alter database datafile 'd:\ora_data\db_tosc\tosca01.dbf' resize ???M;
Der Befehlt klappt nicht unter allen Umständen. Das System versucht vom Ende der Datei
aus diese zu verkleinern. Wenn nun bereits Blöcke im hinteren Teil des TS besetzt sind,
kann der TS nicht so weit verkleinert werden.
DB steht bzw. hängt nach Überlauf des Log Archives
20.01.01 pg
Wenn das Log Archive voll ist, steht die DB erst einmal (Archival required, connect internal
only). Wenn dann wieder Platz geschaffen wird und Oracle nicht wieder von selber
"anspringt" kann ihr mit alter system archive log start auf die Sprünge geholfen werden. So
geschehen bei Jutzler unter 8.1.6.0.0
Performanceprobleme in Discoverer
19.01.01 pg
Oft treten Performance-Probleme in Discoverer auf, weil Views (z.B. unsere VJ_VIEWS) mit
Stammdaten gejoint werden: die Views werden mit einem Nested Loop eingefügt, und zwar
so, dass sie pro Disco-Zeile einmal aufbereitet werden. Zum Beispiel wird für jeden Kunden
einmal die ganze KUNDSTATVJ_VIEW aufbereitet (weil die View nicht mergeable ist, kann
nicht nur der Teil für den jeweiligen Kunden aufbereitet werden, das geht erst mit einem
undokumentierten Parameter in 8i).
Mit einem Hint im ganzen Select Statement könnte man Abhilfe schaffen, indem die View mit
USE_HASH (VIEW_ALIAS) nur einmal aufbereitet und dann mit dem Resultat der restlichen
Tables verbunden wird. Das bringt dort etwas, wo im Discoverer viele Rows erwartet werden;
da sind indexierte Zugriffe ja gar nicht erwünscht. Leider ist die Verwendung von Hints in
Discoverer sehr eingeschränkt und der erforderliche Hint kann nicht angegeben werden.
Als Workaround ist es möglich, im Administrator in die Business Area einen Folder
einzufügen, der auf einem Select Statement basiert. Hier lässt sich der Hint angeben. Weil
das Statement aber schon alle Tabellen joinen muss, wird jeder solcher Folder nur für ein
einziges Worksheet Sinn machen. Aber immerhin.
Einstellung Farben in Forms 6.5 (wahrscheinlich auch in 4.5)
12.01.01 ms
Werden die Farben in Forms bei Design-Time (in Form-Builder) gesetzt, wird das mit einer
100-er-Skala gemacht, d.h. r100b100g100 ist weiss. Werden die Farben aber
programmatisch (gibt’s dieses Wort?) gesetzt (mit SET_ITEM_PROPERTY), müssen sie mit
einer 255-Skala angegeben werden, d.h. weiss ist r255b255g255. Warum das so ist wissen
wir nicht.
Kleinere Performance unter 8.1.6 als unter 7.3.4
11.01.01 pg
Falls grosse Datenmengen sortiert werden müssen und 8.1.6. anfängt, in den Temporary
Tablespace zu schreiben, geht die Performance in die Knie. Gemerkt haben wir das am
P100 von Jutzler, der mit Execute-Query in beiden Releases einen Full Table Scan auf
prodkopf mit anschliessendem Sortieren macht. Unter 7.3.4 gings 8 Sekunden, unter 8.1.6.
zuerst über 20 Sekunden. Nachdem SORT_AREA_SIZE auf 1 MB gestellt wurde, war die
Performance besser als unter 7.3.4. Ist noch nicht definitive Lösung; bei Oracle existiert bug
1570435 zu diesem Thema, den ich verfolgen werde.
Mehr als 25 Zeilen sehen in Dos-Fenstern
08.01.01 pg
Viele Befehle, z.B. exp help=yes, generieren einen Output von mehr als 25 Zeilen Länge, der
in normalen Dos-Fenstern nicht ganz sichtbar ist.
Mit Eigenschaften aus dem Dos-Icon in der oberen linken Fensterecke kann unter Layout
u.A. die Anzahl zu puffernder Zeilen eingestellt werden.
Zugriff auf Netzwerklaufwerke aus utl_file
03.01.01 pg
Aus utl_file können vom Server aus Netzwerklaufwerke verwendet werden, wenn die
Services des TNS-Listener und der Datenbank nicht wie standardmässig angelegt das
Systemkonto verwenden, sondern das Konto eines Users in der NT-Domain, der Rechte auf
dem entsprechenden Netzwerklaufwerk hat:
Systemsteuerung, Dienste, Startart, Anmelden als: Dieses Konto. Mit dem Knopf "..." am
besten den Administrator auswählen; die Domain wird dem Usernamen automatisch
vorgestellt.
Tip: wenn nicht gemappte Laufwerke (z.B. N:\pfad\...), sondern UNC-Pfade
(\\server\share\pfad\...) verwendet werden, klappt das Ganze auch, bervor jemand am Server
eingelogged ist und die Mappings erstellt wurden.
Optimizer-Hint in Form muss dynamisch zugewiesen werden
22.12.00 ms
Im Form kann auf Blockebene der Block-Query ein Optimizer-Hint mitgegeben werden
(Property). Das funktioniert aber nicht, wenn man den Hint direkt (on Design-Time) in die
Property schreibt, der Hint muss dynamisch zugewiesen werden, mit
set_block_property('blockname',OPTIMIZER_HINT,'z.B. FIRST_ROWS');
Optimizer-Hint die 2.
22.12.00 ms
Wenn im Form in einem Trigger oder in einer Program-Unit dem SELECT-Satz eines
Cursors ein Optimizer-Hint mitgegeben wird, funktioniert das ausgezeichnet, d.h. der Hint
erreicht die Datenbank
16 bit Programm startet nicht; ntvdm konsumiert 100% CPU Ressourcen
22.12.00 pg
Wenn beim Start eines 16 bit Programms (z.B. Setup von JDeveloper) ca 20 sek. die
Sanduhr kommt, diese danach wieder verschwindet und sonst nichts geschieht, ausser dass
das System (NT 4.0 mit z.B. SP 5 oder 6) langsam wird, dann stürzte das 16 bit Subsystem
von NT ab. Das ist daran erkennbar, dass im Task Manager ein Prozess ntvdm.exe
vorkommt, der fast 100% der CPU braucht. Ein Grund ist ein zu langer Pfad, so dass der
nicht mehr Platz im Environment des 16 Bit Prozesses hat. Entweder Pfad kürzen (hat bei
mir nichts genützt) oder mit der Zeile
shell=%SystemRoot%\system32\command.com /p /e:4096
in c:\winnt\system32\config.nt mehr Platz für das Environment in 16 Bit Applikationen
schaffen (im Beispiel 4096 Bytes).
Probleme beim Starten von Design Editor
Fehlermeldung: CDI 235664 dwc60.dll could not be loaded or does not exist
Lösung: Datei ctl3d32.dll ins Verzeichnis C:\Winnt\System32 kopieren
Probleme beim Insert über DB-Links mit Zugriff auf Sequences
17.11.00 pg
Beim Insert über DB-Links kann es zu folgenden (oder ähnlichen) Fehlern kommen:
ORA-02069: global_names parameter must be set to TRUE for this operation
Das kommt daher, dass z.B. bei folgendem Statement (das auf @eins abgesetzt wird, wo ein
DB-Link auf @zwei besteht)
insert into test@zwei
values (to_char(test_seq.nextval)) ;
nicht etwa zuerst auf der @eins-Seite der Ausdruck to_char(test_seq.nextval) bewertet wird
und dann ein insert into test values (1) an @zwei geschickt wird, sondern das ganze InsertStatement konvertiert und auf @zwei ausgewertet wird, wie ein Ausschnitt aus kill session
zeigt:
INSERT INTO "TEST"("TEST") VALUES (TO_CHAR("TEST_SEQ"."NEXTVAL"@EINS))
Damit dieses Statement auf @zwei läuft, muss diese eine Verbindung zu eins herstellen
können. Das braucht nicht immer ein DB-Link (von zwei zu eins, also eigentlich ein "Zurück"DB-Link) zu sein, unter gewissen Umständen geht es auch ohne. Falls aber nicht, bringt ein
DB-Link immer Abhilfe. Wobei im vorliegenden Fall überlegt werden müsste, welche
Sequence eigentlich verwendet werden soll.
Ein anderer Work-Around wäre, die Sequence in einem eigenen Statement zu holen und
dann als Variable in den Insert zu schmuggeln.
Import von long raw Feldern
15.11.00 rn
für den import (imp73 auf oracle 7.3.4) habe ich folgendes problem gelöst: long raw - felder
gaben irgend eine meldung beim import. mit buffer=81920000 hat er sie dann noch
nachträglich importiert(z.b. imp73 ...,tables=MODELL,buffer=81920000,ignore=yes). beim
import einzelner tables ist darauf zu achten, dass ignore=yes gesetzt wird, da der tablecreate ja schon passiert ist
Listeners auf zwei Ports
16.10.00 pg
Anlässlich eines Support-Falls bei PEG wurden wir darauf aufmerksam gemacht, dass es
nichts bingt, den Listener auf zwei Ports (1521 und 1526) zu konfigurieren. Es ist eh nur ein
Listener vorhanden, und der kann nur auf einen Port hören.
Ich habe das bei PEG umzusetzen begonnen und den 1521 als Überlebenden gewählt. Der
wird auch bei 8i als Default installiert.
Ferner können die sqlnet.log ins Unermessliche anwachsen. Bei PEG ist das geschehen und
zwar auf einem Client (vom Server aus gesehen, nämlich dem Webserver, wo das log .5 GB
gross wurde). Gelegentlich kontrollieren!
Key Based Link anlegen in Designer 6.0
5.10.00 pg
Der Property-Dialog Key Based Link in RON und Design Editor (DE) ist fehlerhaft (Bug
816453), so dass dort der FK nicht ausgewählt werden kann, der die beiden Module
Components verbinden soll. Auswege:
Im Module Diagrammer des DE arbeiten oder
im DE auf Table Usages – Key Based Links gehen und mit + den Dialog links aufrufen.
Port-Status eines Servers abfragen
14.9.00 rn
Auf einem NT-Server (oder Client) kann mit dem Befehl: netstat –a –n der oder die Port’s
angesehen werden, die aktiv auf Anfragen warten
ohne –n werden die IP-Adressen aufgelöst, d.h., es wird deren DNS-Name gesucht. Das
kann einige Zeit dauern, weshalb es mit –n unterdrückt werden kann.
ORA-03113 End of File on communication channel bei isolierten Servern
28.8.00 pg
Wenn ein Server vom Netz abgehängt wird, kann das Login entweder in der Domain
DYNASOFT oder in der DOMAIN des Servers erfolgen. Im ersten Fall gibt es eine
Fehlermeldung, die vorerst ohne Konsequenzen gibt. Wenn dann aber eine SQL-Net
Verbindung zur lokalen Datenbank aufgebaut werden soll, geht das nicht (Meldung oben).
Offenbar versucht SQL-Net, den Benutzer beim Domain-Controller zu authentifizieren.
Mit Login in die "lokale" Workgroup geht alles bestens.
NT booten
23.8.00 rn
Wenn NT nicht gebooted werden kann (Server oder WS), kann mit einer auf einem andern
PC erstellten Boot-Dicette der PC gestartet werden. Auf der Discette muss: ntldr, boot.ini
(Achtung: Systemdatei, diese muss ev. noch angepasst werden), ntdetect.com und für scsiPlatten noch ntbootdd.sys sein.
IP-Adressen für privat-domains
21.8.00 rn
Wenn wir für Ausstellungen oder sonst was Clients oder Server mit dem Internet verbunden
haben, sollten wir innerhalb der IP-Range 192.168.0.1-254 arbeiten, damit kein Konflikt mit
Internet-Adressen entsteht (Aussage von Delec)
Java in eine neue Oracle-8.1.6 Datenbank laden
15.8.00 pg
Wenn wir unsere DB's mit crea_dbnn.sql erstellen, enthält sie vorerst noch keine Java-VM.
Diese muss mit oracle_home\javavm\install\initjvm.sql als SYS geladen werden.
Das braucht spezielle Memory-Einstellungen im init.ora (50 MB SHARED_POOL_SIZE und
20 MB JAVA_POOL_SIZE). Siehe Java Developers Guide, Kapitel 4.
Tabellenerstellungsabfrage aus Access 97, die Table in Oracle erstellt
11.8.00 pg
Bei einer Tabellenerstellungsabfrage (etwa dasselbe wie Create Table as Select) kann unter
Dateiname im Dialog neue Tabelle erstellen "ODBC;" angegeben. Dann erscheint der Dialog
zur Auswahl einer ODBC-Datenquelle.
GET_ITEM_PROPERTY(ITEM,FONT_SIZE)
19.6.00 ms
Der GET_ und SET_ITEM_PROPERTY(ITEM,FONT_SIZE) arbeitet mit einer Fontsize in
100-stel Punkten und nicht wie in der Doku beschrieben in Punkte, also immer nachher resp.
vorher durch 100 teilen resp. mit 100 multiplizieren. Gemäss Support ein Bug, der auch in
Forms 6.0.6.1 noch vorhanden ist. Ob in Forms 6.5 immer noch ist nicht bekannt.
FRM-10256 beim Einsteigen in Tosca
5.6.00/pg
Das Menu von Forms braucht eine spezielle View, damit es mit use menu security = yes
arbeiten kann. Bei Forms 4.5 ist das FRM45_ENABLED_ROLES, bei Forms 6.0 ist es
FRM50_ENABLED_ROLES. Die View wird unter dem User SYSTEM angelegt und per
Public Synonym und Grant der Grund_Rolle zugänglich gemacht. Siehe
p:\tosca\sql\secrole.sql
6.11.00: Die View wird aus dem Case auch unter dem Owner Tosca angelegt; Laufenlassen
des o.g. Scripts entfällt deshalb. Am 15.5.08 Script gelöscht.
Host-Befehl unter Forms 1.3.2 gegenüber 1.6.1
5.6.2000/jh
Der Hostbefehl host( 'del '|| w_path || w_filename,
‚w_filename kann nicht gelöscht werden’,
unter Forms 1.6.1 funktioniert das Ganze.
NO_SCREEN )gibt
in Forms 1.3.2 den Fehler
ORA-06553: PLS-908: beim Login in SQL/Plus nach Upgrade 8.1.5 -> 8.1.6
Nach dem Upgrade eines Server von 8.1.5. auf 8.1.6. erscheint nach dem Login in SQL/Plus
(nicht aber im Frosch) folgende Fehlermeldung:
ERROR:
ORA-06553: PLS-908: Gespeichertes Format von SYS.STANDARD wird nicht von diesem
Release unterstützt
Der Grund ist, dass das Data Dictionary (Objekte des Schema SYS) noch nicht aktualisiert
wurde. Das sollte generell nach jedem Minor-Release-Wechel mit dem entsprechenden
u*.sql aus oracle_home\rdbms\admin geschehen. Der Name des Scripts ergibt sich aus dem
alten Release, beim Wechsel 8.1.5. auf 8.1.6. z.B: u0801050.sql.
Generell wird empfohlen, die Release-Notes einer neuen Version zu lesen. Da stehen oft
Dinge drin, ohne die es wirklich nicht geht.
FRM 40034 - Die Bibliotheksdatei kann nicht zugeordnet werden
24.5.00 pg
Bei Lötscher trat spontan das Problem auf, dass beim Start von Tosca die Meldung "Die
Bibliotheksdatei kann nicht zugeordnet werden" erschien. Er hatte in seinem FormsVerzeichnis ein d2kwutil.plx, dessen Datum genau mit dem Auftreten des Problems
übereinstimmt. d2kwutil.pll war immer noch vorhanden.
Nach dem Löschen des .plx lief alles wieder normal. Keine Ahnung, wie diese Datei
"entstanden" ist.
Am 12.10.00 nochmals aufgetreten.
Object-Library generieren
18.5.00 pg
Der Inhalt einer Object-Library kann nicht direkt verändert werden. Deshalb verwalten wir die
Grundlage für die Object-Library tosca.olb im Form libform.fmb. Nach Änderungen in diesem
Form muss die ObjLib neu generiert werden. Das geschieht auf der Kommandozeile in
p:\tosca\forms20 mit makelib.bat. (Intern wird fm2lib60 mit In- und Output-Filenamen
aufgerufen). Der Aufbau der Object-Library (die Tab's) wird jeweils aus der Registry gelesen.
Deshalb muss vor dem ersten Aufruf von makelib.bat zuest mit p:\tosca\forms20\makelib.reg
die Registry-Struktur übernommen werden.
Ferner ist fm2lib60 buggy; deshalb müssen wir einge Dinge von Hand in die Object-Library
übertragen. Diese sind im Form incfunc.fmb gesammelt. Zudem gehen die Markierungen der
SmartClasses bei jedem generieren verloren; die müssen ggf. auch nachträglich manuell
erfasst werden.
Installation neue Versionen von Discoverer
18.5.00 ms
Achtung, Achtung!!! Wenn ihr eine neue Version von Disoverer installiert müsst ihr unbedingt
darauf achten, dass die Registry auf dem PC mit dem ihr installiert verändert wird. Das kann
zu ganz unangenehmen Auswirkungen führen, wie z.B. USER_NLS_LANG =
GERMAN_GERMANY das dann bei der Eingabe von numerischen Werten mit Formatmaske
immer ein Fehler erscheint (FRM-40209: Feld muss Formatmaske .....). Gemäss Role kann
vor der Installation die Registry exportiert werden und danach wieder import, es werden
keine massgebenden Einträge gemacht.
REP-0159: Syntax-Error on Command-Line bei der Übergabe von Text-Parametern mit
Anführungszeichen in der Parameter-List an Reports
19.4.00 pg
Reports interpretiert offenbar die einfachen und doppelten Anführungszeichen in
Übergabeparametern vom Typ Char speziell. Wenn z.B. im Form in add_parameter(...)
etwas in eine Parameterlist gesetzt wird und das dann im Report gedruckt wird, ergeben sich
folgende Änderungen:
Aus "Hi there" wird Hi there
Aus "Hi there wird "Hi there
Aus "Hi"there wird "Hi"there
Aus "Hi" there wird gar nichts, es kommt der obenstehende Fehler.
Mit einfachen Anführungszeichen verhält es sich identisch.
ORA-1002: fetch out of sequence
23.3.00 kj
Es gibt Fälle, wo man einen Report mit dem Parameter nonblocksql=no aufrufen muss, um
den Fehler "ORA-1002: fetch out of sequence" zu vermeiden.
Deshalb gibt es im Menu-Template ..\forms16\basemenu.mmb die Prozedur
CALL_NONBLOCKREPORT, damit dieser Fall beim Generieren eines Menus berücksichtigt
werden kann.
Im CASE muss in der Comand Line für das entsprechende Modul run_report(...) mit
call_nonblockreport(..) ersetzt werden.
Registry mit Multiple Oracle Homes
14.3.00 pg
Neuere Installationen unterstützen Multiple Oracle Homes. Das führt dazu, dass in der
Registry mehrere Äste vorhanden sind, nämlich der Hauptast
(HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE) und darunter für jedes Oracle-Home ein
HOME0, HOME1, ... . In jedem Ast können dieselben Parameter, z.B. NLS_LANG,
vorhanden sein, wobei Angaben in den Home-spezifischen Ästen solche im Hauptast
übersteuern. Jedes Produkt weiss im Prinzip, wo es nachschlagen muss; von den aktuellen
Client-Tools schauen allerdings alle (Developer 1.6.1, Developer 6, Sql-Plus) im Hauptast
nach.
Ich schlage vor, um Probleme zu vermeiden, aus den Home-spezifischen Ästen alle NLSParameters zu lsöchen.
Probleme bei scrollbars rechts und unten
10.3.00 rn
Wenn beim Start von Tosca rechts und unten scrollbars erscheinen kann das mit der
Windows-Schriftart zusammenhängen. Windows-Bildschirmeinstellungen / Darstellung /
aktives Fenster auf z.B. MS Sans Serif, Grösse 8 einstellen. Wichtig auch: passender
Bildschirmtreiber
die zuletzt gemachten Query-Eingaben wiederholen
3.3.00 ms
Wenn man in Forms mit F7 in den Query-Eingabe-Modus geht, kann mit nochmaligem F7 die
Eingaben der letzten Query in den Bildschirm geholt werden.
Abbruch des Installer bei Kopierfehler z.B. bei core35.dll
1.3.00 pg
Bei PEG ist es vorgekommen, dass der Installer einen Kopierfehler gemeldet hat, obwohl
alle Oracle-Services abgestellt waren. Da half es erst, als zusätzlich noch der Service
MSDTC abgestellt wurde.
NLS_SORT = german ergibt Fehler bei roles bei 8.1.5
23.2.00 rn
ist mit Version 8.1.5.0.5 (patch) gelöst
Anmerkung PG: NLS_SORT=binary ist sowieso besser, weil dann ev. vorhandene Indices
für Sortierung ausgenützt werden können. Falls dann eine andere Sortierung gewünscht ist,
kann das immer noch im Statement selber angegeben werden.
Gruppentotale in Reports nicht allein auf neuer Seite
16.2.00 pg
Ich habe mich lange gefragt, wie verhindert werden kann, dass in Reports die Totale, die
unter der entsprechenden Gruppe stehen, alleine auf eine neue Seite umgebrochen werden.
Es wäre hübscher, wenn mindestens die letzte Zeile der Gruppe auch auf die nächste Seite
käme.
Habe einen Tip gelesen, dass das mit Minimum Window Lines in der Gruppe forciert werden
kann. Habe es aber noch nicht ausprobieren können.
Pikantes Detail: Derjenige, der die entsprechende Frage im Forum stellte, hiess Urs und
seine Mail-Adresse war irgendwas mit swisscom.ch...
Histogramme aus Forms
16.2.00 pg
Forms setzt die meisten Select-Statements mit Bind-Variables ab, um allfällig schon
geparsete Statements auszunutzen (z.B. Select ... vom aufkopf where status = :b1). In
diesem Fall berücksichtigt der Optimizer die Histrogramme nicht (wurde mir von drei
unabhängigen Stellen bestätigt; ich habe es nicht überprüft), weil der noch nicht weiss, was
als b1 tatsächlich daherkommt.
Lösung (z.B. im Fall von Status): in die default-where-clause selber codieren.
frontpage98/discoverer
14.2.00 bs/rn
wenn bei microsoft "frontpage98" der webserver
eingeschaltet ist (in der systemsteuerung) funktioniert der discoverer 3.0 nicht; kommt irgend
'ne meldung, dass er sich nicht connecten kann. schaltet man den webserver aus,
funktionierts. die programme scheinen sich irgendwelche *.dll-dateien zu sharen. vielleicht
verhält es sich bei frontpage2000 resp. neuen discoverer-versionen anders...
Nur einen Trigger für Insert, Update, Delete
28.1.00 kj
Innerhalb eines Triggers kann unterschieden werden, ob es sich um eine Insert-, Updateoder Delete-Transaktion handelt:
CREATE OR REPLACE TRIGGER yourtable_aft
AFTER INSERT OR DELETE OR UPDATE
ON yourtable
FOR EACH ROW
BEGIN
if inserting then
some code here...
elsif updating('COLUMN-NAME') then
more code here...
elsif deleting then
more code here...
end if;
END;
Dr. Watson bei ORAINST.EXE
13.1.00 rn
Bei der Installation von Workgroup-Server, Client oder Developper 2000 muss zwingend mit
ORAINST Version 3.3.1.1.0A oder höher gearbeitet werden. Wenn auf der Instal-Cd eine
ältere Version ist, muss von einer neueren CD (z.B. Discoverer 3.1.25) nur der Installer ins
Oracle-Home installiert werden. Danach den Oracle-Installer vom Oracle-Home aufrufen und
die ‚alte’ CD installieren.
Sessions markieren für v$session; dbms_application_info
3.1.00 pg
Eine Session kann mit dbms_application_info.set_client_info('String') markiert werden, damit
sie im v$session gefunden wird (der gesetzte String erscheint im Feld client_info). Eignet
sich z.B. für Jobs aus der Job-Queue. So kann sogar sichergestellt wird, dass der Job nicht
in zwei verschiedenen Sessions gestartet wird.
Daneben gibt es noch dbms_application_info.set_module, in welchen ein laufendes Modul
und eine laufende Action eingetragen werden können.
Buffer-Fehler beim Import (imp73)
20.12.99 rn
nach dem Export von Discoverer-Tables werden beim Import einige Tables nicht importiert
(buffersize 30012 too smal). Lösung: bei imp73 muss buffer=300120 (oder mehr) angegeben
werden.
Registry-Wechsel für TOSCA und MOSAIC
16.12.99 pg
Mit der letzten Version von Mosaic brauchen die beiden Programme unterschiedliche
Registry-Einträge für NLS_DATE_FORMAT. Entweder aktualisiert der User manuell
jedesmal die Registry, oder man automatisiert das.
Bei PEG ist ein Uility aus dem Internet im Einsatz, das Inhalte der Registry
kommandozeilengesteuert verändern kann. Braucht aber einen Umweg über ein DOSBatchli. Wenn sich jemand dafür interessiert, soll er mit mir sprechen.
Fehlende Grants nach Exp/Imp
15.12.99 pg
Nach Export und Import einer ganzen DB z.B. vom Kunden zu uns fehlen oft bestimmte
Grants. Das kommt so zustande:
Views, die auf anderen Views basieren, werden zwar mit "Create Force" angelegt, auch
wenn ihre Basisviews noch fehlen, werden dann aber invalid. Die Grants, die unmittelbar
nach der View angelegt werden sollten, fallen wegen dem Invalid-Status der Views durch.
Lösungen: entweder aus CASE alle Grants nochmals laufen lassen, oder von der Quell-DB
mit einem Script die Grants rausschreiben. Andere Variante wäre, zuerst mit objcomp die
Views valid machen und dann nochmals den Imp laufen lassen, so dass nur noch die Grants
angelegt werden. Wenn jemand die Syntax dafür weiss,...
autoextend on oder off stellen
10.12.99 rn
wenn auf einem datafile (nicht auf dem tablespace) autoextend on oder off gestellt werden
muss, kann man das folgendermassen:
alter database datafile '?:\ora_data\data\filename.dbf' autoextend on (oder off);
"Falle" beim Group-By
7.12.99 pg
Bei einer Group-By-Query müssen entweder alle Felder in einer Aggregations-Funktion
(sum, count, ...) stehen oder in der Group-By-Clause vorkommen. Allerdings reicht es, wenn
der variable Teil eines Ausdrucks in der Group-By-Clause vorkommt:
select sum(sal), trunc(mgr/10) from scott.emp
group by mgr
ist z.B. absolut legal. Allerdings fallen dabei mehrere Mgr-Nummern zusammen, so dass
mehrere Gruppen mit demselben Wert für trunc(mgr/10)entstehen:
SUM(SAL)
TRUNC(MGR/10)
...
...
1300
778
1100
778
8275
783
...
...
Die Erklärung ist, dass auf der Basis von mgr gruppiert wird, aber mgr/10 verschiedener
Gruppen gleich sein kann (aus 7782 und 7788 wird dasselbe, nämlich 778). Natürlich ist das
Beispiel an den Haaren herbeigezogen, aber mit nvl geschieht im Prinzip dasselbe:
select sum(sal), nvl(mgr,7839) from scott.emp
group by mgr
gibt (manchmal überraschend) zwei Gruppen mit mgr = 7839, nämlich die, die in emp
mgr=null haben, und die, die mgr=7839 haben.
Variante, die eher das Erwartete liefert:
select sum(sal), nvl(mgr,7839) from scott.emp
group by nvl(mgr,7839)
chartorowid
7.12.99 pg
Ihr kennt den Trick, um einen Null-Value eines numerischen Datentyps zu erzeugen:
to_number(null). Dasselbe für den Datentyp Rowid funktioniert mit chartorowid (und nicht,
wie man erwarten könnte, mit to_rowid):
select rowid TheID, dummy from dual
union
select chartorowid(null) TheID, 'A' from dual
ergibt
000001F4.0000.0001
X
A
Falls nicht chartorowid verwendet wird, kommt ORA-01790: expression must have same
datatype as corresponding expression
Zugriff auf Packaged Functions aus Views
26.11.99 pg
Packaged Functions sind solche, die innerhalb eines Packages auf der DB angelegt worden
sind. Dabei ist der Body der Function "versteckt" und kann nicht auf den Isolation Level
überprüft werden, d.h., es kann nicht entschieden werden, ob eine Packaged Function
Datenbankinhalte verändert oder nicht. Es kommt "... does not guarantee not to update the
database" (oder so).
Dazu muss in der Package Specification mit dem
PRAGMA RESTRICT_REFERENCES ((<Function-Name>, WNDS, WNPS)
"versprochen" werden, dass die FU keine Daten auf der DB verändert. Das wird zur
Kompilierzeit überprüft; und zur Laufzeit darf die FU dann in eine View eingebettet werden.
Falls das Package eine Init-Prozedur hat (BEGIN .. END für das Package), läuft diese
möglicherweise auch "innerhalb" der FU ab, wenn das Package bis dann nicht aufgerufen
wurde. Deshalb muss in diesem Fall mit
PRAGMA RESTRICT_REFERENCES (<Package-Name>, WNDS, WNPS, RNPS)
für das Package dasselbe versprochen werden.
Weitere Infos: Server Applications Guide – Using Procecures and Packages – Calling Stored
Functions.
Beispiel: Package adreti
Ersatz für Bind-Variables in Views
26.11.99 pg
In Select-Statements, die in einer SP, einer Programm-Unit oder aus dem Report definiert
sind, lassen sich Bind-Variables einbinden (SP und Programm-Unit einfach referenzieren, in
Reports mit :varname). In Views ist das nicht möglich. Das ist zum Beispiel ein Nachteil bei
nicht-optimierbaren Views wie Group-By-Queries.
Als Ersatz können Packaged Variables verwendet werden, also solche, die in Package
Declarations deklariert werden. Sie können vorgängig vom Form oder was auch immer
abgefüllt werden, und die View kann dann darauf Bezug nehmen. Somit können Views
"parametrisiert" werden, ohne dass am Ort des Aufrufs der View eine Where-Clause
geschrieben werden muss.
Beispiel Package adreti.
Datenübergabe von Session zu Session
26.11.99 pg
Dazu können anstelle von temporären Tabellen sog. "Named Pipes" einfach und effizient
eingesetzt werden. Wird z.B. im Package adreti verwendet, um Variablen von einer FormsSession in eine Reports-Sessoin zu übertragen (die empfangende Session muss dabei den
Namen der Named Pipe kennen; der muss z.B. mit herkömmlichen Parameterübergaben
übergeben werden).
Enter-Query in Forms
19.11.99 pg
In Forms können mit dem # spezielle Where-Clausen direkt in ein Feld, also ohne Umweg
über & und Where-Clause selber schreiben, eingegeben werden.
Beispiele für v100:
in RGNr: #is null
in RGDat: #between '1.1.99' and '15.1.99'
in RGDat: #in ('1.1.99','15.1.99','30.1.99')
Leider können in rechtsbündige numerische Felder keine Query-Inhalte, die länger sind als
das Feld, eingegeben werden (Fehler von Windows).
Springfunktionen in Form werden auf DISABLE gesetzt
15.11.99 ms
Wenn im WHEN-NEW-FORM-INSTANCE-Trigger eines Form ein ENTER-QUERY gemacht
wird, wird die Poplist der Springfunktionen richtigerweise disabled, da diese Feld die
Property QUERY ALLOWED auf FALSE hat. Nach der Query wird das Feld aber
fälschlicherweise nicht mehr enabled, wahrscheinlich weil der Focus nicht mehr im
CG$CTRL-Block steht. Daher muss das das Feld manuell wieder enabled werden. Das geht
folgendermassen:
Im Query-Block einen WHEN-CLEAR-BLOCK-Trigger machen mit der Property Execution
Style 'After' und folgendem Inhalt:
DECLARE
item_id item;
BEGIN
item_id := find_item('CG$CTRL.CG$FF');
Set_Item_Property(item_id, ENABLED, PROPERTY_TRUE);
END;
Dann funktionierts richtig!
Deadlock-Situationen in TOSCA
11.11.99 pg
In grösseren Projekten (Jutzler, EWAG, Ditzler) kommt es ab und zu vor, dass mehrere oder
fast alle Sessions blockiert sind und auf die Freigabe irgendeines Locks warten.
Ein verdächtiger Punkt sind die Foreign-Key-Constraints, bei denen die FK-Columns in der
Child Table nicht indexiert sind. In der Online-Doku zu 7.3.4. gibt es dazu ein Kapitel unter
Oracle 7 Workgroup Server – Oracle 7 Application Developers Guide – Maintaining Data
Integrity – Suchen nach Concurrency Control. Tatsächlich steht dort, dass in diesem Fall für
den Delete einer Row im Parent-Table ein Share Lock der Child-Table notwendig ist. Wenn
man die Situation mit Tosca nachstellen will, ist das aber nicht so einfach. z.B. gibt folgendes
Szenario keinen Hänger:
1. Session 1 beginnt, einen beliebigen Aufkopf zu mutieren -> gibt Row-Level-Lock auf den
einen Aufkopf.
2. Session 2 löscht eine Kundgrp1. Dazu ist vom Delete bis zum Commit ein Share-Lock
auf den Aufkopf notwendig. Der kollidiert aber nicht mit dem Row-Level-Lock von
Session 1.
3. Session 1 speichert die Änderungen auf dem Aufkopf. Kein Problem.
Wenn das Ganze in SQL-Plus nachgestellt wird, ist das Resultat, dass von Session 2
tatsächlich ein lock table aufkopf in share mode oder ein delete from kundgrp1 where ...
ausgeführt werden kann, wenn Session 1 mit select * from aufkopf where aufnr = ... for
update eine Row reserviert hat. Falls aber Session 2 erst deleted, aber noch nicht commitet
hat (ist nicht das Standard-Verhalten von Forms), kann Session 1 den Update nicht
durchführen (hängt beim F10).
Fazit: weil in Forms die deletes immer sofort commited werden, ist das keine Erklärung für
die Deadlocks. Entweder ist dazu eine Dreierkonstellation notwendig, oder ein zeitliches
Zusammenfallen meherere Locks, oder sonst was.
Deshalb ist es auch keine Lösung, für alle 257 FK-Constraints ohne indexierte ChildColumns einen Index zu machen (vgl. Script noindfk.sql).
Tip: In der Online-Doku zu 7.3.4. ist unter – Oracle 7 Application Developers Guide –
Processing SQL-Statements – Viewing and Monitoring Locks ein Hinweis auf utllockt.sql, das
seinerseits die Objekte aus dem Script catblock.sql verwendet. Wenn letzteres
laufengelassen wurde, gibt es eine view dba_blockers, die die SessionID derjenigen Session
liefert, die einen Lock hat, aber selber nicht auf einen Lock wartet. Wahrscheinlich genügt es,
in Deadlock-Situationen diese Session entweder zu killen oder zu Commiten, damit die
Locks befreit werden.
Canvas-Management
7.10.99 pg
Stacked Canvases, die zusammen mit dem Base-Canvase gehoben (raised) werden sollen,
können in CG$RAISE_CANVAS vermerkt werden, wie im folgenden Beispiel:
/* CGLY$RAISE_CANVAS */
PROCEDURE CGLY$RAISE_CANVAS(
P_CANVAS IN VARCHAR2) IS /* Current canvas */
/* Raise the current canvas, plus any dependant canvases to the top */
BEGIN
set_view_property(P_CANVAS, VISIBLE, PROPERTY_ON);
IF ( P_CANVAS = 'CG$PAGE_2') THEN
set_view_property('CG$SPREAD_TABLE_1', VISIBLE, PROPERTY_ON);
ELSIF ( P_CANVAS = 'CG$PAGE_3') THEN
set_view_property('CG$SPREAD_TABLE_2', VISIBLE, PROPERTY_ON);
END IF;
END;
Das trifft z.B. zu in Forms mit mehreren Pages, die ja mit mehreren Content-Canvases
realisiert werden. Per Default wird beim navigieren auf ein Item einer anderen Page der ItemCanvas gehoben, wenn das Item durch einen anderen Canvas verdeckt ist. Ohne den
entsprechenden Code im Raise_Canvas wie oben werden zugehörige Stacked Canvases
nicht sichtbar.
Wysiwyg (breite Artikeltext)
7.10.99 pg
Um den Artikeltext im Form und auf den Belegen gleich aussehen zu lassen, muss das
Visual Attribute des Artikeltexts und die Breite der Felder angepasst werden. Im Tosca 1.6Standard ist das jetzt vorgesehen (Parameter 126).
Falls eines Tages der Artikeltext breiter werden soll als 224 Points, kann das so realisiert
werden (habe ich an Bsp ausprobiert, aber nicht implementiert):
Text Field Bez und Bezuser auf Stacked Canvas legen (diesen in Raise_canvas
vermerken, siehe oben).
Grösse des Text Fields wie gewünscht, no bevel.
Grösse des Stacked Canvas je nach Platzangebot.
In Pre-Text-Item und Post-Text-Item Trigger jeweils die Grösse des Stacked Canvas
anpassen (set_view_property(find_view('canvas-name'),width,nnn) ;
Das geht solange gut, bis ein Item beim "aufzoomen" des Stacked Canvas ganz verdeckt
würde. Dann würde nämlich der Content-Canvas über den Stacked Canvas gehoben beim
navigieren auf dieses Item.
Wysiwyg (Schriftart auf Report)
7.10.99 pg
Um den Artikeltext auf dem Form und im Report gleich umzubrechen, müssen in beiden
Fällen dieselben Schriftarten zum rendern verwendet werden. Im Form sind das immer TrueType-Fonts (TTF); im Reports leider per default Druckerschriftarten. Letztere sind erkenntlich
am Printer Symbol im Font Dialog, und abhängig vom Standard Drucker zur Designzeit.
Solche Schriften sind (nur für das Artikeltextfeld) zu vermeiden, da sonst unterschiedliche
Darstellungen garantiert sind.
DB-Link mit Datenmanipulation auf der gelinkten DB
13.09.99 ms
Was hab ich geübt! Mit dem Script @dblink habe ich einen DB-Link von einer auf eine
andere DB gemacht. Nach dem Link konnte ich ohne Probleme einen SELECT auf die Daten
der gelinkten DB machen. Ein INSERT (und wahrscheinlich auch UPDATE) ging aber mit
allen erdenklichen Varianten nicht. Bis ich von der gelinkten DB ebenfalls einen DB-Link auf
die linkende, sprich Basis-DB machte. Jetzt läufts problemlos.
Also: Bei Datenmanipulation (INSERT,UPDATE,DELETE) über einen DB-Link, muss der DBLink auf die Basis-DB zurück auch gemacht werden. (Wahrscheinlich wegen COMMIT oder
so)
vgl. Eintrag vom 17.11.00
Der Befehl Copy in SQL-Plus
10.09.99 kj
In SQL-Plus gibt es einen ganz raffinierten Befehl, der es erlaubt, Daten direkt von einer
Datenbank in eine andere zu übertragen, ohne dass ein DB-Link nötig ist:
usage: COPY FROM <db> TO <db> <opt> <table> { (<cols>) } USING <sel>
<db>
: database string, e.g., scott/tiger@d:chicago-mktg
<opt> : ONE of the keywords: APPEND, CREATE, INSERT or REPLACE
<table>: name of the destination table
<cols> : a comma-separated list of destination column aliases
<sel> : any valid SQL SELECT statement
A missing FROM or TO clause uses the current SQL*Plus connection.
Beispiel:
delete statusaltneu
/
delete atfunktion
/
COPY FROM TOSCA/DAB@DSXX INSERT ATFUNKTION USING SELECT * FROM ATFUNKTION
COPY FROM TOSCA/DAB@DSXX INSERT STATUSALTNEU USING SELECT * FROM STATUSALTNEU
Rollback-Segments
30.8.99 pg
(siehe auch \\dynant01\ora_prog\tosca\admin\RollbackSegments.doc)
Um die optimale Grösse und Anzahl herauszufinden, empfiehlt ORACLE ausprobieren:
Einige RBS mit irgendeiner Grösse anlegen, Applikation laufen lassen (ohne seltene, grosse,
Transaktionen, die kommen später). Schauen, wie gross sie gewachsen sind und in
v$waitstate schauen, ob es eine Contention gab. Im letzteren Fall Anzahl RBS erhöhen,
nochmal testen. Dann die Extent-Size so einstellen, dass etwa 20 Extents für den normalen
Betrieb reichen.
Für grosse Transaktionen (die zufällig auf irgendeines der RBS fallen können) entweder
spezielles RBS verwenden, oder aber:
die benötigte Anzahl RBS aufsetzen und im Tablespace zusätzlich Platz lassen für die
grösste Transaktion. Mit OPTIMAL dafür sorgen, dass sich die einzelnen Segmente
vergrössern können, aber bei der nächsten Transaktion wieder schrumpfen. So kann jedes
RBS nach Bedarf wachsen, egal, auf welches die grosse Transaktion fällt.
Ein Bsp:
RBS 1..4 je initial 1024, next 1024, pctincrease 0 (0 ist empfohlen), minextents 8, maxextents
viele (in 7.3.4. Doku im Bsp's sind das 10240), optimal to 20 M.
Kill Session in Stored Procedures (SP's)
25.8.99 pg
Ich habe in SP's oft Fehlerbehandlungsroutinen mit WHEN OTHERS THEN schreibe den
Fehler in Butch und fahre weiter. Das ist recht hübsch bis zu dem Moment, wo man die
Session abschiessen will um die SP zu unterbrechen. Die schreibt brav ORA-00028 YOUR
SESSION HAS BEEN KILLED in den butch und fährt unbeeindruckt weiter - wenn nötig
stundenlang (bzw. ewig) oder bis zum shutdown abort (immediate reicht nicht).
Hier wäre es also besser, folgenden Fehlerbehandler zu schreiben:
WHEN OTHERS THEN
if abs(sqlcode) = 28 then
raise ;
-- Reicht die Exception weiter.
end if ;
-- hier kannste den Butch abfüllen oder was immer Du willst.
END ;
Ev. gäbe es noch andere Fehlernummern, die ähnlich fatal sind und entsprechend
zuvorkommend behandelt werden müssten.
Poplists in Forms
20.8.99 ms
Die Anzeige einer Poplist, d.h. das was man am Bildschirm sieht, darf in Forms nicht länger
als 30 Zeichen sein. Der List Item Value hingegen schon.
Reports unterdrückt Teil der Daten
4.8.99 pg
Ein möglicher Grund ist, dass die unterdrückten Daten direkt oder indirekt in einem Frame
enthalten sind mit der Print-Condition All (oder All but first/last). Objekte mit einer solchen
Print-Condition können nicht auf die nächste logische Seite überfliessen.
Migration auf 8i
3.8.99 rn
wenn auf 8i migriert wird muss zwingenderweise der default-tablespace des users sys der
tablespace system und nicht user_data sein (oracle-hotline).
Replikation
2.8.99 pg
in \\dynant01\ora_data\tosca\admin\replbsp.zip gibt es Infos für ein Beispiel, wie die
Replikation zwischen Datenbanken bei der SBB gelöst ist. Ist halblegal in unseren Besitz
gelangt, bitte entsprechend behandeln.
Forms neu kompilieren nach Wechsel auf Forms 5.0
2.7.99 pg
Aufrufe von SP's aus Forms, die von 4.5 auf 5.0 gelüpft worden sind, ergeben den Fehler
ORA-04062. Form neu kompilieren. vgl. Technical Newsletter 3/99, Ste. 29.
Bericht von der EOUG-Conf inklusive Links und EMail-Adressen
28.6.99 pg
Zu finden in \\dynant01\ora_data\tosca\admin\eougconf99.doc
Automatische Konversion von Zahlen oder Text in SQL Statements
18.6.99/sr
Achtung: Oracle akzeptiert in SQL-Statements eine laxe Schreibweise, wenn es um
Varchar2-Felder geht, d.h. ein Statement wie
SELECT * FROM WWWBESTELLUNG WHERE KUNDENNR = 10988
funktioniert, obwohl KUNDENNR als VARCHAR2 definiert ist, weil Oracle eine automatische
Konversion vornimmt. Entgegen meiner bisherigen Annahme scheint aber nicht 10988 in
einen VARCHAR2 umgewandelt zu werden, sondern anscheinend werden alle DB-Einträge
im Feld KUNDENNR in Zahlen umgewandelt. Dies geht solange gut, als die KUNDENNREinträge in der DB alle numerisch sind. Sobald allerdings ein einziger alphanumerischer Wert
eingetragen wird, funktioniert das genau gleiche SQL-Statement nicht mehr, sondern bringt
eine Fehlermeldung
Update von anderen Tables in DB-Triggers
14.6.99 ms
In einem DB-Trigger dürfen Columns von Tables die einen Foreign-Key in den AusgangsTable haben problemlos mutiert werden. (z.B. in AUFZEILE_UPD_AFT; wenn Liefermenge
der Auftragszeile mutiert wird, wird die Liefermenge aller zugehörenden AUFZSTULI auch
mutiert)
Nun klappt das dann nicht, wenn in diesem Trigger ein Feld mutiert wird, das einen ForeignKey in einen anderen Table hat (ORA-04094: table AUFZEILE is constraining, trigger may
not modify it).
Lösung: Foreign-Key abhängen (disable, drop) oder vor dem Update im Trigger Foreign-Key
mit dynamischem SQL (DBMS_SQL.??) disablen und nachher wieder enablen.
Firewalls und SQL-Net
9.6.99 pg
Dokument vom Support über Firewalls: l:\tosca\admin\firewall.doc.
Ausprobiert und ab 8.1.7.2 ohne Performanceeinbusse eingesetzt:
Geht auch bei 9.2.0.2 (dyna2000-01)
use_shared_socket in registry auf DB-Server. Dann werden alle Connections auf Port 1521
aufgesetzt, auf dem Server wird dieser Port laufend gescannt.
Aus einem Metalink-Forum hier noch die Methode, wie man das überprüft:
You will not get the redirect port in the log, as you have found the log only reveals the client
side port.
To check for redirection turn on listener tracing at level 16 and make a client connection. You
can turn on tracing from lsnrctl like this...
lsnrctl> set trc_directory c:\temp
lsnrctl> set trc_level 16
After the client has connected stop the trace and review
lsnrctl> set trc_level 0
The client incoming connect packet will look like this...
nsprecv: packet dump
nsprecv: 00 F7 00 00 01 00 00 00 |........|
nsprecv: 01 36 01 2C 00 00 08 00 |.6.,....|
nsprecv: 7F FF A3 0A 00 00 01 00 |........|
nsprecv: 00 BD 00 3A 00 00 02 00 |...:....|
nsprecv: 41 41 00 00 00 00 00 00 |AA......|
nsprecv: 00 00 00 00 01 23 00 00 |.....#..|
nsprecv: 00 04 00 00 00 00 00 00 |........|
nsprecv: 00 00 28 44 45 53 43 52 |..(DESCR|
nsprecv: 49 50 54 49 4F 4E 3D 28 |IPTION=(|
nsprecv: 41 44 44 52 45 53 53 3D |ADDRESS=|
nsprecv: 28 50 52 4F 54 4F 43 4F |(PROTOCO|
nsprecv: 4C 3D 54 43 50 29 28 48 |L=TCP)(H|
nsprecv: 4F 53 54 3D 6D 73 65 69 |OST=mxxx|
nsprecv: 62 74 2D 70 63 29 28 50 |xx-pc)(P|
nsprecv: 4F 52 54 3D 31 35 32 31 |ORT=1521|
nsprecv: 29 29 28 43 4F 4E 4E 45 |))(CONNE|
nsprecv: 43 54 5F 44 41 54 41 3D |CT_DATA=|
nsprecv: 28 53 45 52 56 49 43 45 |(SERVICE|
nsprecv: 5F 4E 41 4D 45 3D 6E 38 |_NAME=n8|
nsprecv: 31 37 2E 75 73 2E 6F 72 |17.us.or|
nsprecv: 61 63 6C 65 2E 63 6F 6D |acle.com|
nsprecv: 29 28 43 49 44 3D 28 50 |)(CID=(P|
nsprecv: 52 4F 47 52 41 4D 3D 45 |ROGRAM=E|
nsprecv: 3A 5C 6F 72 61 63 6C 65 |:\oracle|
nsprecv: 5C 6F 72 61 38 31 5C 62 |\ora81\b|
nsprecv: 69 6E 5C 53 51 4C 50 4C |in\SQLPL|
nsprecv: 55 53 2E 45 58 45 29 28 |US.EXE)(|
nsprecv: 48 4F 53 54 3D 4D 53 45 |HOST=Mxx|
nsprecv: 49 42 54 2D 50 43 29 28 |xxx-pc)(|
nsprecv: 55 53 45 52 3D 6D 73 65 |USER=mik|
nsprecv: 69 62 74 29 29 29 29 00 |ese)))).|
nsprecv: normal exit
If there is a redirect it will follow as the next send packet to the client and looks like this.....
nspsend: packet dump
nspsend: 00 41 00 00 05 00 00 00 |.A......|
nspsend: 00 37 28 41 44 44 52 45 |.7(ADDRE|
nspsend: 53 53 3D 28 50 52 4F 54 |SS=(PROT|
nspsend: 4F 43 4F 4C 3D 74 63 70 |OCOL=tcp|
nspsend: 29 28 48 4F 53 54 3D 31 |)(HOST=1|
nspsend: 33 38 2E 31 2E 31 33 32 |02.1.102|
nspsend: 2E 31 36 39 29 28 50 4F |.102)(PO|
nspsend: 52 54 3D 31 37 31 38 29 |RT=1718)|
nspsend: 29 00 00 00 00 00 00 00 |).......|
nspsend: normal exitnscon: exit (0)
Rollback in Forms
7.6.99 ms
Aus einem Form wird oft eine Stored-Procedure aufgerufen, die Daten auf der DB ändert,
aber keinen COMMIT macht. Der COMMIT darf und soll erst gemacht werden, wenn im
Form ein COMMIT_FORM gemacht wird, womit dann die im Form gemachten Aenderungen,
sowie die in der Stored-Procedure gemachten Aenderungen in der DB definitiv und
unwiederruflich geschrieben werden.
Wird nun aber im Form nach einer solchen Stored-Procedure in Clear Block oder ein EnterQuery ohne Speichern der gemachten Aenderungen ausgeführt, werden die Aenderungen
auf der DB nicht rollbacked, im Gegenteil, beim nächsten COMMIT_FORM werden sie
definitiv geschrieben, obwohl der Benutzer ganz klar gesagt hat, dass er nicht speichern will.
Um dies zu umgehen, muss bei solchen Forms im CLEAR-BLOCK-Trigger die StoredProcedure PR_ROLLBACK aufgerufen werden, damit nicht nur die Aenderungen im Form
rückgängig gemacht werden, sondern auch jene auf der DB.
wie überträgt man aus einem LONG-Feld den Inhalt in ein VARCHAR2-Feld
20.5.99 ms
Eigentlich ist das ganz einfach. VARCHAR2_FELD:= LONG_FELD; lautet der Befehl. Das
Problem ist nur, wenn sich im Long-Feld ein Inhalt > 2000 Zeichen befindet. Per heute ist mir
nicht bekannt, wie man dann z.B. die ersten 2000 Zeichen in ein Varchar2-Feld bringt.
SQL-Statements werden in TOAD unter dem angemeldeten User gefahren; Falle
18.5.99 pg
Im Toad können mit dem Drop-Down im Object-Browser Objekte eines anderen Users
angeschaut werden. Wenn daraus dann ein Proc Edit Window geöffnet wird (z.B. Create or
replace procedure...), läuft das immer im Schema des angemeldeten Benutzers (d.h. der, mit
welchem die Connection erstellt wurde und der unten in der Fusszeile vor dem @ angezeigt
wird), und nicht im Schema des Owners des Objekts. So können also unbeabsichtigt Objekte
von einem anderen Owner "geerbt" werden, was schwierig zu findende Effekte ergeben
kann. Also vorsicht !
v100 friert beim Direktdruck in der Poplist "Drucker" ein
12.5.99 pg
Mit dem Button Drucken werden in v100 diejenigen Funktionen angezeigt, die gemäss
statusaltneu für die Auftragsart und –status zulässig sind. In der Poplist Drucker werden die
Drucker angezeigt, die in moduldrucker für die aktuell gewählte Funktion definiert sind. Falls
es Funktionen gibt, die beim Kunden gar nie verwendet werden (z.B. Druck
Auftragsbestätigung), ist dafür mit hoher Wahrscheinlichkeit kein Drucker definiert. Wenn der
User auf dieser Funktion steht (oftmals die oberste) bleibt die Poplist Drucker leer; falls er
hineinnavigiert, bliebt er in der leeren, aber obligatorischen (mandatory) Poplist hängen bzw.
muss die Runformsession abschiessen. Lösung: nicht benötigte Funktion aus statusaltneu
nehmen.
Probleme mit Login nach Discoverer 3.1-Installation
6.5.99 pg
PEG hat eine NCR-NT-Installation, die auf autoexec.bat-Dateien und Login-Scripts basiert.
Im ersten werden u.A. Umgebungsvariabeln gesetzt (z.B. SET SERVER=\\DC1PEG), welche
im zweiten verarbeitet werden.
Nach der Installation von Discoverer 3.1 sind im Autoexec.bat bei gewissen Zeilen am
Schluss Leerstellen angefügt. Die Umgebungsvariabeln werden damit z.B. zu
\\DB1PEG<space>, was dann zu Fehlern im Login-Script führt.
Fazit:
Vor der Installation Disco 3.1 das autoexec.bat kopieren (wenn es umfangreich ist),
anschliessend das vom Discoverer-Installer angefügte path=o:\orawin95\bin in das Original
reinpuzzeln, bzw. das autoexec.bat nach der Installation bereinigen (Leerstellen am
Zeilenende abknellen), wenn es vorher nicht kopiert wurde.
Ich weiss nicht, wie es auf anderen Systemen aussieht: im NCR-autoexec.bat gibt es
spezielle Leerstellen (Hex DB oder sowas), vielleicht verwirrt das den Installer. Vielleicht
besteht das Problem aber auch überall.
PL/SQL in 8i
6.5.99 pg
siehe Technical Newsletter II/1999 Ste. 64
Verteilte Datenbankobjekte mit Designer 2.x
6.5.99 pg
siehe Technical Newsletter II/1999ste. 35
Character-Mode Reports auf Laser Drucker
Bei Character-Mode-Reports, die ja mehrheitlich für Matrix-Drucker geschrieben werden,
sollte für das Format A4-quer (bei hoch entsprechend) die Zeilenanzahl nicht grösser als 45
erfasst werden, da sonst der Seitenumbruch nicht richtig funktioniert wenn diese Reports auf
einen Laser-Drucker (was ja immer häufiger passiert) gedruckt werden. Ebenfalls sollten in
der Breite nicht mehr als 132 Zeichen belegt werden, da sonst ebenfalls auf Laser-Drucker
der Zeilenumbruch in die Hosen geht.
Fehlermeldung 'FRM-0:' in Forms
29.4.99 ms
Wenn man in einem Form mit der Maus auf den Such/Feldstecher-Button fährt, erschein die
Fehlermeldung, resp. Informations-Meldung, FRM-0: und sonst gar nichts. Das kommt
daher, dass das Feld BUBBLE_PAGE_1 (oder _2, _3 usw.) keinem Canvas zugeordnet ist.
Dem Feld einen Canvas zuteilen und die Meldung kommt nicht mehr.
Raise-Application-Error (-20100,'...') in PL/SQL wird in Forms nicht angezeigt
16.4.99 PG
Falls in einem DML-Statement oder einem Trigger oder einer Stored Procedure eine
Exception geworfen wird (kann auch eine "selbstgemachte" wie oben sein), hängt die
Reaktion im Form von der Art des Aufrufs ab:
Select / Insert / Delete wurde vom Form durchgeführt (betr. Constraints und Triggers):
wird vom ON-Error-Trigger, den der Forms-Generator in den Block generiert hat, ideal
verarbeitet: die beabsichtigte Fehlermeldung oder der Oracle-Error wird angezeigt.
Direkter Aufruf der Stored-Procedure z.B. aus When-Button-Pressed-Trigger, kein ONError-Trigger. Nicht ideal: Message FRM-40735: When-Button-Pressed-Trigger trifft auf
unbehandelte Exception ORA-20100. Mit Shift-F1 kann die ursprüngliche Fehlermeldung
aber nicht angezeigt werden.
Direkter Aufruf der Stored-Procedure, ON-Error-Trigger vorhanden: analog oben, nur
dass in jedem Fall eine Message angezeigt wird anstelle der Fuss-Zeile.
Direkter Aufruf der Stored-Procedure, Exception-Handler cgte$other_exceptions: Ist halbideal: in der Fusszeile wird recht unauffällig die gesamte Fehlermeldung mit Callstack
angezeigt.
Fazit: Bei Exceptions in Datenbank-Triggern können User-defined-Exceptions problemlos
verwendet werden und werden im Form angezeigt. Bei Stored-Procedures wird am bestem
in den Aufruf im Form ein eigenes Exception-Handling geschrieben wie folgt:
BEGIN
pr_crash(true) ;
EXCEPTION
WHEN OTHERS THEN
msg_alert(sqlerrm,'E',True) ;
END ;
Group-By-Query liefert eine Row mit lauter NULL-Werten
16.4.99 PG
Eine Group-By-Query, die aus lauter Columns mit Group-Funktionen bestehen (SUM, AVG,
...) und keine Column, nach der gruppiert wird, liefert in jedem Fall eine Row zurück, auch
wenn eigentlich keine Daten vorhanden sind. Die Cursorvariable cursor%found wird dann
true, was man beim programmieren eigentlich nicht erwartet.
Beispiel:
select count(*) from
( select sum(1) from dual where 1=2)
ergibt 1, weil eben die zweite Zeile ein Row liefert, obwohl die Bedingung eigentlich falsch
ist.
sobald eine Group-By-Column dabei ist, wird keine Row mehr zurückgegeben:
select count(*) from
( select dummy,sum(1) from dual where 1=2
group by dummy)
liefert erwartungsgemäss 0.
ORA-1458 invalid length ....
14.04.99 JH (MS)
Um der Gefahr von floating Komma zu begegnen, ist es wichtig, die Felder nicht simpel als
number sondern als number(11,2) also stellengerecht, zu definieren. So ist garantiert, dass
ein Uebergabewert nicht zulang wird und im empfangenden Programm richtig verarbeitet
werden kann.
(in die procedure pr_marge_test wurde ein Feld übergeben, das durch das berechnen der
Mehrwertsteuer folgenden Inhalt bekam: 99999.123456789... und dann in die Wueste
fräste).
Multi-Line Items in Forms
27.04.99 JH (MS)
Damit ein Multi-Line Text-Item im Forms beim Vergrössern (im pre_text_item-trigger X- und
Y-Positionen verändern) alle dahinter liegenden Felder überdeckt, ist es wichtig, dass es
innerhalb der Blockreihenfolge als letztes aller der betroffenen Item aufgeführt wird.
Canvas-Management funktioniert nicht richtig, wenn WHEN_NEW_BLOCK_INSTANCETrigger überschrieben wurde
13.4.99 PG
Der Forms-Generator kann Stacked-Canvases generieren, z.B. um zusätzliche Daten
anzuzeigen. Damit diese auch sichtbar werden wenn auf den ensprechenden Block (im
Base-Canvas) navigiert wird, wird unter cgly$... code generiert. Der wird jeweils beim BlockWechsel mit cgly$canvas_management ausgeführt, welches seinerseits im
When_new_block_instance-Trigger auf Form-Ebene angestossen wird. Falls auf Blockebene
ebenfalls solche Trigger (manuell im Forms-Designer) eingeführt werden, übersteuern die
standardmässig den Trigger auf Form-Ebene. Dann funktioniert das Canvas-Management
nicht mehr so rund; Resultate sind schwierig zu interpretieren. Lösung: Beim Trigger auf
Block-Ebene den Execution-Style auf Before oder After stellen.
Loop in nicht-navigierbaren oder unsichtbaren Items lässt Form "einfrieren"
8.4.99 PG
Normalerweise motzt Forms, wenn in einem Block kein Item navigierbar ist, so dass der
beschriebene Fehler im allgemeinen ausgeschlossen ist.
Falls aber mit den Properties previous/next-navigation-item ein Loop in die
Navigationssequenz eingebaut wird, in welchem sich nur nicht-navigierbare Felder befinden,
friert das Form ein, sobald mit der Tastatur (bei der Maus erfolgt ja keine Navigation von
einem Feld zum anderen) navigiert wird: keine Reaktion mehr auf Maus oder Tastatur, 99%
Systemauslastung (unter NT), keine Neudarstellung des Bildschirminhaltes nachdem das
Form überdeckt wurde. Der Task muss beendet (NT) oder das System neu gebooted werden
(Win95).
Jobs nur an bestimmten Wochentagen
29.3.99 PG
Wenn ein Job nur an bestimmten Wochentagen ausgeführt werden kann, muss dies im
aufsetzen der Job-Queue im Feld Intervall berücksichtigt werden. Bsp. pr_stat_nachf bei
Jutzler, das wegen der Redo-Logs nicht übers Wochenende laufen soll:
trunc(sysdate)+decode(to_char(sysdate,''D''),7,3,1,2,1) + 5/24/60
(1)
(2)
(3)
(1): trunc(sysdate): Mitternacht des Tages, an dem der aktuelle Lauf startet
(2): decode(to_char(sysdate,'D'): je nach Wochentag 3, 2 oder 1 Tage addieren
(3): +5/24/60: 5 Minuten addieren, weil der Job 5' nach Mitternacht starten soll
to_char(sysdate,'D') liefert den Wochentag 1=Sonntag, 7=Samstag. Die letzte (ungerade)
Option von decode ist der Default, der in allen nicht vorher abgehandelten Fällen
zurückgegeben wird.
In unserem Beispiel:
Datum
to_char(sysdat,'D')
Resultat von Decode
Mo 22.3.99
2
1
Di 23.3.99
3
1
Mi 24.3.99
4
1
Do 25.3.99
5
1
Fr. 26.3.99
Sa 27.3.99
So 28.3.99
6
7
1
1 (am Sa um 2:30 wird noch gebackupt)
3 (--> Di 30.3.99)
2 (--> Di 30.3.99) (Fall kommt i.A. nicht vor)
Ausblenden von Items
24.3.99 PG
Normalerweise gibt es einen Runform-Fehler, wenn ein Item, das den Focus hat,
ausgeblendet werden soll. Deshalb wird z.B. in einblenden in der Library zuerst vom
auszublendenden Item wegnavigiert. In Restrictetd-Situationen geht das aber nicht und
erzeugt seinerseits einen Fehler.
Lustigerweise kann im when-clear-block-Trigger (in allen restricted-Abläufen ?) ein Item
ausgeblendet werden, auch wenn es den Focus hat. Wird so in A100 praktiziert.
Drucken mit Characters-Reports und Druckerfiles mit Hex-Steuerungen
23.3.99 ms
Damit auf NT beim Drucken eines Character-Reports die Druckersteuerungen aus dem
Druckerfile genutzt resp. berücksichtigt werden, muss bei den Eigenschaften des Druckers
unter 'Allgemein' und 'Druckprozessor' die Checkbox 'RAW-Datentyp immer spoolen'
unbedingt gecheckt/markiert sein. Ist sie das nicht, nützen alle Steuerungszeichen im
Druckerfile nichts!
Output eines Reports unterdrücken
9.3.99 PG
Wenn in einem Report kein Output erzeugt, aber der Report abgearbeitet werden soll (um
z.B. Edit-Triggers durchführen zu lassen), kann mit den Einstellungen :destype := 'File' ; und
:desname := 'Nul' ; die Ausgabe in das vom Betriebssystem bereitgestellte Nul-File laufen
gelassen werden. Allerdings muss der Modus auf 'Character' gestellt werden, (:mode :=
'Character'; ), weil sich der Report-Server sonst Sorgen macht wegen des zu erstellenden
nul-Files und fragt, ob es überschrieben werden soll (auch wenn es nicht vorhanden ist!).
S622 z.B. braucht diese Techik, da das gewünschte File mit den Serienbriefadressen mit
Hilfe des Text-IO-Packages in den Edit-Triggern erzeugt wird.
löschen/droppen von fehlerhaften Job-Queues / submitted Jobs
9.3.99 ms
Wenn ein Job-Queue fehlerhaft ist, d.h. 16 Failures hat und Broken auf 'Y' steht, kann er mit
dem User TOSCA und dem Script JOB_REM nicht abgeschossen werden. Man muss das
mit dem User SYS machen.
corruptes Datafile des Tablespace RBS bei Welti, Winterthur am 5.3.99
9.3.99 ms
Bei Welti war das Datafile des Tablespace RBS corrupt. Normalerweise flickt man einen
solchen Fehler bei allen Tablespaces mit folgenden Befehlen:
öffnen des Server-Managers (SVRMGR23.EXE)
set instance ????
connect internal/?
shutdown immediate
startup mount pfile=?:\orant\database\init????.ora
alter database datafile '?:\ora_data\data\filename.dbf' offline;
alter database recover datafile '?:\ora_data\data\filename.dbf';
alter database datafile '?:\ora_data\data\filename.dbf' online;
alter database open;
Das funktioniert normalerweise. Bei Welti war nun etwas sehr speziell corrupt, d.h. dass es
der Rollback-Tablespace war hat da sicher auch noch mitgespielt. Zusammen mit OracleSupport (Herr Wasser / Herr Teichmann) haben wir dann das folgendermassen geflickt:
folgende Eintragungen in INIT????.ORA machen:
Parameter 'rollback_segments = (rbs1,rbs2,rbs3,rbs4)' mit # auskommentieren
neuer Parameter 'unlimited_rollback_segments=true' erfassen
Server-Manager öffnen (SVRMGR23.EXE)
set instance ????
connect internal/?
startup mount pfile=?:\orant\database\init????.ora
select segment_name,status from dba_rollback_segs;
der Status war dann auf 'NEEDS RECOVERY'
create rollback segment rbsflick tablespace system;
alter rollback segment rbs1 offline; -- sofern er nicht schon offline ist
alter rollback segment rbs2 offline; -- sofern er nicht schon offline ist
alter rollback segment rbs3 offline; -- sofern er nicht schon offline ist
alter rollback segment rbs4 offline; -- sofern er nicht schon offline ist
drop rollback segment rbs1;
drop rollback segment rbs2;
drop rollback segment rbs3;
drop rollback segment rbs4;
select name,status from v$datafile;
das Datafile RBS01.DBF war OFFLINE
drop tablespace rbs;
@?:\ora_data\sql\crea_db3.sql;
Tablespace RBS mit dem Original-Script neu anlegen
shutdown
in INIT????.ORA Parameter 'rollback_segments = (rbs1,rbs2,rbs3,rbs4)' wieder
aktivieren
startup mount pfile=?:\orant\database\init????.ora
alter database open
Und dann war die DB wieder OK!
Korruptes Datafile des Tablespace RBS
3.10.02 rn
gleiches Problem bei der Ditzler-Datenbank.
The steps to resolve the datafile inconsistency are:
1) comment out the ROLLBACK_SEGMENTS parameter from INIT.ORA
2) start the instance and recover the datafile:
SVRMGR> STARTUP MOUNT
SVRMGR> ALTER DATABASE DATAFILE '[datafile_name]' OFFLINE;
hier musste ich die db öffnen: alter database open;
SVRMGR> RECOVER TABLESPACE [rollback_tablespace_name];
SVRMGR> ALTER TABLESPACE [rollback_tablespace_name] ONLINE;
SVRMGR> ALTER ROLLBACK SEGMENT [rollback_segment_name] ONLINE;
3) reapply the ROLLBACK_SEGMENTS parameter in INIT.ORA for future instance
startups
Ergänzung 23.5.07 pg:
Bei Tonet (Backup war über offene Files gelaufen) war ich irgendwie eingeklemmt: rbs
konnten nicht gedroppt, aber auch nicht online und nicht offline genommen werden, sie
waren immer auf "needs recovery".
Nach dem Start der DB dem Parameter
_corrupted_rollback_segments=(rbs1,rbs2,rbs3,rbs4) (und rollback_segements
auskommentiert) im init.ora konnten die RBS dann schliesslich doch gedropped werden.
Korruptes Datafile des Tablespace RBS
09.06.99/kj
gleiches Problem bei der Ditzler-Datenbank.
Ursache: die Backup-Software greift auf die DB-Files zu, bevor die Datenbank den Shutdown
durchgeführt hat (noch laufende Rollbacks). Dadurch wird der RBS-Tablespace beschädigt.
Unterschied zur obigen Lösung:
folgende Eintragung in INIT????.ORA machen:
neuer Parameter _CORRUPTED_ROLLBACK_SEGMENTS = (RBS1,RBS2,etc.)
danach startup restricted (startup restrict mount pfile=....)
drop der rollback segmente und des Tablespaces wie oben.
validieren der Daten in einem DB-Table
9.3.99 ms
Daten in einem DB-Table können irgendwie nicht genau so sein wie sie sein sollten und
daraus könnten DB-Fehler entstehen, die zu einem corrupten Datafile führen könnten. Mit
dem Befehl ANALYSE TABLE name VALIDATE STRUCTURE CASCADE; kann kontrolliert
werden, ob allen Daten OK sind. Sind sie es nicht, erscheint eine Fehlermeldung.
Um alle TOSCA-Tables zu validieren gibt es das Script @ALLANALS.SQL.
implizites Anchoring in Reports 2.5
3.3.99 PG
wenn zwei Felder im Reports Designer nahtlos aneinandergeschoben werden (z.B. mit dem
Align Objects) liefert das implizite Anchoring ev. nicht die erwarteten Resultate, da die Felder
schon als überlappend betrachtet werden. Deshalb immer einen minimalen Abstand lassen.
Bitmap-Indices
3.3.99 PG
Bitmap-Indices werden empfohlen bei Daten mit wenig Mtationen und vielen Zugriffen für
Felder mit wenigen unterschiedlichen Werten. Ist laut Doku ab 7.3.3. implementiert, aber
gemässt Hotline nicht im Workgroup-Server.
Zusammenschieben von leeren Feldern in Reports 2.5
3.3.99 PG
Damit der Platz von Feldern ohne Inhalt freigegeben wird und die gefüllten Felder
zusammengeschoben werden(z.B. in Adressen), muss deren Sizing in der gewünschten
Dimension variable sein (contract reicht nicht), und der Format-Trigger muss False liefern.
Trailing Blanks in Textfeldern in Forms
9.3.99 ms
Wenn in Feldern mit Format VARCHAR2(?) nur ein oder mehrere Space/Blanks/Hex20
stehen klappt das auf der DB hervorragend, d.h. das Feld wird als NOT NULL betrachtet.
Sobald aber dieses Feld in einem Form bearbeitet wird, übertragt Forms automatisch NULL
in dieses Feld, d.h. schneidet alle Trailing Blanks (Spaces von rechts) ab. Der Workaround
ist folgender: Im PRE-UPDATE-Trigger des Blocks im Form überträgt man ' ' ins Feld, sofern
es NULL ist.
Optimizer-Hints und Tabellennamen
4.3.99 PG
In einigen Optimizer-Hints (z.B. /*+ Index( tabellen-name indexname) */) müssen
Tabellennamen angegeben werden. Wenn im Statement die Tabelle aber einen Alias hat
(z.B. Select * from artikel ar) muss dieser anstelle des Tabellennamen angegeben werden.
job_rem
29.4.99 rn
wenn mit job_rem ein job aus der job_que gelöscht wird, muss auf dem sql explizit ein
‚commit‘ abgesetzt werden
CSI-Nr ab. 21.2.06: Support Identifier: 14723005
(role ist administrator)
zuständig für oracle-partner-fragen: hr. schwulera: 056 483 33 81
hotline (wenn z.b. service-request nicht vorwärts macht): 0800 85 68 50
WebCache, ProxyPass, Standalone OC4J (IAS / OAS)
02.08.07 ah
Beim Verwenden eines OC4J-Standalone Servers hinter dem OAS sind folgende Einträge im
httpd.conf des HTTP-Servers zentral.
ServerName ias.xyz.ch (nach aussen sichtbarer Name)
UseCanonicalName ON (damit werden die URLS im HTTP-Header mittles ServerName angepasst)
ProxyPass /Shop/ http://127.0.0.1:8888/shop/ (oder ähnlich)
ProxyPassReverse /Shop/ http://127.0.0.1:8888/shop/ (oder ähnlich)
Mit diesen Einträgen wird ein Request an den OC4J-Standalone (hier auf Port 8888) weitergeleitet
bzw. die Request von diesem angepasst.
Funktioniert mit WebCache, wenn dor ein Origin-Server konfiguriert ist, welcher die Request auf den
http-Server weiterleitet. Der Listen Port im httpd.conf muss mit dem des Origin-Servers
übereinstimmen.
Daraus folgt:
Request->WebCache->OriginServer (hier http-server)->ProxyPass->OC4J-Standalone und
umgekehrt.
Performance XML-Parser / Xpath
1.) oracle XPD -> xmlParserV2, ca. doppelt so schnell wie...
2.) CachedXPathAPI (Apache Xalan), ca 9x so schnell wie...
3.) Xpath aus Java 6 JDK
Testumgebung: Jutzler-PlanCD
1
CVS Root, Server Connection für Projekte anpassen, JDev CVS-Root Files in
einem Durchgang editieren.
Im JDev werden Projekte unter CVS mit der entsprechenden Verbindung abgespeichert.
Diese kann offensichtlich später nicht editiert werden. Ändern nun die Einstellungen für die
CVS-Verbindung so kann ein Projekt,,welches unter einer anderen Verbindung registriert
wurde, nicht mehr upgedatet oder commitet werden.
Die Referenz auf die Verbindung speichert Jdev im jeweiligen Projekt in jedem Verzeichnis,
welches Files beinhaltet, die unter CVS stehen. Es gibt also keinen zentralen Punkt wo die
Verbindung angepasst werden könnte.
Die Verbindung selbst steht im File root (welches aber eben mehrmals vorkommt).
Zum Anpassen dieser Files in einem Durchgang sind die AdvancedReplaceTools nützlich
(kleines Teil unter U:/Exes).
1. Dort kann man zuerst unter Options auswählen, dass versteckte Files angezeigt
weden sollen (CVS ist versteckt).
2. Dann kann über den Finder im Root-Verzeichnis des Projekts, nach root* gesucht
werden.
3. Mit der rechten Mausstaste können die Files aktiviert werden und
4. dann mittels Button in den Basket verschoben werden.
5. Dann springt man zum Bacht-Replacer.
6. Dort gibt man zuerst die Zeile ein, welche gesucht werden soll.
7.
Dann die Zeile (eben die neue Verbindung), welche die alte ersezten soll.
8. Dann add.
9. Dann alle Files im Basket selektieren und
10. Go.
Wenn alles richtig läuft sollten alle root-Files die neuen Einträge haben.
Das Projekt steht nun unter der neuen Verbindung im CVS.
Ein Beispiel für eine CVS-Verbindung ist:
:pserver:ds.lan\[email protected]:/cvsdefault
Compilieren im Batch führt zu Fehler: Can’t adjust form for output
23.09.08 at
Es gibt einen Bug in der 11g, das invalid Packages als valid markiert. Metalink 735368.1
Im Formsbuilder kann das Modul Kompiliert werden wenn in folgender Reihenfolge
kompiliert wird: <ctrl>+k,<gtrl>+<shift>+k, <ctrl>+t
Lösung: alle packages neu compilieren und hoffen das alle benötigten valid werden. Wegen
des BUGs kann es nicht verifiziert werden.
Alter Package <package_name> Compile;
Oder lt. ORACLE Patch 6899909 einspielen
Herunterladen