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