<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CC::Blog &#187; Oracle</title>
	<atom:link href="http://ccblog.de/category/oracle/feed/" rel="self" type="application/rss+xml" />
	<link>http://ccblog.de</link>
	<description>Nur ein weiteres kleines unbedeutendes Blog</description>
	<lastBuildDate>Sat, 21 Jan 2012 05:41:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Password expired unter Solaris</title>
		<link>http://ccblog.de/2011/10/26/password-expired-unter-solaris/</link>
		<comments>http://ccblog.de/2011/10/26/password-expired-unter-solaris/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 08:10:32 +0000</pubDate>
		<dc:creator>Joerg</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[abgelaufen]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[expired]]></category>
		<category><![CDATA[has been expired]]></category>
		<category><![CDATA[passwd]]></category>
		<category><![CDATA[Password]]></category>
		<category><![CDATA[solaris]]></category>

		<guid isPermaLink="false">http://ccblog.de/?p=456</guid>
		<description><![CDATA[Kennwort unter Solaris "expired" ?

Beim Login per ssh per key-auth kommt nix, und bei einem su - xxx kommt die Meldung "Password for user 'xxx' has expired - use passwd(1) to update it" ? Da gibts eine Loesung:

Einfach auf der Shell (als anderer User) das Tool "login" aufrufen, mit den "alten" Credentials einloggen, und ...]]></description>
			<content:encoded><![CDATA[<p class="wp-flattr-button"></p><p>Kennwort unter Solaris &#8220;expired&#8221; ?</p>
<p>Beim Login per ssh per key-auth kommt nix, und bei einem su &#8211; xxx kommt die Meldung &#8220;Password for user &#8216;xxx&#8217; has expired &#8211; use passwd(1) to update it&#8221; ? Da gibts eine Loesung:</p>
<p>Einfach auf der Shell (als anderer User) das Tool &#8220;login&#8221; aufrufen, mit den &#8220;alten&#8221; Credentials einloggen, und schont kommt der Password-Change-Prompt. Gut versteckt das ganze !</p>
 <p><a href="http://ccblog.de/?flattrss_redirect&amp;id=456&amp;md5=1592763167ce00c04b865407d6e0cc33" title="Flattr" target="_blank"><img src="http://ccblog.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://ccblog.de/2011/10/26/password-expired-unter-solaris/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spaltenweises Sortieren in Oracle</title>
		<link>http://ccblog.de/2010/02/17/spaltenweises-sortieren-in-oracle/</link>
		<comments>http://ccblog.de/2010/02/17/spaltenweises-sortieren-in-oracle/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 19:43:55 +0000</pubDate>
		<dc:creator>Joerg</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Columnwise]]></category>
		<category><![CDATA[order by]]></category>
		<category><![CDATA[Pivot]]></category>
		<category><![CDATA[sortieren]]></category>
		<category><![CDATA[spalten]]></category>
		<category><![CDATA[spaltenweise]]></category>
		<category><![CDATA[table]]></category>
		<category><![CDATA[zeilen]]></category>
		<category><![CDATA[zeilen zu spalten]]></category>

		<guid isPermaLink="false">http://ccblog.de/?p=301</guid>
		<description><![CDATA[Gegeben sei folgende Tabelle:



Wert
Orderer


A
10


B
20


C
30


D
40


E
50


F
60


G
70


H
80


I
90



Nun mal angenommen folgendes möchten wir irgendwie aus der DB bekommen (Um eine 3 spaltige Tabelle mit tr,td aufzubauen:



Wert
Wert
Wert


A
D
G


B
E
H


C
F
I



Dann benötigen wir die Daten ja in folgender Reihenfolge:

A,D,G,B,E,H,C,F,I

Nach langem herumprobieren habe ich alle Versuche über Bord geworfen, und bin zu folgendem, suboptimalen (aufgrund der Subselects), Ergebnis gekommen:


SELECT   wert
FROM   ...]]></description>
			<content:encoded><![CDATA[<p class="wp-flattr-button"></p><p>Gegeben sei folgende Tabelle:</p>
<table border="1">
<tbody>
<tr>
<th>Wert</th>
<th>Orderer</th>
</tr>
<tr>
<td>A</td>
<td>10</td>
</tr>
<tr>
<td>B</td>
<td>20</td>
</tr>
<tr>
<td>C</td>
<td>30</td>
</tr>
<tr>
<td>D</td>
<td>40</td>
</tr>
<tr>
<td>E</td>
<td>50</td>
</tr>
<tr>
<td>F</td>
<td>60</td>
</tr>
<tr>
<td>G</td>
<td>70</td>
</tr>
<tr>
<td>H</td>
<td>80</td>
</tr>
<tr>
<td>I</td>
<td>90</td>
</tr>
</tbody>
</table>
<p>Nun mal angenommen folgendes möchten wir irgendwie aus der DB bekommen (Um eine 3 spaltige Tabelle mit tr,td aufzubauen:</p>
<table border="1">
<tbody>
<tr>
<th>Wert</th>
<th>Wert</th>
<th>Wert</th>
</tr>
<tr>
<td>A</td>
<td>D</td>
<td>G</td>
</tr>
<tr>
<td>B</td>
<td>E</td>
<td>H</td>
</tr>
<tr>
<td>C</td>
<td>F</td>
<td>I</td>
</tr>
</tbody>
</table>
<p>Dann benötigen wir die Daten ja in folgender Reihenfolge:</p>
<p>A,D,G,B,E,H,C,F,I</p>
<p>Nach langem herumprobieren habe ich alle Versuche über Bord geworfen, und bin zu folgendem, suboptimalen (aufgrund der Subselects), Ergebnis gekommen:</p>
<p><code><br />
SELECT   wert<br />
FROM   (SELECT   wert,<br />
x,<br />
ROW_NUMBER () OVER (PARTITION BY x ORDER BY orderer) AS y<br />
FROM   (SELECT   wert,<br />
orderer,<br />
NTILE (:3) OVER (ORDER BY orderer) AS x<br />
FROM   tabelle))<br />
ORDER BY   y, x</code></p>
<p>Hat jemand einen besseren Vorschlag&#8230; Ich meine: Funktionieren tut das ganze (In BIND-Variable 3 wird die Anzahl der Spalten übergeben). Aber Sexy geht irgendwie anders&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://ccblog.de/2010/02/17/spaltenweises-sortieren-in-oracle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>In Oracle ueber Zeilen hinweg Strings verbinden</title>
		<link>http://ccblog.de/2009/10/07/in-oracle-ueber-zeilen-hinweg-strings-verbinden/</link>
		<comments>http://ccblog.de/2009/10/07/in-oracle-ueber-zeilen-hinweg-strings-verbinden/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 15:39:24 +0000</pubDate>
		<dc:creator>Joerg</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://ccblog.de/?p=228</guid>
		<description><![CDATA[Auch nett...

wer weiss wofuer man es mal gebrauchen kann.

Gegeben sei folgende Tabelle:
SQL&#62; SELECT deptno, ename FROM emp ORDER BY deptno, ename;

DEPTNO ENAME
------ ----------
    10 CLARK
    10 KING
    10 MILLER
    20 ADAMS
    20 FORD
    20 JONES
  ...]]></description>
			<content:encoded><![CDATA[<p class="wp-flattr-button"></p><p>Auch nett&#8230;</p>
<p>wer weiss wofuer man es mal gebrauchen kann.</p>
<p>Gegeben sei folgende Tabelle:</p>
<pre>SQL&gt; SELECT deptno, ename FROM emp ORDER BY deptno, ename;

DEPTNO ENAME
------ ----------
    10 CLARK
    10 KING
    10 MILLER
    20 ADAMS
    20 FORD
    20 JONES
    20 SCOTT
    20 SMITH
    30 ALLEN
    30 BLAKE
    30 JAMES
    30 MARTIN
    30 TURNER
    30 WARD

14 rows selected.</pre>
<p>Wir moechten jetzt die Employees zu einem department aber in je einer Zeile haben. Man nehme: wm.concat aus wmsys</p>
<pre>SELECT deptno,wmsys.wm_concat(dname) departments FROM dept group by deptno;

    DEPTNO CONCATENATED
---------- --------------------------------------------------
        10 CLARK,KING,MILLER
        20 ADAMS,FORD,JONES,SCOTT,SMITH
        30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD
...</pre>
<p>Ist doch schick, oder ?</p>
]]></content:encoded>
			<wfw:commentRss>http://ccblog.de/2009/10/07/in-oracle-ueber-zeilen-hinweg-strings-verbinden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Update von DBD::Oracle und das disconnect Verhalten bei mod_perl</title>
		<link>http://ccblog.de/2008/09/03/update-von-dbdoracle-und-das-disconnect-verhalten-bei-modperl/</link>
		<comments>http://ccblog.de/2008/09/03/update-von-dbdoracle-und-das-disconnect-verhalten-bei-modperl/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 05:17:39 +0000</pubDate>
		<dc:creator>Joerg</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://ccblog.de/?p=202</guid>
		<description><![CDATA[Ein Update des DBD::Oracle Treibers von 1.16 auf 1.21 klingt zunaechst unspektakulaer. Aber wie so oft steckt der Teufel im Detail. Benutzt man nämlich persistente Verbindungen unter mod_perl mit dem Modul Apache::DBI, ändert sich das Verhalten beim disconnecten von der DB. In der Regel cached das mod_perl die Verbindungen ja, daran hat sich auch ...]]></description>
			<content:encoded><![CDATA[<p class="wp-flattr-button"></p><p>Ein Update des DBD::Oracle Treibers von 1.16 auf 1.21 klingt zunaechst unspektakulaer. Aber wie so oft steckt der Teufel im Detail. Benutzt man nämlich persistente Verbindungen unter mod_perl mit dem Modul Apache::DBI, ändert sich das Verhalten beim disconnecten von der DB. In der Regel cached das mod_perl die Verbindungen ja, daran hat sich auch nichts geaendert.</p>
<p>Bei der 1.16er Version jedoch impliziert das disconnect ein commit. Das hängt laut Modul-Doku von gutdünken des (Modul-)Entwicklers ab. Hat man seine Applikation jetzt darauf ausgerichtet, dann macht man nie ein Commit (sollte man nicht tun !). Dumm nur, dass dieses Verhalten bei der 1.21er geändert wurde. Nun impliziert das Modul beim disconnecten nämlich ein Rollback. Und das macht es selbst dann, wenn ein commit vorrausgeht.</p>
<p>Im ersten Ansatz ist das verschmerzbar. Wenn die DB allerdings, selbst bei Skripten die nur SELECTen, jedesmal mit einem Rollback belaestigt wird, kommt da schon einiges zusammen. Das Verhalten lässt sich mit folgendem &#8220;Workaround&#8221; aendern:</p>
<p>Aus einem <code>$dbh-&gt;disconnect()</code> wird ab sofort ein<br />
<code><br />
$dbh-&gt;{AutoCommit}=1;<br />
$dbh-&gt;disconnect();<br />
</code><br />
Das AutoCommit wird also kurz vorm disconnecten gesetzt, und beeinflusst das sonstige Rollback/Commit-Verhalten im gesamten Skript ueberhaupt nicht. Sobald ein neues Connect (auch in einer persistenten mod_perl Umgebung) kommt, werden (auch bei gecachter DB-Verbindung) die Parameter AutoCommit, etc., eh neu gesetzt. Damit verhält sich alles wieder wie vorher.</p>
]]></content:encoded>
			<wfw:commentRss>http://ccblog.de/2008/09/03/update-von-dbdoracle-und-das-disconnect-verhalten-bei-modperl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aggregationen mit anderen Zeitwerten als to_date</title>
		<link>http://ccblog.de/2008/08/28/aggregationen-mit-anderen-zeitwerten-als-to_date/</link>
		<comments>http://ccblog.de/2008/08/28/aggregationen-mit-anderen-zeitwerten-als-to_date/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 19:22:09 +0000</pubDate>
		<dc:creator>Joerg</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://ccblog.de/?p=197</guid>
		<description><![CDATA[Schon mal versucht einen Aggregations-SQL nach anderen Werten als den Format-Strings die mit to_date, to_char benutzt werden duerfen zu bauen ?

Ist garnicht so simpel. Ein
select count(*),attribut,to_char(creationdate,'DD.MM.YYYY')
 from tabelle
 group by attribut,trunc(creationdate,'DD.MM.YYYY')
ist noch fuer jedermann verstaendlich. Auch wenn man nach Stunden gruppieren will, geht das noch schmerzfrei ('HH'). Was aber wenn man auf 15Minuten Ebene ...]]></description>
			<content:encoded><![CDATA[<p class="wp-flattr-button"></p><p>Schon mal versucht einen Aggregations-SQL nach anderen Werten als den Format-Strings die mit to_date, to_char benutzt werden duerfen zu bauen ?</p>
<p>Ist garnicht so simpel. Ein</p>
<pre><code>select count(*),attribut,to_char(creationdate,'DD.MM.YYYY')
 from tabelle
 group by attribut,trunc(creationdate,'DD.MM.YYYY')</code></pre>
<p>ist noch fuer jedermann verstaendlich. Auch wenn man nach Stunden gruppieren will, geht das noch schmerzfrei (&#8216;HH&#8217;). Was aber wenn man auf 15Minuten Ebene Aggregieren soll ? Ohne Kunstgriff geht es nicht. Hier der to_date String:</p>
<pre><code> to_date(to_char(sysdate,'DD.MM.YYYY') ||
         ' ' ||
         trunc(to_number(to_char(sysdate,'SSSSS'))/900)*900,
         'DD.MM.YYYY SSSSS')</code></pre>
<p>Was passiert hier ?</p>
<p>Zunächst wird die aktuelle Zeit (im Select ist es natuerlich das zu gruppierende Feld) in Sekunden nach Mitternacht umgewandelt. Nun dividieren wir das Ergebniss durch 900 (15 Minuten = 900 Sekunden) und schnibbeln die Nachkommastellen ab. Anschliessend das ganze wieder mit 900 Multiplizieren, und wir haben jede Erdenkliche Uhrzeit auf die letzte Viertelstunde (ab-)gerundet. (Schlaue Menschen koennten jetzt sagen, Mensch Joerch, nimm doch DIV, MOD gibts unter Oracle schliesslich auch -&gt; DIV gibts leider NICHT). So, jetzt packen wir noch das Datum wieder davor (ist ja durch die Umwandlung in Sek. nach Mitternacht verloren gegangen) und konvertieren das ganze wieder in ein Datum. Fertig ist der Viertelstundenaggregator <img src='http://ccblog.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Bezogen auf das obige Beispiel lautet unserer (zugegebenermassen unlesbarerer Spruch) wie folgt:</p>
<pre><code>
select count(*),attribut,
 to_date(to_char(creationdate,'DD.MM.YYYY') ||
         ' ' ||
         trunc(to_number(to_char(creationdate,'SSSSS'))/900)*900,
         'DD.MM.YYYY SSSSS')
 from tabelle
 group by attribut,
 to_date(to_char(creationdate,'DD.MM.YYYY') ||
         ' ' ||
         trunc(to_number(to_char(creationdate,'SSSSS'))/900)*900,
         'DD.MM.YYYY SSSSS')
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://ccblog.de/2008/08/28/aggregationen-mit-anderen-zeitwerten-als-to_date/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shrinken von Oracle LOBs</title>
		<link>http://ccblog.de/2008/04/16/shrinken-von-oracle-lobs/</link>
		<comments>http://ccblog.de/2008/04/16/shrinken-von-oracle-lobs/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 05:21:57 +0000</pubDate>
		<dc:creator>Joerg</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://ccblog.de/?p=182</guid>
		<description><![CDATA[LOBs unter Oracle sind, wie schon an einigen Stellen im Blog hier erwaehnt, wirklich eine suboptimale Storage-Loesung unter Oracle. Vor allem, wenn eine solche Tabelle auch noch alle x Monate bereinigt werden soll. Nach dem entsprechenden DELETE belegt das LOBSEGMENT naemlich immer noch gut Platz auf dem Tablespace. Was bei "normalen" Tabellen ueber ein ...]]></description>
			<content:encoded><![CDATA[<p class="wp-flattr-button"></p><p>LOBs unter Oracle sind, wie schon an einigen Stellen im Blog hier erwaehnt, wirklich eine suboptimale Storage-Loesung unter Oracle. Vor allem, wenn eine solche Tabelle auch noch alle x Monate bereinigt werden soll. Nach dem entsprechenden DELETE belegt das LOBSEGMENT naemlich immer noch gut Platz auf dem Tablespace. Was bei &#8220;normalen&#8221; Tabellen ueber ein &#8220;ALTER TABLE ENABLE ROW MOVEMENT&#8221; mit anschliessendem &#8220;ALTER TABLE SHRINK SPACE&#8221; geht, ist bei LOBSEGMENTEN nicht ganz so simpel. Und weil ich die beiden Sprueche immer wieder verwechsele, schreibe ich Sie jetzt hier auf:</p>
<p>Gegeben sei ein Table &#8220;DATASTORE&#8221; mit einem LOB der &#8220;FILEDATA&#8221; heisst.</p>
<p>Nur Shrinken (Nicht Highwatermark zuruecksetzen, also auch nicht Table &#8220;locken&#8221;):</p>
<p>SQL&gt; alter table datastore modify lob (filedata) (shrink space compact);</p>
<p>Im Anschluss Highwatermark zuruecksetzen / Bzw. direkt vollstaendig shrinken (VORSICHT: Table wird gelockt):</p>
<p>SQL&gt;alter table datastore modify lob (filedata) (shrink space);</p>
<p>PS: Das ganze laesst sich noch mit einem CASCADE erweitern, was dann bedeutet dass auch unterliegende Objekte mit geshrinkt werden (Indizes, etc.)</p>
]]></content:encoded>
			<wfw:commentRss>http://ccblog.de/2008/04/16/shrinken-von-oracle-lobs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruhe im Karton</title>
		<link>http://ccblog.de/2007/11/19/ruhe-im-karton/</link>
		<comments>http://ccblog.de/2007/11/19/ruhe-im-karton/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 19:13:39 +0000</pubDate>
		<dc:creator>Joerg</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://ccblog.de/2007/11/19/ruhe-im-karton/</guid>
		<description><![CDATA[Schön dieses RAID. Hat nur einen Schönheitsfehler. Alle Nasen lang (genau genommen ca. alle 3 sekunden) rödeln die Platten ohne ersichtlichen Grund los. Nachdem ich erst das commit-interval des Filesystems im Verdacht hatte, dieses sich aber nicht bestätigt hatte, habe ich mir die, auf dem RAID laufende, ORACLE mal vorgenommen. (Was ein Schachtelsatz ;-))
Bingo!
Anscheinend ...]]></description>
			<content:encoded><![CDATA[<p class="wp-flattr-button"></p><p>Schön dieses RAID. Hat nur einen Schönheitsfehler. Alle Nasen lang (genau genommen ca. alle 3 sekunden) rödeln die Platten ohne ersichtlichen Grund los. Nachdem ich erst das commit-interval des Filesystems im Verdacht hatte, dieses sich aber nicht bestätigt hatte, habe ich mir die, auf dem RAID laufende, ORACLE mal vorgenommen. (Was ein Schachtelsatz <img src='http://ccblog.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> )<br />
Bingo!<br />
Anscheinend schreibt die DB in kurzen Intervallen etwas in Ihre control-Files.<br />
Wie verlegt man jetzt aber so ein ControlFile bei einer bereits betankten Datenbank ??<br />
Nun auch hier gibts es eine Lösung. Also noch ein (Superkurzes) Mini-Howto im CCBlog-Style:</p>
<p>1. PFile erzeugen (siehe <a href="http://ccblog.de/2007/01/31/kleines-oracle-spfile-pfile-howto/">hier</a> im Blog)<br />
2. DB herunterfahren (shutdown immediate)<br />
3. Control-Files an die neue Stelle bewegen (per mv)<br />
4. PFile editieren. Und zwar die Stelle &#8220;controlfiles&#8221; &#8211; hier der DB die NEUE Position bekanntgeben<br />
5. SPFile bauen (siehe <a href="http://ccblog.de/2007/01/31/kleines-oracle-spfile-pfile-howto/">hier</a> im Blog)<br />
6. DB wieder hochfahren (startup).<br />
7. Fertig</p>
<p>Vorsichtshalber habe ich die REDO-Logs auch noch auf die ungeRAIDete Platte verschoben &#8211; ist eh schneller <img src='http://ccblog.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://ccblog.de/2007/11/19/ruhe-im-karton/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drifting Oracle Jobs</title>
		<link>http://ccblog.de/2007/04/14/drifting-oracle-jobs/</link>
		<comments>http://ccblog.de/2007/04/14/drifting-oracle-jobs/#comments</comments>
		<pubDate>Sat, 14 Apr 2007 03:39:50 +0000</pubDate>
		<dc:creator>Joerg</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://ccblog.de/2007/04/14/drifting-oracle-jobs/</guid>
		<description><![CDATA[Oracle-Jobs via DBMS_JOB sind eine feine Sache. Würde nur nicht das Intervall erst am Ende, also nach der Ausführung des Jobs, gesetzt werden.
Das nervt. Also wenn man einen Job hat, der sagen wir alle 10 Minuten laufen soll, so verschiebt sich die Ausführung grundsätzlich um die Zeit, die der Job selbst zur Abarbeitung benötigt. ...]]></description>
			<content:encoded><![CDATA[<p class="wp-flattr-button"></p><p>Oracle-Jobs via DBMS_JOB sind eine feine Sache. Würde nur nicht das Intervall erst am <strong>Ende</strong>, also nach der Ausführung des Jobs, gesetzt werden.<br />
Das nervt. Also wenn man einen Job hat, der sagen wir alle 10 Minuten laufen soll, so verschiebt sich die Ausführung grundsätzlich um die Zeit, die der Job selbst zur Abarbeitung benötigt. Das heisst, bei einem 60sek. Job, der via Intervall &#8220;sysdate+(1/1440)&#8221; alle 10min laufen soll, und um, sagen wir 10:10 das erste mal rennt, beginnt dieser die nächsten Ausführungen um 10:21, 10:32 usw&#8230;</p>
<p>Abhilfe schafft ein wenig Mathematik im Intervall:</p>
<p>Man nehme:<br />
to_date(<br />
floor(<br />
to_number(<br />
to_char(sysdate,&#8217;YYYYMMDDHH24MI&#8217;)<br />
)/10<br />
)*10,&#8217;YYYYMMDDHH24MI&#8217;<br />
)+10/1440</p>
<p>Was passiert hier ?<br />
- Das Datum wird MSB -&gt; LSB geholt und durch 10 geteilt. Bedeutet die &#8220;Minute&#8221; steht hinter dem Komma.<br />
- Jetzt nutzen wir &#8220;FLOOR&#8221; um alles hinter dem Komma auf &#8220;0&#8243; zu setzen.<br />
- Das ganze wieder mal 10 nehmen, um die 0 vor das Komma zu bekommen<br />
- Jetzt noch in ein Datum konvertieren und das 10min. Intervall (+(10/1440)) draufschlagen<br />
- Fertig.</p>
<p>Doch Vorsicht: Bei Jobs die länger als 10min. laufen, könnte das nächste Intervall in der Vergangenheit liegen ;-(</p>
]]></content:encoded>
			<wfw:commentRss>http://ccblog.de/2007/04/14/drifting-oracle-jobs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Materialized Views</title>
		<link>http://ccblog.de/2007/04/11/materialized-views/</link>
		<comments>http://ccblog.de/2007/04/11/materialized-views/#comments</comments>
		<pubDate>Wed, 11 Apr 2007 17:37:05 +0000</pubDate>
		<dc:creator>Joerg</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://ccblog.de/2007/04/11/materialized-views/</guid>
		<description><![CDATA[Böse Böse ...
Ein netter Tip, der da von Muniqsoft publiziert wurde. 
Kurzfassung: Mit Hilfe einer Materialized View, die "on Commit" refreshed wird, und auf die dann via "Query rewrite" zugegriffen wird, grosse Aggregationen etwas zügiger von Statten gehen zu lassen. 
Irgendwie ging der Schuss bei mir allerdings VOLL nach hinten los. Die gute DB ...]]></description>
			<content:encoded><![CDATA[<p class="wp-flattr-button"></p><p>Böse Böse &#8230;<br />
Ein netter Tip, der da von <a href="http://www.muniqsoft.de/tipps/monatstipps/monattipps_2003.htm#September">Muniqsoft</a> publiziert wurde.<br />
Kurzfassung: Mit Hilfe einer Materialized View, die &#8220;on Commit&#8221; refreshed wird, und auf die dann via &#8220;Query rewrite&#8221; zugegriffen wird, grosse Aggregationen etwas zügiger von Statten gehen zu lassen.<br />
Irgendwie ging der Schuss bei mir allerdings VOLL nach hinten los. Die gute DB hat, gemäss Ihrem Auftrag, fein bei jedem Commit einen FULL TABLE SCAN (auf &#8216;ne halbe Mio. Rows) durchgeführt und damit die DB extremst in die Tiefe gezogen&#8230; Na super. Droppen liess sich das gute Stück auch nicht mehr, weil: War ja gelocked durch das andauernde Commit der User <img src='http://ccblog.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Was lernen wir daraus: Nicht alles was gut aussieht, tut auch gut&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://ccblog.de/2007/04/11/materialized-views/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle 10.2.0.3 und Binding</title>
		<link>http://ccblog.de/2007/03/29/oracle-10203-und-binding/</link>
		<comments>http://ccblog.de/2007/03/29/oracle-10203-und-binding/#comments</comments>
		<pubDate>Thu, 29 Mar 2007 19:12:27 +0000</pubDate>
		<dc:creator>Joerg</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://ccblog.de/2007/03/29/oracle-10203-und-binding/</guid>
		<description><![CDATA[Oha...
Nicht alles wird gut wenn man von einer 10.1 auf 10.2 updaten will. So steigt die Ora-DB bei der Einstellung "CURSOR_SHARING=FORCE" in manchen Fällen nach einem SQL-Statement mit ORA-01008 (not all variables bound) aus, obwohl alle Variablen brav gebunden sind.
Workaround: CURSOR_SHARING auf "EXACT" stellen, sofern möglich. Oder halt auf ein Fixing des Bugs mit ...]]></description>
			<content:encoded><![CDATA[<p class="wp-flattr-button"></p><p>Oha&#8230;<br />
Nicht alles wird gut wenn man von einer 10.1 auf 10.2 updaten will. So steigt die Ora-DB bei der Einstellung &#8220;CURSOR_SHARING=FORCE&#8221; in manchen Fällen nach einem SQL-Statement mit ORA-01008 (not all variables bound) aus, obwohl alle Variablen brav gebunden sind.<br />
Workaround: CURSOR_SHARING auf &#8220;EXACT&#8221; stellen, sofern möglich. Oder halt auf ein Fixing des Bugs mit der Nummer #5863277 warten (siehe <a href="http://metalink.oracle.com">Metalink</a>) </p>
<p>PS: Der Fehler tritt nur mit dem neuesten Patchset, also der 10.2.0.3 auf&#8230;</p>
<p><strong>Nachtrag: </strong>Es gibt einen Patch bei Oracle im Metalink &#8211; Knappe 80kB gross patcht das Teil den Ora-Kernel und danach sollte es wieder tun&#8230; Der Fehler trat übrigens nur bei Zugriff via OCI o.ä. auf. Böse wenn man mit DBD::Oracle unter Perl arbeitet.</p>
]]></content:encoded>
			<wfw:commentRss>http://ccblog.de/2007/03/29/oracle-10203-und-binding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

